Moving from one Platform as a Service (PaaS) to another can seem daunting, but migrating to Convox offers significant advantages in terms of cost, control, and flexibility. Whether you're coming from Heroku, Platform.sh, Fly.io, or AWS Elastic Beanstalk, this comprehensive guide will walk you through the migration process step by step.
Before diving into the migration process, let's understand what makes Convox an attractive alternative:
Before starting the migration, document your current application architecture:
Convox supports multiple cloud providers. Consider factors like:
production
, staging
)Note: Feel free to browse the available parameters to see if you'd like to make any fine-tune adjustments now. Most parameters can be changed after rack installation; the ones that cannot are listed in the immutable section of the install modal. For a complete list of parameters available for all cloud providers, see the Rack Parameters documentation.
The rack installation typically takes 5-20 minutes depending on your cloud provider.
Linux (x86_64):
curl -L https://github.com/convox/convox/releases/latest/download/convox-linux -o /tmp/convox
sudo mv /tmp/convox /usr/local/bin/convox
sudo chmod 755 /usr/local/bin/convox
macOS (Intel):
curl -L https://github.com/convox/convox/releases/latest/download/convox-macos -o /tmp/convox
sudo mv /tmp/convox /usr/local/bin/convox
sudo chmod 755 /usr/local/bin/convox
macOS (M1/ARM64):
curl -L https://github.com/convox/convox/releases/latest/download/convox-macos-arm64 -o /tmp/convox
sudo mv /tmp/convox /usr/local/bin/convox
sudo chmod 755 /usr/local/bin/convox
convox login console.convox.com -t your-cli-key-here
convox switch your-rack-name
Heroku users will find Convox familiar, as both platforms use similar concepts.
Heroku Procfile:
web: python manage.py runserver 0.0.0.0:$PORT
worker: celery worker
Convox convox.yml equivalent:
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:3000
port: 3000
worker:
build: .
command: celery worker
Heroku Add-ons → Convox Resources:
# Heroku Postgres → Convox Postgres
resources:
database:
type: postgres
options:
storage: 100
version: 13
# Heroku Redis → Convox Redis
cache:
type: redis
options:
version: 6.2
services:
web:
resources:
- database
- cache
Export your Heroku config:
heroku config -a your-app-name --shell > heroku-env.txt
Import to Convox:
convox env set $(cat heroku-env.txt)
Platform.sh uses .platform.app.yaml
which translates well to Convox's convox.yml
.
Platform.sh .platform.app.yaml:
name: app
type: php:8.1
web:
locations:
"/":
root: "web"
passthru: "/index.php"
Convox convox.yml equivalent:
services:
web:
build: .
command: php-fpm
port: 9000
Platform.sh .platform/services.yaml:
database:
type: postgresql:13
disk: 2048
Convox equivalent:
resources:
database:
type: postgres
options:
version: 13
storage: 2048
Fly.io's fly.toml
configuration maps to Convox's convox.yml
.
Fly.io fly.toml:
app = "my-app"
[build]
image = "my-app:latest"
[[services]]
internal_port = 8080
protocol = "tcp"
[[services.ports]]
handlers = ["http"]
port = "80"
Convox convox.yml equivalent:
services:
web:
image: my-app:latest
port: 8080
Elastic Beanstalk applications often use Dockerrun.aws.json
or platform-specific configurations.
Elastic Beanstalk Dockerrun.aws.json v2:
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"name": "web",
"image": "my-app:latest",
"portMappings": [
{
"hostPort": 80,
"containerPort": 8000
}
]
}
]
}
Convox convox.yml equivalent:
services:
web:
image: my-app:latest
port: 8000
In your application root, create a convox.yml
file. Here's a comprehensive example:
environment:
- NODE_ENV=production
- DATABASE_URL
resources:
database:
type: postgres
options:
storage: 100
version: 13
cache:
type: redis
services:
web:
build: .
command: npm start
port: 3000
environment:
- PORT=3000
resources:
- database
- cache
health: /health
scale:
count: 2
cpu: 256
memory: 512
worker:
build: .
command: npm run worker
resources:
- database
- cache
scale:
count: 1
timers:
daily-cleanup:
schedule: "0 2 * * *"
command: npm run cleanup
service: worker
Need Framework Examples? Check out our example applications repository for pre-configured samples of popular frameworks including Rails, Django, Node.js, Python, and more. These examples provide working convox.yml
configurations and Dockerfiles to help accelerate your migration.
If you don't already have one, create a Dockerfile
:
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
convox apps create my-app
convox env set NODE_ENV=production DATABASE_URL=your-db-url
convox deploy
Monitor the deployment:
convox logs
convox services
# Shows your application URLs
convox ps
# Shows running processes
main
, production
)For pull request testing:
From Heroku:
heroku pg:backups:capture -a your-app
heroku pg:backups:download -a your-app
From Platform.sh:
platform db:dump --gzip
convox resources import database -f your-dump.sql
For large databases, consider using cloud provider tools for faster transfers.
Update your convox.yml
:
services:
web:
domain: ${HOST}
port: 3000
Set the domain:
convox env set HOST=yourdomain.com
convox deploy
Convox automatically provisions SSL certificates via Let's Encrypt. For custom certificates:
convox certs upload cert.pem key.pem
Point your domain to the Convox router:
convox rack
# Note the Router URL
Create a CNAME record:
yourdomain.com CNAME router.your-rack.convox.cloud
services:
web:
scale:
count: 2-10
targets:
cpu: 70
memory: 80
Adjust CPU and memory based on your application needs:
services:
web:
scale:
cpu: 512
memory: 1024
Configure appropriate health checks:
services:
web:
health:
path: /health
grace: 30
interval: 10
timeout: 5
convox logs
convox logs --filter error
convox logs --since 1h
Convox provides comprehensive monitoring capabilities through multiple options:
Convox offers built-in monitoring and alerting that requires no additional tools or complex configuration:
Enable Monitoring:
Once enabled, access your metrics through the V3 Dashboard in the Metrics section of the Console.
You can also integrate with:
Set up regular backups:
convox resources export database -f backup-$(date +%Y%m%d).sql
Consider automated backup scripts in your CI/CD pipeline.
convox ps
Solution: Use Convox's environment variable management:
convox env set KEY1=value1 KEY2=value2
convox env edit # Interactive editing
Solution: Verify resource linking in convox.yml
:
services:
web:
resources:
- database # This creates DATABASE_URL automatically
Solution:
convox builds logs BUILD_ID
Solution:
convox rack ps
Start with minimal resources and scale up:
services:
web:
scale:
count: 1
cpu: 256
memory: 512
Configure your rack to use spot instances for cost savings:
convox rack params set node_capacity_type=spot
Use appropriate database sizing:
resources:
database:
type: postgres
options:
storage: 20 # Start small, increase as needed
class: db.t3.micro # Cost-effective for development
Create separate racks for different environments:
# Production rack
convox rack install aws production region=us-east-1 node_type=t3.medium
# Staging rack
convox rack install aws staging region=us-east-1 node_type=t3.small
Use build-time environment variables:
convox build --build-args "NODE_ENV=production" --build-args "API_URL=https://api.example.com"
Configure custom load balancers for TCP/UDP services:
balancers:
custom:
service: api
ports:
5000: 3001
5001: 3002
services:
api:
ports:
- 3001
- 3002
Platform migration doesn't have to be complex or risky. With Convox, you get all the simplicity of a traditional PaaS while maintaining complete control over your infrastructure and dramatically reducing your operational costs.
Whether you're migrating from Heroku, Platform.sh, Fly.io, or AWS Elastic Beanstalk, this comprehensive approach ensures a smooth transition that delivers immediate cost savings and long-term strategic advantages. No vendor lock-in, no compromise on features, no sacrifice of the developer experience you expect—just better economics and complete infrastructure ownership.
Ready to cut your PaaS costs by up to 70% while keeping full control? The future of application hosting is infrastructure ownership without operational complexity, and the right platform can make all the difference in your bottom line and strategic flexibility.
Get Started Free with your Convox migration today, or contact our team for free white-glove onboarding and personalized migration assistance.
For additional migration resources and best practices, visit our documentation.