Laravel向けのDokku活用とデプロイ方法

レンタルサーバーにLaravelで作成したプロジェクトを公開しているのですが、ぼちぼち収益を上げてきたので、今までレンタルサーバーで出来なかった機能をVPSを借りて作れるようにしておこうと試作していました。

VPSを借りれば何でも出来ますが、なるべくメンテナンスコストが発生しないようにしたり、構築の手間がかからないようにするべくVPSを立ち上げたらすぐ使える状態になっているのが理想です。

調べているとXserver VPSでのアプリイメージ、Dokkuを構築できる事がわかり Herokuは昔に使っていましたし、Dockerも使えるので何かあれば素のDockerコンテナを起動すれば良いかなと試した備忘録です。

この記事を読む事で

  • リモート環境のDokkuにローカル環境のMacから操作
  • Dokkuのプラグインで入れたRedisを外部サーバーで使う
  • Dokkuを使用したLaravelデプロイ
  • Dokkuで公開したアプリをhttpsでアクセス

これらの項目がわかるようになります。

Dokkuの初期設定

DokkuはHerokuのようなPaaS環境を構築できるソフトウェアです。

Herokuのような、という認識で触り始めたのですがHerokuと同じ設定でそのまま使えるようなので無料のHerokuという認識です。

Gitリポジトリを作成して Procfile 等をコミット、Dokkuで作成したリモートリポジトリにプッシュする事でcomposerのインストールやnpmビルドを実行しプロセスを立ち上げて公開する事ができます。

Xserver VPSでDokkuアプリイメージを使用して立ち上げると既に使える状態になっています。設定すべき項目としては

  • ドメインのAレコードを設定
  • Dokkuサーバーへのssh接続ができるように
  • Dokkuクライアントを開発機にセットアップ
  • Gitプッシュが出来るようにssh鍵の設定

を設定します。

ドメインのAレコードは専用ドメインとして取得し、サブドメインは何を指定しても良いようにアスタリスクとして設定します。

<ドメイン名> A
*.<ドメイン名> A

Dokkuサーバーへは設定したドメインでssh接続ができるようにセットアップしておきます。VPSを立ち上げる際に鍵の作成をしたり、後からでも鍵を指定しておきます。

Host <ドメイン名>
  User root
  HostName <ドメイン名>
  IdentityFile ~/.ssh/<作成した鍵>

残りはDokkuクライアントでDokkuサーバーの操作を出来るようにすればGitプッシュが出来るように鍵の登録が可能になります。

クライアントのセットアップは公式のこちらのページに詳しく載っています。

https://dokku.com/docs/deployment/remote-commands/

Macである私は以下の設定を行いました。

$ brew install dokku/repo/dokku
$ export DOKKU_HOST=<Dokkuサーバーに設定したドメイン名> # .bashrcや.zshrcにも記載しておく

$ dokku domains:set-global <Dokkuサーバーに設定したドメイン名>
$ cat ~/.ssh/<Gitプッシュに使用する鍵>.pub
<公開鍵>

# Dokkuサーバー内で実行
$ echo '<公開鍵>' | dokku ssh-keys:add admin

これで初回セットアップは終了です。

Dokkuで設定したRedisを外部サーバーから使用

Redisとはメモリ上で動作するデータベースなので、MySQLなどに比べて高速に動作する特徴があります。

ただし、あくまでメモリ上に保存されるものなのでユーザーデータなど永続化が必要な物への使用には向いていないためキャッシングやキューイングに使用されます。

適切に使用することでパフォーマンス改善が見込まれます。

一般の共有のレンタルサーバーではRedisを使用できないため、この機会にDokkuを使用した使用方法をまとめておきます。

Redisの場合にはこちらのプラグインを使用します。

https://github.com/dokku/dokku-redis

$ dokku plugin:install https://github.com/dokku/dokku-redis.git redis
$ dokku redis:create example
~~~
Dsn:                 redis://:<パスワード>@dokku-redis-example:6379
~~~
$ dokku redis:expose example
-----> Service example exposed on port(s) [container->host]: 6379->28222

