# E2E 전용 임시 스택 — 운영과 완전히 격리(별도 프로젝트명 mirime2e, 별도 네트워크, 휘발성 DB).
# 운영 DB/컨테이너는 절대 건드리지 않는다. E2E가 끝나면 통째로 내려간다(down -v).
#
# 학습 포인트: E2E는 "진짜 같은 환경"이되 "버려도 되는 환경"이라야 한다.
#   - Postgres 데이터는 tmpfs(메모리)에 둬 매 실행 깨끗하게 시작하고 흔적을 안 남긴다.
#   - 백엔드 힙을 256MB로 제한해(작은 인스턴스에서 운영과 공존) 자원을 아낀다.
#   - 멘토 초기 비밀번호를 알려진 값으로 고정해 E2E가 로그인할 수 있게 한다.
name: mirime2e

services:
  postgres:
    image: postgres:17-alpine
    environment:
      POSTGRES_DB: mirim
      POSTGRES_USER: mirim
      POSTGRES_PASSWORD: e2epass
    tmpfs:
      - /var/lib/postgresql/data   # 휘발성 — 매 실행 새 DB, 디스크에 안 남음
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U mirim"]
      interval: 4s
      timeout: 5s
      retries: 15

  backend:
    build: ../backend
    environment:
      DB_HOST: postgres
      DB_PORT: 5432
      DB_NAME: mirim
      DB_USER: mirim
      DB_PASSWORD: e2epass
      COOKIE_SECURE: "false"          # 평문 HTTP라 secure 쿠키는 꺼야 로그인된다
      LOG_LEVEL: INFO
      MENTOR_INITIAL_PASSWORD: e2e-mentor-pass
      JAVA_TOOL_OPTIONS: "-Xmx256m"   # 작은 인스턴스에서 운영과 공존하도록 힙 제한
    depends_on:
      postgres:
        condition: service_healthy

  # 프론트 빌드 결과물을 webroot 볼륨에 복사(운영과 동일한 방식)
  frontend-build:
    build: ../frontend
    volumes:
      - webroot:/out

  caddy:
    image: caddy:2-alpine
    ports:
      - "8899:80"                     # 호스트 8899 → E2E 사이트(운영 80/443과 안 겹침)
    volumes:
      - ./Caddyfile.e2e:/etc/caddy/Caddyfile:ro
      - webroot:/srv:ro
    depends_on:
      - backend
      - frontend-build

volumes:
  webroot:
