Skip to content

gitolite

Stas Ukolov edited this page Oct 12, 2017 · 6 revisions

Хранилище git-репозиториев

Для хранения настроек клиентов Let's Encrypt и полученных сертификатов используются git-репозитории.

Для этого на ekb.ru было установлено ПО Gitolite для централизованного хранения копий всех репозиториев.

Сложности

Gitolite согласно общаться только по протоколу SSH, поэтому и администратору и каждой машине, где получаются сертификаты, необходимо иметь (создать командой ssh-keygen) свой собственный ключ.

Веб-интерфейса нет. Командной строки нет. Населена роботами Управление ведётся только путём изменения специального репозитория git@ekb.ru:gitolite-admin и никак иначе.

Фактически оно сводится к добавлению файлов keydir/*.pub для авторизации клиентов (как людей, так и роботов) и (редкому) изменению файла conf/gitolite.conf для назначения прав доступа.

Детали

Для работы gitolite создан специальный пользователь git и вся деятельность осуществляется в его домашнем каталоге ~git (/home/git). Делать там что-то ручками не рекомендуется, но посмотреть - можно.

Сами копии репозиториев хранятся в ~git/repositories.

Репозитории доступны извне (кому-то на чтение, кому-то на запись) по URL вида git@ekb.ru:path/to/repo

Административный репозиторий git@ekb.ru:gitolite-admin

Репозитории с сертификатами и т.п. имеют URL вида git@ekb.ru:letsencrypt/DOMAIN.ekb.ru

Клиент с именем DOMAIN.ekb.ru (и только он) имеет право записи в такой репозиторий.

Добавление клиента

Чтобы клиент мог хотя бы подключиться к gitolite, у него должен быть SSH ключ и этот ключ должен быть установлен (администратором) в gitolite.

Ключ генерируется командой ssh-keygen. Сохраняется он в файл ~/.ssh/id_rsa.pub. В файле ~/.ssh/id_rsa лежит секретный ключ и трогать его (а особенно уносить с этого места хоть куда-то) не рекомендуется.

Чтобы дать доступ клиенту к gitolite нужно:

  • Склонировать репозиторий git@ekb.ru:gitolite-admin
  • Скопировать id_rsa.pub клиента в папку keydir репозитория
  • Переименовать его по схеме keydir/DOMAIN.ekb.ru.pub
  • Добавить в репозиторий git add .
  • Зафиксировать git commit -m "Add DOMAIN.ekb.ru key"
  • Отправить на сервер gitolite git push

После этого клиент может отдать команду ssh git@ekb.ru и убедиться, что сервер согласен с ним общаться.

При первой попытке обратиться (неважно на чтение или на запись) именно этим клиентом к URL git@ekb.ru:letsencrypt/DOMAIN.ekb.ru этот репозиторий будет создан автоматически.

Мета-репозиторий

Поскольку каждый сервер имеет свой собственный репозиторий, следить за ними сложновато. Поэтому был создан объемлющий репозиторий git@ekb.ru:letsencrypt, в котором нет собственных данных, а есть только субмодули - все репозитории git@ekb.ru:letsencrypt/DOMAIN.ekb.ru.

Соотвественно, при появлении нового репозитория есть смысл добавить его в мета-репозиторий git submodule add.

Находясь в склонированном мета-репозитории относительно удобно проверять, не появились ли обновления во всех дочерних репозиториях командой git pull --recurse-submodules.

Права администратора

Администратор имеет право

  • Просматривать все репозитории gitolite
  • Добавлять ключи новых пользователей
  • Назначать права доступа пользователей к репозиториям
  • Делать пользователей администраторами