为了安全,我肯定不能把 root 和密码写在 deploy.rb 中,这样就得每次运行 cap deploy 的时候输入 root 密码,麻烦。于是创建了个 deploy 用户,设置个不太怕泄露的密码,写在 deploy.rb 中,然后用 deploy ssh 到服务器上去跑 cap deploy。
怕权限问题,就把 git 的库目录的归属组设置成一个叫 gitgroup 组,然后把 deploy 用户,以及提交代码用的 git 用户都的主组都设成了 gitgroup。心满意足后,用 deploy ssh 后,跑 cap deply,依然苦逼地报 Operation not permitted。开 debug 跑 cap deply -d,发现原因是:
git clone 后,生成的文件的组权限是 r--,然后 cap 试图运行chmod -R g+w xxxx
的时候,报错chmod: changing permissions of ........: Operation not permitted
。
我现在能想到的办法就是改 deploy 用户的 umask,让 cap 运行 git clone 复制过来的时候,就加上组权限为写。
你们遇到这种问题过么?或者,你们是如何使用 non-root 用户来构建发布环境的,说说大家的最佳实践吧。