我们正在寻找一种干净且孤立的方式,在Ubuntu 14.04上使用vhosts在单个Apache上托管多个Django站点。
关注文档https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/#using-mod-wsgi-daemon-mode 和Where should WSGIPythonPath point in my virtualenv?,我们设置了以下设置:
拥有mod_wsgi
的全局virtualenvvirtualenv -p /usr/bin/python3 /home/admin/vhosts_venv
. vhosts_venv/bin/activate
pip install mod-wsgi
sudo /home/admin/vhosts_venv/bin/mod_wsgi-express install-module
sudo vi /etc/apache2/mods-available/wsgi_express.load
补充道:
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so
然后有一个vhost venv和一个基本应用程序:
virtualenv -p /usr/bin/python3 /home/admin/vhost1_venv
. vhost1_venv/bin/activate
pip install Django
pip install PyMySQL
django-admin startproject vhost1
cd vhost1
python manage.py startapp main
使用以下命令设置主机解析:
sudo vi /etc/hosts
更新:
127.0.0.1 localhost vhost1.example.com
使用以下命令设置Apache vhost:
<VirtualHost vhost1.example.com:80>
ServerName vhost1.example.com
ServerAlias example.com
ServerAdmin webmaster@localhost
#DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
CustomLog ${APACHE_LOG_DIR}/vhost1_access.log combined
WSGIProcessGroup vhost1.example.com
WSGIScriptAlias / /home/admin/vhost1/vhost1/wsgi.py process-group=vhost1.example.com
WSGIDaemonProcess vhost1.example.com user=www-data group=www-data threads=25 python-path=/home/admin/vhost1:/home/admin/vhost1_venv/lib/python3.4/site-packages:/home/admin/vhosts_venv/lib/python3.4/site-packages
<Directory /home/admin/vhost1>
<Files wsgi.py>
<IfVersion < 2.3>
Order deny,allow
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Files>
</Directory>
</VirtualHost>
启用所有内容:
sudo a2enmod wsgi_express
sudo a2ensite vhost1
sudo service apache2 restart
测试时,我们得到2个单一卷曲请求的答案,在2个时间内交付(有时候每个时间间隔为0.5秒):
curl vhost1.example.com
有效!祝贺你的第一个Django页面。
当然,你还没有做过任何工作。接下来,开始吧 第一个应用程序通过运行python manage.py startapp [app_label]。
您正在看到此消息,因为您的DEBUG = True Django设置文件,您还没有配置任何URL。开始工作!
直接跟随:
内部服务器错误
服务器遇到内部错误或配置错误 无法完成您的请求。
请与网站管理员@ localhost的服务器管理员联系 告知他们此错误发生的时间以及您的行为 在此错误之前执行。
有关此错误的详细信息可能在服务器错误中可用 登录。位于vhost1.example.com端口80的Apache / 2.4.7(Ubuntu)服务器
在/var/log/apache2/error.log
中,我们得到:
[Mon Aug 15 15:37:42.754139 2016] [核心:通知] [pid 18622:tid 140151787534208] AH00051:子pid 18717退出信号分段 fault(11),/ etc / apache2中可能的coredump
和/var/log/apache2/vhost1_access.log
:
127.0.0.1 - - [15 / Aug / 2016:15:37:42 +0200]“GET / HTTP / 1.1”500 2593“ - ”“curl / 7.35.0”
如何正确设置?
答案 0 :(得分:0)
总结格雷厄姆·杜普顿的回答
python-home
)设置Python virtualenv,但建议使用python-path
选项而不是WSGIRestrictEmbedded On
来设置Python virtualenv。< / LI>
/etc/apache2/mods-available/wsgi_express.conf
WSGIRestrictEmbedded On
看起来像:
/etc/apache2/sites-available/vhost1.conf
<VirtualHost vhost1.example.com:80>
ServerName vhost1.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
CustomLog ${APACHE_LOG_DIR}/vhost1_access.log combined
WSGIDaemonProcess vhost1.example.com threads=15 python-home=/home/admin/vhost1_venv python-path=/home/admin/vhost1
WSGIScriptAlias / /home/admin/vhost1/vhost1/wsgi.py process-group=vhost1.example.com application-group=%{GLOBAL}
<Directory /home/admin/vhost1>
<Files wsgi.py>
<IfVersion < 2.3>
Order deny,allow
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Files>
</Directory>
</VirtualHost>
看起来像:
@Id
@SequenceGenerator(name = "MY_GEN_NAME", sequenceName = "MY_SQ_NAME")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "MY_GEN_NAME")
@Column(name = "ID", nullable = false)
private Long id;