Endo Tech Blog

Techブログと言う名のただのブログです。

deployerを使って簡単にLaravelのアプリケーションをロリポップ!マネージドクラウドにデプロイする

遅くなったのですが、この記事はGMOペパボ Advent Calendar 2018 - Qiitaの18日目の記事です。

タイトル通りなのですが、deployerを使ってマネージドクラウドにLaravelのアプリケーションをデプロイする方法を紹介しようと思います。

image

先に共有としては記事で説明するよりも、実際に手を動かして触って貰ったほうが早いと思ったので簡単にマネージドクラウドにLaravelのアプリケーションがデプロイを出来るスターター リポジトリを用意しました。

github.com

チュートリアル記事も用意しています。

lolipop-mc-starter-laravel/tutorial_jp.md at master · Fendo181/lolipop-mc-starter-laravel · GitHub

始めてマネージドクラウドを触る方はこちらのチュートリアル記事を見ながらLaravelのアプリケーションをデプロイして頂くと良いと思います。

デプロイする方法に関してもtutorilal_mdに全て記述したので、これ以上語る事もないのですが、動機とか、やりながら詰まった点を少し紹介します。

マネージドクラウドにデプロイしたかった動機

2つ理由があります。
1つめは「マネージドクラウドを使ってほしい」と言う1番の理由があります。

初心者の方がアプリケーションを公開する際にHerokuAWSなどを選択すると、デプロイする目的とは別の設定で時間がかかったりするのですが、マネージドクラウドは設定項目が少なく直感的に操作できるので、すぐにアプリケーションをデプロイする事ができます。

理由としてマネージドクラウド使ってみるとわかるのですが、管理画面のUIがとにかくシンプルなんです!

f:id:kikuchi1201:20181220034210p:plain

f:id:kikuchi1201:20181220085619p:plain

ボタン1つでオートスケールを変更できたり、バージョンを指定できたり等難しい設定はなく、本当に「アプリケーションをすぐデプロイしたい!」と思ったら、マネージドクラウドは最適な手段の1つだと感じました。

先日行われたphpcon2018で、マネージドクラウドが1年間無料で使える優待付きのお水を配布したのですが、その水を受け取った方々から何人か「アプリケーションを作って遊んでみますね!」と言ってたくれたので、せっかく遊んでくれるならLaravelで作ったアプリケーションが簡単にマネージドクラウドへデプロイできる事を知ったら喜ぶかなと思い今回作成してみた次第です。

(訂正)マネージクラウド→マネージドクラウド

費用面で言うと、年末まで無料キャンペーンを行っているので、今ならいくらアプリケーションを作って遊んでもサーバ費用がかからないので、趣味のアプリケーションならシュッと作って1分ぐらいで公開できるのは大きなメリットだと感じます。

2つめは「 簡単にterminalからデプロイしたかった」というのが理由です。

以前からLaravelのプロジェクトをPHPコンテナ側にpush to deployでデプロイできないか模索していたのですが、現状がまだPHPコンテナでは対応しておらずそれをどうにか出来ないかと考えていました。

Laravelで作ったアプリケーションをマネクラにデプロイしたい。 - Fendo181

その手段として、Laravel Envoydeployerの2つの選択肢があったのですが、それぞれのメリットとデメリットを出して

  • laravel/envoy

    • メリット
    • デメリット
      • EnvoyはMacLinuxのオペレーションシステムのみサポートしている。
      • Blade記法わかってないと最初つまずく
      • deployerに比べてドキュメントが少ない...
  • deployer

    • メリット
      • ドキュメントが豊富
      • PHPで記述するので、Blade記法を知らない人でもPHPが読めればすぐにわかる。
      • フレームワークごとにテンプレートファイルを自動で生成してくれる。
    • デメリット
      • slack連携とかやろうとすると、新しくライブラリを追加する必要がある
      • Envoyに比べて設定項目が少し多い

ref:Laravel Envoyを使ってデプロイを行う · Issue #5 · Fendo181/laravel_repos

最終的にはdeployer.phpで記述したほうが、今後Laravelだけのプロジェクト以外にも使えたり、ドキュメントも豊富なので良いなと判断してdeployer.phpで進める事にしました。

詰まった所

以下ののIssueで作業ログを取りながらやってたのですが詰まった点としては、サブディレクトリ指定の方法がわからなかったのと、シンボリックリンク相対パスで指定してしまい、上手くアプリケーションが表示されなかった問題がありました。

github.com

サブディレクトリ指定の方法については以下のように設定する事で、ビルドコマンドが実行されるディレクトリを指定する事ができました。

// サブディレクトリでコマンドを実行するようにする
task('change_cwd', function () {
    $subdir = get('release_path') . DIRECTORY_SEPARATOR . 'myApp';
    set('release_path', $subdir);
    run('cd {{release_path}}');
});

シンボリックリンクに関しては相対パスで指定すると、ドキュメントルートにアクセスが来てもページにアクセスできない問題がありました。 なのでここでは、ちゃんと絶対パスで指定するようにしましょう。

☓ ln -s ./public/* /var/www/html/ // 相対パス
○ n -s /var/www/release/myApp/public/* /var/www/html/ //絶対パス

この他にもdeployerの仕様で .envをアップロードしても空のデータとしてアップロードされてしまう問題もありました。 詳細は以下のIssueをご覧下さい。

https://github.com/Fendo181/laravel_repos/issues/4#issuecomment-448145996

まとめ

マネージドクラウドはプロダクトとして素晴らしいWebサービスなのは間違いないのでこの記事をきっかけに是非触ってみてはいかがでしょうか?

冒頭で紹介したようにLaravelのプロジェクトを簡単にデプロイできるリポジトリを用意したのでペチパー&Laravelに興味を持っている方はこれを機にマネージドクラウドを是非使ってみて下さいっ!

もしチュートリアル記事通り進めていて、詰まったり、上手くいかない事がありましたら気軽に@Fendo181にDMでもリプライでもいいのでご連絡下さい。

mc.lolipop.jp

github.com

おわり

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応