From 6b4e5cd94480ca6e529aff9ac88a8708a706fa6d Mon Sep 17 00:00:00 2001 From: Patrick Date: Mon, 30 Jun 2025 12:00:28 +0200 Subject: [PATCH] added docker configuration --- .dockerignore | 20 +++++++++++++ Dockerfile | 56 +++++++++++++++++++++++++++++++++++ docker-compose.yml | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0f572e7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,20 @@ +# docker build files +Dockerfile +docker-compose*.yml +.dockerignore + +# git files +.git +.gitignore +.gitattributes + +# miscellaneus tooling +README.md +.npmrc +.prettierrc +.eslintrc.cjs +.svelte-kit +node_modules +build +**/.env +**/.env.* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1dc4487 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,56 @@ +FROM node:24-slim AS base + +WORKDIR /usr/src/webserver + +# needed for prisma +RUN apt-get update -y && apt-get install openssl -y + + +FROM base AS install + +# Install packages: dev and then build +RUN mkdir -p /temp/dev +COPY package.json package-lock.json /temp/dev/ +RUN cd /temp/dev && npm ci + +RUN mkdir -p /temp/prod +COPY package.json package-lock.json /temp/prod/ +RUN cd /temp/prod && npm ci --omit=dev + + +FROM base AS prebuild + +# copy installed dev packages +COPY --from=install /temp/dev/node_modules node_modules + +# Copy source files +COPY . . + +# Initialize prisma +RUN npx prisma generate + + +FROM prebuild AS build + +# Build project +RUN npm run build + + +FROM base AS release + +# Copy release files +COPY --from=install /temp/prod/node_modules node_modules +COPY --from=build /usr/src/webserver/build . + +EXPOSE 3000/tcp + +CMD ["node", "."] + + +FROM prebuild AS dev + +RUN npx svelte-kit sync + +EXPOSE 5173/tcp + +CMD ["npm", "run", "dev", "--", "--host"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c715f93 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,74 @@ + + +services: + db: + image: postgres:17-alpine + restart: always + environment: + - POSTGRES_DB=TTGF-Homepage + - POSTGRES_USER=TTGFHPDB + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + ports: + - "5432:5432" + networks: + - net-TTGFHP + healthcheck: + test: ["CMD-SHELL", "pg_isready -U TTGFHPDB -d TTGF-Homepage"] + interval: 5s + timeout: 2s + retries: 20 + volumes: + - TTGF_DB_data:/var/lib/postgresql/data + command: postgres -c listen_addresses='*' + logging: + options: + max-size: "10m" + max-file: "3" + + base_server: + build: + context: . + dockerfile: Dockerfile + target: base + depends_on: + db: + condition: service_healthy + networks: + - net-TTGFHP + + webserver: + extends: + service: base_server + build: + target: release + ports: + - "3000:3000" + env_file: + - .env.prod + profiles: ["release"] + + dev_server: + extends: + service: base_server + build: + target: dev + ports: + - "5173:5173" + develop: + watch: + - action: sync + path: . + target: /usr/src/webserver + ignore: + - node_modules + - action: rebuild + path: package.json + profiles: ["dev"] + + + +networks: + net-TTGFHP: + +volumes: + TTGF_DB_data: