Usando o gitlab atrás do proxy do Apache, todos os URLs gerados estão errados

4

Eu configurei o Gitlab no Ubuntu 12.04 usando o pacote padrão do link

{editar para esclarecer}

Eu configurei o Apache para fazer proxy e executar o servidor nginx no pacote instalado na porta 8888 (ou assim pensei).

Como eu já tinha o Apache instalado, tenho que executar o nginx no localhost: 8888. O problema é que todas as imagens (como avatares) agora são servidas a partir de http://localhost:8888 , e todas as urnas de verificação que o Gitlab dá também são localhost - em vez de usar o meu nome de domínio.

Se eu alterar /etc/gitlab/gitlab.rb para usar esse URL, o Gitlab deixará de funcionar e fornecerá um 503.

Alguma idéia de como eu posso dizer ao Gitlab que URL apresentar ao mundo, mesmo que esteja realmente em execução no host local?

/etc/gitlab/gitlab.rb se parece com:

# Change the external_url to the address your users will type in their browser
external_url 'http://my.local.domain'
redis['port'] = 6379
postgresql['port'] = 2345
unicorn['port'] = 3456

e /opt/gitlab/embedded/conf/nginx.conf se parecem com:

server {
        listen       localhost:8888;
        server_name  my.local.domain;

[Atualização]

Parece que o nginx ainda está escutando na porta errada se eu não especificar localhost: 8888 como external_url. Eu encontrei isso em /var/log/gitlab/nginx/error.log

2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: still could not bind()

A configuração do Apache se parece com:

<VirtualHost *:80>
  ServerName my.local.domain

  ServerSignature Off
  ProxyPreserveHost On

  AllowEncodedSlashes NoDecode

  <Location />
    ProxyPass http://localhost:8888/ 
    ProxyPassReverse http://127.0.0.1:8888
    ProxyPassReverse http://my.local.domain
  </Location>
</VirtualHost>

O que parece representar tudo de volta ok, se o Gitlab escuta em localhost: 8888 - Eu só preciso que o Gitlab comece a exibir a URL correta, em vez de localhost: 8888.

    
por Hippyjim 19.08.2014 / 10:30

7 respostas

5

De acordo com a documentação em o github do Gitlab :

# Copy the example GitLab config
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

# Make sure to change "localhost" to the fully-qualified domain name of your
# host serving GitLab where necessary

Certifique-se também de que o Apache esteja enviando os cabeçalhos de proxy apropriados.

Nesse caso, a configuração do nginx é irrelevante, já que você está usando o Apache para proxy. Basta removê-lo ou desligá-lo.

    
por 19.08.2014 / 16:53
15

Estou muito triste por ninguém ter uma resposta clara para isso. É um remendo entre vários outros posts e algumas edições confiantes. Eu coloquei tudo em um lugar aqui para vocês pessoal, para te salvar as duas horas que acabei de desperdiçar.

Minha configuração é o Apache, que hospeda vários sites e hosts HTTPS, que configurei como um proxy reverso apontando para o gitlab. Por isso, quero que as URLs que o gitlab gera nos e-mails aponte para o URL seguro do apache. Então, para fazer isso ...

1: Edite seu arquivo gitlab.rb ...

No CentOS 7, acesse /opt/gitlab/embedded/cookbooks/gitlab/libraries/gitlab.rb

e mude a linha ...

external_url nil

para

external_url "http://<yoururl>:81"

2: Execute o gitlab-ctl reconfigure

Seu nginx agora será hospedado na porta 81, MAS seus URLs que serão enviados por email serão parecidos com "http: //: 81" e não com seu proxy apache seguro. Então, para fazer isso ...

3: Edite o arquivo de configuração do rails gerado para o gitlab

No CentOS 7 isso está localizado em /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

e mude a linha ...

## Web server settings (note: host is the FQDN, do not include http://)
host: <yoururl>
port: 81
https: false

para

## Web server settings (note: host is the FQDN, do not include http://)
host: <yoururl>
port: 443
https: true

4: Reinicie o gitlab com o gitlab-ctl restart

Em seguida, apenas certifique-se de que o nginx seja iniciado corretamente, se necessário, gitlab-ctl tail nginx e veja quais erros ele gera.

AVISO: Se você executar novamente a reconfiguração do gitlab-ctl, será necessário fazer essa edição novamente. Eu pesquisei alto e baixo, e não encontrei nenhuma maneira de fazer isso de uma forma que reconfigurasse os negócios com isso. É uma solicitação de recurso que alguém pode pedir ao gitlab para adicionar, deve ser bem pequena. Uma variável opcional "actual_url" que, quando definida, é usada para qualquer URL gerada.

5: Lucro! :)

    
por 22.09.2014 / 13:43
4

