version: '3.8' services: # PostgreSQL Database postgres: image: postgres:15-alpine container_name: nestjs-postgres restart: unless-stopped environment: POSTGRES_DB: nestjs_user_crud POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql networks: - nestjs-network # Redis for caching (optional) redis: image: redis:7-alpine container_name: nestjs-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data networks: - nestjs-network # NestJS Application app: build: context: . dockerfile: Dockerfile target: production container_name: nestjs-app restart: unless-stopped ports: - "3000:3000" environment: NODE_ENV: development DATABASE_URL: postgresql://postgres:postgres@postgres:5432/nestjs_user_crud?schema=public JWT_SECRET: docker-jwt-secret-key JWT_EXPIRES_IN: 7d API_PREFIX: api/v1 API_VERSION: 1.0.0 THROTTLE_TTL: 60 THROTTLE_LIMIT: 10 CORS_ORIGIN: http://localhost:3000 depends_on: - postgres - redis networks: - nestjs-network volumes: - ./src:/app/src - ./prisma:/app/prisma # Prisma Studio prisma-studio: image: node:18-alpine container_name: nestjs-prisma-studio restart: unless-stopped ports: - "5555:5555" environment: DATABASE_URL: postgresql://postgres:postgres@postgres:5432/nestjs_user_crud?schema=public working_dir: /app volumes: - .:/app command: sh -c "npm install && npx prisma generate && npx prisma studio --hostname 0.0.0.0" depends_on: - postgres networks: - nestjs-network volumes: postgres_data: redis_data: networks: nestjs-network: driver: bridge