Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Describes how to set up and deploy the application to the IHSTDO WCI term-server.com server.

Details

  1. Log into the server 162server 10.243230.215174.7616
    1. You'll need the ihtsdo user password (uat3#Map for UAT, prod3#Map for prod)to be able to sudo su - to root and ec2-tomcat.

  2. Install and configure software as root (nginx,tomcat7, libapache2_mod_jk, mysql-server-5.5, maven, git, svn, etc)
  3. You'll need the root user password
  4. .
    1. Edit the /etc/init.d script to comment out the top part that forces running as root

    2. Edit the /etc/init.d script to use this so the ec2-user can write the pid file:

       

      Code Block
      CATALINA_PID="/var/lib/tomcat7/$NAME.pid"
      
      # also change all instances of /var/run to /var/lib/tomcat7 
    3. Set permissions of the tomcat installation to the "ihtsdoec2-tomcat"user

       

       
      chown -R ihtsdo /var/log/tomcat7
      chgrp -R ihtsdo /var/log/tomcat7
      chown -R ihtsdo /var/cache/tomcat7
      chgrp -R ihtsdo /var/cache/tomcat7
      chown -R ihtsdo  /var/lib/tomcat7
      chgrp -R ihtsdo  /var/lib/tomcat7
       
      Edit
      Code Block
      # 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
      
      *
      TOMCAT7
       TOMCAT_USER=
      ihtsdo
      * TOMCAT7_GROUP=ihtsdo
       
      Edit /etc/default/tomcat7
      * TOMCAT7_USER=ihtsdo
      * TOMCAT7_GROUP=ihtsdo
      ** This must be done while tomcat is NOT running.
      See ~root/README.txt
      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. 

       

  5. Tomcat must be configured to pass "run.config" environment variable to the application
    1. One way to do this is to invoke the java command with -Drun.config=/home/ihtsdo/data/config.properties
      (e.g. edit this in /etc/init.dusr/share/tomcat7/conf/tomcat7.conf and add to JAVA_OPTS)
    2. Also add -Xmx2500M to JAVA_OPTS in the tomcat startup script.
    3. NOTE: development environments must also be configured as such

  6. Tomcat must be configured to support POST requests of size > 2MB
    1. Edit server.xml and add  maxPostSize="50000000" to each <Connector> element.

  7. Tomcat must be configured to support following of links.  Make sure any Context tags in the configuration contain  allowLinking="true".
    1. Edit context.xml to add this parameter to the Context tag.

  8. Make sure you have MAVEN_OPTS set 
    1. e.g. -XX:MaxPermSize=512m -Xmx3072m
  9. Nginx Configuration
    1. Install the SSL keys as root in the appropriate places
    2. Edit /etc/nginx/sites-available/mapping.ihtsdotools.org (see the webapp/src/main/nginx directory for configurations).
    3. Link /etc/nginx/sites-enabled/mapping.ihtsdotools.org to the file above(if SSH needed)
    4. Add a file "snomed.term-server.com.conf" to /etc/nginx/conf.d
    5. Add a Valve to tomcat to handle proxy headers.

      Code Block
              <Valve className="org.apache.catalina.valves.RemoteIpValve"
                     remoteIpHeader="x-forwarded-for"
                     remoteIpProxiesHeader="x-forwarded-by"
                     protocolHeader="x-forwarded-proto"/>
    6. Edit /etc/nginx/nginx.conf and add "client_max_body_size 50M;" to the "http" context.
    7. See the attachment for more details/etc/nginx/nginx.conf contains the master configuration - see for details
    8. For more info click here
       
  10. 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';
  11. 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';
  12. Get code

     

    cd
    mkdir code
    cd code
     
    # switch to dev branch - for UAT
    git checkout develop
     
    # switch to dev branch - for PROD
    git checkout master
     
    mvn -DskipTests=false clean install
  13. 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
  14. 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

     



  15. 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
  16. 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
  17. 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
  18. Update file modification date to prevent caching issues.

     

    cd ~/code
    set date = `date +%Y%m%d%H%M`
    touch -t $date `find . -name "*"`
  19. 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
  20. 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
  21. 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
  22. NOW, if deploying to PROD, create a github pull request.

  23. 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"
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="refresh" content="0; url=/mapping-webapp/app/index.html#/" />
        <title>IHTSDO Mapping Tool - redirect</title>
    </head>
    <Body>
    </body>
    </html>

...