Tenho um servidor com várias máquinas virtuais e uma delas é meu Proxy que direciona os domínios certos para a VM certa na porta certa.
- Eu usei o arquivo padrão docker-compose para criar gitlab-ce e gitlab-runner
- Redireciono por domínio no proxy para a porta 8080 na minha VM docker
Isso tudo funcionou bem e eu pude fazer login no meu navegador com https://gitlab.mydomain.de .
Agora o problema: todos os links para runners e os links para clones de repositórios começam com http://localhost
em vez de https://gitlab.mydomain.de
.
A opção GITLAB_OMNIBUS_CONFIG-> external_url
no arquivo docker-compose está contendo http://localhost, então mudei para https://gitlab.mydomain.de , parei e reiniciei os contêineres do docker
docker-compose down; docker-compose up
Mas desta vez só recebo um erro 502 Bad Gateway no navegador.
Esta é a minha configuração de proxy:
server {
listen 10.77.77.254:443 ssl;
listen [2a01:4f8:241:1d02:0:77:77:254]:443 ssl;
server_name gitlab.mydomain.de;
include snippets.d/ssl_generic;
ssl_certificate /etc/letsencrypt/live/gitlab.mydomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gitlab.mydomain.de/privkey.pem;
include snippets.d/standard;
location / {
include snippets.d/proxy_generic;
proxy_pass http://10.77.77.107:8080;
}
}
Este é o meu docker-compose.yml
:
version: '3.7'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'localhost'
container_name: gitlab-ce
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.mydomin.de'
ports:
- '8080:80'
- '8443:443'
volumes:
- '/var/docker/gitlab/config:/etc/gitlab'
- '/var/docker/gitlab/logs:/var/log/gitlab'
- '/var/docker/gitlab/data:/var/opt/gitlab'
networks:
- gitlab
gitlab-runner:
image: gitlab/gitlab-runner:alpine
container_name: gitlab-runner
restart: always
depends_on:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- '/var/docker/gitlab/gitlab-runner:/etc/gitlab-runner'
networks:
- gitlab
networks:
gitlab:
name: gitlab-network
Se eu mudar
external_url 'https://gitlab.mydomain.de'
voltar para http
external_url 'http://gitlab.mydomain.de'
então a configuração funciona novamente (mas com os URLs errados começando com apenas 'http://' agora na interface da web).
O problema parece estar https
no external_url.
Se eu alterar o proxy_pass para http://10.77.77.107:8433
onde a porta ssl é apresentada ao host no arquivo docker-compose, recebo um erro 400 Bad Request :
400 Bad Request The plain HTTP request was sent to HTTPS port
ATUALIZAÇÃO: Aqui eles dizem:
Por padrão, quando você especifica external_url, o Omnibus GitLab definirá alguns cabeçalhos de proxy NGINX que são considerados sensatos na maioria dos ambientes.
Por exemplo, o Omnibus GitLab definirá:
"X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on"
se você especificou o esquema https no external_url.
No entanto, se você tiver uma situação em que seu GitLab esteja em uma configuração mais complexa, como atrás de um proxy reverso, será necessário ajustar os cabeçalhos do proxy para evitar erros como A alteração desejada foi rejeitada ou Não é possível verificar a autenticidade do token CSRF Completou 422 Inprocessável.
Eu tentei substituir os cabeçalhos padrão. No arquivo docker-compose na seção omnibus, adicionei o X-Forwarded-Proto: http:
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.mydomain.de'
letsencrypt['enabled'] = false
nginx['listen_port'] = 80
nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "http", 'X-Forwarded-Ssl' => 'off' }
Mas isso também não ajudou
Como resolvo isso?
Não há necessidade de substituir os cabeçalhos padrão. No
docker-compose.yml
arquivo na seção GITLAB_OMNIBUS_CONFIG apenas adicionenginx['listen_https'] = false
:Isso desativará o SSL dentro do docker e seu reverse_proxy pode fazer a coisa SSL
consulte https://docs.gitlab.com/omnibus/settings/nginx.html#external-proxy-and-load-balancer-ssl-termination