stone

用git搭建自动发布的服务器
最近在使用thinkphp搭建微信公众平台,主要是研究一下支付相关的东西,无奈支付功能的api还只能通过微信客户端...
扫描右侧二维码阅读全文
02
2016/11

用git搭建自动发布的服务器

最近在使用thinkphp搭建微信公众平台,主要是研究一下支付相关的东西,无奈支付功能的api还只能通过微信客户端调试,所以需要做一个可以快速发布的git服务器,研究了一下使用git进行代码自动发布的方法。这里算是进行一个简单的总结吧。

我使用的是腾讯云的服务器,首先需要搭建的是php服务器,安装lamp环境,具体的安装方法可以百度,还是比较简单的。按顺序安装apache,php和mysql。

然后安装git和创建相关的用户

sudo apt-get install git
sudo adduser git
su git

然后需要为相关用户设置免密钥登录,不配置也可以,配了git上传可以不用密码,网上还有可以设置git用户只能使用git上传,不能进行登录的方法,觉得有点麻烦,就算了,反正只是我一个人用。

接下来是在服务器上新建一个git工作仓库

mkdir test.git
cd test.git
git init --bare 

使用--bare可以创建一个git仓库,这个git仓库和git工作目录不是一个东西,在仓库中好像不会直接包含工作目录的内容,因此我们同时也需要在服务器上创建一个工作目录来进行代码同步。这里由一个很奇怪的地方,我一开始是使用git init --bare test.git命令创建的仓库,但是这样子写的hook并没有被正确触发,但是通过新建目录,进入目录在进行创建就可以了,╮(╯_╰)╭ ,奇怪奇怪。

如果已经存在一个本地传库,使用下面的命令来初始化服务器上的仓库:

git remote add origin git@ip:~/test.git #ip为服务器地址

然后在服务器端创建仓库的工作目录,用于将代码同步到服务器上:

git clone git@localhost:~/test.git

然后在git上面创建一个hook,在test.git目录下有一个hooks目录放置,里面已经放了一些模板,默认末尾带sample的hook是不会执行的,通过去掉sample就行了。

网上很多的教程都是说要修改post-receive文件,这个文件夹中并没有,只有post-update,但是好像功能是一样的
然后写好脚本后就可以了。脚本的内容如下:

#!/bin/sh
GIT_WORK_TREE=/home/git/test.git git checkout -f

一开始我是用的是git pull命令,这是不能实现同步的。同时,一定要记住确保这个脚本git用户有执行权限,否则执行不了,使用命令:

chmod +x ./post-update

这样子,每次有人push新的内容上去之后,就会自动将内容同步到服务器上的工作目录了。

但是这样还是没有发布出去的,我们可以在apache服务器的网站目录下创建一个软链接(硬链接不能链接文件夹)

ln -sv /home/git/test.git /var/www/html/test

我们就大功告成了,我们通过访问主机下的test目录,就可以访问到我们的目录了,而且每次push后都可以直接在服务器上看到结果。这还是一个相当有用的技巧,通过编写不同的hook,可以实现很多不同的有意思的功能。╮( ̄▽ ̄)╭

Last modification:September 7th, 2018 at 08:23 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment