轻博客部署流程

yodragon 2026-02-21 82 阅读

1. 项目的上传

1.1. 生成密钥(第一次需要)

1.1.1. 本地密钥

①生成ssh key

ssh-keygen -t ed25519 -C ''邮箱'

②查看公钥

type $env:USERPROFILE\.ssh\id_ed25519.pub

③测试ssh

ssh -T git@gitee.com

1.1.2. 服务器密钥

ssh-keygen -t ed25519 -C "服务器"

cat ~/.ssh/id_ed25519.pub 查看密钥,把密钥粘贴在gitee

ssh -T git@gitee.com 测试

1.2. 本地化项目并上传

①进入项目目录

②如果还没初始化git

git init

③添加远程仓库

git remote add origin git@gitee.com:你的用户名/仓库名.git

④上传

git add .
git commit -m "首次上传"
git push -u origin master

⑤本地修改代码并更新

git add .
git commit -m "修改说明"
git push

1.3. 拉取项目

1.3.1. 第一次获取项目

①克隆项目

git clone git@gitee.com:你的用户名/仓库名.git

cd 仓库名

②创建虚拟环境

python3 -m venv venv

source venv/bin/activate

③下载依赖

pip install -r requirements.txt

④数据库迁移

python manage.py migrate

⑤收集静态文件

python manage.py collectstatic

1.3.2. 修改项目代码

cd /home/debian/myblog #切换到工作目录
git pull origin master  #拉取代码
python manage.py migrate  # 如果改了模型
python manage.py collectstatic  # 如果改了静态文件

1.4. 安装开发环境

sudo apt install build-essential -y

sudo apt install python3-dev -y

sudo apt install python3-venv -y

sudo apt install python3-pip -y

1.5. 安装nginx

sudo apt update更新系统

sudo apt install nginx -y安装nginx

sudo systemctl start nginx启动nginx

sudo systemctl enable nginx开机自启

sudo systemctl restart nginx重启nginx

sudo systemctl status nginx查看状态

1.6. 安装uwsgi

source venv/bin/activate 进入虚拟环境

pip install uwsgi安装uwsgi

1.7. 配置文件

1.7.1. 配置nginx

# 配置文件内容:
# 转发给哪个服务器,可以通过upstream配置项让nginx实现负载均衡
upstream django {    
    server   127.0.0.1:8001; 
}
# 设定虚拟主机配置,一个http中可以有多个server。
server {
    # 启动的nginx进程监听请求的端口
    listen      80;
    #定义使用域名访问
    server_name 49.235.175.169;
    charset     utf-8;
    client_max_body_size 75M;   

    # location 配置请求静态文件多媒体文件。
    location /media  {
        alias  /home/debian/myblog/media/;  
    }
    # 静态文件访问的url
    location /static {
        # 指定静态文件存放的目录
        alias /home/debian/myblog/staticfiles/;
    }

#  将所有非媒体请求转到Django服务器上
    location / {
        # 包含uwsgi的请求参数,路径为qmblog_uwsgi_params绝对路径
        include  /etc/nginx/uwsgi_params; 
        # 转交请求给uwsgi
        uwsgi_pass  django;  #这个django对应开头出的,对于动态请求,转发到本机的端口,也就是uwsgi监听的端口,uwsgi运行的主机和ip,后面我们会在本机的该端口上运行uwsgi进程

}

1.7.2. 配置uWSGI

[uwsgi]
# 项目目录
chdir = /home/debian/myblog
# Django 的 wsgi 文件
module = mysite.wsgi
# 使用虚拟环境
home = /home/debian/myblog/venv
# master 主进程
master = true
# 进程数量
processes = 10
threads = 2
# 使用 socket(和 nginx 通信)
socket = 127.0.0.1:8001
# 权限
chmod-socket = 666
# 清理环境
vacuum = true
# 退出时清理
die-on-term = true
#日志路径
daemonize = /home/debian/myblog/uwsgi.log
touch-reload = /home/debian/myblog/reload.txt

1.7.3. 运行流程

浏览器访问网站
↓
Nginx(监听80端口)
↓
upstream django { 127.0.0.1:8001 }
↓
uWSGI(监听8001端口)
↓
Django处理请求
↓
返回结果

1.8. 重启uwsgi服务

1.8.1. reload

该方案不会杀死进程,不中断服务

在uwsgi.ini配置

touch-reload = /home/debian/myblog/reload.txt

只需要

touch reload.txt

就可以重启

1.8.2. 杀死进程

pkill -f uwsgi 杀死进程

uwsgi --ini uwsgi.ini 重启服务

该方案不建议频繁使用

1.8.3. 使用systemctl管理uWSGI

①创建服务文件

/etc/systemd/system/myblog.service

②配置文件

[Unit]
Description=myblog uwsgi service
After=network.target

[Service]
User=debian
WorkingDirectory=/home/debian/myblog
ExecStart=/home/debian/myblog/venv/bin/uwsgi --ini /home/debian/myblog/config/uwsgi.ini
Restart=always

[Install]
WantedBy=multi-user.target

③执行命令

systemctl daemon-reload
systemctl enable myblog
systemctl start myblog

然后就可以通过

systemctl restart myblog 重启项目

⭐注意!!!

在使用systemctl管理文件的时候,uwsgi配置文件的

daemonize = /home/debian/myblog/uwsgi.log要删去,日志让systemctl管理

1.9. 本地文件管理

1.9.1. requirements.txt(依赖管理)

例如本项目:

asgiref==3.11.0
cffi==2.0.0
cryptography==46.0.5
Django==5.2.10
pillow==12.1.1
pycparser==3.0
PyMySQL==1.1.2
sqlparse==0.5.5
tzdata==2025.3


①进入虚拟环境然后执行pip freeze > requirements.txt

(所有依赖包都会自动进入文件,注意每一次新增都要执行)

②在部署的时候执行pip install -r requirements.txt

就可以下载好所有依赖包

1.9.2. .gitignore(防止上传垃圾文件)

该文件可以告诉哪些文件不要上传到库

例如虚拟环境,数据库文件,日志文件,编译缓存等等

搜索

文章归档

广告位招租

广告位招租