uWSGI+Nginx项目部署。
Python 应用 uWSGI + Nginx 部署
新建一个 Django 应用部署
- 使用
py文件启动uWSGI
1 | def application(env, start_response): |
启动:
1 | uwsgi --http-socket :8000 --plugin python3 --wsgi-file uwsgi_test.py |
可能需要安装
1 | sudo apt install uwsgi-plugin-common |
视情况也可能是 apt install uwsgi-plugin-python,看自己使用的 Python 版本和软连接情况。
这样,在对应的 IP 下的 8000 端口可以访问到文件。
- 新建
Django项目
1 | django-admin startproject django_deployment |
- 通过修改配置允许外部访问
setting.py:
1 | ALLOWED_HOSTS = ["*"] |
- 启动
1 | python3 manage.py runserver 0.0.0.0:8000 |
打通 Django 与 uWSGI 的链路
先停止应用
- 启动
uwsgi打通关系
在项目根目录启动
1 | uwsgi --http-socket :8000 --plugin python3 --module django_deployment.wsgi |
- 将命令行配置改为文件配置
新建 django-uwsgi.ini:
1 | touch django-uwsgi.ini |
1 | # 配置域 |
- 启动
1 | uwsgi --ini django-uwsgi-ini |
- 后台启动
后台运行程序并打印日志
1 | # 配置域 |
创建文件夹 log 和 pid
启动
1 | uwsgi --ini django-uwsgi.ini |
停止
1 | uwsgi --stop pid/uwsgi-8000.pid |
Django Nginx + uWSGI 部署
uWSGI 启动 Django 服务器
- 启动并查看
pid
1 | uwsgi --ini django-uwsgi-ini |
1 | cat pid/uwsgi-8000.pid |
1 | ps -aux | grep xxx |
修改 Nginx 配置文件,完成反向代理
复制备份配置文件 nginx.conf 为 nginx.conf.back
修改 nginx.conf
在 63 行处:
1 | upstream uwsgi { |
启动
1
nginx
查看启动进程情况
1
ps -aux | grep nginx
添加
log配置文件
1 | upstream uwsgi { |
重启
1 | nginx -s reload |
查看日志:
1 | cd /var/log/ngxin/ |
收集静态文件,完成静态文件寻址配置
- 收集静态文件
1 | vim django_deployment/settings.py |
1 | STATIC_ROOT = os.path.join(BASE_DIR, 'static') |
1 | python manage.py collectstatic |
- 配置静态文件路由
1 | upstream uwsgi { |
重新加载
1 | nginx -s reload |
HTTPS 加密部署
使用 443 端口,协议加密传输报文。
- 申请
SSL证书
在 Nginx 中新建文件夹 ssl,存放 crt 和 key
远程拷贝到服务器
1 | scp 2_topic.akashi.org.cn.crt root@122.51.1.19:/etc/nginx/ssl/ |
- 配置
Nginx支持HTTPS
nginx.conf:
1 | listen 443 ssl; |
- 定义
80端口的返回
1 | server { |
或者
1 | server { |
- 重启生效
1 | nginx -s reload |
部署高可用服务
添加配置的启动端口,开启多个服务,并且转发到 nginx 上,还可以通过权重分配达到负载均衡
1 | upstream uwsgi { |
- 注意事项
不要使用
root权限启动uwsgi服务关闭
uwsgi外网访问
1 | http-scoket = 127.0.0.1:8000 |
1 | http-scoket = 127.0.0.1:8001 |