Writing Skills
writing-skills
效率与协作技能,来自 obra/superpowers,查看原文获取完整用途和操作说明。
fly-machines【部署与运维】Deploy and manage Fly.io Machines - create, start, stop, delete, and monitor containerized apps. Use for deploying containers, managing app instances, and orchestrating multi-tenant workloads.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Deploy and manage containers on Fly.io using the Machines API.
mkdir -p ~/.config/fly
echo "your_token_here" > ~/.config/fly/token
Or use environment variable:
export FLY_API_TOKEN="your_token_here"
Base URL: https://api.machines.dev/v1
All requests require:
FLY_TOKEN=$(cat ~/.config/fly/token 2>/dev/null || echo $FLY_API_TOKEN)
curl -H "Authorization: Bearer $FLY_TOKEN" \
-H "Content-Type: application/json" \
"https://api.machines.dev/v1/..."
List all apps:
curl -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps?org_slug=personal"
Create app:
curl -X POST -H "Authorization: Bearer $FLY_TOKEN" \
-H "Content-Type: application/json" \
"https://api.machines.dev/v1/apps" \
-d '{
"app_name": "my-app",
"org_slug": "personal"
}'
Get app details:
curl -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app"
List machines in app:
curl -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/machines"
Create machine:
curl -X POST -H "Authorization: Bearer $FLY_TOKEN" \
-H "Content-Type: application/json" \
"https://api.machines.dev/v1/apps/my-app/machines" \
-d '{
"name": "worker-1",
"region": "iad",
"config": {
"image": "nginx:latest",
"env": {
"MY_VAR": "value"
},
"services": [{
"ports": [{"port": 443, "handlers": ["tls", "http"]}],
"protocol": "tcp",
"internal_port": 80
}],
"guest": {
"cpu_kind": "shared",
"cpus": 1,
"memory_mb": 256
}
}
}'
Get machine:
curl -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/machines/{machine_id}"
Start machine:
curl -X POST -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/machines/{machine_id}/start"
Stop machine:
curl -X POST -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/machines/{machine_id}/stop"
Delete machine:
curl -X DELETE -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/machines/{machine_id}?force=true"
Wait for state:
curl -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/machines/{machine_id}/wait?state=started&timeout=60"
List volumes:
curl -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/volumes"
Create volume:
curl -X POST -H "Authorization: Bearer $FLY_TOKEN" \
-H "Content-Type: application/json" \
"https://api.machines.dev/v1/apps/my-app/volumes" \
-d '{
"name": "data_vol",
"region": "iad",
"size_gb": 1
}'
Mount volume to machine:
# Include in machine config:
{
"config": {
"mounts": [{
"volume": "vol_abc123",
"path": "/data"
}]
}
}
{
"name": "my-machine",
"region": "iad",
"config": {
"image": "registry.fly.io/my-app:latest",
"env": {"KEY": "value"},
"guest": {
"cpu_kind": "shared",
"cpus": 1,
"memory_mb": 256
},
"services": [{
"ports": [
{"port": 80, "handlers": ["http"]},
{"port": 443, "handlers": ["tls", "http"]}
],
"protocol": "tcp",
"internal_port": 8080
}],
"mounts": [{"volume": "vol_id", "path": "/data"}],
"auto_destroy": false,
"restart": {"policy": "on-failure"}
}
}
Common regions:
iad - Ashburn, Virginia (US East)lax - Los Angeles (US West)cdg - Parislhr - Londonnrt - Tokyosin - Singaporesyd - SydneyMachines automatically stop after idle timeout (default 5 min). They wake on incoming request (~3s cold start).
Disable auto-stop:
{
"config": {
"auto_destroy": false,
"services": [{
"auto_stop_machines": false,
"auto_start_machines": true
}]
}
}
Set secret:
curl -X POST -H "Authorization: Bearer $FLY_TOKEN" \
-H "Content-Type: application/json" \
"https://api.machines.dev/v1/apps/my-app/secrets" \
-d '{"MY_SECRET": "secret_value"}'
Secrets are available as environment variables to all machines.
FLY_TOKEN=$(cat ~/.config/fly/token)
APP="botspawn"
BOT_ID="user123"
curl -X POST -H "Authorization: Bearer $FLY_TOKEN" \
-H "Content-Type: application/json" \
"https://api.machines.dev/v1/apps/$APP/machines" \
-d '{
"name": "bot-'"$BOT_ID"'",
"region": "iad",
"config": {
"image": "registry.fly.io/botspawn-bot:latest",
"env": {
"BOT_ID": "'"$BOT_ID"'",
"AI_PROVIDER": "anthropic"
},
"guest": {"cpu_kind": "shared", "cpus": 1, "memory_mb": 256}
}
}'
Machines auto-stop when idle. To wake:
curl -X POST -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/machines/{id}/start"
MACHINE=$(curl -s -H "Authorization: Bearer $FLY_TOKEN" \
"https://api.machines.dev/v1/apps/my-app/machines/{id}")
echo $MACHINE | jq '{state: .state, region: .region, updated: .updated_at}'
For interactive use, the flyctl CLI is often easier:
# Install
curl -L https://fly.io/install.sh | sh
# Auth
fly auth login
# Deploy
fly deploy
# List machines
fly machines list -a my-app
# SSH into machine
fly ssh console -a my-app
.internal DNSfly logs -a my-app or via Fly dashboard