每个 plesk vhost 只有一个用户访问该 httpdocs 目录。我想使用 Git 管理一大堆独立的虚拟主机。
这是否意味着为每个虚拟主机安装一个具有单独用户/ ssh 公钥组合的单独 Git 存储库,或者是否有办法将其集中化?
吉托西斯听起来好像有帮助 - 但我不确定它是否可以将文件推送到每个虚拟主机。
答案1
通常有两种方法来解决此类问题;
你有一个裸存储库,将应用程序集中在服务器上的某个位置,并且每个
httpdocs
文件夹中都有一个此存储库的克隆(带有工作树)post-receive hook
然后在裸仓库上设置一个来更新httpdocs
此仓库的所有克隆,通常一个 shell 脚本就足够了(并且可以设置权限并chmod
根据您的用户执行全局操作)并且您在本地计算机上有另一个存储库副本,该副本会推送到
bare
服务器上的此存储库,从而触发 post-receive 挂钩,并更新httpdocs
目录中的所有“子”存储库你
.git
从中取出零件httpdocs
(我建议这样做),然后在/private/home/git/myrepo
(创建它)文件夹working tree
中设置存储库httpdocs
$ git --git-dir=/var/www/vhosts/newdomain.tld/private/home/git/newdomain.tld \ --work-tree=/var/www/vhosts/newdomain.tld/httpdocs init && \ echo "gitdir: /var/www/vhosts/newdomain.tld/private/home/git/newdomain.tld" \ > /var/www/vhosts/newdomain.tld/httpdocs/.git
这样,你的
httpdocs
版本信息就相对干净了(除了.git
文件(不是目录)在 中创建/var/www/vhosts/newdomain.tld/httpdocs/
,这只是 GIT 将 符号链接到working tree
的位置的方式GITDIR
)其余过程相同:裸存储库、接收后挂钩
我个人放弃了 Gitosis、gitolite 和 palls,因为对于几个存储库来说,它们的开销太大了。正确设置远程分支和 shell 脚本就足够了(由 post-receive 钩子启动)
更多hook
关于githooks(5)手册页