Migrate from Render to Zenifra
This guide shows, field by field, where to find each setting of a service in the Render dashboard and where to enter the same value in the Zenifra console. For the general migration plan, with data copy and DNS switch, see Migrate to Zenifra.
Keep the Render service running while you deploy and validate the application on Zenifra. Only turn Render off after switching DNS.
1. Copy the settings from Render
In the Render dashboard, open the service you are migrating and click Settings in the service sidebar.
Build & Deploy
In the Build & Deploy section, write down:
| Render field | What it does |
|---|---|
| Repository | The service's Git repository |
| Branch | The deployed branch |
| Root Directory | The application folder inside the repository (monorepo). Empty means the root |
| Build Command | Installs dependencies and builds, such as npm install && npm run build |
| Pre-Deploy Command | Runs before each deploy, usually database migrations |
| Start Command | Starts the application, such as npm start or gunicorn app:app |
| Auto-Deploy | Whether each commit publishes a new version |
Also note the service language (Node, Python, Go, Docker, and so on), because it defines the Runtime on Zenifra.
Health Checks and domains
Still in Settings:
- in the Health Checks section, copy the checked path, such as
/health - in the custom domains list, note each domain that points to the service
Environment
Click Environment in the service sidebar and copy the name and value of each variable under Environment Variables. Also check:
- Linked Environment Groups: variables from linked groups also reach the application; copy them from the group
- Secret Files: files the application reads from
/etc/secrets/<file>; see Secret Files
If the repository has a
render.yaml, the same values are there:buildCommand,preDeployCommand,startCommand,rootDir,healthCheckPath, andenvVars.
2. Create the project on Zenifra
In the console, click + Create project, choose HTTP Application and the plan. Then fill in the fields with what you copied:
| In Render | In the Zenifra console |
|---|---|
| Repository | Project Source: Git repository, with Git provider GitHub (or Forgejo) and the same repository |
| Branch | The project branch |
| Service language | Runtime and Version (Node.js, Python, Bun, Go, Java, or PHP) |
| Root Directory | Root directory. Keep . if the field was empty in Render |
| Build Command | Build Command |
| Pre-Deploy Command | Beginning of the Start Command, such as npm run migrate && npm start |
| Start Command | Start Command |
| Auto-Deploy on | Automatic by branch deployment mode |
| Auto-Deploy off | Manual deployment mode |
| Server port | Port, under Advanced Settings. See Port |
| Environment Variables | Environment Variables |
| Health Check Path | Check path, under Edit › Application healthcheck (from the Premium plan up) |
Render's Build Command usually starts with dependency installation, such as npm install && npm run build or pip install -r requirements.txt. On Zenifra, installation already runs during the build: copy into the Build Command only the part after the installation, such as npm run build. If nothing is left, leave the field empty. In Go and Java, keep the Build Command filled in, because it produces the binary or jar that the Start Command runs.
In Node.js, installation uses npm ci and needs a committed package-lock.json. If the Render service uses Yarn or pnpm, generate and commit a package-lock.json before migrating, or deploy as a Docker Image. See Node.js dependencies.
For details on each creation field, see How to create an HTTP project via console.
3. Adjust what differs between the platforms
Port
On Render, the application listens on the port from the PORT variable, which defaults to 10000. On Zenifra, the port is the project's Port field. If your code reads PORT, set both to the same value, for example Port 3000 and the variable PORT=3000. The application must listen on 0.0.0.0.
Render variables
Variables created by Render itself, such as RENDER_EXTERNAL_URL and RENDER_GIT_COMMIT, do not exist on Zenifra. If your code uses any of them, create a variable with the equivalent value, such as the project's Zenifra URL.
Variables during the build
In projects whose source is GitHub, the project variables are also available to the Pre-build Command and the Build Command, as on Render. See Variables during the build.
Secret Files
Zenifra has no secret files. If the file is small, such as a credentials JSON, store its content in an environment variable and read the variable in your code. Large files can live in persistent storage.
Docker services
If the Render service uses the Docker language, deploy the application as a Docker Image: build the image from your Dockerfile, push it to a registry, and enter the image in the project. The Dockerfile guide and the GitHub Action show how to automate this. If the service uses a Docker Command, put that command in the Dockerfile CMD.
Persistent Disk
If the service has a disk, enable persistent storage when you create the project and use the same mount path in Directory to Persist. This path cannot be changed after creation.
4. Other Render services
| Render | Zenifra |
|---|---|
| Background Worker | HTTP project with Exposure set to Private and the worker's Start Command |
| Cron Job | Scheduled job |
| Static Site | Static site |
| Render Postgres | Managed PostgreSQL. Copy the data with pg_dump and pg_restore |
| Render Key Value | Managed cache or Key-Value |
| Preview Environments | Preview Environments |
Create the databases before the application, so you can enter the new connection URLs in the variables right away.
5. Validate and switch DNS
- Open the project's
*.clients.zenifra.comURL and test login, main flows, e-mails, and webhooks. - Check Build logs and the application logs for errors.
- Follow the switch-day checklist: lower the DNS TTL, run the final data copy, add the domain on Zenifra, and update DNS.
- Keep the Render service running for a few days for rollback, and only then remove it.
Need help?
Write to [email protected] with the fields you copied from Render, or reach us on WhatsApp at +55 (11) 5199-3013.
Last updated on
Migrate from Netlify to Zenifra
Step-by-step guide to bring a Netlify site to Zenifra: where to copy the Build command, Publish directory, and variables, how to translate netlify.toml, _redirects and _headers, Functions, Forms, and DNS, and where to enter each value in the console.
Migrate from Railway to Zenifra
Step-by-step guide to bring Railway services to Zenifra: where to copy Root Directory, build and start commands, and variables, how to translate reference variables, cron, volumes, and databases, and where to enter each value in the console.