使用 Docker 部署 Gogs
2017-06-20 by dongnan
更新,如果你需要直接使用 docker-compose 部署 gogs ,请参考这里。
目标
- 使用 docker部署gogs
- 使用 gogs完成git项目管理。
简介
gogs 是一款极易搭建的自助 Git 服务(带有web控制台), gogs 追求简单、最快速和最轻松的方式搭建自助 Git 服务。
gogs 使用 Go语言开发通,通过二进制(可执行)分发,基于 Go语言特性,支持所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。
准备工作
gogs 需要使用数据库支持,这里会提前准备好 mysql 容器。
下载镜像
docker pull gogs/gogs
docker pull mysql-server
创建mysql容器
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="gogs" \
      -e MYSQL_USER="gogs" \
      -e MYSQL_PASSWORD="zongming.net" \
      -e MYSQL_ROOT_PASSWORD="zongming.net" \
      -v db-data:/var/lib/mysql \
      -v /etc/localtime:/etc/localtime:ro \
      -d mysql \
      --character-set-server=utf8 --collation-server=utf8_general_ci --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
部署
创建 gogs 容器
docker run --name gogs -tid \
      -v /etc/localtime:/etc/localtime:ro \
      -v gogs-data:/data \
      --link mysql-server:mysql-server \
      -p 10022:22 -p 13000:3000 \
      gogs/gogs
解释下创建 gogs 容器的参数
- -v gogs-data:/data将- gogs容器- /data的目录,挂载到- gogs-data的数据卷,避免删除容器时数据丢失。
- --link mysql-server:mysql-server将- mysql-server容器,链接到- gogs容器,容器内部通过- mysql-server主机名即可与之通信。
- -p 10022:22 -p 13000:3000,分别映射 宿主机- 10022与- 13000端口,到- gogs容器的- 22与- 3000端口,用于对外通信。
配置 gogs
gogs 容器创建成功后,通过访问 http://your_Server_ip:your_Port 进入安装配置页面,按照提示,填写相应的配置项目。
必选项,数据库,域名,SSH 端口, HTTP端口,应用 URL,管理员帐号,其它项目可以保持默认。
- 配置页面1

- 配置页面2

- 最后 点击 “立即安装” 即可。
使用
创建项目
登录帐号后,通过 右侧"+" 图标,创建项目,例如创建一个 名为: happy-robot 项目,如下图:
创建中

创建完毕

添加公钥
账户设置 -> SSH密钥 -> 增加密钥 ,如下图:

验证
克隆项目
git clone ssh://git@test.zongming.net:10022/dongnan/happy-robot.git
推送代码
mv ~/python/kxdz/*.py .
git add .
git commit -m "测试 gogs"
[master 9cae31f] 测试 gogs
 3 files changed, 437 insertions(+)
 create mode 100644 kxdz.py
 create mode 100644 notify.py
 create mode 100644 test.py
git push
# ...省略
To ssh://git@test.zongming.net:10022/dongnan/happy-robot.git
   d16ec43..9cae31f  master -> master
扩展: 使用 docker-compose 来编排 gogs应用
cat gogs/docker-compose.yml
version: '2'
services:
  gogs-web:
    image: gogs/gogs
    container_name: gogs-web
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - gogs-data:/data
    environment:
      - TZ=Asia/Chongqing
    ports:
      - "12122:22"
      - "13130:13130"
      # - "13130:3000"  rewrite portmap rule after restart container.
    links:
      - gogs-db:mysql-server
  gogs-db:
    image: mysql:5.7
    container_name: gogs-db
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
      - db-data:/var/lib/mysql
    environment:
      - TZ=Asia/Chongqing
      - MYSQL_DATABASE=gogs
      - MYSQL_USER=gogs
      - MYSQL_PASSWORD=ThisMyPassword
      - MYSQL_ROOT_PASSWORD=ThisMyPassword
    command:
      --character-set-server=utf8
      --collation-server=utf8_general_ci
      --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
volumes:
    db-data:
      driver: local
    gogs-data:
      driver: local