Сначала немного об окружении. Во-первых, предполагается наличие доступа на сервер по SSH, причем управление
доступом стандартное: через ~/.ssh/authorized_keys
. Во-вторых, в моем случае на сервере уже стоит nginx;
впрочем, он понадобится только для веб-отображения (см. скриншот справа), без которого вполне можно обойтись.
В-третьих, как обычно, я все это делаю под Gentoo.
Теперь, что мы получим в результате. Управление репозиториями только ручное — нужно зайти на сервер под рутом, создать реп и дать на него права. Аналогично с доступом. Веб-интерфейс предназначен только для просмотра, зато обеспечивает трансляцию обновлений в RSS. Если требуется что-то большее, следует обратить внимание на GitLab, например.
Итак, первое, что нам понадобится, само собой, это установить Git. Поскольку мы хотим веб-интерфейс, нужно
включить флаги cgi
и (опционально) highlight
.
Далее создадим пользователя, который будет владельцем наших репозиториев.
В группу users
его можно бы и не добавлять, это я по привычке. А вот установка в качестве шелла git-shell
осмысленная — теперь этот пользователь ничего, кроме собственно работы с репозиториями, сделать не сможет.
Тут, правда, есть небольшая проблема — создавать репозитории придется от рута, а затем менять владельца…
Добавляем ключи — для начала тех, кто имеет доступ к root-аккаунту.
Создадим собственно репозиторий.
Всё, с ним можно работать по SSH, используя адрес git@server:repo.git
. Если, конечно, ваш публичный ключ
внесен в авторизованные… Чтобы разрешить неавторизованный доступ на чтение (если он, конечно, нужен),
воспользуемся git-daemon
. Изменим в /etc/conf.d/git-daemon
в строке GITDAEMON_OPTS="--syslog --base-path=/var/git"
«/var/git
» на «/home/git
». Затем запустим демон.
Последнюю команду следует выполнить для каждого репозитория, который мы хотим сделать публичным. Остается убедиться,
что пользователь nobody
(git-демон по умолчанию использует его, можно поменять в конфиге) имеет доступ к репозиторию
на чтение и не имеет на запись (при стандартных настройках так и должно быть), и можно пользоваться — git clone git://server/repo.git
.
Теоретически при соответствующих правах доступ может быть и на запись — сам git-протокол ограничения не накладывает,
однако я с трудом себе представляю ситуацию, когда неавторизованный доступ на запись может быть полезен, разве что
в рамках локальной сети…
Другой способ дать всем доступ на чтение — по протоколу HTTP. Добавляем в /etc/nginx/nginx.conf
:
И (пере-)запускаем nginx. Для конкретного репозитория, правда, нам понадобится активировать перехватчик post-update
,
после чего сделать push с произвольными изменениями. Лучше всего его активировать сразу после создания репозитория,
примерно так:
Это даст возможность обращаться так: git clone http://git.server/repo.git
.
Вот мы и подошли к веб-представлению. Вариант для Apache можно увидеть в официальной документации, меня же интересует nginx. А тут проблема — nginx не поддерживает GCI, посему приходится устанавливать и использовать FastCGI-обертку. Пакет так и называется:
Затем запускаем его командой:
А в /etc/nginx/nginx.conf
добавим:
Осталось только настроить собственно GitWeb. Вот примерный /etc/gitweb.conf
:
Последняя строчка напоминает нам, что мы имеем дело с языком Perl…
Завершающий, уже декоративный штрих: прописываем репозиторию краткое описание —
файл description
, и имя владельца — переменная owner
секции [gitweb]
файла config
в каталоге репозитория.