added docker configuration

This commit is contained in:
Patrick 2025-06-30 12:00:28 +02:00
parent f2503049e2
commit 6b4e5cd944
3 changed files with 150 additions and 0 deletions

20
.dockerignore Normal file
View File

@ -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.*

56
Dockerfile Normal file
View File

@ -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"]

74
docker-compose.yml Normal file
View File

@ -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: