在我的服务器上,我有两个用户,www-data
(由nginx使用)和git
。 git
用户拥有一个包含我的网站代码的存储库,并且www-data
用户拥有该存储库的副本(用作nginx的webroot)。我想成立一个工作流程,从而推到git
的仓库引起www-data
的资料库进行更新,从而更新我的网站。基于Git的网站部署工作流程
为这些存储库设置挂钩的正确方法是什么?(也考虑到这两个用户的特权和权限)?
在我的服务器上,我有两个用户,www-data
(由nginx使用)和git
。 git
用户拥有一个包含我的网站代码的存储库,并且www-data
用户拥有该存储库的副本(用作nginx的webroot)。我想成立一个工作流程,从而推到git
的仓库引起www-data
的资料库进行更新,从而更新我的网站。基于Git的网站部署工作流程
为这些存储库设置挂钩的正确方法是什么?(也考虑到这两个用户的特权和权限)?
删除由www-data
拥有的资源库,并按照建立由git
拥有的仓库后收到钩上这个webpage的解决方案。
我最终制作了git
用户拥有的公共内容,并且所有人都可以阅读。于是,我做了以下设置钩子:
假设库称为mysite
:
创建一个分离的工作树将作为Web根目录(如用户git
)
mkdir /var/www/mysite
cd /path/to/repository/mysite.git
git config core.worktree /var/www/mysite
git config core.bare false
git config receive.denycurrentbranch ignore
添加后收到钩,将更新网站,并为它
touch hooks/post-receive
chmod +x hooks/post-receive
vim hooks/post-receive
设置正确的权限 的后收到脚本:
#!/bin/sh
git checkout -f
chmod -R o+rX /var/www/mysite
更新:这里是一个better solution。
注意:这个howto的早期版本依赖于将git config变量core.worktree设置为目标目录,core.bare为false,并且receive.denycurrentbranch忽略。但不需要这些变化,如果你使用GIT_WORK_TREE(当我第一次写的HOWTO,没有工作),以及远程仓库可以保持裸露。
确认为什么人们不断寻找所有这些讨厌的解决方案的人在博客,而不是正确的人的。 – Arrowmaster 2011-03-26 02:37:29
@Arrowmaster:谢谢,简单越好。 – Chetan 2011-03-26 02:42:23
将运行服务器的用户帐户拥有所有公共内容是否真的是一个好主意?如果服务器或你的代码开发,该漏洞可能会修改持久化数据,而不是仅仅访问涂写数据库连接... – sarnold 2011-03-26 01:06:31
那么我应该做的'git'拥有的公开内容,并使其可读大家?这也可以简化这个问题的权限问题...... – Chetan 2011-03-26 01:11:07
如果你满足于它作为一个解决方案,那么是的,它会帮你找到一种新的方法来从'git'推送到'www-data '回购。 :)你更喜欢在服务器上有两个git仓库吗?另一种选择是设置文件的组所有权是服务器的群体之一,并允许通读组权限访问。 – sarnold 2011-03-26 01:18:30