Django+uWSGI+Nginx部署:环境搭建与配置准备指南
2025.09.18 12:10浏览量:0简介:本文详细讲解Django项目部署前需完成的准备工作,涵盖系统环境配置、依赖安装、项目结构优化等关键步骤,为后续uWSGI+Nginx部署打下坚实基础。
Django+uWSGI+Nginx部署:环境搭建与配置准备指南
一、系统环境准备
1.1 操作系统选择
生产环境推荐使用Ubuntu 20.04 LTS或CentOS 8,这两个系统具有长期支持周期和完善的软件包管理。Ubuntu的APT包管理系统和CentOS的YUM/DNF都能方便地安装所需软件。
操作建议:
- 新建服务器时选择最小化安装
- 创建专用部署用户(非root):
sudo adduser deployuser
sudo usermod -aG sudo deployuser
1.2 Python环境配置
Django项目需要特定Python版本支持,建议:
- 使用pyenv管理多版本Python
- 创建虚拟环境隔离项目依赖
详细步骤:
安装编译依赖:
# Ubuntu
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
# CentOS
sudo yum groupinstall "Development Tools"
sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel
安装pyenv:
curl https://pyenv.run | bash
# 添加到~/.bashrc
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
安装指定Python版本:
pyenv install 3.9.7
pyenv global 3.9.7
二、Django项目准备
2.1 项目结构优化
标准Django项目应包含以下目录结构:
/project_root
├── /project_name
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── /app_name
│ ├── migrations/
│ ├── static/
│ ├── templates/
│ └── ...
├── manage.py
└── requirements.txt
关键配置:
分离开发/生产设置:
# settings.py
try:
from .local_settings import *
except ImportError:
pass
配置静态文件:
# settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
2.2 依赖管理
使用pipreqs生成精确的依赖文件:
pip install pipreqs
pipreqs /path/to/project --encoding=utf8 --force
requirements.txt示例:
Django==3.2.7
djangorestframework==3.12.4
psycopg2-binary==2.9.1
uwsgi==2.0.19.1
三、uWSGI配置准备
3.1 uWSGI安装与测试
通过pip安装:
pip install uwsgi
基础测试命令:
uwsgi --http :8000 --module project_name.wsgi
3.2 配置文件模板
创建uwsgi.ini
基础配置:
[uwsgi]
# 项目基础配置
chdir = /path/to/project
module = project_name.wsgi:application
home = /path/to/venv
# 进程管理
master = true
processes = 4
threads = 2
# socket配置
socket = /tmp/uwsgi.sock
chmod-socket = 666
vacuum = true
# 日志配置
daemonize = /var/log/uwsgi/project_name.log
四、Nginx配置准备
4.1 Nginx安装
Ubuntu安装:
sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
CentOS安装:
sudo yum install -y epel-release
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
4.2 基础配置模板
创建/etc/nginx/sites-available/project_name
:
server {
listen 80;
server_name example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /path/to/project;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
五、安全加固措施
5.1 系统安全配置
防火墙设置:
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
失败登录限制:
sudo apt install -y fail2ban
sudo systemctl enable fail2ban
5.2 Django安全配置
在settings.py
中添加:
# 安全相关设置
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
六、部署前检查清单
环境验证:
- Python版本确认
- 虚拟环境激活测试
- 依赖完整性检查
项目测试:
python manage.py check
python manage.py test
python manage.py collectstatic --noinput
配置文件检查:
- uWSGI配置文件语法
- Nginx配置测试:
sudo nginx -t
权限设置:
sudo chown -R deployuser:www-data /path/to/project
sudo chmod -R 755 /path/to/project
sudo chmod -R 775 /path/to/project/staticfiles
七、常见问题解决方案
7.1 静态文件403错误
解决方案:
- 检查Nginx用户权限
- 确认
STATIC_ROOT
路径正确 - 执行
collectstatic
命令
7.2 uWSGI连接失败
排查步骤:
- 检查socket文件权限
- 验证uWSGI进程是否运行
- 查看Nginx错误日志:
sudo tail -f /var/log/nginx/error.log
7.3 数据库连接问题
解决方案:
- 检查
DATABASES
配置 - 验证数据库服务运行状态
- 测试数据库连接:
python manage.py dbshell
通过以上系统化的准备工作,开发者可以确保Django项目在uWSGI和Nginx环境下的稳定部署。每个准备环节都经过实践验证,能够有效避免常见部署问题,为后续的持续集成和自动化部署奠定坚实基础。建议在实际部署前,先在测试环境完整执行一遍所有准备步骤,确保生产环境部署的顺利进行。
发表评论
登录后可评论,请前往 登录 或 注册