Dokku + Ruby on Rails + Digital Ocean
Using Dokku and Digital Ocean to create your own Heroku
Dokku is a PaaS built with Docker and designed to act like Heroku. You can easily deploy your apps to a remote production server from the command line at a fraction of the cost. You can even use subdomains to deploy multiple apps on the same Dokku install.
Setup Rails Project
Create a new project
$ rails _4.1.8_ new PROJECTNAME
Add these lines to your Gemfile
group :production do
gem 'rails_12factor'
gem 'pg'
gem 'thin'
end
Then run
$ bundle update
$ bundle install
Setup Dokku
You can install and run Dokku anywhere you’d like, but Digital Ocean’s 1-Click Dokku install is too good to pass up.
- Create and name your droplet. I am currently running two apps on the smallest droplet, so any of them should work.
- Scroll down and work through the options until you get to Select Image. Click Applications and select Dokku.
- Note according to the Dokku Docs, you must disable IPv6 on your droplet.
- After the install finishes, visit your droplets IP address to finish the setup.
- Add your computer’s ssh key.
- Select either to use the droplet’s IP address or your custom domain.
- If you use a hostname, make sure to point your DNS to the droplet IP address for each Dokku app
Deploying Your App
Setup git for your project
$ git init
$ git add -A
$ git commit -m "Init Commit"
Add the Dokku Remote
$ git remote add dokku dokku@example.com:projectname
$ git push dokku master
This will deploy your app to your droplet with the domain name projectname.example.com
Setup PostgreSQL Database
SSH into your droplet and install the Postgres Plugin
$ ssh root@example.com
$ cd /var/lib/dokku/plugins
$ git clone https://github.com/Kloadut/dokku-pg-plugin
$ dokku plugins-install
Create a Postgres container and link it to our project
$ dokku postgresql:create example-pg
$ dokku postgresql:link example example-pg
Migrate your database
$ dokku run example bundle exec rake db:migrate
Your site should be up and running! Repeat these steps for each project you put on your Dokku instance.
Troubleshooting
Check logs with
$dokku logs example