在阿里云 Ubuntu 22.04 上通过宝塔面板(BT Panel)部署 Django 项目,推荐采用 Nginx + Gunicorn + Supervisor 的组合方式。这种方式稳定、易于管理,且能充分利用宝塔的可视化功能。
以下是完整的配置步骤:
第一步:安装 Python 环境与依赖
虽然宝塔自带了 Python,但为了更灵活地管理虚拟环境,建议先安装系统级依赖并创建虚拟环境。
- 登录宝塔面板,进入【软件商店】。
- 搜索并安装 Python(建议选择
Python 3.9或更高版本,Ubuntu 22.04 默认源通常包含较新版本)。 - 安装完成后,点击右侧的 【终端】 按钮,或者直接在宝塔的【文件】中操作。
创建项目目录与虚拟环境
假设你的项目名为 myproject,路径为 /www/wwwroot/myproject。
# 1. 进入网站根目录 (根据你实际创建的站点路径调整)
cd /www/wwwroot/
# 2. 创建项目文件夹
mkdir myproject
cd myproject
# 3. 创建 Python 虚拟环境
python3 -m venv venv
# 4. 激活虚拟环境
source venv/bin/activate
# 5. 升级 pip 并安装 Django
pip install --upgrade pip
pip install django gunicorn supervisor
# 6. 安装其他依赖 (如果已有 requirements.txt)
# pip install -r requirements.txt
注意:激活环境后,命令行提示符前会出现
(venv)字样。后续所有 Django 命令都需在激活状态下执行。
第二步:编写 Django 启动脚本
宝塔的 Nginx 反向X_X需要后端进程运行。我们使用 gunicorn 作为 WSGI 服务器,用 supervisor 来守护进程(确保服务重启后自动运行)。
1. 生成配置文件
在项目目录下创建 run_gunicorn.sh:
nano run_gunicorn.sh
粘贴以下内容(请修改为你的实际域名和模块名):
#!/bin/bash
PROJECT_DIR=/www/wwwroot/myproject
VENV_PATH=$PROJECT_DIR/venv
WSGI_MODULE=myproject.wsgi:application # 注意:替换为你项目的 wsgi.py 所在路径
PORT=8000
HOST=127.0.0.1
# 激活虚拟环境
source $VENV_PATH/bin/activate
# 启动 Gunicorn
exec gunicorn $WSGI_MODULE
--bind $HOST:$PORT
--workers 4
--threads 2
--timeout 120
--access-logfile $PROJECT_DIR/logs/access.log
--error-logfile $PROJECT_DIR/logs/error.log
赋予执行权限:
chmod +x run_gunicorn.sh
2. 创建日志目录
mkdir -p logs
touch logs/access.log logs/error.log
chown -R www-data:www-data logs/
第三步:配置 Supervisor 守护进程
为了让项目在服务器重启后自动运行,我们需要配置 Supervisor。
- 在宝塔左侧菜单找到 【计划任务】 -> 【守护进程】(如果没有直接入口,可通过“终端”手动配置,或使用宝塔的“进程守护”插件)。
-
推荐方式(使用宝塔自带的守护进程功能):
- 在宝塔左侧菜单找到 【计划任务】 -> 【守护进程】(部分新版宝塔称为“进程守护”)。
- 点击 添加守护进程。
- 名称:
django-myproject - 工作目录:
/www/wwwroot/myproject - 启动命令:
/www/wwwroot/myproject/run_gunicorn.sh - 守护数量:1
- 启动参数:留空
- 用户:
www(宝塔默认用户) - 保存。
(如果找不到此菜单,可手动编辑
/etc/supervisor/conf.d/django.conf)[program:django] command=/www/wwwroot/myproject/run_gunicorn.sh directory=/www/wwwroot/myproject user=www autostart=true autorestart=true stderr_logfile=/www/wwwroot/myproject/logs/error.log stdout_logfile=/www/wwwroot/myproject/logs/access.log environment=DJANGO_SETTINGS_MODULE="myproject.settings"然后执行
sudo supervisorctl reread && sudo supervisorctl update。
第四步:配置 Nginx 反向X_X
这是最关键的一步,将外部请求转发给 Gunicorn。
-
在宝塔左侧菜单点击 【网站】 -> 【设置】 -> 选择你的站点 -> 【伪静态】(如果是 Django 默认模式,通常选
Django或Custom,但主要逻辑在反向X_X)。 -
点击 【反向X_X】 -> 【添加反向X_X】。
- X_X名称:
django-gunicorn - 目标 URL:
http://127.0.0.1:8000(对应你脚本中的端口) - 发送域名:
$host - 是否启用缓存:否
- 提交。
- X_X名称:
-
配置 Django Settings (
settings.py)
打开你的 Django 项目目录下的settings.py,确保允许跨域访问(如果宝塔开启了 HTTPS):import os # 允许所有主机访问 (生产环境建议改为具体域名列表) ALLOWED_HOSTS = ['*', 'your-domain.com', '127.0.0.1'] # 开启调试模式 (生产环境务必设为 False) DEBUG = False # 静态文件配置 (关键!Django 必须收集静态文件到指定目录) STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # 或者如果你放在网站目录下的 static 文件夹 # STATIC_ROOT = '/www/wwwroot/myproject/staticfiles' # 媒体文件配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 确保中间件包含白名单 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # 可选:优化静态文件性能 # ... 其他中间件 ]重要:收集静态文件
在终端执行以下命令,将 Django 的静态文件收集到STATIC_ROOT指定的目录:cd /www/wwwroot/myproject source venv/bin/activate python manage.py collectstatic --noinput
第五步:数据库与域名绑定
-
数据库配置:
- 在宝塔【数据库】中创建一个 MySQL 数据库。
- 在
settings.py中更新DATABASES配置:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名', 'USER': '你的用户名', 'PASSWORD': '你的密码', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"}, } } - 安装 MySQL 驱动:
pip install mysqlclient(可能需要先安装libmysqlclient-dev)。 - 迁移数据:
python manage.py migrate。
-
SSL 证书:
- 在宝塔【网站】->【SSL】中申请 Let’s Encrypt 免费证书。
- 开启强制 HTTPS。
-
防火墙与安全组:
- 宝塔会自动开放 80/443 端口。
- 确保阿里云控制台【安全组】已放行 80 和 443 端口。
常见问题排查
- 404 Not Found:检查 Nginx 反向X_X是否配置正确,以及 Django 的
ALLOWED_HOSTS是否包含域名。 - Permission Denied:检查
logs目录和staticfiles目录的权限,确保www用户有写入权限 (chown -R www:www /www/wwwroot/myproject)。 - Gunicorn 未启动:查看
/www/wwwroot/myproject/logs/error.log日志,确认是否有语法错误或端口占用。 - 静态文件不显示:确认是否执行了
collectstatic,且 Nginx 配置中是否禁用了直接提供静态文件(通常由 Django/Gunicorn 处理,或者配置 Nginx 指向staticfiles目录)。
按照以上步骤操作,你的 Django 应用即可在阿里云 Ubuntu 22.04 + 宝塔面板环境下稳定运行。
轻量云Cloud