Dokku – Build your own Heroku and deploy your Rails application

building photography

Dokku is powered by Docker PaaS implementation

Install Dokku on Ubuntu VPS

DOKKU_TAG=v0.26.8 bash

Add SSH key/s

echo 'copy mykey1 pub ssh key here' | dokku ssh-keys:add mykey1
echo 'copy mykey2 pub ssh key here' | dokku ssh-keys:add mykey2

Set Domain for Dokku

dokku domains:set-global

Install Postgre

dokku plugin:install

Install Redis

dokku plugin:install redis

Deploy Ruby on Rails Application

Run-on your local machine (The example is based on an existing Rails application with Git source version control. You will gonna need a dokku client)

cd myapp/
dokku apps:create myapp

Create and link Postgre database for your application

dokku postgres:create myapp_database
dokku postgres:link myapp_database myapp

Create and link Redis instance for your application

dokku redis:create myapp_redis
dokku redis:link myapp_redis myapp

Deploy on Dokku

git remote add dokku [email protected]:myapp
git push dokku master:master

Run-on the dokku server

dokku run myapp rake db:migrate
dokku run myapp rake db:seed
dokku config:set myapp ENV1=VALUE1 ENV2=VALUE2 # set env variables for your app

Useful commands

Tail logs

dokku logs myapp -t
dokku nginx:access-logs myapp
dokku nginx:error-logs myapp

Run Rails console

dokku run myapp rails c

PostgreSQL console

dokku postgres:connect myapp_database

Print application configs

dokku config myapp

Restart/Re-deploy application

dokku ps:restart myapp
dokku ps:rebuild myapp


Skip the deployment on container rebuild

dokku config:set myapp DOKKU_SKIP_DEPLOY=true

Change Proxy port for application

dokku proxy:ports-set myapp http:80:3000

Import SQL dump

dokku postgres:connect myapp_database < myapp_database.sql

Add persistent storage for file uploads

mkdir -p /var/lib/dokku/data/storage/myapp
dokku storage:mount myapp /var/lib/dokku/data/storage/myapp:/app/storage
chown -R dokku:dokku /var/lib/dokku/data/storage/myapp
dokku ps:restart myapp
dokku storage:report myapp

Leave a Comment

Your email address will not be published. Required fields are marked *