Migrate

Migrate from Dokploy to Levelrail

Read-only import of apps, databases, environment variables, domains and volumes. Dokploy keeps serving traffic until you switch DNS.

Start with a dry run

You need: An API key, sent in the x-api-key header. The importer only reads from the Dokploy API.

Pass the token through the environment so it stays out of your shell history, then read what would be created. Nothing is created in a dry run.

export APP_IMPORT_SOURCE_TOKEN=...
levelrail-cli import platform dokploy --url https://dokploy.example.com --dry-run

When the report looks right, run the same command without --dry-run, and add --only web,api to import a subset. Apply is safe to re-run: finished items are skipped.

The dashboard does the same in Settings, Import from another platform, with a plan, per-item fixes and a saved cutover checklist.

The four steps

  1. ImportRead the source and create the matching apps and databases here, empty. Start with a dry run that shows what would be created.
  2. Copy dataCopy each database and check the row counts match.
  3. Copy volumes and run in parallelMove volumes, then run the app here while the source keeps serving traffic.
  4. Cut overCheck each domain, then switch DNS one domain at a time. The source stays untouched until you stop it.

Specific to Dokploy

  • Dokploy compose apps are multi-service and are reported as unsupported; deploy their compose file with the compose deploy command.
  • Apps uploaded as an archive (drop) and file mounts are unsupported.
  • Git-built apps are created with a pending image so nothing runs. Connect the repository and run a build.

Not migrated from any platform

  • Databases the copy step does not support (ClickHouse, KeyDB, Dragonfly), and any database you did not run the copy for. They stay empty.
  • Volume contents move only when you run the generated copy commands. Bind mounts need the same host path on the target node and the root ability.
  • Health checks that are shell commands, pre and post deploy commands, extra ports and raw host port mappings. They are called out as needing attention.
  • TLS certificates, DNS records, deploy history, logs and metrics. Certificates are issued here on first use.
  • Cron jobs are reported with their schedule and command so you can recreate them as scheduled tasks.

Undoing it

The importer only adds resources and never touches Dokploy. To undo an import, delete the apps and databases the apply report listed. Keep DNS pointing at Dokploy until the cutover check says go.

Dokploy migration questions

Does the importer change my Dokploy instance?

No. It only reads from Dokploy and creates things on the Levelrail side. The importer only reads from the Dokploy API.

Do I have to stop Dokploy first?

No. Keep Dokploy running through the import, the data copy and the parallel run, and switch DNS one domain at a time once the cutover check says go.

What does not migrate from Dokploy?

Dokploy compose apps are multi-service and are reported as unsupported; deploy their compose file with the compose deploy command. Apps uploaded as an archive (drop) and file mounts are unsupported. Git-built apps are created with a pending image so nothing runs. Connect the repository and run a build.

Levelrail is pre-release and multi-node is in beta. See feature status before you retire anything.

Related