在生产环境部署 django 项目,比较方便的是用 Gunicorn 或者 Waitress 当作 WSGI 服务器启动 django, 然后使用 nginx 做反向代理,Gunicorn 只支持类 Unix 系统, Waitress 同时支持 Windows, 两者都可用于生产环境,稳定性都是不错的。还有一种比较热门且常用的是使用 uWSGI 结合 Nginx 部署,这种不如上面简单方便,所以不推荐。
Waitress 部署 django 配置文件 server.py
:
from waitress import serve
from poetryadmin.wsgi import application
serve(application, listen='*:8060')
将文件放在 django 项目目录下,执行:python server.py
即可。
django 启动之后是没有样式的,因为 django 需要用 nginx 去 serve 静态文件,静态文件提取:
python manage.py collectstatic
可以将提取的静态文件放到 CDN,来加速访问,这里为了方便,将静态文件提取到项目目录下,并用 Nginx 托管。
最简单的 nginx 配置静态文件和代理部署配置:
upstream poetryadmin {
server 127.0.0.1:8060;
}
server {
server_name admin.example.com;
proxy_set_header Host $host;
proxy_http_version 1.1;
location static {
root var/www/html/poetryadmin;
sendfile on;
tcp_nopush on;
}
location / {
proxy_pass http://poetryadmin;
}
}
为了项目的可用性,我们需要让 django 项目出错的时候自动重启,我们可以使用 pm2
来管理 django 服务,
安装 pm2
:
npm i -g pm2
在项目中初始化 pm2 的配置文件:
pm2 init
编辑配置文件 ecosystem.config.js
:
module.exports = {
apps : [{
name: 'poetrycms',
interpreter: '/User/home/miniconda3/envs/poetrycms/bin/python',
script: 'server.py',
watch: false,
env: {
'APP_ENV': 'prod'
}
}, {
script: './server.py',
}]
};
interpreter
参数是执行 python 的解释器路径,因为一般都会新建个 python 的虚拟环境,不会使用系统内置的 python 解释器运行,可以使用 which python
来查看路径。
文章转载自程序猿研究所,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。