什么是Gogs?

Gogs 是一款极易搭建的自助 Git 服务。
Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。

编写gogs钩子,配合CentOS7 下使用 rsync+sersync 配置文件自动同步
,可实现自动化部署项目。

如何在docker环境中安装gogs?

服务器安装docker

网上教程很多,这里略过,记得更换镜像

下载gogs镜像

#从Docker Hub中提取图像。
$ docker pull gogs/gogs

#为卷创建本地目录。
$ mkdir -p /var/gogs

#首次使用`docker run`。为了使您的数据远离Docker容器,我们在这里执行卷(/var/gogs- > /data),您可以根据您的情况进行更改。
# 如果使用nginx反代,则只需要10022端口即可
$ docker run --name=gogs -d -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs

#如果你已停止它,请使用`docker start`。
$ docker start gogs
mysqlsqlite

注意:将Gogs ssh服务从容器映射到主机并在首次设置Gog时设置适当的SSH端口和URI设置非常重要。要使用上述配置访问和克隆Gogs Git存储库,您可以使用:git clone ssh://git@hostname:10022/username/myrepo.git例如

nginx反代gogs

https

记得添加证书,把配置文件中的中文更换成对应的内容。

server
{
    #listen 443 ssl http2;
    listen 443 ssl;
    server_name 网址;
    location / {
        #proxy_pass https://127.0.0.1:10080;
        proxy_set_header  X-Real-IP  $remote_addr;
        # 10080端口是docker映射的
        proxy_pass http://127.0.0.1:10080$request_uri;
    }

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    ssl_certificate    证书地址/fullchain.pem;
    ssl_certificate_key    证书地址/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;

    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    #include enable-php-73.conf;
    #PHP-INFO-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    access_log  访问成功日志地址;
    error_log  访问失败日志地址;
}
# 以下部分表示重定向 HTTP 请求到 HTTPS
server {
    listen 80;
    server_name 网址
    return 301 https://$host$request_uri;
}

http

不需要设置静态文件缓存,只需要设置location,server_name 即可

server {
    listen80;
    server_name 网址;

    location /{
        # 10080端口是docker映射的
        proxy_pass http://127.0.0.1:10080;
        proxy_redirect default;
    }
}
初始化gogs服务

访问nginx配置文件中的域名:

输入配置参数即可。数据库可以选择sqlite,这样就不需要外接mysql了。

点击安装即可,具体配置见下图


详细配置参考文档

添加秘钥到git 创建仓库

之后根据提示,就可以正常使用了

配置git钩子

首先点击仓库界面的仓库设置

点击左侧管理git钩子,之后编辑post-receive


其中GIT_WORK_TREE 后换成自己需要的目录即可

特别注意

  1. 安装中不要勾选使用内置ssh服务!
  2. 安装ssh服务端口不要是22,另开一个!
  3. 为什么钩子推送会失败?因为写钩子的时候,目录是在docker里的,当然找不到,所以,钩子里的同步目录要和挂载的主机目录有关联才行!

这个地址,其实是docker中gogs的地址,我们在运行镜像的时候,指定了映射目录

/var/gogs:/data
/data/project/bbs/var/gogs/project/bbs

之后,再参照CentOS7 下使用 rsync+sersync 配置文件自动同步

即可实现本地开发,git提交后自动推送至服务器,之后多台服务器之间自动同步差异化文件,实现自动化部署。

本作品采用《CC 协议》,转载必须注明作者和本文链接