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

Как предоставить внешний доступ только к проектам Git (клонирование / извлечение / отправка) внутреннего развертывания GitLab

Мы создали GitLab сервер (GitLab 7.0 Community Edition).

Он запущен и работает, и наши коллеги могут использовать его в локальной сети (IP-адрес и хост видны только из локальной сети).

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

Сервер GitLab останется в локальной сети. Но мы можем настроить сервер в нашей демилитаризованной зоне, который может использовать обратный прокси-сервер (или некоторые другие альтернативы) для сервера GitLab. Однако мы хотели бы, чтобы через HTTPS были доступны только URL-адреса ".git" (чтобы не предоставлять доступ к GitLab WUI (веб-интерфейс пользователя)).

Как мы можем настроить «обратный прокси» в демилитаризованной зоне, чтобы предоставить доступ внешним пользователям (в Интернете) к нашим внутренним репозиториям Git, размещенным на GitLab?

Пожелания:

Примечание: у нас уже есть сервер в нашей DMZ с запущенным NGINX. Если бы мы могли использовать этот «программный стек» для обратного проксирования, это было бы здорово.

Примечание 2: за этот вопрос уже назначена награда в размере 100, срок действия которой истек, и баллы были потеряны. Если я получу ответ, который решит мою проблему, я открою награду и награжу ею ответ.

Вы пробовали очевидное наивное решение?

server {

 [...ssl and servername stuff...]  

 location / {
    # fake the hostname to the hostname that gitlab expects
    #
    proxy_set_header Host hostname-for-gitlabhost;             
    proxy_pass          https://internal-gitlab-instance;
    proxy_read_timeout  90;
 }  
}

Кроме того, вы можете установить местоположение так, чтобы разрешить только

https: //...../*.git
URLs

Это должно работать:

Вместо того

location /
above, something like:

location ~ ^/(.*\.git) {
   proxy_set_header Host hostname-for-gitlabhost;             
   proxy_pass          https://internal-gitlab-instance/$1;
   proxy_read_timeout  90;
}

Это захватывает запрос-uri и добавляет его к вызову прокси с указанием местоположения.

Я не совсем уверен, работает ли это, просто набрал его с макушки.