1. Local

services:
  database:
    image: mariadb:latest
    restart: always
    ports:
    - 3308:3306
    environment:
      MARIADB_ROOT_PASSWORD: my_cool_secret
      MARIADB_DATABASE: springbootdb
    volumes:
      - mariadb_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      start_period: 10s
      interval: 10s
      timeout: 5s
      retries: 3
    networks:
      - my-network
  backend:
    depends_on:
      database:
        condition: service_healthy
    image: kudong/newspace-backend:latest
    ports:
      - 8080:8080
    environment:
      OPENAI_API_KEY: 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
      SECRET_TOKEN: Newspace's token secret
      OPENAI_MODEL: deepseek-r1-distill-qwen-32b
      DB_USERNAME: root
      DB_PASSWORD: my_cool_secret
      DB_URL: jdbc:mariadb://database:3306/springbootdb?useUnicode=true&characterEncoding=utf-8&serverTimeZone=Asia/Seoul
    volumes:
      - "C:\\\\uploads:/newspace/uploads"    
    networks:
      - my-network
  frontend:
    depends_on:
      database:
        condition: service_healthy
      backend:
        condition: service_started
    image: kudong/newspace-frontend:latest
    ports:
      - 5173:80
    environment:
      BACKEND_IP: 127.0.0.1
      BACKEND_PORT: 8080
    networks:
      - my-network
networks:
  my-network:
    driver: bridge
volumes:
  mariadb_data:

2. Release Server

services:
  backend:
    image: newspace-backend:latest
    ports:
      - 8080:8080
    environment:
      OPENAI_API_KEY: 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
      OPENAI_MODEL: deepseek-r1-distill-llama-70b
      SECRET_TOKEN: Newspace's token secret
      DB_USERNAME: lgcns
      DB_PASSWORD: tldpsdptm
      DB_URL: jdbc:mariadb://172.21.1.22:3306/springbootdb?useUnicode=true&characterEncoding=utf-8&serverTimeZone=Asia/Seoul
    volumes:
      - /home/lgcns/uploads:/newspace/uploads
    networks:
      - my-network

  frontend:
    depends_on:
      - backend
    image: newspace-frontend:latest
    ports:
      - 5173:80
    environment:
      BACKEND_IP: kudong.kr
      BACKEND_PORT: 55021
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

3. ECR + EC2

Eureka + Gateway

services:
  newspace-eureka:
    image: 803691999553.dkr.ecr.us-east-1.amazonaws.com/mini-project-9/newspace-eureka:latest
    ports:
      - 8070:8070
    environment:
      SPRING_CONFIG_IMPORT: <http://34.230.80.208:8888/>
      SPRING_APPLICATION_NAME: newspace-eureka
      SPRING_APPLICATION_PORT: 8070
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: <http://3.82.228.233:8070/eureka/>
      EUREKA_INSTANCE_PREFER_IP_ADDRESS: true
    networks:
      - my-network

  newspace-gateway:
    depends_on:
      newspace-eureka:
        condition: service_started
    image: 803691999553.dkr.ecr.us-east-1.amazonaws.com/mini-project-9/newspace-gateway:latest
    ports:
      - 8072:8072
    environment:
      SPRING_CONFIG_IMPORT: <http://34.230.80.208:8888/>
      SPRING_APPLICATION_NAME: newspace-gateway
      SPRING_APPLICATION_PORT: 8072
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: <http://3.82.228.233:8070/eureka/>
      EUREKA_INSTANCE_PREFER_IP_ADDRESS: true
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

Config Service + RabbitMQ

services:
  rabbitmq:
    image: rabbitmq:4.0-management
    container_name: newspace-rabbitmq
    ports:
      - "5671:5671"
      - "15671:15671"
    environment:
      RABBITMQ_DEFAULT_USER: guest
      RABBITMQ_DEFAULT_PASS: guest
    networks:
      my-network:

  newspace-config-service:
    image: 803691999553.dkr.ecr.us-east-1.amazonaws.com/mini-project-9/newspace-config-service:latest
    container_name: newspace-config-service
    ports:
      - "8888:8888"
    environment:
      RABBITMQ_HOST: 34.230.80.208
    networks:
      my-network:

networks:
  my-network:
    driver: bridge