Cgit: Difference between revisions

From Alpine Linux
m (Added a note)
m (→‎Installation: use pkg template.)
 
(10 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[https://git.zx2c4.com/cgit/ cgit] is a fast web-interface (CGI) for git written in the C programming language. It makes it possible for potential contributors to track and view project source code from the web instead of through a git client.
[https://git.zx2c4.com/cgit/ cgit] is a fast web-interface (CGI) for git written in the C programming language. It makes it possible for potential contributors to track and view project source code from the web instead of through a git client.


== Setting up cgit ==
== Installation ==
{{Note|It is very recommendable that you already have a directory with an active .git working. If you don't have one, install [[gitolite]] or a similar program before going further.}}
{{Note|It is very recommendable that you already have a directory with an active .git working in your server. If you don't have one, install [[gitolite]] or a similar program before going further.}}
Install the package that contains cgit and git.
Install the package that contains cgit and git.
{{Cmd|apk add cgit git}}
{{Cmd|apk add {{pkg|cgit|arch=}} {{pkg|git|arch=}}}}


Open up /etc/cgitrc with your favorite editor, in this case is vim.
Open up /etc/cgitrc with your favorite editor, in this case is vim.
Line 10: Line 10:


If you want to show an specific repository your configuration should look something like this:
If you want to show an specific repository your configuration should look something like this:
{{Cat|/etc/cgitrc|<nowiki>
{{Cat|/etc/cgitrc|<nowiki>virtual-root=/
virtual-root=/
repo.path=/var/lib/git/repositories/YOUR_GIT_REPO.git/
repo.path=/var/lib/git/repositories/YOUR_GIT_REPO.git/
repo.url=CUSTOM_GIT_URL
repo.url=CUSTOM_GIT_URL
</nowiki>
</nowiki>}}
}}


If you want to scan and show all the repositories you have, your configuration should look something like this:
If you want to scan and show all the repositories you have, your configuration should look something like this:
{{Cat|/etc/cgitrc|<nowiki>
{{Cat|/etc/cgitrc|<nowiki>virtual-root=/
virtual-root=/
scan-path=/var/lib/git/repositories/
scan-path=/var/lib/git/repositories/
</nowiki>
</nowiki>}}
}}


=== Run cgit using spawn-fcgi and fcgiwrap ===
=== Run cgit using spawn-fcgi and fcgiwrap ===
Install spawn-fcgi and fcgiwrap
{{Cmd|apk add fcgiwrap spawn-fcgi}}
Create a new service by doing a symbolic link.
Create a new service by doing a symbolic link.
{{Cmd|ln -s /etc/init.d/spawn-fcgi /etc/init.d/spawn-fcgi.cgit}}
{{Cmd|ln -s spawn-fcgi /etc/init.d/spawn-fcgi.cgit}}
{{Note|You should also modify the file and add -f after ${FCGI_PROGRAM} on line 99.  Otherwise you will have no log and problems will be impossible to debug.}}
Create a configuration file called spawn-fcgi.cgit in /etc/conf.d/ ; the service will run fcgiwrap automatically everytime is called. It should look exactly like this:
Create a configuration file called spawn-fcgi.cgit in /etc/conf.d/ ; the service will run fcgiwrap automatically everytime is called. It should look exactly like this:
{{Cat|/etc/conf.d/spawn-fcgi.cgit|<nowiki>
{{Cat|/etc/conf.d/spawn-fcgi.cgit|<nowiki>FCGI_PORT=1234
FCGI_PROGRAM=/usr/bin/fcgiwrap
FCGI_PROGRAM=/usr/bin/fcgiwrap
</nowiki>
</nowiki>}}
}}
{{Note|You should consider using unix domain sockets instead.}}
Start the newly created service.
Start the newly created service.
{{Cmd|rc-service spawn-fcgi.cgit start}}
{{Cmd|rc-service spawn-fcgi.cgit start}}
Line 42: Line 41:


Create a cgit.conf file into the lighttpd directory with the following content:
Create a cgit.conf file into the lighttpd directory with the following content:
{{Cat|/etc/lighttpd/cgit.conf|<nowiki>
{{Cat|/etc/lighttpd/cgit.conf|<nowiki>server.modules += ("mod_redirect",
server.modules += ("mod_redirect",
                   "mod_alias",
                   "mod_alias",
                   "mod_cgi",
                   "mod_cgi",
Line 59: Line 57:
     "^/git/(.*)$" => "/cgit/cgit.cgi/$1",
     "^/git/(.*)$" => "/cgit/cgit.cgi/$1",
)
)
</nowiki>
</nowiki>}}
}}


Finally, add the following line to the lighttpd.conf file:
Finally, add the following line to the lighttpd.conf file:
{{Cat|/etc/lighttpd/lighttpd.conf|<nowiki>include "cgit.conf"
{{Cat|/etc/lighttpd/lighttpd.conf|<nowiki>include "cgit.conf"
</nowiki>
</nowiki>}}
}}


Restart the lighttpd service.
Restart the lighttpd service.
Line 80: Line 76:
The file should look something like this:
The file should look something like this:


{{Cat|/etc/nginx/conf.d/git.your_domain.com.conf|<nowiki>
{{Cat|/etc/nginx/conf.d/git.your_domain.com.conf|<nowiki>server {
server {
     server_name git.your_domain.com;
     server_name git.your_domain.com;
     root /usr/share/webapps/cgit;
     root /usr/share/webapps/cgit;
Line 88: Line 83:
         include fastcgi_params;
         include fastcgi_params;
         fastcgi_pass localhost:1234;
         fastcgi_pass localhost:1234;
         fastcgi_param SCRIPT_FILE $document_root/cgit.cgi;
         fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi;
         fastcgi_param PATH_INFO $uri;
         fastcgi_param PATH_INFO $uri;
         fastcgi_param QUERY_STRING $args;
         fastcgi_param QUERY_STRING $args;
         }
         }
}
}
</nowiki>
</nowiki>}}
}}
Restart the NGINX service.
Restart the NGINX service.
{{Cmd|rc-service nginx restart}}
{{Cmd|rc-service nginx restart}}

Latest revision as of 05:36, 4 March 2024

cgit is a fast web-interface (CGI) for git written in the C programming language. It makes it possible for potential contributors to track and view project source code from the web instead of through a git client.

Installation

Note: It is very recommendable that you already have a directory with an active .git working in your server. If you don't have one, install gitolite or a similar program before going further.

Install the package that contains cgit and git.

apk add cgit git

Open up /etc/cgitrc with your favorite editor, in this case is vim.

vim /etc/cgitrc

If you want to show an specific repository your configuration should look something like this:

Contents of /etc/cgitrc

virtual-root=/ repo.path=/var/lib/git/repositories/YOUR_GIT_REPO.git/ repo.url=CUSTOM_GIT_URL

If you want to scan and show all the repositories you have, your configuration should look something like this:

Contents of /etc/cgitrc

virtual-root=/ scan-path=/var/lib/git/repositories/

Run cgit using spawn-fcgi and fcgiwrap

Install spawn-fcgi and fcgiwrap

apk add fcgiwrap spawn-fcgi

Create a new service by doing a symbolic link.

ln -s spawn-fcgi /etc/init.d/spawn-fcgi.cgit

Note: You should also modify the file and add -f after ${FCGI_PROGRAM} on line 99. Otherwise you will have no log and problems will be impossible to debug.

Create a configuration file called spawn-fcgi.cgit in /etc/conf.d/ ; the service will run fcgiwrap automatically everytime is called. It should look exactly like this:

Contents of /etc/conf.d/spawn-fcgi.cgit

FCGI_PORT=1234 FCGI_PROGRAM=/usr/bin/fcgiwrap
Note: You should consider using unix domain sockets instead.

Start the newly created service.

rc-service spawn-fcgi.cgit start

Run cgit with a web service

Configure Lighttpd to work with cgit

Install the package that contains lighttpd if you haven't already.

apk add lighttpd

Create a cgit.conf file into the lighttpd directory with the following content:

Contents of /etc/lighttpd/cgit.conf

server.modules += ("mod_redirect", "mod_alias", "mod_cgi", "mod_fastcgi", "mod_rewrite" ) var.webapps = "/usr/share/webapps/" $HTTP["url"] =~ "^/cgit" { server.document-root = webapps server.indexfiles = ("cgit.cgi") cgi.assign = ("cgit.cgi" => "") mimetype.assign = ( ".css" => "text/css" ) } url.redirect = ( "^/git/(.*)$" => "/cgit/cgit.cgi/$1", )

Finally, add the following line to the lighttpd.conf file:

Contents of /etc/lighttpd/lighttpd.conf

include "cgit.conf"

Restart the lighttpd service.

rc-service lighttpd restart

Configure NGINX to work with cgit pointing to a subdomain

Install the package that contains NGINX if you haven't already.

apk add nginx

Create a custom configuration in the NGINX's conf.d directory.

vim /etc/nginx/conf.d/git.your_domain.com.conf

The file should look something like this:

Contents of /etc/nginx/conf.d/git.your_domain.com.conf

server { server_name git.your_domain.com; root /usr/share/webapps/cgit; try_files $uri @cgit; location @cgit { include fastcgi_params; fastcgi_pass localhost:1234; fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi; fastcgi_param PATH_INFO $uri; fastcgi_param QUERY_STRING $args; } }

Restart the NGINX service.

rc-service nginx restart