Spis treści
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