Launch PeakForest WebApps from a Docker container
Documentation for Docker / required image
All informations about Docker (how to install, launch, troubleshot, ...) can be found on the official website - https://docs.docker.com/.
Download the latest PeakForest docker image metabohub/peakforest.
PeakForest files to fetch and filesystem
You need the following folders on your host machine:
- a
webappsone, that contains all PeakForest war files plus thepeakforest-rest-X.Y.Z.jarjar file - a
dataone that contains the following folders:cpd-numbered⇒ contains PNG and MOL file of compounds with a number flag on some atoms (used for NMR spectra peaklist annotation)json⇒ contains json formatted file used by the main webapp to store informationsmol⇒ contains MOL files of compounds (managed by main webapp)nmr_spectra⇒ contains raw NMR spectra representationspng⇒ contains PNG files of compounds (managed by main webapp)svg⇒ contains SVG files of compounds (managed by main webapp)
- two
log-pfandlog-tomcatdirectories to store both PeakForest and Tomcat logs
If you launch the docker on a unix filesystem, make sur that the docker container can read / write data into the logs and data directories.\ On our server the user/group IDs that needed to write files on the host got the ids 102 and 103.
Database configuration
The database configuration can be found here - section 'Database install and configuration'.
You need to edit the hibernate configuration to match this database server IP or DNS entry.
<!-- JDBC Database connection settings --> <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/peakforest?useSSL=false&serverTimezone=UTC</property> <property name="connection.username">peakforest</property> <property name="connection.password">peakforest</property>
This hibernate files can be found in the main webapp & rest-v1 war files and in the rest-v2 jar file.\ (you can edit then in the war/jar directly)
Run PeakForest docker container
The -d option run the container as a deamon.
Define the following variable in you bash
port_webapps⇒ the host socket for the tomcat/webapp port forwarding (e.g.:port_webapps=8042)port_rest⇒ the socket the the rest-v2 app port forwarding (e.g.:port_rest=9042)path_webapps⇒ webapps directory folder forwarding (e.g.:path_webapps=/path/to/webapps)path_data⇒ data directory folder forwarding (e.g.:path_webapps=/path/to/data)path_log-pf⇒ PeakForest Log directory folder forwarding (e.g.:path_webapps=/path/to/log-pf)path_log-tomcat⇒ Tomcat directory folder forwarding (e.g.:path_webapps=/path/to/log-tomcat)container_name⇒ the container name / flaglog_file⇒ the optional folder where to keep a log trace of the docker container output (e.g.:log_file=/path/to/docker-container-logsorlog_file="/dev/null 2>&1"to not keep them)
(or edit the next launch command line and replace them directly in it)
docker run \ -d \ -p $port_webapps:8080 \ -p $port_rest:8090 \ -v $path_webapps:/var/lib/tomcat7/webapps \ -v $path_data:/peakforest/data \ -v $path_log-pf:/peakforest/logs \ -v $path_log-tomcat:/var/lib/tomcat7/logs \ --name $container_name \ --restart unless-stopped \ metabohub/peakforest:latest >> $log_file
Optional: use an Apache proxy
You can install and configure apache to redirect all webapp behind the same host/socket.
This configuration require the proxy_module, mod_headers apache modules
# PROXY CONF for WebApps ProxyRequests Off ProxyPreserveHost On ProxyPass / http://localhost:8042/ ProxyPassReverse / http://localhost:8042/ <Proxy *> Order deny,allow Allow from all </Proxy> <Location /> ## optional: you can add an authentication/authorization # Require all denied # Require ip 192\. ## container docker # Require ip 172.17.0 </Location> <Location /doc-v2/openapi-yaml/> Header set Access-Control-Allow-Origin "*" </Location> # PROXY CONF for REST-V2 <Location /rest/v2/> # header cors Header set Access-Control-Allow-Headers "*" Header set Access-Control-Allow-Origin "*" Header set Access-Control-Request-Method "*" # docker proxy ProxyPass http://localhost:9042/ ProxyPassReverse http://localhost:9042/ </Location>
Note: we also use apache for the SSL configuration that allow us to access to the webapps using HTTPS.