| version: '3.8'
|
|
|
| services:
|
|
|
| postgres-local:
|
| image: postgres:15-alpine
|
| container_name: atom-postgres-local
|
| environment:
|
| POSTGRES_DB: ${POSTGRES_DB:-atom_local}
|
| POSTGRES_USER: ${POSTGRES_USER:-atom_user}
|
| POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-local_password}
|
| ports:
|
| - "${POSTGRES_PORT:-5432}:5432"
|
| volumes:
|
| - postgres_local_data:/var/lib/postgresql/data
|
| + - ./init-test-db.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
| + profiles:
|
| + - local
|
| + networks:
|
| + - atom-local-net
|
| + healthcheck:
|
| + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-atom_user} -d ${POSTGRES_DB:-atom_local}"]
|
| + interval: 5s
|
| + timeout: 5s
|
| + retries: 5
|
| + labels:
|
| + - "atom.environment=local"
|
| + - "atom.service=database"
|
|
|
| +
|
| + redis-local:
|
| + image: redis:7-alpine
|
| + container_name: atom-redis-local
|
| + ports:
|
| + - "${REDIS_PORT:-6379}:6379"
|
| + volumes:
|
| + - redis_local_data:/data
|
| + profiles:
|
| + - local
|
| + networks:
|
| + - atom-local-net
|
| + healthcheck:
|
| + test: ["CMD", "redis-cli", "ping"]
|
| + interval: 10s
|
| + timeout: 5s
|
| + retries: 3
|
| + labels:
|
| + - "atom.environment=local"
|
| + - "atom.service=cache"
|
|
|
| +
|
| + app-dev:
|
| + build:
|
| + context: .
|
| + dockerfile: Dockerfile.dev
|
| + container_name: atom-app-dev
|
| + ports:
|
| + - "${PORT:-3000}:3000"
|
| + environment:
|
| + NODE_ENV: development
|
| + POSTGRES_HOST: postgres-local
|
| + POSTGRES_PORT: 5432
|
| + POSTGRES_DB: ${POSTGRES_DB:-atom_local}
|
| + POSTGRES_USER: ${POSTGRES_USER:-atom_user}
|
| + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-local_password}
|
| + DATABASE_URL: postgresql://${POSTGRES_USER:-atom_user}:${POSTGRES_PASSWORD:-local_password}@postgres-local:5432/${POSTGRES_DB:-atom_local}
|
| + REDIS_URL: redis://redis-local:6379
|
| + volumes:
|
| + - .:/app
|
| + - /app/node_modules
|
| + - /app/.next
|
| + depends_on:
|
| + postgres-local:
|
| + condition: service_healthy
|
| + redis-local:
|
| + condition: service_healthy
|
| + profiles:
|
| + - dev
|
| + - local
|
| + networks:
|
| + - atom-local-net
|
| + labels:
|
| + - "atom.environment=local"
|
| + - "atom.service=app"
|
|
|
| +
|
| + app-prod:
|
| + build:
|
| + context: .
|
| + dockerfile: Dockerfile
|
| + container_name: atom-app-prod
|
| + ports:
|
| + - "${PORT:-3000}:3000"
|
| + environment:
|
| + NODE_ENV: production
|
| + POSTGRES_HOST: postgres-local
|
| + POSTGRES_PORT: 5432
|
| + POSTGRES_DB: ${POSTGRES_DB:-atom_local}
|
| + POSTGRES_USER: ${POSTGRES_USER:-atom_user}
|
| + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-local_password}
|
| + DATABASE_URL: postgresql://${POSTGRES_USER:-atom_user}:${POSTGRES_PASSWORD:-local_password}@postgres-local:5432/${POSTGRES_DB:-atom_local}
|
| + depends_on:
|
| + postgres-local:
|
| + condition: service_healthy
|
| + profiles:
|
| + - prod
|
| + networks:
|
| + - atom-local-net
|
| + labels:
|
| + - "atom.environment=local"
|
| + - "atom.service=app"
|
|
|
| +
|
| + prisma-studio:
|
| + image: node:18-alpine
|
| + container_name: atom-prisma-studio
|
| + working_dir: /app
|
| + command: sh -c "npx prisma studio --host 0.0.0.0 --port 5555"
|
| + ports:
|
| + - "5555:5555"
|
| + environment:
|
| + DATABASE_URL: postgresql://${POSTGRES_USER:-atom_user}:${POSTGRES_PASSWORD:-local_password}@postgres-local:5432/${POSTGRES_DB:-atom_local}
|
| + volumes:
|
| + - .:/app
|
| + depends_on:
|
| + postgres-local:
|
| + condition: service_healthy
|
| + profiles:
|
| + - studio
|
| + networks:
|
| + - atom-local-net
|
| + labels:
|
| + - "atom.environment=local"
|
| + - "atom.service=tool"
|
| +
|
| +volumes:
|
| + postgres_local_data:
|
| + redis_local_data:
|
| +
|
| +networks:
|
| + atom-local-net:
|
| + driver: bridge
|
|
|