主要分为两步,Gitlab安装和镜像仓库配置。
Gitlab安装 前置准备 为了灵活与安全,选择采用Docker安装,首先得安装Docker。 查看Docker版本:
Gitlab容器的配置、数据、日志挂载在宿主机的/srv/gitlab
目录下。 首先设置个路径,在~/.bash_profile
或者~/.bashrc
中添加:
export GITLAB_HOME=/srv/gitlab
设置好记得source一下:
source ~/.bash_profile# 或者 source ~/.bashrc
使用 Docker Engine 安装极狐GitLab 安装命令:
sudo docker run --detach \ --hostname gitlab.virtualplane.com \ --publish 443:443 --publish 80:80 --publish 23:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ registry.gitlab.cn/omnibus/gitlab-jh:latest
有几点需要注意:
--hostname
为Gitlab 的访问域名,由于不需要公网解析,在内网环境下可自己设一个方便的域名,只需要手动添加DNS解析记录或者hosts保证能正常映射ip即可。
端口映射。设置中将容器的443
和80
端口分别映射到宿主机相应端口上,但是将用于SSH的容器22端口映射到23端口,这是因为宿主机的22端口要留作宿主机的SSH连接用。
--volume
。$GITLAB_HOME/config
挂载到容器的/etc/gitlab
路径下,所以后续进行配置时的配置文件在宿主机的$GITLAB_HOME/config
(即绝对路径/srv/gitlab/config
)路径下能找到。
镜像tag一般不推荐latest
.要使用特定的标记版本,请将 registry.gitlab.cn/omnibus/gitlab-jh:latest 替换为要运行的极狐GitLab 版本,例如 registry.gitlab.cn/omnibus/gitlab-jh:16.1.0。
配置完毕运行安装即可,为了方便排错,建议将上面的运行命令保存方便查看。 初始化过程可能需要很长时间。 可以通过以下命令跟踪此过程:
sudo docker logs -f gitlab
容器启动并添加好DNS解析后即可通过域名gitlab.virtualplane.com
登录Github 初始默认登陆用户是root
,密码通过以下命令获得:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
:::warning 这个密码存储24小时,过后将获取不到,请注意留存。 在10.168.1.99这台服务器上配置的github实例,root账户密码是:p5biOVz9UdA7wcAPfdgtLXVvuIEYeFfbI6kl9rQ5RDM=
:::
备份与升级 备份 :::info 数据备份也是非常重要的部分,请务必重视。 ::: 使用以下命令创建全量数据备份:
docker exec -t <container name> gitlab-backup create
备份配置文件gitlab.rb
和gitlab-secrets.json
:
sudo cp $GITLAB_HOME/config/gitlab.rb $GITLAB_HOME/config/gitlab-secrets.json ~/
仅创建数据库备份: (万一升级遇到问题,需要数据库备份来回滚极狐GitLab 升级。)
docker exec -t <container name> gitlab-backup create SKIP=artifacts,repositories,registry,uploads,builds,pages,lfs,packages,terraform_state
备份被写入 /var/opt/gitlab/backups
,挂载在宿主机$GITLAB_HOME/config/data
。
升级 :::info 升级前请先备份 ::: 停止gitlab容器:
移除现有容器:
拉取新镜像: 镜像tag视情况而定
sudo docker pull registry.gitlab.cn/omnibus/gitlab-jh:latest
使用之前的配置再次创建容器:
sudo docker run --detach \ --hostname gitlab.virtualplane.com \ --publish 443:443 --publish 80:80 --publish 23:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ registry.gitlab.cn/omnibus/gitlab-jh:latest
查看容器状态直至healthy
即可。
镜像仓库搭建 极狐GitLab 容器镜像库可以为每个项目都配置自己的空间来存储 Docker 镜像。About Registry 在此文档中了解更多 Docker Registry的详细信息。
SSL证书 容器镜像库默认在 HTTPS 下工作。 可以使用 HTTP,但并不推荐。 由于镜像仓库运行在内网,可以通过内部CA签发证书或者使用自签名证书。 此处使用OpenSSL生成自签名证书:
# 由于权限问题,此处使用root权限执行 sudo su cd ~ mkdir -p certs openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \ -addext "subjectAltName = DNS:registry.virtualplane.com" \ -x509 -days 365 -out certs/domain.crt
:::info 此处的subjectAltName = DNS:
需要替换为自己的仓库域名,比如我这里使用registry.virtualplane.com
::: 证书生成完了以后需要配置每个 Docker 守护进程信任该证书,不然在login的时候会报错。 Linux系统下需要将domain.crt
复制到docker的证书目录下对于域名文件夹中。默认情况下:
cd /etc/docker/cert.d# 注意域名 mkdir registry.virtualplane.com cp domain.crt /etc/docker/cert.d/registry.virtualplane.com/ca.crt
不需要重启docker。
Gitlab配置 将上一步生成的证书和密钥放入Gitlab的配置目录中,在宿主机上是/srv/gitlab/config/ssl
(ssl目录没有就mkdir一个),对应容器里的/etc/gitlab/ssl
.
sudo su cd ~/certs cp domain.crt /srv/gitlab/config/ssl/registry.virtualplane.com.crt cp domain.key /srv/gitlab/config/ssl/registry.virtualplane.com.key
确保证书权限:
chmod 600 /srv/gitlab/config/ssl/registry.gitlab.example.com.*
放置好 TLS 证书后,编辑虚拟机内的/etc/gitlab/gitlab.rb:
docker exec -it gitlab /bin/bash vi /etc/gitlab/gitlab.rb
external_url 'https://gitlab.virtualplane.com' registry_external_url 'https://registry.virtualplane.com' gitlab_rails['registry_enabled'] = true gitlab_rails['registry_host'] = "registry.virtualplane.com"
注意此处需写明https
。 gitlab.rb中还有一些可能有用的设置,遇到问题时可以尝试设置如下信息尝试解决:
external_url 'https://gitlab.virtualplane.com' registry_external_url 'https://registry.virtualplane.com' gitlab_rails['registry_enabled'] = true gitlab_rails['registry_host'] = "registry.virtualplane.com" gitlab_rails['registry_port'] = "5000" gitlab_rails['registry_api_url'] = "http://127.0.0.1:5000" registry_nginx['enable'] = true registry['registry_http_addr'] = "127.0.0.1:5000" registry['debug_addr'] = "localhost:5001" registry_nginx['listen_https'] = true registry_nginx['redirect_http_to_https'] = true
保存配置,重新配置Gitlab实例使配置生效。
sudo docker restart gitlab
更多配置参考Gitlab文档极狐GitLab 更多配置
验证 以上配置正常的情况的下可以通过gitlab的用户名和密码登录:
docker login registry.virtualplane.com# 输入用户名密码登录
登录成功: 打个镜像上传仓库以验证可用性:
mkdir staticweb cd staticweb vim Dockerfile
写入以下Dockerfile:
# Version: 0.0.1 FROM ubuntu:latest MAINTAINER Bourbon Tian "bourbon@1mcloud.com" RUN apt-get update RUN apt-get install -y nginx RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html EXPOSE 80
构建镜像 构建镜像时需要按照 域名/用户/项目名 的规则构建。如果不清楚可以访问自己项目-部署-容器镜像库的页面,会有构建提示,如图所示: 需注意的是,docker login registry.virtualplane.com:5000 时可能会有问题,需要去掉”:5000”,直接尝试login域名。下面build和pull时也不要带”:5000”
# 根据项目提示构建docker image docker build -t registry.virtualplane.com/internal/osmdev/testnginx .
构建完成后查看一下:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.virtualplane.com/internal/osmdev/testnginx latest 20c701ebc91c 52 seconds ago 176MB
上传仓库:
docker push registry.virtualplane.com/internal/osmdev/testnginx
在仓库中查看:
故障排查 安装过程中因为操作失误或者别的原因可能会有各种报错,通过检查输入命令和查看日志查明原因。 读取容器日志:
进入容器:
sudo docker exec -it gitlab /bin/bash
:::info 还有个可能会遇到的问题:Docker的默认日志驱动是json-file ,默认不执行日志轮换。因此长时间运行后会生成大量的日志数据消耗磁盘空间,需要注意清理。 ::: 另外还可参考官方文档极狐GitLab Docker 镜像 | 极狐GitLab