version: '3.9' services: nginx: image: nginx:1.26 ports: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - upload-data:/data/uploads:ro depends_on: - frontend - backend networks: - gw-network restart: unless-stopped frontend: build: context: ./frontend dockerfile: Dockerfile environment: - NEXT_PUBLIC_API_URL=/api depends_on: - backend networks: - gw-network restart: unless-stopped backend: build: context: ./backend dockerfile: Dockerfile env_file: - .env environment: - SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE:-mssql} - DB_URL=${DB_URL} - DB_USERNAME=${DB_USERNAME} - DB_PASSWORD=${DB_PASSWORD} - JWT_SECRET=${JWT_SECRET} - REDIS_HOST=${REDIS_HOST:-redis} - REDIS_PORT=${REDIS_PORT:-6379} - REDIS_PASSWORD=${REDIS_PASSWORD:-} - RABBITMQ_HOST=${RABBITMQ_HOST:-rabbitmq} - RABBITMQ_PORT=${RABBITMQ_PORT:-5672} - RABBITMQ_USER=${RABBITMQ_USER:-guest} - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD:-guest} - FILE_UPLOAD_PATH=${FILE_UPLOAD_PATH:-/data/uploads} volumes: - upload-data:/data/uploads depends_on: - redis - rabbitmq networks: - gw-network restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s redis: image: redis:7-alpine ports: - "6379:6379" volumes: - redis-data:/data networks: - gw-network restart: unless-stopped command: > redis-server --appendonly yes ${REDIS_PASSWORD:+--requirepass ${REDIS_PASSWORD}} rabbitmq: image: rabbitmq:3.13-management ports: - "5672:5672" - "15672:15672" # 관리 콘솔 environment: - RABBITMQ_DEFAULT_USER=${RABBITMQ_USER:-guest} - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD:-guest} volumes: - rabbitmq-data:/var/lib/rabbitmq networks: - gw-network restart: unless-stopped volumes: redis-data: rabbitmq-data: upload-data: networks: gw-network: driver: bridge