在 Ubuntu 22.04 上使用宝塔面板(BT Panel)部署 Django 项目,需要结合宝塔的图形化操作与 Django 特有的部署要求(如 WSGI/ASGI、静态文件、环境变量等)。以下是完整步骤:
✅ 前提条件
- 已安装 宝塔面板(推荐安装 Nginx + PHP-FPM + MySQL + Python 环境版本 ≥3.8)
- 服务器已开放端口(默认 8888 用于宝塔,Django 通常用 80/443)
- 你有一个可运行的 Django 项目源码(含
requirements.txt或依赖列表)
💡 建议:先在本地测试
python manage.py runserver确保项目能正常运行。
🔧 步骤一:通过宝塔安装 Python 环境
- 登录宝塔面板(https://你的IP:8888)
- 进入【软件商店】→ 搜索并安装:
- Python(选择
Python 3.10或更高,避免使用过旧版本) - Nginx(用于反向X_X)
- MySQL(如需数据库)或 Redis(如需缓存)
- Supervisor(可选,但更推荐用 Nginx + Gunicorn/Uvicorn)
- Python(选择
⚠️ 注意:不要手动修改
/usr/bin/python,宝塔会管理其路径(如/www/server/panel/virtualenvs/django_project/bin/python)
📁 步骤二:创建网站目录 & 上传项目
-
进入【网站】→ 【添加站点】
- 域名:填你的域名(或留空仅用 IP)
- 根目录:例如
/www/wwwroot/mydjango - 选择 PHP 类型 → 实际我们不用 PHP,但需先创建目录结构;后续会改用 Nginx 配置
- 勾选「创建独立数据库」(如需 DB),记下用户名/密码
-
上传项目代码:
- 方式 A:用 SFTP 工具(如 FileZilla)连接
root用户,上传到/www/wwwroot/mydjango - 方式 B:在宝塔【文件】中直接上传压缩包并解压
- 方式 C:Git 克隆(需在终端执行
git clone ...,然后授权宝塔目录权限)
- 方式 A:用 SFTP 工具(如 FileZilla)连接
-
设置目录权限(关键!):
sudo chown -R www:www /www/wwwroot/mydjango sudo chmod -R 755 /www/wwwroot/mydjango若报错,可在宝塔【文件】中右键目录 → 【权限】→ 所有者设为
www,权限设为755
🐍 步骤三:配置虚拟环境与依赖
-
进入宝塔【终端】,切换到项目目录:
cd /www/wwwroot/mydjango -
创建虚拟环境(使用宝塔安装的 Python):
python3 -m venv venv source venv/bin/activate -
安装依赖:
pip install --upgrade pip pip install -r requirements.txt # 若没有 requirements.txt,可手动安装常用包: # pip install django gunicorn psycopg2-binary redis -
收集静态文件(开发模式关闭后必须做):
python manage.py collectstatic --noinput确保
settings.py中:STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') DEBUG = False
🌐 步骤四:配置 Nginx 反向X_X(核心步骤)
方案 A:使用 Gunicorn(推荐生产环境)
1. 启动 Gunicorn(临时测试)
gunicorn myproject.wsgi:application --bind 127.0.0.1:8000 --workers 4
将
myproject替换为你的 Django 主应用名(即包含wsgi.py的目录)
✅ 测试访问:http://你的IP:8000 应返回 Django 首页
2. 创建 systemd 服务(持久化运行)
sudo nano /etc/systemd/system/gunicorn-myproject.service
内容示例:
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=www
Group=www
WorkingDirectory=/www/wwwroot/mydjango
Environment="PATH=/www/wwwroot/mydjango/venv/bin"
ExecStart=/www/wwwroot/mydjango/venv/bin/gunicorn
--workers 4
--access-logfile -
--error-logfile /var/log/gunicorn/myproject-error.log
--pidfile /run/gunicorn/myproject.pid
myproject.wsgi:application
Restart=on-failure
[Install]
WantedBy=multi-user.target
注意:
myproject.wsgi要换成你的实际模块路径- 日志目录需存在:
sudo mkdir -p /var/log/gunicorn && sudo chown www:www /var/log/gunicorn
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable gunicorn-myproject
sudo systemctl start gunicorn-myproject
sudo systemctl status gunicorn-myproject
3. 配置 Nginx 反向X_X
在宝塔面板:
- 进入【网站】→ 找到你的站点 → 【配置文件】
- 替换为以下内容(关键部分加注释):
server {
listen 80;
server_name yourdomain.com; # 或 $host
root /www/wwwroot/mydjango/staticfiles; # 静态文件目录(collectstatic 生成处)
index index.html index.htm;
# 静态文件直接由 Nginx 提供(提速)
location /static/ {
alias /www/wwwroot/mydjango/staticfiles/;
expires 30d;
add_header Cache-Control "public, immutable";
}
# 媒体文件(如有 MEDIA_URL)
location /media/ {
alias /www/wwwroot/mydjango/media/;
expires 30d;
}
# 所有其他请求转发给 Gunicorn
location / {
proxy_pass http://127.0.0.1:8000;
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;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 安全头(可选但推荐)
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
}
- 保存后点击【重载配置】或执行:
sudo nginx -t && sudo systemctl reload nginx
🔐 步骤五:配置环境变量与安全
1. 设置 .env 或系统环境变量
在 gunicorn 服务文件中添加:
Environment="DJANGO_SETTINGS_MODULE=myproject.settings.production"
Environment="SECRET_KEY=your-secret-key-here"
Environment="DEBUG=False"
Environment="DATABASE_URL=postgres://user:pass@localhost/dbname"
或使用
dotenv库加载.env文件(需安装python-dotenv)
2. 允许 Trusted Hosts(防止 CSRF 被拒)
在 settings.py 中添加:
ALLOWED_HOSTS = ['yourdomain.com', 'yourip', 'localhost', '127.0.0.1']
3. 开启 HTTPS(强烈推荐)
- 宝塔【SSL】→ 申请 Let’s Encrypt 证书
- 自动配置重定向 HTTP→HTTPS
- 更新 Nginx 配置中的
listen 443 ssl和proxy_pass https://...(Gunicorn 仍用内网 8000)
🧪 验证部署
- 访问
http://yourdomain.com→ 应看到 Django 首页 - 检查静态资源是否正常加载(F12 看 Network)
- 测试表单提交、登录等功能
- 查看日志排查问题:
- Gunicorn:
tail -f /var/log/gunicorn/myproject-error.log - Nginx:
tail -f /www/wwwlogs/yourdomain.error.log
- Gunicorn:
❗ 常见问题排查
| 问题 | 解决方案 |
|---|---|
403 Forbidden |
检查目录权限 chown -R www:www;确认 Nginx alias 路径正确 |
CSRF token missing |
检查 ALLOWED_HOSTS;确认 X-Forwarded-Proto 已传递 |
| 静态文件不显示 | 运行 python manage.py collectstatic;确认 STATIC_URL 与 Nginx location /static/ 匹配 |
| Gunicorn 启动失败 | 检查 python manage.py check;确认虚拟环境激活;查看错误日志 |
| 数据库连接拒绝 | 确保 MySQL 允许远程/本地连接;settings.py 中 HOST='127.0.0.1' |
🔄 进阶建议
- 使用 Uvicorn + Daphne 支持 WebSocket(如 Django Channels)
- 集成 Supervisor 替代 systemd(宝塔原生支持更好)
- 定期备份数据库(宝塔有定时备份功能)
- 使用 Celery 处理异步任务(需额外配置 Redis/RabbitMQ)
需要我为你提供:
- 完整的
gunicorn.service模板? settings.py生产环境配置示例?- Docker 化部署方案(更隔离)?
欢迎告诉我你的具体需求,我可以进一步定制! 🚀
云服务器