#!/bin/bash
# 실습 #3 ④ — docker compose: 다중 컨테이너 + 헬스체크 + 재시작·로그 정책
# - compose 는 운영 배포의 "코드화" 입문. K8s 가기 전 단계로 충분히 강력.
# - 본 시나리오: postgres(healthcheck) + nginx (depends_on: service_healthy)
# - 로그 회전(max-size·max-file) 으로 디스크 폭주 방지
set -e

DIR="$(cd "$(dirname "$0")" && pwd)"
COMPOSE_FILE="$DIR/configs/04_docker-compose.yml"

# 1) docker compose v2 확인 (하이픈 없이 `docker compose`)
if ! sudo docker compose version >/dev/null 2>&1; then
    echo "→ docker compose v2 가 없습니다. setup_01_install_basic.sh 먼저 실행하세요."
    exit 1
fi
sudo docker compose version

# 2) compose 실행
cd "$DIR"
sudo docker compose -f "$COMPOSE_FILE" up -d

# 3) 상태 — db 가 healthy 가 되어야 web 이 뜸
echo
echo "=== 컨테이너 상태 ==="
sudo docker compose -f "$COMPOSE_FILE" ps

# 4) 헬스체크 확인 — pg_isready 통과 여부
echo
echo "=== db 헬스체크 ==="
sudo docker inspect -f '{{.State.Health.Status}}' "$(sudo docker compose -f "$COMPOSE_FILE" ps -q db)"

# 5) 실제 응답
sleep 2
echo
echo "=== nginx 응답 ==="
curl -sI http://localhost:8085 | head -2

# 6) 로그 회전 옵션 적용 확인
echo
echo "=== 로그 드라이버 (web) ==="
sudo docker inspect -f '{{.HostConfig.LogConfig}}' "$(sudo docker compose -f "$COMPOSE_FILE" ps -q web)"

# 7) 운영 디버깅 명령 한 사이클
echo
echo "다음 명령 직접 실습:"
echo "  docker compose -f $COMPOSE_FILE logs -f web"
echo "  docker compose -f $COMPOSE_FILE exec db psql -U postgres -c '\\l'"
echo "  docker compose -f $COMPOSE_FILE restart db"
echo "  docker compose -f $COMPOSE_FILE down       # 정지+컨테이너 삭제 (볼륨은 남음)"
echo "  docker compose -f $COMPOSE_FILE down -v    # 볼륨까지 삭제"
