cli v0.5.0: deploy가 도메인 리컨실 + 소스 405 액션형 에러 + --local 폴백/러너 프리플라이트 + 에러 힌트/pyyaml 가드; init에서 bin/install 제거; 문서(토큰권한·healthz·러너) 보강
This commit is contained in:
69
README.md
69
README.md
@ -1,54 +1,29 @@
|
||||
# yakcloud-starter — YakCloud 프로젝트 기반 + CLI + Claude Code 스킬
|
||||
# yakcloud 스타터 (프레임워크 중립)
|
||||
|
||||
빈 폴더에서 **한 명령으로 프로젝트를 초기화**하고, **태그 push로 자동 배포**하며, **배포 환경을 CLI로 상세 설정**한다.
|
||||
프레임워크 중립 스타터 앱 + CI + 매니페스트 + **`yakcloud` CLI** + **Claude Code 스킬**(`.claude/skills/yakcloud-deploy/`) 포함.
|
||||
의존성 0의 최소 HTTP 서버. **배포 계약**만 지키면 어떤 스택으로 바꿔도 된다:
|
||||
- `PORT` 환경변수로 리슨(기본 8080)
|
||||
- `GET /healthz` → 200 (매니페스트 `health` 경로)
|
||||
- (선택) 바인딩된 소스는 `<ALIAS>_URL` 등 env로 접속
|
||||
|
||||
## CLI 설치 (1회)
|
||||
## 로컬 실행
|
||||
```sh
|
||||
curl -fsSL https://gitea.yakenator.io/yakenator/yakcloud-starter/raw/branch/main/install.sh | sh
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
PORT=8080 python3 app.py
|
||||
curl localhost:8080/healthz # {"ok":true}
|
||||
curl localhost:8080/ # 앱 정보 + 연결된 소스 키
|
||||
```
|
||||
|
||||
## 빈 폴더 → 배포까지
|
||||
```sh
|
||||
yakcloud project init my-app # 스타터+CI+매니페스트+Claude 스킬 스캐폴딩
|
||||
cd my-app
|
||||
# (앱 개발 — Claude Code: "yakcloud 로 배포 붙여줘")
|
||||
yakcloud project info # 프로젝트 개괄(매니페스트 + 라이브 상태)
|
||||
yakcloud project deploy # 커밋 + 태그 push (버전 미지정 시 자동 버전업) → 자동 배포
|
||||
## 매니페스트 매핑 (`yakcloud.yaml`)
|
||||
```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"] 로 접속
|
||||
```
|
||||
> **Claude Code 흐름**: 빈 폴더에서 "프로젝트 초기화해줘" → `yakcloud project init` → 개발 → "yakcloud에 배포해줘" → `yakcloud project deploy`.
|
||||
|
||||
## 명령
|
||||
```
|
||||
project init [name] 빈 폴더 스캐폴딩
|
||||
project deploy [vX.Y.Z] 커밋+태그 push → 자동 배포 (버전 생략 시 최신 태그 patch+1 자동 버전업)
|
||||
project info 프로젝트 개괄(매니페스트 + 라이브 상태)
|
||||
project check dry-run(직접 API 계획만)
|
||||
─ 배포환경 설정(앱별): 매니페스트 수정 + 배포중이면 재빌드 없이 라이브 반영 ─
|
||||
domain <fqdn> [wl] 도메인 등록 + 워크로드 할당(관리형=즉시 활성)
|
||||
scale <wl> <n> replicas
|
||||
set <wl> --image/--port/--health/--cpu/--mem/--path/--rewrite
|
||||
env <wl> KEY=VAL … [--secret KEY] [--unset KEY]
|
||||
source add <name> <type> [plan] | source rm <name>
|
||||
bind <wl> <source> <alias> | unbind <wl> <alias>
|
||||
```
|
||||
필요 env: `YAKCLOUD_URL`, `YAKCLOUD_TOKEN`(배포토큰 yakd_…), (선택) `YAKCLOUD_CLUSTER`
|
||||
|
||||
## 배포 전 1회 준비
|
||||
1. 콘솔 → 설정 → **배포 토큰** 발급(`yakd_…`).
|
||||
2. Gitea 레포 만들고 `git remote add origin …`. **Secrets**: `YAKCLOUD_URL`, `YAKCLOUD_TOKEN`, `YAKCLOUD_CLUSTER`, `REGISTRY_TOKEN`.
|
||||
3. `yakcloud.yaml` 의 `cluster`·`image`(`<GITEA_USER>`) 수정.
|
||||
|
||||
## 구성
|
||||
```
|
||||
bin/yakcloud # CLI 디스패처
|
||||
install.sh # CLI 설치
|
||||
scripts/yakcloud_deploy.py # 리컨실 배포 CLI(매니페스트→콘솔 API)
|
||||
scripts/yakcloud_ctl.py # info/설정 엔진(매니페스트 편집 + 라이브 PATCH)
|
||||
.claude/skills/yakcloud-deploy/ # Claude Code 스킬
|
||||
app.py Dockerfile # 프레임워크 중립 스타터
|
||||
yakcloud.yaml # 배포 매니페스트
|
||||
.gitea/workflows/deploy.yml # 태그 push CI(매니페스트 구동)
|
||||
DATA-SOURCES.md # 소스별 주입 env 표
|
||||
```
|
||||
## 다른 스택으로 교체
|
||||
`app.py`(+`Dockerfile`)를 원하는 언어/프레임워크로 교체하되 위 3계약 유지.
|
||||
소스별 주입 env 전체 목록은 `../reference/DATA-SOURCES.md` 참고.
|
||||
|
||||
Reference in New Issue
Block a user