# webhook-test **Repository Path**: chaihongjun/webhook-test ## Basic Information - **Project Name**: webhook-test - **Description**: 用于测试webhook的自动化部署功能,将本地项目内指定目录内容自动化部署到服务器指定目录 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-18 - **Last Updated**: 2025-10-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##### Gitee Webhook 自动部署系统 ## 项目简介 这是一个基于 Gitee Webhook 的自动部署系统,能够实现代码提交后自动部署到服务器。通过配置 Webhook,当代码推送到 Gitee 仓库时,系统会自动将代码部署到指定的服务器目录。 ## 系统要求 > ·PHP 5.6+ > ·Git > ·Linux/Unix 服务器环境 > ·网站目录写权限 ## 文件结构 ```text 网站根目录/ ├── deploy/ # 保护目录(不会被覆盖) │ ├── webhook.php # 部署脚本(必须放在此目录) │ └── webhook.log # 自动生成的日志文件 ├── dist/ # 部署的目标目录(根据配置) └── 其他网站文件... ``` ## 配置说明 ### 脚本配置参数 编辑 `deploy/webhook.php` 中的配置区域: ```php // ==================== 配置区 ==================== define('WEBSITE_ROOT', '/alidata1/www/web/webhook.chaihongjun.me'); // 服务器网站根目录 define('GIT_REMOTE', 'https://gitee.com/chaihongjun/webhook-test.git'); // Gitee仓库地址 define('SECRET_KEY', 'chj441315628'); // Webhook密码(需与Gitee设置一致) define('TARGET_DIR', 'dist'); // 要部署的子目录,留空则部署整个仓库 define('BRANCH', 'master'); // 同步的分支 define('GIT_PATH', '/usr/bin/git/bin/git'); // 服务器Git路径 define('CHECK_TARGET_CHANGES', true); // 是否检查目标目录变化 define('PROTECTED_DIRS', ['deploy', '.temp_deploy']); // 保护目录列表 ``` ### 关键配置说明 #### `TARGET_DIR`(目标目录配置) 1. 设置目录名(如 'dist'):只部署该目录的内容 2. 留空(''):部署整个仓库的所有内容 #### `CHECK_TARGET_CHANGES`(变化检查配置) 1. `true`:智能部署,只有目标目录有变化时才部署 2. `false`:强制部署,任何提交都会触发部署 ##### 配置组合使用示例 | TARGET_DIR | CHECK_TARGET_CHANGES | 部署行为 | | ---------- | -------------------- | ---------------------------- | | `dist` | `true` | 只有 `dist` 目录变化时才部署 | | `dist` | `false` | 任何提交都部署 `dist` 目录 | | `''` | `true`/`false` | 任何提交都部署整个仓库 | ### Gitee 仓库配置 1. #### 创建 Webhook 在 Gitee 仓库中设置 Webhook: 1. 进入仓库 → 管理 → WebHooks 2. 添加WebHook 3. 配置参数: 1. URL: http://你的域名/deploy/webhook.php 2. WebHook 密码: 与脚本中 SECRET_KEY 一致 3. 触发事件: 选择 Push 事件 4. 是否激活: 是 2. #### 测试Webhook 保存后点击 测试,应该收到成功响应: ```json { "status": "success", "message": "Webhook is working", "time": "2024-01-01 12:00:00" } ``` ### 服务器部署步骤 #### 初始部署 ```bash # 1. 创建网站目录 mkdir -p /alidata1/www/web/webhook.chaihongjun.me # 2. 创建保护目录 mkdir -p /alidata1/www/web/webhook.chaihongjun.me/deploy # 3. 上传 webhook.php 到 deploy 目录 cd /alidata1/www/web/webhook.chaihongjun.me/deploy # 4. 设置权限 chown -R www:www /alidata1/www/web/webhook.chaihongjun.me chmod 755 webhook.php ``` #### 验证部署 访问 Webhook URL 测试连通性: ```text http://你的域名/deploy/webhook.php ``` 应该看到提示:Only POST requests allowed ### 日常使用流程 1. ### 本地开发 ```bash # 克隆仓库 git clone https://gitee.com/chaihongjun/webhook-test.git # 开发代码... # 提交更改 git add . git commit -m "功能更新" git push origin master ``` 2. #### 自动触发部署 推送代码后的自动流程: 1. Gitee 自动发送 Webhook 请求到服务器 2. 服务器验证请求合法性 3. 检查目标目录变化(如果启用) 4. 执行部署操作 5. 返回部署结果 3. #### 查看部署日志 ```bash # 查看部署日志 tail -f /alidata1/www/web/webhook.chaihongjun.me/deploy/webhook.log ``` ### 部署行为说明 #### 保护机制 - `deploy/` 目录及其所有内容受到完全保护 - 部署过程中不会删除或覆盖保护目录 - 保护目录包括:`deploy`、`.temp_deploy` #### 清理操作 部署时会清理网站根目录,但: - 保留保护目录和文件 - 删除其他所有文件和目录 - 然后从仓库复制新文件 #### 权限设置 部署完成后自动设置: - 文件所有者:`www:www` - Webhook 脚本权限:`755` #### 故障排除 ##### 常见问题 **Webhook 测试失败** - 检查 URL 是否正确 - 验证 Secret 是否匹配 - 查看服务器错误日志 **部署失败** - 检查 Git 路径配置 - 验证目录权限 - 查看 `webhook.log` 详细日志 ##### 文件权限问题 ```bash # 修复权限 chown -R www:www /alidata1/www/web/webhook.chaihongjun.me find /alidata1/www/web/webhook.chaihongjun.me -type f -exec chmod 644 {} \; find /alidata1/www/web/webhook.chaihongjun.me -type d -exec chmod 755 {} \; chmod 755 /alidata1/www/web/webhook.chaihongjun.me/deploy/webhook.php ``` #### 日志分析 查看 `webhook.log` 文件,关注关键信息: === Webhook 请求开始 === - 请求开始标记 - `=== Webhook 请求开始 ===` - 请求开始标记 - `事件类型` - 接收到的事件类型 - `检测到目标目录` - 变化检测结果 - `执行命令` - 执行的系统命令和输出 - `部署完成` - 部署结果 - `错误` - 错误信息 #### 维护建议 ##### 日志管理 ```bash # 定期清理日志(保留最近30天) find /alidata1/www/web/webhook.chaihongjun.me/deploy -name "webhook.log" -mtime +30 -exec rm {} \; # 或者使用日志轮转 # 在 /etc/logrotate.d/ 创建配置文件 ``` #### 安全建议 - 定期更换 Webhook 密码 - 限制 Webhook URL 访问权限 - 监控部署日志异常 #### 性能优化 - 对于大仓库,考虑使用增量部署 - 定期清理临时文件 - 监控服务器资源使用 #### 注意事项 1. **首次部署**需要手动将 Webhook 脚本放到服务器 2. **保护目录**确保部署脚本和日志不会被意外删除 3. **权限设置**必须正确,否则部署可能失败 4. **定期维护**清理日志文件,避免磁盘空间不足 这个系统能够有效实现代码的自动部署,大大提高了开发部署的效率