From 888e35f8390e70ab615e7b77db2d1a2f3dc1fc3a Mon Sep 17 00:00:00 2001 From: Patrick Date: Sun, 20 Apr 2025 22:35:46 +0200 Subject: [PATCH] prepare for production --- .dockerignore | 16 +++++++++++ Dockerfile | 49 ++++++++++++++++++++++++++++++++++ docker-compose.development.yml | 3 +++ docker-compose.yml | 15 +++++++++++ 4 files changed, 83 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.development.yml create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..72ee79d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,16 @@ +node_modules +Dockerfile* +.dockerignore +.git +.gitignore +README.md +LICENSE + +databases +docs +documents +pdfgen +!pdfgen/template-* +scripts +tmp-user-data +user-data diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..657a1fc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +FROM oven/bun:alpine AS base +WORKDIR /usr/src/app + +ENV NODE_ENV=production + +ENV APP_USER_DATA_PATH="/app-data/user-data" +ENV APP_TMP_USER_DATA_PATH="/app-data/tmp" + +## Stage 1: Install dependencies +FROM base AS install + +# install development dependencies +RUN mkdir -p /temp/dev +COPY package.json bun.lockb /temp/dev/ +RUN cd /temp/dev && bun install --frozen-lockfile + +# install production dependencies +RUN mkdir -p /temp/prod +COPY package.json bun.lockb /temp/prod/ +RUN cd /temp/prod && bun install --frozen-lockfile --production + +## Stage 2: Build app +FROM base AS prerelease + +# copy dependencies into workdir +COPY --from=install /temp/dev/node_modules node_modules + +# add project files +COPY . . + +# build project +RUN bun run build + +## Stage 3: Put everything together +FROM base AS release + +# compose the final image +COPY --from=install /temp/prod/node_modules node_modules +COPY --from=prerelease /usr/src/app/build . +#COPY --from=prerelease /usr/src/app/package.json . + +RUN mkdir /app-data && chown bun:bun /app-data + +VOLUME ["/app-data"] + +USER bun +EXPOSE 3000/tcp +ENTRYPOINT [ "bun", "--bun", "run", "start" ] + diff --git a/docker-compose.development.yml b/docker-compose.development.yml new file mode 100644 index 0000000..bb34866 --- /dev/null +++ b/docker-compose.development.yml @@ -0,0 +1,3 @@ +services: + application: + build: . diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7708c5f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +name: Stundenaufzeichnung + +volumes: + user-data: + +services: + application: + build: https://git.maschek.info/patrick/stundenaufzeichnung.git#main + ports: + - 3000:3000 + volumes: + - type: volume + source: user-data + target: /app-data +