在 Ubuntu 22.04 上用宝塔面板(BT Panel)部署 Django 项目,核心思路是:用 Python 环境管理器(如 pyenv 或 venv)隔离依赖,用 Nginx 做反向X_X,用 Gunicorn/uWSGI 跑进程。宝塔的“网站”功能主要面向静态或 PHP,对 Django 这种 WSGI 应用需要手动配置。
下面按步骤实操,不废话。
一、基础准备
-
安装宝塔面板(若已装可跳过)
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec安装完成后登录面板,建议先修改默认端口和登录密码(安全起见)。
-
系统更新与依赖安装
sudo apt update sudo apt install -y python3-pip python3-venv nginx supervisor git curl
二、创建项目虚拟环境(推荐方式)
不要直接用系统 Python,避免污染。
mkdir -p /www/wwwroot/your_django_project
cd /www/wwwroot/your_django_project
python3 -m venv venv
source venv/bin/activate
# 安装 Django 及其他依赖
pip install django gunicorn psycopg2-binary # 根据你的需求调整
✅ 提示:如果数据库是 PostgreSQL,需提前安装
postgresql和libpq-dev;如果是 MySQL,则装mysql-client和python3-mysqlclient。
三、配置 Django 项目
确保你的 settings.py 中:
DEBUG = FalseALLOWED_HOSTS = ['your_domain.com', 'localhost']- 静态文件路径正确(
STATIC_ROOT,MEDIA_ROOT) - 数据库连接信息已配好(建议使用环境变量或
.env文件管理密钥)
运行迁移并收集静态文件:
python manage.py migrate
python manage.py collectstatic --noinput
四、用 Gunicorn + Supervisor 启动服务
1. 创建 systemd 服务文件(更可靠,推荐)
sudo nano /etc/systemd/system/django-gunicorn.service
内容如下(替换为你的实际路径):
[Unit]
Description=Gunicorn instance to serve your_django_project
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/www/wwwroot/your_django_project
Environment="PATH=/www/wwwroot/your_django_project/venv/bin"
ExecStart=/www/wwwroot/your_django_project/venv/bin/gunicorn
--workers 3
--bind unix:/www/wwwroot/your_django_project/gunicorn.sock
your_project_name.wsgi:application
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable django-gunicorn
sudo systemctl start django-gunicorn
sudo systemctl status django-gunicorn
💡 注意:
your_project_name.wsgi是你的项目名(即包含wsgi.py的目录),不是文件名。
五、Nginx 反向X_X配置
在宝塔面板 → 网站 → 添加站点(域名),然后编辑该站点的 Nginx 配置文件(通常在 /www/server/panel/vhost/nginx/你的域名.conf),替换为以下内容:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location / {
proxy_pass http://unix:/www/wwwroot/your_django_project/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;
}
location /static/ {
alias /www/wwwroot/your_django_project/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /www/wwwroot/your_django_project/media/;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
保存后重启 Nginx:
sudo systemctl reload nginx
或在宝塔面板点击“重载配置”。
六、SSL 证书(可选但推荐)
在宝塔面板 → SSL → 申请 Let’s Encrypt 证书,一键免费获取 HTTPS。
注意:申请前确保域名解析已生效,且 80 端口未被占用。
七、常见问题排查
- 502 Bad Gateway:检查 Gunicorn 是否运行,日志看
/var/log/syslog或自定义日志。 - 权限问题:确保
www-data用户能读取项目目录和静态文件。 - 数据库连接失败:确认防火墙放行了数据库端口(如 5432),且
settings.py中的主机/IP 正确。 - 静态文件不加载:检查
collectstatic是否执行成功,Nginx 的alias路径是否正确。
八、运维建议
- 使用
.env文件管理敏感信息(配合python-decouple或django-environ)。 - 定期备份数据库和代码(可用宝塔自带的定时任务脚本)。
- 开启 fail2ban 防止暴力破解。
- 监控资源使用(htop、netdata 等)。
这套流程稳定、可维护,适合生产环境。如果你用的是 Docker,也可以考虑容器化部署,但宝塔原生方案对新手更友好。
有具体报错?贴出来,我帮你定位。
云知道CLOUD