最近需要在公司的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
8sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine安装所需包
1
2
3sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2配置仓库
1
2
3sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo安装 Docker Engine Community
安装最新版本的 Docker Engine-Community 和 containerd如果提示接受 GPG 密钥,选yes。1
2
3sudo yum install -y docker-ce \
docker-ce-cli \
containerd.io启动 Docker
1
sudo systemctl start docker
验证安装
正确输出如下1
2sudo docker -v
sudo docker run hello-world
安装 Docker Compose
安装企业Linux的额外软件包
1 | sudo yum install -y epel-release |
安装并更新 python3-pip
1 | sudo yum install -y python3-pip |
安装 Docker Compose
1 | sudo pip3 install docker-compose |
验证安装
1 | docker-compose version |
正确输出如下
安装 Redis 和 GitLab
Network
我这边预计会复用Redis,所以要创建单独的Redis镜像,那么在创建之前,需要先见一个 network 用于将多个镜像放置在同一网络环境下。(如果局域网中已经存在对应网段,请自行替换)
1 | sudo docker network create \ |
Redis
下面创建 Redis,我这里使用 Docker Compose 来完成。
新建一个文件夹并将其重命名为 Redis,在 Redis 文件夹中创建 config 文件夹,而后在 config 文件夹中创建 Redis 的配置文件 redis.conf
1 | #redis的databases数量 |
在 Redis 目录中新建 docker-compose.yml 脚本:
1 | version: '3' |
然后在 docker-compose.yml 所在目录下
接下来,在 docker-compose.yml 所在目录运行 docker-compose:
1 | docker-compose up -d |
GitLab
新建一个文件夹并将其重命名为 GitLab,在 GitLab 文件夹中创建 config 文件夹,在 config 文件夹中创建 ssl 文件夹,而后将我们的 SSL 证书拷贝到 ssl 目录中。
而后回到 GitLab 文件夹开始编写我们的 docker-compose.yml
1 | version: '3' |
接下来,在 docker-compose.yml 所在目录运行 docker-compose:
1 | docker-compose up -d |
至此,我们完成了使用 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 。