Skip to content

Migrate from Fly.io ​

Fly.io apps are Docker images, so they usually deploy on Zenavo with the same Dockerfile. fly.toml is not read; its settings map onto the service as below.

How Fly.io maps to Zenavo ​

Fly.ioZenavo
AppA service in a project on one server
[build] with a DockerfileThe Dockerfile in the root directory
internal_port of [http_service]The service's HTTP port
[env] and secretsVariables
[processes]One service per process from the same repository, with that startup command
[deploy] release_commandA command run before the app starts, in the startup command
[[mounts]] volumesVolumes
HTTP checksAn HTTP health check
<app>.internal and Flycast<hostname>.zenavo.internal (Private Networking)
Regions, auto stop and startOne server per project; services keep running
fly certsAutomatic Let's Encrypt certificates

1. Deploy the app ​

  1. Add a server and create a project.
  2. Add Service → GitHub, pick the repository; the preview should show Dockerfile. Set the HTTP port to the app's internal_port.
  3. Add one service per entry in [processes] with its command, and a volume for each [[mounts]] at the same path.

2. Copy the variables ​

Copy [env] into Variable → Edit Raw Variables. fly secrets list shows only names, not values, so take the values from where you keep them. Point database URLs at Zenavo's databases, such as DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}.

3. Move the data ​

PostgreSQL. Open a tunnel to the Fly Postgres app and take a plain SQL dump; Zenavo does not read pg_dump's custom format:

sh
fly proxy 15432:5432 -a my-db
pg_dump --no-owner --no-acl "postgres://postgres:PASSWORD@localhost:15432/my_app" | gzip > fly.sql.gz

Upload and restore it under a new PostgreSQL service's Backup & Restore tab, with the same major version (Uploading a backup).

Volumes. Pack the volume into an uncompressed archive on the machine, then download it:

sh
fly ssh console -a my-app -C "tar cf /tmp/data.tar -C /data ."
fly ssh sftp get /tmp/data.tar -a my-app

Restore data.tar into the new, empty volume from the service's Backup & Restore tab, with the project stopped (Backup & Restore).

4. Switch the domain ​

Bind the domain under Networking, then replace the A and AAAA records that point at Fly with an A record to the server's IP address (Domains & HTTPS).

Not affiliated with Zeabur.