Installing cgit with Nginx on Debian
cgit is a web view for git repositories that is widely used and quite simple to install. This is just a brief overview over installation of cgit with Nginx on a Debian system, because I had to make a few adjustments.
First of all, of course you have to install cgit and (if not previously
installed) nginx. Since cgit only provides a CGI interface, you also need
to install fcgiwrap to connect Nginx to cgit.
Both fcgiwrap and Nginx have to be started as services:
systemctl start nginx fcgiwrap
systemctl enable nginx fcgiwrap
On Debian, cgit web resources are stored in /usr/share/cgit and the cgit CGI script
is stored in /usr/lib/cgit. This means that the Nginx document root will
point to /usr/share/cgit so that the web server can deliver static resources
from there, but the CGI script filename has to point to /usr/lib/cgit/cgit.cgi.
On my first attempt cgit messed up links within repositories (it duplicated
the repository name in the URL). Thus, I also had to specify the
virtual-root in the configuration file. According to the documentation
however, this setting should not be needed if PATH_INFO is set correctly.
According to a blog post the problem might
be that some versions of fcgiwrap overwrite PATH_INFO.
Overall, the following cgit configuration file worked for my setup:
# /etc/cgitrc
# Paths to the static resources in /usr/share/cgit (=Nginx root)
css=/cgit.css
logo=/cgit.png
# Folder containing all my repositories
scan-path=/srv/git/
# root for all cgit links
virtual-root=/
Nginx has to forward the requests to fcgiwrap which will then call the CGI script from cgit. For this, you have to setup fcgiwrap in Nginx as a FastCGI endpoint:
# /etc/nginx/sites-available/cgit.conf
server {
listen [::]:80;
listen 80;
server_name git.example.com;
# Path to the static web resources of cgit
root /usr/share/cgit;
try_files $uri @cgit;
location @cgit {
include fastcgi_params;
# Path to the CGI script that comes with cgit
fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $args;
fastcgi_param HTTP_HOST $server_name;
# Path to the socket file that is created/used by fcgiwrap
fastcgi_pass unix:/run/fcgiwrap.socket;
}
# Used by me: Only allow this web page to be accessed on intranet,
# even though nginx listens globally
allow 127.0.0.1;
allow 10.0.0.0/24;
allow 172.16.0.0/12;
deny all;
}
Now you can reload nginx with systemctl reload nginx and view your git
repositories on http://git.example.com.
Enabling Markdown
cgit includes the possibility to display an about page from a README file,
e.g. a markdown formatted README.md. To enable this, you have to adjust the
file cgitrc and set the following two options:
about-filter=/usr/lib/cgit/filters/about-formatting.sh
readme=:README.md
about-formatting.sh is a helper script that calls the right formatter
depending on the file extension, e.g. markdown for .md. In order for the
script to work you need to have the Python package markdown installed.
On Debian you can install this package with the python3-markdown.