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


関連記事

Go言語

Go言語でGinkgoを利用してBDDしてみた

1 はじめに2 BDDとは3 Ginkgoについて3.1 Ginkgoの概要3.1.1 Describe3.1.2 Context3.1.3 It3.1.4 JustBeforeEach3.1.5 B ...

Go言語

Go 1.18で追加されるGenericsの紹介

1 はじめに2 GoのGenerics2.1 Genericsの主な仕様2.2 Genericsの制限3 Genericsを使ってみる3.1 基本形3.2 呼び出しの際の型引数を省略する3.3 型制約 ...

Go言語

GoでStructのAccessorを自動生成する

1 はじめに2 Accessorを自動生成する2.1 基本的な使い方2.2 receiver変数を変更する場合2.3 生成するファイル名を変える場合2.4 排他制御を行い場合3 どのように生成している ...

GraphQL

いまさら学ぶGraphQL〜概要編〜

1 はじめに2 GraphQLとは?2.1 なぜGraphQLは誕生した?2.1.1 過剰な取得2.1.2 過少な取得2.1.3 エンドポイントの管理3 GraphQLのメリットとデメリット3.1 G ...

Go言語

Go 1.23 でslicesとmapsに追加された関数

1 はじめに2 slicesパッケージに追加された関数2.1 All2.2 Backward2.3 Values2.4 AppendSeq2.5 Collect2.6 SortedFunc2.7 Ch ...

フォロー

blog-page_side_responsive

2020年12月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

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