From flyio-pack
Sets up Fly.io Postgres clusters, persistent volumes, and private networking for apps using fly CLI. Covers creation, attachment, backups, failover, and internal DNS.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin flyio-packThis skill is limited to using the following tools:
Set up Fly Postgres, persistent Fly Volumes, and private networking between apps. Fly Postgres runs as a regular Fly app with automated replication. Volumes provide persistent NVMe storage attached to specific machines.
Deploys Fly.io production architecture: multi-region web apps, Postgres with read replicas, Redis caching, background workers, and private .internal networking. Includes CLI setup and fly.toml examples.
Deploys and manages Fly.io apps using Docker containers, Fly Machines, fly.toml configs, databases, volumes, secrets. Supports fly launch/deploy, debugging, multi-region setups for Python/Node/Rails/Django apps.
Provides quick reference for Fly.io PaaS deployments including fly.toml config, global distribution, scaling patterns, secrets management, health checks, and troubleshooting. Auto-loads on fly.toml detection.
Share bugs, ideas, or general feedback.
Set up Fly Postgres, persistent Fly Volumes, and private networking between apps. Fly Postgres runs as a regular Fly app with automated replication. Volumes provide persistent NVMe storage attached to specific machines.
# Create a Postgres cluster
fly postgres create --name my-db --region iad --vm-size shared-cpu-1x --volume-size 10
# Attach to your app (sets DATABASE_URL secret automatically)
fly postgres attach my-db -a my-app
# Connect directly
fly postgres connect -a my-db
# psql> SELECT version();
# Proxy to local machine for dev tools
fly proxy 5432 -a my-db
# Now connect: psql postgres://postgres:password@localhost:5432
# Create a volume (same region as your machine)
fly volumes create data --size 10 --region iad -a my-app
# List volumes
fly volumes list -a my-app
# Mount in fly.toml
# fly.toml
[mounts]
source = "data"
destination = "/data"
# Deploy to pick up mount
fly deploy
# Verify mount inside machine
fly ssh console -C "df -h /data"
# Apps in the same org can reach each other via .internal DNS
# my-app can reach my-db at: my-db.internal:5432
# Internal DNS format: <app-name>.internal
# Machine-specific: <machine-id>.vm.<app-name>.internal
# Example: connect from app code
DATABASE_URL=postgres://postgres:password@my-db.internal:5432/my_db
// Access internal services (no public internet)
const dbUrl = `postgres://postgres:${process.env.DB_PASSWORD}@my-db.internal:5432/mydb`;
const apiUrl = `http://my-api.internal:3000/health`; // Internal HTTP
# List backups
fly postgres barman list-backups -a my-db
# Create manual backup
fly postgres barman backup -a my-db
# Check replication status
fly postgres barman check -a my-db
# Failover to standby (if primary fails)
fly postgres failover -a my-db
| Error | Cause | Solution |
|---|---|---|
volume not found | Volume in different region | Create volume in same region as machine |
connection refused on .internal | App not running | Check fly status -a target-app |
database does not exist | Not yet created | Run CREATE DATABASE mydb; via fly postgres connect |
disk full | Volume full | Extend: fly volumes extend vol_xxx --size 20 |
For common errors, see flyio-common-errors.