jungwoo choi 6ffc6425bb fix: promote 실패 시 거짓 성공 방지 + 기본 소스 이름 프로젝트 고유화(공용 클러스터 충돌 예방) (v0.29.0)
- bin/yakcloud: promote 의 리컨실(deploy.py) 실패면 '✓ 승격 완료' 대신 die(운영 승인 대기 403 안내 포함).
  set -e 미사용이라 이전엔 배포 차단돼도 성공으로 표시되던 버그.
- yakcloud.yaml: 기본 소스 이름 appdb→my-app-db(init 이 <project>-db 로 치환). 공용 클러스터에서
  리컨실이 동명 기존 소스를 재사용·바인딩 → 남의 DB 에 테이블 만드는 사고 예방.
- deploy.py: 기존 소스 재사용 시 로그를 ⚠ 로 강화(공유 위험·고유 이름 권고 명시).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-31 15:01:26 +09:00

yakcloud 스타터 (프레임워크 중립)

의존성 0의 최소 HTTP 서버. 배포 계약만 지키면 어떤 스택으로 바꿔도 된다:

  • PORT 환경변수로 리슨(기본 8080)
  • GET /healthz → 200 (매니페스트 health 경로)
  • (선택) 바인딩된 소스는 <ALIAS>_URL 등 env로 접속

로컬 실행 (앱만)

PORT=8080 python3 app.py
curl localhost:8080/healthz     # {"ok":true}
curl localhost:8080/            # 앱 정보 + 연결된 소스 키

로컬 개발 (K8s 파리티) — yakcloud dev

운영과 같은 K8s + 같은 바인딩 env로, 선언한 데이터소스까지 로컬에 띄워 검증한다:

yakcloud dev up       # 최초 1회 — 로컬 kind + 인그레스
yakcloud dev deploy   # requires 소스 + workloads 를 로컬 배포(관리형과 동일한 <ALIAS>_URL 등 주입)
curl -s http://<project>.dev.localhost/   # bound_sources 에 연결 키 확인
yakcloud dev down     # 정리

같은 매니페스트·같은 이미지로 준비되면 yakcloud project promote --to val|prod 로 직선 승격.

매니페스트 매핑 (yakcloud.yaml)

workloads:
  - name: web
    build: ./            # 이 디렉터리(Dockerfile)를 CI 가 빌드
    image: gitea.yakenator.io/<GITEA_USER>/<project>-web:${TAG}
    port: 8080
    health: /healthz
    binds:
      - { alias: db, source: appdb }   # → 앱에서 os.environ["DB_URL"] 로 접속

다른 스택으로 교체

app.py(+Dockerfile)를 원하는 언어/프레임워크로 교체하되 위 3계약 유지. 소스별 주입 env 전체 목록은 ../reference/DATA-SOURCES.md 참고.

Description
YakCloud 배포 기반 스타터 + Claude Code 스킬(yakcloud-deploy)
Readme 1.5 MiB
Languages
Python 65.6%
Shell 34.3%
Dockerfile 0.1%