使用 Docker 部署版本控制工具 Gogs

什么是Gogs?

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

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

背景故事:
撸了快 3 年的 Laravel 了,尽量这周分享本人使用的多台服务器集群部署方案

如何在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

默认以10022和10080对外接口,切记,必须要挂载目录,必须!否则一但镜像销毁,数据全部丢失!还有尽可能选择mysql或其他非sqlite数据库,原理同上!

注意:将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配置文件中的域名:

使用Docker部署版本控制工具Gogs

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

使用Docker部署版本控制工具Gogs

使用Docker部署版本控制工具Gogs

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

使用Docker部署版本控制工具Gogs
详细配置参考文档

添加秘钥到git

使用Docker部署版本控制工具Gogs

创建仓库

使用Docker部署版本控制工具Gogs

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

配置git钩子

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

使用Docker部署版本控制工具Gogs

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

使用Docker部署版本控制工具Gogs
其中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 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3
jcc123

你好,docker启动起来后,访问端口10080访问不了

~ docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                            NAMES
fb8f01bb4bfe        gogs/gogs                "/app/gogs/docker/st…"   5 minutes ago       Up 5 minutes        0.0.0.0:10022->22/tcp, 0.0.0.0:10080->3000/tcp   gogs

Laravel

4年前 评论
jcc123

10080端口,也启动起来了

~ netstat -an | grep 10080
tcp46      0      0  *.10080                *.*                    LISTEN
4年前 评论
晴空 (楼主) 4年前
jcc123 (作者) 4年前
晴空 (楼主) 4年前
jcc123 (作者) 4年前
晴空 (楼主) 4年前
jcc123

开了一个8081端口,测试端口是通的,还是访问不了

~ nc -vz -w 2 127.0.0.1 8081
found 0 associations
found 1 connections:
     1:    flags=82<CONNECTED,PREFERRED>
    outif lo0
    src 127.0.0.1 port 62040
    dst 127.0.0.1 port 8081
    rank info not available
    TCP aux info available

Connection to 127.0.0.1 port 8081 [tcp/sunproxyadmin] succeeded!
4年前 评论
晴空 (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!