Nginx+uWSGI+Django的部署过程
1. 创建一个 nginx 容器:
docker run -id --name 容器名 -v django_project:/root/www/django_project -p 80:80 -p 443:443 nginx
2. 进入容器:
docker exec -it 容器名 /bin/bash
3. 安装 net-tools 与 procps 方便后期进行调试(可以不装)
1 |
|
由于容器自带 nginx, 所以我们只需要安装 uwsgi 即可:
4. 首先我们需要先了解一下一下 WSGI:
WSGI(Web Server Gateway Interface) WSGI 是一个规范,定义了 Web 服务器如何与 Python 应用程序进行交互,使得使用 Python 写的 Web 应用程序可以和 Web 服务器对接起来。
作为一个低级接口,WSGI 就像是一座桥梁,一边连着 web 服务器(如 nginx),另一边连着 Python 的应用程序 Application。但是呢,这个桥的功能很弱,有时候还需要别的桥来帮忙才能进行处理。
那么什么是 uWSGI 呢?
简单说, 他是一个实现了WSGI 协议的一个 web 服务器
只要 web 服务器和 web 框架满足 WSGI 协议,它们就能相互搭配.
所以我们只需要使用 uWSGI 就可以满足我们对网站功能的使用, 那么我们为什么要使用 nginx 呢?
众所周知, nginx 作为一款高性能的HTTP和反向代理web 服务器, nginx 可以解决高并发访问的负载问题,
当然我这破网站不可能有什么过大负载, 1G 内存也不够开过多 docker, 所以此处使用 nginx 更多是一种练习作用
我们可以让 nginx 负责静态资源的加载, nginx 负责动态资源的访问
5. 接下来我们安装 uWSGI:
首先确保容器内有 pip3, 没有自行安装
apt install python3-pip
直接安装 uwsgi
pip3 install uwsgi
6. 开始配置:
6.1 在项目根目录创建 uwsgi 配置文件
vim uwsgi.ini
根据需求写入
1 |
|
处理注释的地方, 其他的可以保持不变, 需要的话可以戳这里, 查看全部参数意义
6.2 开启一下:
uwsgi --ini uwsgi.ini
出现这个提示就表示开启成功, 可以 cat 一下.log 查看日志
有的人可能会报这个错:Internal Server Error
可以检查一下自己的 django 项目是否有未安装的包存在, 只要包安装正确理论上就没有问题了
6.3 配置 nginx:
在/etc/nginx/conf.d 下新建一个自己的配置文件:
1 |
|
6.4 在 nginx.conf 中引入
include /etc/nginx/conf.d/project.conf;
完成, 直接访问就可以了
7. 有兴趣可以继续配置 https
7.1 首先获取个 SSL 证书:
7.2 然后把证书下载传到服务器, 传到 docker 内部
解压
放到 nginx 配置目录(/etc/nginx/cert)目录下(没有 cert 目录自己创建)
配置刚才的 project.conf
修改为以下:
1 |
|
重启 nginx:
nginx -s reload
以上!
- 本文作者:herin
- 本文链接:https://kilicmu.github.io/2020/01/28/NGINX-UWSGI-DJANGO%E7%9A%84%E9%83%A8%E7%BD%B2%E8%BF%87%E7%A8%8B/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!