遅くなったのですが、この記事はGMOペパボ Advent Calendar 2018 - Qiitaの18日目の記事です。
タイトル通りなのですが、deployerを使ってマネージドクラウドにLaravelのアプリケーションをデプロイする方法を紹介しようと思います。
先に共有としては記事で説明するよりも、実際に手を動かして触って貰ったほうが早いと思ったので簡単にマネージドクラウドにLaravelのアプリケーションがデプロイを出来るスターター リポジトリを用意しました。
チュートリアル記事も用意しています。
lolipop-mc-starter-laravel/tutorial_jp.md at master · Fendo181/lolipop-mc-starter-laravel · GitHub
始めてマネージドクラウドを触る方はこちらのチュートリアル記事を見ながらLaravelのアプリケーションをデプロイして頂くと良いと思います。
デプロイする方法に関してもtutorilal_mdに全て記述したので、これ以上語る事もないのですが、動機とか、やりながら詰まった点を少し紹介します。
マネージドクラウドにデプロイしたかった動機
2つ理由があります。
1つめは「マネージドクラウドを使ってほしい」と言う1番の理由があります。
初心者の方がアプリケーションを公開する際にHerokuやAWSなどを選択すると、デプロイする目的とは別の設定で時間がかかったりするのですが、マネージドクラウドは設定項目が少なく直感的に操作できるので、すぐにアプリケーションをデプロイする事ができます。
理由としてマネージドクラウド使ってみるとわかるのですが、管理画面のUIがとにかくシンプルなんです!
ボタン1つでオートスケールを変更できたり、バージョンを指定できたり等難しい設定はなく、本当に「アプリケーションをすぐデプロイしたい!」と思ったら、マネージドクラウドは最適な手段の1つだと感じました。
先日行われたphpcon2018で、マネージドクラウドが1年間無料で使える優待付きのお水を配布したのですが、その水を受け取った方々から何人か「アプリケーションを作って遊んでみますね!」と言ってたくれたので、せっかく遊んでくれるならLaravelで作ったアプリケーションが簡単にマネージドクラウドへデプロイできる事を知ったら喜ぶかなと思い今回作成してみた次第です。
(訂正)マネージクラウド→マネージドクラウドGMOペパボ ブースでマネージクラウドが1年無料で利用できるクーポン付きの「無料優待水」配ってます!!
— えんどぅー (@Fendo181) 2018年12月15日
是非寄って下さい〜! #phpcon2018 #マネクラ pic.twitter.com/I6xkwG2YsA
費用面で言うと、年末まで無料キャンペーンを行っているので、今ならいくらアプリケーションを作って遊んでもサーバ費用がかからないので、趣味のアプリケーションならシュッと作って1分ぐらいで公開できるのは大きなメリットだと感じます。
2つめは「 簡単にterminalからデプロイしたかった」というのが理由です。
以前からLaravelのプロジェクトをPHPコンテナ側にpush to deploy
でデプロイできないか模索していたのですが、現状がまだPHPコンテナでは対応しておらずそれをどうにか出来ないかと考えていました。
Laravelで作ったアプリケーションをマネクラにデプロイしたい。 - Fendo181
その手段として、Laravel Envoyとdeployerの2つの選択肢があったのですが、それぞれのメリットとデメリットを出して
-
- メリット
Blade
記法で設定を記述する。- 最小の記法で書けるので、Slackとかとの連携も楽
- 別にLaravelとかじゃなく、どんなアプリケーションでも使える
- デメリット
- メリット
-
- メリット
- デメリット
- slack連携とかやろうとすると、新しくライブラリを追加する必要がある
Envoy
に比べて設定項目が少し多い
ref:Laravel Envoyを使ってデプロイを行う · Issue #5 · Fendo181/laravel_repos
最終的にはdeployer.php
で記述したほうが、今後Laravelだけのプロジェクト以外にも使えたり、ドキュメントも豊富なので良いなと判断してdeployer.php
で進める事にしました。
詰まった所
以下ののIssueで作業ログを取りながらやってたのですが詰まった点としては、サブディレクトリ指定の方法がわからなかったのと、シンボリックリンクを相対パスで指定してしまい、上手くアプリケーションが表示されなかった問題がありました。
サブディレクトリ指定の方法については以下のように設定する事で、ビルドコマンドが実行されるディレクトリを指定する事ができました。
// サブディレクトリでコマンドを実行するようにする 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でもリプライでもいいのでご連絡下さい。
おわり
PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応
- 作者: 竹澤有貴,栗生和明,新原雅司,大村創太郎,丸山弘詩
- 出版社/メーカー: ソシム
- 発売日: 2018/09/26
- メディア: 単行本
- この商品を含むブログを見る