# yakcloud-starter — YakCloud 배포 기반(스타터) + Claude Code 스킬 새 프로젝트를 **YakCloud 선언적 CI/CD**(Gitea 태그 push → 자동 배포)로 시작하기 위한 **기반 레포**다. 프레임워크 중립 최소 앱 + CI + 매니페스트 + **Claude Code 스킬**(`.claude/skills/yakcloud-deploy/`)이 들어 있어, 클론하면 바로 굴리거나, Claude Code에게 맡겨 원하는 대로 **추가/삭제**하며 확장할 수 있다. ``` .claude/skills/yakcloud-deploy/ # Claude Code 스킬(SKILL.md + assets) — 프로젝트에 그대로 따라감 app.py Dockerfile # 프레임워크 중립 스타터(표준 라이브러리, /healthz + PORT) yakcloud.yaml # 배포 매니페스트(대상 클러스터·소스·워크로드) .gitea/workflows/deploy.yml # 태그 push CI(매니페스트 구동 — 수정 불필요) scripts/yakcloud_deploy.py # 리컨실 배포 CLI DATA-SOURCES.md # 소스별 주입 env 표 ``` ## 새 프로젝트 시작 (택1) **A. 이 레포를 템플릿으로 클론** ```sh git clone https://gitea.yakenator.io/yakenator/yakcloud-starter.git my-app cd my-app && rm -rf .git && git init ``` **B. Claude Code로**: 새 프로젝트에서 `.claude/skills/yakcloud-deploy/` 만 복사해두면, Claude가 스킬을 참고해 앱·매니페스트·CI를 상황에 맞게 **추가/삭제**하며 스캐폴딩한다. (예: "yakcloud로 배포 붙여줘") ## 굴리기 (요약 — 상세는 SKILL.md §4~5) 1. 콘솔 → 설정 → **배포 토큰** 발급(`yakd_…`). 2. Gitea 레포 **Secrets**: `YAKCLOUD_URL`, `YAKCLOUD_TOKEN`, `YAKCLOUD_CLUSTER`, `REGISTRY_TOKEN`. 3. `yakcloud.yaml` 의 `cluster` / `image`(``) / (필요시) `requires`·`binds` 수정. 4. `git tag v0.1.0 && git push origin v0.1.0` → Actions 실행 → 콘솔 앱 탭/도메인 확인. 로컬 사전 점검: ```sh YAKCLOUD_URL=https://console.yakenator.io YAKCLOUD_TOKEN=yakd_… \ python3 scripts/yakcloud_deploy.py yakcloud.yaml --dry-run ``` ## 확장(추가/삭제) - **워크로드 추가**: `yakcloud.yaml` `workloads[]` 에 `{name, build, image, port, health, binds}` 추가(+ 그 build 컨텍스트에 Dockerfile). - **데이터 소스 추가**: `requires[]` 에 `{name,type,plan}` + 워크로드 `binds` 에 `{alias, source}`. 앱은 `_URL` 로 접속. - **도메인 노출**: 콘솔 설정→도메인 등록 후 `expose.host`(또는 `hosts: [...]`) 지정. - **삭제**: 해당 워크로드/`requires` 항목 제거 후 태그 push(멱등 리컨실).