CentOS7 VPS上WordPress staging远程仓库post-receive钩子权限问题
搭建CentOS 7上的WordPress Git暂存仓库
我在CentOS 7 VPS上给WordPress配置了一个Git暂存远程仓库,用来同步主题、插件这类wp-content里的内容,整个流程和配置细节如下:
初始环境说明
我的WordPress安装在/var/www/html目录,默认的文件属主/属组是apache:apache,这是CentOS 7上Apache的默认运行用户组。
创建裸Git仓库
首先在用户家目录下创建一个裸仓库,用来作为远程推送的目标:
# 创建仓库目录并初始化裸仓库 mkdir -p ~/git/repo cd ~/git/repo git init --bare
配置post-receive钩子实现自动同步
裸仓库的hooks目录里可以添加钩子脚本,我用post-receive钩子来实现推送后自动同步到WordPress的wp-content目录:
- 进入钩子目录并创建脚本文件:
cd ~/git/repo/hooks touch post-receive chmod +x post-receive # 必须给脚本加可执行权限,Git才会触发它
- 编辑
post-receive脚本,内容如下:
#!/bin/sh TARGET=/var/www/html/wp-content GIT_DIR=/home/username/git/repo # 修改目录所有权,让当前用户有写入权限(替换username为你的实际用户名) sudo chown -R username:apache /var/www/html # 将裸仓库的内容同步到WordPress的wp-content工作目录 git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
重要配置提醒
- sudo权限设置:为了让钩子脚本能自动执行
chown命令而不需要输入密码,得给你的用户配置免密sudo权限。执行visudo,添加一行:
这样就只授予用户执行username ALL=(ALL) NOPASSWD: /bin/chownchown的免密权限,避免过度授权带来的安全风险。 - 权限验证:修改所有权后,要确保
apache组对/var/www/html有读取权限,不然WordPress会无法加载文件。可以用ls -l /var/www/html检查权限,确保组权限有读权限。 - 钩子触发逻辑:每次你本地向这个远程裸仓库
git push代码时,post-receive钩子就会自动运行,把最新的代码同步到WordPress的wp-content目录,实现暂存环境的自动更新。
内容的提问来源于stack exchange,提问作者R99
相关产品推荐
相关产品推荐

