My notes for Dokku on Digital Ocean.
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
git remote add dokku [email protected]: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
# 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
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>
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
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
).
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 [email protected]:Flink/dokku-memcached-plugin.git
git clone https://github.com/rlaneve/dokku-link.git link # dependency
dokku plugins-install
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.)
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.