-
Notifications
You must be signed in to change notification settings - Fork 377
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Compare to Fly and Migration to Railway Guide (#653)
* Add a Fly comparison doc * Add a migration guide * add stuff * Fix formatting
- Loading branch information
1 parent
d030c83
commit 7212092
Showing
4 changed files
with
240 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
--- | ||
title: Railway vs. Fly | ||
--- | ||
|
||
Railway is a modern, developer-centric cloud platform designed to simplify app deployment, scaling, and management—all while optimizing for developer happiness and efficiency. | ||
|
||
We provide a robust, feature-rich platform comparable to other cloud providers, with a focus on ease of use and developer productivity. | ||
|
||
Railway offers: | ||
|
||
- **Broad Language and Framework Support**: Deploy apps in [any language or framework](https://docs.railway.com/guides/languages-frameworks). | ||
- **Flexible Deployment Options**: Use GitHub, Dockerfiles, Docker images from any registry, or local deployments via the Railway CLI. | ||
- **Integrated Tools**: Simplify environment variable management, CI/CD, observability, and service scaling. | ||
- **Networking Features:** Public and private networking. | ||
- **Best in Class Support:** Very active community and support on Slack, [Discord](https://discord.gg/railway) and [Help Station](https://help.railway.com/). | ||
|
||
We differ in the following: | ||
|
||
- A vibrant, highly engaged community with fast, reliable support. | ||
- A superior developer experience designed for simplicity and efficiency. | ||
- Transparent, flexible pricing that scales with your needs. | ||
- And much more... | ||
|
||
## Differences | ||
|
||
### Product and Deploy UX | ||
|
||
At Railway, we believe DevOps should be effortless, intuitive, and even enjoyable. From the instant simplicity of [dev.new](http://dev.new/) to managing interconnected services with ease on your Project Canvas, our platform is designed to be both powerful and visually refined. Who says DevOps has to be ugly or boring? On our platform, it’s fluid, engaging, and a pleasure to use. | ||
|
||
One of our standout features is **real-time collaboration**. See exactly which teammates are working alongside you on the Project Canvas, fostering seamless teamwork and collaboration. | ||
|
||
### Deploy UI and GitHub Repo Deployments | ||
|
||
Fly.io currently supports GitHub repository deployments for Node.js, Phoenix, Laravel, Django, Python, and Golang via their Launch UI, but these are still considered experimental. They strongly recommend using the CLI for more reliable and flexible deployments. | ||
|
||
At Railway, you can deploy any language repository seamlessly through our fast and intuitive deploy UI. Additionally, you have the flexibility to use our CLI whenever it suits your workflow. | ||
|
||
We make it incredibly simple to deploy exactly what you need—whether it's a template, database, Docker image, or even an empty service—all from the dashboard. With just a right-click on the Project Canvas or a tap on the Create button, you can instantly spin up new resources. Fly.io does not offer this level of convenience in its dashboard. | ||
|
||
### Native Crons | ||
|
||
Railway provides [native cron jobs](https://docs.railway.com/reference/cron-jobs) directly in the dashboard—no setup, no extra packages, just seamless scheduling. Simply define a cron schedule in your service settings, and Railway will automatically execute the start command at the specified times. | ||
|
||
With Railway’s built-in cron management, you can: | ||
|
||
- Easily create and manage cron jobs from the dashboard | ||
- View all past and running jobs in one place | ||
- Avoid unnecessary installations and configurations—just set and go! | ||
|
||
Fly.io does not offer native crons. To schedule tasks, you’ll need to manually configure crontab using supercronic, adding extra setup and maintenance overhead. | ||
|
||
With Railway, scheduled tasks are simple, streamlined, and built-in. No extra steps—just reliable automation. | ||
|
||
### PR Environments | ||
|
||
Railway offers a [powerful environments feature](https://docs.railway.com/guides/environments) that makes managing complex development workflows seamless—all from the dashboard. With just a few clicks, you can enable multiple environments such as **staging, development, QA,** **and more**, ensuring your project scales efficiently with your workflow. | ||
|
||
Additionally, Railway provides [PR environments](https://docs.railway.com/guides/environments#enable-pr-environments)—ephemeral environments automatically created when a pull request is opened and cleaned up when it’s closed. No need to manually configure or integrate with GitHub Actions—Railway handles everything for you, so you can focus on building and shipping faster. | ||
|
||
Fly.io recommends setting up Git branch preview environments manually via GitHub Actions and workflows, requiring additional setup and maintenance. | ||
|
||
### Webhooks | ||
|
||
Railway provides native support for [webhooks](https://docs.railway.com/guides/webhooks), allowing you to receive real-time notifications about key project events such as **deployments, build status changes, and more**. Stay in sync with your workflow effortlessly and build anything on top of it! | ||
|
||
Fly.io does not offer built-in webhook support, meaning users must rely on external integrations or manual setups to track application events. | ||
|
||
With Railway, webhooks are built-in and ready to go—no extra setup required. | ||
|
||
### Variables and Secrets | ||
|
||
Railway offers an intuitive and delightful variable management feature where you can [easily reference variables(a.k.a shared variables) in the same service or from another service](https://docs.railway.com/guides/variables#reference-variables) within your project. We also provide the ability to [seal variable values](https://docs.railway.com/guides/variables#sealed-variables) for extra security. | ||
|
||
Additionally, Railway offers [variable functions](https://docs.railway.com/guides/create#template-variable-functions) that automatically generate secure secrets for your environment variables—eliminating the need for manual secret creation. | ||
|
||
- Need a random secret? Simply use: `${{ secret() }}` | ||
- Need a hex-encoded secret of a specific length? Just specify the length and character set: `${{ secret(128, "abcdef0123456789") }}` | ||
|
||
Fly.io provides a basic secrets management feature, allowing users to store secrets with a digest. However, it lacks the advanced functionality of Railway’s shared variables and dynamic secret generation. | ||
|
||
### Databases | ||
|
||
Many applications rely on databases, and we believe managing them should be seamless and hassle-free. That’s why Railway allows you to natively provision and deploy PostgreSQL, MySQL, Redis, and MongoDB directly within the platform—no external setup required. | ||
|
||
Fly.io, on the other hand, provisions Postgres, Upstash Redis, Upstash Kafka, and Upstash Vector. If you need MySQL or MongoDB, you’ll have to manually set up and manage them via Docker. Alternatively, Fly recommends several external providers for these databases. | ||
|
||
Railway goes further by offering a built-in database UI, making management effortless. You can view tables, add and edit data directly from the platform—no need for third-party tools. Fly does not provide an equivalent UI, requiring external tools for database management. | ||
|
||
### Templates | ||
|
||
Railway's [Templates Marketplace](https://railway.com/templates) is rapidly expanding, with 940+ templates and counting. Any user can create and publish pre-configured starter setups or templates, making it effortless for developers to deploy apps and services with just one click—eliminating the hassle of manual setup. | ||
|
||
Our templates cover a wide range of frameworks and tools, including [Django](https://railway.com/new/template/GB6Eki), [Laravel](https://railway.com/new/template/Gkzn4k), [Metabase](https://railway.com/new/template/metabase), [Strapi](https://railway.com/template/strapi), [MinIO](https://railway.com/new/template/SMKOEA), [ClickHouse](https://railway.com/new/template/clickhouse), [Redash](https://railway.com/new/template/mb8XJA), and [Prometheus](https://railway.com/new/template/KmJatA)—all deployable in seconds. From your dashboard, you can turn your project into a reusable template in under two minutes. | ||
|
||
We also reward our creators through the [Kickback Program](https://railway.com/open-source-kickback). When you publish a template and it’s deployed by other users, you receive 25% of the usage costs as a kickback, credited either as cash (USD) or Railway credits—allowing you to earn while supporting the developer community. | ||
|
||
Fly.io offers a selection of official and community-contributed application templates, mainly available through their GitHub fly-apps repositories. However, Fly does not have a centralized marketplace like Railway, nor does it provide any incentives for community templates. | ||
|
||
### Pricing | ||
|
||
At Railway, we believe in transparent, [flexible pricing](https://railway.com/pricing)—**you only pay for what you use**. With our pay-as-you-go model, you get an affordable flat fee for your selected plan, plus usage-based billing that scales with your needs. No overpaying, no hidden fees—just straightforward pricing. | ||
|
||
- **Trial:** Free + a one-time $5 credit for resource usage | ||
- **Hobby:** $5/month, includes $5 in usage credits every month | ||
- **Pro:** $20 per teammate/month | ||
- **Enterprise:** Custom pricing | ||
|
||
Fly.io follows a pure usage-based pricing model—there are no subscription tiers, meaning you pay based on the exact resources you consume. Check out [Fly’s pricing here](https://fly.io/pricing/). | ||
|
||
### Want to see the savings? | ||
|
||
Explore our [detailed pricing breakdown](https://docs.railway.com/reference/pricing/plans) to see how Railway keeps costs predictable while still giving you the flexibility to scale as needed. | ||
|
||
### Customer Support and Community | ||
|
||
At Railway, we take pride in offering best-in-class support through our [vibrant Discord community](https://discord.gg/railway) and our custom-built [Help Station](https://help.railway.com/)—a support platform powered by Railway itself. We believe that every project matters, no matter how big or small. If you run into an issue, we’re here to help, and our engineers are always available to ensure you get the support you need. | ||
|
||
With over [880,000 users](https://railway.com/stats) who love what we do, we’re committed to continuous improvement. [Every week](https://railway.com/changelog), we ship new features and updates to make Railway even better—because great support isn’t just about answering questions, it’s about building a platform that just works. | ||
|
||
Fly.io offers paid support plans starting at $29/month for standard support, $199/month for premium, and $2,500+ for enterprise-level assistance. If you can’t afford these plans, your only option is their community forum for help. | ||
|
||
## We are similar to Fly.io in the following ways: | ||
|
||
- Database Backups | ||
- Bare Metal | ||
- Docker Image deployments | ||
- Dockerfile deployments | ||
- Health checks | ||
- Zero downtime deploys. | ||
- Custom domains | ||
- Stateful Services a.k.a Persistent Disks and Volumes | ||
- Private Networking | ||
- Instant Rollbacks | ||
- Infrastructure as code | ||
- CI/CD | ||
- Monitoring, Observability and In-Dashboard logs | ||
- Autoscaling and Scale to Zero | ||
- Monorepo and multi-environment deployments. | ||
- Multi-region deployments | ||
- CLI tooling | ||
- Programmatic deployments via API | ||
- Serving static sites | ||
|
||
## Migrate to Railway | ||
|
||
Thinking about migrating from Fly.io to Railway? We’ve put together a [quick and simple guide](/migration/migrate-from-fly) to make the transition effortless and fast. | ||
|
||
[Sign up on Railway](https://railway.com/new) today and get a $5 in free credits to explore the platform. | ||
|
||
For companies and large organizations, we’d love to chat! [Book a call with us](https://cal.com/team/railway/work-with-railway) to see how Railway fit your needs. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
--- | ||
title: Migrate from Fly to Railway | ||
--- | ||
|
||
This guide walks you through the steps needed to seamlessly migrate your app and data from Fly.io to Railway. This process is straightforward and typically takes an average of **5 - 20 minutes**, depending on the size of your database and app complexity. | ||
|
||
**TL;DR: Quick Migration Steps** | ||
|
||
- Set up new app on Railway | ||
- Export data from Fly.io and Import into Railway DB | ||
- Deploy app (including auto-migration of app config & variables) | ||
|
||
We provide everything Fly.io offers—and more! Check out our [comparison guide](/maturity/compare-to-fly) to see the differences and make an informed choice. | ||
|
||
Why take our word for it? Experience the [Railway advantage yourself—give it a spin today!](https://railway.com/new) | ||
|
||
## Migration Steps | ||
|
||
In this guide, we will migrate a Go (Gin) app with a Postgres database from Fly.io to Railway. While we are using this app as an example, the process applies to any app, making it easy to transition your projects smoothly. | ||
|
||
Here’s the link to the [app](https://github.com/unicodeveloper/gin). | ||
|
||
### 1. Set Up a Railway Project | ||
|
||
Navigate to [Railway's Project Creation Page](https://railway.com/new). | ||
|
||
Select the **Deploy from GitHub Repo** option and connect your repository. If your Railway account isn’t linked to GitHub yet, you’ll be prompted to do so. | ||
|
||
![Railway new project](https://res.cloudinary.com/railway/image/upload/v1737143344/railwaynewproject_d4jv8c.png) | ||
|
||
### 2. Deploy the App | ||
|
||
Railway automatically detects the presence of a `fly.toml` file in your repository and seamlessly translates its configuration to match your service requirements on Railway—no manual setup needed. | ||
|
||
If your `fly.toml` file includes environment variables, Railway will automatically import them into your service. If they are missing, you can easily add them manually by following these steps: | ||
|
||
### Adding Environment Variables on Railway: | ||
|
||
1. Navigate to the **Variables** section of your service. | ||
2. Switch to the **Raw Editor** and paste the copied environment variables. | ||
3. Deploy the changes to apply the configuration. | ||
|
||
![Variables imported automatically from fly.toml into Railway service](https://res.cloudinary.com/railway/image/upload/v1737143351/environmentvariables_q0xmyh.png) | ||
|
||
Railway will deploy the Gin app as a service, as shown in the image above. You can monitor the service building and deploying in the [Project Canvas](https://docs.railway.com/guides/projects#project-canvas). | ||
|
||
[**Serverless (App Sleep) activated**](https://docs.railway.com/reference/app-sleeping): In this [**Fly.io** app](https://github.com/unicodeveloper/gin/blob/main/fly.toml), the HTTP service is configured with **`auto_stop_machines='stop'`** and **`auto_start_machines=true`**, enabling automatic stopping and restarting of machines. On Railway import, we automatically enable this setting to effortlessly optimize resource usage. | ||
|
||
![App sleep activated to optimize resource usage and spend](https://res.cloudinary.com/railway/image/upload/v1737143360/appsleep_cszmgf.png) | ||
|
||
### 3. Database Migration | ||
|
||
Railway supports a variety of databases, including **PostgreSQL**, **MongoDB**, **MySQL**, and **Redis**, allowing you to deploy the one that best fits your application needs. We also support many more via our [templates marketplace](https://railway.com/templates). | ||
|
||
If you're migrating data to Railway from Fly, you can follow these steps: | ||
|
||
1. Provision a new database by right clicking on the dashboard canvas and selecting Postgres. | ||
2. Export your data from Flyio | ||
- Use `flyctl` to connect to your Flyio Postgres instance | ||
- `fly postgres connect -a <postgres-app-name>` | ||
- Use `pg_dump` to export your database | ||
- `pg_dump -Fc --no-acl --no-owner -h localhost -p 5432 -U <your-db-username> -d <your-db-name> -f flyio_db_backup.dump` | ||
- Use `pg_restore` to connect to your Railway database and restore the data from the dump. | ||
- `pg_restore -U <username> -h <host> -p <port> -W -F t -d <db_name> <dump_file_name>` | ||
|
||
For detailed instructions, check out [this comprehensive tutorial on migrating PostgreSQL data between services.](https://blog.railway.com/p/postgre-backup) | ||
|
||
Once the migration is complete, update the `DATABASE_URL` environment variable in your Railway app to point to the new PostgreSQL database and redeploy. | ||
|
||
### 4. Replicas & Multi-region deployments | ||
|
||
In this [Fly.io app](https://github.com/unicodeveloper/gin/blob/main/fly.toml), the setting **`min_machines_running=2`** ensures that at least **two instances** of the service remain active. | ||
|
||
When imported to **Railway**, our platform **automatically detects and translates** this configuration—seamlessly ensuring that **two service instances** are running without any extra setup. Smart, intuitive, and effortless! | ||
|
||
![Replicas](https://res.cloudinary.com/railway/image/upload/v1737143335/replicas_zwtuwr.png) | ||
|
||
If your app needs to use multi-region deployments, you can leverage Railway’s [multi-region replicas](https://docs.railway.com/reference/scaling#multi-region-replicas). | ||
|
||
Enable this in the **Settings** section of your Railway service to keep your app close to users worldwide. | ||
|
||
**Note:** Multi-region replicas is currently available to Pro users. | ||
|
||
And that’s it. That’s all you need to migrate your app from Flyio to Railway. |