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.
107 lines
2.7 KiB
YAML
107 lines
2.7 KiB
YAML
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:
|