DMZ 엣지(nginx reverse proxy)의 인증서 현황과 배포 적용 상태를 제공하는 읽기 전용 API
https://dmz.lumir.space
데이터는 배포 옵저버 NginxGitDeploy 가 1분 주기로 갱신하는 정적 JSON 이다.
별도 백엔드 서비스가 없으므로 이 API 자체가 엣지의 가용성에 영향을 주지 않는다.
인증 없음 · 읽기 전용 · 내부 토폴로지 미노출. 업스트림 IP·포트는 응답에 포함되지 않는다.
헬스체크. 컨테이너가 떠 있고 배포가 원격과 동기화돼 있으면 ok, 아니면 degraded.
{ "status": "ok", "generatedAt": "2026-09-15T12:00:00+09:00", "server": "T21001" }
통합 상태. 아래 세 엔드포인트의 내용을 한 번에 반환한다.
인증서 현황. Let's Encrypt(자동갱신)와 상용 인증서를 모두 포함하며 만료 임박 순으로 정렬된다.
| 필드 | 타입 | 설명 |
|---|---|---|
name | string | certbot live 디렉터리명 또는 인증서 파일명 |
source | string | letsencrypt | commercial |
domains | string[] | SAN 목록 |
notAfter | date-time | 만료 시각 |
daysRemaining | integer | 음수면 이미 만료 |
status | string | valid | expiring_soon(21일 이내) | expired |
autoRenew | boolean | Let's Encrypt 만 true (12시간 주기 갱신) |
공개 도메인 목록과 각 도메인이 쓰는 인증서.
tls: false 는 :80 ACME 목록에만 있고 HTTPS server 블록이 아직 없는 상태를 뜻한다(전환 준비 중).
배포 적용 상태와 실행 중 컨테이너.
| 필드 | 설명 |
|---|---|
commit | 현재 엣지에 반영된 커밋 |
remoteCommit | origin/main |
inSync | false 면 아직 반영되지 않은 커밋이 있다 |
workingTreeClean | false 면 서버 로컬 수정 때문에 자동 배포가 멈춘 상태 |
lastDeployAt | 마지막 자동 배포 완료 시각 |
OpenAPI 3.0 스펙. Swagger UI·Postman 등에 그대로 불러올 수 있다.
curl -s https://dmz.lumir.space/api/health
# 만료 임박·만료된 인증서만
curl -s https://dmz.lumir.space/api/certificates \
| jq '.certificates[] | select(.status != "valid") | {name, daysRemaining, status}'
# 배포가 밀려 있는지
curl -s https://dmz.lumir.space/api/deployment | jq '.deployment | {commit, remoteCommit, inSync}'
/api/health 의 status 와
/api/certificates 의 expiringSoon 을 보면 된다.
generatedAt 이 수 분 이상 과거면 배포 옵저버 자체가 멈춘 것이므로 그 자체로 경보 신호다.