准备工作
在 Linux 环境下部署 Django 项目和配置 Nginx 和 uWSGI 的流程中,以下是详细步骤的总结:
1. 项目代码拉取与环境准备
首先需要将项目代码克隆到 Linux 本地环境。在虚拟机或服务器上可能会存在 Python 版本冲突的情况,因此推荐自行安装所需的 Python 版本。
-
安装指定版本的 Python:
apt-get install python3.7 apt-get install python3.7-venv
-
创建 Python 虚拟环境:
python3.7 -m venv venv
-
激活虚拟环境:
source venv/bin/activate
-
安装项目依赖:
pip install -r
2. Nginx 配置
Nginx 是高性能的 HTTP 服务器及反向代理服务器,广泛用于负载均衡、静态资源管理等场景。部署 Django 项目时,它通常与 uWSGI 配合,用于代理和静态文件的管理。
-
安装 Nginx:
apt-get install nginx
-
启动和停止 Nginx 服务:
service nginx start # 启动 service nginx restart # 重启 service nginx stop # 停止
-
配置静态资源服务:
打开 Nginx 的配置文件:vim /etc/nginx/sites-available/default
添加静态资源的配置:
location /static/ { alias /var/static/; # 指定静态文件存放路径 autoindex on; add_header Cache-Control private; expires 30d; }
-
重启 Nginx 以应用新的配置:
service nginx restart
配置 Nginx 的好处包括前后端分离、提高安全性(隐藏内部服务端口)以及通过统一的入口管理多个服务。
3. uWSGI 部署与配置
uWSGI 是一个应用服务器,它通过实现 WSGI 协议来处理 Python Web 框架(如 Django)的请求。uWSGI 可以管理并发请求,并提供进程管理、代理、监控等功能。
-
安装 uWSGI:
pip3 install uwsgi
为了避免出错,建议在虚拟环境创建前和激活后各安装一次 uWSGI。
-
在项目根目录下创建
配置文件,并添加如下内容:
[uwsgi] http = 127.0.0.1:5000 # 本地服务地址 stats = 127.0.0.1:5100 # 监控服务状态的地址 virtualenv = /path/to/venv # 虚拟环境路径 chdir = /path/to/project # 项目根目录 wsgi-file = myproject/ # 指定 Django 的 wsgi 文件 processes = 12 # 进程数 threads = 4 # 线程数 logto = /var/log/ # 日志文件 static-map = /static=static # 映射静态资源
-
启动 uWSGI:
uwsgi --ini &
uWSGI 的核心作用是提升并发能力,特别是在生产环境中可以更好地管理资源和处理多用户请求。
4. Nginx 与 uWSGI 结合
为了让 Nginx 能够通过 uWSGI 来处理 Django 请求,接下来需要配置 Nginx 代理 uWSGI:
- 在 Nginx 的配置文件
/etc/nginx/sites-available/default
中,添加以下内容,用于代理请求:location /myblog/ { proxy_pass http://127.0.0.1:5000; }
通过这种代理转发,外部用户可以通过 http://yourdomain/myblog
访问项目,而不用直接访问 uWSGI 提供的地址。
如果项目中的 URL 需要做修改以适配路径 /myblog
,可以在 Django 的 中进行调整,确保所有路径都添加适当的前缀。
5. 查看 Nginx 和 uWSGI 日志
在调试和生产运行中,查看日志是非常关键的一步,能够帮助快速定位和解决问题。
-
查看 Nginx 日志:
cd /var/log/nginx
-
:记录每次访问的日志。
-
:记录系统运行时发生的错误信息。
-
通过实时查看日志,可以判断是否有请求被正确处理,或是否存在异常。
总结
部署 Django 项目到生产环境中,涉及到环境准备、Nginx 静态资源配置、uWSGI 并发控制以及日志监控等多个步骤。通过正确配置 Nginx 与 uWSGI 的代理转发,可以提升系统的安全性、性能以及并发处理能力。