주제 13개 · Case 28 · Concept 5 · Reference 15 · Question 4 · Decision 4. 계약의 노드마다 종류가 요구하는 칸을 채우고, 본문이 있는 두 종류에는 SSOT 가 이미 그려 둔 도식 셋(value-boundaries · decision-path-404 · topic-variant-model)을 tech-log-studio/ 로 옮겨 붙였다. 새로 그린 그림은 없다. 검사 셋 전부 통과한다. check_body.mjs 56 편 중 본문이 있는 33 편 PASS check_prose.mjs 56 편 error 0 check_evidence.mjs --repo 포함 문제 없음 verify-tech-log-tree.py 프로젝트 5 · error 0 · warn 0 인용한 코드블록은 전부 SSOT 에서 찾아 대조했다. check_evidence.mjs 가 본문의 각 줄과 source 앵커와 계약 제목을 다시 확인한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3.2 KiB
3.2 KiB
kind, slug, title, topic, topicName, project, status, basisVersion, sourceRevision, source
| kind | slug | title | topic | topicName | project | status | basisVersion | sourceRevision | source | ||
|---|---|---|---|---|---|---|---|---|---|---|---|
| CONCEPT | deploying-without-a-registry | 레지스트리 없이 tar 를 import 하는 배포 경로 | only-visible-after-deploying | 배포해 봐야 드러난 것 | TechLog | 게시 전 | k3s + containerd · hyeonworks.com 단일 배포 단위 · 2026-09 시점 | tech-log@2026-09-02 |
|
레지스트리 없이 tar 를 import 하는 배포 경로
이 사이트는 이미지 레지스트리를 쓰지 않는다. 로컬에서 빌드한 이미지를 tar 로 말아 서버에 올리고, 클러스터 안에 일회성 Job 을 띄워 컨테이너 런타임으로 import 한 뒤 이미지 태그를 바꾼다. 이 경로 때문에 빌드 인자와 파일 권한이 배포에서만 드러난다.
관계
- 배포 인자를 빠뜨려 배포본이 존재하지 않는 주소를 불렀다 이 경로에서 빌드 인자가 어떻게 새는지가 그 기록에 있다.
- 컨테이너는 healthy 였고 SPA 가 부팅에 필요한 파일 하나만 403 이었다 이미지 안의 권한이 배포에서 드러난 사건이다.
- 배포 전에 사람이 돌려야 하는 것과 그 함정 이 경로에서 사람이 기억해야 하는 것들이 그 기준에 있다.
본문
레지스트리를 쓰지 않는다
로컬 docker build → docker save | gzip → scp dh-server:/tmp/deploy.tar.gz
→ kube-system 의 containerd import Job → kubectl set image
공개 Hub 는 소스가 들어간 이미지라 쓸 수 없다. k3s 의 containerd 소켓은 root 전용이라 사용자 셸에서 닿지 않는다. 그래서 클러스터 안에 일회성 Job 을 띄워 tar 를 import 한다.
배포 단위가 하나다
배포 단위는 hyeonworks.com 하나이고 서브도메인을 쓰지 않는다. 공개는 /, API 는 /api 다.
무엇이 이미지 안에서 굳는가
빌드 인자는 이미지에 굳는다. 런타임 환경 변수가 아니므로 배포한 뒤에 바꿀 수 없고, 잘못 넣으면 다시 빌드해서 다시 올려야 한다.
프론트 이미지가 요구하는 인자는 이만큼이다.
APP_PROFILE=production
VITE_ROUTER_BASE_PATH=/
RUNTIME_API_BASE_URL=https://hyeonworks.com/ ← 빠뜨리면 api.example.com
VITE_BUILD_ID / VITE_COMMIT_SHA / RELEASE_ID
CI_RUNNER_IMAGE=node@sha256:… ← 반드시 @sha256 다이제스트
SOURCE_DATE_EPOCH
백엔드 이미지는 Dockerfile 이 src/ 아래에 있고 RELEASE_VERSION·BUILD_VERSION·GIT_SHA·SOURCE_URL 을 받는다. 태그는 짧은 SHA 일곱 자이고 배포된 것과 맞춰야 한다.
빌드 산출물에 커밋 해시가 들어간다
백엔드 빌드 산출물 이름에 커밋 해시가 들어간다. 작업 트리가 더러우면 해시가 달라져 stale 산출물 검사가 멈춘다. 커밋한 뒤에 빌드를 돌려야 한다.
이 경로가 늦게 알려 주는 것
이미지가 healthy 로 올라오는 것과 사이트가 동작하는 것은 다르다. 컨테이너 안의 파일 권한, nginx 가 서빙하기로 한 파일 목록, 빌드에 굳은 주소는 전부 이 단계 뒤에 드러난다.