dokku on Ubuntu VM - Part 1: Setting up the VM
Outdated. Find more up-to-date version in this newer article .
My notes in walking along the dokku path.
(Not only) the rails community is going all excited about playing around with docker instead of with full-blown virtual machines.
With dokku and its fork dokku-alt a (or count two and of course there are many others) project aims to build a thin but super-soft layer between the containers (if you don’t know them yet: think of them as virtual machines) and your deployment-fu.
These tools scratch itches of mine: deployment for me is less fun than doing other stuff with a computer. But slim tools usually are quite fun. And I like heroku-style git-push-deploys.
So, lets get a dokku-thing up and running.
Aim
- Set up a dokku guest that we can deploy a rails 4 app to.
- Run this dokku guest on a server in the wild.
- Let this dokku guest serve our app to the outside world.
###Requirements
- Ubuntu 14.04 system
- A bit of patience, as initial setup requires some data to be downloaded (you can speed this up by using local repositories)
- DNS set up to resolve your domain
Instead of spoiling my main system with other package installations, configurations and tasks, I will create a virtual machine running ubuntu to be my docker/dokku host. I will call that machine vlaada
and it will be a minimal Ubuntu 14.04 (trusty) system. To be on the safe side, I will not create the VM by hand or with any mind-blowing creatures like puppet or chef, but use vmbuilder
(apt-get install python-vm-builder
). Note that while I use kvm and libvirt here you can use other hypervisors.
Some options require special attention:
addpkg linux-image-generic
: vmbuilder (?) bug workaround (you might not need it)addpkg acpid
: allows us to shut the machine down cleanly without logging inaddpkg apparmor
: another workaround, otherwise docker/dokku won’t play nice with us (again, ymmv)addpkg postgresql-client
: will need this later to make postgresql database dumps, the dokku postgresql plugin won’t install this package for ususer
andssh-user-key
: locks the machine down (a bit), use the public key with which you want to log into the system later--execscript ...
: assemble path to the setup-vlaada- script (see below); it is executed at the end of the build process
The content of setup-vlaada
-script:
If that looks scary to you, it is. It basically allows the dokku and dokkulord users to sudo without password.
On my favorite machine, this vm-creation-process takes around 20 minutes. On my development machine with ecovillage-internet multiply this by 3.
If you are impatient when no white letters run over your black screen, the command above will tell you where to sudo tail -f
to to see what is happening ( .... logging to file: /tmp/tmpXXXXYYYZZZ
).
vmbuilder will then provide us with a qcow image in the subfolder ubuntu-kvm
. Now might be a good time to clone this machine, e.g. using
virt-clone --auto-clone -o vlaada --prompt
(apt-get install virtinst
to get virt-clone
, this only applies to the libvirt setting I use).
Configuring access to the dokku VM
vlaada (the dokku VM) lives on a server in the wild and it shall not be accessible from outside (except for ports 80 and 443). To access it, I will dig an ssh tunnel through the server.
In my ~/.ssh/config
I put
Calling ssh vlaada-tunnel
makes connections to the localhosts port 7722 end up at port 22 on the vm that we have set up (here, referenced by its IP 192.168.122.77
).
I also add an host entry
Test that
Now after digging the tunnel (ssh vlaada-tunnel
) I am able to ssh vlaada
into the dokku machine, which is somewhere out there, hidden in the wild. Cool.
Next steps
That’s how happy we will get today. I hope to upgrade this post with some better prose and deliver part II, where we add dokku-juice to the mix. Have fun.
Notes
In the vmbuilder
step you might find following options helpful:
--mirror http://your-apt-mirror-cache-or-proxy
This might save you some time and network traffic.
Having a better idea?
Awesome! Get in contact with me!