CGit

Стильное, модное, лёгкое и супербыстрое CGI приложение, написанное на чистом и сверкающем C. Имеет огромное количество крутилок и неочевидных моментов, но большая часть описана в доке и man'е.

Установка

# apt-get install cgit

Настройка

Курим man, выбираем нужные педальки. После выкуривания интернетов у меня получилось вот так:

/etc/cgitrc
#cache-size=1000
#Список способов склонировать репы
clone-url=https://git.owlhost.in/$CGIT_REPO_URL git@git.owlhost.in:$CGIT_REPO_URL
 
# Путь к css
css=/cgit.css
 
# Удалять суффикс .git из названий репозиториев
remove-suffix=1
# Твики/фиксы, пока выключил
#enable-index-owner=1
#enable-http-clone=1
#enable-index-links=1
#enable-commit-graph=1
#enable-log-filecount=1
#enable-log-linecount=1
# Сортировка веток
branch-sort=age
 
# Иконочка для избранного
favicon=/favicon.ico
# Логотип, пока выключил
#logo=/img/mylogo.png
# Считать статистику за квартал
max-stats=quarter
 
# Название
root-title=OwlHost git repos
# Дескрипшн
root-desc=In nomine Imperor!
# Превращать первую часть пути в секцию (test/repo.git превратится в section: test, reponame: repo)
section-from-path=1
 
# Главная страница
#root-readme=/var/www/htdocs/about.html
 
# Типы отдаваемых снапшотов
snapshots=tar.gz tar.bz2 zip
 
# Типы файлов, наверное указано по умолчанию
mimetype.gif=image/gif
mimetype.html=text/html
mimetype.jpg=image/jpeg
mimetype.jpeg=image/jpeg
mimetype.pdf=application/pdf
mimetype.png=image/png
mimetype.svg=image/svg+xml
 
# Важные штучки
# Подкрашивает исходный код
source-filter=/usr/lib/cgit/filters/syntax-highlighting.py
# Форматирует readme файлы
about-filter=/usr/lib/cgit/filters/about-formatting.sh
 
# Названия README файлов в репозиториях, после форматирования появятся во вкладках about
readme=:README.md
readme=:README
 
# Смещение от корня домена
virtual-root=/
# Имя скрипта
script-name=/
# Директория для поиска репозиториев
scan-path=/srv/git/repositories/

Запуск

UWSGI

Хитрая обёртка, написанная на питоне. Свои функции выполняет хорошо, поэтому я её и взял. Нам понадобится:

  • Сам UWSGI
  • Руками написать Systemd Unit, поскольку мейнтейнеры debian не осилили, есть только init скрипт Nginx, который будет общаться с uwsgi

Итак, ставим uwsgi и настраиваем наш аппликейшн

# apt-get install uwsgi uwsgi-core

И создаём следующий файл

/etc/uwsgi/apps-enabled/cgit.ini
[uwsgi]
logto = /var/log/uwsgi/app/cgit.log
log-backupname = cgit-old.log
log-maxsize = 10485760
socket = 127.0.0.1:8081
plugins = cgi
uid = git
gid = git
processes = 2
threads = 4
cgi = /usr/lib/cgit/cgit.cgi

Вторым шагом содаём свой systemd unit

/etc/systemd/system/uwsgi@.service
[Unit]
Description=uWSGI for %i application
After=syslog.target
 
[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-enabled/%i.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
 
[Install]
WantedBy=multi-user.target

После чего делаем systemctl daemon-reload и пробуем запустить наше приложение:

# systemctl start uwsgi@cgit

Если всё прошло хорошо, то ставим nginx и настраиваем его по следующему принципу:

/etc/nginx/sites-enabled/owlhost.in.conf
server {
  listen 80;
 
  server_name git.owlhost.in;
 
  location ~* ^.+(cgit.(css|png)|favicon.ico) {
    root /usr/share/cgit;
 
    expires 30d;
  }
 
  location / {
    include uwsgi_params;
    uwsgi_modifier1 9;
    uwsgi_pass 127.0.0.1:8081;
  }
}

Перезапускаем nginx, заходим на адрес, указанный в server_name и voila - cgit готов.