Eu finalmente segui esta documentação que consiste em desabilitar o nginx e permitir que seu proxy de instalação do apache gitlab, o que faz mais sentido para mim e de qualquer maneira eu tive problemas com alguns recursos ainda carregando de: 8081 ao tentar proxy através do proxy nginx

link

vi /etc/gitlab/gitlab.rb

Defina seu URL externo

external_url 'http://mygitlab.web.site/'

Alterar usuário e grupo www

web_server['username'] = 'www-data'
web_server['group'] = 'www-data'

Desativar nginx

nginx['enable'] = false

Definir porta para o servidor git (no final do arquivo)

gitlab_git_http_server['listen_network'] = "tcp"
gitlab_git_http_server['listen_addr'] = "localhost:8282"

Reconfigure o gitlab

gitlab-ctl reconfigure

Altere sua configuração de virtualhost

<VirtualHost *:80>
  ServerName git.domain.com
  DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

  ProxyPreserveHost On
  AllowEncodedSlashes Off

  <Location />
    Order deny,allow
    Allow from all
    ProxyPassReverse http://127.0.0.1:8080
    ProxyPassReverse http://git.domain.com/
  </Location>

  RewriteEngine on
  #Don't escape encoded characters in api requests
  RewriteCond %{REQUEST_URI} ^/api/v3/.*
  RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA,NE]

  #Forward all requests to gitlab-workhorse except existing files like error documents
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8282%{REQUEST_URI} [P,QSA]
</VirtualHost>

Reinicia o gitlab

gitlab-ctl restart
    
por 08.09.2016 / 20:38
2

Eu me deparei com esse problema também, embora não devido a um proxy Apache. Minha instalação era uma porta simples encaminhada de um computador host para uma máquina virtual. Essa solução deve funcionar para todos os métodos de encaminhamento e proxy de porta. As únicas coisas que podem mudar entre sistemas operacionais são a localização dos arquivos de configuração do Gitlab. Eu estou usando o Debian 7.8 com o Gitlab 7.8.4

Resposta curta :

Faça as seguintes alterações em /etc/gitlab/gitlab.rb :

  • Alterar external_url de 'http://gitlab.example.com/' para 'http://gitlab.example.com:8080'
  • Adicionar nginx['custom_gitlab_server_config'] = "listen *:80;"

Notas finais :  - O Nginx do Gitlab não pode ser executado em: 8080 na máquina "interna" (para o qual o proxy / porta encaminha aponta)

Longa resposta :

Isso inclui mais informações básicas sobre minha configuração e o processo de encontrar a solução

Minha configuração:

  • computer.local : o computador host

    • encaminha a porta 8080 para computer-vm.local:80
    • encaminha a porta 2222 para computer-vm.local:22
  • computer-vm.local : Uma máquina virtual Debian, onde o Gitlab e outros softwares estão instalados. Esta VM não usa rede em ponte, portanto, qualquer porta acessível a partir do exterior deve ser encaminhada a partir do computador host.

NOTA: eu corri sudo gitlab-ctl reconfigure após cada iteração de alteração de /etc/gitlab/gitlab.rb

