一、方案概述

本方案针对已完成本地开发的 DjangoBlog 项目(基于 Django 5.2,MVT 架构),实现从「本地开发环境」到「阿里云 ECS 服务器」的完整部署,采用「Nginx + Gunicorn」架构,确保项目稳定对外访问。

核心目标:解决本地项目无法对外访问的问题,实现博客系统公开可访问、后台进程持久运行、静态资源正常加载、数据安全稳定。

适用环境:

  • 本地开发环境:Windows 10/11(已完成项目开发、测试可正常运行)

  • 服务器环境:阿里云 ECS(Ubuntu 20.04 LTS,64位,最低配置 1核2G,带宽1M)

  • 项目技术栈:Python 3.10+、Django 5.2、SQLite(开发/部署通用,无需额外配置数据库)、Nginx、Gunicorn

二、部署前期准备(必做)

2.1 本地项目准备

确保本地 DjangoBlog 项目满足以下条件,避免部署后出现报错:

1. 本地可正常运行:执行 python manage.py runserver,访问 http://127.0.0.1:8000 可看到博客首页、详情页,Admin 后台可正常登录管理。

(1)先检查:本地项目能不能正常跑

第一步:打开你的项目终端(VS Code 里就行)

确保路径是:

D:\djangoblog>

第二步:激活虚拟环境

运行

venv\Scripts\activate

出现 (venv) 就对了。

第三步:启动项目

运行

python manage.py runserver

第四步:打开浏览器看效果

访问:

http://127.0.0.1:8000

必须看到博客首页(有标题、侧边栏、文章列表)✅ 点一篇文章能进详情页✅ 访问 http://127.0.0.1:8000/admin 能登录后台

(2)检查项目配置(必须做)

打开文件:

D:\djangoblog\djangoblog\settings.py

找到 INSTALLED_APPS必须看到 blog

运行

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',   # <--- 这里必须有
]

没有就加上,保存。

2. 已完成 Git 提交:本地项目已上传至 Gitee/GitHub 仓库(参考之前的 Git 上传步骤),确保仓库包含所有核心文件。

3. 确认项目配置:打开本地 djangoblog/settings.py,确认 INSTALLED_APPS 中已注册 blog 应用,无语法错误。

2.2 阿里云 ECS 准备

1. 购买阿里云 ECS 服务器:

  • 操作系统选择:Ubuntu 20.04 LTS(64位),推荐使用该版本,兼容性强、命令通用。
  • 配置选择:1核2G内存、1M带宽(个人博客足够,后续可升级)。
  • 购买后,记录服务器 公网IP(如:47.99.81.240),用于后续连接和访问。

2. 服务器安全组配置(关键!):

  • 登录阿里云控制台 → 进入 ECS 实例 → 找到「安全组」→ 配置入方向规则。
  • 新增规则:开放 80 端口(HTTP 访问)、22 端口(SSH 连接),允许所有来源(0.0.0.0/0),确保外部能访问服务器。

3. 连接服务器:

  • Windows 系统:使用 Xshell、Putty 或 CMD 自带的 SSH 工具,连接命令:ssh root@服务器公网IP

  • 输入服务器登录密码(购买时设置,若忘记可在阿里云控制台重置),登录成功后进入服务器命令行界面。

三、详细部署流程(按顺序执行,每一步必做)

步骤 1:服务器环境初始化

运行

dnf update -y
dnf install python3 python3-pip nginx git -y

验证:

运行

python3 --version
pip3 --version
nginx -v
git --version

步骤 2:安装项目依赖

运行(看自己租的云服务器性能,我的这个性能不是最新版本的云服务器)

pip3 install django==3.2.25 gunicorn

步骤 3:拉取项目代码

运行

cd /root
git clone https://gitee.com/Zhang-Siyu0066/djangoblog.git
cd djangoblog
ls

步骤 4:项目初始化

运行

python3 manage.py makemigrations
python3 manage.py migrate

创建超级管理员:

运行

python3 manage.py createsuperuser

测试运行:

运行

python3 manage.py runserver 0.0.0.0:8000

看到成功后按 Ctrl + C 停止

步骤 5:Gunicorn 配置与启动

运行

gunicorn --bind 127.0.0.1:8000 djangoblog.wsgi:application

后台持久运行:

运行

nohup gunicorn --bind 127.0.0.1:8000 djangoblog.wsgi:application &

查看运行状态:

运行

ps aux | grep gunicorn

步骤 6:Nginx 配置(CentOS 专用路径)

新建配置文件:

运行

vi /etc/nginx/conf.d/djangoblog.conf

写入内容(直接复制):

nginx

server {
    listen 80;
    server_name 你的服务器公网IP;

    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_forwarded_for;
    }

    location /static/ {
        alias /root/djangoblog/staticfiles/;
        expires 30d;
    }
}

保存:Ctrl+O → 回车 → Ctrl+X

步骤 7:启用 Nginx 配置

运行

nginx -t
systemctl restart nginx
systemctl enable nginx
systemctl status nginx

步骤 8:收集静态文件

运行

vi djangoblog/settings.py

添加:

运行

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'

执行收集:

运行

python3 manage.py collectstatic --noinput

步骤 9:重启 Gunicorn

运行

pkill gunicorn
nohup gunicorn --bind 127.0.0.1:8000 djangoblog.wsgi:application &

步骤 10:开放防火墙端口(CentOS 必须做)

运行

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

四、部署验证

打开浏览器访问:

http://你的服务器公网IP

五、常见问题排查

5.1 无法访问网站

  • 阿里云安全组开放 80 端口
  • 防火墙开放 http
  • Nginx 运行:systemctl status nginx

5.2 502 Bad Gateway

  • Gunicorn 没启动
  • Nginx 配置地址写错

5.3 页面无样式

  •  未执行 collectstatic
  • static 路径配置错误

5.4 Admin 无法登录

  • settings.py 添加 ALLOWED_HOSTS = ['*']

六、项目维护命令

更新代码:

运行

cd /root/djangoblog
git pull
python3 manage.py migrate
python3 manage.py collectstatic --noinput
pkill gunicorn
nohup gunicorn --bind 127.0.0.1:8000 djangoblog.wsgi:application &

【附页】

代码仓库

djangoblog: 本仓库包括:1)在D盘创建项目目录并设置虚拟环境;2) 安装Django 5.2.12并创建项目和blog应用;3) 提供完整的核心配置文件代码,包括settings.py、urls.py等;4) 实现博客功能所需的模型(Post、Category、Tag)、视图和模板;5) 详细说明项目初始化流程(makemigrations、migrate等);6) 提供完整的目录结构说明和访问测试方法。https://gitee.com/Zhang-Siyu0066/djangoblog

更多推荐