yakcloud CLI 추가(init/deploy/check) + install.sh + 공개용 README

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-27 16:55:32 +09:00
parent 859e5058b8
commit 0110be0558
6 changed files with 227 additions and 30 deletions

View File

@ -1,41 +1,47 @@
# yakcloud-starter — YakCloud 배포 기반(스타터) + Claude Code 스킬
# yakcloud-starter — YakCloud 프로젝트 기반 + CLI + Claude Code 스킬
새 프로젝트를 **YakCloud 선언적 CI/CD**(Gitea 태그 push → 자동 배포)로 시작하기 위한 **기반 레포**다.
프레임워크 중립 최소 앱 + CI + 매니페스트 + **Claude Code 스킬**(`.claude/skills/yakcloud-deploy/`)이 들어 있어,
클론하면 바로 굴리거나, Claude Code에게 맡겨 원하는 대로 **추가/삭제**하며 확장할 수 있다.
빈 폴더에서 **한 명령으로 새 프로젝트를 초기화**하고, **태그 push로 YakCloud에 자동 배포**하기 위한 기반.
프레임워크 중립 스타터 앱 + CI + 매니페스트 + **`yakcloud` CLI** + **Claude Code 스킬**(`.claude/skills/yakcloud-deploy/`)이 들어 있다.
## CLI 설치 (1회)
```sh
curl -fsSL https://gitea.yakenator.io/yakenator/yakcloud-starter/raw/branch/main/install.sh | sh
# PATH: export PATH="$HOME/.local/bin:$PATH"
```
## 빈 폴더 → 배포까지
```sh
yakcloud init my-app # 빈 폴더에 스타터+CI+매니페스트+Claude 스킬 스캐폴딩
cd my-app
# (앱 개발 — Claude Code 로: "yakcloud 로 배포 붙여줘" / 앱 코드 작성)
# yakcloud.yaml 의 cluster / image(<GITEA_USER>) 수정, 필요하면 requires·binds 추가
yakcloud deploy v0.1.0 # 커밋 + 태그 push → Gitea Actions 자동 배포
```
> **Claude Code 흐름**: 빈 폴더에서 Claude Code를 열고 "프로젝트 초기화해줘" → Claude가 `yakcloud init` 실행 →
> 개발 → "yakcloud에 배포해줘" → Claude가 `yakcloud deploy` 실행. (CLI가 없으면 스킬의 수동 절차로 진행)
## 배포 전 1회 준비
1. 콘솔 → 설정 → **배포 토큰** 발급(`yakd_…`).
2. Gitea 레포 만들고 `git remote add origin …`. **Secrets**: `YAKCLOUD_URL`, `YAKCLOUD_TOKEN`, `YAKCLOUD_CLUSTER`, `REGISTRY_TOKEN`.
3. `yakcloud.yaml``cluster`·`image` 수정.
사전 점검(직접 API, 계획만):
```sh
YAKCLOUD_URL=https://console.yakenator.io YAKCLOUD_TOKEN=yakd_… yakcloud check
```
## 구성
```
bin/yakcloud # CLI(init/deploy/check)
install.sh # CLI 설치
.claude/skills/yakcloud-deploy/ # Claude Code 스킬(SKILL.md + assets) — 프로젝트에 그대로 따라감
app.py Dockerfile # 프레임워크 중립 스타터(표준 라이브러리, /healthz + PORT)
yakcloud.yaml # 배포 매니페스트(대상 클러스터·소스·워크로드)
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`(`<GITEA_USER>`) / (필요시) `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}`. 앱은 `<ALIAS>_URL` 로 접속.
- **도메인 노출**: 콘솔 설정→도메인 등록 후 `expose.host`(또는 `hosts: [...]`) 지정.
- **삭제**: 해당 워크로드/`requires` 항목 제거 후 태그 push(멱등 리컨실).
- **워크로드/데이터소스/도메인 추가·삭제** `yakcloud.yaml` 을 편집하고 `yakcloud deploy` — 멱등 리컨실로 반영.
- 상세: `.claude/skills/yakcloud-deploy/SKILL.md`.