Link Search Menu Expand Document
10 Декабря 2020 г.

Git сервер в локальной сети

Содержание
  1. Место куда ставить операционную систему
  2. Установка операционной системы
  3. Настройка git сервера
  4. Настройка клиента
  5. Работа с тестовым репозиторием
  6. Итог

GIT сейчас является самой популярной системой контроля версий исходного кода.

Проектов накапливается много и они становятся разношерстными.

Работаем на разных машинах и в разных операционных системах, появляется потребность в централизованном хранилище. Оно позволяет не только хранить проекты, но и распространять.

Для этих целей существует отличный сервис как Github, но мы будем использовать собственный git сервер.

Настройка собственного решения позволит нам создавать репозитории без ограничений и в любых размерах и количествах.

Место куда ставить операционную систему

Это может быть отдельный компьютер в локальной сети, виртуальная машина или даже docker контейнер. У меня сервер будет крутиться на виртуальной машине VMware Workstation.

Установка операционной системы

В качестве операционной системы подойдет любой дистрибутив linux.

Я буду использовать debian 10. Скачать его можно с сервера яндекса, выбрав версию и тип процессора. В моем случае актуальная версия 10.7.0, процессор amd64. Далее минимальный образ /bt-cd/debian-10.7.0-amd64-netinst.iso.torrent.

При установке создайте локального пользователя git.

Итак: имеем установленную систему. Пришло время ее настроить.

Настройка git сервера

Подразумевается, что установлен чистый debian без лишнего софта.

Зайдем в систему под пользователем git.

В debian по умолчанию отсутствует команда sudo. Она нужна для того, чтобы иметь возможность повышать свои привилегии до суперпользователя, но сначала нужно им стать. Для этого установим необходимый пакет

su - # Обязательный - в конце
Пароль:
root@git:/home/git apt-get install sudo

Далее нужно разрешить нашему пользователю git выполнять команды от root, путем добавления пользователя в дополнительную группу sudo

usermod -aG sudo git

Чтобы проверить, что пользователь был добавлен в группу sudo нужно вновь войти в систему и выполнить команду

id
#uid=1000(git) gid=1000(git) группы=1000(git),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev)

Все в порядке! Теперь нужно обновить систему до последней версии

sudo apt-get update -y
sudo apt-get upgrade -y

Теперь ставим необходимые пакеты

sudo apt-get install openssh-server git vim

Наши репозитории будут храниться в домашнем каталоге пользователя git в /home/git

Теперь настроим доступ по ssh на сервер по ключу.

Для этого в каталоге /home/git создадим папку .ssh и файл authorized_keys с ключами авторизованных пользователей и назначим им нужные права

mkdir -p ~/.ssh && chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys && chmod 0600 ~/.ssh/authorized_keys

В качестве примера создадим тестовый репозиторий

git init --bare ~/test.git

На сервере должен быть статический ip адрес. Например такой 192.168.88.230.

На этом настройка git сервера закончена. Переходим к клиенту.

Настройка клиента

Под клиентом подразумевается пользователь на любой операционной системе, где установлен git и есть терминал.

Скачать и установить git можно с официального сайта https://git-scm.com

Для подключения к нашему серверу git нужно сгенерировать пары ключей у себя на машине в linux. Это делается так:

ssh-keygen -t rsa -b 4096 -C "email@text.ru"

# Закрытый и открытый ключ соответственно
#id_rsa_git_local
#id_rsa_git_local.pub

Если ключи уже были сгенерированы, то теперь публичный ключ нужно передать на сервер и занести в файл ~/.ssh/authorized_keys

Скопировать ключ на сервер и занести в файл ~/.ssh/authorized_keys можно командой

ssh-copy-id -i ~/.ssh/id_rsa_git_local.pub git@192.168.88.230

Если такой возможности нет, то вручную, просто вывести файл

cat ~/.ssh/id_rsa_git_local.pub

И скопировать его содержимое в файл ~/.ssh/authorized_keys на сервере.

Еще вариант с подключением к серверу по ssh

cat ~/.ssh/id_rsa_git_local.pub | ssh git@192.168.88.230 'cat >> ~/.ssh/authorized_keys'

При необходимости удалить ключ на сервере можно командой

sed -i '1d' ~/.ssh/authorized_keys

Где 1d номер строки удаления.

Работа с тестовым репозиторием

Работаем с нашим тестовым репозиторием test.git.

Предположим на машине конечного пользователя проект размещен здесь по такому пути /home/alex/test/, хотя это не важно.

Переходим в эту директорию и добавляем адрес внешнего репозитория в наш локальный репозиторий

git remote add origin git@192.168.88.230:test.git

Если нужно заменить адрес репозитория воспользуемся командой

git remote set-url origin git@192.168.88.230:test.git

Пишем код, делаем коммиты, создаем ветки и отправляем в наш гит в локальной сети

git push -u origin master

Если нужно развернуть уже созданный проект, то клонируем его

git clone git@192.168.88.230:test.git

Создать новый репозиторий на сервере можно таким образом, действуя от лица пользователя git:

ssh git@192.168.88.230 'git init --bare ~/repo_test.git'

Если все настроено правильно, должно работать без проблем.

Итог

Таким образом поднять свой сервер не составит особых проблем. Конечно, есть куда стремится путем совершенствования сервера.

Из очевидных плюсов:

  • Мы не ограничены при работе с git, любые плюшки гита нам доступны из коробки
  • Настраиваем сервер под себя.
  • Легко добавить и убрать нового пользователя, для ведения проектов, указав его публичный ключ в файле ~/.ssh/authorized_keys.
  • При желании можно разрешить доступ к вашему репозиторию из вне.

Возник вопрос или предложение пиши на почту alexsey_89@bk.ru или в Телеграмм канал

Дата публикации: 10 Декабря 2020 г.