Simple, cost-effective deployment using SQLite and local task execution.
-
Install Fly CLI:
curl -L https://fly.io/install.sh | sh -
Sign up and log in:
fly auth signup # Or: fly auth login
-
Create the app:
fly apps create cascade # Or use your preferred name -
Create persistent volume for SQLite:
fly volumes create cascade_data --region sea --size 1
-
Set secrets:
# Generate and set secret key fly secrets set SECRET_KEY_BASE=$(openssl rand -base64 64)
-
Deploy:
fly deploy
-
Open the app:
fly open
Change primary_region in fly.toml to your preferred region:
sea- Seattle (US West)iad- Ashburn (US East)lhr- Londonfra- Frankfurtsyd- Sydney
Vertical scaling (change VM size):
# Increase memory
fly scale memory 1024 # 1GB RAM
# Increase CPUs
fly scale vm shared-cpu-2x # 2x shared CPUHorizontal scaling (add machines):
# Update fly.toml:
[auto_scaling]
min_count = 1 # Keep 1 always running
max_count = 4 # Scale up to 4 machinesFree tier (good for testing):
[vm]
memory_mb = 256
[auto_scaling]
min_count = 0 # Scale to zero when idleProduction (always-on):
[vm]
cpu_kind = "shared"
memory_mb = 1024
[auto_scaling]
min_count = 1 # Keep 1 running
max_count = 2 # Add redundancyUpload DAG files to your deployed app:
# SSH into the running machine
fly ssh console
# Copy DAG files
fly ssh sftp shell
put my_dag.json /app/dags/Or mount a local directory during development:
fly volumes create cascade_dags --size 1Update fly.toml:
[[mounts]]
source = "cascade_dags"
destination = "/app/dags"# View logs
fly logs
# Check status
fly status
# SSH into machine
fly ssh console
# Monitor metrics
fly dashboard# SSH into machine
fly ssh console
# Access database
cd /data
ls -lh cascade.db
# Copy database locally
fly ssh sftp get /data/cascade.db ./cascade_backup.dbTypical setup:
- 1 shared-cpu-1x (512MB): ~$5/month
- 1GB persistent volume: ~$0.15/month
- Total: ~$5-6/month
Free tier eligible:
- Scale to zero when idle: $0/month
- Limited to 256MB RAM, slower startup
# Deploy new version
fly deploy
# Rollback if needed
fly releases
fly releases rollback <version>Set additional env vars:
fly secrets set CASCADE_WORKERS=8
fly secrets set DAGS_SCAN_INTERVAL=60Container crashes:
fly logs --verboseDatabase locked:
# SQLite doesn't support multiple writers
# Ensure only 1 machine is writing:
fly scale count 1Out of memory:
fly scale memory 1024Your existing DAG files work as-is! Just:
- Deploy to Fly.io
- Copy DAG files to
/app/dags - Access at your Fly.io URL
No code changes needed!