Стабильно
Настройка GitLab за BusinessProxy App Gateway
Пошаговая настройка самостоятельного GitLab через BusinessProxy без прямой публикации сервера GitLab в интернет.
Шаги
Выполняйте по порядку.
- 01Выбрать один канонический доменРедиректы, cookies, статика и WebSocket GitLab должны работать через один и тот же публичный хост.
- 02Подготовить внутренний GitLabПубличный TLS завершает BusinessProxy, а GitLab внутри частной сети слушает обычный HTTP.
- 03Создать внутреннее приложение BusinessProxyОпубликуйте GitLab через коннектор и привяжите пользовательский домен, совпадающий с external_url GitLab.
- 04Проверить редиректы, статику и WebSocketКорректная настройка отдаёт страницу входа и загружает CSS, JavaScript и live-endpoints с того же публичного домена.
- 05Разобрать типовые ошибки502, зависшая статика, циклические редиректы и ошибки CSRF обычно указывают на несовпадение домена, схемы или TLS внутреннего сервера.
Справочник
Детали реализации для настройки и проверки.
- Не оставляйте внутренний GitLab напрямую доступным из интернета.
- Используйте один постоянный пользовательский домен, например gitlab.example.com, а не временный системный alias.
- Запустите коннектор BusinessProxy там, где он достигает HTTP-адрес GitLab.
- Рекомендуемый вид: https://gitlab.example.com.
- Не открывайте один GitLab через несколько публичных alias-адресов; cookies и редиректы могут стать непредсказуемыми.
- Создайте DNS-запись, которую показывает мастер пользовательского домена BusinessProxy, и дождитесь активного сертификата.
external_url 'https://gitlab.example.com'
nginx['listen_port'] = 80
nginx['listen_https'] = false- После изменения /etc/gitlab/gitlab.rb выполните sudo gitlab-ctl reconfigure.
- Если вы намеренно оставляете HTTPS на внутреннем GitLab, используйте сертификат, которому доверяет хост коннектора, либо отключайте проверку TLS внутреннего сервера только для этого приложения и только понимая риск.
curl -I http://gitlab.internal/users/sign_in
curl -I -H "Host: gitlab.example.com" http://gitlab.internal/users/sign_in- Ответ должен быть HTTP 200 или штатным редиректом GitLab, а не TLS-ошибкой или таймаутом подключения.
- Если GitLab редиректит на другой хост, сначала исправьте external_url.
- Публичный пользовательский домен: gitlab.example.com.
- Upstream URL: http://gitlab.internal или другой внутренний HTTP-адрес, доступный коннектору.
- Переписывание редиректов и cookie-доменов обычно должно оставаться включённым, если поддержка не попросила иначе.
- Verify upstream TLS можно не использовать, если upstream — HTTP. Для HTTPS upstream этот переключатель управляет проверкой сертификата, но не исправляет генерацию URL внутри GitLab.
- Ожидаемый URL в браузере: https://gitlab.example.com/users/sign_in.
- В DevTools Network статические файлы не должны бесконечно висеть в состоянии pending.
- Если GitLab открывается, но затем редиректит на другой хост, исправьте external_url и повторно примените конфигурацию GitLab.
- Сначала используйте диагностику внутреннего приложения; она проверяет путь от коннектора до upstream.
- Отключение Verify upstream TLS помогает только при недоверенном сертификате upstream. Оно не исправляет неправильный external_url или циклический редирект.
- external_url должен быть https://gitlab.example.com, а не внутренний хост и не временный системный alias BusinessProxy.
- Если TLS завершает BusinessProxy, nginx listen_https обычно должен быть false.
- После изменения публичного URL GitLab очистите кэш браузера или состояние service worker.
- Не смешивайте gitlab.example.com и системный alias *.business-proxy.com в одной браузерной сессии.
- После изменения external_url выйдите и удалите старые cookies GitLab для предыдущего хоста.
- При первом включении проверьте вход через веб, просмотр проектов, репозиториев, merge requests, artifacts и WebSocket/live-поведение интерфейса.
- Если пользователям нужен Git over SSH, проектируйте это отдельно. Эта инструкция описывает веб-интерфейс GitLab.
- Оставьте прямой административный путь восстановления в ограниченной частной сети для обслуживания.