项目简介
这是一个基于 Gitee Webhook 的自动部署系统,能够实现代码提交后自动部署到服务器。通过配置 Webhook,当代码推送到 Gitee 仓库时,系统会自动将代码部署到指定的服务器目录。
系统要求
·PHP 5.6+ ·Git ·Linux/Unix 服务器环境 ·网站目录写权限
文件结构
网站根目录/├── deploy/ # 保护目录(不会被覆盖)│ ├── webhook.php # 部署脚本(必须放在此目录)│ └── webhook.log # 自动生成的日志文件├── dist/ # 部署的目标目录(根据配置)└── 其他网站文件...
配置说明
脚本配置参数
编辑 deploy/webhook.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
(目标目录配置)
设置目录名(如 'dist'):只部署该目录的内容
留空(''):部署整个仓库的所有内容
CHECK_TARGET_CHANGES
(变化检查配置)
true
:智能部署,只有目标目录有变化时才部署false
:强制部署,任何提交都会触发部署
配置组合使用示例
TARGET_DIR | CHECK_TARGET_CHANGES | 部署行为 |
---|---|---|
dist | true | 只有 dist 目录变化时才部署 |
dist | false | 任何提交都部署 dist 目录 |
'' | true /false | 任何提交都部署整个仓库 |
Gitee 仓库配置
创建 Webhook
在 Gitee 仓库中设置 Webhook:
URL: http://你的域名/deploy/webhook.php
WebHook 密码: 与脚本中 SECRET_KEY 一致
触发事件: 选择 Push 事件
是否激活: 是
进入仓库 → 管理 → WebHooks
添加WebHook
配置参数:
测试Webhook
保存后点击 测试,应该收到成功响应:
{ "status": "success", "message": "Webhook is working", "time": "2024-01-01 12:00:00"}
服务器部署步骤
初始部署
# 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.mechmod 755 webhook.php
验证部署
访问 Webhook URL 测试连通性:
http://你的域名/deploy/webhook.php
应该看到提示:Only POST requests allowed
日常使用流程
本地开发
# 克隆仓库git clone https://gitee.com/chaihongjun/webhook-test.git# 开发代码...# 提交更改git add .git commit -m "功能更新"git push origin master
自动触发部署
推送代码后的自动流程:
Gitee 自动发送 Webhook 请求到服务器
服务器验证请求合法性
检查目标目录变化(如果启用)
执行部署操作
返回部署结果
查看部署日志
# 查看部署日志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
详细日志
文件权限问题
# 修复权限chown -R www:www /alidata1/www/web/webhook.chaihongjun.mefind /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 请求开始 ===
- 请求开始标记事件类型
- 接收到的事件类型检测到目标目录
- 变化检测结果执行命令
- 执行的系统命令和输出部署完成
- 部署结果错误
- 错误信息
维护建议
日志管理
# 定期清理日志(保留最近30天) find /alidata1/www/web/webhook.chaihongjun.me/deploy -name "webhook.log" -mtime +30 -exec rm {} \; # 或者使用日志轮转 # 在 /etc/logrotate.d/ 创建配置文件
安全建议
定期更换 Webhook 密码
限制 Webhook URL 访问权限
监控部署日志异常
性能优化
对于大仓库,考虑使用增量部署
定期清理临时文件
监控服务器资源使用
注意事项
首次部署需要手动将 Webhook 脚本放到服务器
保护目录确保部署脚本和日志不会被意外删除
权限设置必须正确,否则部署可能失败
定期维护清理日志文件,避免磁盘空间不足
webhook.php: webhook.php.txt