컴포즈를 걷어내고 k3s 배포 준비 — 이미지 2종·Caddy·로컬 대체

무엇을

infra/docker-compose.yml 을 삭제하고, EC2 + k3s 배포에 필요한 것을 저장소에 넣는다. 결정·근거: _project/decisions/107.

왜

w3-aws-deploy 가 infra/docker/server.Dockerfile 을 [x] 로 적어 두었으나 git 이력 전수 확인 결과 커밋된 적이 없다. infra/terraform/·infra/aws-console-setup.md 도 마찬가지다. 실제로 있던 것은 infra/elasticsearch/Dockerfile 하나였고, 그것마저 컴포즈를 지우면서 함께 삭제된 상태였다. 이게 없으면 배포 첫 단계에서 막힌다.

완료 조건

실측 (2026-09-08, 로컬)

docker build -f infra/docker/server.Dockerfile -t callguard-server:test .   → 362MB
docker run -e ELASTICSEARCH_URL=... -e DATABASE_URL=... callguard-server:test
GET /health  → {"status":"ok","postgres_configured":true,
                "elasticsearch_configured":true,
                "spokes":["masking","closure_gate","retrieval"]}
GET /docs    → 200   (Swagger, 경로 13개)

spokes 의 retrieval 이 빌드 컨텍스트가 저장소 루트인지를 재는 지표다. server/ 만 넣으면 여기서만 드러나고 서버는 정상으로 뜬다(decisions/024).

남은 것

k3s 매니페스트(Deployment·Service·PVC·Secret)는 개인 운영 지침서에 인라인으로 있다. 저장소에 infra/k8s/ 로 옮길지는 자격증명이 섞이지 않는 범위에서 따로 정한다 — 지침서 자체는 계정·키가 들어 있어 저장소에 두지 않는다(SEC-2, CLAUDE.md §8).