4 min read

Centos linux7安装gogs及自动部署

如果你需要在自己的服务器简单方便地搭建git服务,而且只需使用基本常用的git服务,可以使用gogs。

Centos linux7安装gogs及自动部署

我为什么使用gogs?

  • 需要在自己的服务器搭建git服务;
  • 简单方便地安装git服务;
  • 只需使用基本的git服务;

关于gogs的详细介绍可参看官方简介

安装步骤

本文介绍最简单的二进制安装方式,且前提是已经安装Linux和Mysql的情况下。简单来说就是上传压缩包和解压,然后启动gogs服务进行一些配置就可以了,具体如下:

1. 在gogs官网下载 64位TAR.GZ压缩包 ,并上传到服务器的 /home (或者其他)目录下;

2. 在终端进入到服务器的 /home 目录下,运行以下命令解压刚上传的文件(或ftp工具解压也可以);

tar zxf gogs_0.11.53_linux_amd64.tar.gz

3. 在终端进入解压后的目录例如/home/gogs,并执行./gogs web命令来运行gogs服务;

cd /home/gogs
./gogs web

gogs默认使用3000的端口,如果被占用则执行./gogs web -port 3001

4. 浏览器输入http://yourip:3000/install来安装gogs(端口3000为实际使用的端口,install为默认安装页面的路径),在安装页面需要填写数据库、gogs相关配置,以mysql为例:

  • 为gogs添加mysql数据库;
  • 配置mysql;
  • 配置gogs相关信息;
  • 配置其他信息;

完成以上配置并提交成功后,gogs就可以运行起来了。

5. 在刚安装的gogs路径下,找到/home/gogs/scripts/systemd/gogs.service 这个systemd服务模版文件复制一份或下到本地;

注:此文件为Systemd服务模板文件,通过修改该文件来配置守护进程,以让gogs后台运行,因为./gogs web方式如果关闭终端,gogs服务就停了;

6. 修改gogs.service文件,需要修改里面的 UserGroupWorkingDirectoryExecStartEnvironment 为相对应的值。其中 WorkingDirectory 为 gogs 实际安装路径根目录。

User=root
Group=root
Environment=USER=root HOME=/home/git

注:需要注意配置用户和群组,配置错误会导致服务启动失败。本文使用的UserGroup都是root,建议单独创建一个git用户。

7. 将修改好的gogs.service文件上传到/etc/systemd/system下,并执行以下命令来激活gogs。

sudo systemctl enable gogs

8. 执行以下命令来后台启动gogs,如果启动成功则gogs安装完成。

sudo systemctl start gogs

如果刚才已经执行./gogs web启动了,先退出再执行本步骤。

gogs配置

安装完gogs后,在安装目录下会多出来一个文件,本文的路径是/home/gogs/custom/conf/app.ini,通过修改该文件可以自定义配置。

域名绑定

1. 参照以下配置nginx并重启;

server {
    listen 80;
    server_name git.yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;
    }
}

2. 修改/home/gogs/custom/conf/app.ini[server]下面的ROOT_URL为上面nginx配置的域名,并重`gogs服务就可以了;

自动部署

通过git的钩子(hook)来实现:提交代码后,直接将代码更新到你的nginx目录,以达到自动部署。

1. 在gogs网站上创建一个仓库,例如创建好的地址是http://git.yoursite.com/user/blog.git

2. 打开终端并执行以下命令来进入刚创建的仓库的hooks目录下,然后找到post-update.sample文件,并复制一份到相同目录下,将其改名为post-update

cd /home/gogs-repositories/user/blog.git/hooks

/home/gogs-repositories目录为/home/gogs/custom/conf/app.ini里[repository]的ROOT配置,也就是gogs仓库的根目录。

3. 修改post-update文件为如下并保存;

#!/bin/sh

unset GIT_DIR
DeployPath=/www/wwwroot/blog/  #此目录为服务器页面目录
cd $DeployPath
git init
git remote add origin /home/gogs-repositories/user/blog.git
git clean -df
git pull origin master

以上的几行命令的意思是待git更新完成后,就进入nginx的blog应用目录下,然后清空该目录并拉取最新的代码。

4. 终端执行以下命令为post-update文件设置执行权限;

chmod +x post-update

5. 修改blog.git仓库下的任意文件并提交代码,然后检查nginx目录下的文件,应该会更新成功,则自动部署成功。

6. hexo的自动部署需修改hexo根目录下_config.yml文件里的deploy部分;

deploy:
  type: git
  repo: http://git.yoursite.com/user/blog.git
  branch: master

修改repobranch就可以了,一定要注意修改branch为你的正确的branch,然后执行hexo d应该会自动部署到刚才设置的nginx目录下了。

官方常见问题

https://gogs.io/docs/intro/faqs

常用gogs命令

停止gogs:

sudo systemctl stop gogs

启动gogs:

sudo systemctl start gogs

检查gogs运行状态:

sudo systemctl status gogs -l