ubuntu22.04宝塔部署django项目?

在 Ubuntu 22.04 上用宝塔面板(BT Panel)部署 Django 项目,核心思路是:用 Python 环境管理器(如 pyenv 或 venv)隔离依赖,用 Nginx 做反向X_X,用 Gunicorn/uWSGI 跑进程。宝塔的“网站”功能主要面向静态或 PHP,对 Django 这种 WSGI 应用需要手动配置。

下面按步骤实操,不废话。


一、基础准备

  1. 安装宝塔面板(若已装可跳过)

    wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec

    安装完成后登录面板,建议先修改默认端口和登录密码(安全起见)。

  2. 系统更新与依赖安装

    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,需提前安装 postgresqllibpq-dev;如果是 MySQL,则装 mysql-clientpython3-mysqlclient


三、配置 Django 项目

确保你的 settings.py 中:

  • DEBUG = False
  • ALLOWED_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-decoupledjango-environ)。
  • 定期备份数据库和代码(可用宝塔自带的定时任务脚本)。
  • 开启 fail2ban 防止暴力破解。
  • 监控资源使用(htop、netdata 等)。

这套流程稳定、可维护,适合生产环境。如果你用的是 Docker,也可以考虑容器化部署,但宝塔原生方案对新手更友好。

有具体报错?贴出来,我帮你定位。

未经允许不得转载:云知道CLOUD » ubuntu22.04宝塔部署django项目?