From 1d625a1481d583a3c34ec74b9e7d59d69c0bd35e Mon Sep 17 00:00:00 2001 From: xiaji Date: Mon, 5 Jan 2026 21:33:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 114 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6e446b7..68521c4 100644 --- a/README.md +++ b/README.md @@ -351,35 +351,145 @@ sudo ufw enable ## 代码更新 +### 常规代码更新流程 + 当需要更新代码时,可以使用以下命令: ```bash cd /var/www/diary-family -# 1. 先拉取远程最新代码(只获取,不合并) +# 1. 拉取远程最新代码(只获取,不合并) git fetch origin # 2. 硬重置本地分支到远程分支的最新版本(会覆盖所有本地未提交修改) # 注意:将 main 替换为你的分支名(如 master、dev 等) git reset --hard origin/main -# 3. 拉取最新代码 -git pull http://14.103.237.41:16001/xiaji/diary-family.git +# 激活虚拟环境 +source venv/bin/activate + +# 3. 安装新依赖(如果有) +pip install -r requirements.txt + +# 4. 收集静态文件(如果有静态文件更新) +python manage.py collectstatic --noinput + +# 5. 重启服务 +sudo supervisorctl restart all +sudo systemctl restart nginx +``` + +### 模型更新部署流程 + +当开发机的models.py文件有更新时,部署机需要执行以下完整流程: + +#### 步骤一:拉取最新代码 + +```bash +cd /var/www/diary-family + +# 拉取远程最新代码 +git fetch origin + +# 硬重置本地分支到远程分支的最新版本 +git reset --hard origin/main # 激活虚拟环境 source venv/bin/activate # 安装新依赖(如果有) pip install -r requirements.txt +``` -# 执行数据库迁移 +#### 步骤二:数据库备份(关键步骤!) + +```bash +# 备份当前数据库,以防迁移失败 +cp /var/www/diary-family/db.sqlite3 /var/www/diary-family/db.sqlite3.backup.$(date +%Y%m%d_%H%M%S) +``` + +#### 步骤三:检查并生成迁移文件 + +```bash +# 检查模型定义是否有语法错误 +python manage.py check + +# 生成迁移文件(根据models.py的变化自动生成) +python manage.py makemigrations +``` + +#### 步骤四:查看并执行迁移 + +```bash +# 查看生成的迁移文件内容,确保迁移逻辑正确 +# 注意:将 000x_xxx.py 替换为实际生成的迁移文件名 +cat core/migrations/000x_xxx.py + +# 执行数据库迁移(将模型变更应用到数据库) python manage.py migrate +``` + +#### 步骤五:收集静态文件 + +```bash +# 收集静态文件(如果有静态文件更新) +python manage.py collectstatic --noinput +``` + +#### 步骤六:重启服务 + +```bash +# 重启服务,使新代码生效 +sudo supervisorctl restart all +sudo systemctl restart nginx +``` + +#### 完整一键执行脚本 + +```bash +cd /var/www/diary-family +git fetch origin +git reset --hard origin/main +source venv/bin/activate +pip install -r requirements.txt +cp db.sqlite3 db.sqlite3.backup.$(date +%Y%m%d_%H%M%S) +python manage.py check +python manage.py makemigrations +python manage.py migrate +python manage.py collectstatic --noinput +sudo supervisorctl restart all +sudo systemctl restart nginx +``` + +### 迁移失败处理 + +如果`migrate`命令失败,可使用备份恢复数据库: + +```bash +# 恢复数据库 +cp /var/www/diary-family/db.sqlite3.backup.$(date +%Y%m%d_%H%M%S) /var/www/diary-family/db.sqlite3 # 重启服务 sudo supervisorctl restart all sudo systemctl restart nginx ``` +### 代码更新注意事项 + +1. **模型更新必须执行迁移**:当开发机修改了models.py文件后,部署机必须执行`makemigrations`和`migrate`命令,否则会出现数据库结构不匹配的错误。 + +2. **迁移文件检查**:生成迁移文件后,务必查看迁移文件内容,确保迁移逻辑正确,避免意外修改数据库结构。 + +3. **数据库备份不可省略**:在执行`migrate`命令前,必须备份数据库文件,以防迁移失败导致数据丢失。 + +4. **依赖更新**:如果requirements.txt文件有更新,必须执行`pip install -r requirements.txt`命令安装新依赖。 + +5. **静态文件更新**:如果修改了静态文件(CSS、JS、图片等),必须执行`collectstatic`命令收集静态文件。 + +6. **服务重启**:代码更新后,必须重启相关服务,否则新代码不会生效。 + +7. **迁移失败处理**:如果`migrate`命令失败,可使用备份恢复数据库。 + ## 系统访问 1. **访问系统**:在浏览器中打开 `http://your_domain_or_ip`