Go
dokku

Heroku互換アプリをVPS上のDokku環境へデプロイする

はじめに

個人開発ならHerokuよりDokkuを使おうの記事に感化され、自作のGo言語製Line BotアプリをDokkuへデプロイし開発・運用しています。Dokkuを動かすサーバにはさくらのVPSを利用しました。

本記事ではアプリケーションをDokku環境へデプロイするまでの手順を記載します。

利用したサービス・技術

  • さくらのVPSを利用
  • Dokkuのサブドメイン機能を活用するため、お名前.comでドメインを購入

手順

VPSを立てる

Dokkuを動かすためのVPSをたてます

筆者はさくらのVPSを利用しました。

サーバを立てたらこちらなどを参考にしてサーバの初期設定をします。

VPS設定の【注意点】

Dokkuを利用するため以下の注意点があります。

1. DokkuはUbuntuでないと動かない(CentOSはNG)

こちらの公式リファレンスにあるように、現時点(2018年3月時点)ではUbuntu16.04またはUbuntu14.04のDebian系のみのサポートです。CentOS6はサポートなし、CentOS7はexperimental版がありますが、安定せずドキュメントもほぼ無い状況です。

私はこれを把握せずCentOS6でスタートしてしまいUbuntuを入れ直しました。。。

2. デフォルトではiptablesにてHTTPが閉じられているので開ける必要がある

さくらのVPSのUbuntuではiptablesのデフォルト設定は以下のようになっており、HTTPなどは閉じられているので開いてあげる必要があります。

/etc/iptables/iptables.rules
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

開き方はこちらなどを参考にしてください。

独自ドメインをさくらのVPSに紐付ける

Dokkuのサブドメイン自動生成の機能を有効活用するためお名前.comで購入したドメインをさくらのVPSに紐付けます。

さくらのVPSでのドメイン設定

さくらのVPSコンソール画面の「ネームサーバ登録」タブからネームサーバ設定画面を開き、下記画像のように独自ドメインにて"*"エントリと"@"エントリをAレコードで登録します。

screenshot.png

お名前.comでの設定

さくらのVPSの「ネームサーバ登録」に記載のDNSサーバのドメインを、お名前.comの対象独自ドメインの「ネームサーバの変更」画面にて下記画像のように設定します。

screenshot2.png

以上の設定でVPSはDokkuが自動生成するサブドメインへのリクエストを受け入れるようになりました。

Dokkuをインストール&セットアップ

Dokkuをインストール

DokkuをさくらのVPSへインストールします。

Dokkuの公式ページに従い以下のコマンドでインストール

$ wget https://raw.githubusercontent.com/dokku/dokku/v0.11.6/bootstrap.sh
$ sudo DOKKU_TAG=v0.11.6 bash bootstrap.sh

DokkuへSSHキー設定

インストールが完了したらDokkuへデプロイするためのSSHキー設定をします。

VPSのドメイントップへアクセスすると下記画像のようなDokkuの設定ページが表示されます。

スクリーンショット_2018-02-18_23_19_06.jpg

Public Keyの設定はgitHubでssh接続する手順~公開鍵・秘密鍵の生成から~などの記事と同じ要領で設定します。

Hostnameには上記にて設定した独自ドメイン名を入力し、今回はDokkuのサブドメイン機能を利用したいので"Use virtualhost naming for apps"にチェックをつけます。

また、これらの設定はサーバ上にてDokkuインストール時に作成される/home/dokku/.sshパス内で確認・再設定ができます。

アプリをDokkuへデプロイ

Dokkuへアプリをデプロイします。

本記事では例としてアプリ名をmyappとします。

Dokkuにてデプロイ用アプリを生成

VPSでdokkuコマンドにてこれからデプロイするアプリをDokku上に作成します。

# dokku apps:create myapp

ローカルマシンからデプロイ

DokkuはHeroku互換なのでこちらのようなProcfileファイルをアプリのルートディレクトリへ用意します。

アプリのルートディレクトリからDokkuへデプロイします。

$ cd myapp
$ git remote add dokku dokku@your-root-domain.com:myapp
$ git push dokku master

以下のように終了すればデプロイ成功です!アプリが動作するか確認しましょう。

=====> Application deployed:
       http://myapp.your-root-domain.com

補足

筆者はGo言語製のyarana-botという名前のLINE BOTアプリケーションの作成しており、それをデプロイしました。

以下はそれに関した補足内容です。

アプリをHTTPS化

Line BotのMessage APIを利用するためにはアプリケーションをHTTPS化をする必要があります。

Dokkuには非常に容易にHTTPS化するdokku-letsencryptというプラグインがあります。

Usageにあるようにたった2コマンドでアプリをHTTPS化できるのでとても便利です。

Go言語製アプリをDokku(Heroku)へデプロイするには/venderディレクトリもgitに含めないといけない

サードパーティを利用したGo言語製のアプリをDokku(Heroku)へデプロイするためにはdepなどの依存管理ツールを利用する必要があります。

このとき作成される/venderディレクトリはgitに含めないとデプロイできません。筆者は.gitignoreファイルへ/venderディレクトリを含めてしまっていたので失敗してしまいました。

こちらの記事に助けられました。

おわりに

アプリケーションをDokkuへデプロイするまでの手順をVPS設定まで含めて記載しました。

Dokkuでの環境変数設定やログ取得などは本記事では触れていないので別記事を作成し紹介できればと思います。

参考