From f81ca17c9f8112b0037c3b65d7c56385fb26c971 Mon Sep 17 00:00:00 2001 From: Stan Runge Date: Sat, 28 Feb 2026 06:23:26 +0100 Subject: [PATCH] add docker files --- Dockerfile | 33 +++++++++++++++++++++++++++++++++ docker-compose.yml | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5748639 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM oven/bun AS base +WORKDIR /app + +# Install dependencies +FROM base AS install +RUN mkdir -p /temp/dev +COPY package.json bun.lock /temp/dev/ +RUN cd /temp/dev && bun install --frozen-lockfile + +RUN mkdir -p /temp/prod +COPY package.json bun.lock /temp/prod/ +RUN cd /temp/prod && bun install --frozen-lockfile --production + +# Build +FROM base AS build +COPY --from=install /temp/dev/node_modules node_modules +COPY . . +ENV NODE_ENV=production +RUN bun run build + +# Runtime +FROM base AS runtime +COPY --from=install /temp/prod/node_modules node_modules +COPY --from=build /app/build build +COPY --from=build /app/package.json . + +USER bun +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOST=0.0.0.0 +EXPOSE 3000 + +CMD ["bun", "build/index.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8f341a0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,44 @@ +# docker-compose.yml +# Production deployment: SvelteKit app + PostgreSQL +# Usage: docker compose up -d + +services: + db: + image: postgres:17 + restart: unless-stopped + environment: + POSTGRES_DB: vash + POSTGRES_USER: vash + POSTGRES_PASSWORD: ${DB_PASSWORD:-changeme_in_production} + volumes: + - pgdata:/var/lib/postgresql/data + ports: + - "127.0.0.1:5432:5432" # Only accessible from host + healthcheck: + test: ["CMD-SHELL", "pg_isready -U vash -d vash"] + interval: 10s + timeout: 5s + retries: 5 + + app: + build: . + restart: unless-stopped + depends_on: + db: + condition: service_healthy + ports: + - "127.0.0.1:3000:3000" # Only accessible from host (nginx proxies) + environment: + DATABASE_URL: postgresql://vash:${DB_PASSWORD:-changeme_in_production}@db:5432/vash + ORIGIN: ${ORIGIN:-https://vash.yourdomain.com} + BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET} + OSU_CLIENT_ID: ${OSU_CLIENT_ID} + OSU_CLIENT_SECRET: ${OSU_CLIENT_SECRET} + OSU_IRC_USERNAME: ${OSU_IRC_USERNAME} + OSU_IRC_PASSWORD: ${OSU_IRC_PASSWORD} + NODE_ENV: production + env_file: + - .env + +volumes: + pgdata: