我在Centos 7 VPS上创建了一个wordpress staging遥控器。 Wordpress安装在此目录/var/www/html
中,组/所有者是默认apache:apache
。
然后我使用~/git/repo
中的这个bash脚本在post-receive
和hooks
之类的内容上创建了一个简单的git仓库:
#!/bin/sh
TARGET=/var/www/html/wp-content
GIT_DIR=/home/username/git/repo
#(1) Change directory's ownership to allow writing
sudo chown -R username:apache /var/www/html
#run 'post-receive' hook
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
#(2) return to original
sudo chown -R apache:apache /var/www/html
让我解释一下。
(1)=因为否则我无法在该目标目录中写任何内容,所以我必须将所有权更改为我当前的用户名。
(2)=因为否则,通过维护username:apache
我无法通过wordpress管理员前端安装任何东西:FTP权限凭证输入。
在我的本地环境中,我在wordpress安装的wp-content
创建了工作git存储库并链接到远程。
现在,问题是当我使用GIT bash或Sourcetree推送更改时,文件被转移到裸远程仓库,但后接收脚本由于其sudo
命令而失败。
你建议我做什么转变?
答案 0 :(得分:0)
我正在寻找类似的解决方案。到目前为止,这是我正在使用的两个部分:
1)接收后挂钩:
#!/bin/bash
TARGET="/var/www"
GIT_DIR="/home/<username>/repo.git"
BRANCH="master"
while read oldrev newrev ref
do
# only checking out the master (or whatever branch you would like to deploy)
if [[ $ref = refs/heads/$BRANCH ]];
then
echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
else
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
fi
done
2)通过组权限获得写权限
$ sudo usermod -a -G www-data <username>
$ sudo chmod -R g+w /var/www/domainname/public_html
在您的情况下,www-data将替换为拥有您需要写访问权的目录的GROUP。我愿意这样做,直到root拥有服务目录为止。
请明确一点,这些想法来自两个不同的来源。我将它们一起使用,并将它们作为一个单一解决方案传递给我,它对我来说很有效。包含了原始资源的链接以供参考。
参考文献:
FWIW,我也将脚趾(致命:...不是git存储库... )拖到回购和裸回购之间的差异以及对--git-dir的引用
祝你好运