Skip to content

feat: HTTPS via Caddy + 문서 구조 재정비 - #1

Open
Sangwon91 wants to merge 1 commit into
mainfrom
feat/https-caddy
Open

feat: HTTPS via Caddy + 문서 구조 재정비#1
Sangwon91 wants to merge 1 commit into
mainfrom
feat/https-caddy

Conversation

@Sangwon91

Copy link
Copy Markdown
Collaborator

배경

http://168.131.138.98:48000 평문 endpoint로 운영 중이던 lakeFS 서버에 HTTPS를 도입한다. 동기는 dartworklabs/company-analysis#118 — nightly fetch GHA가 매일 외부 인터넷을 경유해 평문으로 access key를 보내고 있어 MITM 위험.

변경 요약

인프라

  • docker-compose.yml: caddy:2 서비스 추가 (80/443). lakefsexpose: 8000만 — 호스트 포트 매핑 제거. 외부 접근은 Caddy를 통해서만.
  • Caddyfile: ACME HTTP-01로 Let's Encrypt 자동 발급/갱신. {$LAKEFS_DOMAIN} / {$ACME_EMAIL} 환경변수 보간.
  • .env.example: LAKEFS_DOMAIN, ACME_EMAIL, LAKEFS_NAS_PATH 추가.
  • .gitignore: caddy_data/, caddy_config/ (인증서 영속 볼륨용 mount-via-volume이라 실제 영향은 적지만 bind mount 변경 대비).

문서

  • README.md: HTTPS-first 빠른 시작으로 재작성. 세부 내용은 docs/로 분리.
  • docs/SPEC.md (NEW): 아키텍처 다이어그램, 컴포넌트별 결정, 보안 모델, 위협 모델, 데이터 모델, 가용성/복구.
  • docs/OPERATIONS.md (NEW): 최초 배포, Squarespace DNS A record 추가 절차, 일상 운영, 백업 정책, 자격증명 회전, 트러블슈팅 (ACME 실패, ISP 80/443 차단, 디스크 풀 등).
  • docs/lakectl-manual.md (NEW, 기존 lakefs-manual.md 대체): 코드 블록 띄어쓰기 깨진 부분 수정, endpoint를 https://<LAKEFS_DOMAIN>로 갱신.
  • lakefs-manual.md 삭제.

호환성

기존 :48000 호스트 포트는 제거. 기존 클라이언트는 모두 endpoint_urlhttps://<LAKEFS_DOMAIN>로 갱신해야 한다 (사실상 1-2곳 — 운영자 로컬 + GH Actions secret).

배포 시 필요한 작업 (이 PR 머지 후)

서버에서:

cd lakefs-server
git pull
# .env에 LAKEFS_DOMAIN, ACME_EMAIL 추가
docker compose up -d
docker compose logs -f caddy   # certificate obtained successfully 확인

DNS:

  • Squarespace에서 lakefs.<domain> A record → 서버 공인 IP 추가 (절차: docs/OPERATIONS.md §2)

전제 조건:

  • 80/443 inbound 가능 (라우터/방화벽/ISP). 막혀 있으면 docs/OPERATIONS.md §6.4 참조 — Cloudflare Tunnel 우회 필요.

Test plan

  • .env 채워서 docker compose up -d 정상 부팅
  • Caddy 로그에 certificate obtained successfully
  • curl https://<LAKEFS_DOMAIN>/_health 200
  • 호스트에서 nc -zv localhost 48000 실패 (외부 직접 노출 차단 확인)
  • lakectl 클라이언트에서 endpoint_url을 https로 갱신 후 lakectl repo list 정상
  • company-analysis nightly fetch GHA workflow 정상 (LAKEFS_ENDPOINT_URL secret 갱신 후)

후속 작업 (이 PR 범위 밖)

  • LAKEFS_ENDPOINT_URL GH secret rotate (company-analysis repo)
  • 사용자 access key rotate (HTTP 평문 시기 노출 가능성 차단)
  • 백업 cron 셋업 (docs/OPERATIONS.md §4)

- docker-compose: add caddy:2 service (80/443), lakefs becomes internal-only
  (expose 8000, no host port). Removes the old 48000 plaintext exposure.
- Caddyfile: automatic Let's Encrypt via ACME HTTP-01, env-driven domain.
- .env.example: add LAKEFS_DOMAIN, ACME_EMAIL, LAKEFS_NAS_PATH.
- .gitignore: ignore caddy_data/ caddy_config/.
- README: rewrite as HTTPS-first quickstart with pointers to docs/.
- docs/SPEC.md: architecture, security model, threat model, data model.
- docs/OPERATIONS.md: deploy steps, Squarespace DNS, backup, credential
  rotation, troubleshooting.
- docs/lakectl-manual.md: client-side guide (rebuilt from old
  lakefs-manual.md with broken code blocks fixed and endpoints set to
  https://<LAKEFS_DOMAIN>).
- Remove lakefs-manual.md (moved into docs/).

Background: dartworklabs/company-analysis#118 (HTTP plaintext + private
IP exposure of the lakeFS endpoint used by nightly fetch).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant