# Git 自动化部署使用指南 ## 工作原理 通过 Git + 服务端自动拉取方案,实现代码修改后自动同步到服务器并重启服务: ``` 本地开发 → quick_push.bat → Git 仓库 → 服务器定时拉取 → 自动重启服务 ``` ## 一、初始设置 ### 1.1 创建远程 Git 仓库 在以下平台之一创建仓库(推荐私有仓库): - **GitHub**: https://github.com/new - **GitLab**: https://gitlab.com/projects/new - **Gitee**: https://gitee.com/projects/new - **自建 Gitea**: 如果服务器上已有 Gitea 仓库名建议:`xhs_cloud_stable_v2` ### 1.2 本地配置 Git 远程仓库 在项目根目录执行: ```bash # 查看当前远程仓库 git remote -v # 添加远程仓库(替换为你的仓库地址) git remote add origin https://github.com/your-username/xhs_cloud_stable_v2.git # 或者如果已有 origin,更新地址 git remote set-url origin https://github.com/your-username/xhs_cloud_stable_v2.git # 推送已有提交到远程仓库 git push -u origin master ``` **注意**:如果远程仓库默认分支是 `main`,请将上面的 `master` 改为 `main` ### 1.3 服务器端配置 #### 1.3.1 克隆仓库到服务器 ```bash # SSH 登录到服务器 ssh user@your-server-ip # 进入目标目录(根据实际情况修改) cd /path/to/your/projects # 克隆仓库 git clone https://github.com/your-username/xhs_cloud_stable_v2.git cd xhs_cloud_stable_v2 ``` #### 1.3.2 配置自动拉取脚本 编辑 `scripts/auto_pull.sh`,修改配置项: ```bash # 编辑脚本 vi scripts/auto_pull.sh # 修改以下配置项: PROJECT_DIR="/path/to/your/xhs_cloud_stable_v2" # 改为服务器上的实际路径 GIT_REPO="your-git-repo-url" # 改为实际的 Git 仓库地址 ``` **示例配置**: ```bash PROJECT_DIR="/home/user/projects/xhs_cloud_stable_v2" GIT_REPO="https://github.com/your-username/xhs_cloud_stable_v2.git" ``` #### 1.3.3 设置脚本执行权限 ```bash chmod +x scripts/auto_pull.sh ``` #### 1.3.4 配置定时任务(cron) ```bash # 编辑 crontab crontab -e # 添加以下行(每 2 分钟检查一次更新) */2 * * * * /path/to/your/xhs_cloud_stable_v2/scripts/auto_pull.sh >> /path/to/your/xhs_cloud_stable_v2/logs/cron.log 2>&1 ``` **说明**: - `*/2 * * * *` 表示每 2 分钟执行一次 - 可以改为 `*/5 * * * *`(每 5 分钟)或 `* * * * *`(每 1 分钟) - 日志会保存到 `logs/cron.log` #### 1.3.5 手动测试脚本 ```bash # 手动执行一次,检查是否正常 ./scripts/auto_pull.sh # 查看日志 cat logs/auto_pull.log ``` ## 二、日常使用 ### 2.1 本地开发流程 1. **修改代码** - 在本地编辑代码文件 2. **快速提交推送** - 双击运行 `quick_push.bat` - 或在命令行执行: ```bash quick_push.bat ``` 3. **输入提交信息** - 脚本会提示输入提交信息(默认:`update code`) - 例如:`fix: 修复采集去重逻辑` - 直接回车使用默认信息 4. **等待推送完成** - 脚本会自动执行: - `git add .` - 添加所有修改 - `git commit` - 提交 - `git push` - 推送到远程仓库 ### 2.2 服务器自动更新 推送成功后,服务器会: 1. **检测更新**(最多等待 2 分钟,根据 cron 配置) 2. **拉取代码** `git pull` 3. **更新依赖**(如果 `requirements.txt` 有变化) 4. **重启服务** - 如果使用 `docker-compose.yml`,会执行 `docker-compose down && docker-compose up -d` - 如果使用 systemd,取消注释 `systemctl restart xhs-crawler` - 如果使用 supervisor,取消注释 `supervisorctl restart xhs-crawler` ### 2.3 查看服务器日志 ```bash # SSH 登录服务器 ssh user@your-server-ip # 查看自动拉取日志 cat /path/to/your/xhs_cloud_stable_v2/logs/auto_pull.log # 查看 cron 日志 tail -f /path/to/your/xhs_cloud_stable_v2/logs/cron.log # 查看应用日志 tail -f /path/to/your/xhs_cloud_stable_v2/logs/app.log ``` ## 三、故障排查 ### 3.1 本地推送失败 **问题**:`git push` 失败,提示认证错误 **解决**: ```bash # 如果使用 HTTPS,配置 Git 凭据存储 git config --global credential.helper store # 再次推送,输入用户名和密码(或 Personal Access Token) git push ``` **建议**:使用 GitHub Personal Access Token 替代密码 - 创建地址:https://github.com/settings/tokens ### 3.2 服务器无法拉取 **问题**:服务器执行 `git pull` 失败 **排查步骤**: ```bash # 1. 检查 Git 是否已安装 git --version # 2. 手动执行拉取测试 cd /path/to/your/xhs_cloud_stable_v2 git fetch origin git pull origin master # 3. 检查仓库地址是否正确 git remote -v # 4. 如果是私有仓库,配置 SSH 密钥或凭据 # 方式一:SSH 密钥(推荐) ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 将 ~/.ssh/id_rsa.pub 添加到 GitHub/GitLab 的 SSH keys # 方式二:凭据存储 git config --global credential.helper store git pull # 输入用户名和密码/Token ``` ### 3.3 服务未自动重启 **问题**:代码已拉取但服务未重启 **排查步骤**: ```bash # 1. 检查 auto_pull.sh 中服务重启方式是否正确 vi scripts/auto_pull.sh # 2. 根据实际部署方式取消注释对应代码 # Docker 用户:确认 docker-compose.yml 存在 # Systemd 用户:取消注释 systemctl restart xhs-crawler # Supervisor 用户:取消注释 supervisorctl restart xhs-crawler # 3. 手动测试重启命令 docker-compose down && docker-compose up -d # 或 systemctl restart xhs-crawler # 或 supervisorctl restart xhs-crawler # 4. 检查服务状态 docker-compose ps # 或 systemctl status xhs-crawler # 或 supervisorctl status xhs-crawler ``` ### 3.4 Cron 未执行 **问题**:定时任务未运行 **排查步骤**: ```bash # 1. 检查 cron 服务状态 systemctl status cron # Ubuntu/Debian # 或 systemctl status crond # CentOS/RHEL # 2. 查看当前用户的 cron 任务 crontab -l # 3. 检查 cron 日志 tail -f /var/log/syslog | grep CRON # Ubuntu/Debian # 或 tail -f /var/log/cron # CentOS/RHEL # 4. 确认脚本路径和权限 which bash ls -la /path/to/your/xhs_cloud_stable_v2/scripts/auto_pull.sh ``` ## 四、高级配置 ### 4.1 使用 SSH 代替 HTTPS(推荐) **优势**:无需输入密码,更安全 **步骤**: 1. **生成 SSH 密钥**(本地和服务器都需要) ```bash ssh-keygen -t ed25519 -C "your_email@example.com" # 或使用 RSA ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 2. **添加公钥到 Git 仓库** ```bash # 查看公钥 cat ~/.ssh/id_ed25519.pub # 或 cat ~/.ssh/id_rsa.pub # 复制输出,添加到: # GitHub: Settings → SSH and GPG keys → New SSH key # GitLab: Preferences → SSH Keys # Gitee: 设置 → SSH 公钥 ``` 3. **更新远程仓库地址** ```bash # 本地 git remote set-url origin git@github.com:your-username/xhs_cloud_stable_v2.git # 服务器 cd /path/to/your/xhs_cloud_stable_v2 git remote set-url origin git@github.com:your-username/xhs_cloud_stable_v2.git ``` 4. **更新 auto_pull.sh 中的 GIT_REPO** ```bash GIT_REPO="git@github.com:your-username/xhs_cloud_stable_v2.git" ``` ### 4.2 使用 Git分支进行开发 ```bash # 创建开发分支 git checkout -b dev # 在 dev 分支开发 # ... 修改代码 ... quick_push.bat # 测试无误后合并到主分支 git checkout master git merge dev git push origin master ``` ### 4.3 配置 Git 钩子实现更快的部署 如果 cron 的 2 分钟延迟太长,可以使用 **Git Webhook**: 1. **在服务器上安装 webhook 接收工具**(如 `webhook` 或 `adnanh/webhook`) 2. **配置 Git 仓库的 Webhook**,指向服务器 URL 3. **推送时代码立即触发服务器拉取** 这种方式可以实现 **秒级部署**,但配置更复杂。 ## 五、最佳实践 ### 5.1 提交信息规范 ```bash # 功能添加 feat: 添加批量导入账号功能 # Bug 修复 fix: 修复采集数量限制不生效的问题 # 文档更新 docs: 更新部署文档 # 性能优化 perf: 优化去重检查性能 # 代码重构 refactor: 重构采集任务管理器 ``` ### 5.2 忽略敏感文件 `.gitignore` 已配置忽略以下文件: - `data/crawled_ids.json` - 去重记录(本地运行生成) - `data/storage_state*.json` - 登录状态(敏感) - `output/` - 采集输出文件 - `logs/*.log` - 日志文件 - `.env` - 环境变量(敏感) **注意**:首次部署时,需要在服务器上手动创建必要的空文件和目录: ```bash ssh user@your-server-ip cd /path/to/your/xhs_cloud_stable_v2 mkdir -p data output logs touch data/config.json touch data/profiles.json touch data/storage_state.json ``` ### 5.3 备份重要数据 ```bash # 服务器端定期备份去重记录 crontab -e # 添加:每天凌晨 3 点备份 0 3 * * * cp /path/to/your/xhs_cloud_stable_v2/data/crawled_ids.json /path/to/backups/crawled_ids_$(date +\%Y\%m\%d).json ``` ## 六、快速参考 ### 常用 Git 命令 ```bash # 查看状态 git status # 查看日志 git log --oneline -10 # 撤销本地修改(慎用) git reset --hard HEAD # 查看远程仓库 git remote -v # 拉取最新代码 git pull origin master # 推送代码 git push origin master ``` ### 服务器常用命令 ```bash # 查看服务状态 docker-compose ps # Docker systemctl status xhs-crawler # Systemd supervisorctl status xhs-crawler # Supervisor # 重启服务 docker-compose restart systemctl restart xhs-crawler supervisorctl restart xhs-crawler # 查看实时日志 tail -f logs/app.log # 手动触发拉取 ./scripts/auto_pull.sh ``` --- ## 需要帮助? 如果遇到问题,请检查: 1. ✅ Git 仓库地址是否正确 2. ✅ 服务器网络是否正常 3. ✅ 脚本路径和权限是否正确 4. ✅ cron 服务是否运行 5. ✅ 日志文件中的错误信息 **提示**:大多数问题都可以通过查看日志找到原因!