手把手教你把 DjangoBlog 部署到云服务器
一、方案概述
本方案针对已完成本地开发的 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 &
【附页】
代码仓库
更多推荐












所有评论(0)