diff --git a/.gitignore b/.gitignore index 0a8df84f..f36087e6 100644 --- a/.gitignore +++ b/.gitignore @@ -205,6 +205,7 @@ nbactions.xml **/api.key **/updateHistory.json /web-app/fiboMapper/fibo/** +.env # Protege @@ -215,7 +216,8 @@ catalog-v001.xml docker/runtime/ lucene_index/ download/ -onto-viewer-web-app/config/ +onto-viewer-web-app/config/* +onto-viewer-web-app/ontologies/* # Mac .DS_Store \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..619a3eab --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM maven:3.8.1-jdk-11-openj9 AS build-onto-viewer +SHELL ["/bin/bash", "-c"] +RUN apt-get update && \ + apt-get -y install curl unzip zip && \ + mkdir -p /opt/develop +WORKDIR /opt/develop +COPY . /opt/develop/ +RUN mvn clean package && cp -av onto-viewer-web-app/target/onto-viewer-web-app-*.war /onto-viewer-web-app.war + +FROM adoptopenjdk/openjdk11-openj9:alpine-slim +ARG ONTPUB_FAMILY=dev UPDATE_URL +ENV ONTPUB_FAMILY="${ONTPUB_FAMILY}" UPDATE_URL="${UPDATE_URL}" +RUN apk --no-cache add --upgrade bash curl jq && \ + install -d /opt/viewer/config +WORKDIR /opt/viewer +COPY ./onto-viewer-web-app/entrypoint.sh /opt/viewer/entrypoint.sh +COPY ./onto-viewer-web-app/integration_tests/ontologies /opt/viewer/ontologies +COPY ./onto-viewer-web-app/staticOntologies /opt/viewer/staticOntologies +COPY --from=build-onto-viewer /onto-viewer-web-app.war /opt/viewer/onto-viewer.war +CMD ["sh", "entrypoint.sh"] +HEALTHCHECK --start-period=60s --interval=15s --timeout=1s --retries=60 CMD test "$(curl -q http://localhost/${ONTPUB_FAMILY}/ontology/actuator/health | jq -e ".components.custom.details.INITIALIZATION_DONE")" = "true" \ No newline at end of file diff --git a/README.md b/README.md index 6dee6ad3..784428fd 100644 --- a/README.md +++ b/README.md @@ -30,97 +30,91 @@ java -jar app-v-0.1.0.war ``` +## Run with docker +Requirements: +- [git](https://git-scm.com/) ([install](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)) +- [docker](https://www.docker.com/) - install: + * [Docker Desktop](https://docs.docker.com/desktop/) or ... + * [Docker Engine](https://docs.docker.com/engine/) with [Docker Compose plugin](https://docs.docker.com/compose/) + +### ... with FIBO + +How to start: +Clone the [edmcouncil/onto-viewer](https://github.com/edmcouncil/onto-viewer) repository to the *onto-viewer* directory, +go to the *onto-viewer* directory (run all subsequent commands inside this directory), +then build the images (or pull from the registry if available) and run the containers: +```bash +# clone the repository +git clone https://github.com/edmcouncil/onto-viewer onto-viewer + +# got to the onto-viewer directory +cd onto-viewer + +# build images +docker compose build +# alternatively pull images from registry if available +#docker compose pull --ignore-pull-failures + +# run the containers +docker compose up -d +``` - ## Running in Docker +After some time, check the status of running containers: +``` +docker compose ps +``` +if they work correctly, the following message will appear: +``` +NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS +onto-viewer-fibo-pages-1 edmcouncil/fibo-pages:latest "docker-entrypoint.s…" fibo-pages 7 minutes ago Up 6 minutes (healthy) +onto-viewer-fibo-strapi-1 edmcouncil/fibo-strapi:latest "docker-entrypoint.s…" fibo-strapi 7 minutes ago Up 6 minutes (healthy) +onto-viewer-fibo-viewer-1 edmcouncil/onto-viewer:latest "sh entrypoint.sh" fibo-viewer 7 minutes ago Up 6 minutes (healthy) +onto-viewer-spec-1 edmcouncil/spec:latest "/docker-entrypoint.…" spec 7 minutes ago Up 6 minutes (healthy) 0.0.0.0:8080->80/tcp, :::8080->80/tcp -To run the application using Docker you have to install Docker and docker-compose on your local computer. To install Docker see [here](https://docs.docker.com/get-docker/) and to install docker-compose see [here](https://docs.docker.com/compose/install/). +``` -1. Create onto-viewer-web directory next to onto-viewer root folder. -2. Install Strapi with the development database in the root directory. To this end, run `npx create-strapi-app@latest strapi-dashboard --quickstart --no-run`command. -3. Copy files and folders from html-pages repository: -- `html-pages/general/strapi/.tmp/` > `strapi-dashboard/.tmp/` -- `html-pages/general/strapi/src/` > `strapi-dashboard/src/` -- `html-pages/general` > `onto-viewer-web/` -- `html-pages/general/strapi/Dockerfile` > `strapi-dashboard/Dockerfile` -- `onto-viewer/docker/web/.dockerignore` > `strapi-dashboard/.dockerignore` -- `onto-viewer/docker/web/nuxt.config.js` > `onto-viewer-web/nuxt.config.js` -- `onto-viewer/docker/web/Dockerfile` > `onto-viewer-web/Dockerfile` -4. In the `onto-viewer/docker/runtime/server/` folder, you must put configuration and ontologies files. You can find samples of these files in the `onto-viewer-config-loader/src/main/resources`. Note that the `onto-viewer/docker/runtime/ `folder is excluded from Git, so you can freely put there any file you want. -The final folder system should look like shown below: +The services provide endpoints at the following URLs: +- [http://localhost:8080](http://localhost:8080) :- [html-pages home page](https://github.com/edmcouncil/html-pages/blob/develop/home/README.md) +- [http://localhost:8080/fibo](http://localhost:8080/fibo) :- [html-pages general template](https://github.com/edmcouncil/html-pages/tree/develop/general) for [FIBO](https://github.com/edmcouncil/fibo) ontology +- [http://localhost:8080/fibo/ontology](http://localhost:8080/fibo/ontology) :- onto-viewer for [FIBO](https://github.com/edmcouncil/fibo) ontology +- [http://localhost:8080/fibo/strapi/admin](http://localhost:8080/fibo/strapi/admin) :- [Strapi admin panel](https://docs.strapi.io/user-docs/intro#accessing-the-admin-panel) for for [FIBO](https://github.com/edmcouncil/fibo) ontology (Email: *edmc-strapi@dev.com*, Password: *devDBonly1*) -``` -onto-viewer -| .gitignore -| CHANGELOG.md -| CODE_OF_CONDUCT.md -| CONTRIBUTING.md -| DCO -| docker-compose.yaml -| LICENSE -| pom.xml -| README.md -| api-doc/ -| docker/ -| | init-onto-viewer.sh -| runtime/ -| | server/ -| | config <- config files go here -| | ontologies <- ontologies go here -| server -| | Dockerfile -| web -| | nuxt.config.js -| onto-viewer-config-loader -| onto-viewer-core -| onto-viewer-toolkit -| onto-viewer-web-app -| style -onto-viewer-web <- installed and configured general tempaltes from general directory -| .dockerignore -| ... -| Dockerfile -| jsconfig.json -| nuxt.config.js -| ... -| api -| ... -| store -| strapi -strapi-dashboard <- installed and configured Strapi -| .dockerignore -| ... -| Dockerfile -| favicon.png -| package-lock.json -| package.json -| README.md -| yarn.lock -| .tmp/ -| config/ -| database/ -| public/ -| src/ -``` - -Then, from the `onto-viewer/` folder run the following command to start the applications: +### ... with an ontology of your choice -``` -docker-compose up --build -d -``` -To list applications that have started, use ```docker-compose ps```. +It is possible to run containers with any ontology (instead of `FIBO`): +- place the ontology files of your choice in the `onto-viewer-web-app/ontologies` subdirectory + and the config files in the `onto-viewer-web-app/config` subdirectory -Please note that it takes a while to for all services to start depending on how many ontologies you provided. +- using the `docker-compose.dev.yaml` compose file (instead of the default `docker-compose.yaml`), + build the images,then run the containers: + ```bash + echo COMPOSE_FILE=docker-compose.dev.yaml >> .env + docker compose build + docker compose up -d + ``` -After all ontologies are loaded, the Onto viewer will be accessible from http://localhost:3000/dev/ontology. + once all services are up and running, onto-viewer with your ontology will be available at `http://localhost:8080/dev/ontology` -To stop the applications run: +If you want to see the logs use: +```bash +# to view continuous log output for =fibo-viewer +docker compose logs --follow fibo-viewer +# to view *100* latest log lines for =fibo-viewer +docker compose logs --tail 100 fibo-strapi ``` -docker-compose down + +Stop the services with the command: +```bash +docker compose down ``` +Remove all images and volumes with the command: +```bash +docker compose down --rmi all -v +``` # Contributing Please read [CONTRIBUTING.md](CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) for details on our code of conduct, and the process for submitting pull requests to us. @@ -138,10 +132,3 @@ mvn -P integration-tests verify # License [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) - - - diff --git a/docker-compose.dev.yaml b/docker-compose.dev.yaml new file mode 100644 index 00000000..725fe368 --- /dev/null +++ b/docker-compose.dev.yaml @@ -0,0 +1,51 @@ +services: + dev-strapi: + image: edmcouncil/dev-strapi:${HTML_BRANCH:-latest} + build: + context: https://github.com/edmcouncil/html-pages.git#${HTML_BRANCH:-develop}:general/strapi + args: + - ONTPUB_FAMILY=dev + - BRANCH_NAME=${HTML_BRANCH:-develop} + volumes: + - spec_root:/opt/html-pages + dev-pages: + image: edmcouncil/dev-pages:${HTML_BRANCH:-latest} + build: + context: https://github.com/edmcouncil/html-pages.git#${HTML_BRANCH:-develop}:general + args: + - ONTPUB_FAMILY=dev + - BRANCH_NAME=${HTML_BRANCH:-develop} + environment: + - STRAPI_URL=http://dev-strapi:1337 + volumes: + - spec_root:/opt/html-pages + depends_on: + - dev-strapi + dev-viewer: + image: edmcouncil/onto-viewer:${TAG:-latest} + build: + context: . + environment: + - ONTPUB_FAMILY=dev + volumes: + - ./onto-viewer-web-app/ontologies:/opt/viewer/ontologies + - ./onto-viewer-web-app/config:/opt/viewer/config + spec: + image: edmcouncil/spec:${HTML_BRANCH:-latest} + build: + context: https://github.com/edmcouncil/html-pages.git#${HTML_BRANCH:-develop}:home + args: + - BRANCH_NAME=${HTML_BRANCH:-develop} + environment: + - FAMILY_REGEX=dev + volumes: + - spec_root:/opt/html-pages + depends_on: + - dev-strapi + - dev-pages + - dev-viewer + ports: + - 8080:80 + +volumes: + spec_root: diff --git a/docker-compose.yaml b/docker-compose.yaml index 541a9969..b7beca36 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,49 +1,49 @@ -# For this docker-compose.yaml file to work, the following folder outline is required: -# -# aRootDir/ -# onto-viewer/ (https://github.com/edmcouncil/onto-viewer) -# docker-compose.yaml <- this file -# ... -# html-pages/ (https://github.com/edmcouncil/html-pages) -# ... - -version: "3.8" - services: - onto-viewer-server: - container_name: onto-viewer-server + fibo-strapi: + image: edmcouncil/fibo-strapi:${HTML_BRANCH:-latest} build: - context: . - dockerfile: ./docker/server/Dockerfile - ports: - - "6101:8080" + context: https://github.com/edmcouncil/html-pages.git#${HTML_BRANCH:-develop}:general/strapi + args: + - ONTPUB_FAMILY=fibo + - BRANCH_NAME=${HTML_BRANCH:-develop} volumes: - - ./docker/init-onto-viewer.sh:/opt/develop/init-onto-viewer.sh - - .:/opt/develop/src - - ./docker/runtime/.m2:/opt/develop/.m2 - - ./docker/runtime/server:/opt/develop/app_home - networks: - - default - - onto-viewer-web: - container_name: onto-viewer-web + - spec_root:/opt/html-pages + fibo-pages: + image: edmcouncil/fibo-pages:${HTML_BRANCH:-latest} build: - context: ../onto-viewer-web - dockerfile: Dockerfile - ports: - - "3000:3000" + context: https://github.com/edmcouncil/html-pages.git#${HTML_BRANCH:-develop}:general + args: + - ONTPUB_FAMILY=fibo + - BRANCH_NAME=${HTML_BRANCH:-develop} + environment: + - STRAPI_URL=http://fibo-strapi:1337 + volumes: + - spec_root:/opt/html-pages depends_on: - - onto-viewer-server - - strapi - networks: - - default - - strapi: - container_name: onto-viewer-strapi + - fibo-strapi + fibo-viewer: + image: edmcouncil/onto-viewer:${TAG:-latest} + build: + context: . + environment: + - ONTPUB_FAMILY=fibo + - UPDATE_URL=${FIBO_UPDATE_URL:-https://spec.edmcouncil.org/fibo/ontology/etc/onto-viewer-web-app/config/} + spec: + image: edmcouncil/spec:${HTML_BRANCH:-latest} build: - context: ../strapi-dashboard - dockerfile: Dockerfile + context: https://github.com/edmcouncil/html-pages.git#${HTML_BRANCH:-develop}:home + args: + - BRANCH_NAME=${HTML_BRANCH:-develop} + environment: + - FAMILY_REGEX=fibo + volumes: + - spec_root:/opt/html-pages + depends_on: + - fibo-strapi + - fibo-pages + - fibo-viewer ports: - - "1337:1337" - networks: - - default \ No newline at end of file + - 8080:80 + +volumes: + spec_root: diff --git a/docker/init-onto-viewer.sh b/docker/init-onto-viewer.sh deleted file mode 100644 index b9e8c0f8..00000000 --- a/docker/init-onto-viewer.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -echo "[INFO] Starting 'init-onto-viewer' installer..." - -INIT_DIR=$(pwd) -INSTALL_DIR="$INIT_DIR/install_dir" - -cp -r src/ "$INSTALL_DIR" -if [ -d "$INSTALL_DIR" ]; then - cd "$INSTALL_DIR" - mvn clean package -else - echo "$INSTALL_DIR hasn't been created. Exiting..." - exit 1 -fi - -echo "[INFO] Moving to $INIT_DIR..." -cd "$INIT_DIR" -cp "$INSTALL_DIR"/onto-viewer-web-app/target/onto-viewer-web-app-*.war app.war - -echo "[INFO] Starting app.war..." -java -jar app.war --server.servlet.context-path=/dev/ontology --app.defaultHomePath="$INIT_DIR/app_home" diff --git a/docker/server/Dockerfile b/docker/server/Dockerfile deleted file mode 100644 index a3c3d296..00000000 --- a/docker/server/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM maven:3.8.1-jdk-11-openj9 - -SHELL ["/bin/bash", "-c"] - -RUN apt-get update -RUN apt-get -y install curl \ - unzip \ - zip - -RUN mkdir -p /opt/develop -WORKDIR /opt/develop - -CMD ["sh", "init-onto-viewer.sh"] \ No newline at end of file diff --git a/docker/web/.dockerignore b/docker/web/.dockerignore deleted file mode 100644 index b512c09d..00000000 --- a/docker/web/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile deleted file mode 100644 index ff88d1e2..00000000 --- a/docker/web/Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -FROM node:16-alpine - -# create destination directory -RUN mkdir -p /usr/src/nuxt-app -WORKDIR /usr/src/nuxt-app - -# update and install dependency -RUN apk update && apk upgrade -RUN apk add git - -# copy the app, note .dockerignore -COPY . /usr/src/nuxt-app/ -RUN npm install - -# build necessary, even if no static files are needed, -# since it builds the server as well - RUN npm run build - -# expose 3000 on container -EXPOSE 3000 - -# set app serving to permissive / assigned -ENV PUBLIC_URL=0.0.0.0 - -# set app port -ENV NUXT_PORT=3000 - -ENV ONTPUB_FAMILY=dev - -# start the app -CMD [ "npm", "run" ,"dev" ] diff --git a/docker/web/nuxt.config.js b/docker/web/nuxt.config.js deleted file mode 100644 index 17870b01..00000000 --- a/docker/web/nuxt.config.js +++ /dev/null @@ -1,206 +0,0 @@ -import axios from "axios"; - -process.env.VUE_APP_TIMESTAMP = - process.env.TIMESTAMP || process.env.VUE_ONTOLOGY_NAME==='idmp'?"latest":"2022Q3"; - -process.env.VUE_APP_PRODUCT = - process.env.PRODUCT || - process.env.ontology_publisher_current_product || - "pages"; -process.env.VUE_APP_BRANCH = ( - process.env.BRANCH || - (process.env.BRANCH_NAME === process.env.TAG_NAME - ? "develop" - : process.env.BRANCH_NAME || "develop") -).toLowerCase(); -process.env.VUE_APP_TAG = process.env.TAG || process.env.TAG_NAME || "latest"; - -process.env.VUE_DIST_DIR = `/${process.env.VUE_APP_PRODUCT}/${process.env.VUE_APP_BRANCH}/${process.env.VUE_APP_TAG}`; -process.env.VUE_ASSETS_DIR = `${process.env.VUE_DIST_DIR}/_nuxt/`; - -process.env.VUE_ONTOLOGY_NAME = process.env.ONTPUB_FAMILY || "iof"; -process.env.VUE_BASE_URL = - process.env.BASE_URL || - "https://spec." + - (process.env.VUE_ONTOLOGY_NAME === "idmp" - ? "pistoiaalliance" - : "edmcouncil") + - ".org/"; - -process.env.VUE_RESOURCES_BASE_URL = process.env.VUE_BASE_URL + process.env.VUE_ONTOLOGY_NAME + "/ontology/"; - -process.env.STRAPI_URL = process.env.STRAPI_URL || "http://localhost:1337"; - -export default { - // target: 'static' description https://nuxtjs.org/announcements/going-full-static/ - target: "static", - // Global page headers: https://go.nuxtjs.dev/config-head - head: { - title: process.env.VUE_ONTOLOGY_NAME.toUpperCase(), - htmlAttrs: { - lang: "en", - }, - meta: [ - { charset: "utf-8" }, - { name: "viewport", content: "width=device-width, initial-scale=1" }, - { hid: "description", name: "description", content: "" }, - { - hid: "keywords", - name: "keywords", - content: - "ontology, Open Knowledge Graph, OKG, EDM Council, Enterprise Data Management Council", - }, - { name: "format-detection", content: "telephone=no" }, - ], - link: [{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" }], - script: [ - { - src: "https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js", - integrity: - "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj", - crossorigin: "anonymous", - }, - { - src: "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js", - integrity: - "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN", - crossorigin: "anonymous", - }, - { - src: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js", - integrity: - "sha384-VHvPCCyXqtD5DqJeNxl2dtTyhF78xXNXdkwX1CZeRusQfRKp+tA7hAShOK/B/fQ2", - crossorigin: "anonymous", - }, - ], - }, - server: { - host: process.env.PUBLIC_URL || "localhost", - }, - router: { - base: `/${process.env.VUE_ONTOLOGY_NAME}`, - }, - -//to removed - generate: { - dir: `dist/${process.env.VUE_ONTOLOGY_NAME}${process.env.VUE_DIST_DIR}`, - routes() { - return axios - .get(`${process.env.STRAPI_URL || "http://localhost:1337"}/api/pages`) - .then((res) => { - return res.data.data.map((page) => { - const slug = page.attributes.slug; - return `/page/${slug}`; - }); - }); - }, - }, - - // loading bar - loading: { - color: "black", - height: "5px", - }, - - // Global CSS: https://go.nuxtjs.dev/config-css - css: ["./assets/scss/Ontology.scss"], - - // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins - plugins: [ - { src: "~/plugins/vue-multiselect" }, - { src: "~/plugins/v-clipboard" }, - ], - - // Auto import components: https://go.nuxtjs.dev/config-components - components: { - dirs: [ - "~/components", - "~/components/Articles", - "~/components/chunks", - "~/components/Ontology", - ], - }, - - // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules - buildModules: [ - [ - "@nuxtjs/google-fonts", - { - families: { - Inter: { - wght: [300, 400, 500], - }, - }, - display: "swap", - prefetch: false, - preconnect: false, - preload: false, - download: true, - base64: false, - }, - ], - ], - - // Modules: https://go.nuxtjs.dev/config-modules - modules: [ - "@nuxtjs/style-resources", - "bootstrap-vue/nuxt", - "@nuxtjs/markdownit", - "@nuxtjs/proxy", - ], - - // Build Configuration: https://go.nuxtjs.dev/config-build - build: { - standalone: true, - publicPath: process.env.VUE_ASSETS_DIR, - loaders: { - sass: { - implementation: require("sass"), - }, - scss: { - implementation: require("sass"), - }, - }, - extend(config) { - config.resolve.alias.vue = "vue/dist/vue.common"; - }, - }, - - env: { - generateDir: `dist/${process.env.VUE_ONTOLOGY_NAME}`, - ontologyName: process.env.VUE_ONTOLOGY_NAME, - assetsDir: process.env.VUE_ASSETS_DIR, - distDir: process.env.VUE_DIST_DIR, - staticGenerationMode: process.env.NODE_ENV === "production", - ontologyResourcesBaseUri: process.env.VUE_RESOURCES_BASE_URL, - strapiBaseUrl: process.env.STRAPI_URL, - showTermsLinkOnFooter: process.env.SHOW_TERMS_LINK_ON_FOOTER || true, - }, - - http: { - proxy: process.env.NODE_ENV !== "production", - }, - - proxy: [ - "http://onto-viewer-server:8080/dev/ontology/api", - "http://onto-viewer-server:8080/dev/ontology/*/api", - ], - - styleResources: { - scss: [ - "~assets/scss/_variables.scss", - "~assets/scss/_bootstrap-override.scss", - "~assets/scss/global.scss", - "~assets/scss/typography.scss", - "~assets/scss/highlight.scss", - ], - }, - - markdownit: { - preset: "default", - linkify: true, - breaks: true, - use: ["markdown-it-div", "markdown-it-attrs", "markdown-it-highlightjs"], - runtime: true, - }, -}; diff --git a/onto-viewer-web-app/config/.gitkeep b/onto-viewer-web-app/config/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/onto-viewer-web-app/entrypoint.sh b/onto-viewer-web-app/entrypoint.sh new file mode 100644 index 00000000..5bc8b6ec --- /dev/null +++ b/onto-viewer-web-app/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "[INFO] Starting app.war..." +exec java -server -Xmx4G -XX:-UseGCOverheadLimit -Dserver.address=0.0.0.0 -Dserver.port=80 -Dserver.forward-headers-strategy=native -Dserver.tomcat.redirect-context-root=false \ + ${UPDATE_URL:+ -Dapp.config.ontologies.download_directory=download -Dapp.config.updateUrl=${UPDATE_URL}} -jar onto-viewer.war --server.servlet.context-path=/${ONTPUB_FAMILY:-dev}/ontology diff --git a/onto-viewer-web-app/ontologies b/onto-viewer-web-app/ontologies new file mode 160000 index 00000000..487882fc --- /dev/null +++ b/onto-viewer-web-app/ontologies @@ -0,0 +1 @@ +Subproject commit 487882fcdbacf78b74aa1c3c415da9af8e189c0a