Git 的 depolyment 设定

2010-12-11 15:02:47 +08:00
 kayue
请问大家有没有用 Git 来 depoly php application 呢?

我在 permission 的问题上很纠结……

我的理想设定如下:

假设:
~mysite/www/ - production, web server run as "nobody"
/var/git/site.git - remote repo

方案1:Git hook
每当有人 push 到 remote repo 的时候,自动 cd 到 production 然后 git pull 一下
这个可以用 git hook 来达成,只是我在用 ssh,生成的档案都不是 nobody 而是上传者。user 甚至打开不了 ~mysite/www/ 这个 folder

方案2:Cronjob
我写了如下 job,每分钟执行一次,唯未见成效,也不知道如何 debug ...

*/1 * * * * su -s /bin/sh nobody -c 'cd ~mysite/www && git pull -q'

如何是好?

我现在都是用 setfacl 和登入 ssh 手动做 git pull 的,很蠢…
4681 次点击
所在节点    问与答
5 条回复
n2n3
2010-12-11 15:08:16 +08:00
kayue
2010-12-11 16:47:57 +08:00
问题基本解决:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git -q pull origin master'

需要 /usr/local/bin/git 而不单单是 git

不过这产生了另一个问题,如何只输出 error 呢? -q 好像完全不会输出任何东西。
aligo
2010-12-11 17:54:49 +08:00
同意@n2n3说的,直接用capistrano比较省事
如果非要用hook来做这个的话,首先你不应该把prod目录也弄成一个git repo,而应该每次更新prod版本的时候都放到一个新目录里然后最好删除.git(这也是cap的做法),因为产生的runtime文件可能会让下一次pull冲突
然后把你php执行用户(不要用nobody啊)和git用户(你应该有用gitosis吧)放到同一个用户组里就行了,最后可能还需要+x还有ln -s到固定的logs和uploads目录之类的
aligo
2010-12-11 17:56:38 +08:00
grep一下大概应该可以输出error-0-
kayue
2010-12-11 22:17:52 +08:00
@aligo 谢谢你的意见
首先,如果想自动 deploy 的话,把 production 也设定 git 大概是最好的方法。

当然要好好设定 .gitignore 来避免 runtime 文件的问题。so far so good.
我在用 Wordpress 和 Magento,算是比较好设定的。

.git directory is protected by .htaccess

没有用 gitosis,而且难以保证新上传的档案有正确的设定。
我的目的是尽可能避免要手动 ssh 设定任何东西。

谢谢指教。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/5724

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX