GuidesMigrate from Render
Differences with Render
Some features of Render work in a different way on Ferry, and some are not in Ferry.
| Subject | On Ferry |
|---|---|
| Language versions | They come from your project files, not from variables. See Language guides. |
| Pre-deploy commands | They do not exist. Run migrations with a one-off job: ferry run NAME -- npm run migrate. See Deploy an app with Postgres. |
| Plans and regions | A plan is limits, not a machine. Regions do not apply: each service runs on your server. See Resource limits. |
| Key value stores | Ferry ignores maxmemoryPolicy. A full Redis refuses writes. |
| The port | The same as Render: Ferry sets PORT (default 10000) and routes to it. |
| Static sites | nginx serves them with try_files $uri $uri/ $uri.html and your 404.html. Ferry does not support routes (redirects and rewrites) and headers. |
Not in Ferry
Pull request previews, autoscaling, private registry credentials, secret files and IP allow lists.
- Node:
engines.nodeinpackage.json. - Python:
.python-versionorruntime.txt. - Go: the
goline ofgo.mod. - Ruby:
.ruby-versionor theGemfile.
Ferry gives the variables NODE_VERSION and PYTHON_VERSION to your app like all other variables.
The limits are a ceiling, not a reservation. Nothing makes sure that they fit the server. Ferry lowers a CPU limit that is above the number of CPUs of the server to that number. Choose a server that is large enough for what you run.
Ferry sets the maxmemory of Redis to 3/4 of the memory limit of the store. Give a cache enough memory with its plan or memoryLimit.