From ccba14a05e5588045e8673ae0fd9bc4246fb15a0 Mon Sep 17 00:00:00 2001 From: AI Assistant Date: Fri, 27 Feb 2026 10:43:32 +0200 Subject: [PATCH] fix(deploy): add env vars to docker-compose, prisma generate in Dockerfile, move @prisma/client to deps --- .env.example | 36 +++++++++++++++++++++++------------- Dockerfile | 12 ++++++++++++ docker-compose.yml | 27 ++++++++++++++++++++++----- minio-out.txt | Bin 402 -> 0 bytes minio-result.txt | Bin 330 -> 0 bytes package.json | 2 +- ports.txt | Bin 202 -> 0 bytes test-minio.mjs | 23 ----------------------- 8 files changed, 58 insertions(+), 42 deletions(-) delete mode 100644 minio-out.txt delete mode 100644 minio-result.txt delete mode 100644 ports.txt delete mode 100644 test-minio.mjs diff --git a/.env.example b/.env.example index 87e207d..cb46448 100644 --- a/.env.example +++ b/.env.example @@ -8,7 +8,7 @@ NEXT_PUBLIC_APP_NAME=ArchiTools NEXT_PUBLIC_APP_URL=http://localhost:3000 -# Storage adapter: 'localStorage' (default) | 'api' | 'minio' +# Storage adapter: 'localStorage' (default) | 'database' NEXT_PUBLIC_STORAGE_ADAPTER=localStorage # Feature flag overrides (set to 'true' or 'false') @@ -25,21 +25,31 @@ NEXT_PUBLIC_STORAGE_ADAPTER=localStorage # NEXT_PUBLIC_FLAG_MODULE_MINI_UTILITIES=false # NEXT_PUBLIC_FLAG_MODULE_AI_CHAT=false -# Future: API storage backend -# STORAGE_API_URL=http://api.internal/storage +# ============================================================================= +# PostgreSQL Database (required when STORAGE_ADAPTER=database) +# ============================================================================= +DATABASE_URL=postgresql://USER:PASSWORD@10.10.10.166:5432/architools_db?schema=public -# Future: MinIO object storage -# MINIO_ENDPOINT=10.10.10.166:9003 -# MINIO_ACCESS_KEY= -# MINIO_SECRET_KEY= -# MINIO_BUCKET=architools +# ============================================================================= +# MinIO Object Storage +# ============================================================================= +MINIO_ENDPOINT=10.10.10.166 +MINIO_PORT=9002 +MINIO_USE_SSL=false +MINIO_ACCESS_KEY=admin +MINIO_SECRET_KEY=your-minio-secret +MINIO_BUCKET_NAME=tools -# Future: Authentik SSO -# AUTHENTIK_URL=http://10.10.10.166:9100 -# AUTHENTIK_CLIENT_ID= -# AUTHENTIK_CLIENT_SECRET= +# ============================================================================= +# Authentication (Authentik OIDC) +# ============================================================================= +NEXTAUTH_URL=https://tools.beletage.ro +NEXTAUTH_SECRET=generate-with-openssl-rand-base64-32 +AUTHENTIK_CLIENT_ID=your-authentik-client-id +AUTHENTIK_CLIENT_SECRET=your-authentik-client-secret +AUTHENTIK_ISSUER=https://auth.beletage.ro/application/o/architools/ -# Future: N8N automation +# N8N automation (future) # N8N_WEBHOOK_URL=http://10.10.10.166:5678/webhook # External tool URLs (displayed in dashboard) diff --git a/Dockerfile b/Dockerfile index 5d1e9f5..884d5b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,18 @@ FROM node:20-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . + +# Build args for NEXT_PUBLIC_* vars (inlined at build time) +ARG NEXT_PUBLIC_STORAGE_ADAPTER=database +ARG NEXT_PUBLIC_APP_NAME=ArchiTools +ARG NEXT_PUBLIC_APP_URL=https://tools.beletage.ro +ENV NEXT_PUBLIC_STORAGE_ADAPTER=${NEXT_PUBLIC_STORAGE_ADAPTER} +ENV NEXT_PUBLIC_APP_NAME=${NEXT_PUBLIC_APP_NAME} +ENV NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} + +# Generate Prisma client before building +RUN npx prisma generate + RUN npm run build # Stage 3: Runner diff --git a/docker-compose.yml b/docker-compose.yml index e92c42e..bce22e2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,16 +1,33 @@ -version: '3.8' +version: "3.8" services: architools: - build: . + build: + context: . + args: + - NEXT_PUBLIC_STORAGE_ADAPTER=${NEXT_PUBLIC_STORAGE_ADAPTER:-database} + - NEXT_PUBLIC_APP_NAME=${NEXT_PUBLIC_APP_NAME:-ArchiTools} + - NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL:-https://tools.beletage.ro} container_name: architools restart: unless-stopped ports: - "3000:3000" environment: - NODE_ENV=production - - NEXT_PUBLIC_APP_NAME=ArchiTools - - NEXT_PUBLIC_APP_URL=${APP_URL:-http://10.10.10.166:3000} - - NEXT_PUBLIC_STORAGE_ADAPTER=localStorage + # Database + - DATABASE_URL=${DATABASE_URL:-postgresql://architools_user:stictMyFon34!_gonY@10.10.10.166:5432/architools_db?schema=public} + # MinIO + - MINIO_ENDPOINT=${MINIO_ENDPOINT:-10.10.10.166} + - MINIO_PORT=${MINIO_PORT:-9002} + - MINIO_USE_SSL=${MINIO_USE_SSL:-false} + - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-admin} + - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-MinioStrongPass123} + - MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME:-tools} + # Authentication (Authentik OIDC) + - NEXTAUTH_URL=${NEXTAUTH_URL:-https://tools.beletage.ro} + - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} + - AUTHENTIK_CLIENT_ID=${AUTHENTIK_CLIENT_ID} + - AUTHENTIK_CLIENT_SECRET=${AUTHENTIK_CLIENT_SECRET} + - AUTHENTIK_ISSUER=${AUTHENTIK_ISSUER:-https://auth.beletage.ro/application/o/architools/} labels: - "com.centurylinklabs.watchtower.enable=true" diff --git a/minio-out.txt b/minio-out.txt deleted file mode 100644 index 4c8e96e5702dcd30feb92fe26649cb4125f44589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmZXPO=<#B5QGcd3Aw{lkckUt)GVT|Bs&+uMUs`ckTE9y#F02EK|Dpylq+PFvqZms z;-EdR@2KA{`qG5m&h^g7+Dp)!1=PclA0 zVb-gt0=JokTA=UTpMF&?zLb7oPD^x49W(s}kF`QeuX08>W;h-G0sVK-2JMKpXS)3o zD7r|BvZ*NBEx@Jyj5 dlw~hfp!eXFDN2fBd-iw%ETLv-wo~8lbO6NcM1lYS diff --git a/minio-result.txt b/minio-result.txt deleted file mode 100644 index f7b8b35467aaa55f19c445083a6d85962a566b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmYjMyAHxI3_MmO{vl$5p)G}h$HdBjSlAE)YD)pBZPZ4H@8GZaAx7Yw6o{-O=lFbQ zzh66~s9=zx#1%`#m?Ff4C&nHMXZ~MUO~?_P^UrY=2AE;U{D_(w1yT5`1qhf+kH&)N z(7$({co1o_GkS@NVV>CDf=uIi{FMyrj+L@Uv`&_((J+e`{suSB;1r|Q$=C0pi!D_e j&uMMyout4JH07ADU;{2GtE(n>loi}N}>2;WAU;#@ee zX$X_XOd~w0Vy3ZE8<)8;)2)=IJ2;mZP@(2opvB0^gCfQM>Pfp diff --git a/test-minio.mjs b/test-minio.mjs deleted file mode 100644 index 2d1586f..0000000 --- a/test-minio.mjs +++ /dev/null @@ -1,23 +0,0 @@ -import { Client } from 'minio'; -import * as dotenv from 'dotenv'; -dotenv.config(); - -const minioClient = new Client({ - endPoint: process.env.MINIO_ENDPOINT, - port: parseInt(process.env.MINIO_PORT), - useSSL: process.env.MINIO_USE_SSL === 'true', - accessKey: process.env.MINIO_ACCESS_KEY, - secretKey: process.env.MINIO_SECRET_KEY, -}); - -async function testMinio() { - try { - console.log('Testing MinIO connection on port', process.env.MINIO_PORT, '...'); - const buckets = await minioClient.listBuckets(); - console.log('Success! Buckets:', buckets.map(b => b.name)); - } catch (err) { - console.error('MinIO Error:', err.message); - } -} - -testMinio(); \ No newline at end of file