cli v0.11.0: 로컬 dev/migrate 제거, 개발/운영 클러스터 승격 모델. environments.{dev,prod} 매니페스트; project deploy=개발 클러스터, project promote=재빌드 없이 운영 클러스터+운영 도메인. CI=dev 환경. dev/prod dry-run 검증
This commit is contained in:
@ -36,31 +36,10 @@
|
||||
|
||||
> 비밀번호·키는 인클러스터 Secret으로 주입되고 콘솔/브라우저에 노출되지 않는다. URL의 user/pw는 URL-인코딩됨.
|
||||
|
||||
## 로컬 개발(`yakcloud dev`) — 배포와 동일한 env 계약
|
||||
개발 중에는 `yakcloud dev up` 이 `requires[]` 를 **로컬 docker 컨테이너**로 띄우고, 위 표와 **똑같은 `<ALIAS>_*`**
|
||||
(같은 키·URL 포맷, 값만 로컬 컨테이너를 가리킴)를 `.env.dev` 로 생성한다. 즉 로컬에서 짠 코드가 배포 후에도 무수정 동작.
|
||||
```sh
|
||||
yakcloud dev up # requires[] 기동 + .env.dev 생성(무거운 oracle 은 명시 기동)
|
||||
yakcloud dev run -- python app.py # .env.dev 주입해 앱 실행(= 배포된 파드와 동일한 env)
|
||||
yakcloud dev status | logs | down [--volumes] | reset | doctor
|
||||
```
|
||||
- 자격은 프로젝트 시드에서 **결정적 파생**(재현 가능), `.yakcloud/dev/` 에만 저장(gitignore). 브라우저/원격 미노출.
|
||||
- `.env.dev`·`.yakcloud/`·`docker-compose.yakcloud-dev.yml` 은 커밋 금지(스캐폴드 `.gitignore` 에 포함).
|
||||
- env 계약은 프로덕션 백엔드 `_bind_env_for` 와 **바이트 동일**하게 유지(단일 진실원천).
|
||||
|
||||
## 스키마·데이터 마이그레이션(`yakcloud datasource migrate`) — 블랙리스트 스냅샷
|
||||
개발 DB는 테스트로 엉망이 되기 쉬우니, **전부 캡처하되 블랙리스트로 뺀다**(denylist). 새 환경을 dev 상태로 채우는 **부트스트랩** 도구.
|
||||
```sh
|
||||
yakcloud datasource migrate capture [source…] --dry-run # 무엇이 잡히는지 미리보기(읽기전용)
|
||||
yakcloud datasource migrate capture [source…] # db/<source>/snapshot/ 에 전체−블랙리스트 덤프
|
||||
yakcloud datasource migrate apply [source…] # 빈 타깃만 복원(데이터 있으면 스킵, force 없음)
|
||||
yakcloud datasource migrate status
|
||||
```
|
||||
- **블랙리스트**: `db/<source>/.migrateignore` (글롭, git 추적). 예: `audit_log_*`, `tmp_*`, `cache/*`. 민감/개인정보·쓰레기는 반드시 여기에.
|
||||
- **capture=읽기전용**(안전), 전체 native 덤프. **9종 전부 지원**(pg_dump/mysqldump/mongodump/mc mirror/redis DUMP·RESTORE/solr export/rabbitmq definitions/oracle Data Pump). 블랙리스트 단위: SQL·oracle=테이블, mongo=컬렉션, minio=오브젝트, redis=키, solr=문서(쿼리절), rabbitmq=큐/익스체인지. rabbitmq는 정의만(메시지 제외), oracle은 REMAP_SCHEMA로 스키마 이식.
|
||||
- **apply=빈 타깃만**. 데이터가 있으면 **절대 안 덮음**(스킵). 라이브 prod 지속 동기화가 아님.
|
||||
- **db/** 는 커밋·리뷰 대상(`.env.dev`·`.yakcloud/` 와 반대로 gitignore 아님).
|
||||
- prod 적용은 콘솔 종류별 소스관리자 **컨펌 + 항상 백업 후(롤백 보장)** — CLI 로 prod 직접 덮지 않음.
|
||||
## 개발/운영 모두 클러스터에서
|
||||
데이터 소스는 **클러스터 안에서 실제로 프로비저닝**된다(로컬 docker 없음). 개발 클러스터에 배포하면 그 클러스터의 소스가
|
||||
`<ALIAS>_*` 로 주입되고, 운영 클러스터로 승격하면 운영 클러스터의 소스가 주입된다 — 각 환경이 자체 데이터 계층을 가진다.
|
||||
환경 간 데이터 백업·싱크는 별도(추후).
|
||||
|
||||
## 앱 코드 예시
|
||||
```python
|
||||
|
||||
Reference in New Issue
Block a user