场景

公司使用的bitbucket提供的git远程仓库,为什么选择他历史原因喽,回想第一天克隆一个1G+repo等待了一天,这个痛苦啊。最近的每次发版都着实的感觉到bitbucket慢的给蜗牛一样(应该是墙的问题每次都得开VPN才能正常玩啥),鉴于此情况下,决定使用自建Gitlab服务,选择华东(上海)地区机房,日本团队的小伙伴测试的速度400M+大小的repo,克隆下来30分钟左右。

安装 Docker

Ubuntu 安装 Docker,官方文档:https://docs.docker.com/install/linux/docker-ce/ubuntu/

  1. 更新 apt 包索引
1
sudo apt-get update
  1. 安装最新版本的 Docker Engine-Community和containerd
1
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 查看安装成功的版本
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
root@jira:~# docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea838
 Built:             Wed Nov 13 07:50:12 2019
 OS/Arch:           linux/amd64
 Experimental:      false
 ...
 ...

Docker 下快速部署 Gitlab 服务

使用开源的Gitlab docker-compose.yml快速搭建,

我计划将gitlab服务放在/usr/local/gitlab目录,故创建了此目录

  1. 下载docker-compose.yml
1
2
mkdir /usr/local/gitlab && cd /usr/local/gitlab
wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
  1. 修改docker-compose.yml配置项,这里仅贴出修改过的配置项
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 时区
- TZ=Asia/Shanghai
- GITLAB_TIMEZONE=PRC

# 开启SSL
- GITLAB_HTTPS=true

# Gitlab 域和端口,域名不要带协议如(http://或https://)
- GITLAB_HOST=git.neox-inc.com
- GITLAB_PORT=443
- GITLAB_SSH_PORT=22

这里我对外暴露的是91809122端口,然后在负载均衡器中配置SSL证书,完成对https的访问,如需ssh方式访问,负载均衡器中还需配置22=>9122的转发,负载均衡器配置图见下图。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
 gitlab:
    restart: always
    image: sameersbn/gitlab:12.5.5
    depends_on:
    - redis
    - postgresql
    ports:
    - "9180:80"
    - "9122:22"
    - "443:443"
    volumes:
    - ./gitlab-data:/home/git/data:Z

为更日后更方便迁移gitlab服务,redis-datapostgresql-datagitlab-datavolumes,这里我分别配置成相对’./‘目录

  1. 安装 docker-compose
1
apt install docker-compose

或者通过pip安装

1
pip install docker-compose==1.8.0

不推荐如下curl方式安装(你要问为什么?下载速度比乌龟爬的都慢「龟速」)

1
2
3
sudo curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

4.启动 gitlab 服务

1
docker-compose up -d 
  1. 访问 gitlab 服务
1
http://ip:9180

如果你是域名直接解析到本地,那么可以通过域名访问。

特殊场景

我司ssl证书统一管理在阿里云负载均衡器上,为了日后方便统一更换过期证书,gitlab服务也使用负载均衡器。通过研究阿里云负载均衡器发现,不支持前端协议http转后端协议tcp

那么问题来了,docker-compose启的服务全部都是tcp协议,那么如何完成sslhttp前端协议转后端某个端口的http协议呢?

经过思考,只得借用nginx转发实现,配置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
upstream git.neox-inc.com {
        server ip:9180;
    }

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name git.neox-inc.com;
        location / {
            proxy_pass http://git.neox-inc.com;
        }

}

均衡器中监听配置图

阿里云负载均衡器截图

批量导入用户

参考地址:https://www.jianshu.com/p/83b06525c946

温馨提醒

为了方便后期迁移Gitlab到别的服务器,强烈建议将数据目录配置gitlab-data数据目录,方便迁移(不远的3个月我就迁移过,甚是方便:-))

补充

docker-compose 卸载方式:

  1. 删除对应的二进制文件
1
sudo rm /usr/local/bin/docker-compose

2.pip方式卸载

1
pip uninstall docker-compose