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


関連記事

laravel logo

Laravelでメールを送る

1 はじめに1.1 準備2 実装2.1 Mailableクラスの作成2.2 テンプレートの作成2.3 Mailableクラスの修正2.4 コントローラの作成2.5 コンフィグの修正3 さいごに4 おす ...

rails

ShrineでS3に画像をアップロードする

1 はじめに1.1 前提条件1.2 関連記事2 AWS側の準備2.1 S3バケットを作成する2.2 CORSを設定する2.3 アクセス用のユーザを作成する3 Rails側の設定3.1 Initiali ...

rails

Capistrano3でRailsアプリケーションをデプロイする

1 はじめに1.1 前提条件2 Cpistranoについて3 導入3.1 Gemのインストール3.2 設定ファイルの準備4 デプロイ設定4.1 Capfileを修正する4.2 各環境で共通のデプロイ設 ...

Stripe Connectを使って複合プランの継続課金を実装

1 はじめに1.1 想定する継続課金1.2 想定するシチュエーション2 継続課金商品の作成2.1 プランの継続課金商品の作成2.2 ID数の継続課金商品の作成3 実装3.1 プランAとID数を30契約 ...

PHPerだけどKotlinを勉強したって良いよね その2〜コンストラクタ編〜

1 はじめに2 コンストラクタ2.1 プライマリコンストラクタ2.2 セカンダリコンストラクタ2.3 ニックネームのみを入力した人2.4 ニックネームと email を入力した人2.5 Faceboo ...

フォロー

blog-page_side_responsive

2020年11月
1234567
891011121314
15161718192021
22232425262728
2930  

アプリ情報

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