【问题标题】:Deploy Django Server on Apache+Ubuntu on a special port在 Apache+Ubuntu 上的特殊端口上部署 Django 服务器
【发布时间】:2015-02-19 23:35:58
【问题描述】:

我为大学做了一个简单的 Django 项目。

现在我想在我自己托管的虚拟服务器上显示它,比如www.myserver.com:8001

我正在使用 Ubuntu 14.04 和 apache2。

/etc/apache/site-available我有一个名为:uniproject.conf的con文件

<VirtualHost *:8001>
        DocumentRoot "/var/www/uniproject/"
        Servername www.myserver.com:8001
        Alias /static /var/www/uniproject/static/
        WSGIScriptAlias / /var/www/uniproject/uniproject.wsgi
        <Directory /var/www/uniproject/>
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

/etc/apache2/ports.conf 我写了Listen 8001

/var/www/uniproject/uniproject.wsgi

import os
import sys
sys.path = ['/var/www/uniproject'] + sys.path
os.environ['DJANGO_SETTINGS_MODULE'] = 'uniproject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

a2ensite uniproject.confservice apache2 restart 之后我打电话给www.myserver.com:8001 来了

Not Found
The requested URL / was not found on this server.

我的目标是稍后在我的网站上运行三到五个 django 应用程序/服务器,例如 www.myserver.com:8001www.myserver.com:8002www.myserver.com:8003,等等... 但我做错了什么?

我正在使用没有 virtualenv 的 Django 1.7.1

Apache 日志说:

目标 WSGI 脚本未找到或无法统计:/var/www/uniproject,引用者:http://www.myserver.com:8001/

/var/www/uniproject中的文件结构为:

  • db3.sqlite
  • uniproject
  • uniprojectBackend
  • uniprojectwsgi
  • manage.py
  • 静态
  • 模板

/var/www/uniproject/uniproject中是创建新项目时默认的django文件(setting.pyurls.pywsgi.py__init__.py

drwxr-xr-x  7 root root  4096 Dec 21 21:50 uniproject

【问题讨论】:

  • Apache 应该在它的日志中记录一些关于它的内容。如果您在此处复制相关行,那将非常有帮助,因为可能有多种原因。
  • 日志条目表明它与端口无关,但找不到uniproject目录。该目录是否存在,具有权限,因此 apache 用户可以看到它?您是否尝试过没有端口的相同设置?

标签: python django apache ubuntu


【解决方案1】:

好的,这就是我解决问题的方法。 我现在禁用端口的东西并改用子域。

HOWTO:“在 Ubuntu 14.04 上运行的 Apache2 上部署各种数量的 Django 应用程序第一:

cd /etc/apache2/site-available
sudo nano someproject.conf

在 someproject.conf 中:

<VirtualHost *:80>
ServerName someproject.mysite.com
ServerAlias www.someproject.myssite.com
DocumentRoot "/var/www/someproject/"
Alias /static /var/www/someproject/static/
WSGIScriptAlias / /var/www/someproject/wsgi.py
<Directory /var/www/someproject/>
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

在那次运行之后:

sudo a2ensite someproject.conf
sudo service apache2 restart

第二个:

cd /var/www/
django-admin.py startproject someproject
cd someproject
sudo nano wsgi.py

在 wsgi.py 中

import os
import sys

path = '/var/www/someproject'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'someproject.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

现在访问:someproject.mysite.com

这是用 django 1.7.1 完成的 确保还安装了所有 python 模块(例如 lxml、提要解析器等)

有时在settings.py中会有一个错误(发生在我身上)

在 settings.py 中删除或评论:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    #'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

在 django 项目中每次编辑后运行

sudo service apache2 reload

希望这对任何人都有帮助。

通过这种方法,我在我的虚拟机上运行了三个 django 服务器/应用程序。

【讨论】:

    猜你喜欢
    • 2014-12-02
    • 2015-02-08
    • 2016-08-10
    • 2017-09-03
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多