在 Ubuntu 22.04 上使用宝塔面板(BT Panel)部署 Django 项目,需结合宝塔的图形化操作与 Django 的标准部署流程。以下是详细步骤:
✅ 前置准备
-
安装宝塔面板(若尚未安装)
# 下载并执行安装脚本(以 CentOS/Ubuntu 通用版为例) wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh⚠️ 注意:宝塔官方对 Ubuntu 22.04 的支持从 v8.0+ 开始更完善,建议安装最新版(如
bt命令查看版本)。 -
登录宝塔面板
访问http://<服务器IP>:8888,输入用户名密码登录。 -
安装必要环境(通过宝塔“软件商店”一键安装):
- Nginx(反向X_X + 静态文件服务)
- Python 3.10+(推荐选
Python 3.10或更高) - MySQL / MariaDB(数据库)
- Redis(可选,用于缓存/session)
- Supervisor(进程管理,可选但推荐)
📦 部署 Django 项目步骤
步骤 1:创建网站目录 & 上传项目
-
进入宝塔 → 网站 → 添加站点
- 域名:可填
example.com(即使无真实域名,也可用 IP 测试) - 根目录:
/www/wwwroot/example.com(自动创建) - 选择数据库:新建 MySQL 数据库(记录账号密码)
- 域名:可填
-
将本地 Django 项目打包上传:
- 方式一:使用 FTP/SFTP(宝塔内置支持)连接
/www/wwwroot/example.com - 方式二:命令行上传:
tar -czf django_project.tar.gz your_django_project_folder/ scp django_project.tar.gz root@your_server:/tmp/ ssh root@your_server cd /www/wwwroot/example.com tar -xzf /tmp/django_project.tar.gz rm /tmp/django_project.tar.gz
- 方式一:使用 FTP/SFTP(宝塔内置支持)连接
步骤 2:配置虚拟环境 & 依赖
cd /www/wwwroot/example.com
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install --upgrade pip
pip install -r requirements.txt
# 安装 Gunicorn(生产级 WSGI 服务器)
pip install gunicorn
🔍 检查
requirements.txt是否包含:Django>=4.2 gunicorn psycopg2-binary # 若用 PostgreSQL;MySQL 则用 mysqlclient whitenoise # 可选:托管静态文件
步骤 3:配置 Django 项目(关键!)
编辑 settings.py:
# ALLOWED_HOSTS 必须包含域名/IP
ALLOWED_HOSTS = ['your_domain.com', 'localhost', '127.0.0.1', 'your_server_ip']
# 静态文件配置(生产环境建议用 WhiteNoise 或 Nginx)
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles' # 或自定义路径如 /www/wwwroot/example.com/staticfiles
# 数据库配置(替换为宝塔创建的数据库信息)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
# 安全设置(生产务必开启)
DEBUG = False
SECRET_KEY = 'your-secret-key-from-env' # 建议从环境变量读取
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
✅ 收集静态文件:
python manage.py collectstatic --noinput
✅ 迁移数据库:
python manage.py migrate
✅ 创建超级用户(可选):
python manage.py createsuperuser
步骤 4:配置 Nginx + Gunicorn(宝塔自动处理部分)
-
进入宝塔 → 网站 → 点击你的站点 → 配置文件
-
修改 Nginx 配置(确保如下片段存在):
location /static/ { alias /www/wwwroot/example.com/staticfiles/; expires 30d; add_header Cache-Control "public, immutable"; } location / { proxy_pass http://127.0.0.1:8000; # Gunicorn 监听端口 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; } -
启动 Gunicorn(推荐使用宝塔“计划任务”或 Supervisor 管理):
方案 A:使用宝塔「计划任务」定期守护(简单)
- 宝塔 → 计划任务 → 添加任务
- 类型:Shell 脚本
- 名称:Start Gunicorn
- 执行周期:每天 0 点(仅首次启动可用)→ ❌ 不推荐重启丢失
方案 B:使用 Supervisor(推荐)
- 宝塔 → 软件商店 → 安装
Supervisor - 宝塔 → Supervisor → 添加任务:
[program:djangoproject] command=/www/wwwroot/example.com/venv/bin/gunicorn --bind 127.0.0.1:8000 --workers 3 --timeout 120 myproject.wsgi:application directory=/www/wwwroot/example.com user=root autostart=true autorestart=true redirect_stderr=true stdout_logfile=/var/log/supervisor/djangoproject.log🔔 替换
myproject.wsgi为你的实际项目名称(即manage.py所在目录名)
保存后点击「启动」→ 状态显示绿色即为成功。
- 宝塔 → 计划任务 → 添加任务
步骤 5:SSL 证书(HTTPS)
- 宝塔 → 网站 → 你的站点 → SSL
- 选择 Let’s Encrypt 免费证书 → 提交申请
- 自动配置完成后,Nginx 会启用 HTTPS(强制跳转 HTTP→HTTPS)
🔧 常见问题排查
| 问题 | 解决方案 |
|---|---|
Permission denied 访问静态文件 |
chown -R www:www /www/wwwroot/example.com/staticfiles |
| Gunicorn 无法连接 DB | 检查 settings.py 中 DB 配置是否正确;确认 MySQL 允许本地连接 |
| 页面空白/502 Bad Gateway | 检查 Gunicorn 是否运行:supervisorctl status djangoproject;查看日志 /var/log/supervisor/djangoproject.log |
| 静态文件未生效 | 确认 collectstatic 已执行;Nginx alias 路径正确;清除浏览器缓存 |
📌 最佳实践建议
- ✅ 使用
.env文件存储敏感信息(配合python-decouple或django-environ),不要提交到 Git - ✅ 启用
X-Frame-Options,Content-Security-Policy等安全头(可在 Nginx 中统一配置) - ✅ 定期备份数据库:宝塔 → 数据库 → 备份计划
- ✅ 监控资源:宝塔自带 CPU/内存/磁盘监控
需要我提供:
- 完整的
requirements.txt示例? gunicorn.conf.py高级配置?- Docker 化部署方案(与宝塔共存)?
欢迎告诉我你的具体需求 😊
轻量云Cloud