Skip to main content

Migrating from Render

Render and Vessl share a Git-based deploy model and automatic SSL, but Render manages the servers while Vessl uses servers you own. This guide covers the key differences and how to migrate.

Concept mapping

RenderVessl equivalent
Web serviceApplication
Background workerDaemon (Daemons tab)
Cron jobServer cron job or daemon with a loop
Static siteApplication with static stack detection
Render PostgresPostgreSQL add-on
Render RedisRedis add-on
Environment variablesVariables tab
Custom domainNetwork tab → Custom domains
Shell (Render Shell)Console tab → Shell
LogsLogs tab
Deploy historyDeployments tab
RollbackDeployments tab → Rollback
Auto-deploy on pushAuto-deploy toggle in app settings
Health check pathSettings → Runtime & Release → Health Check Path
Disk (persistent storage)Persistent volume

Step 1 — Add a server

Provision a Ubuntu VPS and add it to Vessl. See Add your server. Any major provider (Hetzner, DigitalOcean, Vultr, etc.) works fine.

Step 2 — Migrate environment variables

Go to your Render service → Environment and copy all variables. Paste them into Vessl's Variables tab.

Skip database connection variables (DATABASE_URL, REDIS_URL) — Vessl injects those automatically when you attach an add-on.

Step 3 — Migrate the database

Render managed databases allow you to export via pg_dump:

pg_dump "<render-postgres-connection-string>" -Fc -f backup.dump

Get the connection string from your Render database dashboard → Connection.

After creating a PostgreSQL add-on in Vessl and deploying once, set up an SSH tunnel and restore:

ssh -L 15432:127.0.0.1:5432 <ssh-user>@<server-ip> -N

pg_restore --host 127.0.0.1 --port 15432 \
--username <DB_USERNAME> --dbname <DB_DATABASE> \
--no-owner --no-privileges backup.dump

Step 4 — Background workers and cron jobs

Background workers in Render → add a Daemon in the Daemons tab with the same start command.

Cron jobs in Render → use Server cron jobs (Servers → your server → Cron Jobs) or a daemon with a loop:

/bin/sh -c "while true; do <your-command>; sleep <interval-in-seconds>; done"

Step 5 — Persistent disk

If your Render service uses a persistent disk, add a volume in the Vessl app wizard. Set the mount path to the same path your app writes to (e.g. /data, /app/storage).

See Persistent storage for details.

Step 6 — Health check

Render lets you configure a health check path per service. In Vessl, set this in Settings → Runtime & Release → Health Check Path. If you're using /healthz or /health on Render, use the same value in Vessl.

Common differences

Build minutes Render charges for build minutes on paid plans. Vessl builds run on the build server you provision — there's no per-minute billing for builds.

Spin-down on inactivity (free tier) Render's free tier spins down services after 15 minutes of inactivity. Vessl doesn't do this — your app stays running as long as the server is up.

Static sites Render serves static sites from their CDN. Vessl builds and serves static sites from an nginx container on your server, routed through Traefik. There's no built-in CDN — use Cloudflare in front of your Vessl domain if you need CDN caching for a static site.

Multiple regions Render lets you choose a deploy region per service. Vessl deploys to the server you provisioned — you choose the region when you pick your VPS provider.