Skip to content

Instantly share code, notes, and snippets.

@davoclavo
Forked from henrik/dokku_on_digital_ocean.md
Created March 20, 2016 23:04
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save davoclavo/888bd532129c20a48daf to your computer and use it in GitHub Desktop.
Notes from running Dokku on Digital Ocean.

My notes for Dokku on Digital Ocean.

Commands

Install dokku-cli (gem install dokku-cli) for a more Heroku-like CLI experience (dokku config:set FOO=bar).

# List/run commands when not on Dokku server (assuming a "henroku" ~/.ssh/config alias)
ssh henroku dokku
ssh henroku dokku config:get my-app

# Access the server, list commands, run command
ssh henroku
dokku
dokku config:get my-app

# See memory usage (from: https://github.com/progrium/dokku/issues/1297)
docker ps -q | xargs docker stats
# Compare to the names you see here
docker ps
 
# See server stats (memory, disk usage, load) - same as shown on login
landscape-sysinfo

# Interesting dirs
cd /var/lib/dokku/plugins  # plugins
cd ~dokku  # apps

Adding a new app

git remote add dokku dokku@henroku.nyh.name:my-app
git push dokku

ssh henroku dokku domains:add my-app my-app.nyh.name  # and configure DNS

# DB?
ssh henroku dokku psql:create my-app

# memcache?
ssh henroku dokku memcached:create my-app  # MEMCACHE_SERVERS env will be set

Working with an app

# See logs
ssh henroku dokku logs my-app -t

# Conf
ssh henroku dokku config:get my-app
ssh henroku dokku config:set my-app KEY1=val KEY2=val

Removing a plugin

cd /var/lib/dokku/plugins
rm -rf the-plugin

# List containers, remove the ones from the plugin
ssh henroku
sudo docker ps -a
docker rm <the id>

# List images, remove the ones from the plugin
docker images
docker rmi <the id>

Setup

Use Digital Ocean's "Ubuntu with Dokku" image.

Create a swapfile to avoid out-of-memory errors during build/deploy (I got those sometimes even with a 1 GB RAM image):

ssh henroku
dd if=/dev/zero of=/swapfile bs=1024 count=1024000
mkswap /swapfile
swapon /swapfile

DNS

It's convenient to set up wildcard DNS so e.g. *.henroku.nyh.name points to this server.

With LoopiaDNS, you need to add a CNAME for sub-subdomain wildcards (e.g. *.henroku.nyh.name pointing to henroku.nyh.name).

Plugins

memcached

https://github.com/Flink/dokku-memcached-plugin

This fork seems to be the most up to date, with nice features like autostart on server reboot.

cd /var/lib/dokku/plugins
git clone git@github.com:Flink/dokku-memcached-plugin.git
git clone https://github.com/rlaneve/dokku-link.git link  # dependency
dokku plugins-install

PostgreSQL

https://github.com/Flink/dokku-psql-single-container

Before you install, see the section on getting a newer version of Postgres. At the time of writing, 9.4 has some cool new features over the default 9.3.

After install, run: dokku psql:start

(Got errors from Kloadut/dokku-pg-plugin, and it seems unmaintained.)

DB backups

Put this script in /root/database_backups.sh, run chmod +x /root/database_backups.sh.

Then add something like this to crontab:

# m h  dom mon dow   command
  0 0  *   *   *     /root/database_backups.sh

You will get daily backups in /var/backups/postgres. The script keeps a few days and then removes too old ones. Digital Ocean's infrequent server backups will include these dumps.

Resources

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment