logo

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):
    1. sudo adduser deployuser
    2. sudo usermod -aG sudo deployuser

1.2 Python环境配置

Django项目需要特定Python版本支持,建议:

  • 使用pyenv管理多版本Python
  • 创建虚拟环境隔离项目依赖

详细步骤

  1. 安装编译依赖:

    1. # Ubuntu
    2. sudo apt update
    3. sudo apt install -y make build-essential libssl-dev zlib1g-dev \
    4. libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
    5. libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
    6. # CentOS
    7. sudo yum groupinstall "Development Tools"
    8. sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel
  2. 安装pyenv:

    1. curl https://pyenv.run | bash
    2. # 添加到~/.bashrc
    3. export PATH="$HOME/.pyenv/bin:$PATH"
    4. eval "$(pyenv init -)"
    5. eval "$(pyenv virtualenv-init -)"
  3. 安装指定Python版本:

    1. pyenv install 3.9.7
    2. pyenv global 3.9.7

二、Django项目准备

2.1 项目结构优化

标准Django项目应包含以下目录结构:

  1. /project_root
  2. ├── /project_name
  3. ├── __init__.py
  4. ├── settings.py
  5. ├── urls.py
  6. └── wsgi.py
  7. ├── /app_name
  8. ├── migrations/
  9. ├── static/
  10. ├── templates/
  11. └── ...
  12. ├── manage.py
  13. └── requirements.txt

关键配置

  1. 分离开发/生产设置:

    1. # settings.py
    2. try:
    3. from .local_settings import *
    4. except ImportError:
    5. pass
  2. 配置静态文件:

    1. # settings.py
    2. STATIC_URL = '/static/'
    3. STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    4. STATICFILES_DIRS = [
    5. os.path.join(BASE_DIR, 'static'),
    6. ]

2.2 依赖管理

使用pipreqs生成精确的依赖文件:

  1. pip install pipreqs
  2. pipreqs /path/to/project --encoding=utf8 --force

requirements.txt示例

  1. Django==3.2.7
  2. djangorestframework==3.12.4
  3. psycopg2-binary==2.9.1
  4. uwsgi==2.0.19.1

三、uWSGI配置准备

3.1 uWSGI安装与测试

  1. 通过pip安装:

    1. pip install uwsgi
  2. 基础测试命令:

    1. uwsgi --http :8000 --module project_name.wsgi

3.2 配置文件模板

创建uwsgi.ini基础配置:

  1. [uwsgi]
  2. # 项目基础配置
  3. chdir = /path/to/project
  4. module = project_name.wsgi:application
  5. home = /path/to/venv
  6. # 进程管理
  7. master = true
  8. processes = 4
  9. threads = 2
  10. # socket配置
  11. socket = /tmp/uwsgi.sock
  12. chmod-socket = 666
  13. vacuum = true
  14. # 日志配置
  15. daemonize = /var/log/uwsgi/project_name.log

四、Nginx配置准备

4.1 Nginx安装

Ubuntu安装

  1. sudo apt install -y nginx
  2. sudo systemctl start nginx
  3. sudo systemctl enable nginx

CentOS安装

  1. sudo yum install -y epel-release
  2. sudo yum install -y nginx
  3. sudo systemctl start nginx
  4. sudo systemctl enable nginx

4.2 基础配置模板

创建/etc/nginx/sites-available/project_name

  1. server {
  2. listen 80;
  3. server_name example.com;
  4. location = /favicon.ico { access_log off; log_not_found off; }
  5. location /static/ {
  6. root /path/to/project;
  7. }
  8. location / {
  9. include uwsgi_params;
  10. uwsgi_pass unix:/tmp/uwsgi.sock;
  11. }
  12. error_page 404 /404.html;
  13. location = /404.html {
  14. root /usr/share/nginx/html;
  15. }
  16. error_page 500 502 503 504 /50x.html;
  17. location = /50x.html {
  18. root /usr/share/nginx/html;
  19. }
  20. }

五、安全加固措施

5.1 系统安全配置

  1. 防火墙设置:

    1. sudo ufw allow 22/tcp # SSH
    2. sudo ufw allow 80/tcp # HTTP
    3. sudo ufw allow 443/tcp # HTTPS
    4. sudo ufw enable
  2. 失败登录限制:

    1. sudo apt install -y fail2ban
    2. sudo systemctl enable fail2ban

5.2 Django安全配置

settings.py中添加:

  1. # 安全相关设置
  2. SECURE_SSL_REDIRECT = True
  3. SESSION_COOKIE_SECURE = True
  4. CSRF_COOKIE_SECURE = True
  5. SECURE_HSTS_SECONDS = 31536000
  6. SECURE_HSTS_INCLUDE_SUBDOMAINS = True
  7. SECURE_HSTS_PRELOAD = True
  8. SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

六、部署前检查清单

  1. 环境验证

    • Python版本确认
    • 虚拟环境激活测试
    • 依赖完整性检查
  2. 项目测试

    1. python manage.py check
    2. python manage.py test
    3. python manage.py collectstatic --noinput
  3. 配置文件检查

    • uWSGI配置文件语法
    • Nginx配置测试:
      1. sudo nginx -t
  4. 权限设置

    1. sudo chown -R deployuser:www-data /path/to/project
    2. sudo chmod -R 755 /path/to/project
    3. sudo chmod -R 775 /path/to/project/staticfiles

七、常见问题解决方案

7.1 静态文件403错误

解决方案:

  1. 检查Nginx用户权限
  2. 确认STATIC_ROOT路径正确
  3. 执行collectstatic命令

7.2 uWSGI连接失败

排查步骤:

  1. 检查socket文件权限
  2. 验证uWSGI进程是否运行
  3. 查看Nginx错误日志:
    1. sudo tail -f /var/log/nginx/error.log

7.3 数据库连接问题

解决方案:

  1. 检查DATABASES配置
  2. 验证数据库服务运行状态
  3. 测试数据库连接:
    1. python manage.py dbshell

通过以上系统化的准备工作,开发者可以确保Django项目在uWSGI和Nginx环境下的稳定部署。每个准备环节都经过实践验证,能够有效避免常见部署问题,为后续的持续集成和自动化部署奠定坚实基础。建议在实际部署前,先在测试环境完整执行一遍所有准备步骤,确保生产环境部署的顺利进行。

相关文章推荐

发表评论