Claude-code-plugins flyio-deploy-integration

install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/flyio-pack/skills/flyio-deploy-integration" ~/.claude/skills/jeremylongshore-claude-code-plugins-flyio-deploy-integration && rm -rf "$T"
manifest: plugins/saas-packs/flyio-pack/skills/flyio-deploy-integration/SKILL.md
source content

Fly.io Deploy Integration

Overview

Deploy edge applications on Fly.io with Docker containers and the

fly.toml
configuration file. This skill covers building production images optimized for Fly's micro-VM architecture, configuring
fly.toml
for services, health checks, and multi-region placement, verifying API connectivity from edge locations, and executing rolling updates with automatic rollback. Fly.io deploys as Firecracker micro-VMs, so containers start in under a second and scale to zero when idle.

Docker Configuration

FROM node:20-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY tsconfig.json ./
COPY src/ ./src/
RUN npm run build

FROM node:20-slim
RUN addgroup --system app && adduser --system --ingroup app app
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY package*.json ./
USER app
EXPOSE 8080
CMD ["node", "dist/index.js"]

Fly.io Configuration

# fly.toml
app = "my-integration"
primary_region = "iad"

[build]
  dockerfile = "Dockerfile"

[env]
  LOG_LEVEL = "info"
  PORT = "8080"

[http_service]
  internal_port = 8080
  force_https = true
  auto_stop_machines = true
  auto_start_machines = true

[[http_service.checks]]
  interval = "30s"
  timeout = "5s"
  grace_period = "10s"
  method = "GET"
  path = "/health"

Environment Variables

export FLY_API_TOKEN="fo1_xxxxxxxxxxxx"
fly secrets set FLYIO_APP_NAME="my-integration"
fly secrets set LOG_LEVEL="info"

Health Check Endpoint

import express from 'express';

const app = express();

app.get('/health', async (req, res) => {
  try {
    const region = process.env.FLY_REGION || 'unknown';
    const appName = process.env.FLY_APP_NAME || 'unknown';
    res.json({ status: 'healthy', service: 'flyio-integration', region, app: appName, timestamp: new Date().toISOString() });
  } catch (error) {
    res.status(503).json({ status: 'unhealthy', error: (error as Error).message });
  }
});

Deployment Steps

Step 1: Build

fly launch --no-deploy

Step 2: Run

fly deploy --strategy rolling

Step 3: Verify

fly status
curl -s https://my-integration.fly.dev/health | jq .

Step 4: Rolling Update

fly deploy --strategy rolling --wait-timeout 300
fly releases --image
fly releases rollback   # if health check fails

Error Handling

IssueCauseFix
Machine failed to start
Missing env vars or port mismatchCheck
fly logs
and verify
internal_port
matches
EXPOSE
Health check failing
App not listening on correct portEnsure app binds to
0.0.0.0:8080
not
127.0.0.1
No machines in region
Region not added to appRun
fly scale count 1 --region iad
401 Unauthorized
Invalid
FLY_API_TOKEN
Regenerate token with
fly tokens create deploy
Slow cold startsLarge image or heavy startupUse multi-stage build, set
auto_stop_machines = false
for latency-critical apps

Resources

Next Steps

See

flyio-webhooks-events
.