Login Register

Setting up fossil on nginx web server

#15412 (ツ) johnfound
Created 23.03.2018, read: 9737 times

Earlier, I have wrote an article explaining how to setup AsmBB forum with nginx server.

But if you have nginx server up and running you can very easy host fossil managed source code repositories.

Setting up a fossil facility with nginx is very easy and trouble free. I am even wondering why this setup is not documented in details in the fossil documentation.

Of course as a prerequisite you need to have fossil installed. You can do it from your Linux distro package manager, or as long as fossil is a single executable file, simply download it from the fossil web site and place it in /usr/bin directory.

Configuring nginx

At first, you need to choose the URL on which the fossil repositories will be located. If assume that the main web site is located on one possible URL for the fossil repositories is

First, you need to include in the nginx configuration file the new location. It have to be included inside the respective server {} section of the configuration:

# Already existing and working web server configuration
server {
  .... some options ...
  .... other options ...

  # This is the fossil configuration you need to include

  location /fossil/ {
    scgi_pass;  # select whatever free port you want.
    include scgi_params;       # this file is usually 
    scgi_param SCRIPT_NAME "/fossil"; 

There are in general two types of nginx setup:

The first is "one config file" type, where all server configuration is located in a single file, usually /etc/nginx/nginx.conf. In this case, you need only to look for the proper server {} section if there are more than one.

The second type is "one config file per virtual host" where every virtual host have separate config file, usually located in some subdirectory of /etc/nginx/ directory. In this case, you need to include the fossil configuration in one of these configuration files.

Once the nginx is configured the configuration need to be reloaded with:

sudo systemctrl reload nginx

Configuring fossil scgi service

Fossil can be started manually from the console (especially for tests) but it is better to create a service for systemd in order to make it start automatically on restarts and possible program faults.

Create file /etc/systemd/system/fossil.service with the following content:

Description=Fossil scm SCGI script.

ExecStart=/usr/bin/fossil server /DOCUMENT_ROOT/fossil/ --scgi --localhost --port 9000 --repolist


Creating this file you need to replace the following placeholders:

YOUR_PREFERED_USER is the user you want run fossil script. Notice that this user must have writing access to all repository files. Otherwise fossil will not be able to manage the repositories.

DOCUMENT_ROOT is the directory where your web site is located.

Now enable and start your new fossil service:

sudo systemctl enable fossil
sudo systemctl start fossil


From this moment, every repository file REPO_NAME.fossil located in /DOCUMENT_ROOT/fossil directory will be served by fossil on a URL: (Notice the omitted .fossil extension!)

On an URL fossil returns a list with links to all served repositories.


Setting up fossil on nginx web server

AsmBB v3.0 (check-in: a316dab8b98d07d9); SQLite v3.42.0 (check-in: 831d0fb2836b71c9);
©2016..2023 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE