酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Dokku プライベートなherokuを作ってRailsアプリをデプロイ[DegitalOclean]

herokuライクなプライベートなPaaSを作るためのOSS『dokku/dokku - GitHub』の紹介です。 このDokkuの環境は、「DegitalOclean」だと画面から数クリックで作成できるので、 今回は、DegitalOcleanとセットで手順を紹介します。


Dokkuを使うモチベーション

今回Dokkuを使おうと思ったモチベーションはこちら。

- 趣味アプリでは、できるだけアプリだけに集中したい
- Herokuの無料版の制約を気にせずにアプリ開発したい
  - 1時間以上アクセスしないとスリープになる
  - 6時間/1日はスリープ状態にしないといけない
  - Heroku PostgreSQLは10,000行までしか使えない
  - 一定時間以上連続するプロセスがkillされる(はず)
- VPSやクラウドだとミドルウェアの環境構築や、デプロイのセッティングに時間がかかる

Herokuはただ乗りフリーライダーの理論ですので、基本ごめんなさいですm( )m 一方で個人の趣味開発は、限られた時間との勝負なのでより効率的な開発手法を模索していて今回 『dokku/dokku - GitHub』を使った方法をトライすることにしました!

画面からDokkuのDropletを作成

DegitalOclean」にログインして、Dropletを作成します。 「One-click App」 => 「Dokku v0.4.10 on 14.04」を選んでDropletを作成してください。

スクリーンショット_2016-01-08_22_11_54

ドメインの設定です。

自分のDropletを作成して、IP(例 123.123.123.123) にブラウザでアクセス。

1
open 123.123.123.123

以下を登録してください

- 自分のSSHキー
- Custom Domain
- アプリごとのVirtual Host名の利用(onにしていいかも)

スクリーンショット 2016-01-08 22.43.36

Custom Domainを登録したら、自分のdomain側の設定を修正して、123.123.123.123 を見に行くようにしてください。

1
2
apps.yourdomain.com   A 123.123.123.123
*.apps.yourdomain.com A 123.123.123.123

サーバに入ってpostgresqlのプラグインをインストール

公式チュートリアルに従って、『dokku/dokku-postgres - GitHub』をインストールします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ssh でサーバにログイン
ssh root@123.123.123.123

# dokku の postgresql プラグインをインストール
$ dokku plugin:install https://github.com/dokku/dokku-postgres.git

# PostgreSQL の 今回のアプリ用のDB を作成
$ dokku postgres:create dokku_sample_db

# dokkuのアプリケーションを作成
$ dokku app:create dokku_sample_app

# DBをアプリケーションとをひも付け
dokku postgres:link dokku_sample_db dokku_sample_app

ちなみに、Dokkuで使えるPluginの一覧はこちら『dokku/plugins.md - Dokku』。

Rails アプリを作成

ローカルに戻ってサンプルのRailsアプリを作成します。

1
2
3
4
5
6
7
8
# Railsアプリの作成
rails new dokku_sample_app --database=postgresql --skip-test-unit --skip-bundle -m https://raw.github.com/morizyun/rails4_template/master/app_template.rb

# アプリのフォルダに移動
cd dokku_sample_app

# Bookでscaffold
rails g scaffold book title:string auther:string price:float

routesにrootを追加します。

1
2
3
4
5
# config/routes.rb
Rails.application.routes.draw do
  # ↓ を追加
  root 'books#index'
end

.gitignore から config/secrets.yml を削除。そして、git にコミット。

1
2
3
4
5
# gitに登録
git add . -A && git commit -m 'first commit'

# git のremote サーバを追加
git remote add dokku dokku@apps.yourdomain.com:dokku_sample_app

ローカルからの実行系

ローカルでのコマンド入力を簡単にしてくれる 「SebastianSzturo/dokku-cli」 を使いつつデプロイします!

1
2
3
4
5
6
7
8
9
10
11
# gitの情報を読んで、herokutoolbelt
gem install dokku-cli

# secret keyをセット
dokku config:set dokku_sample1 SECRET_KEY_BASE=`bundle exec rake secret`

# サーバにdeploy
git push dokku master

# ブラウザで表示
dokku open

Railsで作成した画面が表示されれば成功です!

スクリーンショット 2016-01-08 22.52.38

dokku-cliのコマンド

以下の様なことができます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# アプリ配下でコマンドを実行
dokku run <cmd>   # Run a one-off command in the environment of the app

# よく使いそうなコマンド
dokku ssh                                       # Start an SSH session as root user
dokku logs [-t]                                 # Display logs for the app (-t follows)
dokku help [COMMAND]                            # Describe available commands or one specific command

# 設定変更系のコマンド
dokku config                                    # Display the app's environment variables
dokku config:get KEY                            # Display an environment variable value
dokku config:set KEY1=VALUE1 [KEY2=VALUE2 ...]  # Set one or more environment variables
dokku config:set:file <path/to/file>            # Set one or more environment variables from file
dokku config:unset KEY1 [KEY2 ...]              # Unset one or more environment variables

# プロセス/コンテナ系のコマンド
dokku ps           # List processes running in app container(s)
dokku ps:rebuild   # Rebuild the app
dokku ps:restart   # Restart the app container
dokku ps:start     # Start the app container

# その他便利コマンド
dokku nginx:build                               # (Re)builds nginx config for the app
dokku open                                      # Open the app in your default browser
dokku url                                       # Show the first URL for the app
dokku urls                                      # Show all URLs for the app

感想

まだ、簡単なアプリをデプロイしただけなので、もう少し色々試した上でですが、今のところの感触はかなりありな気がします^^

Special Thank

押さえておきたい書籍

いかがだったでしょうか?
もし説明がわかりにくかったり、間違っている場所があればぜひ一言!

Comments