在阿里云 Ubuntu 22.04 上安装宝塔面板后配置 Django,建议采用“宝塔 + Nginx + Gunicorn + Python 虚拟环境”的标准生产模式。这种方式既利用了宝塔的图形化管理便利性,又能保证 Django 应用的安全性和性能。
以下是完整的操作指南:
第一步:准备工作(系统级)
-
登录宝塔面板
使用浏览器访问http://你的服务器IP:8888,输入用户名和密码登录。 -
安装必要的软件栈
在宝塔左侧菜单点击 “软件商店”,确保安装了以下核心组件(如果未安装):- Nginx (Web 服务器)
- Python 3.x (宝塔通常自带 Python 3.9+,请确认版本)
- MySQL/MariaDB (用于数据库,或者使用 SQLite/Redis)
- Redis (可选,用于缓存或 Celery)
- Git (用于拉取代码)
注意:Ubuntu 22.04 默认可能预装了 Python 3.10,宝塔有时会自动管理。建议在终端检查:
python3 --version。如果宝塔自带的 Python 版本过旧,可以在软件商店搜索 "Python" 并安装指定版本(如 3.10 或 3.11),但需注意后续路径配置。
第二步:创建网站与目录结构
-
创建网站站点
- 进入 “网站” -> “添加站点”。
- 填写域名(如果没有域名,可以先填 IP 或 localhost)。
- 根目录:建议自定义,例如
/www/wwwroot/my_django_app。 - PHP 版本:选择“纯静态”或“无”。
- 数据库:根据需求选择(Django 需要 MySQL/PostgreSQL 时在此创建,若用 SQLite 可跳过)。
- 点击确定,等待创建完成。
-
上传代码
- 进入 “文件”,打开刚才创建的目录 (
/www/wwwroot/my_django_app)。 - 将你的 Django 项目源码上传到该目录(建议使用 FTP 工具如 FileZilla,或在宝塔终端使用
git clone/scp)。 - 关键结构:确保
manage.py位于根目录下,且包含requirements.txt、static/、media/等文件夹。
- 进入 “文件”,打开刚才创建的目录 (
第三步:配置 Python 虚拟环境(推荐)
为了隔离依赖,不要直接在系统 Python 下安装包。
-
进入终端
在宝塔左侧菜单点击 “终端”,切换到网站目录:cd /www/wwwroot/my_django_app -
创建虚拟环境
# 假设你使用的是系统默认的 python3 python3 -m venv venv source venv/bin/activate激活后,命令行提示符前会出现
(venv)字样。 -
安装依赖
pip install --upgrade pip pip install -r requirements.txt注意:如果
requirements.txt中没有gunicorn和psycopg2-binary(如果是 PostgreSQL),请手动添加。
如果是 MySQL,通常需要安装mysqlclient或pymysql。 -
收集静态文件
在settings.py中已配置好STATIC_ROOT后,执行:python manage.py collectstatic --noinput这会将所有静态文件汇总到指定的目录(通常是
staticfiles或你配置的STATIC_ROOT)。 -
设置环境变量
编辑.env文件或直接在终端导出关键变量(生产环境强烈建议使用.env文件配合python-decouple或django-environ):export DJANGO_SETTINGS_MODULE=myproject.settings.production export SECRET_KEY=你的超安全密钥 export DEBUG=False export ALLOWED_HOSTS='*' # 生产环境需替换为具体域名建议创建一个
start_gunicorn.sh脚本,将所有命令写入其中,方便调用。
第四步:启动 Django (Gunicorn)
Django 自带的开发服务器 (runserver) 不能用于生产环境,必须使用 Gunicorn。
-
测试启动
在终端运行(假设你的主程序名为myproject,WSGI 模块为myproject.wsgi):gunicorn myproject.wsgi:application --bind 127.0.0.1:8000如果看到
Starting gunicorn...且无报错,说明配置正确。按Ctrl+C停止。 -
配置 Systemd 守护进程 (宝塔方式)
为了让服务开机自启并在后台稳定运行,我们需要创建一个 systemd 服务文件。-
在宝塔 “终端” 中输入:
sudo nano /etc/systemd/system/django-app.service -
粘贴以下内容(请根据实际情况修改路径):
[Unit] Description=Django App After=network.target [Service] User=www Group=www WorkingDirectory=/www/wwwroot/my_django_app Environment="PATH=/www/wwwroot/my_django_app/venv/bin" ExecStart=/www/wwwroot/my_django_app/venv/bin/gunicorn myproject.wsgi:application --workers 3 --bind unix:/www/wwwroot/my_django_app/gunicorn.sock [Install] WantedBy=multi-user.target注意:
User和Group通常设为www(宝塔默认用户)。ExecStart中的路径要对应你的实际项目名和 WSGI 入口。 -
保存退出 (
Ctrl+O,Enter,Ctrl+X)。 -
启动服务:
sudo systemctl daemon-reload sudo systemctl start django-app sudo systemctl enable django-app sudo systemctl status django-app
-
第五步:配置 Nginx 反向X_X
现在 Django 正在监听一个 Unix Socket (gunicorn.sock),需要 Nginx 来转发请求。
-
找到站点配置文件
在宝塔 “网站” 列表,点击你的 Django 站点右侧的 “设置” -> “配置文件”。 -
替换内容
删除原有的 PHP 配置,替换为如下 Nginx 配置:server { listen 80; server_name your_domain.com; # 替换为你的域名 # 静态文件处理 location /static/ { alias /www/wwwroot/my_django_app/staticfiles/; # 替换为你 collectstatic 后的目录 expires 30d; add_header Cache-Control "public, immutable"; } # 媒体文件处理 (如果有用户上传的文件) location /media/ { alias /www/wwwroot/my_django_app/media/; expires 30d; } # 动态请求转发给 Gunicorn location / { include proxy_params; proxy_pass http://unix:/www/wwwroot/my_django_app/gunicorn.sock; # 防止超时 proxy_read_timeout 60s; proxy_connect_timeout 60s; proxy_send_timeout 60s; } }注意:如果你的
collectstatic输出目录不是staticfiles,请修改alias路径。 -
重载 Nginx
在宝塔 “网站” 页面点击 “重载配置”,或者在终端执行sudo nginx -t && sudo systemctl reload nginx。
第六步:数据库与安全配置
-
修改
settings.py
确保DEBUG = False。
确保ALLOWED_HOSTS包含了你的域名:ALLOWED_HOSTS = ['your_domain.com', 'localhost', '127.0.0.1']配置数据库连接(使用宝塔创建的 MySQL 账号密码)。
-
SSL 证书 (HTTPS)
在宝塔 “网站” -> “SSL” 中,申请免费 Let’s Encrypt 证书并开启 HTTPS。- 开启后,记得在
settings.py中添加SECURE_SSL_REDIRECT = True和SESSION_COOKIE_SECURE = True。
- 开启后,记得在
-
防火墙设置
确保阿里云控制台的安全组开放了 80 和 443 端口。- 宝塔内部不需要开放 Django 端口(8000),因为它是通过 Nginx (80/443) 转发的。
常见问题排查
- Permission Denied: 如果 Nginx 无法读取 socket 或文件,检查目录权限。
sudo chown -R www:www /www/wwwroot/my_django_app sudo chmod -R 755 /www/wwwroot/my_django_app - Import Error: 如果提示找不到某个库,检查是否激活了虚拟环境,或者
requirements.txt是否完整。 - Static files 404: 检查
collectstatic是否成功运行,以及 Nginx 配置中的alias路径是否与物理路径完全一致。 - Database Connection Refused: 检查 MySQL 是否允许远程连接(虽然本地 Django 连本地 MySQL 通常没问题),或者防火墙是否拦截了 3306 端口(本地连接通常不受影响,除非配置了 bind-address)。
按照以上步骤,你的 Django 应用即可在阿里云 Ubuntu 22.04 + 宝塔面板环境下稳定运行。
CLOUD云枢