diff options
Diffstat (limited to 'docker')
-rw-r--r-- | docker/Dockerfile | 63 | ||||
-rwxr-xr-x | docker/start.sh | 12 | ||||
-rw-r--r-- | docker/swagger.html | 107 |
3 files changed, 182 insertions, 0 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..b7ba3c1 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,63 @@ +FROM archlinux/base +MAINTAINER in-silico toxicology Gmbh + +RUN pacman-db-upgrade +RUN pacman -Syyu --noconfirm +RUN pacman -S --noconfirm \ + base-devel \ + boost-libs \ + cmake \ + eigen3 \ + fontconfig \ + gcc-fortran \ + git \ + gsl \ + jre10-openjdk-headless \ + r \ + ruby \ + swig \ + python-pip \ + catdoc \ + wget +RUN pacman -Scc --noconfirm + +RUN R -e "install.packages('Rserve', repos='http://rforge.net/')" +RUN pip install xlsx2csv + +# install lazar-gui gem +RUN echo 'gem: --no-document' > /etc/gemrc +RUN gem install lazar-gui + +RUN useradd -ms /bin/bash ist + +USER ist +WORKDIR /home/ist +RUN mkdir data +# mongodb has been removed from main repositories, AUR installation +RUN mkdir src +WORKDIR /home/ist/src +RUN wget https://aur.archlinux.org/cgit/aur.git/snapshot/mongodb-bin.tar.gz +RUN tar -xvzf mongodb-bin.tar.gz +WORKDIR /home/ist/src/mongodb-bin +RUN makepkg -s --noconfirm + +# rest api swagger gui +WORKDIR /home/ist +RUN git clone https://github.com/swagger-api/swagger-ui.git +COPY swagger.html /home/ist/swagger-ui/dist/index.html + +# start script +COPY start.sh /home/ist/start.sh + +# mongodb installation requires root +USER root +RUN pacman -U --noconfirm /home/ist/src/mongodb-bin/mongodb-bin*.pkg.tar.xz + +# swagger links +RUN ln -s /home/ist/swagger-ui/dist/swagger-ui-bundle.js $(gem which "lazar-gui"|sed 's#/lib/lazar-gui.rb/##')/public/swagger-ui-bundle.js +RUN ln -s /home/ist/swagger-ui/dist/swagger-ui-standalone-preset.js $(gem which "lazar-gui"|sed 's#/lib/lazar-gui.rb/##')/public/swagger-ui-standalone-preset.js +RUN ln -s /home/ist/swagger-ui/dist/swagger-ui.css $(gem which "lazar-gui"|sed 's#/lib/lazar-gui.rb/##')/public/swagger-ui.css + +USER ist +RUN rm -r /home/ist/src +ENTRYPOINT ["/home/ist/start.sh"] diff --git a/docker/start.sh b/docker/start.sh new file mode 100755 index 0000000..07fefde --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# start basic services +mongod --bind_ip 127.0.0.1 --dbpath ~/data & +R CMD Rserve --vanilla & + +# import data +ruby -e "require 'lazar'; include OpenTox; Import.public_data if Model::Validation.all.empty?" + +# start lazar service +cd $(gem which lazar-gui|sed 's#/lib/lazar-gui.rb/##') +unicorn -p 8088 -E production diff --git a/docker/swagger.html b/docker/swagger.html new file mode 100644 index 0000000..239e4f1 --- /dev/null +++ b/docker/swagger.html @@ -0,0 +1,107 @@ +<!-- HTML for static distribution bundle build --> +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8"> + <title>Swagger UI</title> + <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet"> + <link rel="stylesheet" type="text/css" href="./swagger-ui.css" > + <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" /> + <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" /> + <style> + html + { + box-sizing: border-box; + overflow: -moz-scrollbars-vertical; + overflow-y: scroll; + } + + *, + *:before, + *:after + { + box-sizing: inherit; + } + + body + { + margin:0; + background: #fafafa; + } + </style> + </head> + + <body> + <div id="swagger-ui"></div> + + <script src="./swagger-ui-bundle.js"> </script> + <script src="./swagger-ui-standalone-preset.js"> </script> + <script> + window.onload = function() { + + // Build a system + var base_url = window.location.origin; + var swagger_url = base_url + "/api/api.json"; + const ui = SwaggerUIBundle({ + url: swagger_url, + dom_id: '#swagger-ui', + deepLinking: true, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], + layout: "StandaloneLayout" + }) + + window.ui = ui; + document.getElementsByClassName('topbar')[0].style.backgroundColor = "#fafafa"; + document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].alt = "IST"; + document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].src = "./IST_logo_s.png"; + document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].width = "90"; + document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].height = "35"; + document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].style.marginRight = "20px"; + document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('span')[0].innerHTML = "lazar-rest-api"; + }; + + // add link for docs + setTimeout(function() { + var base_url = window.location.origin; + var section = document.getElementsByClassName("info")[0]; + var node = document.createElement("docs"); + var heading = document.createElement('h2'); + var headingtext = document.createTextNode("Documentation"); + var link = document.createElement('a'); + var linktext = document.createTextNode("See curl examples for a typical workflow."); + heading.appendChild(headingtext); + link.appendChild(linktext); + link.title = "curl examples"; + link.href = "https://github.com/OpenRiskNet/home/blob/master/openshift/deployments/lazar#curl-examples"; + link.target = "javascript:void(0);"; + node.appendChild(heading); + node.appendChild(link); + section.appendChild(node); + }, 1000); + // add link for gui + setTimeout(function() { + var base_url = window.location.origin; + var section = document.getElementsByClassName("info")[0]; + var node = document.createElement("gui"); + var heading = document.createElement('h2'); + var headingtext = document.createTextNode("Lazar Graphical User Interface"); + var link = document.createElement('a'); + var linktext = document.createTextNode("Lazar (GUI)"); + heading.appendChild(headingtext); + link.appendChild(linktext); + link.title = "GUI link"; + link.href = base_url = "/predict"; + link.target = "javascript:void(0);"; + node.appendChild(heading); + node.appendChild(link); + section.appendChild(node); + }, 1000); + </script> + </body> +</html> |