diff --git a/.docker/Viewer-v2.x/default.conf b/.docker/Viewer-v2.x/default.conf new file mode 100644 index 00000000000..93cba3df8ab --- /dev/null +++ b/.docker/Viewer-v2.x/default.conf @@ -0,0 +1,12 @@ +server { + listen 80; + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/.docker/Viewer-v2.x/entrypoint.sh b/.docker/Viewer-v2.x/entrypoint.sh new file mode 100644 index 00000000000..9f033feb6b3 --- /dev/null +++ b/.docker/Viewer-v2.x/entrypoint.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# If CLIENT_ID is specified, use the google.js configuration with the modified ID +if [ ! -z "$CLIENT_ID" ] + then + echo "Google Cloud Healthcare $CLIENT_ID has been provided: " + echo $CLIENT_ID + echo "Updating config..." + + # - Use SED to replace the CLIENT_ID that is currently in public/config/google.js + sed -i -e "s/YOURCLIENTID.apps.googleusercontent.com/$CLIENT_ID/g" /usr/share/nginx/html/config/google.js + + # - Copy public/config/google.js to overwrite public/config/default.js + cp /usr/share/nginx/html/config/google.js /usr/share/nginx/html/config/default.js +fi + +echo "Starting Nginx to serve the OHIF Viewer..." + +exec "$@" diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000000..d4a539c50d9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,30 @@ +# Reduces size of context and hides +# files from Docker (can't COPY or ADD these) + +# Output +dist/ +build/ + +# Dependencies +node_modules/ + +# Root +README.md +Dockerfile +dockerfile + +# Misc. Config +.git +.DS_Store +.gitignore +.vscode +.circleci + +# Unnecessary things to pull into container +.circleci/ +.github/ +.netlify/ +.scripts/ +.vscode/ +coverage/ +docs/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000000..faa58439b78 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,64 @@ +# This dockerfile is used to publish the `ohif/viewer` image on dockerhub. +# +# It's a good example of how to build our static application and package it +# with a web server capable of hosting it as static content. +# +# docker build +# -------------- +# If you would like to use this dockerfile to build and tag an image, make sure +# you set the context to the project's root directory: +# https://docs.docker.com/engine/reference/commandline/build/ +# +# +# SUMMARY +# -------------- +# This dockerfile has two stages: +# +# 1. Building the React application for production +# 2. Setting up our Nginx (Alpine Linux) image w/ step one's output +# + + +# Stage 1: Build the application +# docker build -t ohif/viewer:latest . +FROM node:10.16.3-slim as builder + +RUN mkdir /usr/src/app +WORKDIR /usr/src/app + +# Copy Files +COPY .docker /usr/src/app/.docker +COPY .webpack /usr/src/app/.webpack +COPY extensions /usr/src/app/extensions +COPY platform /usr/src/app/platform +COPY .browserslistrc /usr/src/app/.browserslistrc +COPY aliases.config.js /usr/src/app/aliases.config.js +COPY babel.config.js /usr/src/app/babel.config.js +COPY lerna.json /usr/src/app/lerna.json +COPY package.json /usr/src/app/package.json +COPY postcss.config.js /usr/src/app/postcss.config.js +COPY yarn.lock /usr/src/app/yarn.lock + +# Run the install before copying the rest of the files +RUN yarn config set workspaces-experimental true +RUN yarn install + +ENV PATH /usr/src/app/node_modules/.bin:$PATH +# ENV GENERATE_SOURCEMAP=false +# ENV REACT_APP_CONFIG=config/default.js + +RUN yarn run build + +# Stage 2: Bundle the built application into a Docker container +# which runs Nginx using Alpine Linux +FROM nginx:1.15.5-alpine +RUN apk add --no-cache bash +RUN rm -rf /etc/nginx/conf.d +COPY .docker/Viewer-v2.x /etc/nginx/conf.d +COPY .docker/Viewer-v2.x/entrypoint.sh /usr/src/ +RUN chmod 777 /usr/src/entrypoint.sh +COPY --from=builder /usr/src/app/platform/viewer/dist /usr/share/nginx/html +EXPOSE 80 +EXPOSE 443 +ENTRYPOINT ["/usr/src/entrypoint.sh"] +CMD ["nginx", "-g", "daemon off;"]