자체 호스팅 gitlab + 레지스트리에 흰색 빈 페이지만 표시됩니다. 맞나요?

자체 호스팅 gitlab + 레지스트리에 흰색 빈 페이지만 표시됩니다. 맞나요?

저는 회사를 위해 Docker 환경에서 자체 호스팅 Gitlab을 운영하고 있으며 자체 Docker 이미지를 호스팅하고 싶기 때문에문서 읽기하지만 저는 할 수 없습니다 docker login registry.mycompany-domain.tld. 항상 얻습니다 unauthorized: HTTP Basic: Access denied . 갈 때면 https://registry.mycompany-domain.tld빈 페이지만 나타납니다. 이것이 맞는지는 모르겠지만 뭔가 제대로 작동하지 않는 것 같습니다.

방화벽 이유로 인해 Let's Encrypt 인증서를 자동으로 얻기 위해 gitlab 이미지를 활성화할 수 없었습니다(이 작업은 다른 호스트에서 수행해야 했습니다). 그래서 다음과 같이 설정했습니다.

  • docker-compose.yml파일이 있고 /opt/gitlab다음 포트를 노출합니다.
    • 127.0.0.1:1443:443
    • '22:22'
  • 도메인을 프록시로 /etc/nginx/sites-enabled/gitlab구성한 후gitlab.mycompany.tldhttps://localhost:1443
  • 기본 호스트의 nginx는 Let's encrypt 인증서를 사용하고, docker 컨테이너의 nginx는 자체 서명된 인증서를 사용합니다.

이 설정은 작동하며 아무런 문제 없이 SSH와 웹 인터페이스를 통해 Gitalb에 액세스할 수 있습니다.

나는 레지스트리에 대해 별도의 도메인을 사용하기로 결정했습니다. registry.mycompany-domain.tld그런 다음 docker-compose.yml파일의 obminus 섹션에서 레지스트리를 활성화했습니다. 이제 다음과 같습니다(자체 서명된 인증서가 위치함 /etc/CA).

--

# generated using example from https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose
# GITLAB_HOME=/opt/gitlab/container

web:
  image: 'gitlab/gitlab-ee:13.11.3-ee.0'
  restart: always
  hostname: gitlab.mycompany.tld
  shm_size: 256m
  environment:
    GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.mycompany.tld'
        letsencrypt['enable'] = false
        nginx['ssl_certificate'] = '/certificates/gitlab/gitlab.fullchain.crt'
        nginx['ssl_certificate_key'] = '/certificates/gitlab/gitlab.key'
        nginx['redirect_http_to_https'] = true
        nginx['real_ip_header'] = 'X-Forwarded-For'
        nginx['real_ip_recursive'] = 'on'
        mattermost_nginx['redirect_http_to_https'] = true

        registry_external_url 'https://registry.mycompany.tld'
        registry['enable'] = true
        registry_nginx['redirect_http_to_https'] = true
        registry_nginx['ssl_certificate'] = '/certificates/gitlab/gitlab.fullchain.crt'
        registry_nginx['ssl_certificate_key'] = '/certificates/gitlab/gitlab.key'
        gitlab_rails['registry_enabled'] = true
        gitlab_rails['registry_host'] = "registry.mycompany.tld"

        gitlab_rails['smtp_enable'] = true
        ...

  ports:
    - '127.0.0.1:1443:443'
    - '22:22'
  volumes:
    - '$GITLAB_HOME/config:/etc/gitlab'
    - '$GITLAB_HOME/logs:/var/log/gitlab'
    - '$GITLAB_HOME/data:/var/opt/gitlab'
    - '/etc/CA:/certificates'

/etc/nginx/sites-enabled/registry파일은 다음과 같습니다.

server {
    listen 80;
    server_name registry.mycompany.tld;
    access_log  /var/log/nginx/registry.mycompany.tld-access.log;
    error_log   /var/log/nginx/registry.mycompany.tld-error.log;

    location /.well-known {
        root /var/certbot/acme-challenges;
    }   

    location / { 
        return 301 https://$host$request_uri;
    }   

}


# see https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/nginx/registry-ssl
server {
    listen 443 http2;
    server_name registry.mycompany.tld;
    access_log  /var/log/nginx/ssl_registry.mycompany.tld-access.log;
    error_log   /var/log/nginx/ssl_registry.mycompany.tld-error.log;

    client_max_body_size 0;
    chunked_transfer_encoding on;

    ssl on; 

    ssl_certificate     /etc/letsencrypt/live/registry.mycompany.tld/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/registry.mycompany.tld/privkey.pem;
    ssl_prefer_server_ciphers on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_session_timeout  5m;

    location /{
        proxy_cache off;
        proxy_pass  https://localhost:1443;
        proxy_ssl_certificate         /etc/CA/gitlab/gitlab.fullchain.crt;
        proxy_ssl_certificate_key     /etc/CA/gitlab/gitlab.key;
        proxy_ssl_trusted_certificate /etc/CA/CA.crt;

        proxy_ssl_verify        on;
        proxy_ssl_session_reuse on;
        include /etc/nginx/proxy_params;
        proxy_read_timeout 3600;
    }
}

내가 보면 /opt/gitlab/container/logs/registry/current알 수 있어

2021-06-01_16:44:21.01934 time="2021-06-01T16:44:21Z" level=warning msg="error authorizing context: authorization token required" correlation_id=xxxx go_version=go1.15.8 root_repo=
2021-06-01_16:44:21.01966 {"content_type":"application/json","correlation_id":"xxxx","duration_ms":2,"host":"registry.mycompany.tld","level":"info","method":"GET","msg":"access","proto":"HTTP/1.1","referrer":"","remote_addr":"127.0.0.1:56368","remote_ip":"xxxx","status":401,"system":"http","time":"2021-06-01T16:44:21Z","ttfb_ms":2,"uri":"/v2/","user_agent":"Docker-Client/20.10.0-dev (linux)","written_bytes":87}

나는 이것이 무엇을 의미하는지 정말로 이해하지 못한다. Gitlab docker 컨테이너는 자동으로 파일( /opt/gitlab/container/data/registry/config.yml)을 생성하기 때문에 어떻게 해야할지 잘 모르겠습니다.

내가 여기서 무엇을 놓치고 있는 걸까요?

관련 정보