我有一个使用 nginx 启动并运行的网站,并且我的网站中有一些内容我想使用 git 进行管理,以便其他人可以协作。
假设有一个名为爱丽丝并且网站的根目录位于 alice 的主目录中的某个位置,如 /home/alice/website/index.html
我们还假设我已经通过 gitolite 设置了一个 git 服务器用于访问控制,使用它需要设置一个我们将调用的虚拟用户git。该用户与其他用户不同有充分的理由爱丽丝。
我想爱丽丝的网站能够显示一些 git 存储库的内容web_repo.git,其来源可以在 /home/git/web_repo.git 中找到,正如 gitolite 文档所要求的那样。
我的第一个想法是运行一个接收后在存储库中挂钩以将其与 /home/alice/website 的某些子目录同步,但这需要用户git将文件复制到其他用户的(爱丽丝) 主目录,最终导致文件权限错误。
我的构建中有某些限制,要求网站托管在爱丽丝的主目录,我想不出一个安全而优雅的解决方案来解决这个问题。
我刚刚开始管理这个小型服务器,如果有任何见解,我将不胜感激。
答案1
有成千上万种方法可以做到这一点!我将按照以下方式进行:
首先,我创建一个小的 shell 脚本,以用户身份alice
在后台运行(tmux、屏幕或事件 initd/systemd 服务)。该脚本将不断地:
/tmp/
例如,监视 中的文件/tmp/new_commit
。- 当文件出现时,如果需要,
git pull
最后加 a 。chmod -r
- 删除文件
/tmp/new_commit
。 - 返回步骤 1。
然后我会在服务器端编写一个 git post-receive 挂钩,以在新提交和chmod 666
它上创建此文件。
如果你想在这方面更加“专业”,我建议你看看 devops 和 CI 的东西。