Running ClioPatria as a service

Running ClioPatria as a normal Unix daemon is generally the preferred way to deploy the system. This page describes the setup. It targets Ubuntu, but most of the remarks will also apply for other Unix-like systems. We will setup ClioPatria as an Ubuntu upstart job, using the Prolog SWISH for querying and controlling the server.

Preparation

Make sure SWI-Prolog is installed as swipl in $PATH, git and the graphviz packages are installed. The commands below are for a typical Ubuntu server or Linux container. For many other Linux distributions you will have to build SWI-Prolog from source.

% sudo apt-get install software-properties-common
% sudo apt-add-repository ppa:swi-prolog/devel
% sudo apt-get update
% sudo apt-get install swi-prolog git graphviz

Now ClioPatria can be installed by cloning the git repository:

% git clone https://github.com/SWI-Prolog/ClioPatria.git

Make the user that manages the server member of the group that runs web servers (typically www-data on an Ubuntu system) using the command below. Replace me with the user.

% sudo usermod -a -G www-data me

Creating the server

First of all, configure ClioPatria in an empty directory. We will call our project myproject, create a directory with that name and perform the basic ClioPatria setup. The --without-debug reduces the amount of messages logged, which speeds up your server and prevents flooding the system logs.

% mkdir myproject
% cd myproject
% ../ClioPatria/configure --without-debug

Available options for configure can be viewed by running the command below. Good candidates are --with-lod and --with-logging.

../ClioPatria/configure --help

Edit network configuration

Edit config-enabled/network.pl to suit your needs. If a proxy is needed, set http:public_host to the public name of the server. Choose a port for running the server and fill this in for http:port. Create the appropriate proxy rule.

Create the administrative user

Run the server using ./run.pl. If all is configured correctly, it now be available at the public address. Immediately fill in the admin name and password. Use a fair password, as SWISH provides full access to the machine under the daemon user permissions. Note that by default, passwords are exchanged using plain HTTP, so do not use a password you use elsewhere for critical access.

Install SWISH

Install SWISH for this ClioPatria instance using

?- cpack_install(swish).

Edit config-enabled/pengies.pl and change the setting pengines:allow_from to [*] if you want to enable SWISH access globally.

Now shut down the server.

Setting permissions

Typically, web-services are running under the user www-data, group www-data. One should certainly not run the server as root and it is wise to use a different user than the user that owns the ClioPatria source files. Depending on the usage scenario, you want to give the server write access to some resources. We assume that you are root or member of the group www-data

The resources that need attention are:

The typical commands are:

% mkdir storage log
% chmod 2775 storage log RDF-store
% chmod  644 users.db
% chgrp www-data storage RDF-store users.db

Install further cpacks and optionally load RDF

If you wish to install further cpacks, this is the time to do so. Start ./run.pl and use ?- cpack_install(Pack). to install the necessary packs.

You can now load RDF using ?- rdf_load('myfile.ttl'). or, if you made RDF-store writeable you can do this later.

Now shut down the server.

Register the service with Ubuntu upstart

Create a file myproject.conf based on the template below. Edit the chdir argument to point to the installation directory.

description	"ClioPatria myproject server"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 5 60
umask 022

console log
chdir /home/me/src/ClioPatria/myproject

script
  export LANG=en_US.utf8
  ./daemon.pl --no-fork --user=www-data --workers=16
end script

You may test the server by running the ./daemon.pl ... line from the script as root. Watch for error messages on the terminal and test that you can access the server. If that works nicely, close the server using Control-C and e (exit).

Now, copy myproject.conf to /etc/init and start the server using

% service myproject start

Verify that the server comes online. If not, examine the logfile at /var/log/upstart/myproject.log.

Managing the server using SWISH

You can manage the server using SWISH by logging into the server using the admin account and select SWISH from the Query pulldown menu. You can run any Prolog query in the bottom-left corner. If the needed predicate is in a library, you have to load that library. You do so by adding a directive like this in the left window:

:- use_module(library(semweb/rdf_persistency)).

You can run commands such as ?- rdf_load('myfile.ttl'). or ?- make.

Unless you have www-data to the cpack and ClioPatria source tree, you cannot update ClioPatria directly through SWISH. To make changes to the software, update the ClioPatria sources (e.g., `git pull`) and then run ?- make. from the SWISH console. To update the cpacks, run a copy of the server on a unique port and with a temporary database and then run your cpack commands before running ?- make. from the SWISH console.

./run.pl --port=4444 --store=tmp
...
?- cpack_upgrade.

New packs are installed similarly, but often require a service restart.