如何在服务器 Ubuntu 22.04 上使用 Gunicorn + Nginx 部署 Django 3.x/4.x Web 应用详解
在现代Web应用开发中,Django是一个广泛使用的Python Web框架。将Django应用部署到生产环境中时,通常需要通过Gunicorn作为应用服务器,并配合Nginx作为反向代理服务器,以提高性能、扩展性和安全性。A5数据将详细介绍如何在Ubuntu 22.04服务器上,使用Gunicorn和Nginx部署Django 3.x/4.x Web应用的全过程,包括具体的产品参数、技术细节、实现方法、硬件配置及代码示例。
1. 环境准备
首先,我们需要确保Ubuntu 22.04香港服务器www.a5idc.com已经正确安装,并且具有基本的网络连接功能。
硬件配置:
- CPU: 4核 x 2.5 GHz
- 内存: 8GB DDR4
- 存储: 500GB SSD
- 操作系统: Ubuntu 22.04 LTS
- 网络带宽: 100M BGP带宽 + CN2直连
系统更新:
在进行任何操作之前,确保你的系统是最新的:
sudo apt update
sudo apt upgrade -y
2. 安装必要的软件
2.1 安装 Python 3 和依赖包
Django 是基于 Python 的,因此需要先安装 Python 及其包管理工具 pip。确保你的 Ubuntu 系统已安装 Python 3.9 或更高版本。
sudo apt install python3 python3-pip python3-dev libpq-dev -y
2.2 安装 Gunicorn
Gunicorn 是一个 WSGI HTTP 服务器,用于运行 Django 应用。它与 Nginx 配合使用,提供高效的反向代理服务。
pip3 install gunicorn
2.3 安装 Nginx
Nginx 将作为反向代理服务器接收客户端请求,并将请求转发给 Gunicorn 处理。
sudo apt install nginx -y
3. 配置 Django 项目
假设你已经有一个 Django 项目。如果没有,可以按照以下步骤创建一个简单的 Django 项目。
# 安装 Django
pip3 install django
# 创建一个新的 Django 项目
django-admin startproject myproject
# 进入项目目录
cd myproject
# 运行数据库迁移
python3 manage.py migrate
# 创建超级用户
python3 manage.py createsuperuser
4. 配置 Gunicorn
4.1 启动 Gunicorn 服务
在项目根目录下,使用 Gunicorn 启动 Django 应用:
gunicorn --workers 3 myproject.wsgi:application
--workers 3 参数表示 Gunicorn 启动 3 个工作进程,适用于中等负载的生产环境。
4.2 设置 Gunicorn 为服务
为了让 Gunicorn 服务在系统启动时自动运行,我们需要创建一个 systemd 服务文件。
创建 Gunicorn 服务文件:
sudo nano /etc/systemd/system/gunicorn.service
将以下内容粘贴到文件中:
[Unit]
Description=gunicorn daemon for Django project
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/your/django/project
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/path/to/your/django/project/gunicorn.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
记得将 /path/to/your/django/project 替换为你实际的 Django 项目路径。
启动 Gunicorn 服务:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
5. 配置 Nginx
5.1 配置 Nginx 反向代理
现在,我们需要将 Nginx 配置为反向代理,代理到 Gunicorn 进程。
编辑 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/myproject
将以下内容粘贴到文件中:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location / {
proxy_pass http://unix:/path/to/your/django/project/gunicorn.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
alias /path/to/your/django/project/static/;
}
location /media/ {
alias /path/to/your/django/project/media/;
}
}
同样,确保替换 /path/to/your/django/project 为你的实际路径,并将 your_domain.com 替换为你自己的域名。
5.2 启用 Nginx 配置
创建一个符号链接,将配置文件链接到 Nginx 的 sites-enabled 目录:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
检查 Nginx 配置是否有语法错误:
sudo nginx -t
重启 Nginx 服务以应用配置:
sudo systemctl restart nginx
5.3 防火墙设置
如果你的服务器启用了防火墙,确保允许 HTTP 和 HTTPS 流量:
sudo ufw allow 'Nginx Full'
6. 配置 Django 静态文件和媒体文件
Django 会将静态文件和媒体文件分别存储在 static/ 和 media/ 目录下。你需要告诉 Django 在生产环境中如何处理这些文件。
6.1 设置 STATIC_ROOT 和 MEDIA_ROOT
编辑 settings.py 文件:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
6.2 收集静态文件
运行以下命令,Django 会将所有静态文件收集到 STATIC_ROOT 中:
python3 manage.py collectstatic
7. 性能优化
7.1 使用 Gunicorn 的多进程
在生产环境中,使用多个工作进程来提升性能。我们已经在 gunicorn.service 中配置了 3 个工作进程,但根据服务器的 CPU 核心数,可以调整此值。通常,推荐设置为 CPU 核心数的 2-4 倍。
7.2 启用 Nginx 的 GZIP 压缩
启用 GZIP 压缩以减少数据传输的带宽需求,提升网站加载速度。修改 Nginx 配置文件 /etc/nginx/nginx.conf:
http {
gzip on;
gzip_types text/plain application/xml text/css application/javascript;
gzip_min_length 1000;
gzip_proxied any;
gzip_disable "msie6";
}
8. 总结
A5数据通过以上步骤,我们在 Ubuntu 22.04 上成功部署了一个使用 Gunicorn 和 Nginx 的 Django Web 应用。部署完成后,我们配置了 Gunicorn 作为应用服务器,并使用 Nginx 作为反向代理服务器处理请求。通过使用 Gunicorn 的多进程和 Nginx 的压缩优化,我们提高了 Web 应用的性能和响应速度。这种部署方式适用于高并发场景,并且能够有效扩展。
以下是本教程的关键步骤:
- 安装和配置 Gunicorn
- 设置 Nginx 反向代理
- 配置 Django 的静态文件和媒体文件
- 性能优化建议
这种部署方案不仅能够满足中小型项目的需求,也为将来网站流量的增加提供了足够的扩展空间。
更多推荐




所有评论(0)