Как настроить Git репозиторий (заметки гика)
Сегодня решил завести в блоге раздел "Заметки", в котором будут представлены не совсем готовые статьи. У меня очень часто бывают случаи, когда статью с подробными примерами оформлять некогда, но все же хочется накидать заметки, пока они еще не вылетели из головы. Именно поэтому и созрела идея сделать такой раздел. Раздел для лиц 18+ гиков, поэтому будет много непонятных слов для тех кто "в теме". Остальным придется гуглить или ждать выхода полноценных статей по мотивам заметок.
Начнем с заметки о настройке Git репозитория..
Дано
- Windows Server 2012 R2 (дальше Store-сервер), который стоит за шлюзом на CentOS (дальше Gate-сервер или site.com)
- Gate-сервер смотрит в WAN и откликается по домену site.com
- На Gate-сервере настроен dnsmasq для обслуживания доменов *.loc со всех компьютеров локальной сети
- На Store-сервере установлен Hyper-V
- В Hyper-V установлена виртуальная машина на CentOS, которая выступает в роли git репозитория (дальше Git-сервер или git.loc)
Задача
- Получить возможность работы с Git репозиториями расположенными на Git-сервере из WAN
Настройка Git сервера
- Добавляем новую виртуалку в Hyper-V
- Устанавливаем на неё CentOS, с именем хоста: git.loc
- Основную часть места на hdd монтируем в папку /git
- Заводим пользователя git:git
- В папке /git создаем папку repo (/git/repo)
- Устанавливаем у папки /git/repo владельца root:git и ставим ей права 0770
- Устанавливаем git и его зависимости:
123# yum install git - Смотрим какой у машины ip (#ip addr show), если в сети есть dhcp, получаем что-то типа: 192.168.101.106. Если нету dhcp настраиваем ip руками.
Настройка Gate-сервера
- Добавляем git.loc в dnsmasq, в /etc/dnsmasq.d/hosts.conf добавляем:
123address=/git/loc/192.168.101.106
и перезагружаем демона:
123# service dnsmasq restart - Добавляем проброс ssh порта из WAN Gate-сервера на Git-сервер. Пробрасываем site.com:9090 в 192.168.101.106:22
12345678910111213IPT="iptables"IP_WAN_1="222.111.222.111" # wan адрес site.comIP_LAN_2="192.168.101.1" # подсеть *.locIP_GIT_SRV="192.168.101.106" # адрес машины git.locPORT_GIT_SRV="22"$IPT -t nat -A PREROUTING -p tcp --dst $IP_WAN_1 --dport 9090 -j DNAT --to-destination $IP_GIT_SRV:$PORT_GIT_SRV$IPT -t nat -A POSTROUTING -p tcp --dst $IP_GIT_SRV --dport 9090 -j SNAT --to-source $IP_LAN_2$IPT -t nat -A OUTPUT -p tcp --dst $IP_WAN_1 --dport 9090 -j DNAT --to-destination $IP_GIT_SRV:$PORT_GIT_SRV - выполняем правила и при необходимости сохраняем их
Настройка git репозиториев на Git сервере
- Заходим на Git-сервер пользователем git
- Переходим в папку /git/repo
- Создаем папку проекта test (/git/repo/test) и заходим в неё
- Инициализируем новый голый (bare) репозиторий:
123# git init --bare --shared
Настройки для доступа из локальной сети
- Заходим в папку с проектом
- Инициализируем git хранилище:
123# git init - Добавляем репозиторий
123# git remote add origin ssh://git@git.loc/git/repo/test - Делаем первый коммит
123# git add * && git commit -m"Initial commit" && git push origin master - Подтверждаем импорт сертификата, вводим пароль от учетки git
Настройки для доступа из WAN:
Тут я опишу, импорт уже готового репозитория. Подразумеваю, что первоначальный коммит уже сделан, если нет делаем по аналогии с "Настройки для доступа из локальной сети", поменяется только настройки origin.
- Создаем пустую папку проекта
- Инициализируем git хранилище:
123# git init - Добавляем репозиторий
123# git remote add origin ssh://git@site.com:9090/git/repo/test - Выкачиваем изменения
123# git pull origin master - Подтверждаем импорт сертификата, вводим пароль от учетки git
Безопасность
При необходимости, в ограничиваем коннект только для разрешенных ip. Для этого в /etc/ssh/sshd_config прописываем следующее:
1 2 3 |
AllowUsers git@123.123.123.123 *@192.168.*.* |
Тут разрешаем доступ только для ip 123.123.123.123 (адрес клиента из wan) с логином git, а так же любому логину из локальной сети.
И не забываем перезагрузить sshd
1 2 3 |
# service sshd restart |
Так же не помешает добавить и настроить fail2ban для ограничения попыток логина через ssh.
Вот и всё.
P.S. Писал по памяти, возможно что-то упустил. Если это так, исправлю позже. Как всегда, все вопросы можно задать в комментариях.
Author: | Tags: /
| Rating:
Leave a Reply