BackEnd

DeployerでLaravelをデプロイ! 初期設定〜レシピのカスタマイズまで

投稿日:2020年11月24日 更新日:

はじめに

DeployerはPHP製のデプロイツールです。汎用性のあるツールですが、Laravelはかなり手早くデプロイできるので、実際にデプロイし、レシピをカスタマイズする方法を紹介します。

Deployerの導入

前提条件

サーバ側

  • Gitインストール済み
  • nginx, php-fpmインストール済み
  • mysqlセットアップ済み

ローカル側

  • Laravelのプロジェクトを作成済み
  • Gitリポジトリにプッシュ可能

インストール

composerでDeployerをインストールします。

インストールが完了したら、Deployerの初期設定を行います。

まず、プロジェクトの種類を選択します。今回はLaravelなので 1 とします。

次に、Gitリポジトリのリモートを入力します。デプロイしたいプロジェクトのリモートのURLを指定してください。

最後に、Deployer開発チームにデータを送信するかどうか聞かれます。これはどちらでも構いません。今回は yes にします。

これで完了です。

デプロイの設定

デプロイスクリプト

デプロイスクリプトはプロジェクトのルートにある deploy.php で行います。Laravelテンプレートを選択したため、 基本的なことをほぼテンプレートのままできてしまいます。これに少し手を加えたので、その辺りも含めて説明します。

いくつかポイントを紹介します。

  • require 'receipe/laravel.php
    Laravelテンプレートを選択した時に使用されるLaravelレシピです。Laravelの様々なartisanコマンドが使えるレシピです。詳細は後述します。
  • add('shared_dirs', ['vendor']);
    デプロイ時に共有するディレクトリを指定します。ここの指定したディレクトリは、実際のデプロイパス上ではシンボリックリンクに置き換えられ、実態は shared ディレクトリの中に存在することになります。そのため、 vendor ディレクトリが毎回のデプロイで削除されずに使いまわされる、 composer install が早くなります。
    また、Laravelレシピ側でデフォルトで storage が指定されています。これにより、デプロイ毎にstorage配下のファイルが消えずに、使用し続けることができます。
  • .envファイルのコピー
    Laravelレシピでは、.envファイルは shared/.env へのシンボリックリンクが作成されるため、このパスにenvファイルをコピーします。Deployer内で使用できる変数を使用してパスとステージを特定して、適切な.envファイルを配置するようにしています。
    例えばステージ名がproductionであれば、 .env.production をコピーするように実装しました。
  • run() では、コマンド内で {{変数名}} とすることで、変数を使用することができます。例えば、次のような変数があります。
    • deploy_path : host()->set() で指定したデプロイディレクトリを取得できます。
    • release_path : デプロイ中のソースが入っているディレクトリを取得することができます。今回の例では /var/www/laravel-deployer/releases/1 が取得できます。 1 はリリース毎にインクリメントされます
    • stage : 今デプロイしているステージ名を取得できます。ステージ名は host()->stage() で設定し、デプロイコマンドで指定できます。

サーバサイドの設定

今回は割愛しますが、設定に合わせて次の対応を行います。

  • /var/www/laravel-deployerディレクトリの作成
  • gitのインストール
  • ssh-keygen でキーを生成し、GithubにDeploy Keyとして登録する。
  • nginx.confで、rootを /var/www/laravel-deployer/current/public にしておく。

デプロイコマンド

それでは、実際にデプロイしてみます。

deploy は、Laravelレシピで定義されているタスク名で、ここにデプロイに最低限必要な一通りのタスクがまとまっています。 production は、ステージ名です。
実際に実行すると、次のようになります。

Deployerのディレクトリ構成

初めてデプロイが完了すると、指定したパスにディレクトリが生成されます。

  • current: releases/nへのシンボリックリンク。(nは最新のデプロイ番号)
  • releases: デプロイしたソースの実態
  • shared: deploy.phpで指定した共有ディレクトリの格納場所 (今回の例では、vendor, storageが入っています。)

