本文作者:徐曉偉
GitLab 是一個全球知名的一體化 DevOps 平臺,很多人都透過私有化部署 GitLab 來進行原始碼託管。極狐GitLab 是 GitLab 在中國的發行版,專門為中國程式設計師服務。可以一鍵式部署極狐GitLab。
極狐GitLab Docker 私庫開啟配置與使用方式
文件
-
極狐GitLab 容器映象庫
-
容器映象庫身份驗證
-
構建容器映象並將其推送到容器映象庫
-
從容器映象庫中刪除容器映象
-
減少容器映象庫儲存
說明
-
在 極狐GitLab 等 商業 極狐GitLab 中可直接使用
-
如果是自建極狐 GitLab,需要配置極狐 GitLab 容器映象庫的域名(https/SSL)才能使用(docker 映象倉庫需要使用 https),如果沒有配置,則不能訪問
專案地址/container_registry
(頁面會返回 404)-
如果自己有域名,可在阿里雲、騰訊雲、華為雲、百度雲等平臺申請域名證書,大概在每個平臺/賬戶/域名/年可以免費申請20個
- 阿里雲SSL(https)證書免費申請
- 騰訊雲SSL(https)證書免費申請
- 華為雲SSL(https)證書免費申請
- 百度雲SSL(https)證書免費申請
-
如果沒有域名,需要使用下列命令建立域名,以
registry.example.com
域名為例(其中 GitLab 例項的 IP 是 192.168.80.14,也可以使用 IP 生成證書)
# 以 CentOS 為例 # 如果出現 -bash: openssl: command not found,請安裝 openssl:yum -y install openssl # 生成指定位數的 RSA 私鑰:ca.key openssl genrsa -out ca.key 2048 # 根據 RSA 私鑰,生成 crt 證書:ca.crt # CN:設定你要使用的域名 # -utf8:支援中文 # openssl req -new -x509 -days 3650 -key ca.key -subj "/C=CN/ST=山東/L=青島/O=徐曉偉工作室/OU=徐曉偉工作室/CN=192.168.80.14/emailAddress=xuxiaowei@xuxiaowei.com.cn" -out ca.crt -utf8 openssl req -new -x509 -days 3650 -key ca.key -subj "/C=CN/ST=山東/L=青島/O=徐曉偉工作室/OU=徐曉偉工作室/CN=registry.example.com/emailAddress=xuxiaowei@xuxiaowei.com.cn" -out ca.crt -utf8 # 生成 server.csr、server.key # CN:設定你要使用的域名 # -utf8:支援中文 # openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=山東/L=青島/O=徐曉偉工作室/CN=192.168.80.14" -out server.csr -utf8 openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=山東/L=青島/O=徐曉偉工作室/CN=registry.example.com" -out server.csr -utf8 # 生成 ca.srl、server.crt # subjectAltName:設定 DNS、IP # openssl x509 -req -extfile <(printf "subjectAltName=IP:192.168.80.14") -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt openssl x509 -req -extfile <(printf "subjectAltName=DNS:registry.example.com") -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
最終生成了:ca.crt、ca.key、ca.srl、server.crt、server.csr、server.key,其中 server.crt 和 server.key 就是 Nginx 使用的證書
-
配置ab-packages/docker-configuration#%E9%85%8D%E7%BD%AE "配置的直接連結")
-
設定 容器映象庫 域名
sudo vim /etc/gitlab/gitlab.rb
# 注意這裡是 https registry_external_url 'https://registry.example.com' # 限制IP,防止與 GitLab Pages 衝突 # registry_nginx['listen_addresses'] = ['192.168.80.3'] # 指定證書位置 # 下面是預設配置 # registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/域名.crt" # registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/域名.key"
-
重新配置
sudo gitlab-ctl reconfigure
-
檢視狀態是否有異常
sudo gitlab-ctl status
-
檢視日誌是否有異常
sudo gitlab-ctl tail nginx
# 如果出現下方日誌,代表未找到 .crt 證書 # 如果你使用的是阿里雲等平臺的Nginx證書,請將 .pem 檔案字尾名修改為 .crt # 除了字尾名外,證書檔名為 registry_external_url 配置的域名 # 證書的位置是 /etc/gitlab/ssl,如:/etc/gitlab/ssl/registry.example.com.crt、/etc/gitlab/ssl/registry.example.com.key # 如果僅缺少證書報錯,將證書檔案上傳至指定位置後,nginx 會自動啟動(推薦手動配置一次) ==> /var/log/gitlab/nginx/error.log <== 2023/06/25 14:55:18 [emerg] 21028#0: cannot load certificate "/etc/gitlab/ssl/registry.example.com.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/gitlab/ssl/registry.example.com.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
日誌資料夾:
/var/log/gitlab
-
訪問
專案地址/container_registry
,如果返回的不是404
說明已經配置好了-
如果使用域名,則需要新增DNS(或修改本地 hosts)
-
如果是自己生成的證書,使用時需要忽略證書驗證:參見:
- Docker 容器 Nexus 配置 SSL/https
-
-
極狐GitLab Docker 容器映象庫憑證(公開專案拉取映象無需憑證) 其中
$CI_REGISTRY
是 極狐GitLabregistry_external_url
設定的域名,可訪問專案地址/container_registry
看到-
使用者名稱/密碼
# 推薦在個人電腦上使用 docker login -u 使用者名稱 -p 密碼 $CI_REGISTRY
-
CI_REGISTRY_USER CI/CD 變數:
# 此變數對容器映象庫具有讀寫許可權,並且僅對一個作業有效。它的密碼也會自動建立並分配給 CI_REGISTRY_PASSWORD。 docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
-
CI 作業令牌:
# 推薦在 GitLab Runner 流水線中使用 docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY
-
部署令牌:
# 推薦在不是 GitLab Runner 流水線中使用 # 對於讀(拉取)訪問,範圍為 read_registry。 # 對於寫(推送)訪問,範圍為 write_registry。 docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
-
個人訪問令牌:
# 推薦在個人電腦上使用 # 對於讀(拉取)訪問,範圍為 read_registry。 # 對於寫(推送)訪問,範圍為 write_registry。 docker login -u <username> -p <access_token> $CI_REGISTRY
-
-
域名證書驗證失敗:參見:Docker 容器 Nexus 配置 SSL/https 先在宿主機上信任域名,然後使用掛載卷對映
/etc/docker/certs.d
到容器內即可# 此處以 Docker 執行器為例 [[runners]] name = "localhost.localdomain" url = "http://192.168.61.147/" id = 2 token = "oy1n427tVsyLazho1RR4" token_obtained_at = 2023-06-15T07:25:14Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.cache] MaxUploadedArchiveSize = 0 [runners.docker] tls_verify = false image = "ruby:2.7" privileged = true disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false # /etc/hosts:/etc/hosts:使用者指定DNS(hosts) # /etc/docker/certs.d:/etc/docker/certs.d:信任 docker 域名證書配置的資料夾 volumes = ["/cache", "/etc/hosts:/etc/hosts", "/etc/docker/certs.d:/etc/docker/certs.d"] shm_size = 0
更多關於極狐GitLab 的最佳實踐,請搜尋關注【極狐GitLab】公眾號或者登入極狐GitLab 官網 https://gitlab.cn 進行學習。