**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.
This commit is contained in:
106
docker-compose.yml
Normal file
106
docker-compose.yml
Normal file
@@ -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:
|
||||||
Reference in New Issue
Block a user