Narzędzia użytkownika

Narzędzia witryny


freebsd:ports:git

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
freebsd/ports/git.txt · ostatnio zmienione: 2016/03/16 16:57 przez mky