使用Apache服务器mod_wsgi模式部署Django
目前部署Django有多种模式,官方推荐wsgi方式。根据本次部署,现总结部署过程。
部署目标
使用virtualenv环境,mod_wsgi及virtualHost部署Django应用
部署过程
1. 安装Apache服务器(略)
2. 安装mod_wsgi模块(略)
本次部署使用CentOS7,Apache 2.4.6,安装完成后配置文件位置为/etc/httpd下,其中conf文件夹中为主配置文件,conf.module.d文件夹中为模块配置文件,成功安装mod_wsgi模块后会出现相应的配置文件.
3. 安装virtualenv(略)
4. 新建virtualenv运行环建django-env并安装依赖包(略)
5. 上传网站文件和处理静态文件
在服务器新建文件夹,上传所有网站文件到该文件夹。并且新建文件夹S用于提取静态文件(建议该文件夹建在网站文件夹下),修改django的setting.py文件,增加配置项
STATIC_ROOT = '/data/XXXXX'
将路劲指向新建的静态文件夹S,在网站根目录运行
python manage.py collectstatic
命令,将所有静态文件提取至该目录。
6. 配置Apache服务器
由于本次配置准备使用virtualhost方式,故首先编辑/etc/httpd/conf/httpd.conf文件,在文件最后增加
Include conf/vhosts/*.conf
之后再/etc/httpd/conf文件夹下新建文件夹vhosts,再在该文件夹下新建XXX.conf文件。编辑XXX.conf文件,输入以下内容:
WSGISocketPrefix /var/run/wsgi <VirtualHost 101.200.234.0:80> Alias /static "/S" WSGIDaemonProcess SmileDataWeb user=djangouser group=webuser processes=1 threads=15 maximum-requests=10000 WSGIScriptAlias / "/x/xx/xxx/Web/wsgi.py" WSGIProcessGroup SmileData WebWSGIApplicationGroup %{GLOBAL} ServerName 1.2.3.4:80 DocumentRoot /X/XX/SmileDataWeb <Directory "/X/XX/SmileDataWeb"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
</VirtualHost>其中WSGISocketPrefix必须设置,否则可能出现
503 Service Temporarily Unavailable
错误,Alias为静态路径设置,指向之前新建的文件夹S,WSGIScriptAlias设置指向网站的wsgi文件,WSGIApplicationGroup必须设置,另注意对于不同版本Apache的Directory设置有所不同,2.4及其以上使用上文设置,2.4以下使用
<Directory "/your_wsgi/your_app/static "> Options Indexes FollowSymLinks Order allow,deny Allow from all </Directory>
7.编辑wsgi.py文件
activate_this = '/x/xxx/python-env-django/bin/activate_this.py' execfile(activate_this, dict(__file__=activate_this)) import os from django.core.wsgi import get_wsgi_application sys.path.insert(0, '/x/xx/SmileDataWeb') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Web.settings") application = get_wsgi_application()
其中第一行指向路径virtualenv的python激活脚本,第二行激活virtualenv环境。
sys.path.insert(0, '/data/django/SmileDataWeb')语句指定网站运行根目录,可以设置为相对路径。
8. favicon图标配置
favicon图标有多种设置方式,但目前测试使用favicon.ico.png命名无法正常显示,推荐使用favicon.ico或favicon.png进行命名
注:在更改静态文件部署时需要重新运行
python manage.py collectstatic