zaLinux.ru

Как настроить собственный сервер Git


Если вы хотите настроить систему управления версиями для проекта, но предпочитаете не размещать его в сервисе, таком как GitHub, вы можете запустить свой собственный сервер git на VPS, чтобы хранить свой код и действовать как главный репозиторий для всех соавторов.

Зачем запускать собственный сервер?

С учётом того, сколько существует бесплатных поставщиков для размещения Git, таких как GitHub, GitLab и Bitbucket, нет смысла делать это самостоятельно. Но есть несколько ситуаций, когда это действительно нужно.

Смотрите также: Лучшие альтернативы GitHub

Во-первых, запуск собственного сервера гораздо более конфиденциальный, особенно если вы работаете над кодом, который не хотите хранить в чужом «облаке». Нельзя сказать, что такие провайдеры, как GitLab, небезопасны, но размещение всего на собственном сервере может дать некоторым людям больше спокойствия.

Кроме того, если вы используете стороннюю службу, существуют ограничения на размер файла, которые могут быть неидеальными. GitHub не поддерживает файлы размером более 100 МБ, что может стать серьёзной проблемой для проектов с большими двоичными файлами. Использование собственного сервера снимает этот предел, если вы можете заплатить за больше места на жёстком диске.

Каким бы ни был ваш случай использования, вы, вероятно, сможете получить большей функций, чем в git без платной подписки. GitLab Community Edition — это бесплатная версия с открытым исходным кодом, которую легко установить на вашем собственном сервере. Это даёт вам все преимущества самостоятельного размещения, а также очень приятный веб-интерфейс и многочисленные инструменты CI/CD. Мы настоятельно рекомендуем вам использовать GitLab, если у вас есть свободное место на сервере. Для него требуется около 3 ГБ ОЗУ. Вы можете прочитать наше руководство по его установке и настройке, чтобы узнать больше.

Но если вам не нужны все навороты и вы просто хотите запустить простой git remote, то продолжайте читать это руководство.

Смотрите также: Как использовать git с несколькими удалёнными репозиториями

git remote — это просто чей-то ещё репозиторий

Первое, что следует отметить в отношении git, это то, что размещение сервера на самом деле не очень сложно. Git использует модель распределенного контроля версий; ваш локальный клон репозитория вообще не подключается ко всем вашим коллегам, но он подключается к «удалённому», обычно на внешнем центральном сервере или службе. Когда вы push (отправляете изменения) и pull (скачиваете изменения), вы вносите изменения в официальную главную копию remote. Когда ваши коллеги получают данные с remote, они скачивают ваши commit’ы.


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

Итак, всё, что представляет собой сервер git, – это просто обычный репозиторий, который настроен как главная копия и открыт для Интернета. Настроить на удивление просто. Во-первых, нам нужно создать нового пользователя. Git использует SSH для аутентификации и шифрования всего трафика между серверами и клиентами, поэтому нам понадобится пользователь службы для управления репозиторием.

sudo useradd git

Затем переключитесь на пользователя git для остальной части настройки:

su git

Вам нужно будет добавить свои SSH-ключи в файл authorized_keys пользователя git:

nano ~/.ssh/authorized_keys

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

В любом случае, чтобы создать реальный репозиторий, просто запустите git init в домашнем каталоге пользователя git:

git init --bare repository.git

Здесь необходим параметр --bare. Обычно, когда вы клонируете репозиторий, git хранит все файлы, которые он использует для управления версиями, в скрытой папке .git, а также сохраняет пригодную для использования версию там, где находится ваш текущий извлечённый HEAD. Обычно это делает вашу папку репо примерно вдвое больше, чем она была бы без git, хотя она может быть ещё больше, если у вас есть большие двоичные файлы и много изменений с течением времени.

Bare репозиторий — это просто репозиторий без используемых версий файлов, извлечённых в настоящий момент. Вместо этого папка репозитория — это просто содержимое папки .git. Это экономит место для хранения и настраивает репозиторий как главный сервер. Поскольку нет локального контента, не будет конфликтов с веткой HEAD. Принято к названию голых репозиториев добавлять расширение файла .git, но это не обязательно.

Это всё, что требуется на стороне сервера. Со своего локального компьютера вам нужно будет клонировать репо или добавить новый remote:

git remote add origin git@example.com:repository.git

URL-адрес начинается с git@, потому что он подключается через SSH как пользователь git.


example.com — это адрес вашего сервера, который можно указать как имя хоста или IP

:repository.git в конце на самом деле является именем пути, а не просто идентификатором. Путь указывается относительно домашнего каталога пользователя git, поэтому, если вы разместили репозиторий в другом месте, то вам нужно указать абсолютный путь.

После того, как вы подключили локальное репо, у вас должен быть полный доступ для push и pull в обычном режиме. Имейте в виду, что git по умолчанию не имеет встроенной системы разрешений, поэтому ничто не мешает любому, у кого есть доступ к пользователю git, иметь полный контроль над вашим главным репозиторием.


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *