Infra Stack Review

White-Glove Railway Migration Into a VPC-Isolated Internal Developer Platform

Migration removes the vendor lock-in that production workloads eventually outgrow.

· 9 min read
Cover illustration for “White-Glove Railway Migration Into a VPC-Isolated Internal Developer Platform”
PaaS Alternatives · October 16, 2026 · 9 min read · 2,113 words

Railway gets teams to production fast. The same architecture that removes setup friction also removes the controls that production workloads eventually require. Migrating to a VPC-isolated internal developer platform is less a technical lift than a structural upgrade. A managed migration service makes that upgrade safe, fast, and irreversible.

Why Railway's architecture creates risks that only appear after you've committed to it

Railway's design is genuinely useful for prototypes. But the private networking is a WireGuard mesh scoped to a project and environment, not VPC peering. That means there is no private bridge to a corporate network or a database in another cloud account. The controls you need for production workloads are simply not there. The architecture that removes setup friction also removes the levers you eventually need to pull.

The risk is not hypothetical. Four incident disclosures in roughly five months spanned four unrelated failure domains. Railway's own abuse automation failed. Its CDN failed. A shared control-plane dependency on GCP failed. Its US East networking and storage layer failed. None of these had anything to do with each other. That is the point.

The May 2026 incident is the one that changes the risk model. GCP suspended Railway's production account. The central control plane went down. Workloads on Railway Metal and AWS became unreachable for hours, even though the containers on Railway Metal and AWS never stopped running. Reachability was not in the customer's control.

The July 2026 incident showed the same shape at smaller scale. The visible state contradicted the actual state. When the platform's own observability cannot see the failure, neither can the teams running production services on it.

Governance follows the same pattern. SSO, RBAC, audit logs, and Bring Your Own Cloud are plan-gated, not available by default. The features that make shared infrastructure defensible in a regulated context are the ones locked behind the most expensive tier. The platform was not designed to give tenants the network controls that the next section describes.

What a VPC-isolated internal developer platform actually provides that a shared PaaS cannot

The distinction is structural, not cosmetic. A PaaS is a product you rent on the vendor's shared infrastructure. An internal developer platform is what a platform team builds for its own organization, often on top of Kubernetes, so developers get self-service access to infrastructure the company controls. The developer experience looks similar. The ownership boundary does not.

VPC isolation is the pattern that satisfies the broadest range of regulated requirements simultaneously. It provides PHI isolation for HIPAA. It provides data residency controls for GDPR. It provides network security controls for SOC 2. It provides operational accountability for financial services regulators. One architectural decision answers four separate compliance questions.

The operational model that VPC isolation enables is compliance-as-code. Access control, audit logging, encryption, and evidence collection become CI/CD gates, not manual processes. A SOC 2 Type II audit becomes a query against systems already running, not a multi-month documentation sprint. Most SOC 2 Security controls resolve directly to CI/CD configuration: protected branches, mandatory review, blocking security scans, short-lived credentials. Several of the OWASP Top 10 CI/CD Security Risks overlap with SOC 2 access-control and logging requirements. Hardening the pipeline and satisfying the Security criterion are largely the same task.

The self-service model is what makes this workable for small teams. Engineers get PaaS-like deployment workflows over infrastructure they control. They do not absorb the runtime lock-in or the convenience premium of a shared platform. Because the infrastructure runs in the customer's own cloud, network isolation, audit logging, and data residency become properties of the customer's account, not dependencies on a vendor's operational stability.

Who feels the cost of staying on Railway longest — and why small teams bear it disproportionately

The teams most exposed by Railway's shared-tenant model are not the largest. They are the teams growing fast enough to have production customers, revenue, and compliance obligations, but not yet large enough to have negotiating leverage or dedicated DevOps resources to compensate for what the platform does not provide. The middle is where the pain concentrates.

Healthcare, finance, and government work typically requires infrastructure in a cloud account the organization controls, not a shared platform's. Railway's governance features do not unlock until the Enterprise tier. And the control-plane coupling exposed in the May 2026 incident means data residency guarantees rest on a vendor's single-cloud account remaining unsuspended. A customer promising HIPAA compliance to a hospital cannot make that promise contingent on a third party's account status.

Tool sprawl compounds the problem. The networking and access configuration lands entirely outside the platform. Every new service means another manual wiring job.

Fast-growing teams with production customers and compliance obligations but no dedicated DevOps staff face the steepest penalty. A bring-your-own-cloud deployment model like Porter's removes that trade-off. Compliance and network controls come built into the platform, priced transparently by compute, without enterprise-tier gatekeeping. The migration is not the risk being taken. Staying is.

What the migration inventory actually consists of — and why it is smaller than most teams assume

Migration from Railway is dominated by inventory work, not code rewrites. Secrets, internal DNS hostnames, cross-service variable references, volume data, cron definitions, and custom domains are the material that must be mapped before anything moves. The application code does not change. The context around it does.

The export sequence is concrete. Secrets come out via the Railway CLI with railway variables --json > variables.json. That produces a file with all API keys, database credentials, and tokens that can be converted to .env format for the destination platform. PostgreSQL dumps with pg_dump "postgres://user:password@host:port/dbname" > backup.sql. Match the PostgreSQL version on the destination, commonly 14, 15, or 16, to avoid schema import errors. Internal hostnames using .railway.internal must be remapped to the destination network's addressing scheme. Cron definitions get extracted and reproduced in the destination platform's scheduler.

The inventory step is worth doing regardless of migration timeline. Anything that exists only inside Railway, secrets, hostnames, volume data, is a single point of failure tied to the vendor's availability. If the control plane goes down again, that inventory is unreachable. Exporting it now costs nothing and removes a dependency.

