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: