diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2ac9208 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,52 @@ +## Base ######################################################################## + +# Use a larger node image to do the build for native deps (e.g., gcc, python) +FROM node:lts as base + +# Reduce npm log spam and colour during install within Docker +ENV NPM_CONFIG_LOGLEVEL=error +ENV NPM_CONFIG_COLOR=false + +# We'll run the app as the `node` user, so put it in their home directory +WORKDIR /home/node/app + +RUN chown -R node:node /home/node + +# Copy the source code over +COPY --chown=node:node . /home/node/app/ + +## Development ################################################################# + +# Define a development target that installs devDeps and runs in dev mode +FROM base as development +WORKDIR /home/node/app + +# Install (not ci) with dependencies, and for Linux vs. Linux Musl (which we use for -alpine) +RUN npm install + +# Switch to the node user vs. root +USER node + +# Expose port 3000 +EXPOSE 3000 + +# Start the app in debug mode so we can attach the debugger +CMD ["npm", "start"] + +## Production ################################################################## +# Also define a production target which doesn't use devDeps +FROM base as production +WORKDIR /home/node/app +COPY --chown=node:node --from=development /home/node/app/node_modules /home/node/app/node_modules + +# Build the Docusaurus app +RUN npm run build + +## Deploy ###################################################################### + +# Use a stable nginx image +FROM nginx:stable-alpine as deploy +WORKDIR /home/node/app + +# Copy what we've installed/built from production +COPY --from=production /home/node/app/build /usr/share/nginx/html/ diff --git a/README.md b/README.md index 6847a4a..171382e 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,22 @@ $ npm run build ``` ## Deployment using Docker -TODO + +### Development + +Build docker container for development and run on port 3000: +``` +docker build --target development -t docs:dev . +sudo docker run -d -p 3000:3000 docs:dev +``` + +### Production + +Build docker container for production and run on port 80: +``` +docker build -t docs:latest . +docker run -d -p 80:80 docs:latest +``` ## Documentation versioning The versioning documentation of Docusaurus can be found [here](https://docusaurus.io/docs/versioning).