Apache for Django 1.10的共享主机设置

时间:2016-08-15 14:05:49

标签: python django apache mod-wsgi shared-hosting

我们正在寻找一种干净且孤立的方式,在Ubuntu 14.04上使用vhosts在单个Apache上托管多个Django站点。

关注文档https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/#using-mod-wsgi-daemon-modeWhere should WSGIPythonPath point in my virtualenv?,我们设置了以下设置:

拥有mod_wsgi

的全局virtualenv
virtualenv -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”

如何正确设置?

1 个答案:

答案 0 :(得分:0)

总结格雷厄姆·杜普顿的回答

  • mod_wsgi 4.5.4被Python3打破了。 4.5.5修复它。
  • 可以为虚拟主机(使用包python-home)设置Python virtualenv,但建议使用python-path选项而不是WSGIRestrictEmbedded On来设置Python virtualenv。< / LI>
  • 建议根据http://blog.dscpl.com.au/2009/11/save-on-memory-with-modwsgi-30.html
  • 设置/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;