From 63a3860f4b9ae85ec50526fc10d6eaf27bb8d1aa Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Thu, 20 Aug 2026 17:47:18 +0900 Subject: [PATCH] =?UTF-8?q?=EC=82=AC=EC=9D=B4=ED=8A=B8=EB=A5=BC=20Cloudfla?= =?UTF-8?q?re=20Pages=20=EC=97=90=20=EB=B0=B0=ED=8F=AC=ED=95=98=EA=B3=A0?= =?UTF-8?q?=20=EC=8B=A4=EC=A0=84=20=EA=B8=B0=EB=A1=9D=EC=9D=84=20=EB=82=A8?= =?UTF-8?q?=EA=B8=B4=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 배포됨: https://designpaca.pages.dev 커스텀 도메인 designpaca.chanpaca.net 은 Pages 에 등록했고 CNAME 대기 중이다 (토큰에 Zone DNS Edit 가 없어 레코드를 못 만든다). Cloudflare 403 의 원인은 토큰 권한이 아니라 .env 의 CF_ACCOUNT_ID 가 토큰이 볼 수 없는 계정을 가리킨 것이었다. /accounts 목록으로 실제 접근 가능한 계정을 찾아 교정했다. DEPLOYMENT_PLAN.md 에 8절을 추가했다 — git push 가 도메인으로 안 되는 이유, CI 가 네 번 실패한 서로 다른 원인, Cloudflare 진단법. --- docs/DEPLOYMENT_PLAN.md | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/docs/DEPLOYMENT_PLAN.md b/docs/DEPLOYMENT_PLAN.md index a55fbe6..547ee27 100644 --- a/docs/DEPLOYMENT_PLAN.md +++ b/docs/DEPLOYMENT_PLAN.md @@ -128,3 +128,48 @@ npm dist-tag add designpaca@<직전 정상 버전> latest # 수정 후 새 패치 릴리스 ``` 사용자 쪽 복구는 `npx designpaca@<정상버전> update --force`. + +--- + +## 8. 실제 배포에서 걸린 것 (2026-08-20) + +문서대로 되지 않은 지점들이다. 다음 사람이 같은 데서 막히지 않게 남긴다. + +### git push 는 도메인으로 못 한다 + +`git.chanpaca.net` 은 Cloudflare 뒤에 있어(104.21.x) **22·2222 포트가 둘 다 막혀 있다.** +오리진을 감추는 정상 구성이다. push 는 Tailscale 주소로 한다. + +``` +ssh://git@100.116.83.60:2222/yunchan/designpaca.git +``` + +SSH 키는 이미 Forgejo 에 등록돼 있어(`encep-win`) 토큰도 비밀번호도 필요 없다. + +### CI 가 네 번 실패했고 전부 다른 이유였다 + +| # | 증상 | 원인 | +|---|---|---| +| 1 | `exit 126` / 허가 거부 | Windows 에서 만든 `.sh` 가 mode 100644 로 커밋됐다. `git update-index --chmod=+x` + 워크플로에서 `bash script` 로 호출 | +| 2 | `Node 20 이상이 필요하다 (현재 v18)` | 러너에 Node 18 뿐. fnm 으로 22 설치. **그리고 `verify-node.sh` 가 Node 가 *없을 때만* 대체 경로를 훑고 있었다** — 낡았을 때도 찾도록 고침 | +| 3 | `ERR_MODULE_NOT_FOUND: picocolors` | tarball 을 풀어 `node dist/index.js` 를 직접 불렀다. 그건 npx 경로가 아니다. 임시 프로젝트에 `npm i` 후 실행하도록 교체 | +| 4 | 초록불인데 `# pass 0` | 빌드보다 테스트가 먼저라 CLI 테스트 6개가 전부 SKIP. 순서를 바꾸고 **SKIP 이 있으면 실패시키는 단계**를 넣었다 | + +**4번이 가장 위험했다.** 통과한 게 아니라 건너뛴 것이었고, 그래도 초록이었다. + +### Cloudflare 는 계정 ID 가 문제였다 + +`403 Authentication error` 가 계속 났다. 토큰 권한을 의심했지만 실제로는 +**`.env` 의 `CF_ACCOUNT_ID` 가 토큰이 볼 수 없는 계정을 가리키고 있었다.** + +진단법: `/accounts` 목록을 부르면 **토큰이 실제로 접근 가능한 계정**이 나온다. +그 id 로 `/accounts/{id}/pages/projects` 를 부르면 권한 유무가 갈린다. + +- `/accounts` 목록이 200 인 것은 권한 증거가 아니다. 유효한 토큰이면 누구나 200 이다 +- `/user/tokens/verify` 는 **User 토큰 전용**이다. 계정 소유 토큰(`cfat…`)은 여기서 거부당한다. + 그걸 보고 "토큰이 잘못됐다"고 판단하면 틀린다 — `wrangler whoami` 로 교차 확인해라 + +### 아직 남은 것 + +- `NPM_TOKEN` — 이름 선점이라 사람 승인 후에만 태그를 민다 +- `designpaca.chanpaca.net` CNAME — 토큰에 `Zone · DNS · Edit` 가 없어 수동으로 넣어야 한다