Overview
Describes how to set up and deploy the application to the umls.terminology.tools server.
Diagram
Details
- Log into the server a.terminology.tools or b.terminology.tools
- You'll need to be able to sudo su - to root and ec2-tomcat.
- You'll need to be able to sudo su - to root and ec2-tomcat.
- Install and configure software as root (nginx, tomcat7 (and webapps), mysql-server-5.5 (and client), Java/jdk (including devel), maven, git, svn, etc.
Edit the /etc/init.d script to comment out the top part that forces running as root
Edit the /etc/init.d script to use this so the ec2-user can write the pid file:
CATALINA_PID=
"/var/lib/tomcat7/$NAME.pid"
# also change all instances of /var/run to /var/lib/tomcat7
Set permissions of the tomcat installation to the "ec2-tomcat"user:
#
for
each linked directory in /usr/share/tomcat7 (and /var/log/tomcat7)
chown -R ec2-tomcat $dir
chgrp -R ec2-user $dir
Edit /etc/init.d/tomcat7 to use the following
* TOMCAT_USER=ec2-tomcat
* TOMCAT_GROUP=ec2-user
* Change all occurences of the .pid file to "/var/lib/tomcat7/tomcat7.pid"
Also edit /etc/tomcat7/tomcat7.conf
* CATALINA_PID=/var/lib/tomcat7/tomcat7.pid
* TOMCAT_USER=ec2-tomcat
* TOMCAT_GROUP=ec2-user
Make sure all the
"chown"
commands in the /etc/init.d/tomcat7 script change to group to $TOMCAT_GROUP
NOTE: the tomcat user can start/stop the server with "/usr/sbin/tomcat7 start/stop".
HOWEVER: if the process was started by root, it will likely have to be killed by root first.. we're working on this.
- Tomcat must be configured to pass "run.config.umls" environment variable to the application
- One way to do this is to invoke the java command with -Drun.config.umls=~/config/config.properties
(e.g. edit this in /usr/share/tomcat7/conf/tomcat7.conf and add to JAVA_OPTS) - Also add -Xmx2500M to JAVA_OPTS in the tomcat startup script.
- NOTE: development environments must also be configured as such
- One way to do this is to invoke the java command with -Drun.config.umls=~/config/config.properties
- Tomcat must be configured to support POST requests of size > 2MB
- Edit server.xml and add maxPostSize="50000000" to each <Connector> element.
- Edit server.xml and add maxPostSize="50000000" to each <Connector> element.
- Tomcat must be configured to support following of links. Make sure any Context tags in the configuration contain allowLinking="true".
- Edit context.xml to add this parameter to the Context tag.
- Edit context.xml to add this parameter to the Context tag.
To enable tomcat manager, add this to tomcat-users.xml file:
<role rolename=
"manager-gui"
/>
<user name=
"tomcat"
password=
"********"
roles=
"manager-gui"
/>
<role rolename=
"protected"
/>
- Nginx Configuration
- Install the SSL keys as root in the appropriate places (if SSH needed)
- Add a file "snomed.term-server.com.conf" to /etc/nginx/conf.d
Add a Valve to tomcat to handle proxy headers:
<Valve className=
"org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader=
"x-forwarded-for"
remoteIpProxiesHeader=
"x-forwarded-by"
protocolHeader=
"x-forwarded-proto"
/>
- Edit
/etc/nginx/nginx.conf
and add "client_max_body_size 50M;" to the "http" context. - /etc/nginx/nginx.conf contains the master configuration - see for details
- For more info click here
MySQL Configuration
When configuring the database URL in config.properties, use ?autoconnect=true to avoid connection issues
Also (as root) edit the my.cnf file for your platform and add this to the mysqld section:
[mysqld]
...
wait_timeout =
230400
interactive_timeout =
230400
It may also be worth considering using the innodb table per file option:
[mysqld]
...
innodb_file_per_table
This is useful to better manage the overall size of the database because individual tables can then be optimized rather than having to dump/reload the entire database.
Consider other optimizations to mysql parameters (e.g. http://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/).
As the MySQL root user, create an OTF user with the mysql client:
CREATE USER
'otf'
@
'localhost'
IDENTIFIED BY
'otfpwd'
;
GRANT ALL privileges ON *.* TO
'otf'
@
'localhost'
;
As the MySQL root user, create a database in the mysql client:
CREATE DATABASE umlsdb
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE umlsdbtest
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON umlsdb.* TO
'otf'
;
GRANT ALL ON umlsdbtest.* TO
'otf'
;
Create "code", "config", and "data" directories
~/code - for the code
~/data - for the data files (only needed on initial load)
~/config - for the configuration files and configurable admin scripts:
cd
mkdir code
mkdir data
mkdir config
Get code:
cd ~/code
git clone https:
//https://github.com/WestCoastInformatics/UMLS-Terminology-Server.git .
Prepare the environment (set your shell up with these ENV variables):
JAVA_HOME=/usr/lib/jvm/jre-
1.7
.
0
-openjdk.x86_64
MAVEN_OPTS=
"-XX:MaxPermSize=512m -Xmx3000M"
Build all of the code, making sure to choose the correct "config.artifactId" for your environment. Shown is "prod" configuration:
cd ~/code
mvn -Dconfig.artifactId=term-server-config-prod clean install
Prepare the data:
cd ~/data
unzip ~/code/config/term-server-config.*.zip
Prepare the tomcat indexes location:
# To clean up the indexes
do
this
(as root)
/bin/rm -rf /var/lib/tomcat7/indexes/umls
mkdir /var/lib/tomcat7/indexes/umls
chmod -R ga+rwx /var/lib/tomcat7/indexes/umls
chown -R ec2-tomcat:ec2-user /var/lib/tomcat7/indexes/umls
# Ensure the config.properties file used to run the application has
this
setting
hibernate.search.
default
.indexBase=/var/lib/tomcat7/indexes/umls
Unpack the config artifact corresponding to your environment The example shown below is for "prod".
cd ~/config
unzip ~/code/config/prod/target/term-server-config-prod.*.zip
Edit the configuration file and scripts.
Edit config.properties and replace the "EDIT_THIS" entries with real values (mostly passwords, etc).
Edit the mail notification settings to list email addresses of those admins or maintenance staff that should be notified of errors and/or automation outcomes.
Edit the scripts in bin/ as needed for this environment (default setup requires no changes).|
Edit the load script for your environment. Run it to load the data:
cd ~/config/bin
chmod
775
*sh
./load.csh >&! load.log
Deploy war:
/bin/cp -f ~/code/rest/target/term-server-rest*war /var/lib/tomcat7/webapps/term-server-rest.war
Start service:
service tomcat7 start
Run the integration tests (only do this if you know what you're doing):
cd
cd code/integration-test
mvn -DskipTests=
false
-Drun.config.umls.test=~/config/config-test.properties test
References/Links
- n/a