Debian Stretch (9.0)

This page explains how to install ]project-open[ V5.0 on Debian Stretch LTS (9.0) . Please see the discussion thread  on SourceForge.

Install required packages

Please install the packages below.

apt-get install net-tools git-core emacs unzip zip make nginx ldap-utils \
daemontools daemontools-run ghostscript gsfonts imagemagick graphviz \
libreoffice-writer libreoffice-draw libreoffice-java-common wget cvs

Create the "projop" Linux user

Please don't change (at the moment) the name or the home directory (/web/projop/) of the new user. More than 20 different files reference the location, and the probability is very high that might miss one of them...   

mkdir /web
mkdir /web/projop
groupadd projop
useradd -g projop -d /web/projop -m -s /bin/bash projop
chown -R projop:projop /web/projop/


Download Required Files



cd /usr/local/src/
cd /usr/local tar xzf /usr/local/src/naviserver-4.99.8.tgz # extract the NaviServer binary for 64 bit su - projop tar xzf /usr/local/src/project-open-Update- # extract auxillary files tar xzf /usr/local/src/web_projop-aux-files. # extract the product code exit

Edit the ]po[ configuration file  /web/projop/etc/config.tcl parameters with your preferred editor and modify the following parameters:

set servername "<your_company_name_without_special_characters>"


Setup PostgreSQL

PostgreSQL 9.6 is part of Debian Stretch. Please use exactly this version.

Please install the database using:

apt-get install libpq5 postgresql-9.6 postgresql-client-9.6 \ postgresql-client-common postgresql-common postgresql-contrib-9.6 \ ssl-cert postgresql-doc postgresql-doc-9.6 libdbd-pg-perl libdbi-perl \ sysstat

Configure PostgreSQL start with server start:

systemctl enable postgresql

Initialize and start the database:

systemctl start postgresql

Create a new database and user:

su - postgres -c "createuser -s projop"                             # database user "projop" with admin rights
su - projop -c "createdb --encoding=utf8 --owner=projop projop"     # new database
su - projop -c "createlang plpgsql projop"                          # enable PlPg/SQL, may already be installed

You can verify your PostgreSQL installation by typing ("\q" or Ctrl-D for exit):

su - projop -c psql

Enter "\q" or press Ctrl-D to exit.

Now import the database dump: 

su - projop
psql -f ~/pg_dump. > import.log 2>&1

The import can take up to a minute, depending on your system. Please ignore the ~3.500 error messaging showing up at the beginning (that's because the dump contains instructions to drop any stuff that's left in the DB...). In order to verify the import please execute:

su - projop
psql -c "select count(*) from users"

.. which should return 197 or a similar number (the number of demo users in the demo company provided as part of the installer). 


Start ]project-open[ manually

/usr/local/ns/bin/nsd -f -t /web/projop/etc/config.tcl -u projop -g projop

]project-open[ should take 15s to 60s to write out some ~40.000 lines before the line appears "[...] Notice: nssock: listening on".

Please check that the start-up takes at least 10 seconds and produces these ~40.000 lines of debugging output. Otherwise there will be only a few hundred lines. In this case please watch out for lines including "Error:" or "Warning:". 
In case you get an error "OpenACS could not allocate a handle from database pool pool1.", please see this page for additional instructions. 

Now point your favorite Web browser to http://localhost:8000/ and login as "" / "system". You should see the first page with the configuration wizard. Please do not continue here at the moment, because we still need to fix several issues before ]po[ will run as it should. 

You can stop the ]po[ server in the terminal with Ctrl-C.  


Automate NaviServer Startup

We now have to automate the startup of NaviServer (the application server of ]project-open[) for production use:

Create a new file /lib/systemd/system/projop.service with the following content:  


Description=NaviServer Web Server as user projop


ExecStartPre=rm -f /web/projop/log/
ExecStart=/usr/local/ns/bin/nsd -t /web/projop/etc/config.tcl -u projop -g projop
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s 9 $MAINPID

# Restart=on-abort
# Restart=on-abnormal



Please execute the following commands in order to activate the configuration:

systemctl daemon-reload
systemctl enable projop.service
systemctl start projop.service
You can check that NaviServer is running by monitoring it's error file (debugging is switched on by default): 

tail -f /web/projop/log/error.log 


Install nginx on Port 80

]project-open[ by default listens on port 8000 and for permission reasons can not listen on port 80. As a workaround you can install a “reverse proxy” server on port 80 that redirects HTTP requests to port 8000.

You can configure Apache for such a purpose, Apsis Pound or or the small Web server ngnix. Ngnix is part of the Red Hat/CentOS 7 distribution system and more convenient than apache2, so this is why we use it by default now. Ngnix is also convenient if you want to run more then one ]po[ or non-]po[ server on your machine, because it allows you to distribute HTTP requests to different back-ends, depending on the HTTP headers etc.

In order to install nginx we need to enable the "epel" repositories with experimental software for CentOS: 

apt-get install nginx
Assuming that there is no other process listening on port 80 (netstat -nlp | grep 80), please edit /etc/nginx/nginx.conf to look like this (modifying the "server {...}" section). Please create a copy of the original config before editing: 
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/;

events {
    worker_connections 1024;

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log          /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   601;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include             /etc/nginx/conf.d/*.conf;

    server {
        listen 80;
        location / {
            # pass all communication to NaviServer on port 8000
            proxy_pass ;
            # add information about the original IP
            proxy_set_header     X-Forwarded-For $remote_addr;
            # upload files to file storage up to 1G
            client_max_body_size 1024M;


Then please perform:

systemctl enable nginx
systemctl restart nginx
netstat -nlp | grep 80

You should now see nginx listening on port 80.

Now point your browser again to http://localhost/ and you should see ]po[ in action.

Configure Automatic Backups 

You can automate a daily ]po[ backup using our default export-dbs script.

Please copy the script (please follow the link for source code) into the file /root/bin/export-dbs.

Executing the following script will mark the backup script as executable, create default backup directories and execute the script:

mkdir /var/backup                                             # create a global backup directory
chown projop:postgres /var/backup                             # allow projop & PostgreSQL to write backups
chmod g+w /var/backup
mkdir /var/log/postgres                                       # create directory for DB related logs
chown postgres:postgres /var/log/postgres                     # allow projop & PostgreSQL to write
chmod g+w /var/log/postgres
chmod ug+x /root/bin/export-dbs # mark backup script as executable perl /root/bin/export-dbs # execute backup script
Automate the backup by adding the following lines to your crontab:
29 3 * * * /usr/bin/perl /root/bin/export-dbs > /var/log/postgres/export-dbs.log 2>&1
24 3 * * * /usr/bin/find /export/backup -name '*.tgz' -mtime +6 | xargs rm
25 3 * * * /usr/bin/find /export/backup -name '*.bz2' -mtime +6 | xargs rm

Fix GraphViz Configuration

GraphViz creates GIF and PNG images from textual descriptions. ]po[ uses GraphViz to visualize the state of workflows and similar purposes.

To fix/enable GraphViz, please create a symbolic link for the "dot" tool: 

cd /usr/local/bin/
ln -s /usr/bin/dot

Install and Test "Postfix" Email Server

]po[ by default uses Postfix to send out notification emails. To install please use: 

apt-get install postfix mailutils

You can test your email configuration by sending out a test email to yourself: 

echo "test email body" | mail -s "Test Email Subject" <>

Then have a look at the last lines of /var/log/maillog

tail -n 20 /var/log/mail.log

You may have to configure a Postfix "relayhost" pointing to your corporate SMTP server or simiar. Please check configure-external-smtp-server for more details.

Enable ]po[ Integration Links 

]project-open[ includes a long list of integration links with external systems including Microsoft Active Directory, SAP FI, SAP PS, Microsoft Navision NAV, SQL-Ledger, SugarCRM, vTiger, Atlassian Jira, TaskJuggler, OCS Inventory NG, CVS, SVN Subversion, Git, Email, and others. Most of these integration links use Perl and Perl libraries as interfaces. Therefore you will need to have working versions of a number of Perl modules installed on your system.

There are two steps necessary in order to install these Perl libraries: 

Install Most Perl Libraries via YUM

Most Perl libraries are available from the standard repositories: 

apt-get install libmime-tools-perl libpath-class-perl libio-socket-inet6-perl libio-socket-portstate-perl

Upgrade ]project-open[

Please see available updates. Please read the forum and other sources in order to see if it is necessary to upgrade. Please see the V5.0 release notes for information on known issues.

Integration With Other Systems 

Please see  for a list of supported integration links with other software packages.  



We have set up a discussion thread on SourceForge specifically about Debian Stretch: 




  Contact Us
  Project Open Business Solutions S.L.

Calle Aprestadora 19, 12o-2a

E-08907 Hospitalet de Llobregat (Barcelona)

 Tel Europe: +34 932 202 088
 Tel US: +1 415 429 5995