Usando as instruções de instalação padrão encontradas na página de download , a instância do Gitlab estava acessível em computer.local:8080 . Eu continuei criando contas, mas o link de e-mail que foi enviado usou a URL http://computer-vm.local/users/confirmation?confirmation_token=... , que estava inacessível de qualquer computador, exceto da máquina host. A alteração de external_url em /etc/gitlab/gitlab.rb de http://computer-vm.local para http://computer.local:8080 tornou o Gitlab completamente inacessível. Navegar para http://computer-vm.local:8080 do host gerou um erro "502: o Gitlab não está respondendo". Após investigação, parece que o Unicorn estava tentando ouvir em localhost:8080 , então Nginx e Unicorn estavam lutando pelo mesmo porto, com Nginx vencendo a batalha mas deixando o Gitlab inútil. A alteração de external_url para http://computer.local:8081 resolveu o erro 502 com o Gitlab acessível em http://computer-vm.local:8081 . Mas isso é apenas um problema ...

Eu precisava que o Gitlab anunciasse seu URL como 'http://computer.local:8080' por causa do encaminhamento de porta, que eu não queria alterar. Então, external_url foi alterado de volta para http://computer.local:8080 . Procurando na documentação do Gitlab sobre as opções do Nginx aqui , há nenhuma menção sobre como alterar a porta Nginx sem alterar a URL externa completa do Gitlab (que era uma opção nas versões anteriores). No entanto, o Gitlab permite que o usuário passe uma opção arbitrária para o Nginx por meio da opção nginx['custom_gitlab_server_config'] . Adicionei o seguinte ao meu arquivo /etc/gitlab/gitlab.rb :

nginx['custom_gitlab_server_config'] = "listen *:80;"

Após reconfigurar o Gitlab, voila! Acessível a partir de http://computer.local:8080 e inclui o domínio correto ao enviar links de redefinição de senha e ao exibir git clone links.

Eu também tive que alterar gitlab_rails['gitlab_shell_ssh_port'] de 22 para 2222 devido à situação de encaminhamento de porta, mas você pode não precisar.

Meu% final/etc/gitlab/gitlab.rb:

external_url "computer.local:8080"
gitlab_rails['gitlab_shell_ssh_port'] = 2222
nginx['custom_gitlab_server_config'] = "listen *:80;"
    
por 19.03.2015 / 06:38
1

Eu tive o mesmo problema, mude

external_url 'http://my.local.domain'

para

external_url 'http://my.local.domain:8888'

e regenere a configuração do gitlab, isso consertará a configuração do nginx. O proxy do Apache deve corrigir os links para que o 8888 seja removido novamente.

espero que isso ajude, eu acabei removendo o gitlab do ambiente existente, criando um vm limpo para o gitlab, já que (na minha opinião) não funciona bem com as configurações existentes.

    
por 19.08.2014 / 17:02
0

Modo muito simples de alterar o número de porta padrão

run-gitlab-ctl stop

edite o arquivo em centos ou linux: - /var/opt/gitlab/nginx/conf/gitlab-http.conf

altere escutar *: 80; para o que você quer Ex: - 90

então

Não execute a reconfiguração do comando-gitlab-ctl

Se o gitlab-ctl reconfigurar, configure o gitlab por padrão e remova as alterações.

apenas run-gitlab-ctl start

    
por 23.04.2016 / 08:19
0

Para qualquer outra pessoa que encontre isso, suporte:

  • Executando o Nginx em uma porta diferente
  • Usando um URL relativo no GitLab

Dada esta configuração ProxyPass de amostra:

ProxyPass /gitlab http://localhost:81/gitlab
ProxyPassReverse /gitlab http://localhost:81/gitlab


Edite dois parâmetros no gitlab.rb e reconfigure. Etapas:

  1. Edite o /etc/gitlab/gitlab.rb.
    Mudança: external_url 'http://my.local.domain/gitlab'
    Para: external_url 'http://my.local.domain/'

  2. Editar o /etc/gitlab/gitlab.rb
    Alteração: # nginx['listen_port'] = nil
    Para: nginx['listen_port'] = 81

  3. Executar comando: gitlab-ctl reconfigure

Feito.

    
por 27.07.2016 / 15:23