← 전체로 돌아가기
프로젝트 메모 network -home-son-prj-tutorials

tutorials.ericfromkorea.com 호스팅

tutorials.ericfromkorea.com 서브도메인 자가호스팅 설정 및 관리

dnshostingdockernginxlets-encrypt

tutorials.ericfromkorea.com 도메인

Namecheap A 레코드 125.131.103.44 (집 공유기 WAN IP) 추가. Google/Cloudflare 전파 확인 완료. print, nas, learn 서브도메인과 같은 패턴. nginx + Let's Encrypt 자가호스팅. Namecheap 조작은 /home/son/prj/learn/deploy/namecheap_dns.py 재사용. ApiUser urustin. 사용자 요청: Vercel 말고 기존 자가호스팅 패턴 선호. "그냥 namecheap에서 해줘"

현재 상태: - DNS A 레코드 완료. - Docker 컨테이너 tutorials-fe: bash # docker-compose.yml 위치: /home/son/prj/tutorials/docker-compose.yml # 호스트 포트 60024 -> 컨테이너 3000 # restart: unless-stopped Next.js standalone 빌드 (output: "standalone"). fe/Dockerfile multi-stage, problems/ 폴더도 런타임에 복사함. - Nginx: nginx # /etc/nginx/sites-enabled/tutorials.ericfromkorea.com # 80 -> 443 리다이렉트 # 443은 localhost:60024 프록시 - Let's Encrypt 인증서: /etc/letsencrypt/live/tutorials.ericfromkorea.com/. 만료 2026-07-18. DNS-01 자동 갱신. - 종단간 200 OK 확인 완료.

적용/관리: - 재배포: bash cd /home/son/prj/tutorials && sudo docker compose up -d --build - 인증서 갱신: certbot systemd timer로 자동 처리. bash sudo certbot renew # 수동 갱신 필요 시 갱신 훅은 /home/son/prj/learn/deploy/certbot-auth.sh + certbot-cleanup.sh 사용. learn 프로젝트 .env·.venv에 의존함. learn 이동/삭제 시 tutorials 갱신 깨짐. 주의. - 포트 번호: print=60021, dev-portfolio=60022, cg-portfolio=60023, tutorials=60024. 새 서브도메인 60025부터.

여기서 배울 것

  1. Namecheap DNS A 레코드 설정 및 자동화 스크립트 재활용 패턴.
  2. Docker Compose로 Next.js 앱 호스팅, 호스트 포트 60024를 컨테이너 3000으로 매핑.
  3. Nginx로 80->443 리다이렉트, Let's Encrypt DNS-01 자동 갱신 설정.
  4. certbot 갱신 훅이 다른 프로젝트(`.env`, `.venv`)에 의존하는 점 유의.
원본 파일 보기 (.claude/projects/-home-son-prj-tutorials/memory/project_domain_hosting.md)
---
name: tutorials 프로젝트 도메인 · 호스팅 상태
description: tutorials.ericfromkorea.com 서브도메인 DNS 설정 및 자가호스팅 진행 상황
type: project
originSessionId: 19d9a159-187f-45ff-a97d-55357b523c0c
---
**도메인: `tutorials.ericfromkorea.com`**

- 2026-04-20 Namecheap A 레코드 추가 → `125.131.103.44` (가정용 공유기 WAN IP). Google/Cloudflare 전파 확인.
- 형제 서브도메인(`print`, `nas`, `learn`) 모두 같은 IP로 nginx + Let's Encrypt 자가호스팅 패턴을 씀 — tutorials도 동일 패턴 가정.
- Namecheap 조작은 `/home/son/prj/learn/deploy/namecheap_dns.py` 재사용 (글로벌 메모리 `reference_namecheap_dns_helper.md` 참고). ApiUser는 `urustin`.

**Why:** 사용자가 Vercel 대신 기존 자가호스팅 패턴을 선호 (`그냥 namecheap에서 해줘` — 2026-04-20).

**현재 상태 (2026-04-20):**
- DNS A 레코드 완료
- Docker 컨테이너 `tutorials-fe`: `docker-compose.yml`은 `/home/son/prj/tutorials/docker-compose.yml`, 호스트 **포트 60024** → 컨테이너 3000. `restart: unless-stopped`.
- Next.js standalone 빌드 (`fe/next.config.ts`의 `output: "standalone"`). `fe/Dockerfile`은 multi-stage. `problems/` 폴더도 런타임 스테이지로 복사함.
- nginx 사이트: `/etc/nginx/sites-enabled/tutorials.ericfromkorea.com` — 80 → 443 리다이렉트, 443은 `localhost:60024` 프록시.
- Let's Encrypt 인증서: `/etc/letsencrypt/live/tutorials.ericfromkorea.com/`. 만료 **2026-07-18**. DNS-01 자동 갱신 (renewal hook 자동 등록).
- 종단간 200 OK 확인 완료.

**How to apply:**
- 재배포: `cd /home/son/prj/tutorials && sudo docker compose up -d --build`
- 인증서 갱신은 certbot이 systemd timer로 자동 처리 — 수동 갱신 필요 시 `sudo certbot renew`.
- 인증서 갱신 훅은 **`/home/son/prj/learn/deploy/certbot-auth.sh` + `certbot-cleanup.sh`**를 쓰므로 learn 프로젝트의 `.env`·`.venv`에 의존. learn 이동·삭제 시 tutorials 갱신도 깨짐 — 주의.
- 포트 번호 순서: `print=60021`, `dev-portfolio=60022`, `cg-portfolio=60023`, `tutorials=60024`. 새 서브도메인 추가 시 60025부터.