そのため、Webサーバは current 配下を見れば最新のソースが格納されていることになります。

レシピ

requireされている receipe/laravel.php には他にも様々なレシピがあります。デプロイタスクに組み込むこともできますし、直接タスクを実行することもできます。
例えば、マイグレーションはデプロイタスクに組み込まず、任意のタイミングで実行したい場合は $ vendor/bin/dep artisan:migrate production で実行できます。

レシピをカスタマイズする方法

レシピをカスタマイズするには、deploy.phpの実装でいくつかやり方があるので、紹介します。

コンフィグの追加/上書き

レシピで set() で定義されているコンフィグは、追加したり上書きしたりできます。追加するには add(キー, 値) 、上書きするには set(キー、値) とします。

任意のタスクを、定義済みタスクの前後に追加

deployタスクのように、一連のタスクを実行するタスクの中に、任意のタスクを追加したい場合があります。先ほどの例では次のように使用しています。

deploy:copy:env は自前のタスクですが、これを deploy:shared の前に実行させています。
deploy:shared タスクは、実際のソースをシンボリックリンクに置き換えますが、その際に shared 内に対象ディレクトリもしくはファイルが無ければ、それぞれからの状態で生成します。
これが.envファイルで行われてしまうと、後からコピーする時に、空ファイルをいちいち削除しなければならなくなってしまうため、事前にenvファイルを shared/.env にコピーさせたかったからです。
参考までに実際の deploy:shared タスクで、shared_filesの処理は次のようになっています。

 

おまけ

Github Actionsでもデプロイできるようにしてみたので、簡単に紹介します。作成したワークフローはこちらです。

3つポイントがあります。

  1. SSHキーは、GithubのSecretsに登録しておきます。
  2. deploy.phpの git_tty はGithub Actionsでは動作しなかったので、falseにします。
  3. あらかじめknown_hostsに登録しておきます。

個人用のプロジェクト程度であれば、これで十分便利に使用できると思いました。

さいごに

いかがでしたか。Deployerはテンプレートやレシピが充実していて、主要なフレームワークやCMSで簡単にデプロイできることが分かりました。Laravelの公式パッケージで envoy と言うツールもありますが、Deployerの方がレシピが豊富なので便利だと思いました。

おすすめ書籍

PHPフレームワークLaravel入門 第2版 PHPフレームワーク Laravel実践開発 PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 よくわかるPHPの教科書 【PHP7対応版】

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

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

CAPTCHA


関連記事

Stripe Connectを使って継続課金を実装

1 はじめに2 商品・価格の登録2.1 マイグレーション2.2 製品・価格登録処理の実装2.3 Stripe管理画面での確認3 サブスクリプション登録3.1 事前準備3.2 課金処理の実装3.3 St ...

php logo

PHPでGmail APIを利用してメールデータを取得してみる その2

1 はじめに2 メールの内容取得3 MessagePartオブジェクト3.1 件名3.2 本文4 multipartの場合4.1 本文の取得5 全文6 さいごに7 おすすめ書籍 はじめに 前回は、Gm ...

Vue.js+TypeScriptな環境整備

1 はじめに2 vue-cliのインストール3 プロジェクトの作成3.1 機能の選択3.2 シンタックスの選択3.3 CSSプリプロセッサの設定3.4 Unit test3.5 E2E test3.6 ...

rails

form_withでフォームの送信前に処理を行う方法

1 はじめに2 form_with3 サンプル4 さいごに5 参考 はじめに フォームを送信する前に処理を行いたいケース(Google Analyticsのイベントのトラッキングなど)があると思います ...

rails

Active Strageを使用してユーザーのアバターを登録、表示する

1 はじめに1.1 環境2 セットアップ2.1 前準備2.2 マイグレーションファイル作成2.3 設定ファイル3 実際に使って見る3.1 モデル3.2 コントローラー3.3 ビュー4 個人的メモ4.1 ...

フォロー

blog-page_side_responsive

2020年11月
1234567
891011121314
15161718192021
22232425262728
2930  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。