본문 바로가기

Playlist

docker-compose.yml

version: "3.8"

services:
  redis:
    image: redis:7
    container_name: playlist-redis
    ports:
      - "6379:6379"
    command: redis-server
    healthcheck:
      test: [ "CMD", "redis-cli", "PING" ]
      interval: 5s
      timeout: 3s
      retries: 5

  db:
    image: postgres:16
    container_name: playlist-db
    restart: always
    environment:
      POSTGRES_DB: playlist
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    ports:
      - "5432:5432"
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}" ]
      interval: 5s
      timeout: 3s
      retries: 5
    volumes:
      - pgdata:/var/lib/postgresql/data

  kafka:
    image: confluentinc/cp-kafka:7.5.0
    container_name: playlist-kafka
    ports:
      - "29092:29092"
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: 'broker,controller'
      KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka:29093'

      KAFKA_LISTENERS: >
        PLAINTEXT://kafka:9092,
        CONTROLLER://kafka:29093,
        PLAINTEXT_HOST://0.0.0.0:29092

      KAFKA_ADVERTISED_LISTENERS: >
        PLAINTEXT://kafka:9092,
        PLAINTEXT_HOST://host.docker.internal:29092

      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: >
        CONTROLLER:PLAINTEXT,
        PLAINTEXT:PLAINTEXT,
        PLAINTEXT_HOST:PLAINTEXT

      KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
      KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      CLUSTER_ID: 'ciWo7IWazngRchmPES6q5A=='
      KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
    healthcheck:
      test: [ "CMD", "bash", "-c", "echo > /dev/tcp/localhost/29092" ]
      interval: 5s
      timeout: 3s
      retries: 10

  kafka-ui:
    image: provectuslabs/kafka-ui:v0.7.2
    container_name: playlist-kafka-ui
    ports:
      - "8081:8080"
    environment:
      KAFKA_CLUSTERS_0_NAME: local
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
    depends_on:
      kafka:
        condition: service_healthy

  app:
    build: .
    container_name: playlist-app
    healthcheck:
      test: [ "CMD-SHELL", "curl -f http://localhost:8080/actuator/health || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 90s
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
      kafka:
        condition: service_healthy
    environment:
      SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
      SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL}
      SPRING_DATASOURCE_USERNAME: ${SPRING_DATASOURCE_USERNAME}
      SPRING_DATASOURCE_PASSWORD: ${SPRING_DATASOURCE_PASSWORD}
      REDIS_HOST: ${REDIS_HOST}
      REDIS_PORT: ${REDIS_PORT}
      JWT_ACCESS_TOKEN_SECRET: ${JWT_ACCESS_TOKEN_SECRET}
      JWT_REFRESH_TOKEN_SECRET: ${JWT_REFRESH_TOKEN_SECRET}
      JWT_ACCESS_TOKEN_EXPIRATION_MS: ${JWT_ACCESS_TOKEN_EXPIRATION_MS}
      JWT_REFRESH_TOKEN_EXPIRATION_MS: ${JWT_REFRESH_TOKEN_EXPIRATION_MS}
      SPRING_MAIL_HOST: ${SPRING_MAIL_HOST}
      SPRING_MAIL_PORT: ${SPRING_MAIL_PORT}
      SPRING_MAIL_USERNAME: ${SPRING_MAIL_USERNAME}
      SPRING_MAIL_PASSWORD: ${SPRING_MAIL_PASSWORD}
      CONTENT_BUCKET: ${CONTENT_BUCKET}
      PROFILE_BUCKET: ${PROFILE_BUCKET}
      LOGS_BUCKET: ${LOGS_BUCKET}
      AWS_REGION: ${AWS_REGION}
      TMDB_API_KEY: ${TMDB_API_KEY}
      TMDB_BASE_URL: ${TMDB_BASE_URL}
      SPORTSDB_API_KEY: ${SPORTSDB_API_KEY}
      SPORTSDB_BASE_URL: ${SPORTSDB_BASE_URL}
      SPRING_KAFKA_BOOTSTRAP_SERVERS: ${KAFKA_BOOTSTRAP_SERVERS}
    ports:
      - "8080:8080"
    restart: always
    env_file:
      - .env

volumes:
  pgdata:

'Playlist' 카테고리의 다른 글

build.gradle  (0) 2025.12.17
Dockerfile  (0) 2025.12.17
application-prod.yml  (0) 2025.12.17
application-dev.yml  (0) 2025.12.17
application.yml  (0) 2025.12.17