System Installation

Source code

If you have access the source code can be obtained by cloning from http://ac-software.tugraz.at/git/acnmr.git:

git clone http://ac-software.tugraz.at/git/acnmr.git

Dependencies

To run an instance of the ACNMR Server you need the following prerequisites.

  • A web server that can host WSGI apps.
    • apache
    • gunicorn
  • sqlite.

  • Couchdb

  • Python with modules

User authentication is not handled on flask level. For user authentication the authentication has to be provided by the web server e.g. simple authentication or some kind of single-sign-on system.

WSGI Config

The configuration of the ACNMR server is done by an WSGI file. This file has to be provided to the web server to tell what code should be executed and with which environment.

import sys,os
# The working directory of the app
HOME='/home/appadmin/acnmrdev'
sys.path.insert(0, HOME)
# add RDKit dir to python path
sys.path.insert(0, '/opt/RDKit_2014_09_1')

# this is used to sign cookies should be  random string that is kept secret
os.environ['SINMRSESSTOKEN']= '17486e6e'
# environment variabled that are needet for RDKit to work
os.environ['RDBASE']='/opt/RDKit_2014_09_1/'
# couchdb connection data
os.environ['COUCHDBNAME']='acnmr'
os.environ['COUCHDBURL']='http://127.0.0.1:5984/'
os.environ['COUCHUSER']='username'
os.environ['COUCHSECRET']='secret'
# name of the sqlite database file
os.environ['DATABASE']='NMR.db'
# An alternative title tag
os.environ['APPTITLE']='Sandbox'
# username of the superuser. There must be one, or no one can add other users
os.environ['ACNMROWNER']="superuser"
# change directory
os.chdir(HOME)
# get the changes monitor module
import acnmr.couchchanges   as couchchanges
# start changes monitor process
couchchanges.start()
# import the app module that will be run by the WSGI container
from acnmr.server import app as application

Configure Apache

Apache is not the fastest web server, but it offers a wide variety of authentication abilities and therefore it is the web server we choose.

Set global environment variables for RDkit

In order for the RDKit module to find the dynamic libraries one must set the library path environment variable. This cannot be set in the WSGI file but must be set in the Apache environment variables section.

Add the location where your installation of RDKit resides to the Apache envvars file, or where appropriate:

export LD_LIBRARY_PATH=/opt/RDKit_2014_09_1/lib

Configure Apache Virtual Host

As the traffic might go through the Internet and you will have some kind of authentication HTTPS is pretty much mandatory. Here is an example configuration for apache2 to setup a virtual host for HTTPS.

<VirtualHost    ac-appserver.tugraz.at:443>
   ServerAdmin christian.meisenbichler@tugraz.at
   ServerName      ac-appserver.tugraz.at
   ErrorLog /var/log/apache2/acnmrdev-error.log
   CustomLog /var/log/apache2/acnmrdev-access.log combined
   # set the WSGI variables
   WSGIDaemonProcess acnmrdev user=appadmin group=appadmin threads=1
   WSGIScriptAlias / /home/appadmin/acnmrdev.wsgi
   # working directory
   <Directory /home/appadmin/acnmrdev/>
      WSGIProcessGroup acnmrdev
      WSGIScriptReloading On
      LimitRequestBody 0
   </Directory>
   # you really must use SSL
   SSLEngine On
   SSLCertificateFile /etc/apache2/ssl/crt/ac-appserver.tugraz.at.pem
   SSLCertificateKeyFile /etc/apache2/ssl/key/ac-appserver.tugraz.at.key
   SSLCertificateChainFile  /etc/apache2/ssl/chain-5955-shib-test.tugraz.at.pem
   AllowEncodedSlashes On
   ProxyRequests Off
   KeepAlive Off


   <Location />
      SSLRequireSSL On
      SSLVerifyClient Off
      SSLVerifyDepth 1
      SSLOptions +StdEnvVars +StrictRequire
      WSGIProcessGroup acnmrdev
      SSLRenegBufferSize 104860000
      WSGIPassAuthorization On
      # example configuration to use HTTP basic auth
      AuthType Basic
      AuthName "Authentication Required"
      AuthUserFile "/etc/htpasswd"
      Require valid-user
      Order allow,deny
      Allow from all
   </Location>
</VirtualHost>