PostgREST on Heroku
The best way to build an API, now for Heroku.
Updated for PostgREST v7.0.1.
NOTE: The free tier Heroku PostgreSQL addon will not work because it does not support having multiple database roles. Heroku Postgres paid tiers do support multiple database roles, though you'll have to create them through Heroku Postgres Credentials.
We recommend spinning up a Postgres database with Amazon RDS. Make sure you create it in the Virginia region because that's where Heroku's dynos are and it will decrease latency between the server and db.
Alternatively you could create it on ElephantSQL for free tier usage.
To Deploy PostgREST on Heroku
-
Log into Heroku using the Heroku CLI:
# If you have multiple Heroku accounts, use flag '--interactive' to switch between them heroku login --interactive
-
Create a new Heroku app using this Heroku buildpack:
heroku apps:create ${YOUR_APP_NAME} --buildpack https://github.com/PostgREST/postgrest-heroku heroku git:remote -a ${YOUR_APP_NAME}
-
Create the necessary user roles according to the PostgREST documentation and allow them role switch from the psql console:
GRANT user123 TO authenticator; GRANT web_anon TO authenticator;
-
Create a configuration file
postgrest.conf
:db-uri = "postgres://authenticator:mysecretpassword@postgresqlserver.com:5432/postgres" db-schema = "api" db-anon-role = "web_anon" db-pool = 10
and the
Procfile
:./env-to-config ./postgrest postgrest.conf
It is also possible to set variables directly on Heroku:
heroku config:set POSTGREST_VER=0.5.0.0 heroku config:set DB_URI=postgres://postgrest_test:postgrest111@postgrest-test.crbxuv1p3j1c.us-west-1.rds.amazonaws.com/postgrest_test heroku config:set DB_SCHEMA=public heroku config:set DB_ANON_ROLE=postgrest_test heroku config:set DB_POOL=60
To determine the best value for PostgREST environment variable
DB_POOL
, ask the database by running this SQL:show max_connections;
See https://postgrest.org/en/stable/configuration.html for the full list of configuration parameters.
-
Create the Heroku dyno:
git push heroku master
Your Heroku app should be live at ${YOUR_APP_NAME}.herokuapp.com
.