App Platform Migration Checklist: Builds, Variables, Domains & Data

Serdar Tekin
Serdar Tekin
Co-Founder & CTO
Updated Oct 17, 202610 min read
Written for: Developers and small teams migrating from Heroku, Railway, Render, or another App Platform
App PlatformMigrationPaaSCutover
Last reviewed:
Guide
App Platform Migration Checklist: Builds, Variables, Domains & Data
rafftechnologies.com/learn
On this page

Key Takeaways

Inventory provider-specific dependencies, separate application and data migration, prevent duplicate jobs, validate before DNS cutover, and keep the source platform available until rollback risk is closed.

Don't have an app yet? Deploy on Raff Apps in minutes.

Migrating between App Platforms is usually less about source code and more about build assumptions, environment variables, service topology, persistent data, domains, and release behavior.

Raff Apps supports Git deployments, buildpacks, Dockerfiles, existing images, Docker Compose imports, custom domains, managed service bindings, workers, scheduled jobs, persistent volumes, preview environments, and immutable rollback revisions.

Inventory the current platform

Record the repository, branch, build method, runtime, start command, variables, secrets, services, workers, scheduled jobs, databases, storage, volumes, domains, DNS, health checks, scaling, and deployment triggers.

Identify provider-specific dependencies

Look for provider manifests, internal hostnames, add-on URLs, deployment hooks, proprietary variables, filesystem assumptions, and CLI workflows.

Classify each dependency as portable, replace, remove, or retain externally.

Lock the build

Use dependency lock files, an explicit runtime version, and clear build/start commands. If the source platform relies on automatic detection, verify the target detects the same runtime.

Recreate configuration safely

Inventory non-secret variables, secrets, and provider-generated bindings. Do not paste production credentials into migration documents. Recreate secrets in the target platform's configuration layer.

Map service types

Typical mappings are web service to web service, worker to worker, cron to scheduled job, one-off task to one-off run, managed database to managed/external database, and persistent disk to persistent volume.

Migrate data separately

Application deployment and data migration are different cutovers. Databases, object storage, and persistent volumes need explicit migration and validation.

Deploy before moving traffic

Use the target platform URL first. Verify build, startup, variables, database connectivity, workers, uploads, scheduled jobs, and health checks before changing DNS.

Prevent duplicate workers and schedules

During overlap, two platforms may run simultaneously. Decide which side owns cron jobs, queues, billing jobs, and outbound messages.

Plan domain cutover and rollback

Lower DNS TTL where useful, verify target HTTPS, record old DNS, define rollback, then change only required records. Keep the source platform available until the rollback window closes.

Provider-specific inventory

For Heroku, record Procfile, buildpacks, Config Vars, add-ons, dyno process types, and Scheduler.

For Railway, record service variables, service references, volumes, private networking, and deployment triggers.

For Render, record Web Services, Background Workers, Cron Jobs, disks, environment groups, private services, and Blueprint configuration.

Migration checklist

Before migration:

  • current topology inventoried;
  • provider-specific dependencies identified;
  • build is reproducible;
  • secrets inventoried safely;
  • services mapped;
  • data migration planned;
  • duplicate workers/cron prevented;
  • target URL tested;
  • custom domain verified;
  • rollback defined.

Before decommission:

  • production traffic stable;
  • data consistent;
  • workers/jobs correct;
  • rollback window closed;
  • source exports retained;
  • source platform no longer receives required traffic.

Frequently asked questions

What is the hardest part of App Platform migration?

Usually persistent data, provider-specific services, environment configuration, and traffic cutover.

Should I move the database at the same time?

Only when needed. Keeping the existing database temporarily can reduce migration scope.

When should I change DNS?

After the target deployment passes application and dependency validation.

When should I delete the old platform?

After the rollback window closes and no required dependency remains.

Can Docker reduce platform lock-in?

It can improve build/runtime portability, but data, domains, secrets, volumes, and provider APIs can still create migration work.

Sources

Was this article helpful?
Serdar Tekin
Serdar Tekin
Co-Founder & CTO

Co-Founder & CTO at Raff, focused on cloud infrastructure, systems architecture, security, reliability, and production operations.

Put it into practice

Spin up a Raff server, follow the steps above on real infrastructure, and you are live. Linux or Windows, backed by a 14-day money-back guarantee.

Frequently asked questions

What is the hardest part of App Platform migration?
Usually persistent data, provider-specific services, environment configuration, and traffic cutover.
Should I move the database at the same time?
Only when needed. Keeping the existing database temporarily can reduce migration scope.
When should I change DNS?
After the target deployment passes application and dependency validation.
When should I delete the old platform?
After the rollback window closes and no required dependency remains.
Can Docker reduce platform lock-in?
It can improve build/runtime portability, but data, domains, secrets, volumes, and provider APIs can still create migration work.

Related Articles

View all →