From ad89ad001d1d3185ec5f9948cf47922f7287a4c1 Mon Sep 17 00:00:00 2001 From: Sean O'Connor Date: Mon, 27 Apr 2026 22:49:13 -0400 Subject: [PATCH] feat: update Dockerfile and docker-compose.yml to use WEB_PORT variable and streamline migration process --- .dockerignore | 2 +- .env.example | 1 + Dockerfile | 8 +++++--- docker-compose.yml | 8 +------- src/server/db/migrate.ts | 4 +--- 5 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.dockerignore b/.dockerignore index 08119a3..44820df 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,6 +6,7 @@ Dockerfile* docker-compose* README.md *.log +.DS_Store .env* !.env.example .vscode @@ -14,4 +15,3 @@ coverage *.tsbuildinfo dist build - diff --git a/.env.example b/.env.example index ca1d43c..ea60808 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ # Runtime NODE_ENV=production +WEB_PORT=3000 # Auth # Generate with: openssl rand -base64 32 diff --git a/Dockerfile b/Dockerfile index 20445dd..07ea750 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ ENV NODE_ENV=production \ BETTER_AUTH_URL=http://localhost:3000 \ AUTH_SECRET=docker-build-placeholder-secret-do-not-use \ DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres -RUN bun run build +RUN bun run build && bun build src/server/db/migrate.ts --target=bun --outfile=migrate.js FROM base AS release ENV NODE_ENV=production \ @@ -26,9 +26,11 @@ ENV NODE_ENV=production \ COPY --from=build /usr/src/app/.next/standalone ./ COPY --from=build /usr/src/app/.next/static ./.next/static COPY --from=build /usr/src/app/public ./public -COPY --from=build /usr/src/app/src/server/db/migrate.ts ./src/server/db/migrate.ts +COPY --from=build /usr/src/app/migrate.js ./migrate.js COPY --from=build /usr/src/app/drizzle ./drizzle +RUN chmod -R a+rX drizzle migrate.js public + USER bun EXPOSE 3000 -CMD ["bun", "server.js"] +CMD ["sh", "-c", "bun migrate.js && bun server.js"] diff --git a/docker-compose.yml b/docker-compose.yml index af1d5bd..a0ad700 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,12 +19,8 @@ services: AUTHENTIK_CLIENT_ID: ${AUTHENTIK_CLIENT_ID:-} AUTHENTIK_CLIENT_SECRET: ${AUTHENTIK_CLIENT_SECRET:-} AUTHENTIK_ORIGIN: ${AUTHENTIK_ORIGIN:-} - command: - - sh - - -c - - bun src/server/db/migrate.ts && bun server.js ports: - - "3000:3000" + - "${WEB_PORT:-3000}:3000" depends_on: db: condition: service_healthy @@ -38,8 +34,6 @@ services: POSTGRES_DB: ${POSTGRES_DB:-postgres} volumes: - beenvoice_pg_data:/var/lib/postgresql/data - ports: - - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\""] interval: 5s diff --git a/src/server/db/migrate.ts b/src/server/db/migrate.ts index b4a658c..8aa7353 100644 --- a/src/server/db/migrate.ts +++ b/src/server/db/migrate.ts @@ -23,7 +23,6 @@ import { migrate } from "drizzle-orm/node-postgres/migrator"; import path from "path"; import fs from "fs"; import crypto from "crypto"; -import { fileURLToPath } from "url"; const databaseUrl = process.env.DATABASE_URL; if (!databaseUrl) { @@ -31,8 +30,7 @@ if (!databaseUrl) { process.exit(1); } -const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const migrationsFolder = path.resolve(__dirname, "../../../drizzle"); +const migrationsFolder = path.resolve(process.cwd(), "drizzle"); const pool = new Pool({ connectionString: databaseUrl,