How to install cGit on Nginx (Ubuntu server) ============================================ Step-by-step installtion of cGit on nginx without funky rewrite rules. Pre-requisites -------------- This is for :: sudo aptitude install build-essential autoconf automake libtool libfcgi-dev spawn-fcgi fcgiwrap git clone https://github.com/gnosek/fcgiwrap.git git clone git://hjemli.net/pub/git/cgit Setting up fcgiwrap ------------------- Now lets install fcgiwrap_. Alternatively, you can :: git clone https://github.com/gnosek/fcgiwrap.git cd fcgiwrap/ autoreconf -i ./configure make sudo make install cp fcgiwrap /usr/bin/. Setting up spawn-fcgi --------------------- Then, I pasted this perl script into /usr/bin/spawn-fcgi which will create a socket to pass .cgi to it :: cat > /usr/bin/spawn-fcgi #!/usr/bin/perl use strict; use warnings FATAL => qw( all ); use IO::Socket::UNIX; my $bin_path = '/usr/bin/fcgiwrap'; my $socket_path = $ARGV[0] || '/tmp/cgi.sock'; my $num_children = $ARGV[1] || 1; close STDIN; unlink $socket_path; my $socket = IO::Socket::UNIX->new( Local => $socket_path, Listen => 100, ); die "Cannot create socket at $socket_path: $!\n" unless $socket; for (1 .. $num_children) { my $pid = fork; die "Cannot fork: $!" unless defined $pid; next if $pid; exec $bin_path; die "Failed to exec $bin_path: $!\n"; } Then make sure to give it executable permissions :: chmod +x /usr/bin/spawn-fcgi The following script will be use to automate the respawning of FastCGI(fcgi) socket :: cat > /etc/init.d/spawn-fcgi #!/bin/bash C_SCRIPT=/usr/bin/spawn-fcgi USER=www-data GROUP=www-data RETVAL=0 case "$1" in start) echo "Starting fastcgi" sudo -u $USER $C_SCRIPT chown $USER:$GROUP /tmp/cgi.sock RETVAL=$? ;; stop) echo "Stopping fastcgi" killall -9 fcgiwrap RETVAL=$? ;; restart) echo "Restarting fastcgi" killall -9 fcgiwrap $sudo -u $USER $C_SCRIPT RETVAL=$? ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac exit $RETVAL Again, make that executable and start it up! :: chmod +x /etc/init.d/spawn-fcgi sudo /etc/init.d/spawn-fcgi start After you start the spawn-fcgi you should see a new file in /tmp folder with the name cgi.sock. That file is our socket to pass .cgi scripts to. Configuring nginx fcgi_param's ------------------------------ The next step is optional, but I like it because it neatens things up a bit. :: cat > /etc/nginx/fastcgi_params fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param REMOTE_USER $remote_user; Setting up cGit --------------- Go into the cgit directory that you cloned in the pre-req's and run the following cmomands :: git submodule init git submodule update make sudo make install This will have installed cgit.cgi cgit.png and cgit.css into /var/www/htdocs/cgit/. That should be fine if you have all the correct permissions set up. Create a file in /etc/cgitrc and put the following code in it: :: # prepend this string to every url virtual-root=/ # title, heading, desc, about... root-title=Intecs git repositories root-desc=here lies our code! root-readme=/files/web/example.com/code/about.html # styling css=/htdocs/cgit/cgit.css logo=/htdocs/cgit/cgit.png # # "STATIC" REPOSITORIES # # Add them one by one, or include a file... section=Hosted repos # First repository repo.url= repo.owner= repo.path=/path/to/git_repo/.git repo.desc=A test project. Now here is where we configure nginx to run cgit :: server { listen 80; server_name localhost; # Serve static files location ~* ^.+\.(css|png|ico)$ { root /var/www/htdocs/cgit; expires 30d; } location / { fastcgi_pass unix:/tmp/cgi.sock; fastcgi_param SCRIPT_FILENAME /var/www/htdocs/cgit/cgit.cgi; fastcgi_param PATH_INFO $uri; fastcgi_param QUERY_STRING $args; } access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; } References ~~~~~~~~~~ * http://manpages.ubuntu.com/manpages/natty/man8/fcgiwrap.8.html * http://wiki.nginx.org/Fcgiwrap * https://help.ubuntu.com/community/FcgiWrap .. _fcgiwrap: https://help.ubuntu.com/community/FcgiWrap