From c61d0c40af6b0f4d34ff7fcacac661c70b45ac0a Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Thu, 12 Sep 2024 19:32:09 -0400 Subject: [PATCH] added docker support --- .dockerignore | 15 ++++++++++++ Dockerfile | 48 ++++++++++++++++++++++++++++++++++++++ docker-compose.example.yml | 21 +++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.example.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f965aed --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +node_modules +Dockerfile* +docker-compose* +.dockerignore +.git +.gitignore +README.md +LICENSE +.vscode +Makefile +helm-charts +.env +.editorconfig +.idea +coverage* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0677efc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,48 @@ +# use the official Bun image +# see all versions at https://hub.docker.com/r/oven/bun/tags +FROM oven/bun:1 AS base +WORKDIR /usr/src/app + +# install dependencies into temp directory +# this will cache them and speed up future builds +FROM base AS install +RUN mkdir -p /temp/dev +COPY package.json bun.lockb /temp/dev/ +RUN cd /temp/dev && bun install --frozen-lockfile + +# install with --production (exclude devDependencies) +RUN mkdir -p /temp/prod +COPY package.json bun.lockb /temp/prod/ +RUN cd /temp/prod && bun install --frozen-lockfile --production + +# copy node_modules from temp directory +# then copy all (non-ignored) project files into the image +FROM base AS prerelease +COPY --from=install /temp/dev/node_modules node_modules +COPY . . + +# copy production dependencies and source code into final image +FROM base AS release +COPY --from=install /temp/prod/node_modules node_modules +COPY --from=prerelease /usr/src/app/ . +COPY --from=prerelease /usr/src/app/package.json . + +# Set Environment Variables +ARG NODE_ENV=production +ENV NODE_ENV=$NODE_ENV +ENV ACCESS_TOKEN_SECRET=$ACCESS_TOKEN_SECRET +ENV REFRESH_TOKEN_SECRET=$REFRESH_TOKEN_SECRET +ENV JWT_EXPIRES=$JWT_EXPIRES +ENV MONGO_URI=$MONGO_URI +ENV SMTP_HOST=$SMTP_HOST +ENV SMTP_PORT=$SMTP_PORT +ENV SMTP_USER=$SMTP_USER +ENV SMTP_PASSWORD=$SMTP_PASSWORD +ENV FROM_EMAIL=$FROM_EMAIL +ENV FROM_NAME=$FROM_NAME +ENV SECURE=$SECURE + +# run the app +USER bun +EXPOSE 5000/tcp +ENTRYPOINT [ "bun", "./bin/www.js" ] diff --git a/docker-compose.example.yml b/docker-compose.example.yml new file mode 100644 index 0000000..f1b5ff7 --- /dev/null +++ b/docker-compose.example.yml @@ -0,0 +1,21 @@ +--- +services: + games-api: + image: games-api + build: . + container_name: games-api + environment: + - ACCESS_TOKEN_SECRET= + - JWT_EXPIRE= + - REFRESH_TOKEN_SECRET= + - MONGO_URI= + - SMTP_HOST= + - SMTP_PORT= + - SMTP_USER= + - SMTP_PASSWORD= + - FROM_EMAIL= + - FROM_NAME= + - SECURE=false + ports: + - 5000:5000 +