From f1fc61c0cf494ff31d68b20665000afe4d607e34 Mon Sep 17 00:00:00 2001 From: Kirill Dubovitskiy Date: Mon, 1 Sep 2025 15:53:09 -0700 Subject: [PATCH] devx: run server locally with s3 minio container --- .env.dev | 10 ++++++++++ .gitignore | 1 + package.json | 7 +++++-- sources/storage/files.ts | 11 ++++++++--- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/.env.dev b/.env.dev index c8e4eae..61088d5 100644 --- a/.env.dev +++ b/.env.dev @@ -8,3 +8,13 @@ METRICS_PORT=9090 # Uncomment to enable centralized logging for AI debugging (creates .logs directory) DANGEROUSLY_LOG_TO_SERVER_FOR_AI_AUTO_DEBUGGING=true + +# --- Local S3/MinIO --- +# Defaults for local MinIO started via `yarn s3` +S3_HOST=localhost +S3_PORT=9000 +S3_USE_SSL=false +S3_ACCESS_KEY=minioadmin +S3_SECRET_KEY=minioadmin +S3_BUCKET=happy +S3_PUBLIC_URL=http://localhost:9000/happy diff --git a/.gitignore b/.gitignore index d8df5e2..c75f985 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules .env dist .pgdata +.minio .env.local .env diff --git a/package.json b/package.json index d3f9c42..5ced128 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,10 @@ "generate": "prisma generate", "postinstall": "prisma generate", "db": "docker run -d -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=handy -v $(pwd)/.pgdata:/var/lib/postgresql/data -p 5432:5432 postgres", - "redis": "docker run -d -p 6379:6379 redis" + "redis": "docker run -d -p 6379:6379 redis", + "s3": "docker run -d --name minio -p 9000:9000 -p 9001:9001 -e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin -v $(pwd)/.minio/data:/data minio/minio server /data --console-address :9001", + "s3:down": "docker rm -f minio || true", + "s3:init": "dotenv -e .env.dev -- docker run --rm --network container:minio --entrypoint /bin/sh minio/mc -c \"mc alias set local http://localhost:9000 $S3_ACCESS_KEY $S3_SECRET_KEY && mc mb -p local/$S3_BUCKET || true && mc anonymous set download local/$S3_BUCKET\"" }, "devDependencies": { "@types/chalk": "^2.2.0", @@ -64,4 +67,4 @@ "zod": "^3.24.2", "zod-to-json-schema": "^3.24.3" } -} +} \ No newline at end of file diff --git a/sources/storage/files.ts b/sources/storage/files.ts index 3af18f9..41189a9 100644 --- a/sources/storage/files.ts +++ b/sources/storage/files.ts @@ -1,8 +1,13 @@ import * as Minio from 'minio'; +const s3Host = process.env.S3_HOST!; +const s3Port = process.env.S3_PORT ? parseInt(process.env.S3_PORT, 10) : undefined; +const s3UseSSL = process.env.S3_USE_SSL ? process.env.S3_USE_SSL === 'true' : true; + export const s3client = new Minio.Client({ - endPoint: process.env.S3_HOST!, - useSSL: true, + endPoint: s3Host, + port: s3Port, + useSSL: s3UseSSL, accessKey: process.env.S3_ACCESS_KEY!, secretKey: process.env.S3_SECRET_KEY!, }); @@ -26,4 +31,4 @@ export type ImageRef = { height: number; thumbhash: string; path: string; -} \ No newline at end of file +}