Une registry auto-hébergée avec un reverse-proxy et du SSL, ça peut être compliqué !

Il existe plusieurs alternatives à la registry docker hub. Une registry auto-hébergée est d'une réelle utilité dans le déploiement d'insfrastructures à base de micro-services, pour des raisons de performance et de sécurité.

Docker met à disposition une image "registry" qui a pour inconvénient de devoir avoir accès aux certificats SSL pour activer le chiffrement documentation. Sur une infrastructure type micro-service, les certificats SSL sont généralement gérés par le reverse-proxy, pour notre cas Traefik avec le service Let's Encrypt.

Copy the .crt and .key files from the CA into the certs directory.

Dans cette situation, cela impose des procédures complexes, voire impactantes pour les autres services présents sur le serveur :

  • arrêt du proxy (donc plus d'accès aux autres micro-services)
  • lancement des commandes certbot...
  • placement des certifs dans le dossier "certificats" de la registry
  • rerun du proxy

Plutôt douloureux comme actions sur une production.

Après des centaines d'heures de recherches et tests, nous avons enfin trouvé une solution viable et fluide à l'utilisation avec service registry de Gitlab CE.

Nous vous partageons donc un docker compose de Gitlab avec les labels traefik 1.7 correspondant.

replacer example.com par votre domaine


version: "3.6"
services:
  front:
    image: 'gitlab/gitlab-ce:latest'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        nginx['listen_port'] = 80
        nginx['listen_https'] = false
        nginx['proxy_set_headers'] = {
                'X-Forwarded-Proto' => 'https',
                'X-Forwarded-Ssl' => 'on',
                'Host' => 'gitlab.example.com'
                }
        registry['enable'] = true
        registry_external_url 'https://registry.example.com'
        registry_nginx['listen_port'] = 80
        registry_nginx['listen_https'] = false
    networks:
      - traefik
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.git.frontend.rule=Host:gitlab.example.com"
        - "traefik.git.port=80"
        - "traefik.git.frontend.entryPoints=http,https"
        - "traefik.registry.frontend.rule=Host:registry.example.com"
        - "traefik.registry.port=80"
        - "traefik.registry.frontend.entryPoints=http,https"
        - "traefik.docker.network=traefik_default"
    ports:
      - '2222:22'

networks:
  traefik:
    external: true
    name: traefik_default

Dépot git :

pg3io/dockerregistry-gitlab-traefik
Docker compose pour gitlab + registry docker + traefik 1.7 - pg3io/dockerregistry-gitlab-traefik