GitLab Setup with Docker

公司项目几乎是散落在各个角落,有的在私有 Github,有的则是旧的 CVS,去年搭建了 GitLab 平台,经过半年的努力,差不多都已迁入到新的 GitLab 了。

像 Gitlab 这种大型项目的部署是一件很复杂的事情,但好在有了 docker-gihub 项目,让部署变得超级简单。刚好碰到一些问题,对 GitLab 进行了次升级,记录下过程。

安装配置

需要一台有公网 IP 的服务器,推荐使用 Ubuntu Server。

安装 Docker

1
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh

下载 GitLab Docker Image

1
$ sudo docker pull sameersbn/gitlab:latest

数据库

GitLab 支持 MySQL 和 PostgerSQL 两种数据库,也分别提供了对应的 Docker Image,方便进行链接使用。如果公司已有相应的数据库,也可以使用现有数据库。

Pull MySQL Docker Image

1
$ docker pull sameersbn/mysql:latest

Start MySQL Container

gitlab.mysql.sh

1
2
3
4
5
6
sudo docker run --name gitlab-mysql -d \
--env 'DBNAME=gitlabhqproduction' \
--env 'DBUSER=gitlab'
--env 'DBPASS=password' \
--volume /var/docker/gitlab/mysql:/var/lib/mysql \
sameersbn/mysql:latest

Redis

新版 GitLab 依赖于 Redis Server,这里建议直接 Link 一个 Redis Container。

1
2
$ sudo docker pull sameersbn/redis:latest
$ sudo docker run --name=redis-gitlab -d sameersbn/redis:latest

gitlab.redis.sh

1
2
3
sudo docker run --name gitlab-redis -d \
--volume /var/docker/gitlab/redis:/var/lib/redis \
sameersbn/redis:latest

支持 SSH/Git 协议

SSH 协议有些好处,像安全,大文件支持:

如果 Host 本地 22 端口未被占用,可以省略配置。如果有被占用,配置时,注意填写这些变量,GITLAB_SSH_PORT 是指定 SSH 端口,指定后,项目的 SSH 路径会变成 ssh://git@git.lanvige.com:10022/test/test.git

1
2
--env='GITLAB_PORT=80' --env='GITLAB_SSH_PORT=10022' \
--publish=10022:22 --publish=80:80 \

Run

将下面命令存为脚本文件方便执行。

gitlab.start.sh

1
2
3
4
5
6
7
8
9
10
11
# Link MySQL
sudo docker run --name=gitlab711 -d -h git.lanvige.com\
--env='GITLAB_PORT=80' --env='GITLAB_SSH_PORT=10022' \
--publish=10022:22 --publish=80:80 \
--link=gitlab-mysql:mysql \
--link=gitlab-redis:redisio \
--volume=/var/docker/gitlab/data:/home/git/data \
--env='GITLAB_HOST=git.lanvige.com' \
--env='GITLAB_EMAIL=git@example.com' \
--env='SMTP_USER=git@example.com' --env='SMTP_PASS=password' \
sameersbn/gitlab:latest

使用外部 MySQL 的配置

1
2
3
# --link=gitlab-mysql:mysql \
--env='DB_TYPE=mysql' --env='DB_HOST=192.168.1.1' --env='DB_NAME=gitlabhq_production' \
--env='DB_USER=gitlab' --env='DB_PASS=password' \

命令详解:

  • name=gitlab711 给 Contrainer 起名,加上版本号,方便查看和升级。
  • -h 设定 GitLab Server 主机名。
  • link=redis-gitlab:redisio 将 Redis Container 链接进来。
  • volume 将本地路径映射到 Container 中,/home/git/data 是 Gitlab 中仓库的存储目录。
  • DB_TYPE & DB_HOST & DB_NAME … 分别设置了使用数据库的类型和连接方式。更多见:External MySQL Server

查看进程

1
2
3
4
5
# 查看 gitlab711 Container 是否启动成功
$ sudo docker ps
# 查看 Container 运行日志
$ sudo docker logs gitlab711

测试

1
$ ssh -p 10022 -vvv git@git.lanvige.com

出现 Welcome,配置工作完成。

升级

因为有了 Docker,和优秀的分离配置,让升级变得非常容易。

删除旧的 Container

1
2
$ sudo docker stop gitlab711
$ sudo docker rm gitlab711

下载最新的 Docker Image

1
$ sudo docker pull sameersbn/gitlab:latest

运行

同样运行上面的启动脚本 gitlab.start.sh,就可以获得一个新版的 GitLab。

REF::