使用 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