tutorials.ericfromkorea.com 호스팅
tutorials.ericfromkorea.com 서브도메인 자가호스팅 설정 및 관리
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부터.
여기서 배울 것
- Namecheap DNS A 레코드 설정 및 자동화 스크립트 재활용 패턴.
- Docker Compose로 Next.js 앱 호스팅, 호스트 포트 60024를 컨테이너 3000으로 매핑.
- Nginx로 80->443 리다이렉트, Let's Encrypt DNS-01 자동 갱신 설정.
- 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부터.