速卖通素材
努力

ubuntu22.04宝塔部署django项目?

服务器

在 Ubuntu 22.04 上通过宝塔面板(Baota Panel)部署 Django 项目,通常有两种主流方案:

  1. 方案一(推荐): 使用宝塔自带的 Nginx + uWSGI 模式。这是最稳定、性能最好且符合 Django 官方最佳实践的方式。
  2. 方案二: 使用 Python 虚拟环境配合 Nginx 反向X_X(类似 WSGI),适合轻量级或特定需求。

以下是基于 Ubuntu 22.04宝塔面板 (LNMP/LAMP) 的完整部署步骤(以方案一为主):


第一阶段:准备工作

1. 安装宝塔面板(如果尚未安装)

如果你还没有安装宝塔,请在终端执行以下命令(需要 root 权限):

# 下载并安装宝塔面板
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec

安装完成后,访问 http://你的IP:端口,输入用户名密码登录面板。

2. 安装必要的软件源组件

进入宝塔面板 -> 软件商店,确保安装了以下核心组件(如果没有,请一键安装):

  • Nginx (Web 服务器)
  • Python (建议版本 3.8 或 3.9,Django 3.x/4.x 推荐 Python 3.8+)
    • 注意:Ubuntu 22.04 默认可能没有预装 Python 3,请在“软件商店”搜索 Python 并安装最新版。
  • MySQL / MariaDB (数据库)
  • Redis (可选,用于缓存或 Celery)

第二阶段:配置 Django 项目

1. 创建网站目录与上传代码

  1. 在宝塔左侧菜单点击 网站 -> 添加站点
    • 域名:填写你的域名(或留空,后续用 IP 访问)。
    • 根目录:例如 /www/wwwroot/myproject
  2. 将你的 Django 项目代码上传到该目录(推荐使用 SFTP 工具如 FileZilla,或者在终端使用 scp/git clone)。
    • 假设项目结构如下:
      /www/wwwroot/myproject
      ├── manage.py
      ├── myproject/ (settings.py 所在目录)
      └── venv/      (虚拟环境,稍后创建)

2. 创建 Python 虚拟环境

为了避免依赖冲突,建议在项目目录下创建虚拟环境。
在宝塔面板左侧点击 终端,执行:

cd /www/wwwroot/myproject
python3 -m venv venv
source venv/bin/activate

3. 安装依赖

激活虚拟环境后,安装 requirements.txt 中的依赖:

pip install -r requirements.txt
# 如果项目中没有 requirements.txt,手动安装 django 等包
pip install django uwsgi gunicorn psycopg2-binary redis

注意:如果数据库是 MySQL,通常需要安装 mysqlclientpsycopg2-binary (PostgreSQL)。

4. 修改 Django Settings (settings.py)

打开项目根目录下的 myproject/settings.py,进行以下关键修改:

A. 允许所有主机访问 (开发/测试环境)

ALLOWED_HOSTS = ['*', '你的域名', '你的IP']

B. 静态文件配置
Django 需要收集静态文件到指定目录,Nginx 负责直接提供这些文件。

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

# 静态文件目录
STATIC_ROOT = BASE_DIR / 'staticfiles' 
STATIC_URL = '/static/'

# 媒体文件目录 (用户上传的文件)
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'

C. 数据库配置
确保数据库连接信息正确(宝塔会自动生成数据库,需填入此处):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 或 postgresql
        'NAME': '你的数据库名',
        'USER': '你的数据库用户',
        'PASSWORD': '你的数据库密码',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

5. 收集静态文件并迁移数据库

在终端执行:

# 收集静态文件
python manage.py collectstatic --noinput

# 数据库迁移
python manage.py migrate

# (可选) 创建超级管理员
python manage.py createsuperuser

第三阶段:配置 Nginx 与 uWSGI (核心步骤)

这是 Django 部署最关键的一步,让 Nginx 把请求转发给 uWSGI 处理。

1. 在宝塔中配置网站

  1. 回到宝塔 网站 列表,点击你刚才创建的站点右侧的 设置
  2. 选择 配置文件 标签页。
  3. 删除原有的 location / { ... } 块,替换为以下内容(根据你的实际路径调整):
