Multi-cloud setup
Run the same application shape across multiple providers from one config.
TurboCI treats provider changes as deployment-level overrides instead of forcing a second config tree for each cloud.
1 parent
deployment can be duplicated into another cloud with targeted overrides
Selective rollout
target or skip one cloud without changing the shared configuration
- deployment_name: my_app_hetzner
provider: hetzner
location: ash
- deployment_name: my_app_aws
provider: aws
location: us-east-1
duplicate_deployment_name: my_app_hetznerWhy multi-cloud
The deployment model stays constant while the provider changes.
High availability
If one provider has an outage, the same application can continue serving from the others.
Cost optimization
Use the cheaper provider in one region and the stronger instance family in another without changing the operating model.
Geographic fit
Place each deployment where the provider has the best regional footprint for your audience.
Reduced lock-in
The deployment shape stays portable instead of being rewritten around one provider's resource model.
Deployment duplication
`duplicate_deployment_name` is the main portability tool.
TurboCI clones the full configuration of another deployment, including services, run commands, health checks, and mappings. Anything declared in the new deployment overrides the inherited values.
# .turboci/config.yaml
- deployment_name: my_app_hetzner
provider: hetzner
location: ash
description: Hetzner production deployment
services:
web:
instances: 2
clusters: 2
server_type: cpx21
dir_mappings:
- src: .
dst: /app
dependencies:
turboci:
- bun
run:
start:
work_dir: /app
cmds:
- pm2 start "bun server.ts"
healthcheck:
cmd: curl http://localhost:3000/health
test: "ok"
load_balancer:
type: load_balancer
target_services:
- service_name: web
port: 3000
- deployment_name: my_app_aws
provider: aws
location: us-east-1
description: AWS production deployment (mirrors Hetzner)
duplicate_deployment_name: my_app_hetznerRunning turboci up deploys both targets in the same pass.
Credentials
Load credentials for each provider you plan to use
TurboCI chooses the correct provider key based on the `provider` field declared in each deployment.
TURBOCI_HETZNER_API_KEY=your_hetzner_key
TURBOCI_AWS_ACCESS_KEY=your_access_key_id
TURBOCI_AWS_SECRET_ACCESS_KEY=your_secret_keySelective rollout
Target or skip one cloud without changing the base config
The targeting surface works cleanly with duplicated deployments.
# Deploy only to Hetzner
turboci up -t "my_app_hetzner.*"
# Deploy only to AWS
turboci up -s "my_app_hetzner.*"
# Tear down one cloud and leave the other
turboci down -t my_app_hetznerPer-cloud overrides
Inheritance does not prevent provider-specific tuning.
Override instance counts, sizes, or locations on the derived deployment while leaving the shared service definition intact.
- deployment_name: my_app_prod
provider: hetzner
location: ash
services:
web:
instances: 3
server_type: cpx31
- deployment_name: my_app_staging
provider: hetzner
location: fsn1
duplicate_deployment_name: my_app_prod
services:
web:
instances: 1
server_type: cpx11Next step
See full deployment shapes in context
The examples page collects real-world layouts that combine duplication, load balancing, container services, and staged environments.
Continue to examples