Deploy PostgREST to Dokku

Create a new app

dokku apps:create pgrest-myproject

Add a port mapping from 3000 (PostgREST container) to 80 (host).

dokku ports:add pgrest-myproject http:80:3000

Create a new PostgreSQL database using the dokku-postgres plugin and link it to our project.

dokku postgres:create pgrest-myproject
dokku posgres:link pgrest-myproject pgrest-myproject

A new environment variable will be created:

=====> pgrest-myproject
DATABASE_URL: postgres://postgres:alongpass@dokku-postgres-pgrest-myproject:5432/pgrest_myproject

But we need to define the same value in a variable named PGRST_DB_URI so PostgREST can access the database.

dokku config:set pgrest-myproject PGRST_DB_URI="postgres://postgres:alongpass@dokku-postgres-pgrest-myproject:5432/pgrest_myproject"

Pull and deploy the Docker image from dockerhub.

docker pull postgrest/postgrest:latest
docker tag postgrest/postgrest:latest dokku/postgrest:latest
dokku git:from-image pgrest-myproject dokku/postgrest:latest

Add a Let’s Encrypt TLS certificate with the Dokku letsencrypt plugin.

dokku letsencrypt:set pgrest-myproject email <your-email>
dokku letsencrypt:enable pgrest-myproject

Git commit messages

Each commit message consists of a header, a body, and a footer.

<type>(<scope>): <subject>


The header is mandatory and the scope is optional.


Must be one of the following:

  • feat: introduces a new feature to the codebase
  • fix: patches a bug in your codebase
  • refactor: improves the code without changing functionality
  • BREAKING CHANGE: major version

Additional types:

  • build: a change that affects the build system or external dependencies
  • chore: same as build but chore is preferred, also any change that doesn’t fit in any other type
  • ci: changes to the CI configuration
  • docs: changes to the documentation
  • style: white-space, formatting, semi-colons, etc.
  • perf: performance improvements
  • test: adding or fixing


The scope can be empty. Scope can be any of these:

  • category, part or section of the codebase we are affecting, e.g.: api, client, tooling
  • a specific package, library or dependency,e.g.: moment.js, requests
  • a ticket number in case the current commit doesn’t close it, e.g.: chore(123): update dependencies


Short (50 chars or less) summary of the change:

  • use the imperative, present tense: “change” not “changed”
  • don’t capitalize the first letter
  • no dot (.) at the end


The footer should contain a closing reference to an issue if any and breaking changes.

Closes #123, #345


IE6 not supported anymore.

Semantic versioning

Conventional commits are designed to work with Semantic versioning.

  • feat: minor version
  • fix: patch version
  • BREAKING CHANGE: major version


Add a new feature without breaking existing functionality. This bumps a minor version, e.g.: 1.2.0 to 1.3.0.

feat: add search for transactions

Add new React component for searching transactions with autocompletion.

Include tests.

Closes #123, #234

Fix a bug. This bumps a patch version, e.g.: 1.3.0 to 1.3.1.

bug(api): add correct status code for existing resources

We return `409` when trying to create a user with an existing email.

Closes #453

Add new feature that breaks existing functionality. This bumps a major version, e.g.: 1.3.1 to 2.0.0.

feat!: add bank sync 

This replace CSV import and use Plaid to connect to people's banks.

Closes #423, #424, #425


People won't be able to import transactions using CSV. Only Bank 
Sync is available.