Overview
Describes how to set up and deploy the application to the WCI term-server.com server.
Details
- Log into the server 10.230.174.16
- 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, mysql-server-5.5, 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 d 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 Also edit /etc/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 script change to group to $TOMCAT_USER
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" environment variable to the application
- One way to do this is to invoke the java command with -Drun.config=/home/ihtsdo/data/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=/home/ihtsdo/data/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.
- Make sure you have MAVEN_OPTS set
- e.g. -XX:MaxPermSize=512m -Xmx3072m
- 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
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 mappingservicedb
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE mappingservicedbtest
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON mappingservicedb.* TO
'otf'
;
GRANT ALL ON mappingservicedbtest.* TO
'otf'
;
Get code
cd
mkdir code
cd code
git clone https:
//github.com/WestCoastInformatics/OTF-Mapping-Service.git .
#
switch
to dev branch -
for
UAT
git checkout develop
#
switch
to dev branch -
for
PROD
git checkout master
mvn -DskipTests=
false
clean install
Get data.
cd
mkdir data
git clone ssh:
//csfe.aceworkspace.net:29418/mapping data
mkdir data/doc
mkdir data/doc/archive
chmod -R ga+rwx data/doc
Prepare the tomcat indexes location
# To clean up the indexes
do
this
(as root)
/bin/rm -rf /var/lib/tomcat7/indexes
mkdir /var/lib/tomcat7/indexes
mkdir /var/lib/tomcat7/indexes/lucene
mkdir /var/lib/tomcat7/indexes/lucene/indexes
chmod -R ga+rwx /var/lib/tomcat7/indexes
chown -R ihtsdo /var/lib/tomcat7/indexes
chgrp -R ihtsdo /var/lib/tomcat7/indexes
# Ensure the config.properties file used to run the application has
this
setting
hibernate.search.
default
.indexBase=/var/lib/tomcat7/indexes/lucene/indexes
Create and Load the data
cd ~/code/admin/loader/scripts
load_prod.csh >&! load_prod.log
Note also that TreePositions will be automatically calculated when loading a terminology. To recompute SNOMED tree positions without reloading terminology, use:
cd ~/code/admin/loader
mvn -Drun.config=prod -P SNOMEDCT-treepos
Stop tomcat, clear cache,and remove the currently deployed .war files (and associated folders).
# Stop the tomcat7 server
service tomcat7 stop
/bin/rm -rf /var/lib/tomcat7/work/Catalina/localhost/mapping-rest
/bin/rm -rf /var/lib/tomcat7/webapps/mapping-rest
/bin/rm -rf /var/lib/tomcat7/webapps/ROOT
/bin/rm -rf /var/lib/tomcat7/webapps/mapping-rest.war
/bin/rm -rf /var/lib/tomcat7/webapps/ROOT.war
Update the database (this needs to go into the reload page):
mvn clean install -Drun.config=/home/ihtsdo/config/config.properties -Dhibernate.hbm2ddl.auto=update
Update file modification date to prevent caching issues.
cd ~/code
set date = `date +%Y%m%d%H%M`
touch -t $date `find . -name
"*"
`
Build Rest and deploy war
cd ~/code/rest
mvn -Drun.config=$OTF_MAPPING_CONFIG clean install
/bin/cp -f target/mapping-rest*war /var/lib/tomcat7/webapps/mapping-rest.war
Build Webapp war
cd ~/code/webapp
mvn -Drun.config=$OTF_MAPPING_CONFIG clean install
/bin/cp -f target/mapping-webapp*war /var/lib/tomcat7/webapps/ROOT.war
Start service and link "doc" directory.
service tomcat7 start
# wait
for
deploy to create the ROOT directory
sleep
5
# link doc directory
cd /var/lib/tomcat7/webapps/ROOT
ln -s /home/ihtsdo/data/doc
NOW, if deploying to PROD, create a github pull request.
Wire tomcat to redirect to the home URL. In the webapp root find the ROOT application and replace the index.html page. e.g.
NOTE: DO NOT do this step anymore as the application is now deployed as the root war<?xml version=
"1.0"
encoding=
"ISO-8859-1"
?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
<head>
<meta http-equiv=
"refresh"
content=
"0; url=/mapping-webapp/app/index.html#/"
/>
<title>IHTSDO Mapping Tool - redirect</title>
</head>
<Body>
</body>
</html>
Complete Data Load
- Get all data
- http://mapping.snomedtools.org/data/dev.zip (for dev data) - old
- http://mapping.snomedtools.org/data/prod.zip (for prod data) - old
Getting Backups from PROD to UAT
A daily backup tgz file exists on the prod server at
- /var/backup/data.tgz
Alternatively, you could log into the uat and use this command
sudo aws s3 ls mapping.backup.ihtsdo |
This will produce a list such as the following (just run):
2014-09-28 01:02:47 343656836 dbbackup_mappingservicedb_201409280100.bak.gz
2014-09-29 01:02:48 343750530 dbbackup_mappingservicedb_201409290100.bak.gz
2014-09-30 01:02:49 343867437 dbbackup_mappingservicedb_201409300100.bak.gz
2014-10-01 01:02:46 343892129 dbbackup_mappingservicedb_201410010100.bak.gz
2014-10-02 01:02:46 349749641 dbbackup_mappingservicedb_201410020100.bak.gz
2014-10-03 01:04:15 349779484 dbbackup_mappingservicedb_201410030100.bak.gz
Choose the backup you want to copy (it keeps the most recent 6 days) and do the following (this example taking the most recent backup):
sudo aws s3 cp s3: //mapping.backup.ihtsdo/dbbackup_mappingservicedb_201410030100.bak.gz ~/ |
This will copy to ~/ (or wherever you want by changing that location at the end of the command). Then gunzip the file.