下面以 Ubuntu 22.04 + 宝塔面板(BT Panel)为例,给出一个从零部署 Django 项目的完整流程。假设你已经:
- 有一台 Ubuntu 22.04 服务器
- 已安装宝塔面板(Linux 版)
- 有 Django 项目源码(本地或 Git 仓库)
一、基础环境准备
1. 登录宝塔并确认服务
- 用浏览器访问
http://你的IP:8888,登录宝塔。 - 在「软件商店」中安装以下必要组件(建议版本与系统兼容即可):
- Nginx
- MySQL / MariaDB(或 PostgreSQL,这里以 MySQL 为例)
- PHP(可选,Django 不需要,但有时用于管理后台等)
- Python 3.x(宝塔默认通常已有,可检查)
如果宝塔自带 Python 环境不够方便,推荐在虚拟环境中运行 Django。
二、创建数据库与用户(MySQL 示例)
- 在宝塔 → 「数据库」→ 添加数据库:
- 名称:
django_db - 用户名:
django_user - 密码:自设强密码
- 权限:全部勾选(或按需求设置)
- 名称:
- 记下数据库名、用户名、密码和主机(通常是
localhost)。
若使用 PostgreSQL,同理在「数据库」中添加,并在 Django 配置中使用相应驱动。
三、上传/克隆 Django 项目
方式 A:Git 克隆(推荐)
- 在宝塔 → 「文件」→ 进入网站根目录(如
/www/wwwroot/)。 - 新建一个文件夹,例如
myproject。 - 在该目录下打开终端(宝塔 → 终端),执行:
cd /www/wwwroot/myproject
git clone https://github.com/你的用户/你的项目.git .
# 或者先 clone 到其他地方再 cp 过来
方式 B:压缩包上传
- 本地打包项目为
.tar.gz或.zip。 - 在宝塔 → 「文件」→ 上传压缩包到
/www/wwwroot/myproject。 - 解压:
cd /www/wwwroot/myproject
tar -xzf your_project.tar.gz
# 或 unzip your_project.zip
四、配置 Python 虚拟环境
1. 创建虚拟环境
cd /www/wwwroot/myproject
python3 -m venv venv
source venv/bin/activate
激活后提示符应显示 (venv)。
2. 升级 pip 并安装依赖
pip install --upgrade pip
pip install -r requirements.txt
如果项目没有
requirements.txt,可以手动安装:pip install django gunicorn psycopg2-binary mysqlclient uwsgi # 根据实际选择
五、配置 Django settings.py
-
编辑
settings.py(通常在项目根目录):- 设置
DEBUG = False(生产环境必须关闭) - 配置
ALLOWED_HOSTS:ALLOWED_HOSTS = ['yourdomain.com', '127.0.0.1', 'localhost'] - 配置数据库连接(以 MySQL 为例):
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_db', 'USER': 'django_user', 'PASSWORD': 'your_password', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"}, } } - 静态文件配置(见下文六)。
- 设置
-
在项目中运行迁移:
python manage.py migrate
- 创建超级用户(可选):
python manage.py createsuperuser
- 收集静态文件:
python manage.py collectstatic --noinput
六、配置 Nginx + Gunicorn/uWSGI
1. 在宝塔创建网站
- 宝塔 → 「网站」→ 添加站点:
- 域名:填写你的域名(或留空仅 IP 访问)
- 根目录:
/www/wwwroot/myproject - 数据库:关联之前创建的
django_db(宝塔会帮你建好连接信息,但 Django 仍需自己配置) - 类型:选择 PHP 或 纯静态 都可以,因为 Django 由 Gunicorn 运行,Nginx 只做反向X_X。
- 保存后,进入该网站的「配置文件」。
2. 安装 Gunicorn(推荐)
source venv/bin/activate
pip install gunicorn
测试启动(临时):
gunicorn myproject.wsgi:application --bind 127.0.0.1:8000
myproject是项目主目录名(包含wsgi.py的目录),application是 WSGI 可调用对象。
3. 编写 systemd 服务(推荐,持久化)
sudo nano /etc/systemd/system/django-myproject.service
内容示例:
[Unit]
Description=Gunicorn instance to serve Django project
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/www/wwwroot/myproject
Environment="PATH=/www/wwwroot/myproject/venv/bin"
ExecStart=/www/wwwroot/myproject/venv/bin/gunicorn
--workers 3
--bind unix:/www/wwwroot/myproject/gunicorn.sock
myproject.wsgi:application
[Install]
WantedBy=multi-user.target
然后:
sudo systemctl daemon-reload
sudo systemctl enable django-myproject
sudo systemctl start django-myproject
sudo systemctl status django-myproject
确保 gunicorn.sock 生成在正确路径,且权限允许 Nginx 访问。
七、配置 Nginx 反向X_X
在宝塔中编辑对应站点的 Nginx 配置(或直接在宝塔 → 网站 → 配置 → 修改):
server {
listen 80;
server_name yourdomain.com; # 替换为你的域名
root /www/wwwroot/myproject;
index index.html index.htm index.php;
location /static/ {
alias /www/wwwroot/myproject/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /www/wwwroot/myproject/media/;
expires 30d;
}
location / {
include proxy_params;
proxy_pass http://unix:/www/wwwroot/myproject/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;
}
}
注意:
yourdomain.com替换为你自己的域名。static/和media/路径需与 Django 中STATIC_ROOT和MEDIA_ROOT对应。
保存后,在宝塔 → 网站 → 点击「重载配置」或重启 Nginx。
八、开启 HTTPS(可选但推荐)
- 在宝塔 → 网站 → 找到你的站点 → SSL。
- 选择 Let’s Encrypt 免费证书:
- 输入域名
- 自动申请并启用 HTTPS
- 勾选“强制 HTTPS”,保存。
九、常见问题排查
-
页面 502 Bad Gateway
- 检查 Gunicorn 是否运行:
systemctl status django-myproject - 查看日志:
journalctl -u django-myproject -f - 检查 socket 文件是否存在及权限:
ls -l /www/wwwroot/myproject/gunicorn.sock sudo chown www-data:www-data /www/wwwroot/myproject/gunicorn.sock
- 检查 Gunicorn 是否运行:
-
静态文件不生效
- 确认
collectstatic已执行 - 确认 Nginx 中
location /static/指向正确的STATIC_ROOT - 检查
STATIC_URL和STATIC_ROOT在settings.py中是否正确
- 确认
-
数据库连接失败
- 检查
settings.py中的 DB 配置 - 确认 MySQL 服务正常:
systemctl status mysql - 尝试在服务器上
mysql -u django_user -p -h localhost测试连接
- 检查
-
权限问题
- 确保项目目录所有者为
www-data:sudo chown -R www-data:www-data /www/wwwroot/myproject
- 确保项目目录所有者为
十、后续维护建议
- 定期更新系统:
apt update && apt upgrade - 定期备份数据库和静态文件
- 使用宝塔的定时任务做备份
- 监控 Gunicorn/Nginx 日志(可在宝塔 → 网站 → 日志中查看)
如果你提供:
- 项目结构(是否有
manage.py、wsgi.py) - 使用的数据库类型(MySQL / PostgreSQL)
- 是否需要多域名 / 多项目
我可以给出更贴合你情况的配置片段(包括具体的 settings.py 和 Nginx 配置)。
CLOUD云枢