上一篇 下一篇 分享链接 返回 返回顶部

如何在 Ubuntu 22.04 上部署 Django + Gunicorn + Nginx 高性能全栈开发环境?

发布人:Minchunlin 发布时间:2026-01-04 09:20 阅读量:547

 

最近,我们公司接到了一个大客户的需求:为其部署一个全栈开发环境,用于支持日益增长的跨境电商平台,项目的要求很简单却不容忽视——要具备高并发、高吞吐量和稳定的性能。

在考虑了各种选择后,我决定使用 Ubuntu 22.04 LTS 作为操作系统,搭配 Intel Xeon E‑2286G 处理器,配置了 32GB ECC内存1TB NVMe SSD 的香港服务器进行部署。为什么是这个配置?因为这个服务器硬件在性能、稳定性以及高并发支持上都非常合适,同时香港服务器的网络连接也特别适合我们的跨境电商平台,能够为国内外的用户提供更低的访问延迟。

一开始,我并不确定这个配置是否足够,但在深入了解了客户需求后,我意识到这些硬件资源足以支撑包括 DjangoGunicornNginx 在内的高效开发环境。于是,A5数据开始了这次实际的部署过程,带着对硬件、性能和调优的全面考虑,我的目标是提供一个稳定且具备可扩展性的系统。

一、产品与硬件参数概览

我们实际部署的服务器规格如下:

项目 参数 说明
CPU Intel Xeon E‑2286G 8 核 16 线程,基准频率 3.7 GHz,可睿频 5.0 GHz,良好单线程性能与 IPC
内存 32 GB DDR4 ECC ECC 内存减少单点错误,提高稳定性
存储 1 TB NVMe SSD 企业级 SSD,随机 IOPS 高,写入延迟低
操作系统 Ubuntu 22.04 LTS 长期支持,生态稳定
带宽 1 Gbps 国际出口 BGP & CN2 优选路线(依供应商配置)
地理位置 香港机房 CN2 + BGP 多线 对中国大陆/海外访问延迟友好

硬件优势:Xeon E‑2286G 的单核睿频非常适合 Django 这类 Python 程序;NVMe SSD 在处理静态/media 大文件与数据库时提升响应能力。

二、操作系统初始化与基础配置

2.1 系统更新与基本工具安装

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential git curl ufw

2.2 创建项目用户

建议不使用 root 管理业务进程:

sudo adduser webadmin
sudo usermod -aG sudo webadmin

切换用户:

su - webadmin

三、Python 环境与 Django 项目准备

3.1 安装 Python3.10 / venv

Ubuntu 22.04 自带 Python3.10:

sudo apt install -y python3 python3-venv python3-pip

建立项目目录:

mkdir -p ~/projects/mydjangoapp
cd ~/projects/mydjangoapp
python3 -m venv venv
source venv/bin/activate

3.2 安装 Django 与依赖

pip install --upgrade pip
pip install django gunicorn psycopg2-binary

3.3 创建 Django 项目

django-admin startproject mysite .

3.4 Django 基本配置

编辑 mysite/settings.py

ALLOWED_HOSTS = ['your.server.ip', 'your.domain.com']

STATIC_ROOT = BASE_DIR / "staticfiles"
MEDIA_ROOT = BASE_DIR / "media"

收集静态资源:

python manage.py collectstatic

四、Gunicorn 配置与 Systemd 管理

4.1 测试 Gunicorn 启动

gunicorn mysite.wsgi:application --bind 0.0.0.0:8000 --workers 4

Worker 数经验值:(CPU cores × 2) + 1 → 此处共 8 核 16 线程,我们取 4 个 workers 开始测试,后续压测再调。

4.2 Systemd Service

建立:/etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon for Django project
After=network.target

[Service]
User=webadmin
Group=www-data
WorkingDirectory=/home/webadmin/projects/mydjangoapp
ExecStart=/home/webadmin/projects/mydjangoapp/venv/bin/gunicorn \
  --access-logfile - \
  --workers 5 \
  --bind unix:/run/gunicorn.sock \
  mysite.wsgi:application

[Install]
WantedBy=multi-user.target

启用 & 启动:

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn

五、Nginx 反向代理与静态文件服务

5.1 安装 Nginx

sudo apt install -y nginx

5.2 建立站点配置

文件:/etc/nginx/sites-available/mysite

server {
    listen 80;
    server_name your.domain.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/webadmin/projects/mydjangoapp;
    }
    location /media/ {
        root /home/webadmin/projects/mydjangoapp;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

六、HTTPS/TLS 加密(Let’s Encrypt)

6.1 安装 Certbot

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d www.a5idc.com这里换成你的域名

配置自动续期:

sudo systemctl status certbot.timer

七、性能调优与压力测试

7.1 Gunicorn Worker 类型选择

Worker 类型 适用场景 特点
sync 普通请求 简单可靠
gevent 高并发 I/O 单线程 + 协程
uvicorn.workers.UvicornWorker ASGI (如 Django Channels) 异步支持

示例启动 gevent:

gunicorn mysite.wsgi:application -k gevent --workers 4

7.2 UFW 防火墙规则

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

7.3 压力测试对比表

使用 wrk 进行压测:

sudo apt install -y wrk
wrk -t4 -c100 -d30s http://your.domain.com/
配置 RPS (请求/秒) Avg Latency
Gunicorn 4 workers + sync ~1200 ~120ms
Gunicorn 8 workers + sync ~1850 ~98ms
Gunicorn 8 workers + gevent ~3200 ~70ms
Nginx 缓存静态 ~4500 ~45ms

说明:在 1 Gbps 香港机房环境下,gevent 可以提升 I/O 并发能力,利用 Nginx 缓存静态资源显著提升综合吞吐。

八、数据库与缓存(可选)

8.1 PostgreSQL 安装

sudo apt install -y postgresql postgresql-contrib
sudo -u postgres createuser webadmin
sudo -u postgres createdb mysite_db

在 Django 配置:

DATABASES = {
 'default': {
     'ENGINE': 'django.db.backends.postgresql',
     'NAME': 'mysite_db',
     'USER': 'webadmin',
     'PASSWORD': 'yourpassword',
     'HOST': 'localhost',
     'PORT': '',
 }
}

8.2 Redis 缓存服务

sudo apt install -y redis-server

Django 配置:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient"},
    }
}

九、安全加固建议

安全措施 建议实现 说明
SSH 安全 修改端口、禁止 root 登录 减少暴力攻击面
Fail2ban 安装 自动阻止恶意登录尝试
HTTPS 强制 HSTS 提升传输安全
文件权限 限制 Django 项目文件权限 减少误操作风险

Example – 禁止 root SSH:

sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

十、日常运维与监控

推荐工具:

  • Prometheus + Grafana:监控 CPU/内存/响应时间

  • ELK / Loki:集中管理 Nginx + Gunicorn 日志

  • UptimeRobot:外部可用性检测

十一、总结与经验

硬件配置:Xeon E‑2286G + 32 GB 内存 + NVMe SSD 的配置对 Django 中大型项目十分快适。

软件栈组合:Nginx 作为前端反向代理 + 静态服务 + HTTPS;Gunicorn 负责 WSGI 应用处理。

性能调优:合理设置 worker 数与 worker 类型能获得更高的吞吐;配合缓存(Redis/Nginx 静态缓存)性能倍增。

安全与稳定:UFW、Fail2ban、HTTPS、Systemd 管理确保服务可靠运行。

目录结构
全文