feat(docker): production-ready Dockerfile + Portainer compose stack

- Rewrite Dockerfile: multi-stage pnpm monorepo build with Next.js
  standalone output, non-root user, minimal runner image
- Enable next.config.ts `output: standalone` + serverExternalPackages
- Rewrite docker/compose.prod.yml: full production stack with migrate
  service, minio-init, named networks, build context for Portainer
- Add scripts/migrate.mjs: standalone Drizzle migration runner
- Update .dockerignore for cleaner build context

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Arnaud
2026-07-01 12:50:45 +02:00
parent aed38e4eca
commit 5ac50e9bf0
5 changed files with 181 additions and 101 deletions
+18
View File
@@ -0,0 +1,18 @@
import { drizzle } from "drizzle-orm/node-postgres";
import { migrate } from "drizzle-orm/node-postgres/migrator";
import pg from "pg";
const { Pool } = pg;
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const db = drizzle(pool);
try {
await migrate(db, { migrationsFolder: "/app/packages/db/src/migrations" });
console.log("Migrations applied successfully");
await pool.end();
process.exit(0);
} catch (err) {
console.error("Migration failed:", err);
await pool.end().catch(() => {});
process.exit(1);
}