在阿里云 Ubuntu 22.04 上安装宝塔面板后配置 Django,推荐采用 “宝塔 Nginx + Gunicorn + Python3” 的经典组合。这种方式既利用了宝塔的可视化优势,又能保证生产环境的性能。
以下是完整的操作步骤:
第一步:准备环境(通过宝塔面板)
- 登录宝塔面板:使用 SSH 工具(如 Xshell、PuTTY)或直接在浏览器访问
http://你的IP:8888登录。 - 安装软件栈:
- 进入左侧菜单 【软件商店】。
- 搜索并安装 Nginx(建议版本 1.24+)。
- 搜索并安装 Python3.9(Django 3.x/4.x 推荐使用 Python 3.9 或 3.10,Ubuntu 22.04 默认源可能较新,直接选最新版即可)。
- 安装完成后,点击 Python3 旁边的 【设置】 -> 【管理插件】,确保安装了
pip和virtualenv(通常默认已装)。
第二步:创建项目目录与虚拟环境
-
创建网站目录:
- 在宝塔左侧菜单进入 【文件】。
- 在
/www/wwwroot/下创建一个文件夹,例如my_django_project。 - 将该文件夹的权限设置为
755,所有者设为www(或者你当前登录的用户)。
-
上传代码:
- 将你的 Django 项目代码上传到
/www/wwwroot/my_django_project/。 - 确保根目录下有
manage.py和requirements.txt(如果有的话)。
- 将你的 Django 项目代码上传到
-
初始化虚拟环境:
- 打开宝塔的 【终端】(SSH 连接)。
- 切换到项目目录并创建虚拟环境:
cd /www/wwwroot/my_django_project python3 -m venv venv source venv/bin/activate - 安装依赖(根据你的
requirements.txt或手动安装):pip install django gunicorn psycopg2-binary # 如果是 MySQL 则换成 mysqlclient - 注意:如果需要使用数据库,请先在宝塔【数据库】中创建好对应的库和用户,并更新
settings.py中的配置。
第三步:配置 Django (settings.py)
修改项目根目录下的 settings.py 文件:
-
ALLOWED_HOSTS:
必须添加你的域名或服务器 IP,否则 Django 会报错 403。ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1', 'YOUR_SERVER_IP'] -
静态文件配置:
确保STATIC_URL和STATIC_ROOT配置正确。import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # 确保这个路径存在且有写入权限 -
收集静态文件:
在终端运行以下命令生成静态文件到staticfiles目录:python manage.py collectstatic --noinput此时,
/www/wwwroot/my_django_project/staticfiles/目录下会有大量静态文件。 -
开启 DEBUG 模式(可选):
生产环境建议关闭DEBUG,但在调试时可暂时保持True。DEBUG = False
第四步:在宝塔创建站点并配置 Nginx
-
创建站点:
- 进入宝塔 【网站】 -> 【添加站点】。
- 输入域名(如果没有域名,可以先填 IP),选择 Python 版本(选择你刚才安装的 Python3.9)。
- 在“根目录”处,手动填写项目路径:
/www/wwwroot/my_django_project。 - 点击提交。
-
配置 Nginx 反向X_X:
- 进入该站点的 【设置】 -> 【配置文件】。
- 找到
server { ... }块,在location /部分进行如下修改(这是关键步骤):
server { listen 80; server_name your-domain.com; # 替换为你的域名 root /www/wwwroot/my_django_project; # 替换为实际路径 # 静态文件处理 (指向 collectstatic 生成的目录) location /static/ { alias /www/wwwroot/my_django_project/staticfiles/; expires 30d; add_header Cache-Control "public, immutable"; } # Django 应用处理 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。
第五步:启动 Gunicorn (守护进程)
Gunicorn 是负责运行 Django 应用的 WSGI 服务器。
-
创建启动脚本:
在宝塔左侧菜单进入 【计划任务】 -> 【添加计划任务】 -> 【Shell 脚本】(或者直接写一个 systemd 服务,推荐 systemd 方式更稳定)。推荐方式:使用 Systemd 管理(最稳定)
在终端执行:
nano /etc/systemd/system/django-myproject.service粘贴以下内容(请根据实际情况修改路径):
[Unit] Description=Django myproject daemon After=network.target [Service] User=www Group=www WorkingDirectory=/www/wwwroot/my_django_project ExecStart=/www/wwwroot/my_django_project/venv/bin/gunicorn --workers 3 --bind unix:/www/wwwroot/my_django_project/myproject.sock myproject.wsgi:application Restart=always [Install] WantedBy=multi-user.target注意:
myproject.wsgi:application中的myproject需替换为你实际的 Django 项目名称(即包含 wsgi.py 的那个文件夹名)。保存退出 (
Ctrl+O,Enter,Ctrl+X),然后启动服务:systemctl start django-myproject.service systemctl enable django-myproject.service systemctl status django-myproject.service -
调整 Nginx 配置以匹配 Socket:
回到宝塔 【网站】 -> 【设置】 -> 【配置文件】。
由于我们使用了 Unix Socket (myproject.sock),需要修改location /部分:location / { include uwsgi_params; uwsgi_pass unix:/www/wwwroot/my_django_project/myproject.sock; uwsgi_param UWSGI_CHDIR /www/wwwroot/my_django_project; uwsgi_param UWSGI_PYHOME /www/wwwroot/my_django_project/venv; uwsgi_param UWSGI_VIRTUALENV /www/wwwroot/my_django_project/venv; uwsgi_param UWSGI_SCRIPT myproject.wsgi:application; }(注:如果你不想用 socket,也可以改回
proxy_pass http://127.0.0.1:8000;,但需要在 Gunicorn 启动命令中加--bind 127.0.0.1:8000)。保存并重载 Nginx。
第六步:防火墙与安全组
-
宝塔防火墙:
- 进入 【安全】 页面。
- 确保 80 (HTTP) 和 443 (HTTPS) 端口已放行。
- 如果使用 HTTPS,记得申请证书。
-
阿里云安全组:
- 登录阿里云控制台 -> ECS 实例 -> 安全组。
- 添加入方向规则:允许 TCP 协议的 80 和 443 端口。
常见问题排查
- 502 Bad Gateway:
- 检查 Gunicorn 是否启动成功:
systemctl status django-myproject.service。 - 检查 Nginx 错误日志:
tail -f /www/wwwlogs/你的域名-error.log。 - 检查
settings.py中的ALLOWED_HOSTS是否包含了域名。
- 检查 Gunicorn 是否启动成功:
- 权限问题:
- 确保
/www/wwwroot/my_django_project/及其子目录属于www用户。 chmod -R 755 /www/wwwroot/my_django_projectchown -R www:www /www/wwwroot/my_django_project
- 确保
- 数据库连接失败:
- 确认
settings.py中的数据库密码、用户名是否正确。 - 确认宝塔数据库中该用户是否有远程连接权限(虽然本地通常不需要,但需确认 host 设置为
%或localhost)。
- 确认
完成以上步骤后,访问你的域名即可看到 Django 首页。
云知识CLOUD