步骤/目录:
1.准备工作
2.编写compose模板
3.运行并验证
4.gogs使用https
5.gogs备份

本文首发于个人博客https://lisper517.top/index.php/archives/24/,转载请注明出处。
本文的目的是使用docker、docker-compose在云服务器上运行gogs。
本文实验日期为2022年7月28日。本文使用的云服务器为阿里云轻量应用服务器,系统镜像 Docker 19.03 。

之前的文章中曾介绍过gogs,详见 树莓派+云服务器,gogs+frp搭建私有git 。简单来说,使用gogs可以搭建一个私有的轻量级的git服务器,一般gogs用于个人或小微企业。

在docker官方仓库网页可以搜索到官方gogs镜像即 gogs/gogs ,其下载量为50M+,3天前更新。下面就使用该镜像+mysql镜像搭建gogs服务。

1.准备工作

和frp的部署一样,笔者准备了一台云服务器,如果只打算在局域网用gogs也可以在本地机器上运行。
在服务器上准备目录,拉取镜像:

mkdir -p /docker/gogs/data/gogs
mkdir /docker/gogs/data/mysql
mkdir -p /docker/gogs/conf/mysql
docker pull gogs/gogs
docker pull mysql:8.0.29

这里需要简单说明一下docker-gogs的使用。容器内的22端口用于git命令相关操作,3000用于网页访问;容器内的/data目录包含了仓库、gogs的个性化设置。

2.编写compose模板

编写compose模板:

vim /docker/gogs/docker-compose.yml

写入以下内容:

version: "3.9"

services:
  gogs:
    image: gogs/gogs
    ports:
      - "50023:22"
      - "9444:3000"
    volumes:
      - /docker/gogs/data/gogs:/data
    depends_on:
      - mysql
    logging: 
      driver: syslog
    restart: always

  mysql:
    image: mysql:8.0.29
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: gogs
      MYSQL_USER: gogs
      MYSQL_PASSWORD: 234567
    command:
      - mysqld
      - --character-set-server=utf8
      - --default-authentication-plugin=mysql_native_password
    volumes:
      - /docker/gogs/data/mysql:/var/lib/mysql
      - /docker/gogs/conf/mysql:/etc/mysql/conf.d
    logging: 
      driver: syslog
    restart: always

根据 docker-mysql 的介绍,通过 MYSQL_USERMYSQL_PASSWORD 创建的用户,对通过 MYSQL_DATABASE 创建的数据库享有所有权限。

3.运行并验证

cd /docker/gogs
docker-compose config
docker-compose up

记得在云服务器的设置里打开9444、50023端口。这时可以访问 云服务器ip:9444 ,出现gogs初始页面。这里谈一点gogs的初始设置:
数据库选mysql,数据库主机填mysql:3306,用户密码就是gogs@234567。基本设置里的域名,笔者使用云服务器就填服务器ip,应用URL则不影响实际、只是展示用。SMPT设置和typecho的CommentNotifier插件差不多,见 Docker树莓派实践——Typecho及其备份 。如果是私人或小微企业,可以在 禁止用户自主注册 、 启用登录访问限制 里打勾。具体配置细节还是参考 gogs/gogs镜像原址

另外,若要后台运行docker-frpc,可使用docker-compose up -d命令。

4.gogs使用https

gogs可以使用https,这里笔者使用的是自己域名的证书,也可以用自签证书。

mkdir /docker/gogs/ssl_certificate
cp /docker/gogs/data/gogs/gogs/conf/app.ini /docker/gogs/data/gogs/gogs/conf/app.ini_backup
vim /docker/gogs/data/gogs/gogs/conf/app.ini

将自己的证书放到/docker/gogs/ssl_certificate中后,对gogs的配置文件app.ini进行以下修改:

[server]
......
......
#新增4行
PROTOCOL = https
ROOT_URL = https://lisper517.top:3000
CERT_FILE = /ssl_certificate/www.lisper517.top.pem
KEY_FILE = /ssl_certificate/www.lisper517.top.key

修改gogs配置文件主要参考了 这篇文章 ,其中还介绍了使用nginx反向代理。
然后修改compose模板,新增一个挂载:

- /docker/gogs/ssl_certificate:/ssl_certificate

最后删除容器、重新生成:

docker stop gogs_mysql_1
docker stop gogs_gogs_1
docker container rm gogs_mysql_1
docker container rm gogs_gogs_1
docker network rm gogs_default
docker volume ls
docker volume prune #gogs用了一个匿名卷也删掉
cd /docker/gogs
docker-compose config
docker-compose up

最后在浏览器访问 https://lisper517.top:9444 即可看到使用了https的gogs页面。

5.gogs备份

为了定时备份,同 Docker树莓派实践——Typecho及其备份 中最后一部分一样,在服务器上进行如下操作:

mkdir -p /backup/gogs
crontab -e

加上一行:

15 0 * * * /usr/bin/zip -r /backup/gogs/backup.zip /docker/gogs

zip命令写绝对路径是怕cron运行时的env里PATH不包括/usr/bin,实际上应该尽量都写绝对路径。用whereis zip可查找zip的路径。
这样每天0点15分就会备份整个docker-gogs。
最后,可以在树莓派上也设置每天1点15分拷贝服务器上的/backup/gogs/backup.zip备份文件,具体操作如下:

mkdir -p /backup/gogs
mkdir /backup/key #存放密钥
crontab -e

加上如下内容:

15 1 * * * /usr/bin/scp -i /backup/key/alicloud-backup root@lisper517.top:/backup/gogs/backup.zip /backup/gogs

关于打开树莓派的crontab日志功能、设置正确的树莓派系统时间见 Docker树莓派实践——Typecho及其备份 。另外,在gogs后台可以看到有备份仓库的功能,笔者这里为了方便镜像更新后数据迁移,就直接备份文件夹了。

标签: gogs, docker, docker-compose, HTTPS

添加新评论