Application Deployment
Your app is defined in the services.web section of the StackApp manifest. Stack deploys that container and wires in secrets, env vars, and database URLs.
Basic web service
spec: services: web: image: ghcr.io/stack/demo-app:latest port: 7903
Environment variables
Plain env vars go in env:
spec: services: web: env: - name: FEATURE_FLAG value: "true"
Secret-backed env vars go in secret_env:
spec: services: web: secret_env: - name: API_KEY secret_name: app-secrets secret_key: api_key
Database URLs
Request the database URLs you need by naming the env vars you want set:
spec: services: web: database_url: DATABASE_URL migrations_database_url: DATABASE_MIGRATIONS_URL readonly_database_url: DATABASE_READONLY_URL
Init containers
Use init when you need migrations or setup work before the web container starts:
spec: services: web: init: image: alpine:3.18 env: - name: INIT_MESSAGE value: "warming up"
Multiple services
You can add extra services alongside web by naming them directly under services. These are deployed as ClusterIP services (no nginx routing).
spec: services: web: image: ghcr.io/stack/demo-app:latest port: 7903 llm: image: ghcr.io/stack/demo-llm:latest port: 9100 env: - name: MODEL value: llama3 embeddings: image: ghcr.io/stack/demo-embeddings:latest port: 9200
If you need public routing for an extra service, add your own ingress or use a separate StackApp.