https://docs.djangoproject.com/zh-hans/4.2/howto/deployment/
Django是一个需要Web服务器来运行的Web框架。然而由于大多数Web服务器不是用Python编写,我们需要一个接口来实现沟通。
Django现在支持两种接口:WSGI和ASGI。
Django 的主要部署的方式是 WSGI,它是 Web 服务器和 Web 应用的 Python 标准,也是所谓的同步服务和默认服务。
Django支持:
最后,在将你的应用程序部署到生产环境中之前,你应该执行一遍 deployment checklist 1 以确保你的配置是合适的
部署 nginx
# -y 安装过程提示选择全部为 "yes"
yum install -y nginx
# 默认安装到 /etc/nginx
部署 uwsgi
workon django的虚拟环境
pip3 install uwsgi
在django项目下创建 uwsgi.ini 文件,和manage.py同级
[uwsgi]
chdir = /usr/local/project/pycode/web03 //项目根目录
module = web03.wsgi:application // 指定wsgi模块下的application对象
socket = 127.0.0.1:8000 //对本机8000端口提供服务
master = true //主进程
# 以上4个是核心配置项
#vhost = true //多站模式
#no-site = true //多站模式时不设置入口模块和文件
#workers = 2 //子进程数
#reload-mercy = 10
#vacuum = true //退出、重启时清理文件
#max-requests = 1000
#limit-as = 512
#buffer-size = 30000
#pidfile = /var/run/uwsgi9090.pid //pid文件,用于下脚本启动、停止该进程
daemonize = /usr/local/log/web03/run.log // 日志文件
disable-logging = true //不记录正常信息,只记录错误信息
配置项中以‘#’开头的都是被注释的项目,不起作用;
以双斜杠开头,表示注释;
chdir是你的项目根目录。我这里的项目名叫for_test;
moudule是你的入口wsgi模块,将for_test替换成你的项目名称;
socket是通信端口设置,和我一样就行;
master=True表示以主进程模式运行;
demonize是你的日志文件,会自动建立
disable-logging = true 表示不记录正常信息,只记录错误信息。否则你的日志可能很快就爆满了。
env: 指定DJANGO_SETTINGS_MODULE的值
home:可选的项目虚拟环境路径
修改django的settings配置
# 调试模式,关闭DEBUG
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
# 域名访问权限,允许全部
ALLOWED_HOSTS = ['*']
配置 nginx,关联 uwsgi
server {
listen 80;
listen [::]:80;
server_name 本机ip;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /xxx/static;
}
}
# 请将server_name改成你的实际IP。include uwsgi_params一定要一样。uwsgi_pass和你uWSGI配置中的socket要一样。location /static的alias改成你的实际情况,让静态文件得以部署
# 重启nginx
service nginx restart
启动服务
uwsgi --ini uwsgi.ini