Migrate from Render

Render and Temps share a similar deployment model — connect a Git repo, push to deploy, get a URL. The main differences are that Render manages the infrastructure for you while Temps runs on a VPS you control, and Temps replaces Render's add-ons (databases, disks, cron jobs) with self-hosted equivalents.


What Transfers Without Changes

FeatureRenderTemps
Web servicesAuto-deploy from GitSame — auto-deploy from Git
Build commandDetected or manualSame — detected or set in project settings
Start commandnode server.js, gunicorn, etc.Same — set in project settings
Environment variablesDashboard or render.yamlTemps dashboard or CLI
Health checks/healthz pathSame — configurable health check path
HTTPSAutomaticSame — Let's Encrypt, auto-renewed
Preview environmentsPull request previewsSame — every PR gets a URL

What Needs an Alternative

Render featureTemps equivalent
Render PostgresTemps managed Postgres or external (Neon, Supabase)
Render RedisTemps managed Redis
Persistent DisksProject volumes (VPS-mounted directories)
Render Cron JobsTemps Cron Jobs
Render Static SitesStatic site deployment
Render Private ServicesTemps internal networking (services on the same server communicate over localhost)

Pre-Migration Checklist

  • SSH access to a VPS running Ubuntu 22.04+ (choosing a server)
  • Domain name with DNS access (or use a Temps subdomain while testing)
  • Render environment variables exported (see Step 1)
  • Database backup exported if you are migrating data

Step 1: Export Environment Variables

In Render, go to your service → Environment → copy all key-value pairs. You can also use the Render CLI:

render env list --service YOUR_SERVICE_NAME

Note which variables are Render-specific and need to be changed:

Render variableAction
DATABASE_URLReplace with your new database URL after migration
REDIS_URLReplace with your new Redis URL after migration
PORTRemove — Temps sets this automatically
RENDER_SERVICE_NAMERemove — Render-specific
RENDER_EXTERNAL_URLRemove or replace with your Temps URL
RENDER_INTERNAL_HOSTNAMERemove — use localhost or Temps service names

Step 2: Migrate Your Database

Export from Render Postgres

In Render, go to your database → Info → copy the External Connection String.

pg_dump "$RENDER_DATABASE_URL" \
  --no-acl \
  --no-owner \
  -Fc \
  -f render_backup.dump

Set Up the New Database

Option A — Temps managed Postgres (same server):

  1. In the Temps dashboard, go to Managed Services → New Service → PostgreSQL
  2. Temps creates a Postgres instance on your server accessible at localhost:16432
  3. The connection string is shown in the service detail page

Option B — External Postgres (Neon, Supabase, etc.): Create a database with your chosen provider and copy the connection string.

Restore Your Data

# Test on a copy first
pg_restore \
  --clean \
  --if-exists \
  -d "$NEW_DATABASE_URL" \
  render_backup.dump

# Verify row counts match
psql "$NEW_DATABASE_URL" -c "SELECT schemaname, tablename, n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC;"

Step 3: Handle Persistent Disks

Render persistent disks mount a directory that survives deployments. On Temps, use project volumes:

  1. Go to Project → Settings → Volumes
  2. Click Add Volume
  3. Set the Container path to match what you used in Render (e.g. /var/data)
  4. Temps mounts a directory from your VPS at that path

To migrate existing data from a Render disk, use rsync or scp via the Render shell before you cut over.


Step 4: Set Up Cron Jobs

Render cron jobs (schedule: in render.yaml) become Temps cron jobs:

# render.yaml (what you had)
services:
  - type: cron
    name: daily-cleanup
    schedule: "0 2 * * *"
    buildCommand: npm run build
    startCommand: node scripts/cleanup.js

In Temps, go to Project → Settings → Cron Jobs → Add Cron Job and set the schedule and command. See the Cron Jobs guide for details.


Step 5: Install Temps and Deploy

Install Temps on your server:

curl -fsSL https://temps.sh/deploy.sh | bash

Then:

  1. Go to Projects → New Project in the Temps dashboard
  2. Connect your Git repository
  3. Add your environment variables (update DATABASE_URL to your new database)
  4. Click Deploy

Your app gets a preview URL at https://your-project.yourdomain.com. Test it thoroughly before cutting over DNS.


Step 6: Cut Over DNS

Once your app works on the Temps preview URL:

  1. In Project → Settings → Domains, click Add Domain
  2. Enter your domain (e.g. app.yourdomain.com)
  3. Temps shows you the DNS records to add

In your DNS provider:

TypeNameValue
AappYOUR_SERVER_IP

Lower your TTL to 60 seconds before the cutover so you can revert quickly if needed.

Keep your Render services running for 48 hours as a fallback. DNS changes can take up to 48 hours to propagate everywhere, though most resolvers pick up changes within minutes.


Rollback Plan

If you encounter problems after cutting over:

  1. Update your DNS A record back to Render's IP
  2. Wait for propagation (fast if you lowered TTL)
  3. Your Render service is still running and receives traffic again

Next Steps

Was this page helpful?