ConoHaVPSのDokkuテンプレートでWebアプリを楽々デプロイ


はじめに

この記事はConoHa Advent Calendar 2019 18日目の記事です。

こんにちは、高校生プログラマーのいっそです。
普段は趣味でRubyを用いたWebアプリケーションの製作をしています。
今回Qiita初投稿&Advent Calendar初参加なので、このはちゃんとこうしてクリスマスまでカウントダウンができるのをとても嬉しく思いますし、ちょっと緊張もしてます...。
とにかく!うまくフィーチャーできるように頑張るので今回はよろしくお願いします!

本題

今回は「ConoHa」VPSのテンプレートイメージを使って「Dokku」を構築し、そこに実際に製作したWebアプリケーションをデプロイしていきたいと思います。
あと、デプロイした「このはちゃんに愛を叫びたい」というWebサイトでこのはちゃんに「愛」を叫ぶってのもやりたいと思います。

なぜ構築するか

  • 自分でカスタマイズ可能なPaaSを持てる
  • 本番環境のWebアプリケーションを簡単にデプロイできる
  • Always Onで訪問者の待機時間を減らせる
  • 独自ドメインの設定やSSL設定などをクレジットカードなしでできる(PaaSホスティングだとクレジットカードが必須で高校生の立場ではほぼ不可能)
  • ConoHaは爆速でWebアプリケーションとの相性が抜群!
  • ConoHaのテンプレートイメージだから安定してるし、何より構築が楽
  • 以下の方法で行うとWebアプリを何個も建てれる!

Dokkuを構築してみる

ConoHaVPSダッシュボード左上のサーバー追加をクリック。
リージョンとVPSのスペックはお好みで(私は高校生でお金がないので、手軽な東京の1コアCPU、メモリ512MB、SSD20GBを選択しました)。
次にイメージタイプですが、アプリケーションタブDokkuを選択します。
あとはお好みのrootパスワード、ネームタグ(サーバーの名前)を付けます。
追加をクリックすると20秒程でサーバーが作られます。
実質これがPaaSを建てたってことで!超簡単ですね!

Dokkuの設定

次に実際に使えるように設定していきます。
サーバーリストから先ほど追加したサーバーのネームタグを選択。
ネットワーク情報のIPアドレスにブラウザでアクセスします。
するとDokku Setupと言う画面が出ます。

Admin Accessにはデプロイ元のパソコンの公開鍵を入力します。
公開鍵は~/.ssh/id_rsa.pubと言うファイルのssh-rsaなどから始まる文字列を使用します。

HostnameにはConoHaのIPアドレスを指定します。
IPアドレスが"-"で区切られてるので、それを"."に置き換えれば大丈夫だと思います。

Finish Setupをクリックして設定を終了します。
これでDokkuのデプロイを受け取る設定は終わりました。

今回デプロイするWebアプリの紹介


今回私が製作したのは「このはちゃんに愛を叫びたい(通称:このさけ)」です!
Webアプリとしてはシンプルでこのはちゃんへの愛を投稿するシステムになってます。
シンプルな分読み込みのパフォーマンスも高く、デスクトップVerのPageSpeed Insightsでは常に95%以上を叩き出すくらい速いです。

このアプリとConoHaのVPSとは非常に相性が良く、VPSの速さを皆さんのブラウザでも体験してもらえるのではないかなと考えています。

いよいよWebアプリをデプロイ

さて話を本題に戻し、「このさけ」をデプロイしていきたいと思います。

まずはDokku上にアプリのコンテナ(格納場所)を作成します。

Create_App
# Dokkuホスト上で
#アプリケーション名は好きな名前を付ける
dokku apps:create アプリケーション名
#dokku apps:create conosake

次にデータベースにPostgresを使用するのでプラグインのインストールデータベースコンテナの作成をします。

Make_Database
# Dokkuホスト上で
sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git

#データベース名はアプリケーション名と違う名前を付ける
dokku postgres:create データベース名
#dokku postgres:create conosakedatabase

そしてこれまで作ったアプリとデータベースを関連付けしていきます。

Link_App&Database
#Dokkuホスト上で
dokku postgres:link データベース名 アプリケーション名
#dokku postgres:link conosakedatabase conosake

