Deploy PostgREST to Dokku

Here is a list of steps to deploy a PostgREST instance 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

Types of UUID

  • v1: mac address + time + random
  • v4: completely random
  • v5: input + seed (consistent, derived from input)
  • v7: time + random (distributed sortable ids)

Source

Ubuntu Desktop personal setup

This is how I customize a clean Ubuntu install.

Essentials

First we install the essentials.

sudo apt install curl vim fish tmux

SSH keys

ssh-keygen -t ed25519 -C "[email protected]"

Copy public key to paste as needed:

xclip -sel clip < ~/.ssh/id_ed25519.pub

Folder structure

Update the folder structure. Basically changing the defaults locations of folders like ~/Downloads and ~/Desktop.

Create new folders.

cd ~
mkdir work dl docs media tpl pub \
  media/{music,books,pics,vids,screens,torrents}

Make Ubuntu use our new folders. Edit ~/.config/user-dirs.dir and update the file so it looks like this:

XDG_DESKTOP_DIR="$HOME/desk"
XDG_DOWNLOADS_DIR="$HOME/dl"
XDG_TEMPLATES_DIR="$HOME/tpl"
XDG_PUBLICSHARE_DIR="$HOME/pub"
XDG_DOCUMENTS_DIR="$HOME/docs"
XDG_MUSIC_DIR="$HOME/media/music"
XDG_PICTURES_DIR="$HOME/media/pics"
XDG_VIDEOS_DIR="$HOME/media/vids"

Fish configuration

Make fish the default shell

Install Fisher.

Install z:

fisher install jethrokuan/z

Ubuntu configuration

Add Spanish:

  • Settings
    • Region & Language
    • Input Sources
    • Add Spanish
  • Appearance
    • Dark
    • Dock
      • Auto-hide the Dock: On
      • Position on screen: Bottom

Install GNOME tweaks

sudo apt install gnome-tweaks

With GNOME Tweaks activate:

  • Top Bar
    • Activities Overview Hot Corner
    • Battery Percentage
    • Weekday
  • Workspaces
    • Static Workspaces
      • Number of Workspaces: 5
      • Workspaces span displays

GNOME Terminal configuration

Download and install the Dracula theme for GNOME Terminal.

Restart your terminal to reflect the changes.

Tmux configuration

Update ./config/tmux/tmux.conf:

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'dracula/tmux'
set -g @dracula-plugins 'git, network-ping, attached-clients, network-vpn, weather, time'
set -g @dracula-show-left-icon 'uwu'

run -b '~/.tmux/plugins/tpm/tpm'

Install Node

Install n:

curl -L https://git.io/n-install | bash

Install Python

Install pyenv using pyenv-installer.

Be sure to install the build environment dependencies:

  • https://github.com/pyenv/pyenv/wiki#suggested-build-environment

Install poetry.

Git commit messages

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

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

Header

The header is mandatory and the scope is optional.

Type

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

Scope

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

Subject

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

Footer

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

Closes #123, #345

BREAKING CHANGE:

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

Examples

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

BREAKING CHANGE:

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

Resources