Django Linux部署(Whitenoise + Waitress)

Django Linux部署(Whitenoise + Waitress)


广州飞领
阿里波波 发布于 2025-12-11 / 1 阅读 / 0 评论 /

Whitenoise + Waitress 在 Linux 环境下是官方推荐的轻量级生产部署方案之一
尤其适用于:

  • Heroku、Fly.io、Render 等 PaaS 平台
  • Docker 容器化部署
  • 小型 VPS(如 1~2 核的云服务器)
  • 不想配置 Nginx 的简单项目

✅ 一、Linux 部署完整步骤

1. 安装依赖

# Ubuntu/Debian
sudo apt update
sudo apt install python3 python3-pip

# 安装项目依赖
pip3 install django waitress whitenoise

2. 配置 settings.py

# settings.py
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', '服务器IP']  # 必须设置!

# 静态文件
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'

# Whitenoise 配置(关键!)
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',  # 放在最顶部!
    # ... 其他中间件
]

# 启用压缩和内容哈希(提升缓存效率)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

3. 收集静态文件

python3 manage.py collectstatic --noinput

4. 创建启动脚本 start_server.py

# start_server.py
import os
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

from waitress import serve
from django.core.wsgi import get_wsgi_application

if __name__ == '__main__':
    serve(
        get_wsgi_application(),
        host='0.0.0.0',
        port=8000,
        threads=4,          # 根据 CPU 核心数调整
        url_scheme='http'
    )

6. (可选)用 systemd 托管为系统服务(开机自启)

创建 /etc/systemd/system/myapp.service

[Unit]
Description=Django App with Waitress
After=network.target

[Service]
User=www-data
WorkingDirectory=/path/to/your/project
ExecStart=/usr/bin/python3 /path/to/your/project/start_server.py
Restart=always

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

✅ 三、Linux 下的性能表现(实测参考)

环境配置静态文件 QPS动态页面 QPS
阿里云 ECS(2C4G Ubuntu 22.04)Waitress(4线程) + Whitenoise~1,800~100
同配置 + NginxNginx + Waitress>20,000~100

💡 结论:Whitenoise 在 Linux 下性能足够支撑中小型应用


✅ 四、注意事项(Linux 特有)

1. 文件权限

确保运行用户(如 www-data)有权限读取 staticfiles/

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

2. 端口权限

  • 监听 1024 以下端口(如 80)需要 root 权限
  • 建议:
    • 开发/测试:用 8000
    • 生产:用 8000 + 云厂商负载均衡(监听 80/443 转发到 8000)
    • 或使用 authbind / setcap 授权非 root 用户绑定 80(不推荐新手)

3. 防火墙

开放端口(以 ufw 为例):

1sudo ufw allow 8000/tcp
2sudo ufw reload

✅ 五、适用场景总结(Linux)

场景是否推荐
内部管理系统(< 100 用户)✅ 强烈推荐
博客 / 小型网站✅ 完全够用
API 服务(无静态文件)✅ Waitress 足够
高并发 Web 应用(> 1万日活)❌ 改用 Gunicorn + Nginx
Serverless / 容器部署✅ 官方推荐方案

🔚 结论

Whitenoise + Waitress 在 Linux 下不仅可用,而且是“简单、可靠、免运维”的理想组合,特别适合:

  • 快速部署 MVP
  • 资源有限的小型项目
  • 不想折腾 Nginx 的开发者

如果你正在用 Linux 云服务器(如阿里云、腾讯云、AWS EC2),完全可以放心使用此方案上线生产环境



是否对你有帮助?

评论