跳转至

使用 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:/datagogs 容器 /data的目录,挂载到 gogs-data 的数据卷,避免删除容器时数据丢失。
  • --link mysql-server:mysql-servermysql-server 容器,链接到 gogs 容器,容器内部通过 mysql-server 主机名即可与之通信。
  • -p 10022:22 -p 13000:3000 ,分别映射 宿主机 1002213000 端口,到 gogs 容器的 223000 端口,用于对外通信。

配置 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

参考

gogs

回到页面顶部