最近需要在公司的CentOS7服务器上部署一套GitLab服务,打算采用Docker来完成,记录一下部署过程。
2021-07-05
更新:
- 系统升级为CentOS8
- 因为GitLab新版本直接支持了中文且GitLab-CE-CN一直没有更新,故而镜像换成了GitLab-CE
- redis 升级为最新版
- 实践中发现默认源安装的pip版本安装docker-compose时必然出错,故而加入更新pip步骤
- 实际使用过程中发现docker网段在阿里云非常容易和企业内网网段冲突,故而新建网络时增加指定生僻网段
安装 Docker 与 Docker Compose
安装 Docker
卸载旧版本(新机可忽略)
1 2 3 4 5 6 7 8
| sudo yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
|
安装所需包
1 2 3
| sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
|
配置仓库
1 2 3
| sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
|
安装最新版本的 Docker Engine-Community 和 containerd
1 2 3
| sudo yum install -y docker-ce \ docker-ce-cli \ containerd.io
|
如果提示接受 GPG 密钥,选yes。
启动 Docker
1
| sudo systemctl start docker
|
验证安装
1 2
| sudo docker -v sudo docker run hello-world
|
正确输出如下

安装 Docker Compose
安装企业Linux的额外软件包
1
| sudo yum install -y epel-release
|
安装并更新 python3-pip
1 2
| sudo yum install -y python3-pip python3 -m pip install -U pip
|
安装 Docker Compose
1
| sudo pip3 install docker-compose
|
验证安装
正确输出如下

安装 Redis 和 GitLab
Network
我这边预计会复用Redis,所以要创建单独的Redis镜像,那么在创建之前,需要先见一个 network 用于将多个镜像放置在同一网络环境下。(如果局域网中已经存在对应网段,请自行替换)
1 2 3 4 5 6
| sudo docker network create \ --driver=bridge \ --subnet=192.112.0.0/16 \ --ip-range=192.112.5.0/24 \ --gateway=192.112.5.254 \ net_default
|
Redis
下面创建 Redis,我这里使用 Docker Compose 来完成。
新建一个文件夹并将其重命名为 Redis,在 Redis 文件夹中创建 config 文件夹,而后在 config 文件夹中创建 Redis 的配置文件 redis.conf
1 2 3 4
| databases 32
requirepass qm4Cqd3srYK0MHTPEZmf
|
在 Redis 目录中新建 docker-compose.yml 脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| version: '3' services: redis: image: redis container_name: db-redis restart: always ports: - 6379:6379 networks: - net_default volumes: - ./config:/docker/config - ./data:/data command: redis-server /docker/config/redis.conf networks: net_default: external: true
|
然后在 docker-compose.yml 所在目录下
接下来,在 docker-compose.yml 所在目录运行 docker-compose:

GitLab
新建一个文件夹并将其重命名为 GitLab,在 GitLab 文件夹中创建 config 文件夹,在 config 文件夹中创建 ssl 文件夹,而后将我们的 SSL 证书拷贝到 ssl 目录中。

而后回到 GitLab 文件夹开始编写我们的 docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| version: '3' services: gitlab-ce: image: 'gitlab/gitlab-ce:13.0.14-ce.0' container_name: gitlab-ce restart: unless-stopped environment: TZ: 'Asia/Shanghai' GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.apukj.com' nginx['redirect_http_to_https'] = true nginx['ssl_certificate'] = "/etc/gitlab/ssl/5216854__apukj.com.pem" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/5216854__apukj.com.key" gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = 'smtp.exmail.qq.com' gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = 'admin@apukj.com' gitlab_rails['smtp_password'] = 'FmSM8juiYywqJnXv' gitlab_rails['smtp_domain'] = 'smtp.exmail.qq.com' gitlab_rails['smtp_authentication'] = 'login' gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = 'admin@apukj.com' gitlab_rails['gitlab_email_display_name'] = '阿铺科技源码服务' gitlab_rails['gitlab_email_reply_to'] = 'admin@apukj.com' user["git_user_email"] = 'admin@apukj.com' sidekiq['concurrency'] = 10 gitlab_rails['redis_port'] = 6379 gitlab_rails['redis_host'] = 'db-redis' gitlab_rails['redis_password'] = 'edHtDM44XbOzsQcEXlaR' gitlab_rails['redis_database'] = '1' gitlab_rails['gitlab_shell_ssh_port'] = 24 ports: - '80:80' - '443:443' - '24:22' - '5432:5432' networks: - net_default volumes: - ./config:/etc/gitlab - ./data:/var/opt/gitlab - ./logs:/var/log/gitlab networks: net_default: external: true
|
接下来,在 docker-compose.yml 所在目录运行 docker-compose:

至此,我们完成了使用 Docker 搭建 GitLab 的全过程,直接访问HTTP对应服务器的80/443端口接口即可:

踩坑记录
docker端口映射或启动容器时报错Error response from daemon: driver failed programming external connectivity on endpoint
docker服务启动时定义的自定义链DOCKER由于某种原因被清掉
重启docker服务及可重新生成自定义链DOCKER
1
| systemctl restart docker
|
SMTP 验证失败
163、QQ等邮箱在开启了授权码之后,需要使用授权码做协议登陆。
阿里云,启动以后无法通过外部访问
首先需要排除防火墙问题,firewall 和 iptables 均需要处理,处理后如果仍然不行,那可能是阿里云自身的安全策略问题,需要在管理后台设置。
阿里云,邮件无法发送
可能是阿里云对 25 端口做了屏蔽,可以按照我给出的配置,使用 SSL 的 SMTP 端口 465 。