Назад | Перейти на главную страницу

Используя gitlab за прокси-сервером Apache, все сгенерированные URL-адреса неверны

Я установил Gitlab на Ubuntu 12.04, используя пакет по умолчанию из https://about.gitlab.com/downloads/

{редактировать, чтобы уточнить}

Я настроил Apache для прокси и запустил сервер nginx, пакет, установленный на порт 8888 (по крайней мере, я так думал).

Поскольку у меня уже был установлен Apache, мне нужно запустить nginx на localhost: 8888. Проблема в том, что все изображения (например, аватары) теперь обслуживаются из http://localhost:8888, и все URL-адреса оформления заказа, которые дает Gitlab, также являются localhost - вместо использования моего доменного имени.

Если я изменю /etc/gitlab/gitlab.rb для использования этого URL-адреса Gitlab перестанет работать и выдаст ошибку 503.

Есть идеи, как я могу сказать Gitlab, какой URL-адрес представить миру, даже если он действительно работает на localhost?

/etc/gitlab/gitlab.rb выглядит как:

# 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

и /opt/gitlab/embedded/conf/nginx.conf выглядит как:

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

[Обновить]

Похоже, что nginx все еще прослушивает неправильный порт, если я не укажу localhost: 8888 в качестве external_url. Я нашел это в /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()

Настройка Apache выглядит так:

<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>

Кажется, что все возвращается в норму, если Gitlab слушает localhost: 8888 - мне просто нужно, чтобы Gitlab начал отображать правильный URL-адрес вместо localhost: 8888.

Мне очень грустно, что ни у кого нет четкого ответа на этот вопрос, это натянуто между множеством других сообщений и некоторым хитрым редактированием конфига. Я собрал все это здесь для вас, ребята, чтобы сэкономить вам те два часа, которые я только что потратил.

Моя установка: у меня есть apache, на котором размещено множество сайтов и хостов HTTPS, который я настроил как обратный прокси, указывающий на gitlab. Поэтому я хочу, чтобы мой URL-адрес, который gitlab генерирует в электронных письмах, указывал на безопасный URL-адрес apache. Итак, чтобы сделать это ...

1: Отредактируйте файл gitlab.rb ...

В CentOS 7 это /opt/gitlab/embedded/cookbooks/gitlab/libraries/gitlab.rb.

и измените строку ...

external_url nil

к

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

2: Запустите gitlab-ctl reconfigure

Теперь ваш nginx будет размещаться на порту 81, НО ваши URL-адреса, отправленные по электронной почте, будут выглядеть как «http: //: 81», а не ваш защищенный прокси-сервер apache. Итак, чтобы сделать это ...

3: Отредактируйте сгенерированный файл конфигурации rails для gitlab

В CentOS 7 это находится по адресу /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

и измените строку ...

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

к

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

4: перезапустите gitlab с помощью gitlab-ctl restart

Тогда просто убедитесь, что nginx запускается правильно, если нужно, gitlab-ctl tail nginx и посмотрите, какие ошибки он выдает.

ВНИМАНИЕ: если вы снова запустите gitlab-ctl reconfigure, вам нужно будет снова внести это изменение. Я искал все выше и ниже и не нашел способа сделать это таким образом, чтобы переконфигурировать с этим хорошо. Это запрос функции, который кто-то может попросить добавить в gitlab, он должен быть довольно незначительным. Необязательная переменная «actual_url», которая при установке используется для любых сгенерированных URL-адресов.

5: Прибыль! :)

Согласно документации на Gitlab's github:

# 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

Также убедитесь, что Apache отправляет соответствующие заголовки прокси.

В этом случае конфигурация nginx не имеет значения, поскольку вы используете Apache для прокси. Просто удалите его или выключите.

Я, наконец, выполнил эту документацию, которая состоит из отключения nginx и позволила вашему прокси-серверу установки apache gitlab, что имеет для меня больше смысла, и в любом случае у меня были проблемы с некоторыми активами, которые все еще загружаются с: 8081 при попытке прокси через прокси-сервер nginx

http://ryansechrest.com/2015/08/use-apache-instead-of-built-in-nginx-in-gitlab-ce/

vi /etc/gitlab/gitlab.rb

Установите внешний URL

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

Изменить пользователя и группу www

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

Отключить nginx

nginx['enable'] = false

Установить порт для сервера git (в конце файла)

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

Перенастроить gitlab

gitlab-ctl reconfigure

Измените конфигурацию вашего виртуального хоста

<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>

Перезапускает gitlab

gitlab-ctl restart

Я тоже столкнулся с этой проблемой, но не из-за прокси-сервера Apache. Моя установка представляла собой простой порт для переадресации с хост-компьютера на виртуальную машину. Это решение должно работать для всех методов переадресации портов и проксирования. Единственное, что может измениться между ОС, - это расположение файлов конфигурации Gitlab. Я использую Debian 7.8 с Gitlab 7.8.4

Короткий ответ:

