İçeriğe geç

Deploy YAML — alan referansı

Tam podmaker.sh/v1alpha manifest’i, alan alan. Şema katıdır: bilinmeyen anahtarlar her yerde reddedilir.

Üst seviye

AlanTipZorunluNot
apiVersionstringpodmaker.sh/v1alpha olmalı
kindenumSite veya Stack
metadataobjectAşağıya bak
targetsarraySiteSitenin çalıştığı yer (≥ 1)
sourceobjectSiteKod/image nereden gelir
runtimeobjectSiteNasıl çalışır
domainsarrayHostname + DNS + SSL
envmapEnvironment değişkenleri
deployobjectDeploy stratejisi ve hook’lar
firewallobjectInbound kurallar
scalingobjectAutoscaling sınırları
stackobjectStackÇ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: platform

targets

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: 6

source

git veya image’dan biri.

# git source
source:
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 source
source:
type: image
image: registry.podmaker.sh/acme/api:v1.4.2 # name:tag olmalı
pull_secret:
from_vault: secret/acme/registry#dockerconfig

runtime

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: /healthz

static 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’ından

from_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: 5

firewall

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–100

stack (kind: Stack)

Bir Stack, component’leri ve opsiyonel paylaşılan servisleri gruplar.

apiVersion: podmaker.sh/v1alpha
kind: Stack
metadata:
name: acme-platform
stack:
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.