BackEnd

Deployerで複数の環境やサーバにデプロイするには

投稿日:2020年12月21日 更新日:

はじめに

Deployerを使用する場合、よくあるケースとしてプロダクション・ステージング環境があったり、プロダクション環境が冗長化されているなど、1つのソースを複数のサーバにデプロイしなければならないことがあると思います。
今回は、そのような場合にDeployerでデプロイする方法を紹介します。Deployerの初期設定が済んでいない場合は、こちらの記事を参考にセットアップしてみてください。

hosts.ymlファイルの作成

前回の記事ではdeploy.phpに hosts() 関数を使用してデプロイ先を定義していましたが、今回は複数のデプロイ先を定義しやすくするため、ymlファイルに分けます。
hosts.ymlファイルを作成して、以下のように設定します。

.base: &base では、各デプロイ先で共通の設定を記述します。 prod-app01: がデプロイ先の名前で、共通の設定を継承しています。
設定内容は、一旦前回 host() 関数で設定した内容を、設定しておきます。

上記のymlファイルを読み込むため、hosts.ymlに次のように追記します。

deploy.phpに host() 関数を使用したデプロイ方法が実装されている場合は、削除しておきましょう。

プロダクション・ステージング環境を分ける

プロダクション・ステージング環境を分けるにはstageを使用します。

ymlファイルの記載

先ほどのymlファイルに追記する形で、ステージング環境を追加してみます。

stg-app01 を追加しました。 stage: staging と指定するため、先ほどのプロダクション環境と別々にデプロイできるようになりました。

デプロイコマンド

この場合のデプロイコマンドは次のようになります。

複数台のサーバに同時リリースする

プロダクション環境では、複数のサーバで冗長構成を取っている場合が多いと思います。1回のデプロイで、複数のサーバにデプロイする設定を紹介します。

ymlファイルの記載

例として、2台のプロダクション環境を想定して、2環境分の設定をしました。同じstageを設定することで、同時にデプロイされます。

デプロイコマンド

デプロイコマンドは先ほどと同じです。

このように、複数サーバがデプロイされます。

デプロイ先によってタスクを変更する

特定のサーバでのみ実行したいタスクがある場合は、サーバにrole(役割)を設定することで、それぞれの専用タスクを実行することができます。
SPAサイトで、フロントエンドとバックエンドが別々のサーバで、同時にデプロイいすることを例に、紹介します。

ymlファイルの記載

次のroleをそれぞれのサーバに割り振ります。

  • web フロントエンドのサーバ。デプロイ時にJS/CSSのコンパイルを行う。
  • app バックエンドのサーバ。デプロイ時にDBマイグレーションを行う。

これでyamlファイルの設定は完了です。

deploy.phpの実装

定義したroleでのみ実行するタスクを定義します。

タスクの定義に onRoles() を設定することで、hosts.ymlで定義したロールのサーバに対してのみ、タスクが実行されます。

さいごに

hosts.ymlの定義の組み合わせで、実際によくありそうなデプロイ設定をすることができるので、ぜひ試してみてください。

おすすめ書籍

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

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:

免責事項

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


comment

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

CAPTCHA


関連記事

rails

Shrineをモデルに関連付けないで使用してハマったこと

1 はじめに2 アップロード時にリサイズする3 アップロード時のバリデーション4 アップロード時に古いファイルを削除する5 さいごに はじめに ShrineはRailsでのアップロードを簡単に行えるよ ...

Go言語

[Go初心者]Interfaceについて学習

1 はじめに2 interfaceとは3 interfaceのメリット3.1 インターフェースを使うとコードの共通化ができる3.2 インターフェースを使うと実装を隠蔽することができる3.3 インターフ ...

laravel logo

Laravelのブラウザテスト「Dusk」をシンプルなCRUDで始めてみよう

1 はじめに2 Laravel Duskのセットアップ3 新規登録のテスト3.1 テスト対象となるコード3.2 Duskのテストコード3.3 テストの実行4 更新のテスト4.1 テスト対象となるコード ...

rails

Rails 6の変更点と新機能

1 はじめに2 概要3 Rubyのサポートバージョン4 Webpacker4.1 Webpackerの設定4.2 Webpackerでのビルド4.3 ビルドしたJavaScriptファイルを読み込む4 ...

Rust入門してみた (基本構文編)

1 はじめに2 Rustとは?3 Rustの特徴的な基本構文3.1 変数と定数3.2 所有権3.3 所有権の借用3.4 関数3.5 エラーハンドリング3.5.1 回復不能なエラー(panic!)3.5 ...

フォロー

blog-page_side_responsive

2020年12月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

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