Внесите следующие изменения в /etc/gitlab/gitlab.rb:

  • + Изменить external_url из 'http://gitlab.example.com/' к 'http://gitlab.example.com:8080'
  • Добавить nginx['custom_gitlab_server_config'] = "listen *:80;"

Заключительные примечания: - Nginx от Gitlab не может работать на: 8080 на "внутренней" машине (на что указывает прокси / порт)


Длинный ответ:

Сюда входит дополнительная справочная информация о моей настройке и процессе поиска решения.

Моя установка:

  • computer.local: Главный компьютер

    • Перенаправляет порт 8080 на computer-vm.local:80
    • Перенаправляет порт 2222 на computer-vm.local:22
  • computer-vm.local: Виртуальная машина Debian, на которой установлен Gitlab и другое программное обеспечение. Эта виртуальная машина не использует мостовую сеть, поэтому любой порт, доступный извне, должен перенаправляться с главного компьютера.

ПРИМЕЧАНИЕ: я побежал sudo gitlab-ctl reconfigure после каждой итерации изменения /etc/gitlab/gitlab.rb

Используя стандартные инструкции по установке, которые можно найти на их страница загрузки, экземпляр Gitlab был доступен по адресу computer.local:8080. Я приступил к созданию учетных записей, но отправленная по электронной почте ссылка использовала URL http://computer-vm.local/users/confirmation?confirmation_token=..., который был недоступен с любого компьютера, кроме главного компьютера. Изменение external_url в /etc/gitlab/gitlab.rb из http://computer-vm.local к http://computer.local:8080 сделали Gitlab полностью недоступным. Переход к http://computer-vm.local:8080 от хоста выдала ошибку «502: Gitlab не отвечает». После расследования выяснилось, что Единорог пытался подслушать localhost:8080, поэтому Nginx и Unicorn боролись за один и тот же порт, причем Nginx выигрывал битву, но оставил Gitlab бесполезным. Изменение external_url к http://computer.local:8081 Устранена ошибка 502 с Gitlab, доступным по адресу http://computer-vm.local:8081. Но это только одна проблема ...

Мне нужно было, чтобы Gitlab рекламировал свой URL как 'http://computer.local:8080' из-за форварда порта, который я не хотел менять. Так, external_url был изменен обратно на http://computer.local:8080. Посмотрите в документации Gitlab о параметрах Nginx Вот, нет упоминания о том, как изменить порт Nginx без изменения полного внешнего URL-адреса Gitlab (что было опцией в предыдущих версиях). Однако Gitlab позволяет пользователю передавать произвольную опцию Nginx через nginx['custom_gitlab_server_config'] вариант. Я добавил в свой /etc/gitlab/gitlab.rb файл:

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

После перенастройки Gitlab, вуаля! Доступен из http://computer.local:8080, и включает правильный домен при отправке ссылок для сброса пароля и при отображении git clone ссылки.

Мне также пришлось изменить gitlab_rails['gitlab_shell_ssh_port'] из 22 к 2222 из-за ситуации с переадресацией портов, но, возможно, вам и не придется.

Мой последний /etc/gitlab/gitlab.rb:

external_url "computer.local:8080"
gitlab_rails['gitlab_shell_ssh_port'] = 2222
nginx['custom_gitlab_server_config'] = "listen *:80;"

У меня была такая же проблема, смени

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

к

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

и повторно создайте конфигурацию gitlab, это исправит конфигурацию nginx. Прокси-сервер Apache должен исправить ссылки, чтобы снова удалить 8888.

Надеюсь, это поможет, в итоге я удалил gitlab из существующей среды, собираясь развернуть чистую виртуальную машину для gitlab, поскольку она (на мой взгляд) не очень хорошо работает с существующими настройками.

Очень простой способ изменить номер порта по умолчанию

запустить- gitlab-ctl stop

отредактируйте файл в centos или linux: - /var/opt/gitlab/nginx/conf/gitlab-http.conf

изменить прослушивание *: 80; к чему вы хотите Пример: - 90

затем

Не запускайте команду - gitlab-ctl reconfigure

Если gitlab-ctl перенастроит его, он настроил gitlab по умолчанию и удалил изменения.

так что только запускаем - gitlab-ctl start

Для всех, кто обнаружит это, в поддержку:

  • Запуск Nginx на другом порту
  • Использование относительного URL в GitLab

Учитывая этот образец конфигурации ProxyPass:

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


Отредактируйте два параметра в gitlab.rb и переконфигурируйте. Шаги:

  1. Отредактируйте /etc/gitlab/gitlab.rb.
    Изменить: external_url 'http://my.local.domain/gitlab'
    Кому: external_url 'http://my.local.domain/'

  2. Отредактируйте /etc/gitlab/gitlab.rb
    Изменить: # nginx['listen_port'] = nil
    Кому: nginx['listen_port'] = 81

  3. Команда выполнения: gitlab-ctl reconfigure

Готово.