在阿里云 Ubuntu 22.04 上安装宝塔面板后配置 Django,推荐采用“宝塔 Nginx + Gunicorn + Python3”的标准生产环境方案。虽然宝塔有自带的“网站”功能,但 Django 项目通常需要自定义部署流程,直接通过宝塔的“文件管理”和“终端”操作最为灵活。
以下是完整的操作步骤:
第一步:环境准备与依赖安装
-
登录宝塔面板
- 打开浏览器访问
http://你的服务器IP:8888,输入账号密码登录。
- 打开浏览器访问
-
安装基础软件(通过宝塔“软件商店”)
- 进入左侧菜单【软件商店】。
- 搜索并安装以下软件(版本建议保持较新):
- Nginx (Web 服务器)
- Python 3.9+ (Django 运行环境,宝塔默认通常已带 Python3,若需特定版本可手动安装或修改软链接)
- MySQL 5.7/8.0 或 MariaDB (数据库)
- Redis (可选,用于缓存或 Celery)
- 注意:如果宝塔自带的 Python 版本过旧,建议在终端中重新安装一个高版本 Python,或者直接使用系统自带的最新版本。
-
创建项目目录
- 点击左侧【文件】->【网站】->【添加站点】(这一步主要是为了生成默认的 Nginx 配置文件结构,后续我们会覆盖它)。
- 或者直接在
/www/wwwroot下创建一个专属目录,例如/www/wwwroot/my_django_project。 - 确保该目录的所有权属于当前用户(通常是
www):sudo chown -R www:www /www/wwwroot/my_django_project
第二步:上传代码与安装依赖
-
上传代码
- 使用 FTP 工具(如 FileZilla,端口默认为 21)或直接使用宝塔【文件】界面的【上传】功能,将本地 Django 项目的源代码上传到
/www/wwwroot/my_django_project目录下。 - 提示:确保上传了
requirements.txt文件。
- 使用 FTP 工具(如 FileZilla,端口默认为 21)或直接使用宝塔【文件】界面的【上传】功能,将本地 Django 项目的源代码上传到
-
创建虚拟环境(推荐)
- 点击宝塔左侧【终端】。
- 进入项目目录:
cd /www/wwwroot/my_django_project - 安装虚拟环境工具(如果未安装):
sudo apt update && sudo apt install python3-venv -y - 创建并激活虚拟环境:
python3 -m venv venv source venv/bin/activate - 安装依赖:
pip install django gunicorn psycopg2-binary redis # 如果有 requirements.txt pip install -r requirements.txt - 注意:
psycopg2-binary是 PostgreSQL 驱动,如果你用 MySQL,请换成mysqlclient。
-
配置 Django 设置
-
编辑
settings.py文件(位于项目根目录):# 允许所有域名访问(生产环境建议改为具体域名) ALLOWED_HOSTS = ['*', 'your-domain.com'] # 数据库配置 (以 MySQL 为例) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名', 'USER': '你的用户名', 'PASSWORD': '你的密码', 'HOST': 'localhost', 'PORT': '3306', } } # 静态文件配置 (关键) STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_URL = '/static/' # 关闭调试模式 DEBUG = False
-
-
收集静态文件
- 执行以下命令生成静态文件到
staticfiles目录:python manage.py collectstatic --noinput
- 执行以下命令生成静态文件到
-
迁移数据库
-
python manage.py migrate
-
-
创建超级管理员
-
python manage.py createsuperuser
-
第三步:配置 Gunicorn (应用进程管理器)
Gunicorn 负责将 Django 应用转化为 HTTP 服务,供 Nginx 转发。
-
启动测试(临时)
- 在终端运行:
gunicorn myproject.wsgi:application --bind 127.0.0.1:8000 - 注意:将
myproject替换为你的实际项目文件夹名(包含manage.py的那个文件夹),wsgi是 Django 生成的模块名。 - 如果启动成功,浏览器访问
http://你的IP:8000应能看到 Django 首页。此时先按Ctrl+C停止。
- 在终端运行:
-
编写 Systemd 服务文件(实现开机自启)
- 创建服务文件:
sudo nano /etc/systemd/system/django-app.service -
粘贴以下内容(请根据实际情况修改路径、用户和项目名称):
[Unit] Description=Django Application After=network.target [Service] User=www Group=www WorkingDirectory=/www/wwwroot/my_django_project ExecStart=/www/wwwroot/my_django_project/venv/bin/gunicorn --workers 3 --bind unix:/www/wwwroot/my_django_project/gunicorn.sock myproject.wsgi:application Restart=always [Install] WantedBy=multi-user.target - 保存退出 (
Ctrl+O,Enter,Ctrl+X)。 - 启动服务:
sudo systemctl daemon-reload sudo systemctl start django-app sudo systemctl enable django-app sudo systemctl status django-app - 检查状态应为 active (running)。
- 创建服务文件:
第四步:配置 Nginx 反向X_X
现在我们需要让 Nginx 监听 80/443 端口,并将请求转发给 Gunicorn 创建的 socket 文件。
-
在宝塔中添加站点
- 点击【网站】 -> 【添加站点】。
- 域名填写你的域名(如果没有域名,可以填 IP 地址,但需要解析 A 记录指向服务器 IP)。
- 根目录选择
/www/wwwroot/my_django_project。 - 数据库类型选择对应的类型(如 MySQL),创建好即可。
- 点击【提交】。
-
修改 Nginx 配置
- 在宝塔【网站】列表中找到刚才添加的网站,点击【设置】 -> 【配置文件】。
- 删除或注释掉原有的 PHP 相关配置,替换为如下内容:
server { listen 80; server_name your-domain.com; # 替换为你的域名 location /static/ { alias /www/wwwroot/my_django_project/staticfiles/; expires 30d; add_header Cache-Control "public, immutable"; } location /media/ { alias /www/wwwroot/my_django_project/media/; expires 30d; } location / { include proxy_params; proxy_pass http://unix:/www/wwwroot/my_django_project/gunicorn.sock; # 处理 WebSocket 等长连接 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 传递真实 IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }- 保存并重启 Nginx(宝塔界面点击【重载配置】)。
第五步:SSL 证书配置(HTTPS)
为了安全,建议开启 HTTPS。
- 在宝塔【网站】 -> 【SSL】选项卡。
- 选择【Let’s Encrypt】免费证书。
- 勾选你的域名,点击【申请】。
- 申请成功后,勾选【强制 HTTPS】,保存即可。
常见问题排查
- 权限问题 (Permission Denied)
- 如果 Nginx 无法读取文件或 Gunicorn 无法写入日志,请在终端执行:
sudo chown -R www:www /www/wwwroot/my_django_project sudo chmod -R 755 /www/wwwroot/my_django_project
- 如果 Nginx 无法读取文件或 Gunicorn 无法写入日志,请在终端执行:
- 白屏或 502 Bad Gateway
- 检查 Gunicorn 服务状态:
sudo systemctl status django-app。 - 查看 Gunicorn 日志:通常在
~/logs或项目目录下的日志文件中。 - 检查
settings.py中的ALLOWED_HOSTS是否包含了你的域名。 - 确认 Nginx 配置中的
proxy_pass路径与 Gunicorn socket 路径完全一致。
- 检查 Gunicorn 服务状态:
- 数据库连接失败
- 确认
settings.py中的数据库账号密码正确。 - 确认 MySQL/MariaDB 允许远程连接(如果是本地连接则无需此步,但需确保
bind-address配置正确)。
- 确认
按照以上步骤,你就可以在阿里云 Ubuntu 22.04 + 宝塔面板上成功部署一个生产级的 Django 应用了。
CLOUD云计算