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
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>