Используя Docker и Compose, я пытаюсь соединить Gitlab с внешним Реестром, работающим как другой сервис. Я использую Traefik для этого. Чтобы связать службы Gitlab и Registry, мне нужно, чтобы Gitlab создал ключ на /var/opt/gitlab/gitlab-rails/etc/gitlab-registry.key
, но я могу видеть в журналах во время запуска, что это не происходит ... Я подозреваю, что я не установил все переменные среды, которые я нужно ??
docker -compose.yml
version: "3.7"
services:
traefik:
container_name: traefik
image: "traefik:v2.2.0"
hostname: "traefik.${WEBSITE}"
restart: always
ports:
- "443:443"
- "5000:5000"
command: --configFile=/config/traefik.toml
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./traefik:/config:ro"
- "/certs/letsencrypt/acme.json:/letsencrypt/acme.json"
gitlab:
container_name: gitlab
image: gitlab/gitlab-ce:latest
hostname: "git.${WEBSITE}"
restart: always
depends_on:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.git.tls=true"
- "traefik.http.routers.git.tls.certresolver=letsencrypt"
- "traefik.http.routers.git.entrypoints=web"
- "traefik.http.routers.git.rule=host(`git.${WEBSITE}`)"
- "traefik.http.routers.git.service=git"
- "traefik.http.services.git.loadbalancer.server.port=80"
ports:
- "22:22"
environment:
gitlab_omnibus_config: |
gitlab_rails['gitlab_shell_ssh_port'] = 22
external_url "https://git.${WEBSITE}"
nginx['listen_port'] = 80
nginx['listen_https'] = false
nginx['http2_enabled'] = true
nginx['proxy_set_headers'] = {
"host" => "$$http_host",
"x-real-ip" => "$$remote_addr",
"x-forwarded-for" => "$$proxy_add_x_forwarded_for",
"x-forwarded-proto" => "https",
"x-forwarded-ssl" => "on"
}
# Registry settings
registry['enable'] = false
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "registry.${WEBSITE}"
gitlab_rails['registry_port'] = "5000"
gitlab_rails['registry_path'] = "/var/opt/gitlab/gitlab-rails/shared/registry"
gitlab_rails['registry_key'] = "/var/opt/gitlab/gitlab-rails/etc/certificate.key"
gitlab_rails['registry_api_url'] = "https://registry.${WEBSITE}:5000"
gitlab_rails['registry_issuer'] = "gitlab-issuer"
registry:
container_name: registry
image: registry:2.7
hostname: "registry.${WEBSITE}"
restart: always
depends_on:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry.tls=true"
- "traefik.http.routers.registry.tls.certresolver=letsencrypt"
- "traefik.http.routers.registry.entrypoints=registry"
- "traefik.http.routers.registry.rule=Host(`registry.${WEBSITE}`)"
volumes:
- "/data/registry:/registry"
- "/certs:/certs"
environment:
REGISTRY_LOG_LEVEL: debug
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /registry
REGISTRY_STORAGE_DELETE_ENABLED: 'true'
# REGISTRY_AUTH_TOKEN_REALM: "https://git.${WEBSITE}/jwt/auth" # <--- requires gitlab-registry.key
# REGISTRY_AUTH_TOKEN_SERVICE: container_registry # <--- requires gitlab-registry.key
# REGISTRY_AUTH_TOKEN_ISSUER: gitlab-issuer # <--- requires gitlab-registry.key
# REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE: /certs/gitlab-registry.crt # <--- requires gitlab-registry.key
traefik / traefik.toml
[entryPoints]
[entryPoints.web]
address = ":443"
[entryPoints.registry]
address = ":5000"
[providers]
[providers.docker]
exposedByDefault = false
[certificatesResolvers]
[certificatesResolvers.letsencrypt.acme]
email = "noreply@example.com"
caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"
storage = "/letsencrypt/acme.json"
[certificatesResolvers.letsencrypt.acme.tlsChallenge]
У меня есть переменная окружения, ВЕБ-САЙТ . После запуска этого Docker контейнера, используя docker-compose up -d
, я могу получить доступ к Gitlab штраф в https://git. [ВЕБ-САЙТ] . Также я могу получить доступ к каталогу контейнеров, используя curl -k -X GET https://registry.[WEBSITE]:5000/v2/_catalog
(если я не закомментирую блок переменных среды REGISTRY_AUTH).
Я могу видеть часть в журналах запуска Gitlab, где пропускается создание ключа, но не могу понять почему ... есть идеи?
Журналы запуска (можно просмотреть, используя sudo docker logs -f gitlab
):
...
...
* storage_directory[/var/opt/gitlab/backups] action create
* ruby_block[directory resource: /var/opt/gitlab/backups] action run (skipped due to not_if)
(up to date)
* directory[/var/opt/gitlab/gitlab-rails] action create (up to date)
* directory[/var/opt/gitlab/gitlab-ci] action create (up to date)
* file[/var/opt/gitlab/gitlab-rails/etc/gitlab-registry.key] action create (skipped due to only_if)
* template[/opt/gitlab/etc/gitlab-rails/gitlab-rails-rc] action create
- create new file /opt/gitlab/etc/gitlab-rails/gitlab-rails-rc
- update content in file /opt/gitlab/etc/gitlab-rails/gitlab-rails-rc from none to 7b16c8
--- /opt/gitlab/etc/gitlab-rails/gitlab-rails-rc 2020-04-21 02:11:21.628290241 +0000
+++ /opt/gitlab/etc/gitlab-rails/.chef-gitlab-rails-rc20200421-31-y0rbxu 2020-04-21 02:11:21.628290241 +0000
@@ -1 +1,6 @@
+gitlab_user='git'
+gitlab_group='git'
+registry_dir=''
+registry_user='registry'
+registry_group='registry'
* file[/opt/gitlab/embedded/service/gitlab-rails/.secret] action delete (up to date)
* file[/var/opt/gitlab/gitlab-rails/etc/secret] action delete (up to date)
...
...