post-receive挂钩到/ var / www / html和权限

时间:2018-04-03 21:20:13

标签: wordpress git git-remote git-post-receive git-bare

我在Centos 7 VPS上创建了一个wordpress staging遥控器。 Wordpress安装在此目录/var/www/html中,组/所有者是默认apache:apache。 然后我使用~/git/repo中的这个bash脚本在post-receivehooks之类的内容上创建了一个简单的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命令而失败。

你建议我做什么转变?

1 个答案:

答案 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的引用

祝你好运