Djano云服务器部署 uwsgi+nginx+https部署
Django启动服务器的命令runserver
,其实也是启动了一个自带的uwsgi服务。如果想要一直在后台不停的运行django项目,需要部署uwsgi服务器。
uwsgi安装官方文档:
安装uWSGI — uWSGI 2.0 文档 (uwsgi-docs-zh.readthedocs.io)
可以直接用pip安装uwsgi:
pip install uwsgi
在django项目根地址,即跟manage.py
同目录下新建配置文件uwsgi.ini
,如:mysite1/uwsgi.ini
uwsgi.ini
必须以[uwsgi]
开头,内容如下:
[uwsgi]
chdir=/mysite1
module=mysite1.wsgi:application
socket=127.0.0.1:8000
master=True
pidfile=uwsgi.pid
vacuum=True
max-requests=5000
daemonize=uwsgi.log
chdir为django项目根地址,socket为django启动服务器的ip地址,daemonize为日志地址。注意,每个django项目中自动生成一个mysite1/wsgi.py
文件。
接下来cd 到 uWSGI 配置文件所在目录,执行以下代码即可:
uwsgi --ini uwsgi.ini
uWSGI的运行说明
- 无论是启动还是关闭,都要执行
ps aux|grep 'uwsgi’
确认是否符合预期 - 当uwsgi启动后,当前django项目的程序已变成后台守护进程,在关闭当前终端时此进程也不会停止
- 启动成功后,进程在后台执行,所有日志均输出在配置文件所在目录的
uwsgi.log
中 - Django中代码有任何修改,都需要重启uwsgi(重启即为先关闭,再开启)
配置好uwsgi服务后,还需要进一步配置nginx服务器,原因见为什么有了uwsgi 还要 nginx 服务器?和Nginx服务器反向代理。为了更高的加密性,我们可以使用nginx配置HTTPS协议。以下我们以腾讯云服务器为例,通过nginx配置HTTPS:
首先找到/etc/nginx/conf.d
,然后创建新文件django_nginx.conf
sudo vim django_nginx.conf
接下来输入以下设置
# 这种写法比较方便配合负载均衡
upstream backend {
# 这里的IP端口即Django项目的IP端口
server 127.0.0.1:8000;
# 如果uwsgi使用的本地文件,此处写法参考
# server unix:/path/to/your/mysite/mysite.sock;
}
server {
listen 443 ssl;
autoindex on;
client_max_body_size 1024m;
#请填写绑定证书的域名
server_name example.com;
#请填写证书文件的相对路径或绝对路径
ssl_certificate example.com_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key example.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /static {
alias /path/to/your/mysite/static/;
}
location / {
include uwsgi_params;
uwsgi_pass backend;
}
}
最后重新加载nginx,就大功告成啦!
sudo nginx -s reload
There is no comment, let's add the first one.