一、安装 Docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
将 Docker 设置为开机自启动服务,先不要启动:
sudo systemctl enable docker
执行 docker version
测试,可能会出现以下提示:
[vagrant@localhost ~]$ docker version
Client: Docker Engine - Community
Version: 19.03.6
API version: 1.40
Go version: go1.12.16
Git commit: 369ce74a3c
Built: Thu Feb 13 01:29:29 2020
OS/Arch: linux/amd64
Experimental: false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
再执行 docker version
测试,Docker 安装成功。
Docker 镜像源登录
docker login [<Mirror URL>]
二、安装 GitLab
这里采用 GitLab Omnibus Docker 安装方式。Omnibus 的意思是将 GitLab 及其它所依赖的 PostgreSQL、Redis、Sidekiq 作为一个整体镜像打包,在实际应用中,可以使用 Docker Compose 或 Kubernetes 将 GitLab 依赖的服务单独部署,以增强可靠性和性能。
首先下载 GitLab 镜像,可以先看我之前写的文章《Docker & Kubernetes 小抄》,配置 Docker 国内镜像源:
注:GitLab 版本可自行更新,注意保持跟下面的 GitLab Runner 保持一致,至少是小版本一致。
docker pull gitlab/gitlab-ce:12.7.2-ce.0
mkdir -p /srv/gitlab/{config,logs,data}
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:12.7.2-ce.0
[vagrant@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5689c76f4ca gitlab/gitlab-ce:12.7.2-ce.0 "/assets/wrapper" 2 seconds ago Up 1 second (health: starting) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:2222->22/tcp gitlab
关注上述 STATUS
一栏,刚启动时为 health: starting
,需要等待一段时间,直到 healthy
。
docker exec -it gitlab bash
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
## GitLab settings
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: gitlab.example.com
port: 80
https: false
实际上,gitlab.example.com
是不存在的虚拟地址,需要在 /etc/hosts
添加对应的 DNS 解析规则,第一列是内网地址:
192.168.33.10 gitlab.example.com
保存修改后退出,重启 GitLab 容器:
docker stop gitlab
docker start gitlab
浏览器访问 http://gitlab.example.com ,默认管理员账号为 root
,第一次登陆需要设置密码。
GitLab Docker SSH 登录问题
虽然安装成功了,但是目前登录后往用户里加入 SSH Keys
,执行 git clone
会报权限错误,这是因为端口映射的问题:
docker exec -it gitlab bash
sudo vi /srv/gitlab/config/gitlab.rb
修改 gitlab_rails['gitlab_shell_ssh_port']
:
gitlab_rails['gitlab_shell_ssh_port'] = 2222
如果需要对外网开放,防火墙需要打开对应的 2222 端口。
GitLab 内存消耗过大问题
GitLab 默认情况下运行会非常消耗内存,需要修改一些默认的配置参数。
docker exec -it gitlab bash
vi /etc/gitlab/gitlab.rb
unicorn['worker_processes']
是用来提高服务器的响应速度,默认情况下是(服务器的核心数 * 2 + 1) ,这个参数最小值是 2 :
unicorn['worker_processes'] = 2
适当缩小 Unicorn Worker 的内存使用范围:
unicorn['worker_memory_limit_min'] = "200 * 1 << 20" # 从 1024 MB 改为 200 MB
unicorn['worker_memory_limit_max'] = "300 * 1 << 20" # 从 1280 MB 改为 300 MB
postgresql['shared_buffers']
是数据库缓存大小,适当减小,推荐为总内存大小的 1/4 。
postgresql['shared_buffers'] = "256MB"
postgresql['max_worker_processes']
是数据库并发数,可以适当减小:
postgresql['max_worker_processes'] = 8
sidekiq['concurrency']
是 Sidekiq 并发数,默认是 25 :
sidekiq['concurrency'] = 1
三、安装 GitLab Runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-runner
浏览器访问 http://gitlab.example.com/admin/runners ,阅读 Set up a shared Runner manually 部分。
gitlab-runner register
主要需要填的三个字段 gitlab-ci coordinator URL
、gitlab-ci token
和 executor
,其他的字段可以不填:
- URL:填 Set up a shared Runner manually 部分第二句。
- token:填 Set up a shared Runner manually 部分第三句。
- executor:填
shell
。
usermod -a -G wheel gitlab-runner
四、安装 Kubectl
本地开发环境下,可以很容易地做到 GitLab 服务器和 Kubernetes Master 之间的互信,但是实际环境中是不允许的,因此需要在 GitLab 服务器上使用 kubectl
添加相应的密钥访问:
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version
The connection to the server localhost:8080 was refused - did you specify the right host or port?
创建 ~/.kube/config
,填入 Kubernetes Master 上 ~/.kube
或 ~/.kube/config
的内容,或直接将 Kubernetes Master 上的 ~/.kube
整个文件夹复制到本地的 $HOME
目录下。
五、实际项目
sudo yum install maven
为了加快 Maven 的依赖下载速度,添加国内镜像源,修改 /etc/maven/settings.xml
,在 <mirrors>
内填入:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
网友评论