下面给出一个在 Ubuntu 22.04 上使用宝塔面板(BT Panel)部署 Django 项目的完整流程,按步骤操作即可。
一、准备环境:安装宝塔面板
-
更新系统并安装基础工具
sudo apt update && sudo apt upgrade -y sudo apt install wget curl git unzip -y -
安装宝塔面板(Linux 版)
# 使用官方推荐命令(以 Ubuntu 22.04 为例) wget -O install.sh http://www.bt.cn/panel/install/shell/install_6.0.sh sudo bash install.sh ed8484bec注意:
ed8484bec是默认密钥,如需自定义可去宝塔官网获取。 -
等待安装完成
安装完成后会输出类似:- 面板地址:
http://<服务器IP>:8888 - 用户名 / 密码
- 面板地址:
用浏览器访问该地址,登录宝塔后台。
二、在宝塔中配置运行环境
1. 创建网站目录
-
进入【网站】→【添加站点】
- 域名:填写你的域名(或留空仅用 IP)
- 根目录:例如
/www/wwwroot/mydjango - PHP 版本:Django 不需要 PHP,这里可以选“无”或任意版本(不影响)
- 数据库:可选 MySQL / PostgreSQL(根据项目需求)
-
点击【提交】后,宝塔会自动创建目录和 Nginx 配置文件。
2. 安装 Python 环境
Django 需要 Python 3 + pip + 虚拟环境:
- 进入【软件商店】→ 搜索
Python→ 安装Python 3.x(推荐 3.10+)。 - 安装完成后,在左侧菜单找到【文件】→ 打开终端,或在宝塔的【终端】里执行:
# 确保 python3 和 pip 可用
python3 --version
pip3 --version
如果 pip3 不存在,可以:
sudo apt install python3-pip -y
三、上传 Django 项目代码
方式一:使用宝塔终端直接拉取
假设你的项目已经在 Git 仓库:
cd /www/wwwroot/mydjango
git clone https://github.com/youruser/yourproject.git .
或直接上传本地压缩包到 /www/wwwroot/mydjango,然后解压。
方式二:使用 SFTP 上传
- 在宝塔【文件】页面,右键目标目录 → 【SFTP】。
- 使用 FileZilla / WinSCP 等工具连接服务器,将项目文件上传到对应目录。
四、配置 Django 项目
1. 创建虚拟环境(推荐)
cd /www/wwwroot/mydjango
python3 -m venv venv
source venv/bin/activate
2. 安装依赖
pip install --upgrade pip
pip install django gunicorn psycopg2-binary # 根据你的项目调整
# 如果是 SQLite,则不需要 psycopg2-binary
3. 修改 settings.py
确保以下配置正确(以生产环境为例):
DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com', 'localhost', '127.0.0.1']
# 静态文件
STATIC_URL = '/static/'
STATIC_ROOT = '/www/wwwroot/mydjango/staticfiles'
# 媒体文件(如有上传)
MEDIA_URL = '/media/'
MEDIA_ROOT = '/www/wwwroot/mydjango/media'
# 数据库(示例:MySQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'db_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
若使用 PostgreSQL,则
ENGINE改为django.db.backends.postgresql,并确保已安装psycopg2-binary。
4. 收集静态文件
python manage.py collectstatic --noinput
确保 collectstatic 生成的目录在 STATIC_ROOT 下,且 Nginx 能访问。
五、配置 Gunicorn 作为应用服务器
1. 在宝塔中创建“应用”
-
进入【软件商店】→ 搜索
Gunicorn或直接在【网站】→【应用管理】中添加。 -
选择类型:Python 或 Django。
-
填写信息:
- 项目名称:任意
- 项目路径:
/www/wwwroot/mydjango - 启动命令:
gunicorn myproject.wsgi:application --bind 127.0.0.1:8000myproject是你的 Django 项目名(包含wsgi.py的目录)
- 端口:8000(内部监听,由 Nginx 反向X_X)
- 工作进程数:建议 2–4(根据 CPU 核心数)
- 虚拟环境:选择之前创建的
venv(宝塔通常会自动识别)
-
保存后,宝塔会生成对应的 Nginx 配置,自动将域名流量转发到
127.0.0.1:8000。
如果宝塔没有“应用管理”,也可以手动配置 Nginx 反向X_X(见下一节)。
六、配置 Nginx 反向X_X(如未使用宝塔应用管理)
- 在宝塔【网站】→ 找到你的站点 → 【设置】→【伪静态】或【配置文件】。
- 编辑 Nginx 配置(
nginx.conf或conf/nginx.conf),在server块中加入:
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;
}
# 静态文件直接由 Nginx 提供
location /static/ {
alias /www/wwwroot/mydjango/staticfiles/;
expires 30d;
}
# 媒体文件
location /media/ {
alias /www/wwwroot/mydjango/media/;
expires 30d;
}
- 保存后点击【重载配置】。
七、配置定时任务与开机自启
1. 设置 Gunicorn 为系统服务(可选但推荐)
创建 systemd 服务文件:
sudo nano /etc/systemd/system/django-app.service
内容示例:
[Unit]
Description=Gunicorn instance to serve Django project
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/www/wwwroot/mydjango
Environment="PATH=/www/wwwroot/mydjango/venv/bin"
ExecStart=/www/wwwroot/mydjango/venv/bin/gunicorn
--workers 3
--bind unix:/www/wwwroot/mydjango/gunicorn.sock
myproject.wsgi:application
Restart=always
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable django-app
sudo systemctl start django-app
然后在 Nginx 中使用 unix socket 反向X_X:
location / {
proxy_pass http://unix:/www/wwwroot/mydjango/gunicorn.sock;
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;
}
2. 定时任务(如清理缓存、备份等)
在宝塔【计划任务】中:
- 类型:Shell 脚本
- 执行周期:按需设置
- 脚本内容:例如
python manage.py clearcache等
八、安全与 HTTPS
-
开启 SSL
- 在宝塔【网站】→ 你的站点 → 【SSL】
- 选择 Let’s Encrypt 免费证书,一键申请并自动续期。
- 勾选“强制 HTTPS”。
-
防火墙与安全组
- 在宝塔【安全】中开放必要端口(80、443)。
- 云服务器控制台(阿里云/腾讯云等)也需放行 80/443。
-
限制 Django 调试模式
- 确保
DEBUG = False。 - 不要将敏感信息写入代码,使用环境变量或
.env文件(配合python-decouple或django-environ)。
- 确保
九、常见问题排查
-
访问 502 Bad Gateway
- 检查 Gunicorn 是否运行:
systemctl status django-app或ps aux | grep gunicorn - 查看日志:
/var/log/gunicorn.log或宝塔【网站】→【日志】
- 检查 Gunicorn 是否运行:
-
静态文件不生效
- 确认
collectstatic已执行,且STATIC_ROOT路径正确。 - 检查 Nginx
alias路径是否存在且有权限。
- 确认
-
数据库连接失败
- 检查
settings.py中的 DB 配置(主机、用户、密码、库名)。 - 在宝塔【数据库】中确认数据库已创建,用户权限已授予。
- 检查
如果你能提供:
- Django 项目结构(
manage.py所在目录名) - 使用的数据库类型(MySQL / PostgreSQL / SQLite)
- 是否有域名及是否要上 HTTPS
我可以给你一份更贴合你项目的具体配置命令和 Nginx 配置片段。
CLOUD云计算