====== Własny serwer Git =====
Własny serwer git oparty o:
* gitolite (kontrola dostępu)
* cgit (frontend do przeglądania repozytoriów)
===== gitolite: instalacja i konfiguracja =====
Instalujemy:
pkg install gitolite
Zakładamy użytkownika, na którym będzie pracować gitolite:
pw useradd -n git -u 999 -c "Gitolite user" -d /home/git -m -s /usr/local/bin/bash
Przechodzimy na nowo utworzone konto:
sudo -u git -i
Tworzymy plik w którym wpiszemy klucz SSH użytkownika, który będzie adminem. Format pliku: uzytkownik.pub - po czym inicjalizujemy nową konfigurację:
gitolite setup -pk gitadmin.pub
Od tego momentu, użytkownik ''gitadmin'' będzie mógł pobierać repozytorium konfiguracyjne i nim zarządzać:
git clone ssh://git@serwer.com/gitolite-admin
Po sklonowaniu konfiguracją zarządzamy w drzewie repozytorium:
* ''conf/gitolite.conf'' - konfiguracja repozytoriów i uprawnień użytkownikó
* ''keydir/'' - katalog z kluczami użytkowników
Dodatkowo dostosujemy konfigurację gitolite do pracy z cgit. Zmieniamy dwie wartości w ''~/.gitolite.rc'':
GIT_CONFIG_KEYS => '.*',
'cgit',
Pierwszą wartość zmieniamy, drugą trzeba odkomentować.
===== cgit: instalacja i konfiguracja =====
Instalujemy paczki:
pkg install nginx fcgiwrap spawn-fcgi
Konfiguracja do spawnfcgi (''/etc/rc.conf.d/spawn_fcgi''):
spawn_fcgi_enable="YES"
spawn_fcgi_app="/usr/local/sbin/fcgiwrap"
spawn_fcgi_username="git"
spawn_fcgi_groupname="www"
spawn_fcgi_bindsocket="/var/run/fcgiwrap/fcgiwrap.sock"
spawn_fcgi_bindsocket_mode="0770"
Włączamy nginx (''/etc/rc.conf.d/nginx''):
nginx_enable="YES"
Konfiguracja serwera nginx (''/usr/local/etc/nginx/nginx.conf''):
server {
listen 80;
server_name git.server.com;
root /usr/local/www/cgit;
access_log /var/log/nginx/git.access.log;
error_log /var/log/nginx/git.error.log;
try_files $uri @cgit;
location @cgit {
include fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $args;
fastcgi_param HTTP_HOST $server_name;
fastcgi_param REMOTE_USER $remote_user;
}
}
Konfiguracja dla cgit (''/usr/local/etc/cgitrc''):
# Prepend this string to every url
virtual-root=/
# Enable caching of up to 1000 output entriess
cache-size=1000
# cache time to live
cache-dynamic-ttl=5
cache-repo-ttl=5
# Specify some default clone urls using macro expansion
clone-url=http://git.server.com/$CGIT_REPO_URL ssh://git@git.server.com/$CGIT_REPO_URL
# Show owner on index page
enable-index-owner=1
# Source gitweb.description, gitweb.owner from each project config
enable-git-config=1
# Allow http transport git clone
enable-git-clone=0
# Show extra links for each repository on the index page
enable-index-links=1
# Remove .git suffix from project display
remove-suffix=1
# Enable ASCII art commit history graph on the log pages
enable-commit-graph=1
# Show number of affected files per commit on the log pages
enable-log-filecount=1
# Show number of added/removed lines per commit on the log pages
enable-log-linecount=1
# Sort branches by date
branch-sort=age
# Add a cgit favicon
# favicon=/favicon.ico
# Use a custom logo
# logo=/cgit-css/cgit.png
# Enable statistics per week, month and quarter
max-stats=quarter
# Set the title and heading of the repository index page
root-title=git.server.com
# Set a subheading for the repository index page
root-desc=Site Description
# Include some more info about example.com on the index page
# root-readme=/var/www/git/about.htm
# Allow download of tar.gz, tar.bz2 and zip-files
snapshots=tar.bz2 zip
##
## List of common mimetypes
##
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
# Highlight source code with python pygments-based highligher
source-filter=/usr/local/lib/cgit/filters/syntax-highlighting.py
# Format markdown, restructuredtext, manpages, text files, and html files
# through the right converters
about-filter=/usr/local/lib/cgit/filters/about-formatting.sh
##
## Search for these files in the root of the default branch of repositories
## for coming up with the about page:
##
readme=:README.md
readme=:readme.md
readme=:README.mkd
readme=:readme.mkd
readme=:README.rst
readme=:readme.rst
readme=:README.html
readme=:readme.html
readme=:README.htm
readme=:readme.htm
readme=:README.txt
readme=:readme.txt
readme=:README
readme=:readme
readme=:INSTALL.md
readme=:install.md
readme=:INSTALL.mkd
readme=:install.mkd
readme=:INSTALL.rst
readme=:install.rst
readme=:INSTALL.html
readme=:install.html
readme=:INSTALL.htm
readme=:install.htm
readme=:INSTALL.txt
readme=:install.txt
readme=:INSTALL
readme=:install
##
## List of repositories.
## PS: Any repositories listed when section is unset will not be
## displayed under a section heading
## PPS: This list could be kept in a different file (e.g. '/etc/cgitrepos')
## and included like this:
## include=/etc/cgitrepos
##
project-list=/usr/home/git/projects.list
scan-path=/usr/home/git/repositories
Na koniec włączamy serwisy:
service spawn-fcgi start
service nginx start
===== Troubleshooting =====
==== Cgit nie widzi nowego repozytorium ====
Nowe repo będzie widoczne na stronie cgit-a, jeśli będzie dodany dostęp do odczytu dla użytkownika ''gitweb''. Przykładowa konfiguracja repo w ''conf/gitolite.repo'':
repo new_project
RW+ = admin
R = gitweb
==== Cgit: brak opisu repozytorium oraz właściciela ====
Ustawia się je w ''conf/gitolite.repo'' poprzez zmienne gitweb.*:
repo new_project
config gitweb.owner = "Owner"
config gitweb.description = "Description"
RW+ = admin
R = gitweb