django2.0 + python3.6 在centos7 下部署生产环境的一些注意事项
一:mysql 与环境选用的坑
目前, 在生产环境部署django有三种方式:
1. apache + mod_wsgi
2. nginx + uwsigi
3. nginx + supervisor + gunicorn
我选用的是nginx + supervisor + gunicorn, 因为我使用的是python3, django的mysql数据库驱动MySQLdb只支持python2, 我们需要在项目app的__init__.py中设置
import pymysql
pymysql.install_as_MySQLdb()
然而, uwsgi 会对此报错.
据说apache 的 mod_wsgi 对python的支持不是那么好,所以我就不入坑了.
二: css丢失的坑
目前django在生产环境上有一坑,那就是开了debug=False后, 所有的css都丢失, 网上的很多方案我都试过,但是只有下面这个英文的有用, 注意看,这个更新时间是2018年3月1日, 比较新.
https://devcenter.heroku.com/articles/django-assets
注意,在此处做了static转移后,不应该再去nginx设置 static , 否则就会出现用ip:port 方式能够正常访问, 但是域名访问依旧没有css的情况
三: 我的一些配置
(具体配置方式请自行百度)
1. gunicorn
在和manage.py同文件夹内加入 文件 gunicorn.conf.py
import multiprocessing
bind = "0.0.0.0:8080"
workers = 2 #workers是工作线程数,一般设置成:服务器CPU个数 + 1
errorlog = '/var/log/gunicorn_chenyansu_xyz.error.log'
accesslog = '/var/log/gunicorn_chenyansu_xyz.access.log'
#loglevel = 'debug'
proc_name = 'chenyansu_xyz'
2. supervisor配置
chenyansu_xyz.ini
[program:chenyansu_xyz]
command=gunicorn -c /path/to/chenyansu_xyz/gunicorn.conf.py chenyansu_xyz.wsgi:application
directory=/path/to/chenyansu_xyz/
user=root
autostart=true
autorestart=true
redirect_stderr=true
;environment=PYTHON_EGG_CACHE=/opt/www/memo/.python-eggs
3.nginx
chenyansu_xyz.conf
server {
listen 80;
server_name www.chenyansu.xyz;
charset utf-8;
client_max_body_size 75M;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /media {
alias /root/code/chenyansu_xyz/media;
}
}