nginx服务器使用git部署代码

最近写个web程序,由于环境实在虚拟机中,改了文件拖动来拖动去的很麻烦,所以就学习了下git来同步部署项目,这里通过git和ssh来远程同步,关于git的安装和ssh的配置就不在这里过多说明。

首先在服务器中创建个git用户,然后把git用户加到web服务器用户的组里,比如:

useradd git -s /usr/bin/git-shell
usermod git -m apache

然后在本地生成key证书,执行sh-keygen -t rsa -C "[email protected]",一般下一步,然后填写私钥密码即可,生成完毕之后把公钥导入到服务器的/home/git/.ssh/authorized_keys文件中。

之后在一个git用户可以读写的目录(也可以之后给权限)执行git init --bare建立仓库,然后回到客户端的项目文件夹进行下面操作:

$ git init
$ git remote add origin ssh://git@serverip:/home/git/project.git
$ git add .
$ git commit -m “Init.”
$ git push

输入你的私钥密码即可进行同步,之后进行部署相关操作。

首先把你的项目从仓库中clone一份出来,例如:

git clone /home/git/project /srv/www/project

(注意:如果是以root用户操作的话,建议操作之后使用chown修改宿主用户和用户组为web服务器用户,如apache)

部署用到git的hook相关功能,在服务器的仓库目录内有个hook文件夹下有一些简单的案例,我们需要用到post-receive.sample:

$ mv post-receive.sample post-receive
$ vim post-receive

内容大致类似:

unset GIT_DIR

ProjectPath="/srv/www/project"

echo "cd "$ProjectPath
cd $ProjectPath

echo "pull last commit."
git pull origin master

echo "finish." 

(注意:如果是以root用户操作的话,建议操作之后使用chown修改宿主用户和用户组为git)

最后操作过程中可能会出现一些权限问题,建议把git用户暂时开启,确保正常之后在修改passwd禁用git用户登录shell。

再附上nginx的配置禁止访问.git相关文件:

location ~ "\.git($|/|attributes$|ignore$|modules$)" {
       return 404;
}

中间参考了一些文章由于本文是后来写的,所以就不贴链接了。

没有评论: