走啊走
加油

如何在Ubuntu 22.04上使用宝塔面板部署Django项目?

服务器价格表

下面给出一个在 Ubuntu 22.04 上使用宝塔面板(BT Panel)部署 Django 项目的完整流程,按步骤操作即可。


一、准备环境:安装宝塔面板

  1. 更新系统并安装基础工具

    sudo apt update && sudo apt upgrade -y
    sudo apt install wget curl git unzip -y
  2. 安装宝塔面板(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 是默认密钥,如需自定义可去宝塔官网获取。

  3. 等待安装完成
    安装完成后会输出类似:

    • 面板地址:http://<服务器IP>:8888
    • 用户名 / 密码

用浏览器访问该地址,登录宝塔后台。


二、在宝塔中配置运行环境

1. 创建网站目录

  1. 进入【网站】→【添加站点】

    • 域名:填写你的域名(或留空仅用 IP)
    • 根目录:例如 /www/wwwroot/mydjango
    • PHP 版本:Django 不需要 PHP,这里可以选“无”或任意版本(不影响)
    • 数据库:可选 MySQL / PostgreSQL(根据项目需求)
  2. 点击【提交】后,宝塔会自动创建目录和 Nginx 配置文件。

2. 安装 Python 环境

Django 需要 Python 3 + pip + 虚拟环境:

  1. 进入【软件商店】→ 搜索 Python → 安装 Python 3.x(推荐 3.10+)。
  2. 安装完成后,在左侧菜单找到【文件】→ 打开终端,或在宝塔的【终端】里执行:
# 确保 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 上传

  1. 在宝塔【文件】页面,右键目标目录 → 【SFTP】。
  2. 使用 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. 在宝塔中创建“应用”

  1. 进入【软件商店】→ 搜索 Gunicorn 或直接在【网站】→【应用管理】中添加。

  2. 选择类型:PythonDjango

  3. 填写信息:

    • 项目名称:任意
    • 项目路径:/www/wwwroot/mydjango
    • 启动命令:gunicorn myproject.wsgi:application --bind 127.0.0.1:8000
      • myproject 是你的 Django 项目名(包含 wsgi.py 的目录)
    • 端口:8000(内部监听,由 Nginx 反向X_X)
    • 工作进程数:建议 2–4(根据 CPU 核心数)
    • 虚拟环境:选择之前创建的 venv(宝塔通常会自动识别)
  4. 保存后,宝塔会生成对应的 Nginx 配置,自动将域名流量转发到 127.0.0.1:8000

如果宝塔没有“应用管理”,也可以手动配置 Nginx 反向X_X(见下一节)。


六、配置 Nginx 反向X_X(如未使用宝塔应用管理)

  1. 在宝塔【网站】→ 找到你的站点 → 【设置】→【伪静态】或【配置文件】。
  2. 编辑 Nginx 配置(nginx.confconf/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. 保存后点击【重载配置】。

七、配置定时任务与开机自启

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

  1. 开启 SSL

    • 在宝塔【网站】→ 你的站点 → 【SSL】
    • 选择 Let’s Encrypt 免费证书,一键申请并自动续期。
    • 勾选“强制 HTTPS”。
  2. 防火墙与安全组

    • 在宝塔【安全】中开放必要端口(80、443)。
    • 云服务器控制台(阿里云/腾讯云等)也需放行 80/443。
  3. 限制 Django 调试模式

    • 确保 DEBUG = False
    • 不要将敏感信息写入代码,使用环境变量或 .env 文件(配合 python-decoupledjango-environ)。

九、常见问题排查

  1. 访问 502 Bad Gateway

    • 检查 Gunicorn 是否运行:systemctl status django-appps aux | grep gunicorn
    • 查看日志:/var/log/gunicorn.log 或宝塔【网站】→【日志】
  2. 静态文件不生效

    • 确认 collectstatic 已执行,且 STATIC_ROOT 路径正确。
    • 检查 Nginx alias 路径是否存在且有权限。
  3. 数据库连接失败

    • 检查 settings.py 中的 DB 配置(主机、用户、密码、库名)。
    • 在宝塔【数据库】中确认数据库已创建,用户权限已授予。

如果你能提供:

  • Django 项目结构(manage.py 所在目录名)
  • 使用的数据库类型(MySQL / PostgreSQL / SQLite)
  • 是否有域名及是否要上 HTTPS

我可以给你一份更贴合你项目的具体配置命令和 Nginx 配置片段。