server {
    listen 80;
    server_name your_domain.com; # 替换为你的域名

    root /www/wwwroot/myproject; # 替换为你的项目根目录

    charset utf-8;

    # 1. 静态文件配置 (由 Nginx 直接处理,速度快)
    location /static/ {
        alias /www/wwwroot/myproject/staticfiles/; # 对应 settings.py 中的 STATIC_ROOT
        expires 7d;
        access_log off;
    }

    # 2. 媒体文件配置 (用户上传的文件)
    location /media/ {
        alias /www/wwwroot/myproject/media/;
        expires 30d;
    }

    # 3. Django 应用配置 (转发给 uWSGI)
    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/myproject.sock; # 对应下方 uwsgi.ini 的配置
        uwsgi_param HTTP_PROXY "$http_proxy";
    }

    # 错误日志
    error_log /www/wwwlogs/myproject_error.log;
    access_log /www/wwwlogs/myproject_access.log;
}

保存后点击“重载配置”。

2. 创建 uWSGI 配置文件

在项目根目录 /www/wwwroot/myproject/ 下新建一个文件 uwsgi.ini

[uwsgi]
# 项目主目录
chdir = /www/wwwroot/myproject

# 启动时激活虚拟环境
virtualenv = /www/wwwroot/myproject/venv

# 模块路径 (格式:path.to.settings.wsgi_application)
module = myproject.wsgi:application

# 监听 socket 地址 (必须与 Nginx 配置一致)
socket = /tmp/myproject.sock

# Socket 权限 (确保 www 用户可读写)
chmod-socket = 666

# 进程数 (根据 CPU 核心数调整,通常 4-8)
workers = 4

# 线程数
threads = 2

# 缓冲大小
buffer-size = 32768

# 自动回收内存
max-requests = 5000
vacuum = true

# 守护进程
daemonize = /www/wwwlogs/uwsgi.log

注意:请将 myproject.wsgi:application 中的 myproject 替换为你实际的项目文件夹名称(即包含 settings.py 的那个文件夹名)。

3. 启动 uWSGI 服务

在终端执行:

cd /www/wwwroot/myproject
source venv/bin/activate
uwsgi --ini uwsgi.ini

此时,如果提示启动成功,说明后端已就绪。你可以按 Ctrl+C 停止它,稍后用后台运行方式启动,或者直接使用宝塔的“计划任务”来管理开机自启。

推荐:使用宝塔计划任务实现开机自启

  1. 宝塔左侧菜单 -> 计划任务
  2. 类型选择 Shell 脚本
  3. 周期选择 每天 (或自定义),时间填 00:00
  4. 脚本内容填入启动命令(加上 nohup& 让它后台运行):
    cd /www/wwwroot/myproject && source venv/bin/activate && nohup uwsgi --ini uwsgi.ini &

    (注:更稳健的方式是使用 systemd 服务,但宝塔计划任务对新手最友好)


第四阶段:验证与优化

  1. 检查状态
    在终端输入 ps -ef | grep uwsgi,如果有进程运行,说明启动成功。
  2. 访问测试
    浏览器访问 http://你的域名http://你的IP

    • 如果能看到你 Django 的首页或报错页面(非 502 Bad Gateway),说明配置基本成功。
    • 如果看到 502 Bad Gateway,通常是 uwsgi.ini 中的 socket 路径不对,或者 Nginx 配置中的 alias 路径有误。
  3. 开启 HTTPS
    在宝塔网站设置中,点击 SSL,申请免费的 Let’s Encrypt 证书并开启强制跳转 HTTPS。
  4. 生产环境安全
    • 再次确认 DEBUG = Falsesettings.py 中。
    • 设置强密码的 SECRET_KEY。
    • 确保数据库防火墙仅允许本地访问。

常见问题排查

问题现象 可能原因 解决方案
502 Bad Gateway Nginx 无法连接 uWSGI socket 检查 uwsgi.ini 中的 socket 路径与 Nginx 配置是否完全一致;检查文件权限 chmod 666
404 Not Found (静态文件) 静态文件未收集或路径错误 运行 python manage.py collectstatic;检查 Nginx alias 路径是否指向 STATIC_ROOT
数据库连接拒绝 数据库未创建或密码错误 在宝塔“数据库”中添加对应数据库和用户,并在 settings.py 中更新信息。
uWSGI 启动后立即退出 代码有语法错误或依赖缺失 查看 /www/wwwlogs/uwsgi.log 日志,定位具体报错。

按照以上步骤,你就可以在 Ubuntu 22.04 的宝塔面板上稳定运行 Django 项目了。

未经允许不得转载:轻量云Cloud » ubuntu22.04宝塔部署django项目?