これでデプロイされたアプリを受け取る準備が整いました。
ローカルでのデプロイ作業に移ります。
デプロイにはGitを使用していきます。

Deploy_App
#ローカルで
cd アプリの場所

git init
git add -A .
git commit -m 'First deploy'

git remote add dokku dokku@VPSのIPアドレス:アプリ名
#git remote add dokku [email protected]:conosake

git push dokku master

yes/noが出てきたら全てyesにしましょう。

=====> Application deployed:
       http://123.456.789.012:34567

To 123.456.789.012:アプリケーション名
 * [new branch]      master -> master

となればデプロイ完了です。
しかし、このままでは"Internal Server Error"と表示されてしまうのでDokkuのデータベースでマイグレーション処理を行います(そのまま表示され、正常に稼働しているならこの設定は必要ないかもしれません)。
dokku run アプリケーション名の後にコマンドを入力するとDokku上でコマンドを実行できます。
データベースを最新のものにしましょう。

Database_Migration
#Dokkuホスト上で
#例はrakeを用いた際のマイグレーションコマンド。適宜読み替えてください。

dokku run アプリケーション名 マイグレーションコマンド
#dokku run conosake rake db:migrate

ローカルコンソール上の=====> Application deployed:の下に表示されているURLにブラウザでアクセスします。
これであなたのアプリDokku上で使えるようになりました!おめでとうございます🎉

Webアプリの設定をする

このままではIPアドレスがモロに出ていて、またSSLも適用されていないのでWebアプリとしてはかなり致命的な状況になっています。
しかしDokkuでは独自ドメインの設定やLet's Encryptを用いたSSL認証が簡単に行えます!
今回はそこまでやってみたいと思います。

独自ドメインの設定

まずドメインのDNSレコードを設定します。
AレコードでVPSのIPアドレスを指定し、追加します。

次にDokkuでアクセスできるように設定していきます。

Add_Domain
#Dokkuホスト上で
dokku domains:add アプリケーション名 ドメイン名
#dokku domains:add conosake conosake.isso.cc

これでアプリケーションと独自ドメインが接続されました!

Let's Encryptの設定

こちらはdokku-letsencrypt (Beta)というプラグインを使用して設定します。

Set_Let'sEncrypt
#dokkuホスト上で
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

dokku config:set --no-restart アプリケーション名 DOKKU_LETSENCRYPT_EMAIL=e-mailアドレス
#dokku config:set --no-restart conosake [email protected]

dokku letsencrypt アプリケーション名
#dokku letsencrypt conosake

dokku letsencrypt:auto-renew

これでSSL証明書も設定されましたし、自動で更新してくれる設定にもなりました!

いくつでもアプリをデプロイ可能に

実は前述の「いよいよWebアプリをデプロイ」から「Let's Encryptの設定」までを繰り返すことでいくつでもアプリをデプロイすることができます。
仕組みとしては全てのコンテナにポート番号が割り振られているためです。
ドメインもアクセスしたドメインを検知して自動的にアプリとつなげているのだと思います。
今回は詳しくは扱いませんが参考にしてみてください。
因みにこれを行うためにはスペックの良いサーバーを使うようにしてください。
管理するアプリが多すぎて処理しきれない場合があります。

早速愛を叫びます。

早速、ある意味本題のこのはちゃんに「愛」を叫ぶってことをやっていきたいと思います。
私は控えめに叫びましたが、皆さんはぜひもっともっと熱く叫んでください!
投稿は以下で行うことができます!
このはちゃんに叫びたい

さいごに

今回はConoHaVPSのDokkuテンプレートを用いてPaaSの構築を行ってみました。

初めての記事ちゃんと書けてたちょっと心配です.....。
けれど、少なからずConoHaのアプリケーションテンプレートの利便性と、自分でPaaSを作って自分のアプリをデプロイする楽しさってのは伝わったんじゃないかなって思ってます。
だからこの記事を読んでる皆さんも是非この楽しさを1回体感してみてください!

来年も参加できる機会があれば参加したいと思います!
どうもありがとうございました!

p.s.
何かあればお気軽にコメントよろしくお願いします。
是非Twitterなどにも足を運んでいただけると励みになります😍