From bd9dd140ab841aa5c76c7825fdcfd2062601231e Mon Sep 17 00:00:00 2001 From: Mathis HERRIOT <197931332+0x485254@users.noreply.github.com> Date: Wed, 14 Jan 2026 13:53:02 +0100 Subject: [PATCH] **feat(docker): add docker-compose for multi-service setup** Introduce `docker-compose.yml` to orchestrate services for local development. Include configurations for PostgreSQL, Redis, MinIO (S3), Mailpit, backend, and frontend. Simplify setup with predefined environment variables, volumes, and dependencies, ensuring streamlined service management and integration. --- docker-compose.yml | 106 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3a06fbd --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,106 @@ +services: + db: + image: postgres:17-alpine + container_name: memegoat-db + restart: always + environment: + POSTGRES_USER: ${POSTGRES_USER:-app} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-app} + POSTGRES_DB: ${POSTGRES_DB:-app} + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + + redis: + image: redis:7-alpine + container_name: memegoat-redis + restart: always + ports: + - "6379:6379" + + s3: + image: minio/minio:RELEASE.2025-04-08T15-41-24Z + container_name: memegoat-s3 + restart: always + ports: + - "9000:9000" + - "9001:9001" + environment: + MINIO_ROOT_USER: ${S3_ACCESS_KEY:-minioadmin} + MINIO_ROOT_PASSWORD: ${S3_SECRET_KEY:-minioadmin} + command: server /data --console-address ":9001" + volumes: + - minio_data:/data + + mail: + image: axllent/mailpit + container_name: memegoat-mail + restart: always + ports: + - "1025:1025" # smtp + - "8025:8025" # web ui + + backend: + build: + context: . + dockerfile: backend/Dockerfile + target: base + container_name: memegoat-backend + command: pnpm run --filter @memegoat/backend start:dev + volumes: + - .:/usr/src/app + - /usr/src/app/node_modules + - /usr/src/app/backend/node_modules + ports: + - "3000:3000" + environment: + NODE_ENV: development + POSTGRES_HOST: db + POSTGRES_PORT: 5432 + POSTGRES_DB: ${POSTGRES_DB:-app} + POSTGRES_USER: ${POSTGRES_USER:-app} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-app} + REDIS_HOST: redis + REDIS_PORT: 6379 + S3_ENDPOINT: s3 + S3_PORT: 9000 + S3_ACCESS_KEY: ${S3_ACCESS_KEY:-minioadmin} + S3_SECRET_KEY: ${S3_SECRET_KEY:-minioadmin} + S3_BUCKET_NAME: ${S3_BUCKET_NAME:-memegoat} + MAIL_HOST: mail + MAIL_PORT: 1025 + MAIL_USER: "" + MAIL_PASS: "" + MAIL_FROM: ${MAIL_FROM:-noreply@memegoat.local} + DOMAIN_NAME: ${DOMAIN_NAME:-localhost} + JWT_SECRET: ${JWT_SECRET:-super-secret-jwt-key-change-me-in-prod} + ENCRYPTION_KEY: ${ENCRYPTION_KEY:-01234567890123456789012345678901} + PGP_ENCRYPTION_KEY: ${PGP_ENCRYPTION_KEY:-super-secret-pgp-key} + SESSION_PASSWORD: ${SESSION_PASSWORD:-super-secret-session-password-32-chars} + depends_on: + - db + - redis + - s3 + + frontend: + build: + context: . + dockerfile: frontend/Dockerfile + target: base + container_name: memegoat-frontend + command: pnpm run --filter @memegoat/frontend dev + volumes: + - .:/usr/src/app + - /usr/src/app/node_modules + - /usr/src/app/frontend/node_modules + ports: + - "3001:3000" + environment: + NEXT_PUBLIC_API_URL: http://localhost:3000 + depends_on: + - backend + +volumes: + postgres_data: + minio_data: