Deploy YAML — alan referansı
Tam podmaker.sh/v1alpha manifest’i, alan alan. Şema katıdır: bilinmeyen
anahtarlar her yerde reddedilir.
Üst seviye
| Alan | Tip | Zorunlu | Not |
|---|---|---|---|
apiVersion | string | ✓ | podmaker.sh/v1alpha olmalı |
kind | enum | ✓ | Site veya Stack |
metadata | object | ✓ | Aşağıya bak |
targets | array | Site | Sitenin çalıştığı yer (≥ 1) |
source | object | Site | Kod/image nereden gelir |
runtime | object | Site | Nasıl çalışır |
domains | array | — | Hostname + DNS + SSL |
env | map | — | Environment değişkenleri |
deploy | object | — | Deploy stratejisi ve hook’lar |
firewall | object | — | Inbound kurallar |
scaling | object | — | Autoscaling sınırları |
stack | object | Stack | Çok-component spec |
kind: Site için targets, source, runtime zorunlu. kind: Stack için
stack zorunlu.
metadata
metadata: name: acme-web # zorunlu, ^[a-z][a-z0-9-]{0,62}$ workspace: acme # ^[a-z][a-z0-9-]{0,40}$ tags: [production, web, eu] # ≤ 20 öğe, her biri ≤ 32 karakter annotations: team: platformtargets
Her öğe ya isimli bir sunucu ya da bir selector’dur — ikisi birden değil.
targets: - server: prod-eu-web-01 # açık sunucu - server_selector: # veya niteliklerle eşle tags: [web, eu] provider: aws region: eu-central-1 min: 2 max: 6source
git veya image’dan biri.
# git sourcesource: type: git repo: git@github.com:acme/web.git branch: main # varsayılan: main ref: <commit-or-tag> # opsiyonel, tam ref pinler auth: # ValueRef — aşağıya bak from_vault: secret/acme/web#deploy_key# image sourcesource: type: image image: registry.podmaker.sh/acme/api:v1.4.2 # name:tag olmalı pull_secret: from_vault: secret/acme/registry#dockerconfigruntime
runtime: type: node # node|php|python|ruby|go|java|dotnet|rust|static|container version: "20" package_manager: pnpm build: command: pnpm install --frozen-lockfile && pnpm build output_dir: dist hosted: true # hosted runner’da build et (varsayılan: false) start: command: node server.js port: 3000 # 1–65535 healthcheck: /healthzstatic ve container runtime’ları genellikle build’i atlar; container
image’ı doğrudan bir start.port ile çalıştırır.
domains
domains: - hostname: acme.com dns: provider: cloudflare proxy: true # varsayılan: false ssl: provider: letsencrypt # letsencrypt|zerossl|buypass (varsayılan: letsencrypt) challenge: http-01 # http-01|dns-01 (varsayılan: http-01)env
KEY: value map’i; her değer bir ValueRef — satır içi string, vault
referansı veya env referansı.
env: NODE_ENV: production # literal DATABASE_URL: from_vault: secret/acme/webdb#url # deploy anında çözülür BUILD_ID: from_env: CI_COMMIT_SHA # deploy environment’ındanfrom_vault, path#key desenini izler; bkz. Vault & Secrets.
deploy
deploy: strategy: blue-green # blue-green|rolling|recreate (varsayılan: rolling) rollback_on_failure: true # varsayılan: true hooks: pre_deploy: ["./scripts/migrate.sh"] post_deploy: ["./scripts/warm-cache.sh"] health: timeout: 90s # ^\d+[smh]$ (varsayılan: 60s) retries: 5 # varsayılan: 5firewall
firewall: inbound: - { port: 80, source: "0.0.0.0/0" } # protocol varsayılan: tcp - { port: 443, protocol: tcp, source: "0.0.0.0/0" }scaling
scaling: min: 2 max: 10 metric: cpu # cpu|memory|rps|custom target: 70 # 1–100stack (kind: Stack)
Bir Stack, component’leri ve opsiyonel paylaşılan servisleri gruplar.
apiVersion: podmaker.sh/v1alphakind: Stackmetadata: name: acme-platformstack: components: - name: web source: { type: git, repo: git@github.com:acme/web.git } runtime: { type: node, version: "20", start: { port: 3000 } } depends_on: [api] - name: api source: { type: image, image: registry.podmaker.sh/acme/api:v1.4.2 } runtime: { type: container, start: { port: 8080 } } shared_services: database: { engine: postgres, version: "16", plan: small } # plan: nano|micro|small|medium|large cache: { engine: redis, version: "7" } queue: { engine: rabbitmq }Her component, bir Site ile aynı source, runtime, targets, domains,
env, deploy ve scaling alanlarını alır, artı sıralama için depends_on.
ValueRef
Secret taşıyan bir değerin kabul edildiği her yerde (source.auth,
source.pull_secret, env.*) şunlardan birini kullanabilirsin:
literal-string{ from_vault: "path/to/secret#key" }{ from_env: "ENV_VAR_NAME" }Sırada işlenmiş örnekler.