什么是使用git进行部署的好方法,现在每次部署时都必须将整个应用目录“扔给-R”给www用户?
基本上,我想使用后接收挂钩进行部署。目前,我有一个接收后挂钩,看起来像这样:
#!/bin/sh
git --work-tree=/home/www/my-web-app --git-dir=/home/john/repo/my-web-app.git checkout -f
sudo chown -R www:www /home/www/my-web-app
sudo /home/john/scripts/reload-my-web-app.sh
它可以工作,但是问题在于chown步骤很慢,因为my-web-app文件夹中有数百万个文件。
我认为使用git作为用户www可以解决该问题,因此检出的文件已经具有正确的所有者。因此,我将post-receive钩子中的git行更改为:
sudo -u www git --work-tree=/home/www/my-web-app --git-dir=/home/john/repo/my-web-app.git checkout -f
但是这不起作用,因为我收到有关无法将git.po文件写入index.lock文件的权限错误。显然,用户www没有权限在git repo中进行写操作,我也不想授予www该权限,因为这似乎不利于服务器安全。
那么,在这种情况下什么是优雅的解决方案?您将签出到temp目录,然后从temp目录rsync到/ home / www / my-web-app目录,以便您复制文件并同时更改所有者吗?我觉得必须缺少一些简单的解决方案。
答案 0 :(得分:0)
考虑到Git不是部署工具,您的rsync可能是更好的解决方案。
但是请检查设置组是否足够,在setgid
文件夹中将my-web-app
设置为explained here。这样可以避免整理文件。