私は会社のために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.tld
https://localhost:1443
- プライマリホストのnginxはLet's encrypt証明書を使用し、dockerコンテナのnginxは自己署名証明書を使用します。
この設定は機能し、問題なくSSHとWebインターフェイスを介して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
)を生成するので、どうすればいいのかわかりません。
私がここで何を見逃しているのでしょうか?