ややめも

アプリ作りたい女子大学院生のめも💁‍♀️

技術メモ
日記
つくったもの
就活の話

VPSにミニHeroku(Dokku)を導入してみた!

ConoHaで借りたVPSにDokkuというPaaSをインストールしてみました。
色々な設定がかなり楽になりそうです💃

経緯

はじめはGoogle Cloud PlatformのGCE(Google Compute Engine)とGAE(Google App Engine)の永久無料枠を使ってGoで作ったWebアプリを運用しようとしていました。

GCPはめちゃくちゃ便利すぎるので使いたかったのですが、無料枠内で開発をしようとすると制限が多く、

  • GAEは10分でタイムアウトしてしまうので、重いバッチ処理ができない
  • インスタンスの数を1つに設定すると、初回リクエストの反応が非常に遅くなる

といった問題に当たりました。

学生なので低価格で、だけど楽にWebアプリを運用したい!

そこでDokkuというミニHerokuが簡単に導入できるということがわかったので、Dokkuを使ってGoで作ったWebアプリを稼働させてみました。


Dokkuを使ってみた感想

  • PaaSなので一度設定したら git push dokku master で簡単にデプロイできる
  • 自分のドメインをURLに設定できる
  • 簡単にHTTPS化できるプラグインがあり楽ちん
  • 公式ドキュメントをちゃんと読めば簡単にセットアップできるはず!

VPSの設定諸々

Dokkuの対応OSは以下の通り。

  • Ubuntu x64 - Any currently supported release
  • Debian 8.2+ x64
  • CentOS 7 x64 (experimental)
  • Arch Linux x64 (experimental)

UbuntuかDebianだと鍵設定がGUIでできるので(たぶん)楽です。
あとメモリは最低1GBは必要。

ということでConoHaの月額900円のVPSを借りました。定額安心!
OSはUbuntuを選択しました。
f:id:yaya-w-1026:20190911152637p:plain

こちらから借りると友達紹介で1000円分のクーポンがもらえます💁‍♀️
www.conoha.jp

VPSを借りたら、

  • ユーザー作成
  • sshログイン許可
  • 鍵作成
  • rootログイン、パスワードログイン禁止
  • ポート番号変更
  • ファイアウォールの設定

をしておきましょう。

Dokkuの設定とアプリのデプロイ

公式のドキュメントの通りにやりましょう。
dokku.viewdocs.io
私は英語のページをみると一度戻ってしまう癖があり色々な日本語の記事を参照しましたが、鍵設定の辺りでエラーが続出しました。
公式ドキュメントが一番正しいので、公式を読むのが近道です。


概要を軽く説明すると、基本的な流れは
1. Dokkuのインストール

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

2. 鍵設定
UbuntuかDebianにDokkuをインストールしたのであれば、GUIで設定可。
CentOSかArch Linuxならこちらを参照。

3. デプロイ
先にVPS上でアプリを作成。

$ dokku apps:create appname


ローカルPCの設定。
vimで~/.ssh/configを設定。

HOST dokku-host-name
	HostName VPSのIPアドレス
	Port 変更したポート

あとはデプロイ。

git remote add dokku dokku@dokku-host-name:appname
git push dokku master

遭遇したエラー

すべてgit push dokku masterを行った際に起きたエラーです。

'appname' does not appear to be a git repository

こちらのIssueを見ながら解決。

ローカルPCで鍵を作り、公開鍵をコピーしてVPS上において以下を実行。

$ cat path/to/id_rsa.pub | sudo sshcommand acl-add dokku [鍵の名前]

sshcommandというものを介して鍵を追加する必要があります。

Permission denied(publickey)

ssh-add -k .ssh/id_rsa

秘密鍵はssh-agentに登録する必要があります。

他に考えられる原因としては、dokkuのauthorized_keysに公開鍵が登録されていない・間違っている可能性です。
/home/dokku/.ssh/authorized_keysを確認してみてください。
もし空であれば以下のコマンドによって、/home/dokku/.ssh/authorized_keysに鍵が追加できます。

dokku ssh-keys:add KEY_NAME path/to/id_rsa.pub

/etc/ssh/sshd_configのAuthorizedKeysFileの項目で認証する鍵のパスも追加しておきました。

ドメインが変

こちらのコマンドを参考にドメインを確認します。

// 状況確認
$ dokku domains:report
// domains app vhostが空だったので追加
$ dokku domains:add <app> <domain or IPアドレス>

Unable to select a build pack

設定ファイルが足りないため、どのようなプロジェクトなのかをDokku側で把握できていないときに起きていたと考えられます。
Goであればgo modulesやdepなどのファイルから検知してくれるようです。
github.com

私は今回、プロジェクトを

/root-repository
  -/backend
  -/batch
  -/frontend

のように構成していたので、このままpushするだけではうまくいきません。
そこでsubtreeで対象となるディレクトリ(Procfileやgo.modなどの設定ファイルがあるディレクトリ)を追加してpushしたらデプロイに成功しました。

git subtree push --prefix api/ dokku master

まとめ

鍵まわりの設定に時間がかかりましたが、これ以降は簡単にデプロイできそうなので楽しみです!
今作ってるWebアプリができたらまたお知らせします🕺