プラグインをインストールし、Redisを立ち上げ、exposeで外部にポート公開します。

上記のログですとポート番号は 28222 でアクセスできるようになり、Dsnとして表示された行でパスワード(<パスワード>と表示した部分)が表示されます。

telnet で立ち上げたRedisに接続できるか確認します。

 $ telnet <Dokkuに設定したドメイン> 28222
Trying <IPアドレス>...
Connected to <Dokkuに設定したドメイン>.
Escape character is '^]'.
AUTH <パスワード>
+OK
set name hoge
+OK
get name
$4
hoge
quit
+OK
Connection closed by foreign host.

これで接続確認ができました。

Redis以外にもLaravelで活用できるものとしては

が確認できました。

Laravelプロジェクト等で適切に指定して使いましょう。

参考: https://dotnsf.blog.jp/archives/1081489448.html

DokkuにLaravelをデプロイ

ドメインとDokkuクライアントまでセットアップできていればあとは簡単です。

composer create-project laravel/laravel example-app
cd example-app

2ファイル追加します。

https://github.com/heroku/heroku-buildpack-nodejs.git
https://github.com/heroku/heroku-buildpack-php.git
web: vendor/bin/heroku-php-apache2 public

あとは公開用の設定です

$ git init
$ git add -A
$ git commit -m 'first commit'
$ dokku apps:create example-laravel # リポジトリ上から設定するとGitのリモートリポジトリが設定されるのと、アプリ名が不要になる
$ php artisan key:generate --show
<シークレットキー>
$ dokku config:set APP_KEY=<シークレットキー>
$ dokku domains:set laravel.<Dokkuサーバーに設定したドメイン名> # アクセスURLの指定

$ git push dokku master

これで http://laravel.<Dokkusあーばーに設定したドメイン名> にアクセスして表示されれば成功です。

https対応をするには以下の設定を行います。

dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
dokku letsencrypt:set --global email <連絡が取れるご自分のメールアドレス>
dokku letsencrypt:cron-job --add

dokku letsencrypt:enable

Let’s Encryptの設定がとても簡単に設定することができます。

これで httpsでのアクセスに対応できました。

以上でLaravelアプリケーションをDokkuにデプロイする事ができます。今回は表示のみで、データベースへの対応はしていませんが、pluginを使用してデータベースを導入して立ち上げ、dokku config:set を使用すれば環境変数の値が設定できるのでデータベースの指定を書き込む事で対応する事ができます。

それとログの出力がファイル出力になっているので、別途標準出力に対応する必要もあります。詳しくは公式ドキュメントなどを確認しつつ設定してみてください。

参考: https://qiita.com/dyoshikawa/items/81f768a6a78d26ca0ada

この章について、データベースへの接続やストレージの永続化などに対応した方法についてもまとめてみました

終わりに

以上、DokkuをLaravelプロジェクトで使いこなすための最初のセットアップ方法や出来る事をまとめました。

Dokkuを活用することでデプロイが容易になったり、今までレンタルサーバーだけで考えていたシステム構成に比べると出来る事が増えていくかと思います。

AWSを使用すればVPS上で構築したDokkuを使用せずとも手軽に実装できるかとは思いますが、課金額が初めからわかっているのがとても魅力的です。

「使った分だけ」の課金はわかりやすいのですが、どんな需要があってどこが収益ポイントがわからないシステムを作る場合は「使った分だけ」だと作ったと同時に会計上の負債になる可能性が存在してしまいますが、DokkuのようなVPSの契約だと初めから月額料金がわかっているので高負荷になっても負債にはなりません。

初期段階の試作や検証のシステムを作るにはピッタリな物だと感じます。

なによりも数コマンドでプラグインの導入やドメイン当てて公開できるのは便利すぎます。。。機能開発に注力できる良いアプリケーションですね。

それでは今回も、お疲れ様でした。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA