Using Dokku for rails applications on a Linode Server.

This is a step by step guide to configure Dokku on a Linode server. For more details visit Dokku docs, please.

What is Dokku?

Dokku is an open source platform as a service that runs a single server, similar to Heroku. Click here to visit their website.

Configure your VPS on a Linode server.

Some configurations are required in order to achieve a better performance in Dokku. The configurations are:

  1. Open your server’s dashboard in the Linode Manager.

  2. Make sure your Linode is using KVM, not Xen, for virtualization.

  3. In the “Rebuild” tab, select “Ubuntu 14.04 LTS”, set a root password, and rebuild.

  4. Once your Linode has been created, click “Boot” and wait for it to complete.

  5. SSH into your server as root and run the following commands:

  6. When prompted, install Grub into the first hard drive.

   apt-get update

   apt-get -qq upgrade

   apt-get install linux-image-virtual linux-image-extra-virtual
  1. Back in your server’s dashboard, click “Edit” on its Configuration Profile

  2. Change the “Kernel” option to “GRUB 2” and save your changes.

  3. Lastly, reboot the Linode.

This changes are necessary because of Docker has a better performance with AUFS.

Install Dokku.

To install Dokku, access your Linode using ssh and run the following commands:

wget [https://raw.githubusercontent.com/dokku/dokku/v0.7.2/bootstrap.sh](https://raw.githubusercontent.com/dokku/dokku/v0.7.2/bootstrap.sh)

sudo DOKKU_TAG=v0.7.2 bash bootstrap.sh

After installing Dokku, you should configure the ssh access and the virtualhosts in order to respectively deploy and access your app through a browser. Open your browser and enter the IP address of your Linode. There are a few parts that you need to configure here. See the following images.

In your terminal run the following command:

cat ~/.ssh/id_rsa.pub

If you want to use a subdomain, check the option ‘Use virtualhost naming for apps’.

Create a new dokku application

In order to create a new application in the Dokku, it is necessary to access your server via ssh and run the following command:

dokku apps:create <app-name>

Install Postgres plugin

By default Dokku don’t come with a database. Therefore, we’ll need to install a plugin to work with Postgres or MySQL. Let’s stick with Postgres, run the following command to install the plugin:

sudo dokku plugin:install [https://github.com/dokku/dokku-postgres.git](https://github.com/dokku/dokku-postgres.git)

Run the following command to create a new service. It is necessary fill the service name, but it is not necessary to use the same app name. Create a new services with name, not necessary some name your app. Run the command:

dokku postgres:create <serviceapp-name>

Access your server to link the postgres service to your app. Run the following command:

dokku postgres:link <service-name> <app-name>

List of commands to postgres plugin

postgres:clone <name> <new-name> Create container <new-name> then copy data from <name> into <new-name>

postgres:connect <name> Connect via psql to a postgres service

postgres:create <name> Create a postgres service with environment variables

postgres:destroy <name> Delete the service and stop its container if there are no links left

postgres:enter <name> [command] Enter or run a command in a running postgres service container

postgres:export <name> > <file> Export a dump of the postgres service database

postgres:expose <name> [port] Expose a postgres service on custom port if provided (random port otherwise)

postgres:import <name> < <file> Import a dump into the postgres service database

postgres:info <name> Print the connection information

postgres:link <name> <app> Link the postgres service to the app

postgres:list List all postgres services

postgres:logs <name> [-t] Print the most recent log(s) for this service

postgres:promote <name> <app> Promote service <name> as DATABASE_URL in <app>

postgres:restart <name> Graceful shutdown and restart of the postgres service container

postgres:start <name> Start a previously stopped postgres service

postgres:stop <name> Stop a running postgres service

postgres:unexpose <name> Unexpose a previously exposed postgres service

postgres:unlink <name> <app> Unlink the postgres service from the app

Deploying your app

In order to deploy your app you will need to add a remote link.

git remote add dokku dokku@ip-or-domain:<app-name>

After that you can deploy your app with git push, for example:

git push dokku master

To run any rake, it is necessary that you access your server via ssh and run the following commands:

dokku run <app-name> rake <rake-task>

That’s all folks! Your application is up and running on a Linode Server.

References

Dokku docs

Digital Ocean

Thanks to Dmitry Rocha, Marcle Rodrigues, and Will Soares.

We are hiring new talents. Do you want to work with us? become@codeminer42.com