Namecheap DNS 헬퍼 스크립트
Namecheap DNS A/TXT 레코드 헬퍼 스크립트 사용법.
Namecheap DNS 변경 (A/TXT 추가·수정)은 이미 만들어진 헬퍼 스크립트 재사용함. 매번 curl로 짤 필요 없음.
스크립트: /home/son/prj/log/deploy/namecheap_dns.py
자격증명: /home/son/prj/log/.env
- NAMECHEAP_API_USER
- NAMECHEAP_API_KEY
- NAMECHEAP_USERNAME
- NAMECHEAP_CLIENT_IP
계정 정보 중요
ApiUser / UserName은 urustin. (도메인 이름 ericfromkorea 아님. 과거 error 1011102 경험 있음, 혼동 금지.)
ClientIp는 .env의 NAMECHEAP_CLIENT_IP (현재 125.131.103.44). Namecheap API Access에 이 IP 화이트리스트 등록 필수. WAN IP 바뀌면 대시보드에서 재등록해야 함.
tutorials 서브도메인 A 레코드 추가 예시:
SITE_DOMAIN=tutorials.ericfromkorea.com PUBLIC_IP=125.131.103.44 \
python3 /home/son/prj/log/deploy/namecheap_dns.py a
스크립트 내부 함수 요약:
- ensure_a_record(fqdn, ip, ttl): 멱등. 없으면 생성, IP 다르면 업데이트, 같으면 unchanged 처리.
- add_txt_record(fqdn, value, ttl): Let's Encrypt DNS-01 챌린지용.
- remove_txt_record(fqdn, value): 챌린지 정리.
- CLI: a / txt-add <fqdn> <value> / txt-del <fqdn> <value>
Namecheap setHosts API 위험함. 모든 레코드 덮어쓰는 destructive API.
헬퍼는 getHosts로 전체 읽고 -> 변경 -> 전체 setHosts 패턴으로 안전하게 구현됨.
직접 curl 쓸 때는 이 패턴 반드시 지켜야 함.
여기서 배울 것
- Namecheap DNS 변경 시 헬퍼 스크립트 재사용.
- `ApiUser`와 `UserName`은 `urustin`으로 고정.
- `ClientIp` 화이트리스트 관리 중요.
- `setHosts` API는 destructive, `get-then-set` 패턴 필수.
원본 파일 보기 (.claude/memory/reference_namecheap_dns_helper.md)
---
name: Namecheap DNS 조작 헬퍼 스크립트 위치
description: 사용자가 만든 재사용 가능한 Python 스크립트 — Namecheap API로 A/TXT 레코드를 안전하게 추가/수정 (GET-first-then-SET 패턴)
type: reference
---
Namecheap DNS 변경(A/TXT 추가·수정)은 **이미 만들어진 헬퍼**를 재사용한다. 매번 curl로 처음부터 짤 필요 없음.
**파일 위치**
- 스크립트: `/home/son/prj/log/deploy/namecheap_dns.py`
- 자격증명: `/home/son/prj/log/.env` (NAMECHEAP_API_USER, NAMECHEAP_API_KEY, NAMECHEAP_USERNAME, NAMECHEAP_CLIENT_IP)
**중요: 계정 정보**
- `ApiUser` / `UserName`은 **`urustin`** (도메인 이름 `ericfromkorea`가 아님).
- 과거 대화에서 `ericfromkorea`로 시도하다 error 1011102 받은 기록 있음 — 절대 혼동 말 것.
- `ClientIp`는 `.env`의 `NAMECHEAP_CLIENT_IP` (현재 `125.131.103.44` — 가정용 공유기 WAN IP). Namecheap API Access에 이 IP가 화이트리스트로 등록되어 있어야 함. WAN IP 바뀌면 대시보드에서 재등록 필요.
**사용법 예시 (tutorials 서브도메인 A 레코드 추가)**
```bash
SITE_DOMAIN=tutorials.ericfromkorea.com PUBLIC_IP=125.131.103.44 \
python3 /home/son/prj/log/deploy/namecheap_dns.py a
```
**함수 요약** (스크립트 내부)
- `ensure_a_record(fqdn, ip, ttl)` — 멱등. 없으면 생성, 있고 IP 다르면 업데이트, 같으면 `unchanged`.
- `add_txt_record(fqdn, value, ttl)` — Let's Encrypt DNS-01 챌린지용.
- `remove_txt_record(fqdn, value)` — 챌린지 정리.
- CLI: `a` / `txt-add <fqdn> <value>` / `txt-del <fqdn> <value>`.
**Namecheap setHosts의 위험성**
setHosts는 **모든 레코드를 덮어쓰는 destructive API**다. 헬퍼는 내부적으로 항상 getHosts로 전체를 읽고 + 변경 + 전체 set 하도록 구현되어 있어 안전하지만, 직접 curl을 쓸 때는 이 패턴을 반드시 지켜야 한다.