Installing cGit behind NGINX on Ubuntu
cGit is a fast web interface based on the CGI specification. It is lightweight and doesn't require a database or web authentication system.
It's easy to configure. For some reason, all the online guides for Ubuntu decided they needed to compile it from scratch and write their own start scripts in a mix of perl and bash. You don't need superhero sysadmin skills from the late 90s. All components are packaged with systemd units... there is a better way...
1. Install cgit
and fcgiwrap
.
fcgiwrap
will create a socket NGINX can use to pass the CGI variables to cGit:
sudo apt install fcgiwrap
sudo apt install cgit
2. Modify the cgitrc
file under /etc/cgitrc
to your liking:
# See cgitrc(5)
# prepend this string to every url
virtual-root=/
enable-index-links=1
enable-commit-graph=1
root-title=My Git Repos
root-desc=I exclusivly write code in Smalltalk-71
logo=/assets/my_custom_logo.png
# Add site-specific configuration
# ...
3. Optionally create an assets directory and add your custom logo / css:
mkdir /var/www/html/assets
cp my_custom_logo.png /var/www/html/assets
4. Configure NGINX
Add the site to NGINX. This launches the cgit.cgi
executable passing it to the fcgiwrap
socket:
echo >/etc/nginx/sites-available/cgit.conf <<EOF
server {
listen 80;
server_name git.domain.com;
server_name www.git.domain.com;
root /usr/share/cgit;
# Maintainer overridden assets will live in /assets
# This allows you to change add a custom logo or modified CSS
# See cgitrc(5)
location ~* /assets {
root /var/www/html;
expires 30d;
}
# Fallback to static assets included by cGit
location ~* ^.+\.(css|png|ico)$ {
root /usr/share/cgit;
expires 30d;
}
try_files $uri @cgit;
location @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;
fastcgi_pass unix:/run/fcgiwrap.socket;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
}
EOF
4. Enable the site:
ln -s /etc/nginx/sites-available/git.conf /etc/nginx/sites-enabled/cgit.conf
Note: all files in sites-enabled should be included in nginx.conf
's http section:
include /etc/nginx/sites-enabled/*;
5. Restart NGINX
sudo systemctl restart nginx