İçeriğe geç

Deploy YAML — örnekler

Kopyala-yapıştır başlangıç noktaları. Herhangi birini pdctl validate <file> ile doğrula.

Minimal statik site

En küçük geçerli manifest — mevcut bir sunucuda tek statik site; DNS, SSL veya env yok.

apiVersion: podmaker.sh/v1alpha
kind: Site
metadata:
name: hello
targets:
- server: demo-01
source:
type: git
repo: https://github.com/podmaker/hello-static.git
runtime:
type: static

Vault + blue-green ile Node fullstack

Cloudflare ile özel domain, Let’s Encrypt, vault’tan çekilen DB URL ve session secret, bir pre-deploy migration hook’u ve açılan firewall portları.

apiVersion: podmaker.sh/v1alpha
kind: Site
metadata:
name: acme-web
workspace: acme
tags: [production, web, eu]
targets:
- server: prod-eu-web-01
source:
type: git
repo: git@github.com:acme/web.git
branch: main
runtime:
type: node
version: "20"
package_manager: pnpm
build:
command: pnpm install --frozen-lockfile && pnpm build
output_dir: dist
hosted: true
start:
command: node server.js
port: 3000
healthcheck: /healthz
domains:
- hostname: acme.com
dns: { provider: cloudflare, proxy: true }
ssl: { provider: letsencrypt, challenge: http-01 }
env:
NODE_ENV: production
DATABASE_URL: { from_vault: secret/acme/webdb#url }
SESSION_SECRET: { from_vault: secret/acme/web#session }
deploy:
strategy: blue-green
rollback_on_failure: true
hooks:
pre_deploy: ["./scripts/migrate.sh"]
health:
timeout: 90s
retries: 5
firewall:
inbound:
- { port: 80, source: "0.0.0.0/0" }
- { port: 443, source: "0.0.0.0/0" }

Önceden build edilmiş container image

Başka yerde build edilmiş image, web + eu etiketli her sunucuya deploy, recreate stratejisi, podmaker’da build adımı yok.

apiVersion: podmaker.sh/v1alpha
kind: Site
metadata:
name: api
workspace: acme
targets:
- server_selector:
tags: [web, eu]
min: 2
source:
type: image
image: registry.podmaker.sh/acme/api:v1.4.2
runtime:
type: container
start:
port: 8080
healthcheck: /healthz
domains:
- hostname: api.acme.com
ssl: { challenge: http-01 }
env:
LOG_LEVEL: info
DATABASE_URL: { from_vault: secret/acme/api#db_url }
deploy:
strategy: recreate

Çok-component stack

İki component artı paylaşılan Postgres ve Redis.

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 } }
domains: [{ hostname: acme.com }]
depends_on: [api]
- name: api
source: { type: image, image: registry.podmaker.sh/acme/api:v1.4.2 }
runtime: { type: container, start: { port: 8080 } }
env:
DATABASE_URL: { from_vault: secret/acme/api#db_url }
shared_services:
database: { engine: postgres, version: "16", plan: small }
cache: { engine: redis, version: "7" }