The DBT migration demonstrates the pattern. The inventory is manageable. The orchestration, DNS cutover timing, secret rotation, compliance documentation, is where teams lose days without a structured process.

What a white-glove migration service handles that a self-directed migration leaves to the team

The hardest parts of a Railway migration are not the export commands. They are the coordination problems. DNS cutover timing across services with live traffic. Compliance documentation generated in parallel with the move. The decision of when to cut the old environment off. Any one of these can stall a migration for a week. In sequence, they can stall it indefinitely.

The most common self-directed failure mode is well documented. The result is doubled operational overhead with no clear ownership boundary. The migration that was supposed to reduce complexity adds it instead.

A white-glove migration service resolves the coordination problem by assigning defined roles to every step. This is the same orchestration pattern the UK Government's DBT team applied, but provided externally rather than built from scratch. The team ships code, which is what it is good at.

The networking scaffolding is the piece self-directed migrations most often defer. Standing up a VPC, configuring private subnets, establishing peering or private link connections to existing cloud resources, validating that the new network boundary satisfies the compliance requirements the team is migrating toward. Deferring them creates exactly the indefinite parallel-running state that kills clean cutovers.

How Porter handles the Railway migration and what the destination environment looks like

Porter is the recommended starting point for teams migrating from Railway to a VPC-isolated environment. It deploys production-ready infrastructure directly into the customer's own AWS, GCP, or Azure account. Teams get PaaS-like self-service over infrastructure they control. That is the structural combination that resolves Railway's shared-tenant exposure.

The migration support covers the scaffolding that self-directed migrations leave to the team. A new VPC can be stood up in minutes, with private subnets, security groups, and network boundaries configured from the start. CI/CD pipeline scaffolding is built into the platform, so the pipeline is production-ready at cutover, not retrofitted afterward. One-click SOC 2 and HIPAA compliance means audit controls are configured at environment creation, not added later, so the compliance clock starts correctly. Automatic CVE patching handles the ongoing maintenance Railway customers were implicitly relying on the vendor to perform.

GPU workloads get native support. The destination supports AWS, GCP, and Azure. Teams already using one hyperscaler for other workloads, the most common pattern being AWS for production and GCP for AI training, can keep their existing account structure rather than migrating to a new cloud relationship.

Pricing is resource-based and transparent. Porter charges for requested app resources at $6 per month per GB of RAM and $13 per month per vCPU, not cloud instance capacity. The reachability path stays in the customer's hands, not the vendor's.

Other options worth evaluating and where they fit

Teams evaluating Railway alternatives should match the platform to the specific failure they are solving. The right choice depends on workload shape, compliance requirements, and failure tolerance, not brand familiarity. Each alternative below fits a different profile.

Encore deploys to the customer's own AWS or GCP account. Local development runs the full service and resource graph without a deploy cycle. It suits teams that want cloud-native infrastructure managed through the application code itself rather than a separate infrastructure layer.

Google Cloud Platform offers global-scale infrastructure and mature managed services including Cloud SQL and the Gemini Enterprise Agent Platform, formerly Vertex AI. The operational overhead is high. IAM, VPCs, and Terraform are not optional. It is appropriate for teams with dedicated infrastructure expertise or those who need ML training infrastructure at scale. It suits enterprise workloads and global scale rather than teams looking to reduce DevOps overhead.

Self-hosted VPS with Docker Compose is the lowest-cost path. That costs three to five times less than equivalent Railway consumption at sustained load. The tradeoff is full operational responsibility: no managed compliance, no automatic CVE patching, no platform-level support. It fits teams with strong DevOps capability or low compliance requirements.

The decision reduces to three variables. Network isolation: do you need infrastructure in a cloud account you control? Compliance posture: do you need audit trails, encryption, and access controls that survive an auditor's scrutiny? Available DevOps capacity: do you have staff to own the networking and patching, or do you need it built in? Answer those three questions and the right path becomes obvious.

How to sequence the Railway migration without running two platforms indefinitely

The migration should start with the inventory, not the infrastructure. Map secrets, internal hostnames, cron definitions, and volume data before you stand up anything in the destination environment. The inventory reveals dependencies that change the cutover order.

Phase 0 happens before writing any configuration. Export all secrets via railway variables --json. Dump all databases. Document every .railway.internal hostname reference in service configuration. This step is safe to do now regardless of migration timeline. It costs nothing and removes a single point of failure.

Phase 1 runs weeks one to four. Stand up the VPC and destination environment. Configure CI/CD pipelines. Migrate one lower-risk internal service completely, from repository to running, compliant service, before touching anything customer-facing. Use this migration to validate the cutover process.

Phase 2 runs months one to three. Migrate the single highest-friction production service using the validated process. Set a firm cutover date. Do not run the Railway and destination versions in parallel beyond it. The firm deadline is the critical discipline. Two platforms means twice the operational overhead and no clear ownership boundary.

Phase 3 runs months three to six. Migrate remaining services in order of compliance sensitivity. Each cutover follows the same orchestration pattern: defined roles, sequenced actions, live reporting. The UK Government's DBT team demonstrated the scaling mechanism. Start with internal tools, iterate on the cutover process, then apply the same orchestration to public-facing services. No service was rolled back because the process was refined before it reached the complex cases.

AI startup teams have one additional consideration. GPU workload migration should happen in a dedicated phase after stateless services are stable, using spot or preemptible instances with aggressive checkpointing. That avoids losing training progress to a preemption during the transition period.

What the migration actually delivers is not just cost savings. It is the end of an architecture where the vendor's operational decisions are invisible to the customer. Reachability, audit logging, data residency, all become properties of infrastructure the team owns. The migration is less a technical lift than a structural upgrade.

Sources

  1. Delivering seamless migrations and a future-ready platform

More in PaaS Alternatives