Deployment to Heroku is currently not working due to a change in Heroku’s Postgres extension schema. We plan to implement changes to address this and will update this guide to remove this warning once we have done so. See the relevant Github issue for more information or to subscribe to notifications.
In this guide we show how to deploy EdgeDB to Heroku using a Heroku PostgreSQL add-on as the backend.
Because of Heroku’s architecture EdgeDB must be deployed with a web app on Heroku. For this guide we will use a todo app written in Node.
First copy the code, initialize a new git repo, and create a new heroku app.
$
npx degit 'edgedb/simpletodo#main' simpletodo-heroku
$
cd simpletodo-heroku
$
git init --initial-branch main
$
heroku apps:create --buildpack heroku/nodejs
$
edgedb project init --non-interactive
If you are using the JS query builder for EdgeDB then you
will need to check the dbschema/edgeql-js
directory in to your git repo
after running yarn edgeql-js
. The edgeql-js
command cannot be run
during the build step on Heroku because it needs access to a running EdgeDB
instance which is not available at build time on Heroku.
$
yarn install && npx @edgedb/generate edgeql-js
The dbschema/edgeql-js
directory was added to the .gitignore
in the
upstream project so we’ll remove it here.
$
sed -i '/^dbschema\/edgeql-js$/d' .gitignore
Heroku’s smallest PostgreSQL plan, Hobby Dev, limits the number of rows to 10,000, but EdgeDB’s standard library uses more than 20,000 rows so we need to use a different plan. We’ll use the Standard 0 plan for this guide.
$
heroku addons:create heroku-postgresql:standard-0
To run EdgeDB on Heroku we’ll add the EdgeDB buildpack.
$
heroku buildpacks:add \
--index 1 \
https://github.com/edgedb/heroku-buildpack-edgedb.git
start-edgedb
in the ProcfileTo make EdgeDB available to a process prepend the command with start-edgedb
which is provided by the EdgeDB buildpack. For the sample application in this
guide, the web process is started with the command npm start
. If you have
other processes in your application besides/instead of web that need to access
EdgeDB those process commands should be prepended with start-edgedb
too.
$
echo "web: start-edgedb npm start" > Procfile
Commit the changes and push to Heroku to deploy the app.
$
git add .
$
git commit -m "first commit"
$
git push heroku main
Using an HTTP client, you can perform health checks to monitor the status of your EdgeDB instance. Learn how to use them with our health checks guide.