Nginx + gitweb + gitosis
Продолжаю изучать nginx, и постепенно перевожу все сайты под него.
Продакшен сервер, потому используется только стабильная ветка Lenny.
Основной вопрос который будет рассмотрен это запуск gitweb под nginx. Nginx умеет только FastCGI. А gitweb это скрипт на перл использующий простой CGI.
Ставим софт:
$sudo apt-get install git gitweb gitosis
Gitosis
Позволяет организовать работу пользователей с репозиторием, не заводя для каждого аккаунт в системе. Работает через одного пользователя, и использует rsa ключи для идентификации разработчиков.
Конфигурация находится в репозитории gitosis-admin. Правится и сохраняется посредством git. Собственно push в удаленный репозиторий и является сохранением конфигурации и релоадом сервиса.
Дебиановская поставка создает не общепринятого пользователя git, а пользователя без пароля gitosis с домашником в /srv/gitosis. И именно с этим каталогом будем работать в дальнейшем и gitweb пропишем там же.
Права в конфиге выдаются не пользователям, а ключам. И чтобы этим всем было проще рулить, рекомендую перед добавлением ключа переименовывать его в ник пользователя.
$sudo cp /home/ник_админа_гитосиса/.ssh/id_rsa.pub /tmp/ник_админа_гитосиса.pub
Теперь инициализируем gitosis:
$sudo -H -u git gitosis-init < /tmp/ник_админа_гитосиса.pub
Ключ -H указан для gitosis. Он использует переменную окружения $HOME, и чтобы он не в вашем домашнике создал этот репозиторий он и нужен.
Конфигурирование и добавление пользователей и репозитории я опишу после полной установки.
Git daemon – Доступ для клонирования наших репозиториев.
Команда запуска демона находится в /etc/sv/git-daemon/run.
Заменим строку запуска на вот такую, с новым расположением репозиториев:
exec git-daemon –verbose –reuseaddr –base-path=/srv/gitosis/repositories /srv/gitosis/repositories
И рестартонем демона:
$sudo sv restart git-daemon
GitWeb
Стандартный веб-интерфейс к git.
Для запуска его как FastCGI воспользуемся вот этой оберткой:
gitweb.fcgi.
Скопируйте ее в /usr/lib/cgi-bin, рядом с самим gitweb.cgi.
Файл запуска нашего FastCGI приложения положите в /etc/init.d:
spawn-gitweb.sh.
#!/bin/sh su gitosis -c /home/gitosis/gitweb/gitweb.fcgi \ --fcgi-socket=127.0.0.1:7000 \ --cgi-bin=/usr/lib/cgi-bin/gitweb.cgi &
Запуск будет производится от имени gitosis.
Создайте каталог для статических элементов gitweb
$sudo -u gitosis mkdir -p /srv/gitosis/gitweb/static
Скопируйте туда файлы стилей и картинки.
$sudo -u gitosis cp /usr/share/gitweb/* /srv/gitosis/gitweb/static/
Есть два способа включить репозитории в список проектов gitweb.
Первый это указать файл в котором будет находится список доступных проектов.
Мы им и воспользуемя, этот файл нам автоматически будет генерировать gitosis.
Второй, используется в случае самостоятельного сканирования директории с репозиториями. Присвоив $export_ok имя файла которое при сканирование должно присутствовать в каталоге проекта, мы разрешаем публикацию этого проекта.
$projects_list = $projectroot; # Покажет в списке только проекты которые разрешены для git-daemon. $export_ok = "git-daemon-export-ok";
Конфиг gitweb /etc/gitweb.conf:
# path to git projects (<project>.git)
# путь к проектам
$projectroot = "/srv/gitosis/repositories";
# directory to use for temp files
# временная директория
$git_temp = "/tmp";
# target of the home link on top of all pages
$home_link = $my_uri || "/";
# html text to include at home page
$home_text = "indextext.html";
# file with project list; by default, simply scan the projectroot dir.
# Файл содержащий список проектов.
# Если указано имя каталога, gitweb применит сканирование
# и определит все репозитории внутри него.
# Но нам это не нужно, наш список публичных проектов
# мы будем определять через gitosis.
# Потому указываем конкретный файл.
#$projects_list = $projectroot;
$projects_list = "/srv/gitosis/gitosis/projects.list";
# stylesheet to use
# относительный урл стилевого файла
$stylesheet = "/static/gitweb.css";
# logo to use
# относительный урл лого
$logo = "/static/git-logo.png";
# the 'favicon'
# относительный урл иконки сайта
$favicon = "/static/git-favicon.png";
# By default, gitweb will happily let people browse any repository
# they guess the name of. This may or may not be what you want.
# I prefer to set these, to allow exactly the repositories in
# projects.list to be browsed.
$export_ok = "";
$strict_export = "true";
# устанавливаем формат тарболлов по умолчанию
$feature{'snapshot'}{'default'} = ['zip'];
# Способы доступа к репозиториям
#@git_base_url_list = ('git+ssh://gitosis@domain.tld');
@git_base_url_list = ('git://domain.tld', 'ssh://gitosis@domain.tld');
Nginx
Конфигурируем свой виртуальный домен:
upstream fcgi-gitweb {
server 127.0.0.1:1027;
}
server {
listen YouIP:80;
server_name domain.tld;
access_log /var/log/nginx/domain.tld.access.log;
error_log /var/log/nginx/domain.tld.error.log;
location / {
include /etc/nginx/fastcgi_params;
fastcgi_pass fcgi-gitweb;
}
location /static {
root /srv/gitosis/gitweb;
}
}
Настройка и публикация репозиториев
Теперь необходимо настроить gitosis, и именно его настроек хватит чтобы рулить всем хозяйством сразу.
Получаем репозиторий с конфигураций. Эта операция должна производится от имени ник_админа_гитосиса, которого мы определили в первой части.
$git clone gitosis@domain.tld:gitosis-admin.git
$cp gitosis-admin
Там будут находится файл gitosis.conf и каталог с ключами keydir. В каталог будем копировать ключи разработчиков под их именами, а gitosis.conf имеет такие возможности:
# В этой секции находятся глобальные настройки # если вы собираетесь публиковать через веб все свои репозитории, # то достаточно будет указать в этом разделе параметр gitweb = yes. # но предполагается что к публикации # для каждого проекта будет подход особый. [gitosis] [group gitosis-admin] writable = gitosis-admin members = ник_админа_гитосиса # Определяем группы для использования в дальнейшем # Все используемые имена разработчиков это имена ключей, # которые должны лежать в keydir # leader1.pub developer2.pub ... и т.д. [group team-leader] members = leader1 leader2 [group developers] members = developer1 developer2 developer3 # доступ команде разработчиков и пользователю user1 # к репозиториям dev и fixes на запись # и к репозиторию release на чтение [group dev] writable = dev fixes readonly = release members = @developers user1 # доступ ведущим разработчикам и пользователю user2 # к репозиторию release на запись [group releases] writable = release members = @team-leader user2 # есть еще пользовать @all # и по идее вот такая вот запись позволит ему забрать релиз [group reader] readonly = release members = @all # теперь определим наши репозитории # публикуем наши релизы [repo release] # публикуем в gitweb gitweb = yes # публикуем через git-daemon daemon = yes # Описание description = Релизы нашего проекта # Видимое имя владельца owner = Architector # Девелоперский не публикуем # В принципе его здесь и описывать не нужно было [repo dev] description = Репозиторий разработки owner = Leader # а фиксы опубликуем [repo fixes] gitweb = yes daemon = yes description = Фиксы owner = Developer
Добавляем файлы ключей под контроль git:
$git add .
После этого коммитим наши изминения
$git commit -am «Первичная настройка и публикация репозиториев»
И отправляем это все на наш удаленный gitosis.
$git push
Репозитории автоматом не создадутся, только при первом коммите.
И тогда же они появятся в списке проектов gitweb.
Комментарии
Написать комментарий.
