第七星尘

git自动部署到Web线上环境

前言

我们在服务器上搭建好git服务后,还希望它能实现自动部署——提交git,线上代码就能立即更新。本文将总结我在git自动部署的一些配置经验,供有需要的人参考

创建部署目录

首先以root用户在web目录(假如是/var/www/html)创建专用于git部署的目录

mkdir /var/www/html/git-deployment
chown -R git:git /var/www/html/git-deployment

创建部署项目

编辑/home/git/.gitolite.rc,将“ UMASK => 0077 ”改为“ UMASK => 0022 ”

然后切换到git用户

su git
cd /home/git/gitolite-admin

修改conf/gitolite.conf文件,新增仓库。例如新增”AutoGit”,则在gitolite.conf文件末尾添加:

repo AutoGit
RW+ = star7th

第2行是给star7th用户赋予权限。你可以改成其他用户。 提交gitolite.conf文件到admin仓库。 克隆仓库到web目录

git clone git@127.0.0.1:AutoGit.git /var/www/html/git-deployment/AutoGit 接着修改钩子文件

cd /home/git/repositories/AutoGit.git/hooks
cp post-receive.sample post-receive
vi post-receive

在弹出的编辑框输入i,进入插入模式,然后在文件末尾添加一下代码:

DIR=/var/www/html/git-deployment/AutoGit
git --work-tree=${DIR} clean -fd
git --work-tree=${DIR} checkout --force

保存

ESC
:wq

克隆代码

服务器已经配置完啦。将你的服务器仓库克隆到本地,

git clone git@server:AutoGit.git##其中server替换为你的服务器地址

然后新增个test.txt文件,添加、提交并push到远程服务器。如果发现/var/www/html/AutoGit-test目录下也出现了test.txt,那恭喜你部署成功啦!

配置文件修改问题

我们往服务器上push代码时,其实是希望有些文件不要覆盖掉的。比如线上服务器的数据库配置文件就不应该被开发测试的配置文件覆盖。关于这个问题,我的解决方法是: 在git-deployment目录下新建constant-file目录,专门用来存放一些不希望被覆盖的不变的文件。 在constant-file目录下新建项目目录AutoGit,把不变的文件,比如config.php文件拷贝过来这里存放。 编辑上面的post-receive钩子文件,在文件末尾添加代码:

cp /var/www/html/git-deployment/constant-file/AutoGit/config.php /var/www/html/git-deployment/AutoGit/config.php

安全问题

为防止web目录的.git文件夹被外部访问,请添加以下代码: apache:

“`

<Directory ~ ".git">
Order allow,deny
Deny from all
</Directory>

“`

Nginx:

“`

location ~ ^(.*)/.git/ {
return 404;
}

“`

分享到: 更多
码字很辛苦,转载请注明来自第七星尘的技术博客《git自动部署到Web线上环境》

评论

  1. 77 #1

    学习了

    回复
    2016-08-10