From 09a530ef8229aa1c2abba6fe4028f6242a6cbcf6 Mon Sep 17 00:00:00 2001 From: tobybellwood Date: Mon, 16 Dec 2024 02:04:57 +0000 Subject: [PATCH] deploy: 1a3ea98e8ccb3ab9e062040e349df34de99baefd --- concepts-advanced/backups/index.html | 424 ++++++++++-- .../environment-variables/index.html | 120 ---- concepts-basics/lagoon-yml/index.html | 8 +- .../environment-variables/index.html | 120 ---- ja/concepts-basics/lagoon-yml/index.html | 8 +- ja/resources/faq/index.html | 83 +-- resources/faq/index.html | 35 - search/search_index.json | 2 +- sitemap.xml | 618 +++++++++--------- sitemap.xml.gz | Bin 5446 -> 5446 bytes 10 files changed, 731 insertions(+), 687 deletions(-) diff --git a/concepts-advanced/backups/index.html b/concepts-advanced/backups/index.html index 8a4c4aac49..5d6c24e46f 100644 --- a/concepts-advanced/backups/index.html +++ b/concepts-advanced/backups/index.html @@ -833,11 +833,26 @@ @@ -4965,98 +4937,6 @@

PHP_ERROR_REPORTINGlogging level you would like PHP to use. If not supplied, it will be set dynamically based on whether this is a production or development environment.

On production environments, this value defaults to E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE.

On development environments, this value defaults to E_ALL & ~E_DEPRECATED & ~E_STRICT.

-

Custom Backup Settings#

-

Lagoon supports custom backup locations and credentials for any project when all four of the following variables are set as BUILD type variables. The environment variables need to be set at the project level (not per environment), and requires a Lagoon deployment after setting them (for every environment).

-

Please note that any use of these variables means that all environment and database backups created and managed by Lagoon will be stored using these credentials, meaning that any interruption of these credentials' may lead to failed or inaccessible backups.

- - - - - - - - - - - - - - - - - - - - - - - - - -
Environment variable namePurpose
LAGOON_BAAS_CUSTOM_BACKUP_ENDPOINTSpecify the S3 compatible endpoint where any Lagoon initiated backups should be stored. An example for S3 Sydney would be: https://s3.ap-southeast-2.amazonaws.com.
LAGOON_BAAS_CUSTOM_BACKUP_BUCKETSpecify the bucket name where any Lagoon initiated backups should be stored.An example custom setting would be: example-restore-bucket.
LAGOON_BAAS_CUSTOM_BACKUP_ACCESS_KEYSpecify the access key Lagoon should use to access the custom backup bucket. An example custom setting would be: AKIAIOSFODNN7EXAMPLE.
LAGOON_BAAS_CUSTOM_BACKUP_SECRET_KEYSpecify the secret key Lagoon should use to access the custom backup bucket. An example custom setting would be: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.
-

No public access is needed on the S3 bucket and can be made entirely private.

-

Lagoon will automatically prune the files in these S3 buckets, so no object retention policy is needed at the bucket level.

-

Custom Restore Location#

-

Lagoon supports custom restore locations and credentials for any project when all four of the following variables are set as BUILD type environment variables. The environment variables need to be set at the project level (not per environment), and requires a Lagoon deployment after setting them (for every environment).

-

Please note that any use of these variables means that all environment and database snapshots restored by Lagoon will be stored using these credentials. This means that any interruption of these credentials' access may lead to failed or inaccessible restored files.

- - - - - - - - - - - - - - - - - - - - - - - - - -
Environment variable namePurpose
LAGOON_BAAS_CUSTOM_RESTORE_ENDPOINTSpecify the S3 compatible endpoint where any Lagoon initiated restores should be stored. An example for S3 Sydney would be: https://s3.ap-southeast-2.amazonaws.com.
LAGOON_BAAS_CUSTOM_RESTORE_BUCKETSpecify the bucket name where any Lagoon initiated restores should be stored.An example custom setting would be: example-restore-bucket.
LAGOON_BAAS_CUSTOM_RESTORE_ACCESS_KEYSpecify the access key Lagoon should use to access the custom restore bucket. An example custom setting would be: AKIAIOSFODNN7EXAMPLE.
LAGOON_BAAS_CUSTOM_RESTORE_SECRET_KEYSpecify the secret key Lagoon should use to access the custom restore bucket. An example custom setting would be: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.
-

The S3 bucket must have public access enabled, as Lagoon will create presigned URLs for the objects inside the bucket as needed.

-

An example AWS IAM policy that you can create to allow access to just the S3 bucket example-restore-bucket is:

-
aws_iam_restore_policy.json
{
-  "Version": "2012-10-17",
-  "Statement": [
-    {
-      "Effect": "Allow",
-      "Action": [
-        "s3:GetBucketLocation",
-        "s3:ListBucket"
-      ],
-      "Resource": [
-        "arn:aws:s3:::example-restore-bucket"
-      ]
-    },
-    {
-      "Effect": "Allow",
-      "Action": [
-        "s3:PutObject",
-        "s3:GetObject",
-        "s3:GetObjectVersion",
-        "s3:GetBucketLocation",
-        "s3:PutObjectAcl"
-      ],
-      "Resource": [
-         "arn:aws:s3:::example-restore-bucket/*"
-      ]
-    }
-  ]
-}
-
-

For increased security and reduced storage costs you can opt into removing restored backups after a set lifetime (e.g. 7 days). Lagoon caters for this scenario gracefully and will re-create any restored snapshots as needed.

diff --git a/concepts-basics/lagoon-yml/index.html b/concepts-basics/lagoon-yml/index.html index d2be32165a..0c22227276 100644 --- a/concepts-basics/lagoon-yml/index.html +++ b/concepts-basics/lagoon-yml/index.html @@ -5838,7 +5838,7 @@

Example post-rollout tasksBackup Retention#

backup-retention.production.monthly#

Specify the number of monthly backups Lagoon should retain for your project's production environment(s).

-

The global default is 1 if this value is not specified.

+

The global default is 0 if this value is not specified.

backup-retention.production.weekly#

Specify the number of weekly backups Lagoon should retain for your project's production environment(s).

The global default is 6 if this value is not specified.

@@ -5851,7 +5851,11 @@

backup-retention.production.hour

Backup Schedule#

backup-schedule.production#

Specify the backup schedule for this project. Accepts cron-compatible syntax with the notable exception that the Minute block must be the letter M. Any other value in the Minute block will cause the Lagoon build to fail. This allows Lagoon to randomly choose a specific minute for these backups to happen, while users can specify the remainder of the schedule down to the hour.

-

The global default is M H(22-2) * * * if this value is not specified. Take note that these backups will use the cluster's local timezone.

+

The global default is M H(22-2) * * * if this value is not specified.

+
+

Timezones:

+

Backup schedules use the cluster's local timezone.

+

Environments#

Environment names match your deployed branches or pull requests. This allows for each environment to have a different config. In our example it will apply to the main and staging environment.

environments.[name].routes#

diff --git a/ja/concepts-advanced/environment-variables/index.html b/ja/concepts-advanced/environment-variables/index.html index 302b789c83..8b71dee3b3 100644 --- a/ja/concepts-advanced/environment-variables/index.html +++ b/ja/concepts-advanced/environment-variables/index.html @@ -866,20 +866,6 @@ PHP_ERROR_REPORTING - - -
  • - - カスタムバックアップ設定 - - -
  • - -
  • - - カスタム復元場所 - -
  • @@ -4799,20 +4785,6 @@ PHP_ERROR_REPORTING - - -
  • - - カスタムバックアップ設定 - - -
  • - -
  • - - カスタム復元場所 - -
  • @@ -4965,98 +4937,6 @@

    PHP_ERROR_REPORTINGログレベルを定義します。指定されていない場合は、production環境か開発環境かによって動的に設定されます。

    production環境では、この値はデフォルトでE_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICEになります。

    開発環境では、この値はデフォルトでE_ALL & ~E_DEPRECATED & ~E_STRICTになります。

    -

    カスタムバックアップ設定#

    -

    Lagoonは、次の4つの変数すべてがBUILDタイプの変数として設定されている場合、任意のプロジェクトのカスタムバックアップ場所と認証情報をサポートします。環境変数はプロジェクトレベルで(環境ごとではなく)設定する必要があり、それらを設定した後にLagoonのデプロイメントが必要です(すべての環境について)。

    -

    これらの変数のいずれかを使用すると、Lagoonが作成および管理するすべての環境とデータベースのバックアップがこれらの認証情報を使用して格納されることを意味します。つまり、これらの認証情報の中断がバックアップの失敗またはアクセス不能を引き起こす可能性があります。

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    環境変数名目的
    LAGOON_BAAS_CUSTOM_BACKUP_ENDPOINTLagoonによって開始されたバックアップを保存するS3互換エンドポイントを指定しますS3 Sydneyの例は次のようになります。 https://s3.ap-southeast-2.amazonaws.com
    LAGOON_BAAS_CUSTOM_BACKUP_BUCKETLagoonによって開始されたバックアップを保存するバケット名を指定します。カスタム設定の例は次のようになります。 example-restore-bucket
    LAGOON_BAAS_CUSTOM_BACKUP_ACCESS_KEYカスタム バックアップバケットにアクセスするためにLagoonが使用するアクセスキーを指定します。カスタム設定の例は次のようになります。 AKIAIOSFODNN7EXAMPLE
    LAGOON_BAAS_CUSTOM_BACKUP_SECRET_KEYカスタムバックアップバケットにアクセスするためにLagoonが使用する秘密キーを指定します。カスタム設定の例は次のようになります。 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    -

    S3バケットではパブリックアクセスは不要で、完全にプライベートにすることができます。

    -

    LagoonはこれらのS3バケット内のファイルを自動的に削除するため、バケットレベルでのオブジェクト保持ポリシーは必要ありません。

    -

    カスタム復元場所#

    -

    BUILDタイプの環境変数として以下の全4つの変数が設定されている場合、任意のプロジェクトに対してカスタムリストアロケーションとクレデンシャルを設定できます。環境変数はプロジェクトレベルで設定する必要があり(環境ごとではなく)、それらを設定した後、Lagoonのデプロイが必要です(各環境について)。

    -

    これらの変数を使用すると、Lagoonによって復元されたすべての環境とデータベースのスナップショットがこれらのクレデンシャルを使用して保存されることに注意してください。これらのクレデンシャルへのアクセスが中断されると、復元されたファイルの失敗またはアクセス不能につながる可能性があることを意味します。

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    環境変数名目的
    LAGOON_BAAS_CUSTOM_RESTORE_ENDPOINTLagoonによって開始された復元を保存する S3 互換エンドポイントを指定します。S3 Sydneyの例は次のようになります。 https://s3.ap-southeast-2.amazonaws.com
    LAGOON_BAAS_CUSTOM_RESTORE_BUCKETLagoonによって開始された復元を保存するバケット名を指定します。カスタム設定の例は次のようになります。 example-restore-bucket
    LAGOON_BAAS_CUSTOM_RESTORE_ACCESS_KEYカスタム復元バケットにアクセスするためにLagoonが使用するアクセスキーを指定します。カスタム設定の例は次のようになります。 AKIAIOSFODNN7EXAMPLE
    LAGOON_BAAS_CUSTOM_RESTORE_SECRET_KEYカスタム復元バケットにアクセスするためにLagoonが使用するシークレットキーを指定します。カスタム設定の例は次のようになります。 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    -

    Lagoonは必要に応じてバケット内のオブジェクトの署名済みURL を作成するため、S3バケットではパブリックアクセスが有効になっている必要があります。

    -

    S3バケット example-restore-bucket のみへのアクセスを許可するように作成できる AWS IAM ポリシーの例は次のとおりです。

    -
    aws_iam_restore_policy.json
    {
    -  "Version": "2012-10-17",
    -  "Statement": [
    -    {
    -      "Effect": "Allow",
    -      "Action": [
    -        "s3:GetBucketLocation",
    -        "s3:ListBucket"
    -      ],
    -      "Resource": [
    -        "arn:aws:s3:::example-restore-bucket"
    -      ]
    -    },
    -    {
    -      "Effect": "Allow",
    -      "Action": [
    -        "s3:PutObject",
    -        "s3:GetObject",
    -        "s3:GetObjectVersion",
    -        "s3:GetBucketLocation",
    -        "s3:PutObjectAcl"
    -      ],
    -      "Resource": [
    -         "arn:aws:s3:::example-restore-bucket/*"
    -      ]
    -    }
    -  ]
    -}
    -
    -

    セキュリティの強化とストレージコスト削減のために、設定されたライフタイム後に復元されたバックアップを削除する(例えば、7日間)を選択することができます。Lagoonはこのシナリオをうまく処理し、必要に応じて復元されたスナップショットを再作成します。

    diff --git a/ja/concepts-basics/lagoon-yml/index.html b/ja/concepts-basics/lagoon-yml/index.html index 9881a23f96..80f4c0da0b 100644 --- a/ja/concepts-basics/lagoon-yml/index.html +++ b/ja/concepts-basics/lagoon-yml/index.html @@ -5578,7 +5578,7 @@

    post-rolloutタスクの例バックアップの保持期間 ( #backup-retention }#

    backup-retention.production.monthly#

    プロジェクトのproduction環境の月次バックアップの保持数を指定します。

    -

    この値が指定されていない場合、デフォルトは 1 です。

    +

    この値が指定されていない場合、デフォルトは 0 です。

    backup-retention.production.weekly#

    プロジェクトのproduction環境の週次バックアップの保持数を指定します。

    この値が指定されていない場合、デフォルトは 6 です。

    @@ -5591,7 +5591,11 @@

    backup-retention.production.hour

    バックアップスケジュール#

    backup-schedule.production#

    プロジェクトのバックアップスケジュールを指定します。ただし、Minute ブロックは M でなければならず、他の値は Lagoon ビルドに失敗します。これにより、Lagoonはこれらのバックアップを何分に行うかランダムに選択することができ、ユーザーはスケジュールの残りの部分を時間単位で指定できます。

    -

    この値が指定されていない場合、グローバルデフォルトは M H(22-2) * * * です。注意して頂きたいのは、 これらのバックアップは、クラスタのローカルタイムゾーンを使用します。

    +

    この値が指定されていない場合、グローバルデフォルトは M H(22-2) * * * です。

    +
    +

    タイムゾーン:

    +

    バックアップ スケジュールでは、クラスターのローカル タイムゾーンが使用されます。

    +

    環境#

    環境名は、デプロイされたブランチ名やプルリクエスト名と一致します。これにより、各環境で異なる設定を持つことが可能になります。私たちの例では、mainstaging環境に適用されます。

    environments.[name].routes#

    diff --git a/ja/resources/faq/index.html b/ja/resources/faq/index.html index 44dc6adb7a..c87da8777d 100644 --- a/ja/resources/faq/index.html +++ b/ja/resources/faq/index.html @@ -3925,20 +3925,6 @@ amazee.ioのLagoonを利用したホスティングサービスに興味があります - - -
  • - - バックアップをどのように復元することができますか? - - -
  • - -
  • - - データベースダンプをどのようにダウンロードすることができますか? - -
  • @@ -3970,28 +3956,28 @@
  • - + ビルドのステータスを確認するにはどうすればいいですか?
  • - + どのようにして追加しますか クロンジョブとは?
  • - + 新しいルートを追加するには?
  • - + ルートを削除するには? @@ -4033,7 +4019,7 @@
  • - + リダイレクトを追加するにはどうすればいいですか? @@ -4047,14 +4033,14 @@
  • - + 環境は完全に削除して、プロジェクトに大きなコード変更を展開できますか?
  • - + 新しい環境変数を表示させるにはどうすればいいですか? @@ -4096,7 +4082,7 @@
  • - + ここでは答えられない質問があります @@ -4845,20 +4831,6 @@ amazee.ioのLagoonを利用したホスティングサービスに興味があります -
  • - -
  • - - バックアップをどのように復元することができますか? - - -
  • - -
  • - - データベースダンプをどのようにダウンロードすることができますか? - -
  • @@ -4890,28 +4862,28 @@
  • - + ビルドのステータスを確認するにはどうすればいいですか?
  • - + どのようにして追加しますか クロンジョブとは?
  • - + 新しいルートを追加するには?
  • - + ルートを削除するには? @@ -4953,7 +4925,7 @@
  • - + リダイレクトを追加するにはどうすればいいですか? @@ -4967,14 +4939,14 @@
  • - + 環境は完全に削除して、プロジェクトに大きなコード変更を展開できますか?
  • - + 新しい環境変数を表示させるにはどうすればいいですか? @@ -5016,7 +4988,7 @@
  • - + ここでは答えられない質問があります @@ -5052,13 +5024,6 @@

    バグを見つけました!🐞バグやセキュリティ問題を見つけた場合は、その内容をsupport@amazee.ioに送ってください。GitHubの問題として報告しないでください。

    amazee.ioのLagoonを利用したホスティングサービスに興味があります#

    それは素晴らしいニュースです!sales@amazee.ioまでメールでお問い合わせいただけます。

    -

    バックアップをどのように復元することができますか?#

    -

    ファイルやデータベースのバックアップを提供しており、通常は最大で24時間ごとに取得しています。これらのバックアップはオフサイトで保存されています。

    -

    日次バックアップは最大7つ、週次バックアップは最大4つ保持しています。

    -

    バックアップの復元や回復が必要な場合は、お気軽にチケットを提出するか、チャットでメッセージを送ってください。喜んでお手伝いします!

    -

    データベースダンプをどのようにダウンロードすることができますか?#

    - -

    私は無効なSSL証明書エラーが出ています#

    まず最初に試すべきことは、私たちのドキュメンテーションに記載されているSSLに関する情報を参照してみてください。

    その手順に従ってもまだエラーが出る場合は、チケットを送信するか、チャットでメッセージを送ってください。私たちはあなたの問題を解決するのをお手伝いします。

    @@ -5092,16 +5057,16 @@

    Kibanaログにアクセスしようとす

    任意の環境にSSHで接続できない#

    任意の環境にSSHで接続できません。次のメッセージが表示されます: Permission denied (publickey)drush saを実行すると、エイリアスが返されません。

    これは通常、Pygmyの問題を示しています。Pygmyのトラブルシューティングドキュメントはこちらで見つけることができます:https://pygmystack.github.io/pygmy/troubleshooting/

    -

    ビルドのステータスを確認するにはどうすればいいですか?#

    +

    ビルドのステータスを確認するにはどうすればいいですか?#

    -

    どのようにして追加しますか クロンジョブとは?#

    +

    どのようにして追加しますか クロンジョブとは?#

    -

    新しいルートを追加するには?#

    +

    新しいルートを追加するには?#

    -

    ルートを削除するには?#

    +

    ルートを削除するには?#

    Lagoonは、.lagoon.ymlからルートが削除されたことをデプロイ時に検出します。デプロイログを確認して、ルートが自動的に削除されたか、それらを削除する方法について確認してください。

    pygmy statusを実行すると、キーがロードされません#

    SSHキーをpygmyにロードする必要があります。方法はこちら:https://pygmystack.github.io/pygmy/ssh_agent

    @@ -5117,15 +5082,15 @@

    Pygmyを起動すると「アドレスはすでに使用中」エ

    これにより、ポート80で実行中のすべてをリストアップします。ポート80で動作しているプロセスを終了させます。ポート80が解放されると、Pygmyはこれ以上のエラーなく起動するはずです。

    プロジェクトのブランチ/PR環境/本番環境をどのように変更できますか?#

    その変更はLagoon APIを使用して行うことができます!この変更に関するドキュメンテーションはGraphQLのドキュメンテーションで見つけることができます.

    -

    リダイレクトを追加するにはどうすればいいですか?#

    +

    リダイレクトを追加するにはどうすればいいですか?#

    プロジェクト/グループに新しいユーザー(およびSSHキー)を追加するにはどうすればいいですか?#

    これはLagoon APIを介して行うことができます。この変更のステップドキュメンテーションは私たちのGraphQLドキュメンテーションで見つけることができます。

    -

    環境は完全に削除して、プロジェクトに大きなコード変更を展開できますか?#

    +

    環境は完全に削除して、プロジェクトに大きなコード変更を展開できますか?#

    環境は各デプロイで完全にゼロから構築され、古いデータベースとファイルを削除してコードをプッシュすると、新鮮なクリーンなビルドが得られます。再同期を忘れないでください!

    GraphQLを介して環境を削除することも可能です。指示は私たちのGraphQLドキュメンテーションで見つけることができます。

    -

    新しい環境変数を表示させるにはどうすればいいですか?#

    +

    新しい環境変数を表示させるにはどうすればいいですか?#

    GraphQLを介してプロダクション環境にランタイム環境変数を追加したら、デプロイを行うだけで新しい環境変数を表示させることができます。 あなたの環境に変更が反映されるようになります。

    Lagoon環境にSFTPでファイルを送信/取得するにはどうすればいいですか?#

    クラウドホスティングのお客様は、以下の情報を使用してLagoon環境にSFTPで接続することができます:

    @@ -5153,7 +5118,7 @@

    Lagoonのビルドを停止する方法はありますか?Elasticsearch\Solrサービスをウェブサイトにインストールしました。ブラウザからUI(ポート9200/8983)へのアクセスをどのように取得できますか?#

    デプロイされた環境でウェブサービス(NGINX/Varnish/Node.js)のみを公開することをお勧めします。ローカルでは、これらのサービスのポートマッピングをdocker-compose psで確認して取得できます。 , そして [http://localhost](http://localhost/):` をブラウザで読み込みます。

    -

    ここでは答えられない質問があります#

    +

    ここでは答えられない質問があります#

    Discord または uselagoon@amazee.io のメールアドレスでチームに連絡することができます。

    diff --git a/resources/faq/index.html b/resources/faq/index.html index fc6173b7cd..58a3efccd2 100644 --- a/resources/faq/index.html +++ b/resources/faq/index.html @@ -3925,20 +3925,6 @@ I'm interested in amazee.io's hosting services with Lagoon -
  • - -
  • - - How can I restore a backup? - - -
  • - -
  • - - How can I download a database dump? - -
  • @@ -4845,20 +4831,6 @@ I'm interested in amazee.io's hosting services with Lagoon -
  • - -
  • - - How can I restore a backup? - - -
  • - -
  • - - How can I download a database dump? - -
  • @@ -5052,13 +5024,6 @@

    I found a security issue! 🐞security@amazee.io. Please DO NOT file a GitHub issue for it.

    I'm interested in amazee.io's hosting services with Lagoon#

    That's great news! You can contact them via email at sales@amazee.io.

    -

    How can I restore a backup?#

    -

    We have backups available for files and databases, typically taken every 24 hours at most. These backups are stored offsite.

    -

    We keep up to 7 daily backups and 4 weekly backups.

    -

    If you ever need to recover or restore a backup, feel free to submit a ticket or send us a message via chat and we will be more than happy to help!

    -

    How can I download a database dump?#

    - -

    I'm getting an invalid SSL certificate error#

    The first thing to try is what is listed in our documentation about SSL.

    If you follow those steps, and you are still seeing an error, please submit a ticket or send us a message on chat and we can help resolve this for you.

    diff --git a/search/search_index.json b/search/search_index.json index 06d26de4d4..f9a4d1352b 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en","ja"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Lagoon","text":""},{"location":"#lagoon-the-open-source-application-delivery-platform-for-kubernetes","title":"Lagoon - the Open Source Application Delivery Platform for Kubernetes","text":"

    Lagoon gives developers what they dream about. It's a system that allows developers to run the exact same code in their local and production environment. The same Docker images, the same service configurations, and the same code.

    "},{"location":"#where-do-i-start","title":"Where do I start?","text":"

    If you want to use Lagoon to host your website or application, visit Using Lagoon - The Basics

    To get more in depth with Lagoon functionality, visit Using Lagoon - Advanced

    To understand how Lagoon works, check out Lagoon Concepts - The Basics

    and for a deeper understanding, Lagoon Concepts - Advanced

    If you want to develop Lagoon (add features, fix bugs), Developing Lagoon

    "},{"location":"#tldr-how-lagoon-works","title":"TL;DR: How Lagoon Works","text":"
    1. Developers define and configure needed services within YAML files.
    2. When they are happy, they push the code to Git.
    3. Lagoon parses the YAML files and adds in any additional needed configuration.
    4. Lagoon builds the needed Docker images.
    5. Lagoon pushes them to a Docker registry.
    6. Lagoon creates the needed resources in Kubernetes.
    7. Lagoon monitors the deployment of the containers.
    8. When all is done, Lagoon informs the developers in different ways (Slack, email, website, etc).
    "},{"location":"#help","title":"Help?","text":"

    Questions? Ideas? Meet the maintainers and contributors.

    Chat with us on the Lagoon Discord: https://discord.gg/te5hHe95JE

    "},{"location":"#a-couple-of-things-about-lagoon","title":"A couple of things about Lagoon","text":"
    1. Lagoon is based on microservices. The deployment and build workflow is very complex. We have multiple version control sources, multiple clusters, and multiple notification systems. Each deployment is unique and can take from seconds to hours. It's built with flexibility and robustness in mind. Microservices communicate through a messaging system, which allows us to scale individual services up and down. It allows us to survive down times of individual services. It also allows us to try out new parts of Lagoon in production without affecting others.
    2. Lagoon uses many programming languages. Each programming language has specific strengths. We try to decide which language makes the most sense for each service. Currently, a lot of Lagoon is built in Node.js. This is partly because we started with Node.js, but also because Node.js allows asynchronous processing of webhooks, tasks and more. We are likely going to change the programming language of some services. This is what is great about microservices! We can replace a single service with another language without worrying about other parts of the platform.
    3. Lagoon is not Drupal-specific. Everything has been built so that it can run any Docker image. There are existing Docker images for Drupal, and support for Drupal-specific tools like Drush. But that's it!
    4. Lagoon is DevOps. It allows developers to define the services they need and customize them as they need. You might think this is not the right way to do it, and gives too much power to developers. We believe that as system engineers, we need to empower developers. If we allow developers to define services locally, and test them locally, they will find bugs and mistakes themselves.
    5. Lagoon runs on Docker and Kubernetes. (That one should be obvious, right?)
    6. Lagoon can be completely locally developed and tested.
    7. Lagoon is completely integration tested. This means we can test the whole process. From receiving Git webhooks to deploying into a Docker container, the same Git hash is deployed in the cluster.
    8. Most important: It's a work in progress. It's not done yet. At amazee.io, we believe that as a hosting community, we need to work together and share code where we can.

    We want you to understand the Lagoon infrastructure and how the services work together. Here is a schema (it's a little out of date - it doesn't include some of the more recent services we've added, or cover Kubernetes, so we're working on an update!): Lucid Chart \u200c

    "},{"location":"#history-of-lagoon","title":"History of Lagoon","text":"

    As described, Lagoon is a dream come true. At amazee.io, we've been hosting Drupal for more than 8 years. This is the fourth major iteration of our hosting platform. The third iteration was built around Puppet and Ansible. Every single piece of the platform was done with configuration management. This allowed very fast setup of new servers, but at the same time was also lacking customizability for developers. We implemented some customizability, with some already with Docker in production. However, we were never completely happy with it. We realized that our existing platform wasn't enough. With the rise of decoupled Drupal, the need to run Node.js on the server side, the requests for Elasticsearch, and different Solr versions, we had to do more. \u200c

    At the same time, we've been using Docker for many years for local development. It was always an idea to use Docker for everything in production. The only problem was the connection between local development and production environments. There are other systems that allow you to run Drupal in Docker in production. But, nothing allowed you to test the exact same images and services locally and in production.

    Lagoon was born in 2017. It has since been developed into a system that runs Docker in production. Lagoon has replaced our third generation hosting platform with a cutting edge all Docker-based system.

    "},{"location":"#open-source","title":"Open Source","text":"

    At amazee.io, we believe in open source. It was always troubling for us that open source code like Drupal was hosted on proprietary hosting platforms. The strength and success of a hosting company is not just their deployment systems or service configurations. It's the the people and knowledge that run the platform. The processes, skills, ability to react to unforeseen situations, and last but not least, the support they provide their clients.

    "},{"location":"#license","title":"License","text":"

    Lagoon is available under an Apache 2.0 License.

    "},{"location":"code-of-conduct/","title":"Code of Conduct","text":""},{"location":"code-of-conduct/#our-pledge","title":"Our Pledge","text":"

    In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.

    "},{"location":"code-of-conduct/#our-standards","title":"Our Standards","text":"

    Examples of behavior that contributes to creating a positive environment include:

    • Using welcoming and inclusive language.
    • Being respectful of differing viewpoints and experiences.
    • Gracefully accepting constructive criticism.
    • Focusing on what is best for the community.
    • Showing empathy towards other community members.

    Examples of unacceptable behavior by participants include:

    • The use of sexualized language or imagery and unwelcome sexual attention or advances.
    • Trolling, insulting/derogatory comments, and personal or political attacks.
    • Public or private harassment.
    • Publishing others' private information, such as a physical or electronic address, without explicit permission.
    • Other conduct which could reasonably be considered inappropriate in a professional setting.
    "},{"location":"code-of-conduct/#our-responsibilities","title":"Our Responsibilities","text":"

    Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

    Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

    "},{"location":"code-of-conduct/#scope","title":"Scope","text":"

    This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

    "},{"location":"code-of-conduct/#enforcement","title":"Enforcement","text":"

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at uselagoon@amazee.io. You may also reach out directly to Brandon, a Lagoon team member who has completed CoC training. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

    Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

    "},{"location":"code-of-conduct/#attribution","title":"Attribution","text":"

    This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at http://contributor-covenant.org/version/1/4.

    "},{"location":"contributing/","title":"Contributing","text":"

    We gladly welcome any and all contributions to Lagoon!

    "},{"location":"contributing/#what-kind-of-contributions-do-we-need","title":"What kind of contributions do we need?","text":"

    Lagoon benefits from any kind of contribution - whether it's a bugfix, new feature, documentation update, or simply some queue maintenance - we're happy that you want to help

    "},{"location":"contributing/#developing-for-lagoon","title":"Developing for Lagoon","text":"

    There's a whole section on how to get Lagoon running on your local machine using KinD over at Developing Lagoon. This documentation is still very WIP - but there are a lot of Makefile routines to help you out.

    "},{"location":"contributing/#installing-lagoon","title":"Installing Lagoon","text":"

    We've got another section that outlines how to install Lagoon from Helm charts at Installing Lagoon Into Existing Kubernetes Cluster - we'd love to get this process as slick as possible!

    "},{"location":"contributing/#help-us-with-our-examples","title":"Help us with our examples","text":"

    Right now one of our biggest needs is putting together examples of Lagoon working with various content management systems, etc, other than Drupal.

    If you can spin up an open source CMS or framework that we don\u2019t currently have as a Docker Compose stack, send us a PR. Look at the existing examples at https://github.com/uselagoon/lagoon-examples for tips, pointers and starter issues.

    One small catch \u2013 wherever possible, we\u2019d like them to be built using our base Docker Hub images https://hub.docker.com/u/uselagoon \u2013 if we don\u2019t have a suitable image, or our images need modifying \u2013 throw us a PR (if you can) or create an issue (so someone else can) at https://github.com/uselagoon/lagoon-images.

    Help us improve our existing examples, if you can - are we following best practices, is there something we\u2019re doing that doesn\u2019t make sense?

    Bonus points for anyone that helps contribute to tests for any of these examples \u2013 we\u2019ve got some example tests in a couple of the projects you can use for guidance \u2013 https://github.com/amazeeio/drupal-example-simple/blob/8.x/TESTING_dockercompose.md. The testing framework we\u2019re using is Leia, from the excellent team behind Lando.

    Help us to document our other examples better \u2013 we\u2019re not expecting a full manuscript, but tidy-ups, links to helpful resources and clarifying statements are all super-awesome.

    If you have any questions, reach out to us on Discord!

    "},{"location":"contributing/#i-found-a-security-issue","title":"I found a security issue \ud83d\udd13","text":"

    We take security very seriously. If you discover a security issue or think you found one, please bring it to the maintainers' attention.

    Danger

    Please send your findings to security@amazee.io. Please DO NOT file a GitHub issue for them.

    Security reports are greatly appreciated and will receive public karma and swag! We're also working on a Bug Bounty system.

    "},{"location":"contributing/#i-found-an-issue","title":"I found an issue","text":"

    We're always interested in fixing issues, therefore issue reports are very welcome. Please make sure to check that your issue does not already exist in the issue queue.

    "},{"location":"contributing/#i-have-a-feature-request-or-idea","title":"I have a feature request or idea","text":"

    Cool! Create an issue and we're happy to look over it. We can't guarantee that it will be implemented. But we are always interested in hearing ideas of what we could bring to Lagoon.

    Another good way is also to talk to us via Discord about your idea. Join today!

    "},{"location":"contributing/#i-wrote-some-code","title":"I wrote some code","text":"

    Epic! Please send us a pull request for it, we will do our best to review it and merge it if possible.

    "},{"location":"applications/","title":"A wide range of Applications, Frameworks and Languages are supported by Lagoon","text":"

    Lagoon broadly classifies three levels in the application stack:

    "},{"location":"applications/#languages","title":"Languages","text":"

    The core building blocks of any Lagoon project, these are usually provided by Lagoon-specific images.

    "},{"location":"applications/#frameworks","title":"Frameworks","text":"

    These take those base images, and add in the necessary logic, tools and packages needed to serve a website, or drive an application.

    "},{"location":"applications/#applications","title":"Applications","text":"

    Usually built on top of Frameworks, this is the layer that content editors or developers will interact with to shape the finished product.

    When we reference any repositories for use on Lagoon, we usually refer to them in three ways:

    "},{"location":"applications/#templates","title":"Templates","text":"

    These are fully-functional, cloneable starter repositories, maintained and updated regularly, ready to be extended and used with little customization.

    "},{"location":"applications/#examples","title":"Examples","text":"

    These are fully functional repositories, maintained and updated regularly, but may require some effort to make work for your individual project.

    "},{"location":"applications/#demos","title":"Demos","text":"

    These are repositories that have been built as a demonstration, and are usable for some of the concepts within, but aren't routinely maintained or updated.

    For a more complete list, check out out our GitHub repository: https://www.github.com/lagoon-examples and our website https://lagoon.sh/application/

    "},{"location":"applications/laravel/","title":"Laravel on Lagoon","text":"

    There are multiple ways of running Laravel on Lagoon.

    • You may choose to \"lagoonize\" your existing application yourself (see the Lagoonizing documentation).
    • We have a Laravel example repo of a simple Lagoonized Laravel installation for you to have a look at.
    • (Recommended) We provide a tool called \"Sail:onLagoon\" that will take a standard Laravel Sail application and generate the appropriate Lagoon configuration files for you.
    "},{"location":"applications/laravel/#app-environment-key","title":"App environment key","text":"

    In order to set your app key, set the APP_KEY environment variable, either via the cli or the UI.

    This eliminates the need to store the key in code (in, for instance, a .env file).

    You can generate an app key by running the php artisan key:generate --show, which will output a valid key, rather than adjusting the project files.

    "},{"location":"applications/node/","title":"Node.js","text":""},{"location":"applications/node/#introduction","title":"Introduction","text":"

    Lagoon provides Node.js images that are based on the official Node Alpine images.

    More information on how to adapt your project to run on Lagoon can be found in our Node.js Docker Images section.

    "},{"location":"applications/options/","title":"Configuring Applications for use on Lagoon","text":""},{"location":"applications/options/#lagoonyml","title":"lagoon.yml","text":"

    Project- and environment-level configuration for Lagoon is provided in the .lagoon.yml file in your repository.

    See lagoon-yml.md.

    "},{"location":"applications/options/#docker-composeyml","title":"docker-compose.yml","text":"

    Service-level configuration for Lagoon in provided in the docker-compose.yml file in your repository. In particular, the lagoon.type and associated service labels are documented in the individual services.

    See docker-compose-yml.md

    "},{"location":"applications/options/#storage","title":"Storage","text":"

    Lagoon has the ability to provision storage for most services - the built-in Lagoon service types have a -persistent variant that can add in the necessary PVCs, volumes, etc. We have updated our examples to reflect this configuration locally.

    "},{"location":"applications/options/#databases","title":"Databases","text":"

    Lagoon has configurations available for:

    • Mariadb - all supported versions
    • PostgreSQL - all supported versions
    "},{"location":"applications/options/#database-as-a-service","title":"Database-as-a-service","text":"

    Lagoon also has the capability to utilize the dbaas-operator to automatically provision these databases using an underlying managed database service (i.e. RDS, Google Cloud Databases, Azure Database). This will happen automatically when these services are provisioned and configured for your cluster. If these are not available, a pod will be provisioned as a fallback.

    "},{"location":"applications/options/#cache","title":"Cache","text":"

    Lagoon supports Redis as a cache backend. In production, some users provision a managed Redis service for their production environments to help them scale.

    "},{"location":"applications/options/#search","title":"Search","text":"

    Lagoon supports Elasticsearch, Solr and OpenSearch as search providers. External search providers can also be configured if required.

    "},{"location":"applications/options/#ingressroutes","title":"Ingress/Routes","text":"

    Lagoon auto-generates routes for services that have ingress requirements. Custom routes can be provided in the .lagoon.yml on a per-service basis.

    "},{"location":"applications/options/#environment-variables","title":"Environment Variables","text":"

    Lagoon makes heavy use of environment variables, at build and runtime. Where these are used to provide critical configuration for your application (e.g. database config/credentials) - it is important that the local and Lagoon versions are named similarly.

    See environment-variables.md.

    "},{"location":"applications/other/","title":"Running other applications on Lagoon","text":"

    Even if Lagoon doesn't have a base image for your particular application, framework or language, Lagoon can still build it!

    Extending on, or inheriting from the commons image, Lagoon can run almost any workload.

    "},{"location":"applications/other/#hugo","title":"Hugo","text":"

    This brief example shows how to build a Hugo website and serve it as static files in an NGINX image. The commons image is used to add Hugo, copy the site in, and build it. The NGINX image is then used to serve the site, with the addition of a customized NGINX config.

    nginx.dockerfile
    FROM uselagoon/commons AS builder\n\nRUN apk add hugo git\nWORKDIR /app\nCOPY . /app\nRUN hugo\n\nFROM uselagoon/nginx\n\nCOPY --from=builder /app/public/ /app\nCOPY lagoon/static-files.conf /etc/nginx/conf.d/app.conf\n\nRUN fix-permissions /usr/local/openresty/nginx\n
    docker-compose.yml
    services:\nnginx:\nbuild:\ncontext: .\ndockerfile: lagoon/nginx.Dockerfile\nlabels:\nlagoon.type: nginx\n
    "},{"location":"applications/php/","title":"PHP","text":""},{"location":"applications/php/#introduction","title":"Introduction","text":"

    Lagoon supports a wide range of PHP-based applications, such as Drupal, Laravel, Wordpress, Magento and Symfony.

    More information on how to adapt your PHP project to run on Lagoon can be found in our PHP-cli Docker Images and PHP-FPM Docker Images sections.

    "},{"location":"applications/python/","title":"Python","text":""},{"location":"applications/python/#introduction","title":"Introduction","text":"

    Lagoon provides images for Python 3.7 and above that can be used to build web apps in a wide range of Python-based frameworks and applications.

    More information on how to adapt your Python project to run on Lagoon can be found in our Python Docker Images section.

    "},{"location":"applications/ruby/","title":"Ruby and Ruby on Rails","text":""},{"location":"applications/ruby/#introduction","title":"Introduction","text":"

    We provide images for Ruby 3.0 and above, built on the official Ruby alpine Docker images.

    Below we assume that you're attempting to get a Rails app deployed on Lagoon, although most of the details described are really framework-neutral.

    "},{"location":"applications/ruby/#getting-rails-running-on-lagoon","title":"Getting Rails running on Lagoon","text":""},{"location":"applications/ruby/#responding-to-requests","title":"Responding to requests","text":"

    The Ruby on Rails example in the Lagoon examples repository is instructive here.

    In the docker-compose.yml we set up a service named ruby, which is the primary service that will be processing any dynamic requests.

    If you look at the dockerfile specified for the ruby service, you'll see that we're exposing port 3000. The nginx service will direct any requests for non-static assets to the ruby service on this port (see the nginx configuration file for more details).

    "},{"location":"applications/ruby/#logging","title":"Logging","text":"

    The Lagoon logging infrastructure is described in the docs here. Essentially, in order to make use of the infrastructure, logs need to be sent via a UDP message to udp://application-logs.lagoon.svc:5140.

    In our Rails example, we're importing the logstash-logger gem, and then in our config/application.rb we're initializing it with the following:

    config/application.rb
        if ENV.has_key?('LAGOON_PROJECT') && ENV.has_key?('LAGOON_ENVIRONMENT') then\nlagoon_namespace = ENV['LAGOON_PROJECT'] + \"-\" + ENV['LAGOON_ENVIRONMENT']\nLogStashLogger.configure do |config|\nconfig.customize_event do |event|\nevent[\"type\"] = lagoon_namespace\nend\nend\nconfig.logstash.host = 'application-logs.lagoon.svc'\nconfig.logstash.type = :udp\nconfig.logstash.port = 5140\nend\n
    "},{"location":"applications/ruby/#database-configuration","title":"Database configuration","text":"

    The example uses our PostgreSQL image (see the docker-compose.yml file). Configuring database access in Rails for Lagoon is very straightforward. Since Lagoon injects the database host, name, and credentials as environment variables, we can change our config/database.yml to be aware of these env vars, and consume them if they exist.

    config/database.yml
    default: &default\nadapter: postgresql\nencoding: unicode\npool: <%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>\nusername: <%= ENV.fetch(\"POSTGRES_USERNAME\") { \"drupal\" } %>\npassword: <%= ENV.fetch(\"POSTGRES_PASSWORD\") { \"drupal\" } %>\nhost: <%= ENV.fetch(\"POSTGRES_HOST\") { \"postgres\" } %>\ndatabase: <%= ENV.fetch(\"('POSTGRES_DATABASE'\") { \"drupal\" } %>\n
    "},{"location":"applications/wordpress/","title":"WordPress on Lagoon","text":"

    The WordPress template is configured to use Composer to install WordPress, its dependencies, and themes.

    The WordPress template is based on the https://github.com/roots/bedrock boilerplate, but extended to match a standardized Lagoon deployment pattern.

    "},{"location":"applications/wordpress/#composer-install","title":"Composer Install","text":"

    The template uses Composer to install WordPress and its themes.

    "},{"location":"applications/wordpress/#database","title":"Database","text":"

    Lagoon can support MariaDB and PostgreSQL databases, but as support for PostgreSQL is limited in WordPress, it isn't recommended for use.

    "},{"location":"applications/wordpress/#nginx-configuration","title":"NGINX configuration","text":"

    Lagoon doesn't have a built-in configuration for WordPress - instead, the template comes with a starting nginx.conf - please contribute any improvements you may find!

    "},{"location":"applications/wordpress/#wp-cli","title":"WP-CLI","text":"

    The Lagoon template installs wp-cli into the cli image to manage your WordPress install.

    "},{"location":"applications/drupal/","title":"Drupal on Lagoon","text":"

    Lagoon was built to host Drupal sites (no, seriously, it was - at least initially!)

    In this section you'll find more information on the various services that have been customised for use with Drupal.

    "},{"location":"applications/drupal/#drupal_integrations-drupal-scaffolding-package","title":"drupal_integrations Drupal scaffolding package","text":"

    The drupal_integrations package, available on packagist extends Drupal's core-composer-scaffold for use on Lagoon. It also provides additional Drush command drush la to retreive the Drush aliases for your Lagoon project.

    "},{"location":"applications/drupal/#lagoon-logs-drupal-module","title":"lagoon-logs Drupal module","text":"

    The lagoon_logs module, availalble on drupal.org provides zero-configuration logging for Drupal on Lagoon.

    "},{"location":"applications/drupal/automatic-updates/","title":"Automatic Updates","text":"

    Lagoon deploys applications in a way that is not compatible with some methods of updating Drupal core and contrib. Lagoon expects to build immutable images and run immutable containers. When the code of the application is changed at runtime, it can cause any of the following problems:

    1. Containers are managed automatically by Kubernetes and may be moved, restarted, or scaled at any time. When this happens, the original built container image will be ran and any changes that happened at runtime are lost.
    2. Tasks and cronjobs may run with the orignal built container image and won't have access to any updated code.
    3. Updating requires write permissions to the filesystem, but it is possible to configure an environment that forces a read-only filesystem.
    4. Best practices is to deploy small containers that each do one thing. For a typical Drupal project this means there is a cli, php, and nginx container which each contain a copy of the code. Updating only one of these containers will cause issues with code mismatches.

    The following update methods been disabled by Lagoon.

    "},{"location":"applications/drupal/automatic-updates/#drupal-automatic-updates","title":"Drupal Automatic Updates","text":"

    The Automatic Updates contrib module is disabled by and it will also be disabled when it moves into Drupal core.

    "},{"location":"applications/drupal/automatic-updates/#drush","title":"Drush","text":"

    Using drush pm-install or drush pm-update is disabled by default as part of the amazeeio/drupal-integrations package.

    "},{"location":"applications/drupal/drush-9/","title":"Drush 9","text":""},{"location":"applications/drupal/drush-9/#aliases","title":"Aliases","text":"

    Unfortunately, Drush 9 does not provide the ability to inject dynamic site aliases like Drush 8 did. We are working with the Drush team to implement this again. In the meantime, we have a workaround that allows you to use Drush 9 with Lagoon.

    "},{"location":"applications/drupal/drush-9/#basic-idea","title":"Basic Idea","text":"

    Drush 9 provides a new command, drush site:alias-convert , which can convert Drush 8-style site aliases over to the Drush 9 YAML site alias style. This will create a on- time export of the site aliases currently existing in Lagoon, and save them in /app/drush/sites . These are then used when running a command like drush sa.

    "},{"location":"applications/drupal/drush-9/#preparation","title":"Preparation","text":"

    In order to be able to use drush site:alias-convert , you need to do the following:

    • Rename the aliases.drushrc.php inside the drush folder to lagoon.aliases.drushrc.php.
    "},{"location":"applications/drupal/drush-9/#generate-site-aliases","title":"Generate Site Aliases","text":"

    You can now convert your Drush aliases by running the following command in your project using the cli container:

    Generate Site Aliases
    docker compose exec cli drush site:alias-convert /app/drush/sites --yes\n

    It's good practice to commit the resulting YAML files into your Git repository, so that they are in place for your fellow developers.

    "},{"location":"applications/drupal/drush-9/#use-site-aliases","title":"Use Site Aliases","text":"

    In Drush 9, all site aliases are prefixed with a group. In our case, this is lagoon. You can show all site aliases with their prefix via:

    Show all site aliases
    drush sa --format=list\n

    and to use them:

    Using Drush site alias
    drush @lagoon.main ssh\n
    "},{"location":"applications/drupal/drush-9/#update-site-aliases","title":"Update Site Aliases","text":"

    If a new environment in Lagoon has been created, you can run drush site:alias-convert to update the site aliases file. If running this command does not update lagoon.site.yml, try deleting lagoon.site.yml first, and then re-run drush site:alias-convert.

    "},{"location":"applications/drupal/drush-9/#drush-rsync-from-local-to-remote-environments","title":"Drush rsync from local to remote environments","text":"

    If you would like to sync files from a local environment to a remote environment, you need to pass additional parameters:

    Drush rsync
    drush rsync @self:%files @lagoon.main:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n

    This also applies to syncing one remote environment to another, if you're not using the Lagoon tasks UI to copy files between environments.

    For example, if you wanted to sync the files from @lagoon.main to @lagoon.dev , and ran drush rsync @lagoon.main @lagoon.dev locally, without the extra parameters, you would probably run into a \"Cannot specify two remote aliases\" error.

    To resolve this, you would first need to SSH into your destination environment drush @lagoon.dev ssh, and then execute the rsync command with parameters similar to the above:

    Drush rsync
    drush rsync @lagoon.main:%files  @self:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n

    This is not necessary if you rsync from a remote to a local environment.

    Also, we're working with the Drush maintainers to find a way to inject this automatically.

    "},{"location":"applications/drupal/first-deployment-of-drupal/","title":"First Deployment of Drupal","text":""},{"location":"applications/drupal/first-deployment-of-drupal/#1-make-sure-you-are-all-set","title":"1. Make sure you are all set","text":"

    In order to make your first deployment a successful one, please make sure that your Drupal Project is Lagoonized and you have set up the project in Lagoon. If not, don't worry! Follow the Step-by-Step Guide which show you how this works.

    "},{"location":"applications/drupal/first-deployment-of-drupal/#2-push","title":"2. Push","text":"

    With Lagoon, you create a new deployment by pushing into a branch that is configured to be deployed.

    If you don't have any new code to push, don't worry, you can run

    Git push
    git commit --allow-empty -m \"go, go! Power Rangers!\"\ngit push\n

    This will trigger a push, and the Git hosting will inform Lagoon about this push via the configured webhook.

    If all is correct, you will see a notification in your configured chat system. (Contact your Lagoon administrator to configure this):

    This tells you that Lagoon has just started to deploy your code. Depending on the size of the codebase and amount of containers, this will take a couple of seconds. Just relax. If you'd like to know what's happening now, check out the Build and Deploy Process of Lagoon.

    You can also check your Lagoon UI to see the progress of any deployment. (Contact your Lagoon administrator for the URL if you don't have it).

    "},{"location":"applications/drupal/first-deployment-of-drupal/#3-a-fail","title":"3. A fail","text":"

    Depending on the post-rollout tasks defined in .lagoon.yml, you might have run some tasks like drush updb or drush cr. These Drush tasks depend on a database existing within the environment, which obviously does not exist yet. Let's fix that! Keep reading.

    "},{"location":"applications/drupal/first-deployment-of-drupal/#4-synchronize-local-database-to-the-remote-lagoon-environment","title":"4. Synchronize local database to the remote Lagoon environment","text":"

    With full Drush site alias support in Lagoon, you can synchronize a local database with the remote Lagoon environment.

    Warning

    You may have to tell pygmy about your public keys before the next step.

    If you get an error like Permission denied (publickey), check out the documentation here: pygmy - adding ssh keys.

    First let's make sure that you can see the Drush site aliases:

    Get site aliases
    drush sa\n

    This should return your just deployed environment (let's assume you just pushed into develop):

    Returned site aliases
    [drupal-example]cli-drupal:/app$ drush sa\n@develop\n@self\ndefault\n

    With this we can now synchronize the local database (which is represented in Drush via the site alias @self) with the remote one (@develop):

    Drush sql-sync
    drush sql-sync @self @develop\n

    You should see something like:

    Drush sql-sync results
    [drupal-example]cli-drupal:/app$ drush sql-sync @self @develop\nYou will destroy data in ssh.example.com/drupal and replace with data from drupal.\nDo you really want to continue? (y/n): y\nStarting to dump database on Source.                                                                              [ok]\nDatabase dump saved to /home/drush-backups/drupal/20180227075813/drupal_20180227_075815.sql.gz               [success]\nStarting to discover temporary files directory on Destination.                                                    [ok]\nYou will delete files in drupal-example-develop@ssh.example.com:/tmp/drupal_20180227_075815.sql.gz and replace with data from /home/drush-backups/drupal/20180227075813/drupal_20180227_075815.sql.gz\nDo you really want to continue? (y/n): y\nCopying dump file from Source to Destination.                                                                     [ok]\nStarting to import dump file onto Destination database.\n

    Now let's try another deployment, again an empty push:

    Git push
    git commit --allow-empty -m \"go, go! Power Rangers!\"\ngit push\n

    This time all should be green:

    Click on the links in the notification, and you should see your Drupal site loaded in all its beauty! It will probably not have images yet, which we will handle in Step 6.

    If it is still failing, check the logs link for more information.

    "},{"location":"applications/drupal/first-deployment-of-drupal/#5-synchronize-local-files-to-the-remote-lagoon-environment","title":"5. Synchronize local files to the remote Lagoon environment","text":"

    You probably guessed it: we can do it with Drush:

    Drush rsync
    drush rsync @self:%files @develop:%files\n

    It should show you something like:

    Drush rsync results
    [drupal-example]cli-drupal:/app$ drush rsync @self:%files @develop:%files\nYou will delete files in drupal-example-develop@ssh.example.com:/app/web/sites/default/files and replace with data from /app/web/sites/default/files/\nDo you really want to continue? (y/n): y\n

    In some cases, though, it might not look correct, like here:

    Drush rsync results
    [drupal-example]cli-drupal:/app$ drush rsync @self:%files @develop:%files\nYou will delete files in drupal-example-develop@ssh.example.com:'/app/web/%files' and replace with data from '/app/web/%files'/\nDo you really want to continue? (y/n):\n

    The reason for that is that the Drupal cannot resolve the path of the files directory. This most probably has to do with Drupal not being fully configured or having a missing database. For a workaround you can use drush rsync @self:sites/default/files @develop:sites/default/files, but we suggest that you actually check your local and remote Drupal (you can test with drush status to see if the files directory is correctly configured).

    "},{"location":"applications/drupal/first-deployment-of-drupal/#6-its-done","title":"6. It's done","text":"

    As soon as Lagoon is done building and deploying it will send a second notification to the chat system, like so:

    This tells you:

    • Which project has been deployed.
    • Which branch and Git SHA has been deployed.
    • A link to the full logs of the build and deployment.
    • Links to all routes (URLs) where the environment can be reached.

    That's it! We hope that wasn't too hard - making devOps accessible is what we are striving for.

    "},{"location":"applications/drupal/first-deployment-of-drupal/#but-wait-how-about-other-branches-or-the-production-environment","title":"But wait, how about other branches or the production environment?","text":"

    That's the beauty of Lagoon: it's exactly the same: Push the branch name you defined to be your production branch and that one will be deployed.

    "},{"location":"applications/drupal/first-deployment-of-drupal/#failure-dont-worry","title":"Failure? Don't worry","text":"

    Did the deployment fail? Oh no! But we're here to help:

    1. Click on the logs link in the error notification. It will tell you where in the deployment process the failure happened.
    2. If you can't figure it out, contact your Lagoon administrator, they are here to help!
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/","title":"Integrate Drupal & Fastly","text":""},{"location":"applications/drupal/integrate-drupal-and-fastly/#prerequisites","title":"Prerequisites","text":"
    • Drupal 7+
    • A Fastly service ID
    • A Fastly API token with the permission to purge
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#drupal-7-with-url-based-purging","title":"Drupal 7 with URL based purging","text":"
    1. Download and install the Fastly Drupal module.
    2. Configure the Fastly service ID and API token.
    3. Optionally configure the webhooks (so you can ping Slack for instance when a cache purge is sent)
    4. Only URL based purging can be done in Drupal 7 (simple purging).
    5. Alter Drupal's client IP in settings.php:
    settings.php changes for Drupal 7
    $conf['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP';\n
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#drupal-10-with-cache-tag-purging","title":"Drupal 10+ with cache tag purging","text":"

    Use Composer to get the latest version of the module:

    Download the Fastly Drupal module and dependencies
    composer require drupal/fastly drupal/http_cache_control drupal/purge\n

    You will need to enable the following modules:

    • fastly
    • fastlypurger
    • http_cache_control (2.x)
    • purge
    • purge_ui (technically optional, but this is really handy to have enabled on production)
    • purge_processor_lateruntime
    • purge_processor_cron
    • purge_queuer_coretags
    • purge_drush (useful for purge via Drush, here is a list of commands)
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#configure-the-fastly-module-in-drupal","title":"Configure the Fastly module in Drupal","text":"

    Configure the Fastly service ID and API token. A Site ID is generated for you automatically. You can use runtime environment variables, or you can edit the settings form found at /admin/config/services/fastly:

    • FASTLY_API_TOKEN
    • FASTLY_API_SERVICE
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#set-the-purge-options","title":"Set the purge options","text":"
    • Cache tag hash length: 4
    • Purge method: Use soft purge

    A 4 character cache tag is plenty for most sites, a 5 character cache tag is likely better for sites with millions of entities (to reduce cache tag collisions).

    Note

    Soft purging should be used, this means the object in Fastly is marked as stale, rather than being evicted entirely so that it can be used in the event the origin is down (with the feature serve while stale).

    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#set-the-stale-content-options","title":"Set the Stale Content Options","text":"

    Set the options to what makes sense for your site. Minimum 1 hour (3600), maximum 1 week (604800). Generally something like the following will be fine:

    1. Stale while revalidate - on, 14440 seconds
    2. Stale if error - on, 604800 seconds

    Optionally configure the webhooks (so you can ping Slack for instance when a cache purge is sent).

    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#configure-the-purge-module","title":"Configure the Purge module","text":"

    Visit the purge page /admin/config/development/performance/purge

    Set up the following options:

    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#cache-invalidation","title":"Cache Invalidation","text":"
    • Drupal Origin: Tag
    • Fastly: E, Tag, URL
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#queue","title":"Queue","text":"
    • Queuers: Core tags queuer, Purge block(s)
    • Queue: Database
    • Processors: Core processor, Late runtime processor, Purge block(s)

    What this means is that we will be using Drupal's built-in core tag queuer (add tags to the queue), the queue will be stored in the database (default), and the queue will be processed by

    • Cron processor
    • Late runtime processor

    In order for the cron processor to run, you need to ensure that cron is running on your site. Ideally every minute. You can manually run it in your cli pod, to ensure that purge_processor_cron_cron() is being executed without errors.

    start cron
    [drupal8]production@cli-drupal:/app$ drush cron -v\n...\n[notice] Starting execution of purge_processor_cron_cron(), execution of node_cron() took 21.16ms.\n

    The Late runtime processor will run in hook_exit() for every page load, this can be useful to process the purges nearly as quickly as they come into the queue.

    By having both, you guarantee that purges happen as soon as possible.

    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#optimal-cache-header-setup","title":"Optimal Cache Header Setup","text":"

    Out of the box, Drupal does not have the power to set different cache lifetimes in the browser vs in Fastly. So if you do set long cache lifetimes in Drupal, often end users will not see them if their browser has cached the page. If you install the 2.x version of the HTTP Cache Control module, this will give you a lot more flexibility on what caches and for how long.

    For most sites, a sensible default could be

    • Shared cache maximum age : 1 month
    • Browser cache maximum age : 10 minutes
    • 404 cache maximum age: 15 minutes
    • 302 cache maximum age: 1 hour
    • 301 cache maximum age: 1 hour
    • 5xx cache maximum age: no cache

    Note

    This relies on your site having accurate cache tags represented for all the content that exists on the page.

    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#true-client-ips","title":"True client IPs","text":"

    We configure Fastly to send the actual client IP back on the HTTP header True-Client-IP, you can make Drupal respect this header with the following changes in settings.php:

    settings.php changes for Drupal < 8.7.0
    $settings['reverse_proxy'] = TRUE;\n$settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP';\n

    However, with Drupal 8.7.0, there was a change to remove this functionality. You can achieve the same goal with the following snippet

    settings.php changes for Drupal >= 8.7.0
    /**\n * Tell Drupal to use the True-Client-IP HTTP header.\n */\nif (isset($_SERVER['HTTP_TRUE_CLIENT_IP'])) {\n  $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_TRUE_CLIENT_IP'];\n}\n
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#drush-integration","title":"Drush integration","text":"settings.php
     fastly:\n   fastly:purge:all (fpall)                                                    Purge whole service.\n   fastly:purge:key (fpkey)                                                    Purge cache by key.\n   fastly:purge:url (fpurl)                                                    Purge cache by Url.\n
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#viewing-fastly-caching-headers-using-curl","title":"Viewing Fastly caching headers using cURL","text":"

    Use this function: (works in Linux and Mac OSX)

    cURL function
    function curlf() { curl -sLIXGET -H 'Fastly-Debug:1' \"$@\" | grep -iE 'X-Cache|Cache-Control|Set-Cookie|X-Varnish|X-Hits|Vary|Fastly-Debug|X-Served|surrogate-control|surrogate-key' }\n
    Using cURL
    $ curlf https://www.example-site-fastly.com\ncache-control: max-age=601, public, s-maxage=2764800\nsurrogate-control: max-age=2764800, public, stale-while-revalidate=3600, stale-if-error=3600\nfastly-debug-path: (D cache-wlg10427-WLG 1612906144) (F cache-wlg10426-WLG 1612906141) (D cache-fra19179-FRA 1612906141) (F cache-fra19122-FRA 1612906141)\nfastly-debug-ttl: (H cache-wlg10427-WLG - - 3) (M cache-fra19179-FRA - - 0)\nfastly-debug-digest: 1118d9fefc8a514ca49d49cb6ece04649e1acf1663398212650bb462ba84c381\nx-served-by: cache-fra19179-FRA, cache-wlg10427-WLG\nx-cache: MISS, HIT\nx-cache-hits: 0, 1\nvary: Cookie, Accept-Encoding\n

    From the above headers we can see that:

    • The HTML page is cacheable
    • Browsers will cache the page for 601 seconds
    • Fastly will cache the page for 32 days (2764800 seconds)
    • Tiered caching is in effect (edge PoP in Wellington, and shield PoP in France)
    • The HTML page was a cache hit at the edge PoP
    "},{"location":"applications/drupal/integrate-drupal-and-fastly/#sending-manual-purge-requests-to-fastly","title":"Sending manual purge requests to Fastly","text":"

    If you ever want to remove a specific page from cache manually, there are ways to do this.

    Purge Fastly by single URL
    curl -Ssi -XPURGE -H 'Fastly-Soft-Purge:1' -H \"Fastly-Key:$FASTLY_API_TOKEN\" https://www.example.com/subpage\n

    You can also purge by cache tag:

    Purge Fastly by cache tag
    curl -XPOST -H 'Fastly-Soft-Purge:1' -H \"Fastly-Key:$FASTLY_API_TOKEN\" https://api.fastly.com/service/$FASTLY_API_SERVICE/purge/<surrogatekey>\n

    You can also use the Fastly CLI which helps to make this a little nicer.

    "},{"location":"applications/drupal/phpunit-and-phpstorm/","title":"PHPUnit and PhpStorm","text":"

    Note

    This document assumes the following:

    - You are using Docker.

    - You are using a standard Amazee/Lagoon project with a docker-compose.yml file.

    - You are on a Mac - it should work for other operating systems but folder structure and some configuration settings may be different.

    "},{"location":"applications/drupal/phpunit-and-phpstorm/#configuring-the-project","title":"Configuring the project","text":"
    1. Duplicate* the /core/phpunit.xml.dist file to /core/phpunit.xml
    2. Edit* /core/phpunit.xml and fill in the following variables:

      • SIMPLETEST_DB: mysql://drupal:drupal@mariadb:3306/drupal#db
      • SIMPLETEST_BASE_URL: <PROJECT_URL>
    "},{"location":"applications/drupal/phpunit-and-phpstorm/#configuring-phpstorm","title":"Configuring PhpStorm","text":""},{"location":"applications/drupal/phpunit-and-phpstorm/#set-up-docker","title":"Set Up Docker","text":"
    1. In PhpStorm, go to File > Settings > Build, Execution, Deployment > Docker
    2. Click: +
    3. Select: Docker for Mac
    "},{"location":"applications/drupal/phpunit-and-phpstorm/#set-up-cli-interpreter","title":"Set Up CLI interpreter","text":"

    Add a new CLI interpreter:

    1. In PhpStorm, go to File > Settings > Languages & Frameworks > PHP
    2. Click ... and then +
    3. Next select: Add a new CLI interpreter from Docker, vagrant...
    4. Use the following configurations:
      • Server: <DOCKER>
      • Configuration file(s): ./docker-compose.yml
      • Service: cli
      • Lifecycle: Connect to existing container ('docker compose exec')
    5. Path mappings:
      • Local path: <ROOT_PATH>
      • Remote path*: /app

    "},{"location":"applications/drupal/phpunit-and-phpstorm/#set-up-remote-interpreter","title":"Set Up Remote Interpreter","text":"

    Add Remote Interpreter:

    1. In PhpStorm, go to File > Settings > Languages & Frameworks > PHP > Test Frameworks
    2. Click + and select PHPUnit by Remote Interpreter
    3. Use the following configurations:
      • CLI Interpreter: <CLI_INTERPRETER>
      • Path mappings*: <PROJECT_ROOT> -> /app
      • PHPUnit: Use Composer autoloader
      • Path to script*: /app/vendor/autoload.php
      • Default configuration file*: /app/web/core/phpunit.xml

    "},{"location":"applications/drupal/phpunit-and-phpstorm/#setupconfigure-runner-template","title":"Setup/Configure Runner Template","text":"
    1. Configure runner:
      1. In PhpStorm, go to Run > Edit Configurations... > Templates > PHPUnit
      2. Use the following configurations:

        1. Test scope: Defined in the configuration file

        2. Interpreter: <CLI_INTERPRETER>

    Note

    If you are not on a Mac, this may vary.

    "},{"location":"applications/drupal/phpunit-and-phpstorm/#final-checks","title":"Final checks","text":""},{"location":"applications/drupal/phpunit-and-phpstorm/#some-final-checks-to-run-before-you-run-a-test","title":"Some final checks to run before you run a test","text":"
    1. You have the project up and running: $ docker compose up -d
    2. The project is working without any errors, visit the site just to make sure it all works as expected - this is not 100% necessary, but nice to know it is working normally.
    3. We should be ready to run some tests!
    "},{"location":"applications/drupal/phpunit-and-phpstorm/#ready-to-run","title":"Ready to Run","text":"

    Now you have the above configuration set up it should be as straightforward as going to the test you want to run and pressing the green arrow!

    Once you press this PhpStorm will use Docker to enter the CLI container, then start running PHPUnit based upon the config.

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/","title":"Step by Step: Getting Drupal ready to run on Lagoon","text":""},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#1-lagoon-drupal-setting-files","title":"1. Lagoon Drupal Setting Files","text":"

    In order for Drupal to work with Lagoon, we need to teach Drupal about Lagoon and Lagoon about Drupal. This happens by copying specific YAML and PHP files into your Git repository.

    If you're working on a Drupal project, you can check out one of the various Drupal example projects in our examples repository. We have Drupal 8 and 9 and some variants of each depending on your needs, such as database types. Clone the repository that best suits your needs to get started!

    Here is a summary of the Lagoon- and Drupal-specific files you will find:

    • .lagoon.yml - The main file that will be used by Lagoon to understand what should be deployed and many more things. This file has some sensible Drupal defaults. If you would like to edit or modify, please check the documentation for .lagoon.yml.
    • docker-compose.yml, .dockerignore, and *.dockerfile (or Dockerfile) - These files are used to run your local Drupal development environment, they tell Docker which services to start and how to build them. They contain sensible defaults and many commented lines. We hope that it's well-commented enough to be self-describing. If you would like to find out more, see documentation for docker-compose.yml.
    • sites/default/* - These .php and .yml files tell Drupal how to communicate with Lagoon containers both locally and in production. They also provide a straightforward system for specific overrides in development and production environments. Unlike other Drupal hosting systems, Lagoon never ever injects Drupal settings files into your Drupal. Therefore, you can edit them however you like. Like all other files, they contain sensible defaults and some commented parts.
    • drush/aliases.drushrc.php - These files are specific to Drush and tell Drush how to talk to the Lagoon GraphQL API in order to learn about all site aliases there are.
    • drush/drushrc.php - Some sensible defaults for Drush commands.
    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#update-your-gitignore-settings","title":"Update your .gitignore Settings","text":"

    Don't forget to make sure your .gitignore will allow you to commit the settings files.

    Drupal is shipped with sites/*/settings*.php and sites/*/services*.yml in .gitignore. Remove that, as with Lagoon we don't ever have sensitive information in the Git repository.

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#note-about-webroot-in-drupal-8","title":"Note about WEBROOT in Drupal 8","text":"

    Unfortunately the Drupal community has not decided on a standardized WEBROOT folder name. Some projects put Drupal within web, and others within docroot or somewhere else. The Lagoon Drupal settings files assume that your Drupal is within web, but if this is different for your Drupal, please adapt the files accordingly.

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#note-about-composerjson","title":"Note about composer.json","text":"

    If you installed Drupal via composer, please check your composer.json and make sure that the name is NOT drupal/drupal, as this could confuse Drush and other tools of the Drupal universe, just rename it to something like myproject/drupal

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#2-customize-docker-composeyml","title":"2. Customize docker-compose.yml","text":"

    Don't forget to customize the values in lagoon-project & LAGOON_ROUTE with your site-specific name & the URL you'd like to access the site with. Here's an example:

    docker-compose.yml
    x-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# Route that should be used locally. If you are using pygmy, this route *must* end with .docker.amazee.io.\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n
    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#3-build-images","title":"3. Build Images","text":"

    First, we need to build the defined images:

    Build images
    docker compose build\n

    This will tell docker-compose to build the Docker images for all containers that have a build: definition in the docker-compose.yml. Usually for Drupal this is the case for the cli, nginx and php images. We do this because we want to run specific build commands (like composer install) or inject specific environment variables (like WEBROOT) into the images.

    Usually, building is not necessary every time you edit your Drupal code (as the code is mounted into the containers from your host), but rebuilding does not hurt. Plus, Lagoon will build the exact same Docker images during a deploy, so you can check that your build will also work during a deployment by just running docker compose build again.

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#4-start-containers","title":"4. Start Containers","text":"

    Now that the images are built, we can start the containers:

    Start containers
    docker compose up -d\n

    This will bring up all containers. After the command is done, you can check with docker compose ps to ensure that they are all fully up and have not crashed. If there is a problem, check the logs with docker compose logs -f [servicename].

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#5-rerun-composer-install-for-composer-projects-only","title":"5. Rerun composer install (for Composer projects only)","text":"

    In a local development environment, you probably want all dependencies downloaded and installed, so connect to the cli container and run composer install:

    Run composer install in CLI
    docker compose exec cli bash\ncomposer install\n

    This might sound weird, as there was already a composer install executed during the build step, so let us explain:

    • In order to be able to edit files on the host and have them immediately available in the container, the default docker-composer.yml mounts the whole folder into the the containers (this happens with .:/app:delegated in the volumes section). This also means that all dependencies installed during the Docker build are overwritten with the files on the host.
    • Locally, you probably want dependencies defined as require-dev in composer.json to exist as well, while on a production deployment they would just use unnecessary space. So we run composer install --no-dev in the Dockerfile and composer install manually.

    If everything went well, open the LAGOON_ROUTE defined in docker-compose.yml (for example http://drupal.docker.amazee.io) and you should be greeted by a nice Drupal error. Don't worry - that's ok right now, most important is that it tries to load a Drupal site.

    If you get a 500 or similar error, make sure everything loaded properly with Composer.

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#6-check-status-and-install-drupal","title":"6. Check Status and Install Drupal","text":"

    Finally it's time to install Drupal, but just before that we want to make sure everything works. We suggest using Drush for that:

    Drush status
    docker compose exec cli bash\ndrush status\n

    This should return something like:

    Drush status result
    [drupal-example]cli-drupal:/app$ drush status\n[notice] Missing database table: key_value\nDrupal version       :  8.6.1\nSite URI             :  http://drupal.docker.amazee.io\nDatabase driver      :  mysql\nDatabase hostname    :  mariadb\nDatabase port        :  3306\nDatabase username    :  drupal\nDatabase name        :  drupal\nPHP binary           :  /usr/local/bin/php\nPHP config           :  /usr/local/etc/php/php.ini\nPHP OS               :  Linux\nDrush script         :  /app/vendor/drush/drush/drush\nDrush version        :  9.4.0\nDrush temp           :  /tmp\nDrush configs        :  /home/.drush/drush.yml\n                        /app/vendor/drush/drush/drush.yml\nDrupal root          :  /app/web\nSite path            :  sites/default\n

    Warning

    You may have to tell pygmy about your public key before the next step.

    If you get an error like Permission denied (publickey), check out the documentation here: pygmy - adding ssh keys

    Now it is time to install Drupal (if instead you would like to import an existing SQL file, please skip to step 7, but we suggest you start with a clean Drupal installation in the beginning to be sure everything works).

    Install Drupal
    drush site-install\n

    This should output something like:

    drush site-install
    [drupal-example]cli-drupal:/app$ drush site-install\nYou are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y\nStarting Drupal installation. This takes a while. Consider using the --notify global option.\nInstallation complete.  User name: admin  User password: a7kZJekcqh\nCongratulations, you installed Drupal!\n

    Now you can visit the URL defined in LAGOON_ROUTE and you should see a fresh and clean installed Drupal site - Congrats!

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#7-import-existing-database-dump","title":"7. Import existing Database Dump","text":"

    If you already have an existing Drupal site, you probably want to import its database over to your local site.

    There are many different ways to create a database dump. If your current hosting provider has Drush installed, you can use the following:

    Drush sql-dump
    drush sql-dump --result-file=dump.sql\n\nDatabase dump saved to dump.sql\n

    Now you have a dump.sql file that contains your whole database.

    Copy this file into your Git repository and connect to the cli, and you should see the file in there:

    Viewing dump.sql
    [drupal-example]cli-drupal:/app$ ls -l dump.sql\n-rw-r--r--    1 root     root          5281 Dec 19 12:46 dump.sql\n

    Now you can drop the current database, and then import the dump.

    Import dump.sql
    drush sql-drop\n\ndrush sql-cli < dump.sql\n

    Verify that everything works with visiting the URL of your project. You should have a functional copy of your Drupal site!

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#8-drupal-files-directory","title":"8. Drupal files directory","text":"

    A Drupal site also needs the files directory. As the whole folder is mounted into the Docker containers, add the files into the correct folder (probably web/sites/default/files, sites/default/files or something similar). Remember what you've set as your WEBROOT - it may not be the same for all projects.

    "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#9-done","title":"9. Done","text":"

    You are done with your local setup. The Lagoon team wishes happy Drupaling!

    "},{"location":"applications/drupal/subfolders/","title":"Subfolders","text":"

    An example could be: www.example.com points to one Drupal site, while www.example.com/blog loads a blog built in another Drupal.

    It would be possible to run both Drupals in a single Git repository and deploy it as a whole, but this workflow might not fit every team, and having separate Git repositories fits some situations better.

    "},{"location":"applications/drupal/subfolders/#modifications-of-root-application","title":"Modifications of root application","text":"

    The root application (in this example, the Drupal site for www.example.com), needs a couple of NGINX configs that will configure NGINX to be a reverse proxy to the subfolder applications:

    "},{"location":"applications/drupal/subfolders/#location_prependconf","title":"location_prepend.conf","text":"

    Create a file called location_prepend.conf in the root of your Drupal installation:

    location_prepend.conf
    resolver 8.8.8.8 valid=30s;\n\nlocation ~ ^/subfolder {\n  # If $http_x_forwarded_proto is empty (If it is not set from an upstream reverseproxy).\n  # Aet it to the current scheme.\n  set_if_empty $http_x_forwarded_proto $scheme;\n\n  proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;\n  proxy_set_header      X-Forwarded-Proto $scheme;\n  proxy_set_header      X-Forwarded-Proto $http_x_forwarded_proto;\n  proxy_set_header      X-Lagoon-Forwarded-Host $host;\n  # Will be used by downstream to know the original host.\n  proxy_set_header      X-REVERSEPROXY $hostname;\n  proxy_set_header      FORWARDED \"\";\n  # Unset FORWARDED because drupal8 gives errors if it is set.\n  proxy_set_header      Proxy \"\";\n  # Unset Proxy because drupal8 gives errors if it is set.\n  proxy_ssl_server_name on;\n\n  # NGINX needs a variable set in order for the DNS resolution to work correctly.\n  set                   $subfolder_drupal_host \"https://nginx-lagoonproject-${LAGOON_GIT_SAFE_BRANCH}.clustername.com:443\";\n  # LAGOON_GIT_SAFE_BRANCH variable will be replaced during docker entrypoint.\n  proxy_pass            $subfolder_drupal_host;\n  proxy_set_header      Host $proxy_host;\n  # $proxy_host will be automatically generated by NGINX based on proxy_pass (it needs to be without scheme and port).\n\n  expires off; # make sure we honor cache headers from the proxy and not overwrite them\n

    Replace the following strings:

    • /subfolder with the name of the subfolder you want to use. For example, /blog.
    • nginx with the service that you want to point too in the subfolder project.
    • lagoonproject with the Lagoon projectname of the subfolder project.
    "},{"location":"applications/drupal/subfolders/#nginx-dockerfile","title":"NGINX Dockerfile","text":"

    Add the following to your NGINX Dockerfile (nginx.dockerfile or Dockerfile.nginx):

    nginx.dockerfile
    COPY location_prepend.conf /etc/nginx/conf.d/drupal/location_prepend.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/*\n
    "},{"location":"applications/drupal/subfolders/#modifications-of-subfolder-application","title":"Modifications of subfolder application","text":"

    Like the root application, we also need to teach the subfolder application (in this example, the Drupal installation for www.example.com/blog), that it is running under a subfolder. To do this, we create two files:

    "},{"location":"applications/drupal/subfolders/#location_drupal_append_subfolderconf","title":"location_drupal_append_subfolder.conf","text":"

    Create a file called location_drupal_append_subfolder.conf in the root of your subfolder Drupal installation:

    location_drupal_append_subfolder.conf
    # When injecting a script name that is prefixed with `subfolder`, Drupal will\n# render all URLs with `subfolder` prefixed\nfastcgi_param  SCRIPT_NAME        /subfolder/index.php;\n\n# If we are running via a reverse proxy, we inject the original HOST URL\n# into PHP. With this Drupal will render all URLs with the original HOST URL,\n# and not the current used HOST.\n\n# We first set the HOST to the regular host variable.\nfastcgi_param  HTTP_HOST          $http_host;\n# Then we overwrite it with `X-Lagoon-Forwarded-Host` if it exists.\nfastcgi_param  HTTP_HOST          $http_x_lagoon_forwarded_host if_not_empty;\n

    Replace /subfolder with the name of the subfolder you want to use. For example, /blog.

    "},{"location":"applications/drupal/subfolders/#server_prepend_subfolderconf","title":"server_prepend_subfolder.conf","text":"

    Create a file called server_prepend_subfolder.conf in the root of your subfolder Drupal installation:

    server_prepend_subfolder.conf
    # Check for redirects before we do the internal NGINX rewrites.\n# This is done because the internal NGINX rewrites uses `last`,\n# which instructs NGINX to not check for rewrites anymore (and\n# `if` is part of the redirect module).\ninclude /etc/nginx/helpers/010_redirects.conf;\n\n# This is an internal NGINX rewrite, it removes `/subfolder/`\n# from the requests so that NGINX handles the request as it would\n# have been `/` from the beginning.\n# The `last` flag is also important. It will cause NGINX not to\n# execute any more rewrites, because it would redirect forever\n# with the rewrites below.\nrewrite ^/subfolder/(.*)          /$1             last;\n\n# Make sure redirects are NOT absolute, to ensure NGINX does not\n# overwrite the host of the URL - which could be something other than\n# what NGINX currently thinks it is serving.\nabsolute_redirect off;\n\n# If a request just has `/subfolder` we 301 redirect to `/subfolder/`\n# (Drupal really likes a trailing slash)\nrewrite ^/subfolder               /subfolder/     permanent;\n\n# Any other request we prefix 301 redirect with `/subfolder/`\nrewrite ^\\/(.*)                   /subfolder/$1   permanent;\n

    Replace /subfolder with the name of the subfolder you want to use. For example, /blog.

    "},{"location":"applications/drupal/subfolders/#nginx-dockerfile_1","title":"NGINX Dockerfile","text":"

    We also need to modify the NGINX Dockerfile.

    Add the following to your NGINX Dockerfile (nginx.dockerfile or Dockerfile.nginx):

    nginx.dockerfile
    COPY location_drupal_append_subfolder.conf /etc/nginx/conf.d/drupal/location_drupal_append_subfolder.conf\nCOPY server_prepend_subfolder.conf /etc/nginx/conf.d/drupal/server_prepend_subfolder.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/*\n
    "},{"location":"applications/drupal/services/","title":"Services","text":""},{"location":"applications/drupal/services/#mariadb-is-the-open-source-successor-to-mysql","title":"MariaDB is the open-source successor to MySQL","text":"

    Learn about MariaDB with Drupal

    Documentation on the plain MariaDB image (the MariaDB-Drupal image is built on this).

    "},{"location":"applications/drupal/services/#redis-is-a-fast-open-source-in-memory-key-value-data-store-for-use-as-a-database-cache-message-broker-and-queue","title":"Redis is a fast, open-source, in-memory key-value data store for use as a database, cache, message broker, and queue","text":"

    Learn about Redis with Drupal.

    Documentation on the Redis-persistent image.

    "},{"location":"applications/drupal/services/#solr-is-an-open-source-search-platform","title":"Solr is an open-source search platform","text":"

    Learn about Solr with Drupal.

    Documentation on the plain Solr image (the Solr-Drupal image is built on this).

    "},{"location":"applications/drupal/services/#varnish-is-a-powerful-open-source-http-engine-and-reverse-http-proxy-that-helps-to-speed-up-your-website","title":"Varnish is a powerful, open-source HTTP engine and reverse HTTP proxy that helps to speed up your website","text":"

    Learn about Varnish with Drupal

    Documentation on the plain Varnish image (the Varnish-Drupal image is built on this).

    "},{"location":"applications/drupal/services/mariadb/","title":"MariaDB-Drupal","text":"

    The Lagoon mariadb-drupal Docker image Dockerfile is a customized mariadb image to use within Drupal projects in Lagoon. It differs from the mariadb image only for initial database setup, made by some environment variables:

    Environment Variable Default Description MARIADB_DATABASE drupal Drupal database created at startup. MARIADB_USER drupal Default user created at startup. MARIADB_PASSWORD drupal Password of default user created at startup.

    If the LAGOON_ENVIRONMENT_TYPE variable is set to production, performances are set accordingly by using MARIADB_INNODB_BUFFER_POOL_SIZE=1024 and MARIADB_INNODB_LOG_FILE_SIZE=256.

    "},{"location":"applications/drupal/services/mariadb/#additional-mariadb-logging","title":"Additional MariaDB Logging","text":"

    During the course of development, it may be necessary to enable either query logging or slow query logging. To do so, set the environment variables MARIADB_LOG_SLOW or MARIADB_LOG_QUERIES. This can be done in docker-compose.yml.

    "},{"location":"applications/drupal/services/mariadb/#connecting-to-mysql-container-from-the-host","title":"Connecting to MySQL container from the host","text":"

    If you would like to connect to your MySQL database inside the Docker container with an external tool like Sequel Pro, MySQL Workbench, HeidiSQL, DBeaver, plain old mysql-cli or anything else, here's how to get the IP and port info.

    "},{"location":"applications/drupal/services/mariadb/#get-published-mysql-port-from-the-container","title":"Get published MySQL port from the container","text":"

    By default, Docker assigns a randomly published port for MySQL during each container start. This is done to prevent port collisions.

    To get the published port via docker:

    Run: docker port [container_name].

    Get port
    $ docker port drupal_example_mariadb_1\n3306/tcp -> 0.0.0.0:32797\n

    Or via docker-compose inside a Drupal repository:

    Run: docker compose port [service_name] [interal_port].

    Set ports
    docker compose port mariab 3306\n0.0.0.0:32797\n
    "},{"location":"applications/drupal/services/mariadb/#setting-a-static-port-not-recommended","title":"Setting a static port (not recommended)","text":"

    During development, if you are using an external database tool, it may become cumbersome to continually check and set the MySQL connection port.

    To set a static port, edit your service definition in your docker-compose.yml.

    docker-compose.yml
      mariadb:\n...\nports:\n- \"33772:3306\" # Exposes port 3306 with a 33772 on the host port. Note by doing this you are responsible for managing port collisions`.\n

    Warning

    By setting a static port you become responsible for managing port collisions.

    "},{"location":"applications/drupal/services/mariadb/#connect-to-mysql","title":"Connect to MySQL","text":"

    Now you can use these details to connect to whatever database management tool you'd like.

    Linux OS X IP/Host IP from container docker.amazee.io Port Published port from container Published port from container Username drupal drupal Password drupal drupal Database drupal drupal"},{"location":"applications/drupal/services/nginx/","title":"NGINX-Drupal","text":"

    The Lagoon nginx-drupal Docker image. Optimized to work with Drupal. Based on Lagoon nginx image.

    "},{"location":"applications/drupal/services/nginx/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    • To keep drupal.conf 's configuration file as clean and customizable as possible, we added include directives in the main sections of the file:server, location /, location @drupal and location @php.
    • Further information in the section Drupal.conf customization.
    "},{"location":"applications/drupal/services/nginx/#included-drupal-configuration-drupalconf","title":"Included Drupal configuration (drupal.conf)","text":"

    The image includes a full NGINX working configuration for Drupal 7, 8 and 9. It includes some extra functionalities like:

    • Support for humanstxt Drupal module.
    • Support for robotstxt Drupal module.
    • Disallow access to vagrant directory for local development.
    "},{"location":"applications/drupal/services/nginx/#drupalconf-customization","title":"Drupal.conf customization","text":"

    The drupal.conf file is a customized version of the nginx configuration file, optimized for Drupal. Customers have different ways of customizing it:

    • Modifying it (hard to support in case of errors).
    • Using built-in customization through *.conf files.

    The drupal.conf file is divided into several sections. The sections we've included in our customizations are:

    • server
    • location /
    • location @drupal
    • location @php.

    For each of this section, there are two includes:

    • *_prepend.conf
    • *_append.conf

    Here what the location @drupal section looks like:

    drupal.conf
    location @drupal {\ninclude /etc/nginx/conf.d/drupal/location_drupal_prepend*.conf;\ninclude        /etc/nginx/fastcgi.conf;\nfastcgi_param  SCRIPT_NAME        /index.php;\nfastcgi_param  SCRIPT_FILENAME    $realpath_root/index.php;\nfastcgi_pass   ${NGINX_FASTCGI_PASS:-php}:9000;\ninclude /etc/nginx/conf.d/drupal/location_drupal_append*.conf;\n}\n

    This configuration allows customers to create files called location_drupal_prepend.conf and location_drupal_append.conf, where they can put all the configuration they want to insert before and after the other statements.

    Those files, once created, MUST exist in the nginx container, so add them to Dockerfile.nginx like so:

    dockerfile.nginx
    COPY location_drupal_prepend.conf /etc/nginx/conf.d/drupal/location_drupal_prepend.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/location_drupal_prepend.conf\n
    "},{"location":"applications/drupal/services/nginx/#drupal-core-statistics-module-configuration","title":"Drupal Core Statistics Module Configuration","text":"

    If you're using the core Statistics module, you may run into an issue that needs a quick configuration change.

    With the default NGINX configuration, the request to the tracking endpoint /core/modules/statistics/statistics.php is denied (404).

    This is related to the default NGINX configuration:

    drupal.conf
    location ~* ^.+\\.php$ {\n    try_files /dev/null @drupal;\n}\n

    To fix the issue, we instead define a specific location rule and inject this as a location prepend configuration:

    drupal.conf
    ## Allow access to to the statistics endpoint.\nlocation ~* ^(/core/modules/statistics/statistics.php) {\n      try_files /dev/null @php;\n}\n

    And copy this during the NGINX container build:

    dockerfile.nginx
    # Add specific Drupal statistics module NGINX configuration.\nCOPY .lagoon/nginx/location_prepend_allow_statistics.conf /etc/nginx/conf.d/drupal/location_prepend_allow_statistics.conf\n
    "},{"location":"applications/drupal/services/php-cli/","title":"PHP-CLI-Drupal","text":"

    The Lagoon php-cli-drupal Docker image is optimized to work with Drupal. It is based on the Lagoon php-cli image, and has all the command line tools needed for the daily maintenance of a Drupal website:

    • drush
    • drupal console
    • drush launcher (which will fallback to Drush 8 if there is no site installed Drush found)
    "},{"location":"applications/drupal/services/php-cli/#supported-versions","title":"Supported versions","text":"
    • 7.3 (available for compatibility only, no longer officially supported)
    • 7.4 (available for compatibility only, no longer officially supported) - uselagoon/php-7.4-cli-drupal
    • 8.0 (available for compatibility only, no longer officially supported) - uselagoon/php-8.0-cli-drupal
    • 8.1 Dockerfile - uselagoon/php-8.1-cli-drupal
    • 8.2 Dockerfile - uselagoon/php-8.2-cli-drupal
    • 8.3 Dockerfile - uselagoon/php-8.3-cli-drupal

    All PHP versions use their own Dockerfiles.

    "},{"location":"applications/drupal/services/php-cli/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    "},{"location":"applications/drupal/services/redis/","title":"Redis","text":"

    We recommend using Redis for internal caching. Add the Redis service to docker-compose.yaml.

    docker-compose.yml
      redis:\nimage: uselagoon/redis-5\nlabels:\nlagoon.type: redis\n<< : *default-user # Uses the defined user from top.\nenvironment:\n<< : *default-environment\n

    Also, to configure Redis, add the following to your settings.php.

    "},{"location":"applications/drupal/services/redis/#drupal-7","title":"Drupal 7","text":"settings.php
      if(getenv('LAGOON')){\n    $conf['redis_client_interface'] = 'PhpRedis';\n    $conf['redis_client_host'] = 'redis';\n    $conf['lock_inc'] = 'sites/all/modules/contrib/redis/redis.lock.inc';\n    $conf['path_inc'] = 'sites/all/modules/contrib/redis/redis.path.inc';\n    $conf['cache_backends'][] = 'sites/all/modules/contrib/redis/redis.autoload.inc';\n    $conf['cache_default_class'] = 'Redis_Cache';\n    $conf['cache_class_cache_form'] = 'DrupalDatabaseCache';\n    $conf['cache_class_cache_field'] = 'DrupalDatabaseCache';\n  }\n

    Depending on file system structure, the module paths may need to be updated.

    "},{"location":"applications/drupal/services/redis/#drupal-8","title":"Drupal 8","text":"

    The Drupal 8 config is largely stock. Notably, Redis is disabled while Drupal is being installed.

    settings.php
    if (getenv('LAGOON')){\n  $settings['redis.connection']['interface'] = 'PhpRedis';\n  $settings['redis.connection']['host'] = getenv('REDIS_HOST') ?: 'redis';\n  $settings['redis.connection']['port'] = getenv('REDIS_SERVICE_PORT') ?: '6379';\n  $settings['cache_prefix']['default'] = getenv('LAGOON_PROJECT') . '_' . getenv('LAGOON_GIT_SAFE_BRANCH');\n  // Do not set the cache during installations of Drupal.\n  if (!drupal_installation_attempted() && extension_loaded('redis')) {\n    $settings['cache']['default'] = 'cache.backend.redis';\n    // And allows to use it without the Redis module being enabled.\n    $class_loader->addPsr4('Drupal\\\\redis\\\\', 'modules/contrib/redis/src');\n    $settings['bootstrap_container_definition'] = [\n      'parameters' => [],\n      'services' => [\n        'redis.factory' => [\n          'class' => 'Drupal\\redis\\ClientFactory',\n        ],\n        'cache.backend.redis' => [\n          'class' => 'Drupal\\redis\\Cache\\CacheBackendFactory',\n          'arguments' => ['@redis.factory', '@cache_tags_provider.container', '@serialization.phpserialize'],\n        ],\n        'cache.container' => [\n          'class' => '\\Drupal\\redis\\Cache\\PhpRedis',\n          'factory' => ['@cache.backend.redis', 'get'],\n          'arguments' => ['container'],\n        ],\n        'cache_tags_provider.container' => [\n          'class' => 'Drupal\\redis\\Cache\\RedisCacheTagsChecksum',\n          'arguments' => ['@redis.factory'],\n        ],\n        'serialization.phpserialize' => [\n          'class' => 'Drupal\\Component\\Serialization\\PhpSerialize',\n        ],\n      ],\n    ];\n  }\n}\n
    "},{"location":"applications/drupal/services/redis/#persistent","title":"Persistent","text":"

    Redis can also be configured as a persistent backend.

    docker-compose.yml
    redis:\nimage: uselagoon/redis-5-persistent\nlabels:\nlagoon.type: redis-persistent\nenvironment:\n<< : *default-environment\n
    "},{"location":"applications/drupal/services/redis/#environment-variables","title":"Environment Variables","text":"

    Environment variables are meant to store some common information about Redis.

    Environment Variable Default Description LOGLEVEL notice Redis loglevel DATABASES 1 Number of databases MAXMEMORY 100mb Maximum memory usage of Redis"},{"location":"applications/drupal/services/redis/#redis-failover","title":"Redis Failover","text":"

    Here is a snippet to implement a Redis failover in case of the Redis container not being available (for example, during maintenance)

    The following is inserted into Drupal's active settings.php file.

    settings.php
    if (getenv('LAGOON')) {\n  $contrib_path = is_dir('sites/all/modules/contrib') ? 'sites/all/modules/contrib' : 'sites/all/modules';\n  $redis = DRUPAL_ROOT . '/sites/all/modules/contrib/redis';\n  if (file_exists(\"$redis/redis.module\")) {\n    require_once \"$redis/redis.module\";\n    $conf['redis_client_host'] = getenv('REDIS_HOST') ?: 'redis';\n    $conf['redis_client_port'] = getenv('REDIS_SERVICE_PORT') ?: 6379;\n    $conf['cache_prefix'] = getenv('REDIS_CACHE_PREFIX') ?: getenv('LAGOON_PROJECT') . '_' . getenv('LAGOON_GIT_SAFE_BRANCH');\n    try {\n      // Ensure that there is a connection to redis.\n      $client = Redis_Client::getClient();\n      $response = $client->ping();\n      if (!$response) {\n      throw new \\Exception('Redis could be reached but is not responding correctly.');\n      }\n      $conf['redis_client_interface'] = 'PhpRedis';\n      $conf['lock_inc'] = $contrib_path . '/redis/redis.lock.inc';\n      $conf['path_inc'] = $contrib_path . '/redis/redis.path.inc';\n      $conf['cache_backends'][] = $contrib_path . '/redis/redis.autoload.inc';\n      $conf['cache_default_class'] = 'Redis_Cache';\n    } catch (\\Exception $e) {\n      // Redis is not available for this request we should not configure the\n      // redis backend and ensure no cache is used. This will retry next\n      // request.\n      if (!class_exists('DrupalFakeCache')) {\n        $conf['cache_backends'][] = 'includes/cache-install.inc';\n      }\n      $conf['cache_default_class'] = 'DrupalFakeCache';\n    }\n  }\n}\n
    "},{"location":"applications/drupal/services/solr/","title":"Solr-Drupal","text":""},{"location":"applications/drupal/services/solr/#standard-use","title":"Standard use","text":"

    For Solr 8 and 9, we ship the default schema files provided by the search_api_solr Drupal module. Add the Solr version you would like to use in your docker-compose.yml file, following our example.

    "},{"location":"applications/drupal/services/solr/#custom-schema","title":"Custom schema","text":"

    To implement schema customizations for Solr in your project, look to how Lagoon creates our standard images.

    • In the solr section of your docker-compose.yml file, replace image: uselagoon/solr:8 with:
    docker-compose.yml
      build:\ncontext: .\ndockerfile: solr.dockerfile\n
    • Place your schema files in your code repository. We typically like to use .lagoon/solr.
    • Create a solr.dockerfile.
    solr.dockerfile
    FROM uselagoon/solr:8\n\nCOPY .lagoon/solr /solr-conf/conf\n\nCMD solr-recreate drupal /solr-conf && solr-foreground\n

    The goal is to have your Solr configuration files exist at /solr-conf/conf in the image you are building.

    "},{"location":"applications/drupal/services/solr/#multiple-cores","title":"Multiple cores","text":"

    To implement multiple cores, you will also need to ship your own Solr schema as above. The only change needed is to the CMD of the Dockerfile - repeat the pattern of precreate-core corename /solr-conf/ ; for each core you require.

    solr.dockerfile
    FROM uselagoon/solr:8-drupal\n\nCMD solr-recreate drupal /solr-conf && solr-recreate more-drupal /solr-conf && solr-foreground\n
    "},{"location":"applications/drupal/services/varnish/","title":"Varnish","text":"

    We suggest using Drupal with a Varnish reverse proxy. Lagoon provides a varnish-drupal Docker image that has Varnish already configured with a Drupal Varnish config.

    This Varnish config does the following:

    • It understands Drupal session cookies and automatically disables the Varnish caching for any authenticated request.
    • It automatically caches any assets (images, css, js, etc.) for one month, and also sends this header to the browser, so browser cache the assets as well. This happens for authenticated and non-authenticated requests.
    • It has support for BAN and URIBAN which is used by the Drupal 8 purge module.
    • It removes utm_ and gclid from the URL parameter to prevent Google Analytics links from creating multiple cache objects.
    • Many other good things - just check out the drupal.vcl.
    "},{"location":"applications/drupal/services/varnish/#usage-with-drupal-8","title":"Usage with Drupal 8","text":"

    TL;DR: Check out the drupal8-advanced example in our examples repo, it ships with the needed modules and needed Drupal configuration.

    Note: many of these examples are on the same drupal-example-simple repo, but different branches/hashes. Be sure to get the exact branch from the examples list!

    "},{"location":"applications/drupal/services/varnish/#install-purge-and-varnish-purge-modules","title":"Install Purge and Varnish Purge modules","text":"

    In order to fully use Varnish with Drupal 8 cache tags, you need to install the Purge and Varnish Purge modules. They ship with many submodules. We suggest installing at least the following:

    • purge
    • purge_drush
    • purge_tokens
    • purge_ui
    • purge_processor_cron
    • purge_processor_lateruntime
    • purge_queuer_coretags
    • varnish_purger
    • varnish_purge_tags

    Grab them all at once:

    Install Purge and Varnish Purge
    composer require drupal/purge drupal/varnish_purge\n\ndrush en purge purge_drush purge_tokens purge_ui purge_processor_cron purge_processor_lateruntime purge_queuer_coretags varnish_purger varnish_purge_tags\n
    "},{"location":"applications/drupal/services/varnish/#configure-varnish-purge","title":"Configure Varnish Purge","text":"
    1. Visit Configuration > Development > Performance > Purge.
    2. Add a purger via Add purger.
    3. Select Varnish Bundled Purger (not the Varnish Purger, see the #Behind the Scenes section, for more information.).
    4. Click the dropdown beside the just added purger and click Configure.
    5. Give it a nice name, Lagoon Varnish sounds good.
    6. Configure it with:

      Configure Varnish Purge
       TYPE: Tag\n\n REQUEST:\n Hostname: varnish\n (or whatever your Varnish is called in docker-compose.yml)\n Port: 8080\n Path: /\n Request Method: BAN\n Scheme: http\n\n HEADERS:\n Header: Cache-Tags\n Value: [invalidations:separated_pipe]\n
    7. Save configuration.

    That's it! If you'd like to test this locally, make sure you read the next section.

    "},{"location":"applications/drupal/services/varnish/#configure-drupal-for-varnish","title":"Configure Drupal for Varnish","text":"

    There are a few other configurations that can be done:

    1. Uninstall the Internal Page Cache Drupal module with drush pmu page_cache. It can cause some weird double caching situations where only the Varnish cache is cleared, but not the internal cache, and changes appear very slowly to the users. Also, it uses a lot of cache storage on big sites.
    2. Change $config['system.performance']['cache']['page']['max_age'] in production.settings.php to 2628000. This tells Varnish to cache sites for up 1 month, which sounds like a lot, but the Drupal 8 cache tag system is so awesome that it will basically make sure that the Varnish cache is purged whenever something changes.
    "},{"location":"applications/drupal/services/varnish/#test-varnish-locally","title":"Test Varnish Locally","text":"

    Drupal setups on Lagoon locally have Varnish and the Drupal caches disabled as it can be rather hard to develop with all them set. This is done via the following:

    • The VARNISH_BYPASS=true environment variable in docker-compose.yml which tells Varnish to basically disable itself.
    • Drupal is configured to not send any cache headers (via setting the Drupal config $config['system.performance']['cache']['page']['max_age'] = 0 in development.settings.php).

    To test Varnish locally, change the following in docker-compose.yml:

    • Set VARNISH_BYPASS to false in the Varnish service section.
    • Set LAGOON_ENVIRONMENT_TYPE to production in the x-environment section.
    • Run docker compose up -d , which restarts all services with the new environment variables.

    Now you should be able to test Varnish!

    Here is a short example assuming there is a node with the ID 1 and has the URL drupal-example.docker.amazee.io/node/1

    1. Run curl -I drupal-example.docker.amazee.io/node/1 and look for these headers:
      • X-LAGOON should include varnish which tells you that the request actually went through Varnish.
      • Age: will be still 0 as Varnish has probably never seen this site before, and the first request will warm the varnish cache.
      • X-Varnish-Cache will be MISS , also telling you that Varnish didn't find a previously cached version of this request.
    2. Now run curl -I drupal-example.docker.amazee.io/node/1 again, and the headers should be:
      • Age: will show you how many seconds ago the request has been cached. In our example it will probably something between 1-30, depending on how fast you are executing the command.
      • X-Varnish-Cache will be HIT, telling you that Varnish successfully found a cached version of the request and returned that one to you.
    3. Change some content at node/1 in Drupal.
    4. Run curl -I drupal-example.docker.amazee.io/node/1 , and the headers should the same as very first request:
      • Age:0
      • X-Varnish-Cache: MISS
    "},{"location":"applications/drupal/services/varnish/#varnish-on-drupal-behind-the-scenes","title":"Varnish on Drupal behind the scenes","text":"

    If you come from other Drupal hosts or have done a Drupal 8 & Varnish tutorial before, you might have realized that there are a couple of changes in the Lagoon Drupal Varnish tutorial. Let's address them:

    "},{"location":"applications/drupal/services/varnish/#usage-of-varnish-bundled-purger-instead-of-varnish-purger","title":"Usage of Varnish Bundled Purger instead of Varnish Purger","text":"

    The Varnish Purger purger sends a BAN request for each cache-tag that should be invalidated. Drupal has a lot of cache-tags, and this could lead to quite a large amount of requests sent to Varnish. Varnish Bundled Purger instead sends just one BAN request for multiple invalidations, separated nicely by pipe (|), which fits perfectly with the Varnish regular expression system of bans. This causes less requests and a smaller ban list table inside Varnish.

    "},{"location":"applications/drupal/services/varnish/#usage-of-purge-late-runtime-processor","title":"Usage of Purge Late runtime processor","text":"

    Contradictory to the Varnish module in Drupal 7, the Drupal 8 Purge module has a slightly different approach to purging caches: It adds them to a queue which is then processed by different processors. Purge suggests using the Cron processor , which means that the Varnish cache is only purged during a cron run. This can lead to old data being cached by Varnish, as your cron is probably not configured to run every minute or so, and can result in confused editors and clients.

    Instead, we suggest using the Purge Late runtime processor, which processes the queue at the end of each Drupal request. This has the advantage that if a cache-tag is added to the purge queue (because an editor edited a Drupal node, for example) the cache-tags for this node are directly purged. Together with the Varnish Bundled Purger, this means just a single additional request to Varnish at the very end of a Drupal request, which causes no noticeable processing time on the request.

    "},{"location":"applications/drupal/services/varnish/#full-support-for-varnish-ban-lurker","title":"Full support for Varnish Ban Lurker","text":"

    Our Varnish configurations have full support for Ban Lurker. Ban Lurker helps you to maintain a clean cache and keep Varnish running smoothly. It is basically a small tool that runs through the Varnish ban list and compares them to the cached requests in the Varnish cache. Varnish bans are used to mark an object in the cache for purging. If Ban Lurker finds an item that should be \"banned,\" it removes them from the cache and also removes the ban itself. Now any seldom-accessed objects with very long TTLs which would normally never be banned and just keep taking up cache space are removed and can be refreshed. This keeps the list of bans small and with that, less processing time for Varnish on each request. Check out the official Varnish post on Ban Lurker and some other helpful reading for more information.

    "},{"location":"applications/drupal/services/varnish/#troubleshooting","title":"Troubleshooting","text":"

    Varnish doesn't cache? Or something else not working? Here a couple of ways to debug:

    • Run drush p-debug-en to enable debug logging of the purge module. This should show you debugging in the Drupal log under admin/reports/dblog.
    • Make sure that Drupal sends proper cache headers. To best test this, use the URL that Lagoon generates for bypassing the Varnish cache, (locally in our Drupal example this is http://nginx-drupal-example.docker.amazee.io). Check for the Cache-Control: max-age=900, public header, where the 900 is what you configured in $config['system.performance']['cache']['page']['max_age'].
    • Make sure that the environment variable VARNISH_BYPASS is not set to true (see docker-compose.yml and run docker compose up -d varnish to make sure the environment variable is configured correctly).
    • If all fails, and before you flip your table (\u256f\u00b0\u25a1\u00b0\uff09\u256f\ufe35 \u253b\u2501\u253b, talk to the Lagoon team, we're happy to help.
    "},{"location":"community/discord/","title":"Lagoon Community on Discord","text":"

    Our official community meeting space is the Lagoon Discord.

    We\u2019re starting this community as a place for all Lagoon users to collaborate, solve problems, share ideas, and contribute back to the Lagoon project. We\u2019re working to consolidate our community as it\u2019s currently spread out over Slack and various other places. We also wanted to invite all of our users and customers to join so that everyone can benefit from the community, no matter how they\u2019re using Lagoon.

    Please remember that this is not to replace your current support channels - those will remain the same. This is a place to connect with other users as well as the Lagoon maintainers.

    We ask that all community members review our Participation and Moderation Guidelines, as well as the Code of Conduct.

    "},{"location":"community/discord/#community-hours","title":"Community Hours","text":"

    Our Community hours are currently on hold as we survey the community to better determine the community's needs. Please fill our the survey here.

    If you need a hand with Lagoon, please reach out on Discord or shoot us an email at uselagoon@amazee.io.

    "},{"location":"community/moderation/","title":"Lagoon Moderation Guidelines","text":"

    These guidelines have been adapted from Drupal Diversity & Inclusion\u2019s Moderation Guidelines.

    In Lagoon spaces, strive to promote understanding, empathy, and increase personal awareness of all people. This includes people from across the Drupal Community and the greater Technical Community, even those you may personally disagree with.

    If kicked from the Discord, the kicked user can send a private message (PM) to the kicker or another Moderator, if desired, for re-admittance. If a disruptive person is engaging in what appears to be intentionally inflammatory, bullying, or harassing behavior provoking hostile responses (or acting in a hostile manner), kicking is faster and easier than trying to placate a disruptive person whose behavior is causing distress to other channel members.

    The kick is not a ban. There are times when disruptive or triggering comments and statements are genuine and break the lines of communication between two parties. By speaking with a Moderator, the (potentially) disruptive person can be coached on using more sensitive, inclusive, and diverse-aware language, and on engaging in a more constructive manner.

    "},{"location":"community/moderation/#tiered-responses","title":"Tiered Responses","text":"
    1. Tier One Response

      User is welcomed in the channel, asked to read some scroll back, and given a link to participation guidelines.

    2. Tier Two Response

      User is gently reminded in channel to keep posts on topic, and/or of participation guidelines.

    3. Tier Three Response

      User is PM\u2019d by available Moderator to explain the problem(s) with their posts and given suggestions of what to do differently.

    4. Tier Four Response

      If behavior continues, User is kicked for no less than 24 hours from the Discord.

    "},{"location":"community/moderation/#non-tiered-response-banning","title":"Non-Tiered Response Banning","text":"

    Intentionally disruptive individuals get kicked, not tiered. Repeated offenses will result in a ban.

    "},{"location":"community/participation/","title":"Lagoon Participation Guidelines","text":"

    We ask that all members of our community, in any spaces, virtual or physical, adhere to our Code of Conduct.

    These guidelines have been adapted from Drupal Diversity & Inclusion\u2019s Participation Guidelines.

    1. Listen actively, read carefully, and be understanding.
      • If joining a conversation, read the backlog. Give other Participants the opportunity to communicate effectively.
      • Assume good intent behind other Participants\u2019 statements. The open-source software community is very diverse, with Participants from all over the globe. Be aware of cultural and linguistic quirks.
      • There are also many Participants who are new to this space. Assume that they have good intent but have not yet mastered the language or ideas. We want to help them!
    2. Speak from your own experience, instead of generalizing. Recognize the worth of others\u2019 experience. Try not to speak for others.
      • Use \u201cI\u201d instead of \u201cthey,\u201d \u201cwe,\u201d and \u201cyou\u201d.
      • All Participants should recognize that other Participants have their own unique experiences.
      • Don\u2019t invalidate another Participant\u2019s story with your own spin on their experience. Instead, share your own story and experience.
    3. Challenge ideas, feelings, concerns, or one another by asking questions. Refrain from personal attacks. Focus on ideas first.
      • Avoid verbal challenges, backhanded insults, gender/race/region stereotyping, etc.
    4. Take part to the fullest of your ability and availability.
      • Community growth depends on the inclusion of individual voices. The channel wants you to speak up and speak out. Everyone has a different amount of time to contribute. We value participation here if you can give 5 minutes or 5 hours.
      • We do welcome those who quietly come to lurk and learn, or \u201clurk,\u201d but please introduce yourself and say hello!
    5. Accept that it is not always the goal to agree.
      • There are often many different \u201cright\u201d answers to technical issues, even though they may not work for your setup.
    6. Be conscious of language differences and unintended connotations.
      • \u201cText is hard\u201d - be aware that it is difficult to communicate effectively via text.
    7. Acknowledge individuals\u2019 identities.
      • Use stated names and pronouns. Do not challenge a person\u2019s race, sexuality, disability, etc.
      • f you are unsure how to address someone, ask them discreetly and respectfully. For example, if you are unsure what pronouns to use, send a private message and ask. Using the correct pronouns will help others.
    8. Some off-topic conversation is okay.
      • Some cross posting of announcements is okay. The following is not permitted:
        • Thread hijacking
        • Spamming
        • Commercial advertising
        • Overt self-promotion
        • Excessive going off-topic, especially during official meeting times or focused conversations
      • Consider announcing more appropriate places or times for in-depth off-topic conversations.
      • If you are not sure what\u2019s appropriate, please contact an admin.
    9. Sharing content from inside Lagoon spaces must only be done with explicit consent. Any sharing must also be carefully considered, and without harassment or intent to harm any Participants.
      • This forum should be considered public. Assume that anyone can and may read anything posted here.
      • When sharing any Lagoon content, permission from all Participants must be obtained first. This applies whether content is quoted, summarized, or screenshotted. This includes sharing in any public medium: on Twitter, in a blog post, in an article, on a podcast, etc. These spaces are where the discussion and work in progress is taking place. Removing snippets of a conversation takes away context. This can distort and discourage discussion, especially when this is done without the goal of driving the Lagoon project forward.
      • As stated above, if you take screenshots and post them to social media or other forums, you must get permission from the person that posted it. When getting permission, include the option of removing identifying information. Permission is still needed even if identifying information is removed. This includes any content from Discord, Github, or any other Lagoon medium.
      • If you want to share something, just ask! \u201cHey, is it ok to share this on Twitter? I\u2019m happy to credit you!\u201d
      • If it is necessary for a participant to take a screenshot to report harassing behavior to Lagoon moderators, this may be done without obtaining permission. It is not, however, acceptable to take screenshots to publicly or privately shame an individual. Again, this applies only to reporting harassing behavior.
    10. Address complaints between one another in the space when safe and appropriate.
      • When safe, try to clarify and engage in the space where the conflict happened. For example, in the Discord channel.
      • Ping admins or Community Manager (Alanna) when conflict is escalating.
      • Ask for help.
      • If the topic of conflict is off-topic for Lagoon, move the conversation to a more appropriate channel.

    Additional considerations for in-person Lagoon spaces

    1. Follow the event\u2019s Code of Conduct, if there is one. If not, our Code of Conduct applies.
    2. Do not touch people, their mobility devices, or other assistive equipment without their consent. If someone asks you to stop a certain behavior, stop immediately.
    3. Report any issues to the event\u2019s staff. If an issue involves Lagoon team members, report to uselagoon@amazee.io.

    The Lagoon team reserves the right to terminate anyone\u2019s access to the Lagoon spaces.

    "},{"location":"concepts-advanced/","title":"Advanced Lagoon Concepts","text":"

    This section covers some of the more advanced concepts in Lagoon. If you're new to Lagoon, start with Basic Lagoon Concepts.

    If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our Discord.

    "},{"location":"concepts-advanced/backups/","title":"Backups","text":"

    Lagoon makes use of the k8up operator to provide backup functionality for both database data as well as containers' persistent storage volumes. This operator utilizes Restic to catalog these backups, which is typically connected to an AWS S3 bucket to provide secure, off-site storage for the generated backups.

    "},{"location":"concepts-advanced/backups/#production-environments","title":"Production Environments","text":""},{"location":"concepts-advanced/backups/#backup-schedules","title":"Backup Schedules","text":"

    Backups of databases and containers' persistent storage volumes happens nightly within production environments by default.

    If a different backup schedule for production backups is required, this can be specified at a project level via setting the \"Backup Schedule\" variables in the project's .lagoon.yml file.

    "},{"location":"concepts-advanced/backups/#backup-retention","title":"Backup Retention","text":"

    Production environment backups will be held according to the following schedule by default:

    • Daily: 7
    • Weekly: 6
    • Monthly: 1
    • Hourly: 0

    If a different retention period for production backups is required, this can be specified at a project level via setting the \"Backup Retention\" variables in the project's .lagoon.yml file.

    "},{"location":"concepts-advanced/backups/#development-environments","title":"Development Environments","text":"

    Backups of development environments are attempted nightly and are strictly a best effort service.

    "},{"location":"concepts-advanced/backups/#retrieving-backups","title":"Retrieving Backups","text":"

    Backups stored in Restic will be tracked within Lagoon, and can be recovered via the \"Backup\" tab for each environment in the Lagoon UI.

    "},{"location":"concepts-advanced/backups/#custom-backup-andor-restore-locations","title":"Custom Backup and/or Restore Locations","text":"

    Lagoon supports custom backup and restore locations via the use of the \"Custom Backup Settings\" and/or \"Custom Restore Settings\" variables stored in the Lagoon API for each project.

    Danger

    Proceed with caution: Setting these variables will override backup/restore storage locations that may be configured at a cluster level. Any misconfiguration will cause backup/restore failures.

    "},{"location":"concepts-advanced/base-images/","title":"Base Images","text":""},{"location":"concepts-advanced/base-images/#what-is-a-base-image","title":"What is a base image?","text":"

    A base image is a Docker image that can be and is used by a project deployed on Lagoon. A base image provides a way to ensure that nothing is brought into the codebase/project from upstream that has not been audited. It also allows us to ensure that anything we might need on the deployed environment is available - from lower-level libraries to application-level themes and modules.

    Base images save time and resources when you know what system is being deployed to - if shared packages are included in the base image, they don\u2019t have to be deployed to hundreds of sites individually.

    "},{"location":"concepts-advanced/base-images/#derived-images","title":"Derived images","text":"

    A derived image is one that extends a base image. For example, you might need to make several blog sites. You take our Drupal image, customize it to include all of the modules and themes you need for your blog sites, and deploy them all with that blog image. Templates are derived from base images.

    All derived images should pull in the composer.json file (via repositories like Packagist, Satis, or GitHub) so that they are using the most recent versions of the base packages.

    Further, the derived image includes a call to the script /build/pre_composer, which can be used by the base image to run scripts, updates, etc., downstream in the derived images. For instance, it should run by default when any package is updated or installed at the derived image, and the pre_composer script will then update the base image package.

    "},{"location":"concepts-advanced/base-images/#anatomy-of-a-base-image","title":"Anatomy of a base image","text":"

    Info

    This document will talk about Drupal and Laravel base images as examples, as it was originally written for a client who uses those technologies in their Lagoon projects. It will be expanded to cover the contents of other base images, but none of the processes differ, no matter what the content of your base image.

    Base images are managed with Composer and hosted in BitBucket, GitHub, or GitLab (whatever your team is using). Each base image has its own repository.

    "},{"location":"concepts-advanced/base-images/#metapackages","title":"Metapackages","text":"

    The metapackage is a Composer package that wraps several other components. These include, for example, the core files for Laravel or Drupal, along with any needed modules or themes. This way, you do not need to include Laravel or Drupal, etc., as a dependency in your project.

    Here\u2019s an example from the composer.json in a Laravel base image:

    composer.json
    \"require\": {\n    \"amazeelabs/algm_laravel_baseimage\": \"*\"\n},\n

    We only require this metapackage, which points to a GitHub repository.

    "},{"location":"concepts-advanced/base-images/#docker-composeyml","title":"docker-compose.yml","text":"

    Other pieces of your project are defined in docker-compose.yml. For example, if you have a Drupal project, you need the Drupal image, but you also need MariaDB, Solr, Redis, and Varnish. We have versions of these services optimized for Drupal, all of which are included in docker-compose.yml.

    "},{"location":"concepts-advanced/base-images/#drupal","title":"Drupal","text":"

    The Drupal base image contains the following contributed tools and modules, in addition to Drupal core:

    • Drupal Console
    • Drush
    • Configuration Installer
    • Redis
    • Poll
    • Search API
    • Search API Solr
    • Varnish Purge
    • Purge
    • Admin Toolbar
    • CDN
    • Password Policy
    • Pathauto
    • Ultimate Cron
    "},{"location":"concepts-advanced/base-images/#laravel","title":"Laravel","text":""},{"location":"concepts-advanced/base-images/#configuration","title":"Configuration","text":"

    The base images have provided the default values for the environment variables used by Laravel.

    These are values for:

    • DB_CONNECTION
    • DB_HOST
    • DB_PORT
    • DB_DATABASE
    • DB_USERNAME
    • DB_PASSWORD
    • REDIS_HOST
    • REDIS_PASSWORD
    • REDIS_PORT

    Ensure that your config files (typically located in /config) make use of these by default.

    "},{"location":"concepts-advanced/base-images/#queues","title":"Queues","text":"

    If your project makes use of queues, you can make use of the artisan-worker service. It is a worker container, used for executing artisan queue:work. This is disabled by default - look at the comments in docker-compose.yml.

    "},{"location":"concepts-advanced/base-images/#understanding-the-process-of-building-a-base-image","title":"Understanding the process of building a base image","text":"

    There are several parts to the process of building a base image. All of the major steps are represented in the Makefile. The Jenkinsfile contains a more stripped-down view. Taking a look at both files will give you a good understanding of what happens during this process. Most steps can be tested locally (this is important when building new versions of the base image). After you\u2019ve created and tested everything locally and pushed it up, the actual base image is built by Jenkins and pushed to Harbor.

    "},{"location":"concepts-advanced/base-images/#makefile-and-build-assumptions","title":"Makefile and build assumptions","text":"

    If you're planning on running locally, there are some minimum environment variables that need to be present to build at all.

    "},{"location":"concepts-advanced/base-images/#base-image-build-variables","title":"Base image build variables","text":"

    Variables injected into the base image build process and where to find them.

    • BUILD_NUMBER - This is injected by Jenkins automatically.
    • GIT_BRANCH - This is provided by the Jenkins build process itself. Depends on the branch being built at the time (develop, main, etc.).
    • DOCKER_REPO/DOCKER_HUB - This is defined inside the Jenkinsfile itself. It points to the Docker project and hub into which the resulting images will be pushed.
    • DOCKER_USERNAME/DOCKER_PASSWORD - These are used to actually log into the Docker repository early in the build. These variables are stored inside of the Jenkins credentials. These are used in the Jenkinsfile itself and are not part of the Makefile. This means that if you\u2019re building base images outside of Jenkins (i.e. locally, to test, etc.) you have to run a docker login manually before running any of the make steps.

    In practice, this means that if you're running any of the make targets on your local machine, you'll want to ensure that these are available in the environment - even if this is just setting them when running make from the command line, as an example:

    Setting make targets locally
    GIT_BRANCH=example_branch_name DOCKER_HUB=the_docker_hub_the_images_are_pushed_to DOCKER_REPO=your_docker_repo_here BUILD_NUMBER=<some_integer> make images_remove\n
    "},{"location":"concepts-advanced/base-images/#makefile-targets","title":"Makefile targets","text":"

    The most important targets are the following:

    • images_build : Given the environment variables, this will build and tag the images for publication.
    • images_publish : Pushes built images to a Docker repository.
    • images_start : Will start the images for testing, etc.
    • images_test: Runs basic tests against images.
    • images_remove: Removes previously built images, given the build environment variables.
    "},{"location":"concepts-advanced/base-images/#example-workflow-for-building-a-new-release-of-a-base-image","title":"Example workflow for building a new release of a base image","text":"

    There are several steps to the build process. Most of these are shared among the various base images. These mostly correspond to the Makefile target described above.

    1. Docker Login - The Docker username, password, and URL for Harbor are passed to the Docker client.
    2. Docker Build - The make images_build step is run now, which will:
      1. Ensure that all environment variables are prepared for the build.
      2. Run a docker compose build. This will produce several new Docker images from the current Git branch.
    3. Images Test - This will run the make images_test target, which will differ depending on the images being tested. In most cases this is a very straightforward test to ensure that the images can be started and interacted with in some way (installing Drupal, listing files, etc.)
    4. Docker Push - This step runs the logic (contained in the make target images_publish) that will tag the images resulting from the Docker Build in Step 2 and push them to Harbor. This is described in more detail elsewhere in this guide.
    5. Docker Clean Images - Runs the make target images_remove, which simply deletes the newly built images from the Docker host now that they are in Harbor.
    "},{"location":"concepts-advanced/base-images/#releasing-a-new-version-of-a-base-image","title":"Releasing a new version of a base image","text":"

    There are many reasons to release a new version of a base image. On Drupal or Laravel, Node.js, etc. images, it may be in order to upgrade or install a module/package for features or security. It may be about the underlying software that comes bundled in the container, such as updating the version of PHP or Node.js. It may be about updating the actual underlying images on which the base images are built.

    The images that your project's base images are built on are the managed images maintained by the Lagoon team. We release updates to these underlying images on a monthly (or more fequent) basus. When these are updated, you need to build new versions of your own base images in order to incorporate the changes and upgrades bundled in the upstream images.

    In this section we will demonstrate the process of updating and tagging a new release of the Drupal 8 base image. We will add a new module (ClamAV) to the base. We\u2019re demonstrating on Drupal because it has the most complex setup of the base images. The steps that are common to every base image are noted below.

    "},{"location":"concepts-advanced/base-images/#step-1-pull-down-the-base-image-locally","title":"Step 1 - Pull down the base image locally","text":"

    This is just pulling down the Git repository locally. In the case of the Drupal 8 base image. In this example, we're using Bitbucket, so we will run:

    Clone Git repo.
    git clone ssh://git@bitbucket.biscrum.com:7999/webpro/drupal8_base_image.git\n

    "},{"location":"concepts-advanced/base-images/#step-2-make-the-changes-to-the-repository","title":"Step 2 - Make the changes to the repository","text":"

    Info

    What is demonstrated here is specific to the Drupal 8 base image. However, any changes (adding files, changing base Docker images, etc.) will be done in this step for all of the base images.

    In our example, we are adding the ClamAV module to the Drupal 8 base image. This involves a few steps. The first is requiring the package so that it gets added to our composer.json file. This is done by running a composer require.

    Here we run:

    Install package with Composer require.
    composer require drupal/clamav\n

    When the Composer require process completes, the package should then appear in the composer.json file.

    Here we open the composer.json file and take a look at the list of required packages, and check that the ClamAV package is listed, and see that it is there:

    "},{"location":"concepts-advanced/base-images/#step-22-ensure-that-the-required-drupal-module-is-enabled-in-template-based-derived-images","title":"Step 2.2 - Ensure that the required Drupal module is enabled in template-based derived images","text":"

    For any modules now added to the base image, we need to ensure that they\u2019re enabled on the template-based derived images. This is done by adding the module to the Lagoon Bundle module located at ./web/modules/lagoon/lagoon_bundle. Specifically, it requires you to add it as a dependency to the dependencies section of the lagoon_bundle.info.yml file. The Lagoon Bundle module is a utility module that exists only to help enforce dependencies across derived images.

    Here we open web/modules/contrib/lagoon/lagoon_bundle/lagoon_bundle.info.yml and add clamav:clamav as a dependency:

    Adding a dependency to this will ensure that whenever the Lagoon Bundle module is enabled on the derived image, its dependencies (in this case, the just-added ClamAV module) will also be enabled. This is enforced by a post-rollout script which enables lagoon_bundle on the derived images when they are rolled out.

    "},{"location":"concepts-advanced/base-images/#step-23-test","title":"Step 2.3 - Test","text":"

    This will depend on what you\u2019re testing. In the case of adding the ClamAV module, we want to ensure that in the base image, the module is downloaded, and that the Lagoon Bundle module enables ClamAV when it is enabled.

    Here we check that the module is downloaded to /app/web/modules/contrib:

    And then we check that when we enable the lagoon_bundle module, it enables clamav by running:

    Enable module with Drush.
    drush pm-enable lagoon_bundle -y\n

    Warning

    You\u2019ll see that there is a JWT error in the container above. You can safely ignore this in the demonstration above - but, for background, you will see this error when there is no Lagoon environment for the site you\u2019re working on.

    With our testing done, we can now tag and build the images.

    "},{"location":"concepts-advanced/base-images/#step-3-tagging-images","title":"Step 3 - Tagging images","text":"

    Images are versioned based on their Git tags - these should follow standard semantic versioning (semver) practices. All tags should have the structure vX.Y.Z where X, Y, and Z are integers (to be precise the X.Y.Z are themselves the semantic version - the vX.Y.Z is a tag). This is an assumption that is used to determine the image tags, so it must be adhered to.

    In this example we will be tagging a new version of the Drupal 8 base image indicating that we have added ClamAV.

    "},{"location":"concepts-advanced/base-images/#here-we-demonstrate-how-to-tag-an-image","title":"Here we demonstrate how to tag an image","text":"

    We check that we have committed (but not pushed) our changes, just as you would do for any regular commit and push, using git log.

    1. Commit your changes if you haven\u2019t yet.
    2. We then check to see what tag we are on using git tag.
    3. Then, tag them using git tag -a v0.0.9 -m \u201cAdds clamAV to base.\u201d
      1. git -a, --annotate: Make an unsigned, annotated tag object
    4. Next, we push our tags with git push --tags.
    5. And finally, push all of our changes with git push.

    Danger

    The tags must be pushed explicitly in their own step!

    "},{"location":"concepts-advanced/base-images/#how-git-tags-map-to-image-tags","title":"How Git tags map to image tags","text":"

    Danger

    Depending on the build workflow, you will almost certainly push the changes via the develop branch before merging it into the main branch.

    An important point to remember here is that the Jenkins base image build process will tag images based on the most recent commit\u2019s tag.

    Images are tagged using the following rules, and images will be built for each of these that apply:

    1. When the main branch is built, it is tagged as latest.
    2. When the develop branch is built, it is tagged as development.
    3. If the commit being built is tagged then that branch will be built with that commit\u2019s tag.
      1. This is how we release a new version as we demonstrated above. It can also be used to make ad hoc builds with fairly arbitrary tags - be reasonable with the tag names, it has only been tested with semver tags.
    "},{"location":"concepts-advanced/base-images/#step-4-building-the-new-base-images","title":"Step 4 - Building the new base images","text":"

    Info

    Generally you will have a trigger strategy set up here for automatic builds, but as that will differ based on your needs and setup, this explains how to build manually.

    1. Visit your Lagoon Jenkins instance.
    2. Select the project you are working on (in this case, AIOBI Drupal 8 Base).
    3. Click the branch you would like to build.
    4. Click \u201cBuild Now.\u201d

    This will kick off the build process which, if successful, will push up the new images to Harbor.

    If the build is not successful, you can click into the build itself and read the logs to understand where it failed.

    As shown in the screenshot below from Harbor, the image we\u2019ve just built in Jenkins has been uploaded and tagged in Harbor, where it will now be scanned for any vulnerabilities. Since it was tagged as v0.0.9, an image with that tag is present, and because we built the main branch, the \u201clatest\u201d image has also been built. At this stage, the v0.0.9 and \u201clatest\u201d images are identical.

    "},{"location":"concepts-advanced/base-images/#acknowledgement","title":"Acknowledgement","text":"

    The base image structure draws heavily (and, in fact, is a fork of) Denpal. It is based on the original Drupal Composer Template, but includes everything necessary to run on Lagoon (either the local development environment or on hosted Lagoon).

    "},{"location":"concepts-advanced/environment-idling/","title":"Environment Idling (optional)","text":""},{"location":"concepts-advanced/environment-idling/#what-is-the-environment-idler","title":"What is the Environment Idler?","text":"

    Lagoon can utilize the Aergia controller, (installed in the lagoon-remote) to automatically idle environments if they have been unused for a defined period of time. This is done in order to reduce the load on the Kubernetes clusters and improve the overall performance of production environments and development environments that are actually in use.

    "},{"location":"concepts-advanced/environment-idling/#how-does-an-environment-get-idled","title":"How does an environment get idled?","text":"

    The environment idler has many different configuration capabilities. Here are the defaults of a standard Lagoon installation (these could be quite different in your Lagoon, contact your Lagoon administrator!)

    • Idling is tried every 4 hours.
    • Production environments are never idled.
    • CLI pods are idled if they don't include a cron job and if there is no remote shell connection active.
    • All other services and pods are idled if there was no traffic on the environment in the last 4 hours.
    • If there is an active build happening, there will be no idling.
    "},{"location":"concepts-advanced/environment-idling/#how-does-an-environment-get-un-idled","title":"How does an environment get un-idled?","text":"

    Aergia will automatically un-idle an environment as soon as it is visited, therefore just visiting any URL of the environment will start the environment. Likewise, initiating an SSH session to the environment will also restart the services.

    The un-idling will take a couple of seconds, as the Kubernetes cluster needs to start all containers again. During this time there will be waiting screen shown to the visitor that their environment is currently started.

    "},{"location":"concepts-advanced/environment-idling/#can-i-disable-prevent-the-idler-from-idling-my-environment","title":"Can I disable / prevent the Idler from idling my environment?","text":"

    The field autoIdle can be set at the project level (impacts all environments) or for a single environment (target just one environment), as to whether idling is allowed to take place. A value of 1 indicates the project/environment is eligible for idling. If the project is set to 0, then all environments will never be idled. The default value is 1 (idling is enabled).

    Contact your Lagoon administrator if you are unsure how to set these project/environment fields.

    "},{"location":"concepts-advanced/environment-types/","title":"Environment Types","text":"

    Lagoon currently differentiates between two different environment types: production and development.

    When setting up your project via the Lagoon GraphQL API, you can define a productionEnvironment. On every deployment Lagoon executes, it checks if the current environment name matches what is defined in productionEnvironment. If it does, Lagoon will mark this environment as the production environment. This happens in two locations:

    1. Within the GraphQL API itself.
    2. As an environment variable named LAGOON_ENVIRONMENT_TYPE in every container.

    But that's it. Lagoon itself handles development and production environments in exactly the same way (in the end we want as few differences of the environments as possible - that's the beauty of Lagoon).

    There are a couple of things that will use this information:

    • By default, development environments are idled after 4 hours with no hits (don't worry, they wake up automatically). It is also possible for your Lagoon administrator to disable auto-idling on a per-environment basis, just ask!
    • Our default Drupal settings.php files load additional settings files for development.settings.php and production.settings.php so you can define settings and configurations different per environment type.
    • If you try to delete an environment that is defined as the production environment (either via webhooks or REST), Lagoon will politely refuse to delete the production environment, as it tries to prevent you from making a mistake. In order to delete a production environment, you can either change the productionEnvironment in the API or use the secret forceDeleteProductionEnvironment: true POST payload for the REST API.
    • Sometimes your Lagoon administrator might use the production environment information for some additional things, such as calculating only the hits of the production environments to calculate the price of the hosting.
    "},{"location":"concepts-advanced/environment-variables/","title":"Environment Variables","text":"

    It is common to store API tokens or credentials for applications in environment variables.

    Following best practices, those credentials are different per environment. We allow each environment to use a separate set of environment variables defined in environment variables or environment files.

    As there can be environment variables defined in either the Dockerfile or during runtime (via API environment variables), we have a hierarchy of environment variables: environment variables defined in lower numbers are stronger.

    1. Environment variables (defined via Lagoon API) - environment specific.
    2. Environment variables (defined via Lagoon API) - project-wide.
    3. Environment variables defined in Dockerfile (ENV command).
    4. Environment variables defined in .lagoon.env.$LAGOON_GIT_BRANCH or .lagoon.env.$LAGOON_GIT_SAFE_BRANCH (if the file exists and where $LAGOON_GIT_BRANCH $LAGOON_GIT_SAFE_BRANCH are the name and safe name of the branch this Docker image has been built for), use this for overwriting variables for only specific branches.
    5. Environment variables defined in .lagoon.env (if it exists), use this for overwriting variables for all branches.
    6. Environment variables defined in .env.
    7. Environment variables defined in .env.defaults.

    .lagoon.env.$LAGOON_GIT_BRANCH, .lagoon.env.$LAGOON_GIT_SAFE_BRANCH, .env, and .env.defaults are all sourced by the individual containers themselves as part of running their entrypoint scripts. They are not read by Lagoon, but by the containers ENTRYPOINT scripts, which look for them in the containers working directory. If environment variables don't appear as expected, check if your container has a WORKDIR setting that points to somewhere else.

    "},{"location":"concepts-advanced/environment-variables/#environment-variables-lagoon-api","title":"Environment Variables (Lagoon API)","text":"

    We suggest using the Lagoon API environment variable system for variables that you don't want to keep in your Git repository (like secrets or API keys), as they could be compromised by somebody having them on their local development environment or on the internet, etc.

    The Lagoon API allows you to define project-wide or environment-specific variables. Additionally, they can be defined for a scope-only build-time or runtime. They are all created via the Lagoon GraphQL API. Read more on how to use the GraphQL API in our GraphQL API documentation.

    "},{"location":"concepts-advanced/environment-variables/#runtime-environment-variables-lagoon-api","title":"Runtime Environment Variables (Lagoon API)","text":"

    Runtime environment variables are automatically made available in all containers, but they are only added or updated after an environment has been re-deployed.

    This defines a project wide runtime variable (available in all environments) for the project with ID 463:

    Add runtime variable
    mutation addRuntimeEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:RUNTIME,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"\n}\n) {\nid\n}\n}\n

    This defines a environment ID 546 specific runtime variable (available only in that specific environment):

    Define environment ID
    mutation addRuntimeEnv {\naddEnvVariable(\ninput:{\ntype:ENVIRONMENT,\ntypeId:546,\nscope:RUNTIME,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"\n}\n) {\nid\n}\n}\n
    "},{"location":"concepts-advanced/environment-variables/#build-time-environment-variables-lagoon-api","title":"Build-time Environment Variables (Lagoon API)","text":"

    Build-time environment variables are only available during a build and need to be consumed in Dockerfiles via:

    Using build-time environment variables
    ARG MYVARIABLENAME\n

    Typically the ARG will go after the FROM. Read the docker documentation about ARG and FROM.

    This defines a project-wide build-time variable (available in all environments) for the project with ID 463:

    Define a project-wide build-time variable
    mutation addBuildtimeEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:BUILD,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"}\n) {\nid\n}\n}\n

    This defines an environment ID 546specific build-time variable (available only in that specific environment):

    Define environment ID
    mutation addBuildtimeEnv {\naddEnvVariable(input:{type:ENVIRONMENT, typeId:546, scope:BUILD, name:\"MYVARIABLENAME\", value:\"MyVariableValue\"}) {\nid\n}\n}\n

    Container registry environment variables are only available during a build and are used when attempting to log in to a private registry. They are used to store the password for the user defined in Specials \u00bb container-registries. They can be applied at the project or environment level.

    This defines a project-wide container registry variable (available in all environments) for the project with ID 463:

    Define project-wide container registry variable
    mutation addContainerRegistryEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:CONTAINER_REGISTRY,\nname:\"MY_OWN_REGISTRY_PASSWORD\",\nvalue:\"MySecretPassword\"})\n) {\nid\n}\n}\n

    This defines a environment ID 546 specific container registry variable (available only in that specific environment):

    Define environment ID
    mutation addContainerRegistryEnv {\naddEnvVariable(\ninput:{\ntype:ENVIRONMENT,\ntypeId:546,\nscope:CONTAINER_REGISTRY,\nname:\"MY_OWN_REGISTRY_PASSWORD\",\nvalue:\"MySecretPassword\"}\n) {\nid\n}\n}\n
    "},{"location":"concepts-advanced/environment-variables/#global-environment-variables-lagoon-api","title":"Global Environment Variables (Lagoon API)","text":"

    Global environment variables are available as both a build-time environment variable so that it may be consumed by builds, and also a runtime variable so that it is available within running containers.

    "},{"location":"concepts-advanced/environment-variables/#environment-files-existing-directly-in-the-git-repo","title":"Environment Files (existing directly in the Git Repo)","text":"

    If you have environment variables that can safely be saved within a Git repository, we suggest adding them directly into the Git repository in an environment file. These variables will also be available within local development environments and are therefore more portable.

    The syntax in the environment files is as following:

    myenvironment.env
    MYVARIABLENAME=\"MyVariableValue\"\nMVARIABLENUMBER=4242\nDB_USER=$DB_USERNAME # Redefine DB_USER with the value of DB_USERNAME e.g. if your application expects another variable name for the Lagoon-provided variables.\n
    "},{"location":"concepts-advanced/environment-variables/#lagoonenvbranchname","title":".lagoon.env.$BRANCHNAME","text":"

    If you want to define environment variables different per environment you can create a .lagoon.env.$BRANCHNAME e.g. for the main branch .lagoon.env.main. This helps you keep environment variables apart between environments.

    "},{"location":"concepts-advanced/environment-variables/#env-and-envdefaults","title":".env and .env.defaults","text":"

    .env and .env.defaults will act as the default values for environment variables if none other is defined. For example, as default environment variables for pull request environments (see Workflows).

    "},{"location":"concepts-advanced/environment-variables/#special-environment-variables","title":"Special Environment Variables","text":""},{"location":"concepts-advanced/environment-variables/#php_error_reporting","title":"PHP_ERROR_REPORTING","text":"

    This variable, if set, will define the logging level you would like PHP to use. If not supplied, it will be set dynamically based on whether this is a production or development environment.

    On production environments, this value defaults to E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE.

    On development environments, this value defaults to E_ALL & ~E_DEPRECATED & ~E_STRICT.

    "},{"location":"concepts-advanced/environment-variables/#custom-backup-settings","title":"Custom Backup Settings","text":"

    Lagoon supports custom backup locations and credentials for any project when all four of the following variables are set as BUILD type variables. The environment variables need to be set at the project level (not per environment), and requires a Lagoon deployment after setting them (for every environment).

    Please note that any use of these variables means that all environment and database backups created and managed by Lagoon will be stored using these credentials, meaning that any interruption of these credentials' may lead to failed or inaccessible backups.

    Environment variable name Purpose LAGOON_BAAS_CUSTOM_BACKUP_ENDPOINT Specify the S3 compatible endpoint where any Lagoon initiated backups should be stored. An example for S3 Sydney would be: https://s3.ap-southeast-2.amazonaws.com. LAGOON_BAAS_CUSTOM_BACKUP_BUCKET Specify the bucket name where any Lagoon initiated backups should be stored.An example custom setting would be: example-restore-bucket. LAGOON_BAAS_CUSTOM_BACKUP_ACCESS_KEY Specify the access key Lagoon should use to access the custom backup bucket. An example custom setting would be: AKIAIOSFODNN7EXAMPLE. LAGOON_BAAS_CUSTOM_BACKUP_SECRET_KEY Specify the secret key Lagoon should use to access the custom backup bucket. An example custom setting would be: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

    No public access is needed on the S3 bucket and can be made entirely private.

    Lagoon will automatically prune the files in these S3 buckets, so no object retention policy is needed at the bucket level.

    "},{"location":"concepts-advanced/environment-variables/#custom-restore-location","title":"Custom Restore Location","text":"

    Lagoon supports custom restore locations and credentials for any project when all four of the following variables are set as BUILD type environment variables. The environment variables need to be set at the project level (not per environment), and requires a Lagoon deployment after setting them (for every environment).

    Please note that any use of these variables means that all environment and database snapshots restored by Lagoon will be stored using these credentials. This means that any interruption of these credentials' access may lead to failed or inaccessible restored files.

    Environment variable name Purpose LAGOON_BAAS_CUSTOM_RESTORE_ENDPOINT Specify the S3 compatible endpoint where any Lagoon initiated restores should be stored. An example for S3 Sydney would be: https://s3.ap-southeast-2.amazonaws.com. LAGOON_BAAS_CUSTOM_RESTORE_BUCKET Specify the bucket name where any Lagoon initiated restores should be stored.An example custom setting would be: example-restore-bucket. LAGOON_BAAS_CUSTOM_RESTORE_ACCESS_KEY Specify the access key Lagoon should use to access the custom restore bucket. An example custom setting would be: AKIAIOSFODNN7EXAMPLE. LAGOON_BAAS_CUSTOM_RESTORE_SECRET_KEY Specify the secret key Lagoon should use to access the custom restore bucket. An example custom setting would be: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

    The S3 bucket must have public access enabled, as Lagoon will create presigned URLs for the objects inside the bucket as needed.

    An example AWS IAM policy that you can create to allow access to just the S3 bucket example-restore-bucket is:

    aws_iam_restore_policy.json
    {\n\"Version\": \"2012-10-17\",\n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"s3:GetBucketLocation\",\n\"s3:ListBucket\"\n],\n\"Resource\": [\n\"arn:aws:s3:::example-restore-bucket\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:GetObjectVersion\",\n\"s3:GetBucketLocation\",\n\"s3:PutObjectAcl\"\n],\n\"Resource\": [\n\"arn:aws:s3:::example-restore-bucket/*\"\n]\n}\n]\n}\n

    For increased security and reduced storage costs you can opt into removing restored backups after a set lifetime (e.g. 7 days). Lagoon caters for this scenario gracefully and will re-create any restored snapshots as needed.

    "},{"location":"concepts-advanced/feature-flags/","title":"Feature flags","text":"

    Some Lagoon features can be controlled by setting feature flags. This is designed to assist users and administrators to roll out new platform features in a controlled manner.

    "},{"location":"concepts-advanced/feature-flags/#environment-variables","title":"Environment variables","text":"

    The following environment variables can be set on an environment or project to toggle feature flags.

    Environment Variable Name Active scope Version introduced Version removed Default Value Description LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD global 2.2.0 - disabled Set to enabled to set a non-root pod security context on the pods in this environment or project.This flag will eventually be deprecated, at which point non-root workloads will be enforced. LAGOON_FEATURE_FLAG_ISOLATION_NETWORK_POLICY global 2.2.0 - disabled Set to enabled to add a default namespace isolation network policy to each environment on deployment.This flag will eventually be deprecated, at which point the namespace isolation network policy will be enforced.NOTE: enabling and then disabling this feature will not remove any existing network policy from previous deployments. Those must be removed manually."},{"location":"concepts-advanced/feature-flags/#cluster-level-controls","title":"Cluster-level controls","text":"

    Feature flags may also be controlled at the cluster level. There is support for this in the lagoon-build-deploy chart. For each feature flag there are two flavours of values which can be set: default and force.

    • default controls the default policy for environments deployed to the cluster, but can be overridden at the project or environment level by the environment variables documented above.
    • force also controls the policy for environments deployed to the cluster, but cannot be overridden by the environment variables documented above.
    "},{"location":"concepts-advanced/service-types/","title":"Service Types","text":"

    The below lists all service types that can be defined via lagoon.type within a docker-compose.yml file.

    Warning

    Once a lagoon.type is defined and the environment is deployed, changing it to a different type is not supported and could result in a broken environment.

    "},{"location":"concepts-advanced/service-types/#additional-volumes","title":"Additional Volumes","text":"

    Some service types allow for additional volumes to be added, for more information on the lagoon.volumes.X.path label, please see Additional Volumes

    If you're provisioning a new project, we recommend avoiding the usage of -persistent service types, and use additional volumes as required for any persistent data.

    "},{"location":"concepts-advanced/service-types/#additional-service-ports","title":"Additional Service Ports","text":"

    Most services provide a default port, in cases where you want to use the services already defined in your docker-compose.yml file, you can configure a service to use those ports instead.

    To use this feature, you set the lagoon.service.usecomposeports: true label on the service in your docker-compose.yml file. For more information on how to use this feature, see Additional Service Ports

    "},{"location":"concepts-advanced/service-types/#basic","title":"basic","text":"

    Basic container, good to use for most applications that don't have an existing template. No persistent storage. The port can be changed using a label. If an autogenerated route is not required (e.g. for an internal-facing service, set lagoon.autogeneratedroute: false in the docker-compose.yml)

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes No lagoon.service.port, lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#basic-persistent","title":"basic-persistent","text":"

    Like basic. Will also generate persistent storage, defines mount location via lagoon.persistent.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes Yes lagoon.service.port, lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#basic-single","title":"basic-single","text":"

    Like basic-persistent. This will also generate persistent storage, defines mount location via lagoon.persistent.

    Where this differs from basic-persistent is that the volume is a ReadWriteOnce volume type. The downsides to this service type are that it can't be scaled.

    This service type does not support additional volumes.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes Yes lagoon.service.port, lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#cli","title":"cli","text":"

    Use for any kind of CLI container (like PHP, Node.js, etc). Automatically gets the customer SSH private key that is mounted in /var/run/secrets/lagoon/sshkey/ssh-privatekey.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - No No No lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#cli-persistent","title":"cli-persistent","text":"

    Like cli, expects lagoon.persistent.name to be given the name of a service that has persistent storage, which will be mounted under defined lagoon.persistent label. Does NOT generate its own persistent storage, only used to mount another service's persistent storage.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - No No Yes lagoon.persistent.name, lagoon.persistent, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#elasticsearch","title":"elasticsearch","text":"

    Elasticsearch container, will auto-generate persistent storage under /usr/share/elasticsearch/data.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP on localhost:9200/_cluster/health?local=true 9200 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#mariadb","title":"mariadb","text":"

    A meta-service which will tell Lagoon to automatically decide between mariadb-single and mariadb-dbaas.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - - - - -"},{"location":"concepts-advanced/service-types/#mariadb-single","title":"mariadb-single","text":"

    MariaDB container. Creates cron job for backups running every 24h executing /lagoon/mysql-backup.sh 127.0.0.1.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3306 3306 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#mariadb-dbaas","title":"mariadb-dbaas","text":"

    Uses a shared MariaDB server via the DBaaS Operator.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter Not Needed 3306 No - -"},{"location":"concepts-advanced/service-types/#mongo","title":"mongo","text":"

    A meta-service which will tell Lagoon to automatically decide between mongo-single and mongo-dbaas.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - - - - -"},{"location":"concepts-advanced/service-types/#mongo-single","title":"mongo-single","text":"

    MongoDB container, will generate persistent storage of min 1GB mounted at /data/db.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 27017 27017 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#mongo-dbaas","title":"mongo-dbaas","text":"

    Uses a shared MongoDB server via the DBaaS Operator.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter Not Needed 27017 No - -"},{"location":"concepts-advanced/service-types/#nginx","title":"nginx","text":"

    NGINX container. No persistent storage.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter localhost:50000/nginx_status 8080 Yes No lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#nginx-php","title":"nginx-php","text":"

    Like nginx, but additionally a php container.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter NGINX: localhost:50000/nginx_status, PHP: /usr/sbin/check_fcgi 8080 Yes No lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#nginx-php-persistent","title":"nginx-php-persistent","text":"

    Like nginx-php. Will generate persistent storage, defines mount location via lagoon.persistent.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter NGINX: localhost:50000/nginx_status, PHP: /usr/sbin/check_fcgi http on 8080 Yes Yes lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#node","title":"node","text":"

    Node.js container. No persistent storage.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes No lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#node-persistent","title":"node-persistent","text":"

    Like node. Will generate persistent storage, defines mount location via lagoon.persistent.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes Yes lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#none","title":"none","text":"

    Instructs Lagoon to completely ignore this service.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - - - - -"},{"location":"concepts-advanced/service-types/#opensearch","title":"opensearch","text":"

    OpenSearch container, will auto-generate persistent storage under /usr/share/opensearch/data.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP on localhost:9200/_cluster/health?local=true 9200 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#postgres","title":"postgres","text":"

    A meta-service which will tell Lagoon to automatically decide between postgres-single and postgres-dbaas.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - - - - -"},{"location":"concepts-advanced/service-types/#postgres-single","title":"postgres-single","text":"

    Postgres container. Creates cron job for backups running every 24h executing /lagoon/postgres-backup.sh localhost.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 5432 5432 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#postgres-dbaas","title":"postgres-dbaas","text":"

    Uses a shared PostgreSQL server via the DBaaS Operator.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter Not Needed 5432 No - -"},{"location":"concepts-advanced/service-types/#python","title":"python","text":"

    Python container. No persistent storage.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP connection on 8800 8800 Yes No lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#python-persistent","title":"python-persistent","text":"

    Python container. With persistent storage.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP connection on 8800 8800 Yes Yes lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#redis","title":"redis","text":"

    Redis container.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 6379 6379 No No -"},{"location":"concepts-advanced/service-types/#redis-persistent","title":"redis-persistent","text":"

    Redis container with auto-generated persistent storage mounted under /data.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 6379 6379 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#solr","title":"solr","text":"

    Solr container with auto-generated persistent storage mounted under /var/solr.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 8983 8983 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#varnish","title":"varnish","text":"

    Varnish container.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP request localhost:8080/varnish_status 8080 Yes No lagoon.autogeneratedroute"},{"location":"concepts-advanced/service-types/#varnish-persistent","title":"varnish-persistent","text":"

    Varnish container with auto-generated persistent storage mounted under /var/cache/varnish.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP request localhost:8080/varnish_status 8080 Yes Yes lagoon.autogeneratedroute, lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#worker","title":"worker","text":"

    Use for any kind of worker container (like queue workers, etc.) where there is no exposed service port.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - No No No lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#worker-persistent","title":"worker-persistent","text":"

    Like worker, expects lagoon.persistent.name to be given the name of a service that has persistent storage, which will be mounted under defined lagoon.persistent label. Does NOT generate its own persistent storage, only used to mount another service's persistent storage.

    Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - No No Yes lagoon.persistent.name, lagoon.persistent, lagoon.volumes.X.path"},{"location":"concepts-advanced/workflows/","title":"Workflows","text":"

    Lagoon tries to support any development workflow possible. It specifically does not enforce any workflows onto teams, so that each development team can define how they would like to develop and deploy their code.

    "},{"location":"concepts-advanced/workflows/#fixed-branches","title":"Fixed Branches","text":"

    The most straightforward workflows are deployment-based on some fixed branches:

    You define which branches (like develop, staging and main, which would be ^(develop|staging|main)$ as regular expressions) that Lagoon should deploy and it will do so. Done!

    If you would like to test a new feature, merge them into a branch that you have set up locally and push, and Lagoon will deploy the feature and you can test. When all is good, merge the branch into your production branch and push.

    "},{"location":"concepts-advanced/workflows/#feature-branches","title":"Feature Branches","text":"

    A bit more advanced are feature branches. Since Lagoon supports the ability to define the branches you would like to deploy via regular expressions, you can also extend the above regular expression to this: ^feature\\/|^(staging|main)$. This will instruct Lagoon to deploy all branches that start with feature/, plus the branches called staging and main. Our development workflow could be as following:

    • Create a new branch from main called feature/myfeature and push feature/myfeature.
    • Lagoon will deploy the branch feature/myfeature as a new environment, where you can test your feature independently of any other features.
    • Merge feature/myfeature into the main branch and it will deploy to your production environment.

    If you like, you can also merge feature/myfeature and any other feature branches into staging first, in order to test the functionality of multiple features together. After you have tested the features together on staging, you can merge the features into main.

    This workflow needs a high level of branch pruning and cleanliness in your Git repository. Since each feature branch will create its own Lagoon environment, you can have very quickly generate a LOT of environments, which all of them will use resources. Be sure to merge or delete unused branches.

    Because of this, it could make sense to think about a pull request based workflow.

    "},{"location":"concepts-advanced/workflows/#pull-requests","title":"Pull requests","text":"

    Even more advanced are workflows via pull requests. Such workflows need the support of a Git hosting which supports pull requests (also called merge requests). The idea of pull request-based workflows lies behind that idea that you can test a feature together with a target branch, without actually needing to merge yet, as Lagoon will do the merging for you during the build.

    In our example we would configure Lagoon to deploy the branches ^(staging|main)$ and the pull requests to .* (to deploy all pull requests). Now our workflow would be:

    1. Create a new branch from main called feature/myfeature and push feature/myfeature (no deployment will happen now because we have only specific staging and main as our branches to be deployed).
    2. Create a pull request in your Git hosting from feature/myfeature into main.
    3. Lagoon will now merge the feature/myfeature branch on top of the main branch and deploy that resulting code for you.
    4. Now you can test the functionality of the feature/myfeature branch just as if it had been merged into main, so all changes that have happened in main since you created the feature/myfeature branch from it will be there, and you don't need to worry that you might have an older version of the main branch.
      1. If there is a merge conflict, the build will fail, Lagoon will stop and notify you.
    5. After you have tested your pull request branch, you can go back to your Git hosting and actually merge the code into main. This will now trigger a deployment of main.
    6. When the pull request is merged, it is automatically closed and Lagoon will remove the environment for the pull request automatically.

    Some teams might opt to create the pull request against a shared staging branch and then merge the staging branch into the main branch via another pull request. This depends on the kind of Git workflow you're using.

    Additionally, in Lagoon you can define that only pull requests with a specific text in the title are deployed. [BUILD] defined as regular expression will only deploy pull requests that have a title like [BUILD] My Pull Request, while a pull request with that title My other Pull Request is not automatically deployed. This helps to keep the amount of environments small and allows for pull requests that don't need an environment yet.

    "},{"location":"concepts-advanced/workflows/#automatic-database-sync-for-pull-requests","title":"Automatic Database Sync for Pull requests","text":"

    Automatic pull request environments are a fantastic thing. But it would also be handy to have the database synced from another environment when those environments are created. Lagoon can handle that!

    The following example will sync the staging database on the first rollout of the pull request environment:

    .lagoon.yml
    tasks:\npost-rollout:\n- run:\nname: IF no Drupal installed & Pullrequest = Sync database from staging\ncommand: |\nif [[ -n ${LAGOON_PR_BASE_BRANCH} ]] && tables=$(drush sqlq 'show tables;') && [ -z \"$tables\" ]; then\ndrush -y sql-sync @staging default\nfi\nservice: cli\nshell: bash\n
    "},{"location":"concepts-advanced/workflows/#promotion","title":"Promotion","text":"

    Another way of deploying your code into an environment is the promotion workflow.

    The idea behind the promotion workflow comes from this (as an example):

    If you merge the branch staging into the main branch, and if there are no changes to main , so main and staging have the exact same code in Git, it could still technically be possible that the resulting Docker images are slightly different. This is because it's possible that between the last staging deployment and the current main deployment, some upstream Docker images may have changed, or dependencies loaded from the various package managers may have changed. This is a very small chance, but it's there.

    For this situation, Lagoon understands the concept of promoting Lagoon images from one environment to another. This basically means that it will take the already built and deployed Docker images from one environment, and will use those exact same Docker images for another environment.

    In our example, we want to promote the Docker images from the main environment to the production environment:

    • First, we need a regular deployed environment with the name main. Make sure that the environment has deployed successfully.
    • Also, make sure that you don't have a branch called production in your Git repository. This could lead to weird confusions (like people pushing into this branch, etc).
    • Now trigger a promotion deployment using the lagoon cli:
    Trigger a promotion deployment
    lagoon deploy promote --project=\"myproject\" --source=\"main\" --destination=\"production\"\n

    This tells Lagoon that you want to promote from the source main to the destination production.

    Lagoon will now do the following:

    • Check out the Git branch main in order to load the .lagoon.yml and docker-compose.yml files (Lagoon still needs these in order to fully work).
    • Create all Kubernetes/OpenShift objects for the defined services in docker-compose.yml , but with LAGOON_GIT_BRANCH=production as environment variable.
    • Copy the newest images from the main environment and use them (instead of building Images or tagging them from upstream).
    • Run all post-rollout tasks like a normal deployment.

    You will receive the same notifications of success or failures like any other deployment.

    "},{"location":"concepts-basics/","title":"Basic Lagoon Concepts","text":"

    This section covers some of the basic concepts in Lagoon. If you're already familiar with these, move on to Advanced Lagoon Concepts.

    If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our Discord.

    "},{"location":"concepts-basics/build-and-deploy-process/","title":"Build and Deploy Process","text":"

    This document describes what actually happens during a Lagoon build and deployment. It is heavily simplified from what actually happens, but it will help you to understand what is happening under the hood every time that Lagoon deploys new code for you.

    Watch the video below for a walk-through of the deployment process.

    "},{"location":"concepts-basics/build-and-deploy-process/#1-set-up-openshift-projectkubernetes-namespace-for-environment","title":"1. Set up OpenShift Project/Kubernetes Namespace for Environment","text":"

    First, Lagoon checks if the OpenShift project/Kubernetes namespace for the given environment exists and is correctly set up. It will make sure that we have the needed service accounts, create secrets, and will configure environment variables into a ConfigMap lagoon-env which is filled with information like the environment type and name, the Lagoon project name, and so on.

    "},{"location":"concepts-basics/build-and-deploy-process/#2-git-checkout-merge","title":"2. Git Checkout & Merge","text":"

    Next, Lagoon will check out your code from Git. It needs that to be able to read the .lagoon.yml, docker-compose.yml and any .env files, but also to build the Docker images.

    Note that Lagoon will only process these actions if the branch/PR matches the branch regex set in Lagoon. Based on how the deployment has been triggered, different things will happen:

    "},{"location":"concepts-basics/build-and-deploy-process/#branch-webhook-push","title":"Branch Webhook Push","text":"

    If the deployment is triggered automatically via a Git webhook and is for a single branch, Lagoon will check out the Git SHA which is included in the webhook payload. This will trigger a deployment for every Git SHA pushed.

    "},{"location":"concepts-basics/build-and-deploy-process/#branch-rest-trigger","title":"Branch REST trigger","text":"

    If you trigger a branch deployment manually via the REST API (via the UI, or GraphQL) and do NOT define a SHA in the POST payload, Lagoon will just check out the latest commit in that branch and deploy it.

    "},{"location":"concepts-basics/build-and-deploy-process/#pull-requests","title":"Pull Requests","text":"

    If the deployment is a pull request (PR) deployment, Lagoon will load the base and the HEAD branch and SHAs for the pull request and will:

    • Check out the base branch (the branch the PR points to).
    • Merge the HEAD branch (the branch that the PR originates from) on top of the base branch.
    • More specifically:
      • Lagoon will check out and merge particular SHAs which were sent in the webhook. Those SHAs may or may not point to the branch heads. For example, if you make a new push to a GitHub pull request, it can happen that SHA of the base branch will not point to the current base branch HEAD.

    If the merge fails, Lagoon will also stop and inform you about this.

    "},{"location":"concepts-basics/build-and-deploy-process/#3-build-image","title":"3. Build Image","text":"

    For each service defined in the docker-compose.yml Lagoon will check if images need to be built or not. If they need to be built, this will happen now. The order of building is based on the order they are configured in docker-compose.yml , and some build arguments are injected:

    • LAGOON_GIT_SHA
    • LAGOON_GIT_BRANCH
    • LAGOON_PROJECT
    • LAGOON_BUILD_TYPE (either pullrequest, branch or promote)
    • LAGOON_SSH_PRIVATE_KEY - The SSH private key that is used to clone the source repository. Use RUN /lagoon/entrypoints/05-ssh-key.sh to convert the build argument into an actual key at /home/.ssh/key which will be used by SSH and Git automatically. For safety, remove the key again via RUN rm /home/.ssh/key.
    • LAGOON_GIT_SOURCE_REPOSITORY - The full Git URL of the source repository.

    Also, if this is a pull request build:

    • LAGOON_PR_HEAD_BRANCH
    • LAGOON_PR_HEAD_SHA
    • LAGOON_PR_BASE_BRANCH
    • LAGOON_PR_BASE_SHA
    • LAGOON_PR_TITLE

    Additionally, for each already built image, its name is also injected. If your docker-compose.yml is configured to first build the cli image and then the nginx image, the name of the nginx image is injected as NGINX_IMAGE.

    "},{"location":"concepts-basics/build-and-deploy-process/#4-configure-kubernetes-or-openshift-services-and-routes","title":"4. Configure Kubernetes or OpenShift Services and Routes","text":"

    Next, Lagoon will configure Kubernetes or OpenShift with all services and routes that are defined from the service types, plus possible additional custom routes that you have defined in .lagoon.yml.

    In this step it will expose all defined routes in the LAGOON_ROUTES as comma separated URLs. It will also define one route as the \"main\" route, in this order:

    1. If custom routes defined: the first defined custom route in .lagoon.yml.
    2. The first auto-generated route from a service defined in docker-compose.yml.
    3. None.

    The \"main\" route is injected via the LAGOON_ROUTE environment variable.

    "},{"location":"concepts-basics/build-and-deploy-process/#5-push-and-tag-images","title":"5. Push and Tag Images","text":"

    Now it is time to push the previously built Docker images into the internal Docker image registry.

    For services that didn't specify a Dockerfile to be built in docker-compose.yml and only gave an image, they are also tagged and will cause the internal Docker image registry to know about the images, so that they can be used in containers.

    "},{"location":"concepts-basics/build-and-deploy-process/#6-persistent-storage","title":"6. Persistent Storage","text":"

    Lagoon will now create persistent storage (PVC) for each service that needs and requested persistent storage.

    "},{"location":"concepts-basics/build-and-deploy-process/#7-cron-jobs","title":"7. Cron jobs","text":"

    For each service that requests a cron job (like MariaDB), plus for each custom cron job defined in .lagoon.yml, Lagoon will now generate the cron job environment variables which are later injected into the Deployment.

    "},{"location":"concepts-basics/build-and-deploy-process/#8-run-defined-pre-rollout-tasks","title":"8. Run defined pre-rollout tasks","text":"

    Now Lagoon will check the .lagoon.yml file for defined tasks in pre-rollout and will run them one by one in the defined services. Note that these tasks are executed on the pods currently running (so cannot utilize features or scripts that only exist in the latest commit) and therefore they are also not run on first deployments.

    If any of them fail, Lagoon will immediately stop and notify you, and the rollout will not proceed.

    "},{"location":"concepts-basics/build-and-deploy-process/#9-deploymentconfigs-statefulsets-daemonsets","title":"9. DeploymentConfigs, Statefulsets, Daemonsets","text":"

    This is probably the most important step. Based on the defined service type, Lagoon will create the Deployment, Statefulset or Daemonsets for the service. (Note that Deployments are analogous to DeploymentConfigs in OpenShift)

    It will include all previously gathered information like the cron jobs, the location of persistent storage, the pushed images and so on.

    Creation of these objects will also automatically cause Kubernetes or OpenShift to trigger new deployments of the pods if necessary, like when an environment variable has changed or an image has changed. But if there is no change, there will be no deployment! This means if you only update the PHP code in your application, the Varnish, Solr, MariaDB, Redis and any other service that is defined but does not include your code will not be deployed. This makes everything much much faster.

    "},{"location":"concepts-basics/build-and-deploy-process/#10-wait-for-all-rollouts-to-be-done","title":"10. Wait for all rollouts to be done","text":"

    Now Lagoon waits! It waits for all of the just-triggered deployments of the new pods to be finished, as well as for their health checks to be successful.

    If any of the deployments or health checks fail, the deployment will be stopped here, and you will be informed via the defined notification systems (like Slack) that the deployment has failed.

    "},{"location":"concepts-basics/build-and-deploy-process/#11-run-defined-post-rollout-tasks","title":"11. Run defined post-rollout tasks","text":"

    Now Lagoon will check the .lagoon.yml file for defined tasks in post-rollout and will run them one by one in the defined services.

    If any of them fail, Lagoon will immediately stop and notify you.

    "},{"location":"concepts-basics/build-and-deploy-process/#12-success","title":"12. Success","text":"

    If all went well and nothing threw any errors, Lagoon will mark this build as successful and inform you via defined notifications. \u2705

    "},{"location":"concepts-basics/docker-compose-yml/","title":"docker-compose.yml","text":"

    The docker-compose.yml file is used by Lagoon to:

    • Learn which services/containers should be deployed.
    • Define how the images for the containers are built.
    • Define additional configurations like persistent volumes.

    Docker Compose (the tool) is very strict in validating the content of the YAML file, so we can only do configuration within labels of a service definition.

    Warning

    Lagoon only reads the labels, service names, image names and build definitions from a docker-compose.yml file. Definitions like: ports, environment variables, volumes, networks, links, users, etc. are IGNORED.

    This is intentional, as the docker-compose file is there to define your local environment configuration. Lagoon learns from the lagoon.type the type of service you are deploying and from that knows about ports, networks and any additional configuration that this service might need.

    Here a straightforward example of a docker-compose.yml file for Drupal:

    docker-compose.yml
    x-lagoon-project:\n# Lagoon project name (leave `&lagoon-project` when you edit this)\n&lagoon-project drupal-example\nx-volumes:\n&default-volumes\n# Define all volumes you would like to have real-time mounted into the docker containers\nvolumes:\n- .:/app:delegated\nx-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# Route that should be used locally, if you are using pygmy, this route *must* end with .docker.amazee.io\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n# Uncomment if you want to have the system behave as it will in production\n#LAGOON_ENVIRONMENT_TYPE: production\n# Uncomment to enable Xdebug and then restart via `docker compose up -d`\n#XDEBUG_ENABLE: \"true\"\nx-user:\n&default-user\n# The default user under which the containers should run. Change this if you are on linux and run with another user than ID `1000`\nuser: '1000'\nservices:\nnginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent # (1)\nlagoon.persistent: /app/web/sites/default/files/\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent # (2)\nlagoon.name: nginx\nlagoon.persistent: /app/web/sites/default/files/\nmariadb:\nimage: uselagoon/mariadb-10.11-drupal\nlabels:\nlagoon.type: mariadb\n
    1. Note the multi-container pods here.
    2. Note the multi-container pods here.
    "},{"location":"concepts-basics/docker-compose-yml/#basic-settings","title":"Basic settings","text":"

    x-lagoon-project:

    This is the machine name of your project, define it here. We\u2019ll use \u201cdrupal-example.\u201d

    x-volumes:

    This tells Lagoon what to mount into the container. Your web application lives in /app, but you can add or change this if needed.

    x-environment:

    1. Here you can set your local development URL. If you are using pygmy, it must end with .docker.amazee.io.
    2. If you want to exactly mimic the production environment, uncomment LAGOON_ENVIRONMENT_TYPE: production.
    3. If you want to enable Xdebug, uncomment DEBUG_ENABLE: \"true\".

    x-user:

    You are unlikely to need to change this, unless you are on Linux and would like to run with a user other than 1000.

    "},{"location":"concepts-basics/docker-compose-yml/#services","title":"services","text":"

    This defines all the services you want to deploy. Unfortunately, Docker Compose calls them services, even though they are actually containers. Going forward we'll be calling them services, and throughout this documentation.

    The name of the service (nginx, php, and mariadb in the example above) is used by Lagoon as the name of the Kubernetes pod (yet another term - again, we'll be calling them services) that is generated, plus also any additional Kubernetes objects that are created based on the defined lagoon.type, which could be things like services, routes, persistent storage, etc.

    Please note that service names adhere to the RFC 1035 DNS label standard. Service names must:

    • contain at most 63 characters
    • contain only lowercase alphanumeric characters or '-'
    • start with an alphabetic character
    • end with an alphanumeric character

    Warning

    Once you have set the name of a service, do NOT rename it. This will cause all kind of havoc in your containers and break things.

    "},{"location":"concepts-basics/docker-compose-yml/#docker-images","title":"Docker Images","text":""},{"location":"concepts-basics/docker-compose-yml/#build","title":"build","text":"

    If you want Lagoon to build a Dockerfile for your service during every deployment, you can define it here:

    build

    • context
      • The build context path that should be passed on into the docker build command.
    • dockerfile:
      • Location and name of the Dockerfile that should be built.

    Warning

    Lagoon does NOT support the short version of build: <Dockerfile> and will fail if it finds such a definition.

    "},{"location":"concepts-basics/docker-compose-yml/#image","title":"image","text":"

    If you don't need to build a Dockerfile and just want to use an existing Dockerfile, define it via image.

    "},{"location":"concepts-basics/docker-compose-yml/#types","title":"Types","text":"

    Lagoon needs to know what type of service you are deploying in order to configure the correct Kubernetes or OpenShift objects.

    This is done via the lagoon.type label. There are many different types to choose from. Check Service Types to see all of them and their additional configuration possibilities.

    "},{"location":"concepts-basics/docker-compose-yml/#skipignore-containers","title":"Skip/Ignore containers","text":"

    If you'd like Lagoon to ignore a service completely - for example, you need a container only during local development - give it the type none.

    "},{"location":"concepts-basics/docker-compose-yml/#persistent-storage","title":"Persistent Storage","text":"

    Some containers need persistent storage. Lagoon allows for each container to have a maximum of one persistent storage volume attached to the container. You can configure the container to request its own persistent storage volume (which can then be mounted by other container), or you can tell the container to mount the persistent storage created by another container.

    In many cases, Lagoon knows where that persistent storage needs to go. For example, for a MariaDB container, Lagoon knows that the persistent storage should be put into /var/lib/mysql , and puts it there automatically without any extra configuration to define that. For some situations, though, Lagoon needs your help to know where to put the persistent storage:

    • lagoon.persistent - The absolute path where the persistent storage should be mounted (the above example uses /app/web/sites/default/files/ which is where Drupal expects its persistent storage).
    • lagoon.persistent.name - Tells Lagoon to not create a new persistent storage for that service, but instead mounts the persistent storage of another defined service into this service.
    • lagoon.persistent.size - The size of persistent storage you require (Lagoon usually gives you minimum 5G of persistent storage, if you need more, define it here).
    • lagoon.persistent.class - By default Lagoon automatically assigns the right storage class for your service (like SSDs for MySQL, bulk storage for Nginx, etc.). If you need to overwrite this, you can do so here. This is highly dependent on the underlying Kubernetes/OpenShift that Lagoon runs on. Contact your Lagoon administrator for this.

    See the Additional Volumes section on how to add more volumes

    "},{"location":"concepts-basics/docker-compose-yml/#auto-generated-routes","title":"Auto-generated Routes","text":"

    The docker-compose.yml file also supports per-service enabling and disabling of autogenerated routes

    • lagoon.autogeneratedroute: false label will stop a route from being automatically created for that service. It can be applied to all services with autogenerated routes, but is mostly useful for the basic and basic-persistent service types when used to create an additional internal-facing service for a database service or similar. The inverse is also true - it will enable an auto-generated route for a service when the .lagoon.yml file disables them.
    "},{"location":"concepts-basics/docker-compose-yml/#additional-volumes","title":"Additional Volumes","text":"

    In situations where more than one persistent volume is required by a service (or services), Lagoon can support the creation of multiple additional volumes.

    To do this, the volume should be created in the docker-compose.yml with a lagoon.type label - currently only \"persistent\" is supported.

    docker-compose.yml volumes snippet
    volumes:\nextravol:\nlabels:\nlagoon.type: persistent\n

    This volume can then be referenced in each service that requires it, along with the path.

    "},{"location":"concepts-basics/docker-compose-yml/#add-additional-volumes-to-an-existing-non-persistent-service-type","title":"Add additional volumes to an existing non -persistent service type","text":"

    If you have a basic or other supported standalone service type and you want to add volumes, you can use the additional volumes to do this without chaning the service type to a -persistent type.

    docker-compose.yml volume usage snippet
    services:\nbasic:\nbuild:\ncontext: .\ndockerfile: basic.dockerfile\nlabels:\nlagoon.type: basic\nlagoon.volumes.data.path: /data # basic-persistent provides a default volume, this needs to be defined\nlagoon.volumes.extravol.path: /extra\nvolumes: # these volumes are ignored by lagoon, only the labels above are consumed to handle volume mapping\n- data:/data:delegated\n- extravol:/extra\nvolumes:\ndata:\nlabels:\nlagoon.type: persistent\nextravol:\nlabels:\nlagoon.type: persistent\nlagoon.backup: false\n
    "},{"location":"concepts-basics/docker-compose-yml/#add-additional-volume-to-an-existing-persistent-service-type","title":"Add additional volume to an existing -persistent service type","text":"

    docker-compose.yml volume usage snippet

    services:\nbasic:\nbuild:\ncontext: .\ndockerfile: basic.dockerfile\nlabels:\nlagoon.type: basic-persistent\nlagoon.persistent: /data # basic-persistent provides a default volume, this needs to be defined\nlagoon.volumes.extravol.path: /extra\nvolumes: # these volumes are ignored by lagoon, only the labels above are consumed to handle volume mapping\n- ./data:/data:delegated\n- extravol:/extra\nvolumes:\nextravol:\nlabels:\nlagoon.type: persistent\nlagoon.backup: false\n
    Note that the original volume created for this service still exists.

    "},{"location":"concepts-basics/docker-compose-yml/#supported-persistent-volume-flags","title":"Supported persistent volume flags","text":"
    • The default size is 5Gi - but can be modified with a lagoon.persistent.size: XXGi label on the volume.
    • By default, Lagoon will back up all persistent volumes, but this can be disabled with a lagoon.backup: false label on the volume.
    docker-compose.yml volumes snippet
    volumes:\nextravol:\nlabels:\nlagoon.type: persistent\nlagoon.persistent.size: 10Gi\nlagoon.backup: false\n
    "},{"location":"concepts-basics/docker-compose-yml/#default-persistent-volumes","title":"Default persistent volumes","text":"
    • If a service type provides a default persistent volume (nginx-php-persistent, basic-persistent, node-persistent, python-persistent), it will be created and named as the name of the service (unless the lagoon.persistent.name label is assigned).
    • If a volume defined in the volumes block is also named the same as a default volume would be, it will be ignored and only the default volume will be created.
    • If a lagoon.volumes.${volume_name}.path is also defined on a service that has a default volume (or a volume linked to it using the lagoon.persistent.name label, it will also be ignored and the value of the lagoon.persistent path will be used.
    "},{"location":"concepts-basics/docker-compose-yml/#ignored-volume","title":"Ignored volume","text":"
    • If a volume defined in the volumes block has a label lagoon.type: none it will not be created.
    • If a volume defined in the volumes block has a label lagoon.type of a type (currently only persistent), but it is not consumed by any service using a lagoon.volumes.${volume_name}.path, then the volume will not be created.
    "},{"location":"concepts-basics/docker-compose-yml/#maximum-number-of-volumes","title":"Maximum number of volumes","text":"
    • Currently a hard-coded limit of 6 volumes is in place, this may be made configurable in the future.
    "},{"location":"concepts-basics/docker-compose-yml/#supported-service-types","title":"Supported service types","text":"

    Currently, the only service types that support additional volumes are the following

    • basic / basic-persistent
    • worker / worker-persistent
    • node / node-persistent
    • python / python-persistent
    • nginx / nginx-php / nginx-php-persistent
    • cli / cli-persistent

    Adding a volume to any other type will result in an error during a build.

    "},{"location":"concepts-basics/docker-compose-yml/#additional-service-ports","title":"Additional Service Ports","text":"

    If you have a service that has many ports, you can use the lagoon.service.usecomposeports: true label to inform Lagoon to use the ports defined on the service.

    Info

    Only TCP based ports will be allowed to have a route attached, but UDP ports can be used for internal communications.

    For example, if you have a basic service that requires ports 8080 and 10009.

    • port 8080 could be a HTTP based port and you want to route to this using a route in .lagoon.yml
    • port 10009 could be used by other services within the environment for internal communications

    You would define your service to consume the ports like so:

    docker-compose.yml service port snippet
    version: '2'\nservices:\ncustom:\nbuild:\ncontext: internal/testdata/basic/docker\ndockerfile: Dockerfile\nlabels:\nlagoon.type: basic\nlagoon.service.usecomposeports: true\nports:\n- \"8080\"\n- \"10009\"\n

    The first port in the list of ports will be the \"default\" port for the service, so standard routes like so will route to the default port. An example .lagoon.yml is show how this looks the same as any other standard service route.

    .lagoon.yml default port route
    environments:\nmain:\nroutes:\n- custom:\n- example.com\n

    Alternatively, if you wanted to also have a route specifically for port 10009, you could define the route like so in your .lagoon.yml.

    .lagoon.yml default and alternative port route
    environments:\nmain:\nroutes:\n- custom-10009:\n- otherport.example.com\n

    Info

    You can define both the \"default\" route and a custom port route together, as long as they have different domains used.

    "},{"location":"concepts-basics/docker-compose-yml/#multi-container-pods","title":"Multi-Container Pods","text":"

    Kubernetes and OpenShift don't deploy plain containers. Instead, they deploy pods, with each one or more containers. Usually Lagoon creates a single pod with a container inside for each defined docker-compose service. For some cases, we need to put two containers inside a single pod, as these containers are so dependent on each other that they should always stay together. An example for such a situation is the PHP and NGINX containers that both contain PHP code of a web application like Drupal.

    For these cases, it is possible to tell Lagoon which services should stay together, which is done in the following way (remember that we are calling containers services because of docker-compose:

    1. Define both services with a lagoon.type that expects two services (in the example this is nginx-php-persistent defined on the nginx and php services).
    2. Link the second service with the first one, defining the label lagoon.name of the second one with the first one. (in the example this is done with defining lagoon.name: nginx).

    This will cause Lagoon to realize that the nginx and php containers are combined in a pod that will be called nginx.

    Warning

    Once you have set the lagooon.name of a service, do NOT rename it. This will cause all kind of havoc in your containers and break things.

    Lagoon still needs to understand which of the two services is the actual individual service type (nginx and php in this case). It does this by searching for service names with the same name that are given by the type, so nginx-php-persistent expects one service with the name nginx and one with php in the docker-compose.yml. If for any reason you want to use different names for the services, or you need for than one pod with the type nginx-php-persistent there is an additional label lagoon.deployment.servicetype which can be used to define the actual service type.

    An example:

    docker-compose.yml
    nginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # If this isn't present, Lagoon will use the container name, which in this case is nginx.\nlagoon.deployment.servicetype: nginx\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # We want this service to be part of the NGINX pod in Lagoon.\nlagoon.deployment.servicetype: php\n

    In the example above, the services are named nginx and php (but you can call them whatever you want). The lagoon.name tells Lagoon which services go together - all of the services with the same name go together.

    In order for Lagoon to realize which one is the nginx and which one is the php service, we define it via lagoon.deployment.servicetype: nginx and lagoon.deployment.servicetype: php.

    "},{"location":"concepts-basics/docker-compose-yml/#helm-templates-kubernetes-only","title":"Helm Templates (Kubernetes only)","text":"

    Lagoon uses Helm for templating on Kubernetes. To do this, a series of Charts are included with the build-deploy-tool image.

    "},{"location":"concepts-basics/docker-compose-yml/#custom-rollout-monitor-types","title":"Custom Rollout Monitor Types","text":"

    By default, Lagoon expects that services from custom templates are rolled out via a DeploymentConfig object within Kubernetes or Openshift. It monitors the rollout based on this object. In some cases, the services that are defined via custom deployment need a different way of monitoring. This can be defined via lagoon.rollout:

    • deploymentconfig - This is the default. Expects a DeploymentConfig object in the template for the service.
    • statefulset - Expects a Statefulset object in the template for the service.
    • daemonset - Expects a Daemonset object in the template for the service.
    • false - Will not monitor any rollouts, and will just be happy if the template applies and does not throw any errors.

    You can also overwrite the rollout for just one specific environment. This is done in .lagoon.yml.

    "},{"location":"concepts-basics/docker-compose-yml/#docker-compose-v2-compatibility","title":"Docker Compose v2 compatibility","text":"

    Bug

    Note that while using older versions of Docker Compose V2 locally, you may experience some known issues - these have been resolved in later releases (v2.17.3 onwards).

    The resolution for these errors is usually to update (or install a later version of) the version of Docker Compose you are using, either standalone or by upgrading the version of Docker Desktop you're using. See the Docker Desktop release notes for more information

    Docker Compose output indicating depends_on error
    Failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization\n\nor\n\nFailed to solve: drupal9-base-cli: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed`\n
    • These are resolved in Docker Compose v2.13.0.
    • This message means that your build has tried to access a Docker image that hasn't been built yet. As BuildKit builds in parallel, if you have a Docker image that inherits another one (as we do in Drupal with the CLI).
    • You can also use the target field inside the build to reconfigure as a multi-stage build.
    • If you are already running a newer Docker Compose version, this error may be because you're defaulting to using a docker-container build context with buildx. You should make sure that docker buildx ls shows the docker builder as default, not a docker-container based one. Check the docs on Docker buildx here.
    Docker Compose output indicating volumes_from error
    no such service: container:amazeeio-ssh-agent\n
    • This is resolved in Docker Compose v2.17.3.
    • This message means that the service that provides SSH access into locally running containers runs outside of your Docker Compose stack and is inaccessible.
    • The section can also be removed from your docker-compose.yml file if you don't require SSH access from inside your local environment.
    "},{"location":"concepts-basics/docker-compose-yml/#buildkit-and-lagoon","title":"BuildKit and Lagoon","text":"

    BuildKit is a toolkit for converting source code to build artifacts in an efficient, expressive and repeatable manner.

    With the release of Lagoon v2.11.0, Lagoon now provides support for more advanced BuildKit-based docker compose builds, and in Lagoon v2.21.0, BuildKit is now enabled by default for all builds. To specifically disable BuildKit for your Project or Environment, add DOCKER_BUILDKIT=0 as a build-time variable to your Lagoon project or environment.

    "},{"location":"concepts-basics/docker-compose-yml/#docker-compose-errors-in-lagoon-builds","title":"Docker Compose Errors in Lagoon Builds","text":"

    See the Lagoon Build Errors page for how to resolve common build errors with Docker Compose.

    "},{"location":"concepts-basics/docker-compose-yml/#common-docker-compose-issues","title":"Common Docker Compose Issues","text":"

    This section outlines some of the more common Docker Compose errors, and how to remedy them. These may present in local development, or as Lagoon Build Errors and Warnings.

    "},{"location":"concepts-basics/docker-compose-yml/#dual-mapping-keys","title":"Dual Mapping keys","text":"Docker Compose output indicating mapping key error
    ERR: yaml: unmarshal errors: line 22: mapping key \"<<\" already defined at line 21\n

    Early releases of the Lagoon examples contained a pair of YAML aliases attached to services to provide volumes and user code. Newer releases of Docker Compose will report this as an error. While all examples have now been updated, there may be some older codebases around that need updating.

    This error arises from Docker Compose not knowing what it is inserting into the array, so just assuming it may be duplicate.

    If your docker-compose.yml contains one or more of this (or similar) code blocks, you will be affected.

    Docker Compose error with dual mapping keys
    ...\n<< : [*default-volumes]\n<< : [*default-user]\n...\n

    The corrected version combines both aliases into a single mapping key - you'll need to remedy all occurrances.

    Docker Compose correct insertion of multiple alias mapping keys
    ...\n<< : [*default-volumes, *default-user]\n...\n
    "},{"location":"concepts-basics/lagoon-yml/","title":".lagoon.yml","text":"

    The .lagoon.yml file is the central file to set up your project. It contains configuration in order to do the following:

    • Define routes for accessing your sites.
    • Define pre-rollout tasks.
    • Define post-rollout tasks.
    • Set up SSL certificates.
    • Add cron jobs for environments.

    The .lagoon.yml file must be placed at the root of your Git repository.

    "},{"location":"concepts-basics/lagoon-yml/#general-settings","title":"General Settings","text":""},{"location":"concepts-basics/lagoon-yml/#docker-compose-yaml","title":"docker-compose-yaml","text":"

    Tells the build script which Docker Compose YAML file should be used, in order to learn which services and containers should be deployed. This defaults to docker-compose.yml, but could be used for a specific Lagoon Docker Compose YAML file if needed.

    "},{"location":"concepts-basics/lagoon-yml/#environment_variablesgit_sha","title":"environment_variables.git_sha","text":"

    This setting allows you to enable injecting the deployed Git SHA into your project as an environment variable. By default this is disabled. Setting the value to true sets the SHA as the environment variable LAGOON_GIT_SHA.

    "},{"location":"concepts-basics/lagoon-yml/#routes","title":"Routes","text":"

    Routes are used to direct traffic to services. Each service in an environnment can have routes, in which the domain names are defined manually or automatically. The top level routes section applies to all routes in all environments.

    "},{"location":"concepts-basics/lagoon-yml/#routesautogenerate","title":"routes.autogenerate","text":"

    This allows you to configure automatically created routes. Manual routes are defined per environment.

    • enabled: Set to false to disable autogenerated routes. Default is true.
    • allowPullrequests: Set to true to override enabled: false for pull requests..lagoon.yml
      routes:\nautogenerate:\nenabled: false\nallowPullrequests: true\n
    • insecure: Configures HTTP connections. Default is Allow.
      • Allow: Route will respond to HTTP and HTTPS.
      • Redirect: Route will redirect any HTTP request to HTTPS.
    • prefixes: Configure prefixes for the autogenerated routes of each environment. This is useful for things like language prefix domains, or a multi-domain site using the Drupal domain module.

      .lagoon.yml
        routes:\nautogenerate:\nprefixes:\n- www\n- de\n- fr\n- it\n
    "},{"location":"concepts-basics/lagoon-yml/#path-based-routes","title":"Path Based Routes","text":"

    Path based routes allows you to define paths on a route to a different backend. This can be used if you have a separate backend within the environment that you want to route traffic to on the same domain as another service within your environment.

    Warning

    Path based routes can get quite complex and should only be used if you have a need to use them.

    Here is an example .lagoon.yml file that shows how path based routes can be defined. There is support for global autogenerated routes, per environment autogenerated routes, and custom routes.

    .lagoon.yml path based routes
    docker-compose-yaml: docker-compose.yml\n# if an environment has `autogeneratePathRoutes` defined like `environments.main.autogeneratePathRoutes`\n# then thes global lagoon yaml `routes.autogenerate.pathRoutes` are ignored\nroutes:\nautogenerate:\npathRoutes:\n- fromService: nginx\ntoService: node\npath: /api/v1\nenvironments:\nmain:\n# path routes for autogenerated routes for this environment only\nautogeneratePathRoutes:\n- fromService: nginx\ntoService: node\npath: /api/v1\nroutes:\n- nginx:\n- a.example.com:\npathRoutes:\n- toService: node\npath: /api/v1\n
    "},{"location":"concepts-basics/lagoon-yml/#autogenerated-routes","title":"Autogenerated Routes","text":"

    It is possible to configure global autogenerated routes, these would apply to ALL environments that this .lagoon.yml file would cover.

    Additionally, per environment autogenerated route configurations are supported, the fields are the same, just where they are defined is different.

    .lagoon.yml autogenerated path based routes
    routes:\nautogenerate:\npathRoutes:\n- fromService: nginx\ntoService: node\npath: /api/v1\nenvironments:\nmain:\n# path routes for autogenerated routes for this environment only\nautogeneratePathRoutes:\n- fromService: nginx\ntoService: node\npath: /api/v1\n

    Info

    If the per environment path routes are defined on an environment, any global defined ones are ignored.

    The supported fields for autogenerated path routes are:

    • fromService - the autogenerated route for the service you want to add the path based route to
    • toService - the backend service you want to route to
    • path - the path to send to the toService
    "},{"location":"concepts-basics/lagoon-yml/#custom-routes","title":"Custom Routes","text":"

    It is possible to turn on path based routes for a specific route too, the following .lagoon.yml example shows how.

    .lagoon.yml custom route path based routes

    environments:\nmain:\nroutes:\n- nginx:\n- a.example.com:\npathRoutes:\n- toService: node\npath: /api/v1\n
    The fields are the same, except that you can omit fromService due to the way that custom routes are defined already associated to a fromService in their normal configuration.

    "},{"location":"concepts-basics/lagoon-yml/#conditions","title":"Conditions","text":""},{"location":"concepts-basics/lagoon-yml/#autogenerated-route-configurations","title":"Autogenerated Route configurations","text":"

    If the global path routes for autogenerated routes are defined, but an environment has overrides, the global defined path routes are ignored by that environment.

    "},{"location":"concepts-basics/lagoon-yml/#additional-service-ports","title":"Additional Service Ports","text":"

    If the docker compose label lagoon.service.usecomposeports=true has been defined on a service, then the service name with the port number as a suffix to any ports beyond the default (first defined port) must be used as the toService. See Additional Service Ports for more information on this label.

    The following docker-compose.yml has an example of this label and the ports. This would create the default service port named node referencing port 1234, but also another service node-4321. If you need to create a path based route to port 4321, you would need to define the toService as node-4321.

    docker-compose.yml path based routes

    services:\nnginx:\nbuild:\ncontext: .\ndockerfile: basic.dockerfile\nlabels:\nlagoon.type: nginx\nlagoon.service.usecomposeports: true\nports:\n- '8080'\nnode:\nbuild:\ncontext: .\ndockerfile: basic.dockerfile\nlabels:\nlagoon.type: basic\nlagoon.service.usecomposeports: true\nports:\n- '1234'\n- '4321'\n
    Then you could create a route that would route a.example.com traffic to the nginx service. But any traffic destined for a.example.com/api/v1 would go to the node service on port 4321

    .lagoon.yml custom route path based routes
    environments:\nmain:\nroutes:\n- nginx:\n- a.example.com:\npathRoutes:\n- toService: node-4321\npath: /api/v1\n
    "},{"location":"concepts-basics/lagoon-yml/#urls","title":"URLs","text":"

    The path defined in the pathRoute will be passed to whichever toService is defined in all URL queries. This means if you're using the path defined as /api/v1 for example, then you may need to cater for this in your backend depending on how your backend is built.

    "},{"location":"concepts-basics/lagoon-yml/#path-types","title":"Path Types","text":"

    In Lagoon, currently only Prefix type is supported on ingress (see Ingress path types).

    "},{"location":"concepts-basics/lagoon-yml/#tasks","title":"Tasks","text":"

    There are different type of tasks you can define, and they differ in when exactly they are executed in a build flow:

    "},{"location":"concepts-basics/lagoon-yml/#pre-rollout-tasks-pre_rolloutirun","title":"Pre-Rollout Tasks - pre_rollout.[i].run","text":"

    Here you can specify tasks which will run against your project after all images have been successfully built, but before:

    • Any running containers are updated with the newly built images.
    • Any other changes are made to your existing environment.

    This feature enables you to, for example, create a database dump before updating your application. This can make it easier to roll back in case of a problem with the deploy.

    Info

    The pre-rollout tasks run in the existing pods before they are updated, which means:

    • Changes made to your Dockerfile since the last deploy will not be visible when pre-rollout tasks run.
    • If there are no existing containers (e.g. on the initial deployment of a new environment), pre-rollout tasks are skipped.
    "},{"location":"concepts-basics/lagoon-yml/#post-rollout-tasks-post_rolloutirun","title":"Post-Rollout Tasks - post_rollout.[i].run","text":"

    Here you can specify tasks which need to run against your project, after:

    • All images have been successfully built.
    • All containers are updated with the new images.
    • All containers are running have passed their readiness checks.

    Common uses for post-rollout tasks include running drush updb, drush cim, or clearing various caches.

    • name
      • The name is an arbitrary label for making it easier to identify each task in the logs.
    • command
      • Here you specify what command should run. These are run in the WORKDIR of each container, for Lagoon images this is /app. Keep this in mind if you need to cd into a specific location to run your task.
    • service
      • The service in which to run the task. If following our Drupal example, this will be the CLI container, as it has all your site code, files, and a connection to the database. Typically you do not need to change this.
    • container
      • If the service has multiple containers (e.g. nginx-php), you will need to specify which container in the pod to connect to (e.g. the php container within the nginx pod).
    • shell
      • In which shell the task should be run. By default sh is used, but if the container also has other shells (like bash, you can define it here). This is useful if you want to run some small if/else bash scripts within the post-rollouts. See the example below to learn how to write a script with multiple lines.
    • when
      • The \"when\" clause allows for the conditional running of tasks. It expects an expression that will evaluate to a true/false value which determines whether the task should be run.

    Note: If you would like to temporarily disable pre/post-rollout tasks during a deployment, you can set either of the following environment variables in the API at the project or environment level (see how on Environment Variables).

    • LAGOON_PREROLLOUT_DISABLED=true
    • LAGOON_POSTROLLOUT_DISABLED=true
    "},{"location":"concepts-basics/lagoon-yml/#example-post-rollout-tasks","title":"Example post-rollout tasks","text":"

    Here are some useful examples of post-rollout tasks that you may want to use or adapt for your projects.

    Run only if Drupal not installed:

    .lagoon.yml
    - run:\n  name: IF no Drupal installed\n  command: | # (1)\nif tables=$(drush sqlq \"show tables like 'node';\") && [ -z \"$tables\" ]; then\n#### whatever you like\nfi\nservice: cli\n  shell: bash\n
    1. This shows how to create a multi-line command.

    Different tasks based on branch name:

    .lagoon.yml
    - run:\nname: Different tasks based on branch name\ncommand: |\n### Runs if current branch is not 'production'\nservice: cli\nwhen: LAGOON_GIT_BRANCH != \"production\"\n

    Run shell script:

    .lagoon.yml
    - run:\nname: Run Script\ncommand: './scripts/script.sh'\nservice: cli\n

    Target specific container in pod:

    .lagoon.yml
    - run:\nname: show php env variables\ncommand: env\nservice: nginx\ncontainer: php\n

    Drupal & Drush 9: Sync database & files from master environment:

    .lagoon.yml
    - run:\n    name: Sync DB and Files from master if we are not on master\n    command: |\n# Only if we don't have a database yet\nif tables=$(drush sqlq 'show tables;') && [ -z \"$tables\" ]; then\ndrush sql-sync @lagoon.master @self # (1)\ndrush rsync @lagoon.master:%files @self:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n      fi\nservice: cli\n    when: LAGOON_ENVIRONMENT_TYPE != \"production\"\n
    1. Make sure to use the correct aliases for your project here.
    "},{"location":"concepts-basics/lagoon-yml/#backup-retention","title":"Backup Retention","text":""},{"location":"concepts-basics/lagoon-yml/#backup-retentionproductionmonthly","title":"backup-retention.production.monthly","text":"

    Specify the number of monthly backups Lagoon should retain for your project's production environment(s).

    The global default is 1 if this value is not specified.

    "},{"location":"concepts-basics/lagoon-yml/#backup-retentionproductionweekly","title":"backup-retention.production.weekly","text":"

    Specify the number of weekly backups Lagoon should retain for your project's production environment(s).

    The global default is 6 if this value is not specified.

    "},{"location":"concepts-basics/lagoon-yml/#backup-retentionproductiondaily","title":"backup-retention.production.daily","text":"

    Specify the number of daily backups Lagoon should retain for your project's production environment(s).

    The global default is 7 if this value is not specified.

    "},{"location":"concepts-basics/lagoon-yml/#backup-retentionproductionhourly","title":"backup-retention.production.hourly","text":"

    Specify the number of hourly backups Lagoon should retain for your project's production environment(s).

    The global default is 0 if this value is not specified.

    "},{"location":"concepts-basics/lagoon-yml/#backup-schedule","title":"Backup Schedule","text":""},{"location":"concepts-basics/lagoon-yml/#backup-scheduleproduction","title":"backup-schedule.production","text":"

    Specify the backup schedule for this project. Accepts cron-compatible syntax with the notable exception that the Minute block must be the letter M. Any other value in the Minute block will cause the Lagoon build to fail. This allows Lagoon to randomly choose a specific minute for these backups to happen, while users can specify the remainder of the schedule down to the hour.

    The global default is M H(22-2) * * * if this value is not specified. Take note that these backups will use the cluster's local timezone.

    "},{"location":"concepts-basics/lagoon-yml/#environments","title":"Environments","text":"

    Environment names match your deployed branches or pull requests. This allows for each environment to have a different config. In our example it will apply to the main and staging environment.

    "},{"location":"concepts-basics/lagoon-yml/#environmentsnameroutes","title":"environments.[name].routes","text":"

    Manual routes are domain names that are configured per environment to direct traffic to a service. Since all environments get automatically created routes by default, it is typical that manual routes are only setup for the production environment, using the main domain of the project's website like www.example.com.

    Tip

    Since Lagoon has no control over the manual routes, you'll need to ensure the DNS records are configured properly at your DNS provider. You can likely set a CNAME record to point to the automatic route.

    The first element after the environment is the target service, nginx in our example. This is how we identify which service incoming requests will be sent to.

    The simplest route is example.com, as seen in our example .lagoon.yml - you can see it has no additional configuration. This will assume that you want a Let's Encrypt certificate for your route and no redirect from HTTPS to HTTP.

    In the \"www.example.com\" example below, we see three more options (also notice the : at the end of the route and that the route is wrapped in \", that's important!):

    .lagoon.yml
    - \"www.example.com\":\ntls-acme: true\ninsecure: Redirect\nhstsEnabled: true\n
    "},{"location":"concepts-basics/lagoon-yml/#ssl-configuration-tls-acme","title":"SSL Configuration tls-acme","text":"

    Warning

    If you switch from tls-acme: true to tls-acme: false this will remove any previously generated certificates for this route. This could result in unexpected behaviour if you're using an external CDN and do any certificate pinning.

    • tls-acme: Configures automatic TLS certificate generation via Let's Encrypt. Default is true, set to false to disable automatic certificates.
    • insecure: Configures HTTP connections. Default is Allow.
      • Allow: Route will respond to HTTP and HTTPS.
      • Redirect: Route will redirect any HTTP request to HTTPS.
    • hstsEnabled: Adds the Strict-Transport-Security header. Default is false.
    • hstsMaxAge: Configures the max-age directive. Default is 31536000 (1 year).
    • hstsPreload: Sets the preload directive. Default is false.
    • hstsIncludeSubdomains: Sets the includeSubDomains directive. Default is false.

    Info

    If you plan to switch from a SSL certificate signed by a Certificate Authority (CA) to a Let's Encrypt certificate, it's best to get in touch with your Lagoon administrator to oversee the transition.

    "},{"location":"concepts-basics/lagoon-yml/#monitoring-a-specific-path","title":"Monitoring a specific path","text":"

    Info

    Lagoon does not provide any monitoring capabilties out of the box, only labels and annotations. Check with your Lagoon administrator if monitoring is supported.

    Lagoon will add the label lagoon.sh/primaryIngress=true to the first route defined in the .lagoon.yml file for an environment.

    If a specific path on a route requires monitoring, define monitoring-path with the path to use. Lagoon will add this path to the annotation monitor.stakater.com/overridePath to the route.

    .lagoon.yml
    - \"www.example.com\":\nmonitoring-path: \"/bypass-cache\"\n

    Info

    The annotation monitor.stakater.com/overridePath used by monitoring-path references the stakater monitoring controller, this is not used by Lagoon. This annotation will eventually be replaced with a lagoon.sh scoped annotation in the future.

    "},{"location":"concepts-basics/lagoon-yml/#ingress-annotations","title":"Ingress annotations","text":"

    Warning

    Route/Ingress annotations are only supported by projects that deploy into clusters that run nginx-ingress controllers! Check with your Lagoon administrator if this is supported.

    • annotations can be a YAML map of annotations supported by the nginx-ingress controller. This is specifically useful for easy redirects and other configurations.
    "},{"location":"concepts-basics/lagoon-yml/#restrictions","title":"Restrictions","text":"

    Some annotations are disallowed or partially restricted in Lagoon. The table below describes these rules.

    If your .lagoon.yml contains one of these annotations it will cause a build failure.

    Annotation Notes nginx.ingress.kubernetes.io/auth-snippet Disallowed nginx.ingress.kubernetes.io/configuration-snippet Restricted to rewrite, add_header, set_real_ip, and more_set_headers directives. nginx.ingress.kubernetes.io/modsecurity-snippet Disallowed nginx.ingress.kubernetes.io/server-snippet Restricted to rewrite, add_header, set_real_ip, and more_set_headers directives. nginx.ingress.kubernetes.io/stream-snippet Disallowed nginx.ingress.kubernetes.io/use-regex Disallowed"},{"location":"concepts-basics/lagoon-yml/#ingress-annotations-redirects","title":"Ingress annotations redirects","text":"

    In this example any requests to example.ch will be redirected to https://www.example.ch while keeping folders or query parameters intact (example.com/folder?query -> https://www.example.ch/folder?query).

    .lagoon.yml
    - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\n

    You can of course also redirect to any other URL not hosted on Lagoon, this will direct requests to example.de to https://www.google.com

    .lagoon.yml
    - \"example.de\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com\n
    "},{"location":"concepts-basics/lagoon-yml/#trusted-reverse-proxies","title":"Trusted Reverse Proxies","text":"

    Warning

    Kubernetes will only process a single nginx.ingress.kubernetes.io/server-snippet annotation. Please ensure that if you use this annotation on a non-production environment route that you also include the add_header X-Robots-Tag \"noindex, nofollow\"; annotation as part of your server-snippet. This is needed to stop robots from crawling development environments as the default server-snippet set to prevent this in development environments in the ingress templates will get overwritten with any server-snippets set in .lagoon.yml.

    Some configurations involve a reverse proxy (like a CDN) in front of the Kubernetes clusters. In these configurations, the IP of the reverse proxy will appear as the REMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR headers field in your applications. The original IP of the requester can be found in the HTTP_X_ORIGINAL_FORWARDED_FOR header.

    If you want the original IP to appear in the REMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR headers, you need to tell the ingress which reverse proxy IPs you want to trust:

    .lagoon.yml
    - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/server-snippet: |\nset_real_ip_from 1.2.3.4/32;\n

    This example would trust the CIDR 1.2.3.4/32 (the IP 1.2.3.4 in this case). Therefore if there is a request sent to the Kubernetes cluster from the IP 1.2.3.4 the X-Forwarded-For Header is analyzed and its contents injected into REMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR headers.

    "},{"location":"concepts-basics/lagoon-yml/#environmentsnametypes","title":"Environments.[name].types","text":"

    The Lagoon build process checks the lagoon.type label from the docker-compose.yml file in order to learn what type of service should be deployed (read more about them in the documentation of docker-compose.yml).

    Sometimes you might want to override the type just for a single environment, and not for all of them. For example, if you want a standalone MariaDB database (instead of letting the Service Broker/operator provision a shared one) for your non-production environment called develop:

    service-name: service-type

    • service-name is the name of the service from docker-compose.yml you would like to override.
    • service-type the type of the service you would like to use in your override.

    Example for setting up MariaDB_Galera:

    .lagoon.yml
    environments:\ndevelop:\ntypes:\nmariadb: mariadb-single\n
    "},{"location":"concepts-basics/lagoon-yml/#environmentsnametemplates","title":"environments.[name].templates","text":"

    The Lagoon build process checks the lagoon.template label from the docker-compose.yml file in order to check if the service needs a custom template file (read more about them in the documentation of docker-compose.yml).

    Sometimes you might want to override the template just for a single environment, and not for all of them:

    service-name: template-file

    • service-name is the name of the service from docker-compose.yml you would like to override.
    • template-file is the path and name of the template to use for this service in this environment.
    "},{"location":"concepts-basics/lagoon-yml/#example-template-override","title":"Example Template Override","text":".lagoon.yml
    environments:\nmain:\ntemplates:\nmariadb: mariadb.main.deployment.yml\n
    "},{"location":"concepts-basics/lagoon-yml/#environmentsnamerollouts","title":"environments.[name].rollouts","text":"

    The Lagoon build process checks the lagoon.rollout label from the docker-compose.yml file in order to check if the service needs a special rollout type (read more about them in the documentation of docker-compose.yml)

    Sometimes you might want to override the rollout type just for a single environment, especially if you also overwrote the template type for the environment:

    service-name: rollout-type

    • service-name is the name of the service from docker-compose.yml you would like to override.
    • rollout-type is the type of rollout. See documentation of docker-compose.yml) for possible values.
    "},{"location":"concepts-basics/lagoon-yml/#custom-rollout-type-example","title":"Custom Rollout Type Example","text":".lagoon.yml
    environments:\nmain:\nrollouts:\nmariadb: statefulset\n
    "},{"location":"concepts-basics/lagoon-yml/#environmentsnameautogenerateroutes","title":"environments.[name].autogenerateRoutes","text":"

    This allows for any environments to get autogenerated routes when route autogeneration is disabled.

    .lagoon.yml
    routes:\nautogenerate:\nenabled: false\nenvironments:\ndevelop:\nautogenerateRoutes: true\n
    "},{"location":"concepts-basics/lagoon-yml/#environmentsnamecronjobs","title":"environments.[name].cronjobs","text":"

    Cron jobs must be defined explicitly for each environment, since it is typically not desirable to run the same ones for all environments. Depending on the defined schedule, cron jobs may run as a Kubernetes native CronJob or as an in-pod cron job via the crontab of the defined service.

    "},{"location":"concepts-basics/lagoon-yml/#cron-job-example","title":"Cron Job Example","text":".lagoon.yml
    cronjobs:\n- name: Hourly Drupal Cron\nschedule: \"M * * * *\" # Once per hour, at a random minute.\ncommand: drush cron\nservice: cli\n- name: Nightly Drupal Cron\nschedule: \"M 0 * * *\" # Once per day, at a random minute from 00:00 to 00:59.\ncommand: drush cron\nservice: cli\n
    • name: Any name that will identify the purpose and distinguish it from other cron jobs.
    • schedule: The schedule for executing the cron job. Lagoon uses an extended version of the crontab format. If you're not sure about the syntax, use a crontab generator.

      • You can specify M for the minute, and your cron job will run once per hour at a random minute (the same minute each hour), or M/15 to run it every 15 mins, but with a random offset from the hour (like 6,21,36,51). It is a good idea to spread out your cron jobs using this feature, rather than have them all fire off on minute 0.
      • You can specify H for the hour, and your cron job will run once per day at a random hour (the same hour every day), or H(2-4) to run it once per day within the hours of 2-4.

    Timezones:

    • The default timezone for cron jobs is UTC.
    • Native cron jobs use the timezone of the node, which is UTC.
    • In-pod cron jobs use the timezone of the defined service, which can be configured to something other than UTC.
    • command: The command to execute. This executes in the WORKDIR of the service. For Lagoon images, this is /app.

    Warning

    Cronjobs may run in-pod, via crontab, which doesn't support multiline commands. If you need a complex or multiline cron command, you must put it in a script that can be used as the command. Consider whether a pre- or post-rollout task would work.

    Danger

    Cronjobs run in Kubernetes pods, which means they can be interrupted due to pod rescheduling. Therefore when creating a cronjob you must ensure that the command can be safely interrupted and re-run at the next cron interval.

    • service: Which service of your project to run the command in. For most projects, this should be the cli service.
    "},{"location":"concepts-basics/lagoon-yml/#polysite","title":"Polysite","text":"

    In Lagoon, the same Git repository can be added to multiple projects, creating what is called a polysite. This allows you to run the same codebase, but allow for different, isolated, databases and persistent files. In .lagoon.yml , we currently only support specifying custom routes for a polysite project. The key difference from a standard project is that the environments becomes the second-level element, and the project name the top level.

    To utilize this, you will need to:

    1. Create two (or more) projects in Lagoon, each configured with the same Git URL and production branch, named per your .lagoon.yml (i.e poly-project1 and poly-project2 below)
    2. Add the deploy keys from each project to the Git repository.
    3. Configure the webhook for the repository (if required) - you can then push/deploy. Note that a push to the repository will simultaneously deploy all projects/branches for that Git URL.
    "},{"location":"concepts-basics/lagoon-yml/#polysite-example","title":"Polysite Example","text":".lagoon.yml
    poly-project1:\nenvironments:\nmain:\nroutes:\n- nginx:\n- project1.com\npoly-project2:\nenvironments:\nmain:\nroutes:\n- nginx:\n- project2.com\n
    "},{"location":"concepts-basics/lagoon-yml/#specials","title":"Specials","text":""},{"location":"concepts-basics/lagoon-yml/#api","title":"api","text":"Info

    If you run directly on amazee.io hosted Lagoon you will not need this key set.

    With the key api you can define another URL that should be used by the Lagoon CLI and drush to connect to the Lagoon GraphQL API. This needs to be a full URL with a scheme, like: http://localhost:3000 This usually does not need to be changed, but there might be situations where your Lagoon administrator tells you to do so.

    "},{"location":"concepts-basics/lagoon-yml/#ssh","title":"ssh","text":"Info

    If you run directly on amazee.io hosted Lagoon you will not need this key set.

    With the key ssh you can define another SSH endpoint that should be used by the Lagoon CLI and drush to connect to the Lagoon remote shell service. This needs to be a hostname and a port separated by a colon, like: localhost:2020 This usually does not need to be changed, but there might be situations where your Lagoon administrator tells you to do so.

    "},{"location":"concepts-basics/lagoon-yml/#container-registries","title":"container-registries","text":"

    The container-registries block allows you to define your own private container registries to pull custom or private images.

    To use a private container registry, you will need a username, password, and optionally the url for your registry. If you don't specify a url in your YAML, it will default to using Docker Hub. We also recommend adding a description to your container-registry entries to provide a bit of information about them, some examples are provided.

    There are 2 ways to define the username and password used for your registry user.

    • Define them as environment variables in the API
    • Hardcode them in the .lagoon.yml file (we don't recommend this though)
    "},{"location":"concepts-basics/lagoon-yml/#environment-variables-method","title":"Environment variables method","text":"

    Firstly, define the container-registries in your .lagoon.yml, you don't need to define the username or password here. If you do use a custom registry, you will still need to provide the url, for example:

    .lagoon.yml
    container-registries:\ndocker-hub:\ndescription: \"username and password consumed from environment variables for the default docker.io registry\"\nmy-custom-registry:\ndescription: \"username and password consumed from environment variables for my custom registry\"\nurl: my.own.registry.com\nanother-custom-registry:\ndescription: \"password consumed from environment variables for my other registry\"\nusername: myotheruser\nurl: my.other.registry.com\n

    If you do define a username in the .lagoon.yml you don't need to add the associated variable, but if you do add the variable, the value of the variable will be prefered.

    Next, create environment variables in the Lagoon API with the type container_registry:

    • lagoon add variable -p <project_name> -N <registry_username_variable_name> -V <username_goes_here> -S container_registry
    • lagoon add variable -p <project_name> -N <registry_password_variable_name> -V <password_goes_here> -S container_registry
    • (see more on Environment Variables)

    The name of the variables should be the name of the registry defined in the .lagoon.yml file, it should be:

    • uppercase
    • replace - with _
    • have the prefix REGISTRY_
    • have the suffix of _USERNAME or _PASSWORD.

    Some examples of this are:

    • dockerhub would become REGISTRY_DOCKERHUB_USERNAME and REGISTRY_DOCKERHUB_PASSWORD
    • docker-hub would become REGISTRY_DOCKER_HUB_USERNAME and REGISTRY_DOCKER_HUB_PASSWORD
    • my-custom-registry would become REGISTRY_MY_CUSTOM_REGISTRY_USERNAME and REGISTRY_MY_CUSTOM_REGISTRY_PASSWORD
    • lowercased versions may still work if there are no - in them, for example REGISTRY_dockerhub_USERNAME, but the uppercased version will always be chosen above others.
    Legacy method of defining registry password

    A previous method that allowed for the password to be defined using an environment variable, with the name of the variable to be defined in the .lagoon.yml file like so: .lagoon.yml

    container-registries:\ndocker-hub:\nusername: dockerhubuser\npassword: MY_DOCKER_HUB_PASSWORD\n

    the username needs to be provided in this file too, unless the supported variable for defining the username is provided.

    The variable can then ba added to the API like so

    • lagoon add variable -p <project_name> -N MY_DOCKER_HUB_PASSWORD -V <password_goes_here> -S container_registry

    While we will continue to support this method, it may be deprecated in the future, we will ensure that warnings are presented within builds to give time for users to change to the supported method.

    If a supported variable password is provided, it will be used instead of the custom named variable.

    "},{"location":"concepts-basics/lagoon-yml/#hardcoded-values-method","title":"Hardcoded values method","text":"

    You can also define the password directly in the .lagoon.yml file in plain text, however we do not recommend this.

    .lagoon.yml
    container-registries:\ndocker-hub:\ndescription: \"the default docker.io registry credentials\"\nusername: dockerhubuser\npassword: MySecretPassword\nmy-custom-registry:\ndescription: \"the credentials for my own registry\"\nurl: my.own.registry.com\nusername: mycustomuser\npassword: MyCustomSecretPassword\n
    "},{"location":"concepts-basics/lagoon-yml/#consuming-a-custom-or-private-container-registry-image","title":"Consuming a custom or private container registry image","text":"

    To consume a custom or private container registry image, you need to update the service inside your docker-compose.yml file to use a build context instead of defining an image:

    .docker-compose.yml
    services:\nmariadb:\nbuild:\ncontext: .\ndockerfile: Dockerfile.mariadb\n

    Once the docker-compose.yml file has been updated to use a build, you need to create the Dockerfile.<service> and then set your private image as the FROM <repo>/<name>:<tag>

    .lagoon.yml
    FROM dockerhubuser/my-private-database:tag\n
    "},{"location":"concepts-basics/lagoon-yml/#example-lagoonyml","title":"Example .lagoon.yml","text":"

    This is an example .lagoon.yml which showcases all possible settings. You will need to adapt it to your project.

    .lagoon.yml
    docker-compose-yaml: docker-compose.yml\nenvironment_variables:\ngit_sha: 'true'\ntasks:\npre-rollout:\n- run:\nname: drush sql-dump\ncommand: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz\nservice: cli\npost-rollout:\n- run:\nname: drush cim\ncommand: drush -y cim\nservice: cli\nshell: bash\n- run:\nname: drush cr\ncommand: drush -y cr\nservice: cli\nroutes:\nautogenerate:\ninsecure: Redirect\nenvironments:\nmain:\nroutes:\n- nginx:\n- example.com\n- example.net\n- \"www.example.com\":\ntls-acme: true\ninsecure: Redirect\nhstsEnabled: true\n- \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\ntypes:\nmariadb: mariadb\ntemplates:\nmariadb: mariadb.main.deployment.yml\nrollouts:\nmariadb: statefulset\ncronjobs:\n- name: drush cron\nschedule: \"M * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nstaging:\ncronjobs:\n- name: drush cron\nschedule: \"M * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nfeature/feature-branch:\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\n
    "},{"location":"concepts-basics/lagoon-yml/#deprecated","title":"Deprecated","text":"

    These settings have been deprecated and should be removed from use in your .lagoon.yml.

    • routes.autogenerate.insecure

      The None option is equivalent to Redirect.

    • environments.[name].monitoring_urls
    • environments.[name].routes.[service].[route].hsts
    • environments.[name].routes.[service].[route].insecure

      The None option is equivalent to Redirect.

    "},{"location":"concepts-basics/building-blocks/deploy-targets/","title":"Deploy Targets","text":"

    A deploy target tells Lagoon where to deploy your project - into which cluster. A project may have one or more deploy targets, for example, one for production and one for testing. Deploy targets have options that allow for automatic deployment of defined branches, as well as pull requests.

    Read more about deploy targets.

    "},{"location":"concepts-basics/building-blocks/groups/","title":"Groups","text":"

    Groups are made up of users who have roles. An organization can have one or more groups. Each project can be assigned one or more groups. Groups can be assigned to multiple projects. Groups are created independently of projects, and then assigned to them.

    Organizations have a quota to limit the number of groups assigned to it. If you need to change the quota, please contact your Lagoon administrator.

    "},{"location":"concepts-basics/building-blocks/notifications/","title":"Notifications","text":"

    Notifications are how Lagoon informs users about what's going on with their projects. There are several types of notifications:

    • Slack
    • RocketChat
    • Email
    • Webhook
    • Microsoft Teams

    A project can have one or more notifications. Organizations have a notification quota for all of their projects. Notifications are created independently of projects, and can then be assigned to one or more projects.

    Learn how to add notifications step-by-step in the Lagoon UI.

    Learn how to add notifications notifications via the API.

    "},{"location":"concepts-basics/building-blocks/organizations/","title":"Organizations","text":"

    An organization is an entity which can contain one or more projects, groups, users, and notifications. Organizations help control access to projects, making it easy to create groups, add and remove users, and assign groups to projects.

    Organizations add a layer of structure to help imitate life - for example, you may be a project manager who creates an organization to reflect the team working on a specific site. So that organization would contain the project or projects that make up that site, all of the people who need access to work on the site as users in a group called developers, and maybe another group of people who just need access to Lagoon to view the site and any issues, called viewers, each with the appropriate roles.

    Organizations have a quota to limit the number of projects, groups, notifications, and environments that can be assigned to it. If you need to change this quota, please contact your Lagoon administrator.

    Learn more about how to interact with Organizations.

    "},{"location":"concepts-basics/building-blocks/projects/","title":"Projects","text":"

    A project is an application that lives on Lagoon. An organization may have one or more projects. A project may have one or more users, notifications, and at least one deploy target. Organizations have a quota to limit the amount of projects that can be created.

    "},{"location":"concepts-basics/building-blocks/roles/","title":"Roles","text":"

    Roles determine a user's access to projects. Users are given roles in groups and organizations.

    Members of groups can be given the following roles:

    • Guest
    • Reporter
    • Developer
    • Maintainer
    • Owner

    These roles and their permissions are described in more depth here: Role-Based Access Control.

    Members of organizations can be given the following roles:

    • Org Owner
    • Org Viewer

    Changing Quotas

    If you need to change quotas, please contact your Lagoon administrator.

    An organization owner can do everything to do with administering an organization aside from changing quotas. They can add and delete users, groups, projects, deploy targets, and notifcations

    An organization viewer is a read-only role that can only view the organization, but cannot make any changes or additions. They can view the projects, groups, users, and notifications within an organization but cannot modify them.

    A user who has not been assigned as an owner or viewer cannot see the organization.

    "},{"location":"concepts-basics/building-blocks/users/","title":"Users","text":"

    A user is a Lagoon account that allows you to interact with the Lagoon system. A user may belong to one or more organizations and groups, and each group may have a different role granting various permissions. Organizations, groups, and roles grant users access to projects.

    Read more about user roles.

    "},{"location":"contributing-to-lagoon/api-debugging/","title":"API Debugging","text":"

    1 . Ensure the dev script at services/api/package.json includes the following:

    services/api/package.json
    node --inspect=0.0.0.0:9229\n

    2 . Update docker-compose.yml to map the dist folder and expose the 9229 port:

    docker-compose.yml
      api:\nimage: ${IMAGE_REPO:-lagoon}/api\ncommand: yarn run dev\nvolumes:\n- ./services/api/src:/app/services/api/src\n- ./services/api/dist:/app/services/api/dist\ndepends_on:\n- api-db\n- local-api-data-watcher-pusher\n- keycloak\nports:\n- '3000:3000'\n- '9229:9229'\n

    3 . Add the following to .vscode/launch.json:

    .vscode/launch.json
    {\n// Use IntelliSense to learn about possible attributes.\n// Hover to view descriptions of existing attributes.\n// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387.\n\"version\": \"0.2.0\",\n\"configurations\": [\n{\n\"name\": \"Docker: Attach to Node\",\n\"type\": \"node\",\n\"request\": \"attach\",\n\"port\": 9229,\n\"address\": \"localhost\",\n\"outFiles\": [\"${workspaceRoot}/app/services/api/dist/**/*.js\"],\n\"localRoot\": \"${workspaceFolder}/services/api\",\n\"remoteRoot\": \"/app/services/api\",\n\"sourceMaps\": true,\n\"protocol\": \"inspector\"\n}\n]\n}\n

    4 . Rebuild/restart the containers:

    Restart containers
    rm build/api && make build/api && docker compose restart api\n

    5 . Restart VScode.

    "},{"location":"contributing-to-lagoon/developing-lagoon/","title":"Developing Lagoon","text":"

    Development of Lagoon locally can now be performed on a local Kubernetes cluster, or via Docker Compose (as a fallback).

    Note

    The full Lagoon stack relies on a range of upstream projects which are currently incompatible with ARM-based architectures, such as the the M1/M2 Apple Silicon-based machines. For this reason, running or developing lagoon-core or lagoon-remote locally on these architectures is not currently supported. See https://github.com/uselagoon/lagoon/issues/3189 for more information.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#required-command-line-tools","title":"Required command line tools","text":"

    Some tools are required that are not downloaded/linked by the makefile, some systems may have these installed already.

    • envsubst
    • wget

    Mac users can install these via brew:

    Text Only
    brew install wget gettext\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#docker","title":"Docker","text":"

    Docker must be installed to build and run Lagoon locally.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#install-docker-and-docker-compose","title":"Install Docker and Docker Compose","text":"

    Please check the official docs for how to install Docker.

    Docker Compose is included in Docker for Mac installations. For Linux installations see the directions here.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#configure-docker","title":"Configure Docker","text":"

    You will need to update your insecure registries in Docker. Read the instructions here on how to do that. We suggest adding the entire local IPv4 Private Address Spaces to avoid unnecessary reconfiguration between Kubernetes and Docker Compose. e.g. \"insecure-registries\" : [\"172.16.0.0/12\",\"192.168.0.0/16\"],

    "},{"location":"contributing-to-lagoon/developing-lagoon/#allocate-enough-docker-resources","title":"Allocate Enough Docker Resources","text":"

    Running a Lagoon, Kubernetes, or Docker cluster on your local machine consumes a lot of resources. We recommend that you give your Docker host a minimum of 8 CPU cores and 12GB RAM.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#macos-docker-networking","title":"MacOS Docker Networking","text":"

    Unfortunately Docker for Mac runs Docker inside a lightweight VM. This makes some of the functionality that Linux users enjoy, unusable in MacOS. That functionality is the ability to route to container IP addresses within the docker networks directly. On MacOS this is not possible out of the box.

    You can install the following package https://github.com/chipmk/docker-mac-net-connect. What this software does is create a tunnel between the Docker VM and the host and creates routes for the internal docker networks to the host. This allows you to access the Lagoon services in the docker network that is exposed inside of k3d the same way users developing on Linux would.

    Text Only
    # Install via Homebrew\n$ brew install chipmk/tap/docker-mac-net-connect\n# Run the service and register it to launch at boot\n$ sudo brew services start chipmk/tap/docker-mac-net-connect\n# Stop the service\n$ sudo brew services stop chipmk/tap/docker-mac-net-connect\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#build-lagoon-locally","title":"Build Lagoon Locally","text":"

    Warning

    Only consider building Lagoon this way if you intend to develop features or functionality for it, or want to debug internal processes. We will also be providing instruction to install Lagoon without building it (i.e. by using the published releases).

    We're using make (see the Makefile) in order to build the needed Docker images, configure Kubernetes and run tests.

    We have provided a number of routines in the Makefile to cover most local development scenarios. Here we will run through a complete process.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#build-images","title":"Build images","text":"
    1. Here -j8 tells make to run 8 tasks in parallel to speed the build up. Adjust as necessary.
    2. We have set SCAN_IMAGES=false as a default to not scan the built images for vulnerabilities. If set to true, a scan.txt file will be created in the project root with the scan output.
    Build images
    make -j8 build\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#deploy-a-local-lagoon-development-stack-without-test-suites","title":"Deploy a local Lagoon development stack without test suites","text":"

    The make file offers a command that allows you to spin up Lagoon inside of a k3d cluster locally and explore its functionality.

    Using the following make command will create a k3d cluster, install Lagoon and all of the necessary components to get you up and running and ready to explore.

    Deploy local stack
    make k3d/local-stack\n

    Warning

    This can take some time to complete as it will install a lot of components necessary to make Lagoon work. This includes things like ingress-nginx, harbor, and all the additional services to make exploring Lagoon easy.

    At the end of the process, the command will provide some useful information that will get you up and running and able to log in to the UI or using the API with tools like the Lagoon CLI.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#run-the-lagoon-test-suite","title":"Run the Lagoon test-suite","text":"

    If you're developing new functionality in Lagoon and want to make sure the tests complete, you can run the entire test suite using the following options

    1. Start Lagoon test routine using the defaults in the Makefile (all tests).
    Start tests
    make k3d/test\n# or use retest if you already have a local stack running\nmake k3d/retest\n

    Warning

    There are a lot of tests configured to run by default - please consider only testing locally the minimum that you need to ensure functionality. This can be done by specifying or removing tests from the TESTS variable in the Makefile.

    This process will:

    1. Download the correct versions of the local development tools if not installed - k3d, kubectl, helm, jq.
    2. Update the necessary Helm repositories for Lagoon to function.
    3. Ensure all of the correct images have been built in the previous step.
    4. Create a local K3D cluster, which provisions an entire running Kubernetes cluster in a local Docker container. This cluster has been configured to talk to a provisioned image registry that we will be pushing the built Lagoon images to. It has also been configured to allow access to the host filesystem for local development.
    5. Clone Lagoon from https://github.com/uselagoon/lagoon-charts (use the CHARTS_TREEISH variable in the Makefile to control which branch if needed).
    6. Install the Harbor Image registry into the K3D cluster and configure its ingress and access properly.
    7. Docker will push the built images for Lagoon into the Harbor image registry.
    8. It then uses the Makefile from lagoon-charts to perform the rest of the setup steps.
    9. A suitable ingress controller is installed - we use the NGINX Ingress Controller.
    10. A local NFS server provisioner is installed to handle specific volume requests - we use one that handles Read-Write-Many operations (RWX).
    11. Lagoon Core is then installed, using the locally built images pushed to the cluster-local Image Registry, and using the default configuration, which may exclude some services not needed for local testing. The installation will wait for the API and Keycloak to come online.
    12. The DBaaS providers are installed - MariaDB, PostgreSQL and MongoDB. This step provisions standalone databases to be used by projects running locally, and emulates the managed services available via cloud providers (e.g. Cloud SQL, RDS or Azure Database).
    13. Lagoon Remote is then installed, and configured to talk to the Lagoon Core, databases and local storage. The installation will wait for this to complete before continuing.
    14. To provision the tests, the Lagoon Test chart is then installed, which provisions a local Git server to host the test repositories, and pre-configures the Lagoon API database with the default test users, accounts and configuration. It then performs readiness checks before starting tests.
    15. Lagoon will run all the tests specified in the TESTS variable in the Makefile. Each test creates its own project & environments, performs the tests, and then removes the environments & projects. The test runs are output to the console log in the lagoon-test-suite-* pod, and can be accessed one test per container.

    Ideally, all of the tests pass and it's all done!

    "},{"location":"contributing-to-lagoon/developing-lagoon/#view-the-test-progress-and-your-local-cluster","title":"View the test progress and your local cluster","text":"

    The test routine creates a local Kubeconfig file (called kubeconfig.k3d.lagoon in the root of the project, that can be used with a Kubernetes dashboard, viewer or CLI tool to access the local cluster. We use tools like Lens, Octant, kubectl or Portainer in our workflows. Lagoon Core and the tests build in the lagoon-core namespace, Remote is installed in the Lagoon namespace. Each lagoon test environment creates its own namespace to run, so make sure to use the correct context when inspecting.

    In order to use kubectl with the local cluster, you will need to use the correct Kubeconfig. This can be done for every command or it can be added to your preferred tool:

    kubeconfig.k3d.lagoon
    KUBECONFIG=./kubeconfig.k3d.lagoon kubectl get pods -n lagoon\n

    The Helm charts used to build the local Lagoon are cloned into a local folder and symlinked to lagoon-charts.k3d.lagoon where you can see the configuration. We'll cover how to make easy modifications later in this documentation.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#interact-with-your-local-lagoon-cluster","title":"Interact with your local Lagoon cluster","text":"

    The Makefile includes a few simple routines that will make interacting with the installed Lagoon simpler:

    "},{"location":"contributing-to-lagoon/developing-lagoon/#port-forwarding","title":"Port forwarding","text":"

    Clusters deployed by this makefile will provide loadbalancers and individual IPs, but if you choose to you can port-forward some services using the following

    Create local ports
    make k3d/port-forwards\n

    This will create local ports to expose the UI (6060), API (7070) and Keycloak (8080). Note that this logs to stdout, so it should be performed in a secondary terminal/window.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#lagoon-credentialsinformation","title":"Lagoon credentials/information","text":"

    This will retrieve the necessary credentials to interact with the Lagoon.

    Retrieve admin creds
    make k3d/get-lagoon-details\n
    • The JWT is an admin-scoped token for use as a bearer token with your local GraphQL client. See more in our GraphQL documentation.
    • There is a token for use with the \"admin\" user in Keycloak, who can access all users, groups, roles, etc.

    It is also possible to get the command snippet to add the configuration for the local-stack to your lagoon-cli.

    Retrieve admin creds
    make k3d/get-lagoon-cli-details\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#rebuild-lagoon-core-and-push-images","title":"Rebuild Lagoon core and push images","text":"

    This will re-push the images listed in KIND_SERVICES with the correct tag, and redeploy the lagoon-core chart. This is useful for testing small changes to Lagoon services, but does not support \"live\" development. You will need to rebuild these images locally first, e.g rm build/api && make build/api.

    Re-push images
    make k3d/dev\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#patch-with-local-nodejs","title":"Patch with local node.js","text":"

    This will build the typescript services, using your locally installed Node.js (it should be >16.0). It will then:

    Build typescript services
    make k3d/local-dev-patch\n
    • Mount the \"dist\" folders from the Lagoon services into the correct lagoon-core pods in Kubernetes
    • Redeploy the lagoon-core chart with the services running with nodemonwatching the code for changes
    • This will facilitate \"live\" development on Lagoon.
    • Note that occasionally the pod in Kubernetes may require redeployment for a change to show. Clean any build artifacts from those services if you're rebuilding different branches with git clean -dfx as the dist folders are ignored by Git.
    "},{"location":"contributing-to-lagoon/developing-lagoon/#install-simple-logging-support","title":"Install simple Logging support","text":"

    This will create a standalone OpenDistro for Elasticsearch cluster in your local Docker, and configure Lagoon to dispatch all logs (Lagoon and project) to it, using the configuration in lagoon-logging.

    Initiate logging
    make k3d/local-dev-logging\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#re-run-specific-tests","title":"Re run specific tests","text":"

    This will re-run a suite of tests (defined in the TESTS variable) against the existing cluster. It will re-push the images needed for tests (tests, local-git, and the data-watcher-pusher). You can specify tests to run by passing the TESTS variable inline.

    Re-run tests.
    make k3d/retest\n# OR\nmake k3d/retest TESTS='[features-kubernetes]'\n

    If updating a test configuration, the tests image will need to be rebuilt and pushed, e.g rm build/tests && make build/tests && make k3d/push-images IMAGES='tests' && make k3d/retest TESTS='[api]'

    "},{"location":"contributing-to-lagoon/developing-lagoon/#push-images","title":"Push images","text":"

    This will push all the images up to the image registry. Specifying IMAGES will tag and push specific images.

    Push all images
    make k3d/push-images\n# OR\nmake k3d/push-images IMAGES='tests local-git'\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#tear-down","title":"Tear down","text":"

    This will remove the K3D Lagoon cluster from your local Docker.

    Remove cluster
    make k3d/clean\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#ansible","title":"Ansible","text":"

    The Lagoon test uses Ansible to run the test suite. Each range of tests for a specific function has been split into its own routine. If you are performing development work locally, select which tests to run, and update the $TESTS variable in the Makefile to reduce the concurrent tests running.

    The configuration for these tests is held in three services:

    • tests is the Ansible test services themselves. The local testing routine runs each individual test as a separate container within a test-suite pod. These are listed below.
    • local-git is a Git server hosted in the cluster that holds the source files for the tests. Ansible pulls and pushes to this repository throughout the tests
    • api-data-watcher-pusher is a set of GraphQL mutations that pre-populates local Lagoon with the necessary Kubernetes configuration, test user accounts and SSH keys, and the necessary groups and notifications. Note that this will wipe local projects and environments on each run.

    The individual routines relevant to Kubernetes are:

    • active-standby-kubernetes runs tests to check active/standby in Kubernetes.
    • api runs tests for the API - branch/PR deployment, promotion.
    • bitbucket, gitlab and github run tests for the specific SCM providers.
    • drupal-php74 runs a single-pod MariaDB, MariaDB DBaaS and a Drush-specific test for a Drupal 8/9 project (drupal-php73 doesn't do the Drush test).
    • drupal-postgres runs a single-pod PostgreSQL and a PostgreSQL DBaaS test for a Drupal 8 project.
    • elasticsearch runs a simple NGINX proxy to an Elasticsearch single-pod.
    • features-variables runs tests that utilize variables in Lagoon.
    • features-kubernetes runs a range of standard Lagoon tests, specific to Kubernetes.
    • features-kubernetes-2 runs more advanced kubernetes-specific tests - covering multi-project and subfolder configurations.
    • nginx, node and python run basic tests against those project types.
    • node-mongodb runs a single-pod MongoDB test and a MongoDB DBaaS test against a Node.js app.
    "},{"location":"contributing-to-lagoon/developing-lagoon/#local-development","title":"Local Development","text":"

    Most services are written in Node.js. As many of these services share similar Node.js code and Node.js packages, we're using a feature of Yarn, called Yarn workspaces. Yarn workspaces need a package.json in the project's root directory that defines the workspaces.

    The development of the services can happen directly within Docker. Each container for each service is set up in a way that its source code is mounted into the running container (see docker-compose.yml). Node.js itself is watching the code via nodemon , and restarts the Node.js process automatically on a change.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#lagoon-commons","title":"lagoon-commons","text":"

    The services not only share many Node.js packages, but also share actual custom code. This code is within node-packages/lagoon-commons. It will be automatically symlinked by Yarn workspaces. Additionally, the nodemon of the services is set up in a way that it checks for changes in node-packages and will restart the node process automatically.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#troubleshooting","title":"Troubleshooting","text":""},{"location":"contributing-to-lagoon/developing-lagoon/#i-cant-build-a-docker-image-for-any-nodejs-based-service","title":"I can't build a Docker image for any Node.js based service","text":"

    Rebuild the images via:

    Rebuild images
        make clean\n    make build\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#i-get-errors-about-missing-node_modules-content-when-i-try-to-build-run-a-nodejs-based-image","title":"I get errors about missing node_modules content when I try to build / run a Node.js based image","text":"

    Make sure to run yarn in Lagoon's root directory, since some services have common dependencies managed by yarn workspaces.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#i-get-an-error-resolving-the-nipio-domains","title":"I get an error resolving the nip.io domains","text":"Error
    Error response from daemon: Get https://registry.172.18.0.2.nip.io/v2/: dial tcp: lookup registry.172.18.0.2.nip.io: no such host\n

    This can happen if your local resolver filters private IPs from results. You can work around this by editing /etc/resolv.conf and adding a line like nameserver 8.8.8.8 at the top to use a public resolver that doesn't filter results.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#i-want-to-be-able-to-test-email-in-a-demo-environment-using-the-lagoon-built-in-ssmtp-configuration-entrypoints","title":"I want to be able to test email in a demo environment using the lagoon built in ssmtp configuration entrypoints","text":"

    This k3d cluster installs a mail catching service that is available at mxout.lagoon.svc:25 within the cluster (it also has a web interface make k3d/get-lagoon-details for details). Some images in lagoon support SSMTP_MAILHUB variable, which can be added to a project using the lagoon-cli, or the following graphql via the API.

    Text Only
    addOrUpdateEnvVariableByName(\n    input: {\n        project: \"lagoon-demo\"\n        scope: RUNTIME\n        name: \"SSMTP_MAILHUB\"\n        value: \"mxout.lagoon.svc:25\"\n    }\n) {\n    id\n}\n
    "},{"location":"contributing-to-lagoon/developing-lagoon/#example-workflows","title":"Example workflows","text":"

    Here are some development scenarios and useful workflows for getting things done.

    "},{"location":"contributing-to-lagoon/developing-lagoon/#add-tests","title":"Add tests","text":"

    An example

    1. Deploy the lagoon and run the test you're modifying.
    Deploy Lagoon
    make k3d/test TESTS=[features-variables]\n
    1. Edit tests/tests/features-variables.yaml and add a test case.
    2. Rebuild the tests image.
    Build tests
    rm build/tests\nmake -j8 build/tests\n
    1. Push the new tests image into the cluster registry.
    Push test image
    make k3d/push-images IMAGES=tests\n
    1. Rerun the tests.
    Re-run tests
    make k3d/retest TESTS=[features-variables]\n
    "},{"location":"contributing-to-lagoon/documentation/","title":"Contributing to Lagoon documentation","text":"

    We really value anything that you can offer us!

    We've made building and viewing the documentation really straightforward, and the team is always ready to help out with reviews or pointers.

    We use mkdocs with the excellent Material theme.

    "},{"location":"contributing-to-lagoon/documentation/#viewing-and-updating-docs-locally","title":"Viewing and updating docs locally","text":"

    From the root of the Lagoon repository (you'll need Docker), run:

    Get local docs up and running.
    docker run --rm -it -p 127.0.0.1:8000:8000 -v ${PWD}:/docs ghcr.io/amazeeio/mkdocs-material\n

    This will start a development server on http://127.0.0.1:8000, configured to live-reload on any updates.

    The customized Docker image contains all the necessary extensions.

    Alternatively, to run the mkdocs package locally, you'll need to install mkdocs, and then install all of the necessary plugins.

    Install mkdocs
    pip3 install -r docs/requirements.txt\nmkdocs serve\n
    "},{"location":"contributing-to-lagoon/documentation/#editing-in-the-cloud","title":"Editing in the Cloud","text":"

    Each documentation page also has an \"edit\" pencil in the top right, that will take you to the correct page in the Git repository.

    Feel free to contribute here, too - you can always use the built-in github.dev web-based editor. It's got basic Markdown previews, but none of the mkdocs loveliness.

    "},{"location":"contributing-to-lagoon/documentation/#how-we-deploy-documentation","title":"How we deploy documentation","text":"

    We use the Deploy MkDocs GitHub Action to build all main branch pushes, and trigger a deployment of the gh-pages branch.

    "},{"location":"contributing-to-lagoon/releasing/","title":"Releasing Lagoon","text":"

    Lagoon has a number of moving parts, making releases quite complicated!

    "},{"location":"contributing-to-lagoon/releasing/#lagoon-core-tags-and-testing","title":"Lagoon-core - tags and testing","text":"
    1. Ensure all the identified pull requests have been merged into main branch for:
      • uselagoon/lagoon
      • uselagoon/build-deploy-tool
      • uselagoon/lagoon-ui
    2. Once you are confident, push the next tag in sequence (minor or patch) to the main branch in the format v2.MINOR.PATCH as per semver. This will trigger a Jenkins build, visible at https://ci.lagoon.sh/blue/organizations/jenkins/lagoon/branches
    3. Whilst this is building, push lightweight tags to the correct commits on lagoon-ui and build-deploy-tool in the format core-v2.MINOR.PATCH. Note that there are no other tags or releases on build-deploy-tool, but lagoon-ui also has it's own semver releases that are based on it's features.
    4. Once the build has completed successfully in Jenkins, head to https://github.com/uselagoon/lagoon-charts to prepare the charts release
    5. In the chart.yaml for the lagoon-core and lagoon-test charts, update the following fields:

      • version: This is the next \"minor\" release of the chart - we usually use minor for a corresponding lagoon-core release
      • appVersion: This is the actual tag of the released lagoon-core
      • artifacthub.io/changes: All that's needed are the two lines in the below snippet, modified for the actual appVersion being released.

      sample chart.yml snippets

      # This is the chart version. This version number should be incremented each\n# time you make changes to the chart and its templates, including the app\n# version.\n# Versions are expected to follow Semantic Versioning (https://semver.org/)\nversion: 1.28.0\n# This is the version number of the application being deployed. This version\n# number should be incremented each time you make changes to the application.\n# Versions are not expected to follow Semantic Versioning. They should reflect\n# the version the application is using.\nappVersion: v2.14.2\n# This section is used to collect a changelog for artifacthub.io\n# It should be started afresh for each release\n# Valid supported kinds are added, changed, deprecated, removed, fixed and security\nannotations:\nartifacthub.io/changes: |\n- kind: changed\ndescription: update Lagoon appVersion to v2.14.2\n
      Only lagoon-core and lagoon-test charts are updated as a result of a lagoon-core release. Follow the lagoon-remote process if there are any other changes.

    6. Create a PR for this chart release, and the Github Actions suite will undertake a full suite of tests:

      • Lint and test charts - matrix: performs a lint and chart install against the current tested version of Kubernetes
      • Lint and test charts - current: performs a lint and chart install against previous/future versions of Kubernetes
      • Lagoon tests: runs the full series of ansible tests against the release.

      Usually, failures in the lint and test charts are well explained (missing/misconfigured chart settings). If a single Lagoon test failes, it may just need re-running. If multiple failures occur, they will need investigating.

    Once those tests have all passed successfully, you can proceed with creating the releases:

    "},{"location":"contributing-to-lagoon/releasing/#lagoon-core-releases-and-release-notes","title":"Lagoon-core - releases and release notes","text":"
    1. In uselagoon/lagoon create a release from the tag pushed earlier. Use the \"Generate release notes\" button to create the changelog. Look at previous releases for what we include in the release - and the lagoon-images link will always be the most recent released version. Note that the links to the charts, lagoon-ui and build-deploy-tool can all be filled in now, but the links won't work until the future steps. Mark this as the latest release and Publish the release.
    2. In uselagoon/build-deploy-tool create a release from the tag pushed earlier. Use the \"Generate release notes\" button to create the changelog - ensuring that the last core-v2.X tag is used, not any other tag. Look at previous releases for what we include in the release - Mark this as the latest release and Publish the release.
    3. In uselagoon/lagoon-ui create a release from the tag pushed earlier. Use the \"Generate release notes\" button to create the changelog - ensuring that the last core-v2.X tag is used, not any other tag. Look at previous releases for what we include in the release - Mark this as the latest release and Publish the release.
    4. In uselagoon/lagoon-charts merge the successful PR, this will create the lagoon-core and lagoon-test releases for you. Edit the resulting lagoon-core chart release to note the corresponding lagoon release in the title and text box, as per previous releases.
    "},{"location":"contributing-to-lagoon/releasing/#lagoon-remote-releases-and-release-notes","title":"Lagoon-remote - releases and release notes","text":"

    Lagoon remote has a release cycle separate to Lagoon Core, and as such, can be released anytime that a dependency sub-chart or service is updated.

    "},{"location":"contributing-to-lagoon/tests/","title":"Tests","text":"

    All of our tests are written with Ansible and mostly follow this approach:

    1. They create a new Git repository.
    2. Add and commit some files from a list of files (in tests/files) into this Git repository.
    3. Push this Git repository to a Git server (either locally or on GitHub).
    4. Send a trigger to a trigger service (for example a webhook to the webhook handler, which is the same as a real webhook that would be sent).
    5. Starts to monitor the URL at which the test would expect something to happen (like deploying a Node.js app that has the Git branch as an HTML text).
    6. Compares the result on the URL with the expected result.

    Lagoon is mostly tested in 3 different ways:

    "},{"location":"contributing-to-lagoon/tests/#1-locally","title":"1. Locally","text":"

    During local development, the best way to test is locally. All tests are started via make. Make will download and build all the required dependencies.

    Make tests
    make tests\n

    This will run all defined tests. If you only want to run a subset of the tests, run make tests-list to see all existing tests and run them individually.

    For example, make tests/node will run the Node.js Docker images tests.

    In order to actually see what is happening inside the microservices, we can use make logs:

    Make logs
    make logs\n

    Or only for a specific service:

    Make logs
    make logs service=webhook-handler\n
    "},{"location":"contributing-to-lagoon/tests/#2-automated-integration-testing","title":"2. Automated integration testing","text":"

    In order to test pull requests that are created against Lagoon, we have a fully automatic integration test running on a dedicated Jenkins instance: https://ci.lagoon.sh. It is defined inside the .Jenkinsfile, and runs automatically for every pull request that is opened.

    This will build all images, start a Kubernetes cluster and run a series of tests.

    The tests can be found here:

    • https://ci.lagoon.sh/blue/organizations/jenkins/lagoon/activity
    "},{"location":"docker-images/commons/","title":"Commons","text":"

    The Lagoon commons Docker image. Based on the official Alpine images.

    This image has no functionality itself, but is instead a base image, intended to be extended and utilized to build other images. All the alpine-based images in Lagoon inherit components from commons.

    "},{"location":"docker-images/commons/#included-tooling","title":"Included tooling","text":"
    • docker-sleep - standardized one-hour sleep
    • fix-permissions - automatically fixes permissions on a given directory to all group read-write
    • wait-for - a small script to ensure that services are up and running in the correct order - based off https://github.com/eficode/wait-for
    • entrypoint-readiness - checks to make sure that long-running entrypoints have completed
    • entrypoints - a script to source all entrypoints under /lagoon/entrypoints/* in an alphabetical/numerical order
    "},{"location":"docker-images/commons/#included-entrypoints","title":"Included entrypoints","text":"

    The list of default entrypoints in this image is found at https://github.com/uselagoon/lagoon-images/tree/main/images/commons/lagoon/entrypoints. Subsequent downstream images will also contribute entrypoints under /lagoon that are run in the eventual image.

    "},{"location":"docker-images/deprecated-images/","title":"Deprecated Images","text":"

    From time to time, the Lagoon team may need to mark images as deprecated.

    This is conveyed in a \"sh.lagoon.image.deprecated\" . It can be viewed in Docker Desktop, via a docker inspect command, or in future releases of Lagoon, highlighted in a build.

    If the image has a suggested replacement, it will be conveyed in a \"sh.lagoon.image.deprecated.suggested\" label attached the deprecated image.

    docker inspect output showing deprecated image
    $ docker inspect amazeeio/mongo:latest\n...\n{\n...\n  \"sh.lagoon.image.deprecated.status\": \"replaced\",\n  \"sh.lagoon.image.deprecated.suggested\": \"docker.io/uselagoon/mongo-4\"\n}\n
    "},{"location":"docker-images/deprecated-images/#changing-the-image","title":"Changing the image","text":"

    In all cases, changing to a suggested or updated image will require a change in your codebase. Any reference to the image in a Dockerfile, or in your docker-compose.yml will need to be updated.

    "},{"location":"docker-images/deprecated-images/#reasons-for-deprecating","title":"Reasons for deprecating","text":"

    We have three main reasons for deprecating an image:

    "},{"location":"docker-images/deprecated-images/#replaced","title":"Replaced","text":"

    An image will be marked as \"replaced\" when the image reference needs to be changed. This could be because of a naming change, a repository change, or a versioning change. In these cases a new image will usually be recommended for use instead, and using it should be a fairly easy switch.

    Some examples of this are:

    • the migration from amazeeio/{image} to uselagoon/{image} - these images should be identical
    • the versioning of an image from uselagoon/mongo to uselagoon/mongo-4 - these images should be identical
    "},{"location":"docker-images/deprecated-images/#end-of-life","title":"End of Life","text":"

    An image will be marked as \"endoflife\" when the version published is no longer actively supported or maintained upstream. In these cases a new image will usually be recommended for use instead, but upgrading to it may require updating some of your application code, so should always be tested thoroughly. Also note that any suggested image may also be marked as endoflife (especially if the upstream moves quickly)

    Some examples of this are:

    • PHP 8.0 reached EOL in November 2023, and any uselagoon/php-8.0-{variant} image will suggest uselagoon/php-8.3-{variant} as it is the current latest release of PHP. Upgrades here may be straightforward as it's within a major version.
    • Python 2.7 reached EOL in January 2020, and the uselagoon/php-2.7 images will suggest uselagoon/python-3.12 as it is the current latest release of Python. Upgrades here will be complex, owing to it being a major version change.
    "},{"location":"docker-images/deprecated-images/#discontinued","title":"Discontinued","text":"

    An image will be marked as \"discontinued when the variant is no longer being published by the Lagoon team (although the upstream may still be supported). In these cases a replacement image may be suggested, but any migration will be involved, and require updating of application code, client libraries, data directories etc, or removal of functionality completely.

    • A CKAN variant of Python 2.7 image uselagoon/python-2.7-ckan stopped being published in August 2021 and no replacement is suggested.
    • An AthenaPDF image uselagoon/athenapdf-service stopped being published in October 2022 and no replacement image is suggested.
    • An Elasticsearch 7 image uselagoon/elasticsearch-7 stopped being published in April 2023 due to licensing concerns, and although images may suggest uselagoon/opensearch-2 - any upgrade here will be extremely involved.
    "},{"location":"docker-images/deprecated-images/#amazeeio-image-variants","title":"\"amazeeio/\" image variants","text":"

    Historically, all Lagoon images were dual published to the uselagoon and amazeeio Docker Hub organizations.

    In August 2024, we ceased this dual-publishing model, and have used the deprecated image tooling to suggest the correct replacements.

    We encourage anyone still using the amazeeio variants to switch to the uselagoon variants as soon as possible.

    As well as being easier for us to maintain, the uselagoon versions:

    • Are routinely published and updated. No amazeeio image will be updated beyond July 2024.
    • Are published as multi-architecture images by default, so will work natively on Linux, Windows or MacOS machines.
    • Are free from any rate-limit restrictions, as the uselagoon organization is Docker Sponsored Open Source
    "},{"location":"docker-images/mariadb/","title":"MariaDB","text":"

    MariaDB is the open source successor to MySQL.

    The Lagoon MariaDB image Dockerfile. Based on the official packages mariadb and mariadb-client provided by the the upstream Alpine image.

    This Dockerfile is intended to be used to set up a standalone MariaDB database server.

    • 10.4 (available for compatibility only, no longer officially supported) - uselagoon/mariadb-10.4
    • 10.5 Dockerfile (Alpine 3.14 Support until May 2023) - uselagoon/mariadb-10.5
    • 10.6 Dockerfile (Alpine 3.16 Support until May 2024) - uselagoon/mariadb-10.6
    • 10.11 Dockerfile (Alpine 3.18 Support until May 2025) - uselagoon/mariadb-10.11

    Info

    As these images are not built from the upstream MariaDB images, their support follows a different cycle - and will only receive updates as long as the underlying Alpine images receive support - see https://alpinelinux.org/releases/ for more information. In practice, most MariaDB users will only be running these containers locally - the production instances will use the Managed Cloud Databases provided by the DBaaS Operator

    "},{"location":"docker-images/mariadb/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    The default exposed port of MariaDB containers is port 3306.

    To allow Lagoon to select the best way to run the MariaDB container, use lagoon.type: mariadb - this allows the DBaaS operator to provision a cloud database if available in the cluster. Use lagoon.type: mariadb-single to specifically request MariaDB in a container. Persistent storage is always provisioned for MariaDB containers at /var/lib/mysql.

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    • readiness-probe.sh script to check when MariaDB container is ready.
    "},{"location":"docker-images/mariadb/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
        mariadb:\nimage: uselagoon/mariadb-10.6-drupal:latest\nlabels:\n# tells Lagoon this is a MariaDB database\nlagoon.type: mariadb\nports:\n# exposes the port 3306 with a random local port, find it with `docker compose port mariadb 3306`\n- \"3306\"\nvolumes:\n# mounts a named volume at the default path for MariaDB\n- db:/var/lib/mysql\n
    "},{"location":"docker-images/mariadb/#included-tools","title":"Included tools","text":"
    • mysqltuner.pl - Perl script useful for database parameter tuning.
    • mysql-backup.sh - Script for automating the daily MySQL backups on development environment.
    • pwgen - Utility to generate random and complex passwords.
    "},{"location":"docker-images/mariadb/#included-mycnf-configuration-file","title":"Included my.cnf configuration file","text":"

    The image ships a default MariaDB configuration file, optimized to work on Lagoon. Some options are configurable via environment variables.

    "},{"location":"docker-images/mariadb/#environment-variables","title":"Environment Variables","text":"Environment Variable Default Description MARIADB_DATABASE lagoon Database name created at startup. MARIADB_USER lagoon Default user created at startup. MARIADB_PASSWORD lagoon Password of default user created at startup. MARIADB_ROOT_PASSWORD Lag00n MariaDB root user's password. MARIADB_CHARSET utf8mb4 Set the server charset. MARIADB_COLLATION utf8mb4_bin Set server collation. MARIADB_MAX_ALLOWED_PACKET 64M Set the max_allowed_packet size. MARIADB_INNODB_BUFFER_POOL_SIZE 256M Set the MariaDB InnoDB buffer pool size. MARIADB_INNODB_BUFFER_POOL_INSTANCES 1 Number of InnoDB buffer pool instances. MARIADB_INNODB_LOG_FILE_SIZE 64M Size of InnoDB log file. MARIADB_LOG_SLOW (not set) Variable to control the save of slow queries. MARIADB_LOG_QUERIES (not set) Variable to control the save of ALL queries. BACKUPS_DIR /var/lib/mysql/backup Default path for databases backups. MARIADB_DATA_DIR /var/lib/mysql Path of the MariaDB data dir, be careful, changing this can occur data loss! MARIADB_COPY_DATA_DIR_SOURCE (not set) Path which the entrypoint script of mariadb will use to copy into the defined MARIADB_DATA_DIR, this can be used for prepopulating the MariaDB with a database. The scripts expects actual MariaDB data files and not a sql file! Plus it only copies data if the destination does not already have a mysql datadir in it.

    If the LAGOON_ENVIRONMENT_TYPE variable is set to production, performances are set accordingly by using MARIADB_INNODB_BUFFER_POOL_SIZE=1024 and MARIADB_INNODB_LOG_FILE_SIZE=256.

    "},{"location":"docker-images/mongodb/","title":"MongoDB","text":"

    MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB is a document database, which means it stores data in JSON-like documents.

    • from mongodb.com
    "},{"location":"docker-images/mongodb/#supported-versions","title":"Supported Versions","text":"

    4.0 Dockerfile - uselagoon/mongo-4

    This Dockerfile is intended to be used to set up a standalone MongoDB database server.

    "},{"location":"docker-images/mongodb/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user, and therefore also on Kubernetes or OpenShift.
    "},{"location":"docker-images/mysql/","title":"MySQL","text":"

    MySQL is a widely used, open-source relational database management system (RDBMS).

    The Lagoon MySQL image Dockerfile. Based on the official upstream docker image mysql (Oracle Linux variant).

    This Dockerfile is intended to be used to set up a standalone MySQL database server, intended for use in Local Development

    • 8.0 Dockerfile (Extended Support until April 2026) - uselagoon/mysql-8.0
    • 8.4 Dockerfile (Extended Support until April 2032) - uselagoon/mysql-8.4

    Info

    These images are not intended as drop-in alernatives to MariaDB images, and as such, may require customization to run in local development environments

    "},{"location":"docker-images/mysql/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    The default exposed port of MySQL containers is port 3306.

    To allow Lagoon to select the best way to run the MySQL container, use lagoon.type: mariadb - this allows the DBaaS operator to provision a cloud database if available in the cluster. Use lagoon.type: mariadb-single to specifically request MySQL in a container. Persistent storage is always provisioned for MySQL containers at /var/lib/mysql.

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    • readiness-probe.sh script to check when MySQL container is ready.
    "},{"location":"docker-images/mysql/#docker-composeyml-snippet-for-non-drupal-projects","title":"docker-compose.yml snippet for non-Drupal projects","text":"docker-compose.yml
        mysql:\nimage: uselagoon/mysql-8.4:latest\nlabels:\n# tells Lagoon this is a MariaDB-compatible database\nlagoon.type: mariadb\nports:\n# exposes the port 3306 with a random local port, find it with `docker compose port mysql 3306`\n- \"3306\"\nvolumes:\n# mounts a named volume at the default path for MySQL\n- db:/var/lib/mysql\n
    "},{"location":"docker-images/mysql/#docker-composeyml-snippet-for-drupal-projects","title":"docker-compose.yml snippet for Drupal projects","text":"docker-compose.yml
        mariadb:\nimage: uselagoon/mysql-8.4:latest\nlabels:\n# tells Lagoon this is a MariaDB-compatible database\nlagoon.type: mariadb\nports:\n# exposes the port 3306 with a random local port, find it with `docker compose port mariadb 3306`\n- \"3306\"\nenvironment:\n# These override the default credentials to match what Drupal is hardwired to expect in Lagoon\n- MYSQL_DATABASE=drupal\n- MYSQL_USER=drupal\n- MYSQL_PASSWORD=drupal\nvolumes:\n# mounts a named volume at the default path for MariaDB\n- db:/var/lib/mysql\n
    "},{"location":"docker-images/mysql/#included-tools","title":"Included tools","text":"
    • mysqltuner.pl - Perl script useful for database parameter tuning.
    • mysql-backup.sh - Script for automating the daily MySQL backups on development environment.
    • pwgen - Utility to generate random and complex passwords.
    "},{"location":"docker-images/mysql/#included-mycnf-configuration-file","title":"Included my.cnf configuration file","text":"

    The image ships a default MySQL configuration file, optimized to work on Lagoon. Some options are configurable via environment variables.

    "},{"location":"docker-images/mysql/#environment-variables","title":"Environment Variables","text":"Environment Variable Default Description MYSQL_DATABASE lagoon Database name created at startup. MYSQL_USER lagoon Default user created at startup. MYSQL_PASSWORD lagoon Password of default user created at startup. MYSQL_ROOT_PASSWORD Lag00n MySQL root user's password. MYSQL_CHARSET utf8mb4 Set the server charset. MYSQL_COLLATION utf8mb4_bin Set server collation. MYSQL_MAX_ALLOWED_PACKET 64M Set the max_allowed_packet size. MYSQL_INNODB_BUFFER_POOL_SIZE 256M Set the MySQL InnoDB buffer pool size. MYSQL_INNODB_BUFFER_POOL_INSTANCES 1 Number of InnoDB buffer pool instances. MYSQL_INNODB_LOG_FILE_SIZE 64M Size of InnoDB log file. MYSQL_LOG_SLOW (not set) Variable to control the save of slow queries. MYSQL_LOG_QUERIES (not set) Variable to control the save of ALL queries. BACKUPS_DIR /var/lib/mysql/backup Default path for databases backups. MYSQL_DATA_DIR /var/lib/mysql Path of the MySQL data dir, be careful, changing this can occur data loss! MYSQL_COPY_DATA_DIR_SOURCE (not set) Path which the entrypoint script of MySQL will use to copy into the defined MYSQL_DATA_DIR, this can be used for prepopulating the MySQL with a database. The scripts expects actual MySQL data files and not a sql file! Plus it only copies data if the destination does not already have a MySQL datadir in it.

    If the LAGOON_ENVIRONMENT_TYPE variable is set to production, performances are set accordingly by using MYSQL_INNODB_BUFFER_POOL_SIZE=1024 and MYSQL_INNODB_LOG_FILE_SIZE=256.

    "},{"location":"docker-images/nginx/","title":"NGINX","text":"

    The Lagoon nginx image Dockerfile. Based on the official openresty/openresty images.

    This Dockerfile is intended to be used as a base for any web servers within Lagoon.

    "},{"location":"docker-images/nginx/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    The default exposed port of NGINX containers is port 8080.

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    • The files within /etc/nginx/* are parsed through envplate with a container-entrypoint.
    "},{"location":"docker-images/nginx/#included-nginx-configuration-static-filesconf","title":"Included NGINX configuration (static-files.conf)","text":"

    Warning

    By default NGINX only serves static files - this can be used for static sites that don't require a database or PHP components: for example, static site generators like Hugo, Jekyll or Gatsby.

    If you need PHP, have a look at the php-fpm image and use nginx and php-fpm in tandem.

    Build the content during the build process and inject it into the nginx container.

    "},{"location":"docker-images/nginx/#helpers","title":"Helpers","text":""},{"location":"docker-images/nginx/#redirects-mapconf","title":"redirects-map.conf","text":"

    In order to create redirects, we have redirects-map.conf in place. This helps you to redirect marketing domains to sub-sites or do non-www to www redirects. If you have a lot of redirects, we suggest having redirects-map.conf stored next to your code for easier maintainability.

    Note

    If you only have a few redirects, there's a handy trick to create the redirects with a RUN command in your nginx.dockerfile.

    Here's an example showing how to redirect www.example.com to example.com and preserve the request:

    Redirect
    RUN echo \"~^www.example.com http://example.com\\$request_uri;\" >> /etc/nginx/redirects-map.conf\n

    To get more details about the various types of redirects that can be achieved, see the documentation within the redirects-map.conf directly.

    After you put the redirects-map.conf in place, you also need to include it in your nginx.dockerfile in order to get the configuration file into your build.

    nginx.dockerfile
    COPY redirects-map.conf /etc/nginx/redirects-map.conf\n
    "},{"location":"docker-images/nginx/#basic-authentication","title":"Basic Authentication","text":"

    Basic authentication is enabled automatically when the BASIC_AUTH_USERNAME and BASIC_AUTH_PASSWORD environment variables are set.

    Warning

    Automatic basic auth configuration is provided for convenience. It should not be considered a secure method of protecting your website or private data.

    "},{"location":"docker-images/nginx/#environment-variables","title":"Environment Variables","text":"

    Some options are configurable via environment variables.

    Environment Variable Default Description BASIC_AUTH restricted Set to off to disable basic authentication. BASIC_AUTH_USERNAME (not set) Username for basic authentication. BASIC_AUTH_PASSWORD (not set) Password for basic authentication (unencrypted). FAST_HEALTH_CHECK (not set) Set to true to redirect GET requests from certain user agents (StatusCake, Pingdom, Site25x7, Uptime, nagios) to the lightweight Lagoon service healthcheck."},{"location":"docker-images/nodejs/","title":"Node.js","text":"

    The Lagoon Node.js Docker image. Based on the official Node Alpine images.

    "},{"location":"docker-images/nodejs/#supported-versions","title":"Supported Versions","text":"

    We ship 2 versions of Node.js images: the normal node:version image and the node:version-builder.

    The builder variant of those images comes with additional tooling that is needed when you build Node.js apps (such as the build libraries, npm and Yarn). For a full list check out their Dockerfile.

    • 12 (available for compatibility only, no longer officially supported) - uselagoon/node-12
    • 14 (available for compatibility only, no longer officially supported) - uselagoon/node-14
    • 16 (available for compatibility only, no longer officially supported) - uselagoon/node-16
    • 18 Dockerfile (Security Support until April 2025) - uselagoon/node-18
    • 20 Dockerfile (Security Support until April 2026) - uselagoon/node-20
    • 22 Dockerfile (Security Support until April 2027) - uselagoon/node-22

    Tip

    We stop updating EOL Node.js images usually with the Lagoon release that comes after the officially communicated EOL date: https://nodejs.org/en/about/releases/.

    "},{"location":"docker-images/nodejs/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    The default exposed port of Node.js containers is port 3000.

    Persistent storage is configurable in Lagoon, using the lagoon.type: node-persistent. See the docs for more info

    Use the following labels in your docker-compose.yml file to configure it:

    • lagoon.persistent = use this to define the path in the container to use as persistent storage - e.g. /app/files.
    • lagoon.persistent.size = this to tell Lagoon how much storage to assign this path.
    • If you have multiple services that share the same storage, use this lagoon.persistent.name = (optional) use this to tell Lagoon to use the storage defined in another named service.
    "},{"location":"docker-images/nodejs/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
        node:\nbuild:\n# this configures a build from a Dockerfile in the root folder\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# tells Lagoon this is a node service, configured with 500MB of persistent storage at /app/files\nlagoon.type: node-persistent\nlagoon.persistent: /app/files\nlagoon.persistent.size: 500Mi\nports:\n# local development only\n# this exposes the port 3000 with a random local port\n# find it with `docker compose port node 3000`\n- \"3000\"\nvolumes:\n# local development only\n# mounts a named volume (files) at the defined path for this service to replicate production\n- files:/app/files\n
    "},{"location":"docker-images/opensearch/","title":"OpenSearch","text":"

    OpenSearch is a community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data.

    • from https://opensearch.org/
    "},{"location":"docker-images/opensearch/#supported-versions","title":"Supported versions","text":"
    • 2 Dockerfile - uselagoon/opensearch-2
    "},{"location":"docker-images/opensearch/#environment-variables","title":"Environment Variables","text":"

    Some options are configurable via environment variables.

    Environment Variable Default Description OPENSEARCH_JAVA_OPTS -Xms512m -Xmx512m Sets the memory usage of the OpenSearch container. Both values need be the same value or OpenSearch will not start cleanly."},{"location":"docker-images/opensearch/#known-issues","title":"Known issues","text":"

    On Linux-based systems, the start of the OpenSearch container may fail due to a low vm.max_map_count setting.

    Error
    opensearch_1  | ERROR: [1] bootstrap checks failed\nopensearch_1  | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]\n

    Solution to this issue can be found here.

    "},{"location":"docker-images/php-cli/","title":"PHP-CLI","text":"

    The Lagoon php-cli Docker image. Based on Lagoon php-fpm image, it has all the needed command line tools for daily operations.

    Containers (or pods) started from cli images are responsible for building code for Composer or Node.js based projects.

    The image also contains database clis for both MariaDB and PostgreSQL.

    Info

    This Dockerfile is intended to be used as a base for any cli needs within Lagoon.

    "},{"location":"docker-images/php-cli/#supported-versions","title":"Supported versions","text":"
    • 7.3 (available for compatibility only, no longer officially supported) - uselagoon/php-7.3-cli
    • 7.4 (available for compatibility only, no longer officially supported) - uselagoon/php-7.4-cli
    • 8.0 (available for compatibility only, no longer officially supported) - uselagoon/php-8.0-cli
    • 8.1 Dockerfile (Security Support until November 2024) - uselagoon/php-8.1-cli
    • 8.2 Dockerfile (Security Support until December 2025) - uselagoon/php-8.2-cli
    • 8.3 Dockerfile (Security Support until December 2026) - uselagoon/php-8.3-cli

    All PHP versions use their own Dockerfiles.

    "},{"location":"docker-images/php-cli/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    • COMPOSER_ALLOW_SUPERUSER=1 removes warning about use of Composer as root.
    • 80-shell-timeout.sh script checks if containers are running in a Kubernetes environment and then set a 10 minutes timeout to idle cli pods.
    • cli containers use an SSH key injected by Lagoon or defined into SSH_PRIVATE_KEYenvironment variable.
    "},{"location":"docker-images/php-cli/#included-cli-tools","title":"Included CLI tools","text":"

    The included CLI tools are:

    • composer version 1.9.0 (changeable via COMPOSER_VERSION and COMPOSER_HASH_SHA256)
    • node.js verison 17 (as of Mar 2022)
    • npm
    • yarn
    • mariadb-client
    • postgresql-client
    "},{"location":"docker-images/php-cli/#change-nodejs-version","title":"Change Node.js Version","text":"

    By default this image ships with the nodejs-current package (v17 as of Mar 2022). If you need another version you can remove the current version and install the one of your choice. For example, to install Node.js 16, modify your dockerfile to include:

    Update Node.js version
    RUN apk del nodejs-current \\\n&& apk add --no-cache nodejs=~16\n
    "},{"location":"docker-images/php-cli/#environment-variables","title":"Environment variables","text":"

    Some options are configurable via environment variables. The php-fpm environment variables also apply.

    Name Default Description MARIADB_MAX_ALLOWED_PACKET 64M Controls the max allowed packet for the MySql client."},{"location":"docker-images/php-fpm/","title":"PHP-FPM","text":"

    The Lagoon php-fpm Docker image. Based on the official PHP Alpine images.

    PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.

    • from https://php-fpm.org/

    FastCGI is a way of having server scripts execute time-consuming code just once instead of every time the script is loaded, reducing overhead.

    Info

    This Dockerfile is intended to be used as a base for any PHP needs within Lagoon. This image itself does not create a web server, rather a php-fpm fastcgi listener. You may need to adapt the php-fpm pool config.

    "},{"location":"docker-images/php-fpm/#supported-versions","title":"Supported versions","text":"
    • 7.3 (available for compatibility only, no longer officially supported) - uselagoon/php-7.3-fpm
    • 7.4 (available for compatibility only, no longer officially supported) - uselagoon/php-7.4-fpm
    • 8.0 (available for compatibility only, no longer officially supported) - uselagoon/php-8.0-fpm
    • 8.1 Dockerfile (Security Support until November 2024) - uselagoon/php-8.1-fpm
    • 8.2 Dockerfile (Security Support until December 2025) - uselagoon/php-8.2-fpm
    • 8.3 Dockerfile (Security Support until December 2026) - uselagoon/php-8.3-fpm

    All PHP versions use their own Dockerfiles.

    Tip

    We stop updating End of Life (EOL) PHP images usually with the Lagoon release that comes after the officially communicated EOL date: https://www.php.net/supported-versions.php. Previous published versions will remain available.

    "},{"location":"docker-images/php-fpm/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things are already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    • The /usr/local/etc/php/php.ini and /usr/local/etc/php-fpm.conf, plus all files within /usr/local/etc/php-fpm.d/ , are parsed through envplate with a container-entrypoint.
    • See the Dockerfile for installed PHP extensions.
    • To install further extensions, extend your Dockerfile from this image. Install extensions according to the docs, under the heading How to install more PHP extensions.
    "},{"location":"docker-images/php-fpm/#included-php-config","title":"Included PHP config","text":"

    The included PHP config contains sensible values that will make the creation of PHP pools config easier. Here is a list of some of these. Check /usr/local/etc/php.ini, /usr/local/etc/php-fpm.conf for all of them:

    Value Details max_execution_time = 900 Changeable via PHP_MAX_EXECUTION_TIME. realpath_cache_size = 256k For handling big PHP projects. memory_limit = 400M For big PHP projects (changeable via PHP_MEMORY_LIMIT). opcache.memory_consumption = 265 For big PHP projects. opcache.enable_file_override = 1 and opcache.huge_code_pages = 1 For faster PHP. display_errors = Off and display_startup_errors = Off For sensible production values (changeable via PHP_DISPLAY_ERRORS and PHP_DISPLAY_STARTUP_ERRORS). upload_max_filesize = 2048M For big file uploads. apc.shm_size = 32m and apc.enabled = 1 Changeable via PHP_APC_SHM_SIZE and PHP_APC_ENABLED.

    Also, php-fpm error logging happens in stderr.

    \ud83d\udca1 If you don't like any of these configs, you have three possibilities:

    1. If they are changeable via environment variables, use environment variables (this is the preferred method, see table of environment variables below).
    2. Create your own fpm-pool config and set via php_admin_value and php_admin_flag.
      1. Learn more about them in this documentation for Running PHP as an Apache module. This documentation refers to Apache, but it is also the case for php-fpm).

        Important:

        1. If you want to provide your own php-fpm pool, overwrite the file /usr/local/etc/php-fpm.d/www.conf with your own config, or rename this file if you want it to have another name. If you don't do that, the provided pool will be started! 2. PHP values with the PHP_INI_SYSTEM changeable mode cannot be changed via an fpm-pool config. They need to be changed either via already provided environment variables or: 3. Provide your own php.ini or php-fpm.conf file (this is the least preferred method).

    "},{"location":"docker-images/php-fpm/#default-fpm-pool","title":"Default fpm-pool","text":"

    This image is shipped with an fpm-pool config (php-fpm.d/www.conf) that creates an fpm-pool and listens on port 9000. This is because we try to provide an image which already covers most needs for PHP, so you don't need to create your own. You are welcome to do so if you like, though!

    Here a short description of what this file does:

    • Listens on port 9000 via IPv4 and IPv6.
    • Uses the pm dynamic and creates between 2-50 children.
    • Re-spawns php-fpm pool children after 500 requests to prevent memory leaks.
    • Replies with pong when making a fastcgi request to /ping (good for automated testing to check if the pool started).
    • catch_workers_output = yes to see PHP errors.
    • clear_env = no to be able to inject PHP environment variables via regular Docker environment variables.
    "},{"location":"docker-images/php-fpm/#environment-variables","title":"Environment Variables","text":"

    Some options are configurable via environment variables.

    Environment Variable Default Description NEWRELIC_ENABLED false Enable NewRelic performance monitoring, needs NEWRELIC_LICENSE be configured. NEWRELIC_LICENSE (not set) NewRelic license to be used. Important: NEWRELIC_ENABLED needs to be set totrue in order for NewRelic to be enabled. NEWRELIC_BROWSER_MONITORING_ENABLED true This enables auto-insertion of the JavaScript fragments for NewRelic browser monitoring. Important: NEWRELIC_ENABLED needs to be set totrue in order for NewRelic to be enabled. NEWRELIC_DISTRIBUTED_TRACING_ENABLED false This enables distributed tracing. Important: NEWRELIC_ENABLED needs to be set totrue in order for NewRelic to be enabled. PHP_APC_ENABLED 1 Can be set to 0 to disable APC. PHP_APC_SHM_SIZE 32m The size of each shared memory segment given. PHP_DISPLAY_ERRORS Off Configures whether errors are printed or hidden. See php.net. PHP_DISPLAY_STARTUP_ERRORS Off Configures whether startup errors are printed or hidden. See php.net. PHP_ERROR_REPORTING Production E_ALL & ~E_DEPRECATED & ~E_STRICT Development: E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE The desired logging level you'd like PHP to use. See php.net. PHP_FPM_PM_MAX_CHILDREN 50 The the maximum number of child processes. See php.net. PHP_FPM_PM_MAX_REQUESTS 500 The number of requests each child process should execute before re-spawning. See php.net. PHP_FPM_PM_MAX_SPARE_SERVERS 2 The desired maximum number of idle server processes. See php.net. PHP_FPM_PM_MIN_SPARE_SERVERS 2 The desired minimum number of idle server processes. See php.net. PHP_FPM_PM_PROCESS_IDLE_TIMEOUT 60s The number of seconds after which an idle process will be killed. See php.net. PHP_FPM_PM_START_SERVERS 2 The number of child processes created on startup. See php.net. PHP_MAX_EXECUTION_TIME 900 Maximum execution time of each script, in seconds. See php.net. PHP_MAX_FILE_UPLOADS 20 The maximum number of files allowed to be uploaded simultaneously. See php.net. PHP_MAX_INPUT_VARS 2000 How many input variables will be accepted. See php.net. PHP_MEMORY_LIMIT 400M Maximum amount of memory a script may consume. See php.net. XDEBUG_ENABLE (not set) Set to true to enable xdebug extension. BLACKFIRE_ENABLED (not set) Set to true to enable blackfire extension. BLACKFIRE_SERVER_ID (not set) Set to Blackfire Server ID provided by Blackfire.io. Needs BLACKFIRE_ENABLED set to true. BLACKFIRE_SERVER_TOKEN (not set) Set to Blackfire Server Token provided by Blackfire.io. Needs BLACKFIRE_ENABLED set to true. BLACKFIRE_LOG_LEVEL 3 Change the log level of the blackfire agent. Available values: log verbosity level (4: debug, 3: info, 2: warning, 1: error) See blackfire.io."},{"location":"docker-images/postgres/","title":"PostgreSQL","text":"

    The Lagoon PostgreSQL Docker image. Based on the official PostgreSQL Alpine images.

    "},{"location":"docker-images/postgres/#supported-versions","title":"Supported versions","text":"
    • 11 (available for compatibility only, no longer officially supported) - uselagoon/postgres-11
    • 12 Dockerfile (Security Support until November 2024) - uselagoon/postgres-12
    • 13 Dockerfile (Security Support until November 2025) - uselagoon/postgres-13
    • 14 Dockerfile (Security Support until November 2026) - uselagoon/postgres-14
    • 15 Dockerfile (Security Support until November 2027) - uselagoon/postgres-15
    • 16 Dockerfile (Security Support until November 2028) - uselagoon/postgres-16

    Tip

    We stop updating EOL PostgreSQL images usually with the Lagoon release that comes after the officially communicated EOL date: https://www.postgresql.org/support/versioning

    "},{"location":"docker-images/postgres/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    The default exposed port of Postgres containers is port 5432.

    To allow Lagoon to select the best way to run the Postgres container, use lagoon.type: postgres - this allows DBaaS operator to provision a cloud database if available in the cluster. Use lagoon.type: postgres-single to specifically request Postgres in a container. Persistent storage is always provisioned for postgres containers at /var/lib/postgresql/data.

    "},{"location":"docker-images/postgres/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
    postgres:\nimage: uselagoon/postgres-14-drupal:latest\nlabels:\n# tells Lagoon this is a Postgres database\nlagoon.type: postgres\nports:\n# exposes the port 5432 with a random local port\n# find it with `docker compose port postgres 5432`\n- \"5432\"\nvolumes:\n# mounts a named volume at the default path for Postgres\n- db:/var/lib/postgresql/data\n
    "},{"location":"docker-images/postgres/#tips-tricks","title":"Tips & Tricks","text":"

    If you have SQL statements that need to be run immediately after container startup to initialize the database, you can place those .sql files in the container's docker-entrypoint-initdb.d directory. Any .sql files contained in that directory are run automatically at startup, as part of bringing the PostgreSQL container up.

    Warning

    These scripts are only run if the container is started with an empty database.

    "},{"location":"docker-images/python/","title":"Python","text":"

    The Lagoon python Docker image. Based on the official Python Alpine images.

    "},{"location":"docker-images/python/#supported-versions","title":"Supported Versions","text":"
    • 2.7 (available for compatibility only, no longer officially supported) - uselagoon/python-2.7
    • 3.7 (available for compatibility only, no longer officially supported) - uselagoon/python-3.7
    • 3.8 Dockerfile (Security Support until October 2024) - uselagoon/python-3.8
    • 3.9 Dockerfile (Security Support until October 2025) - uselagoon/python-3.9
    • 3.10 Dockerfile (Security Support until October 2026) - uselagoon/python-3.10
    • 3.11 Dockerfile (Security Support until October 2027) - uselagoon/python-3.11
    • 3.12 Dockerfile (Security Support until October 2028) - uselagoon/python-3.12

    Tip

    We stop updating and publishing EOL Python images usually with the Lagoon release that comes after the officially communicated EOL date: https://devguide.python.org/versions/#versions. Previous published versions will remain available.

    "},{"location":"docker-images/python/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    The default exposed port of Python containers is port 8800.

    Persistent storage is configurable in Lagoon, using the lagoon.type: python-persistent. See the docs for more info

    Use the following labels in your docker-compose.yml file to configure it: lagoon.persistent = use this to define the path in the container to use as persistent storage - e.g. /app/files lagoon.persistent.size = this to tell Lagoon how much storage to assign this path

    If you have multiple services that share the same storage, use this lagoon.persistent.name = (optional) use this to tell Lagoon to use the storage defined in another named service

    "},{"location":"docker-images/python/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
    python:\nbuild:\n# this configures a build from a Dockerfile in the root folder\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# tells Lagoon this is a python service, configured with 500MB of persistent storage at /app/files\nlagoon.type: python-persistent\nlagoon.persistent: /app/files\nlagoon.persistent.size: 500Mi\nports:\n# local development only\n# this exposes the port 8800 with a random local port\n# find it with `docker compose port python 8800`\n- \"8800\"\nvolumes:\n# local development only\n# mounts a named volume (files) at the defined path for this service to replicate production\n- files:/app/files\n
    "},{"location":"docker-images/rabbitmq/","title":"RabbitMQ","text":"

    The Lagoon RabbitMQ Dockerfile with management plugin installed. Based on the official rabbitmq:3-management image at docker-hub.

    This Dockerfile is intended to be used to set up a standalone RabbitMQ queue broker, as well as a base image to set up a cluster with high availability queue support by default (Mirrored queues).

    By default, the RabbitMQ broker is started as single node. If you want to start a cluster, you need to use the rabbitmq-cluster Docker image, based on rabbitmq image plus the rabbitmq_peer_discovery_k8s plugin.

    "},{"location":"docker-images/rabbitmq/#supported-versions","title":"Supported versions","text":"
    • 3.10 Dockerfile (Security Support until July 2023) - uselagoon/rabbitmq
    "},{"location":"docker-images/rabbitmq/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    • The file /etc/rabbitmq/definitions.json is parsed through envplate with a container-entrypoint.
    "},{"location":"docker-images/rabbitmq/#included-rabbitmq-default-schema-definitionsjson","title":"Included RabbitMQ default schema (definitions.json)","text":"
    • To enable the support for Mirrored Queues, at least one policymust exist.
    • In the definitions.json schema file, minimal entities are defined to make the

      container run: virtualhost (vhost), username , and password to access management

      UI, permissions , and policies.

    By default, a policy called lagoon-ha is created at startup, but it is not active because it doesn't match any queue's name pattern (see default Environment Variables).

    definitions.json
    \"policies\":[\n{\"vhost\":\"${RABBITMQ_DEFAULT_VHOST}\",\"name\":\"lagoon-ha\",\"pattern\":\"${RABBITMQ_DEFAULT_HA_PATTERN}\", \"definition\":{\"ha-mode\":\"exactly\",\"ha-params\":2,\"ha-sync-mode\":\"automatic\",\"ha-sync-batch-size\":5}}\n]\n

    By default, the ha-mode is set to exactly which controls the exact number of mirroring nodes for a queue (mirrors). The number of nodes is controller by ha-params.

    For further information and custom configuration, please refer to official RabbitMQ documentation.

    "},{"location":"docker-images/rabbitmq/#environment-variables","title":"Environment Variables","text":"

    Some options are configurable via environment variables.

    Environment Variable Default Description RABBITMQ_DEFAULT_USER guest Username for management UI access. RABBITMQ_DEFAULT_PASS guest Password for management UI access. RABBITMQ_DEFAULT_VHOST / RabbitMQ main virtualhost. RABBITMQ_DEFAULT_HA_PATTERN ^$ Regular expression to match for mirrored queues."},{"location":"docker-images/redis/","title":"Redis","text":"

    Lagoon Redis image Dockerfile, based on official redis:alpine image.

    This Dockerfile is intended to be used to set up a standalone Redis ephemeral server by default.

    "},{"location":"docker-images/redis/#supported-versions","title":"Supported versions","text":"
    • 5 (available for compatibility only, no longer officially supported) - uselagoon/redis-5 or uselagoon/redis-5-persistent
    • 6 Dockerfile - uselagoon/redis-6 or uselagoon/redis-6-persistent
    • 7 Dockerfile - uselagoon/redis-7 or uselagoon/redis-7-persistent
    "},{"location":"docker-images/redis/#usage","title":"Usage","text":"

    There are 2 different flavors of Redis Images: Ephemeral and Persistent.

    "},{"location":"docker-images/redis/#ephemeral","title":"Ephemeral","text":"

    The ephemeral image is intended to be used as an in-memory cache for applications and will not retain data across container restarts.

    When being used as an in-memory (RAM) cache, the first thing you might want to tune if you have large caches is to adapt the MAXMEMORY variable. This variable controls the maximum amount of memory (RAM) which redis will use to store cached items.

    "},{"location":"docker-images/redis/#persistent","title":"Persistent","text":"

    The persistent Redis image will persist data across container restarts and can be used for queues or application data that will need persistence.

    We don't typically suggest using a persistent Redis for in-memory cache scenarios as this might have unintended side-effects on your application while a Redis container is restarting and loading data from disk.

    "},{"location":"docker-images/redis/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissionsso this image will work with a random user.
    • The files within /etc/redis/* are templated using envplate via a container-entrypoint.
    "},{"location":"docker-images/redis/#included-redisconf-configuration-file","title":"Included redis.conf configuration file","text":"

    The image ships a default Redis configuration file, optimized to work on Lagoon.

    "},{"location":"docker-images/redis/#environment-variables","title":"Environment Variables","text":"

    Some options are configurable via environment variables.

    Environment Variable Default Description DATABASES -1 Default number of databases created at startup. LOGLEVEL notice Define the level of logs. MAXMEMORY 100mb Maximum amount of memory. MAXMEMORYPOLICY allkeys-lru The policy to use when evicting keys if Redis reaches its maximum memory usage. REDIS_PASSWORD disabled Enables authentication feature."},{"location":"docker-images/redis/#custom-configuration","title":"Custom configuration","text":"

    By building on the base image you can include custom configuration. See https://github.com/redis/redis/blob/7.2.5/redis.conf for full documentation of the Redis configuration file.

    "},{"location":"docker-images/redis/#redis-persistent","title":"Redis-persistent","text":"

    Based on the Lagoon redis image, the Lagoon redis-persistent Docker image is intended for use when the Redis service must be utilized in persistent mode (ie. with a persistent volume where keys will be saved to disk).

    It differs from redis only with the FLAVOR environment variable, which will use the respective Redis configuration according to the version of redis in use.

    "},{"location":"docker-images/redis/#troubleshooting","title":"Troubleshooting","text":"

    The Lagoon Redis images all come pre-loaded with the redis-cli command, which allows for querying the Redis service for information and setting config values dynamically. To use this utility, you can simply SSH into your Redis pod by using the instructions here with redis as the pod value then run it from the terminal once you've connected.

    "},{"location":"docker-images/redis/#maximum-memory-policy","title":"Maximum Memory Policy","text":"

    By default, the Lagoon redis images are set to use the allkeys-lru policy. This policy will alow ANY keys stored in Redis to be evicted if/when the Redis service hits its maxmemory limit according to when the key was least recently used.

    For typical installations, this is the ideal configuration, as Drupal may not set a TTL value for each key cached in Redis. If the maxmemory-policy is set to something like volatile-lru and Drupal doesn't provide these TTL tags, this would result in the Redis container filling up, being totally unable to evict ANY keys, and ceasing to accept new cache keys at all.

    More information on Redis' maxmemory policies can be found in Redis' official documentation.

    Proceed with Caution

    Changing this setting can lead to Redis becoming completely full and cause outages as a result.

    "},{"location":"docker-images/redis/#tuning-redis-maxmemory-value","title":"Tuning Redis' maxmemory value","text":"

    Finding the optimal amount of memory to give Redis can be quite the difficult task. Before attempting to tune your Redis cache's memory size, it is prudent to let it run normally for as long as practical, with at least a day of typical usage being the ideal minimum timeframe.

    There are a few high level things you can look at when tuning these memory values:

    • The first thing to check is the percentage of memory in use by Redis currently.
      • If this percentage is less than 50%, you might consider lowering the maxmemory value by 25%.
      • If this percentage is between 50% and 75%, things are running just fine.
      • If this value is greater than 75%, then it's worth looking at other variables to see if maxmemory needs to be increased.
    • If you find that your Redis' memory usage percentage is high, the next thing to look at is the number of key evictions.
      • A large number of key evictions and a memory usage greater than 95% is a fairly good indicator that your redis needs a higher maxmemory setting.
      • If the number of key evictions doesn't seem high and typical response times are reasonable, this is simply indicative of Redis doing its job and managing its allocated memory as expected.
    "},{"location":"docker-images/redis/#example-commands","title":"Example commands","text":"

    The following commands can be used to view information about the Redis service:

    • View all info about the Redis service: redis-cli info
    • View service memory information: redis-cli info memory
    • View service keyspace information: redis-cli info keyspace
    • View service statistics: redis-cli info stats

    It is also possible to set values for the Redis service dynamically without a restart of the Redis service. It is important to note that these dynamically set values will not persist if the pod is restarted (which can happen as a result of a deployment, maintenance, or even just being shuffled from one node to another).

    • Set maxmemory config value dynamically to 500mb: config set maxmemory 500mb
    • Set maxmemory-policy config value dynamically to volatile-lru: config set maxmemory-policy volatile-lru
    "},{"location":"docker-images/ruby/","title":"Ruby","text":"

    The Lagoon ruby Docker image. Based on the official Python Alpine images.

    "},{"location":"docker-images/ruby/#supported-versions","title":"Supported Versions","text":"
    • 3.0 (available for compatibility only, no longer officially supported) - uselagoon/ruby-3.0
    • 3.1 Dockerfile (Security Support until March 2025) - uselagoon/ruby-3.1
    • 3.2 Dockerfile (Security Support until March 2026) - uselagoon/ruby-3.2
    • 3.3 Dockerfile (Security Support until March 2027) - uselagoon/ruby-3.3

    Tip

    We stop updating and publishing EOL Ruby images usually with the Lagoon release that comes after the officially communicated EOL date: https://www.ruby-lang.org/en/downloads/releases/. Previous versions will remain available.

    "},{"location":"docker-images/ruby/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    The default exposed port of ruby containers is port 3000.

    Lagoon has no \"pre-defined\" type for Ruby services, they should be configured with the lagoon.type: generic and a port set with lagoon.port: 3000

    "},{"location":"docker-images/ruby/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
    ruby:\nbuild:\n# this configures a build from a Dockerfile in the root folder\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# tells Lagoon this is a generic service, configured to expose port 3000\nlagoon.type: generic\nlagoon.port: 3000\nports:\n# local development only\n# this exposes the port 3000 with a random local port\n# find it with `docker compose port ruby 3000`\n- \"3000\"\n
    "},{"location":"docker-images/solr/","title":"Solr","text":"

    The Lagoon Solr image Dockerfile. Based on the official solr:<version>-alpine images.

    This Dockerfile is intended to be used to set up a standalone Solr server with an initial core mycore.

    "},{"location":"docker-images/solr/#supported-versions","title":"Supported Versions","text":"
    • 5.5 (available for compatibility only, no longer officially supported)
    • 6.6 (available for compatibility only, no longer officially supported)
    • 7.7 (available for compatibility only, no longer officially supported)
    • 7 (available for compatibility only, no longer officially supported) - uselagoon/solr-7
    • 8 Dockerfile - uselagoon/solr-8
    • 9 Dockerfile - uselagoon/solr-9
    "},{"location":"docker-images/solr/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    • 10-solr-port.sh script to fix and check Solr port.
    • 20-solr-datadir.sh script to check if Solr config is compliant for Lagoon. This sets directory paths, and configures the correct lock type.
    "},{"location":"docker-images/solr/#environment-variables","title":"Environment Variables","text":"

    Some options are configurable via environment variables.

    Environment Variable Default Description SOLR_JAVA_MEM 512M Default Java HEAP size (ie. SOLR_JAVA_MEM=\"-Xms10g -Xmx10g\"). SOLR_DATA_DIR /var/solr Path of the solr data dir. Be careful, changing this can cause data loss! SOLR_COPY_DATA_DIR_SOURCE (not set) Path which the entrypoint script of solr will use to copy into the defined SOLR_DATA_DIR, this can be used for prepopulating the Solr with a core. The scripts expects actual Solr data files! Plus it only copies data if the destination does not already have a solr core in it."},{"location":"docker-images/varnish/","title":"Varnish","text":"

    The Lagoon Varnish Docker images. Based on the official Varnish package

    "},{"location":"docker-images/varnish/#supported-versions","title":"Supported versions","text":"
    • 5 (available for compatibility only, no longer officially supported) - uselagoon/varnish-5
    • 6.0 LTS Dockerfile - uselagoon/varnish-6
    • 7 Dockerfile - uselagoon/varnish-7
    "},{"location":"docker-images/varnish/#included-varnish-modules","title":"Included varnish modules","text":"
    • vbox-dynamic - Dynamic backends from DNS lookups and service discovery from SRV records.
    • vbox-bodyaccess - Varnish vmod that lets you access the request body.
    "},{"location":"docker-images/varnish/#lagoon-adaptions","title":"Lagoon adaptions","text":"

    This image is prepared to be used on Lagoon. There are therefore some things already done:

    • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
    "},{"location":"docker-images/varnish/#included-defaultvcl-configuration-file","title":"Included default.vcl configuration file","text":"

    The image ships a default vcl configuration file, optimized to work on Lagoon. Some options are configurable via environments variables (see Environment Variables).

    "},{"location":"docker-images/varnish/#environment-variables","title":"Environment Variables","text":"

    Some options are configurable via environment variables.

    Environment Variable Default Description VARNISH_BACKEND_HOST NGINX Default backend host. VARNISH_BACKEND_PORT 8080 Default listening Varnish port. VARNISH_SECRET lagoon_default_secret Varnish secret used to connect to management. LIBVMOD_DYNAMIC_VERSION 5.2 Default version of vmod-dynamic module. LIBVMOD_BODYACCESS_VERSION 5.0 Default version of vmod-bodyaccess module. HTTP_RESP_HDR_LEN 8k Maximum length of any HTTP backend response header. HTTP_RESP_SIZE 32k Maximum number of bytes of HTTP backend response we will deal with. NUKE_LIMIT 150 Maximum number of objects we attempt to nuke in order to make space for an object body. CACHE_TYPE malloc Type of varnish cache. CACHE_SIZE 500M Cache size. LISTEN 8080 Default backend server port. MANAGEMENT_LISTEN 6082 Default management listening port."},{"location":"installing-lagoon/add-group/","title":"Add Group","text":"Add group
      lagoon add group -N groupname\n
    "},{"location":"installing-lagoon/add-project/","title":"Adding a Project","text":""},{"location":"installing-lagoon/add-project/#add-the-project-to-lagoon","title":"Add the project to Lagoon","text":"
    1. Run this command:

      Add project
      lagoon add project \\\n--git-url <YOUR-GITHUB-REPO-URL> \\\n--deploytarget 1 \\\n--production-environment <YOUR-PROD-ENV> \\\n--branches <THE-BRANCHES-YOU-WANT-TO-DEPLOY> \\\n--project <YOUR-PROJECT-NAME>\n
      • The value for --deploytarget is the ID of your Kubernetes cluster.
      • Your production environment should be the name of the branch you want to have as your production environment.
      • The branches you want to deploy might look like this: \u201c^(main|develop)$\u201d
      • The name of your project is anything you want - \u201cCompany Website,\u201d \u201cexample,\u201d etc.
    2. Go to the Lagoon UI, and you should see your project listed!

    "},{"location":"installing-lagoon/add-project/#add-the-deploy-key-to-your-git-repository","title":"Add the deploy key to your Git repository","text":"

    Lagoon creates a deploy key for each project. You now need to add it as a deploy key in your Git repository to allow Lagoon to download the code.

    1. Run the following command to get the deploy key:

      Get project-key
      lagoon get project-key --project <YOUR-PROJECT-NAME>\n
    2. Copy the key and save it as a deploy key in your Git repository.

    GitHub GitLab Bitbucket

    "},{"location":"installing-lagoon/add-project/#add-the-webhooks-endpoint-to-your-git-repository","title":"Add the webhooks endpoint to your Git repository","text":"

    In order for Lagoon to be able to deploy on code updates, it needs to be connected to your Git repository

    1. Add your Lagoon cluster's webhook endpoint to your Git repository

      • Payload URL: <LAGOON-WEBHOOK-INGRESS>
      • Content Type: JSON
      • Active: Active (allows you to enable/disable as required)
      • Events: Select the relevant events, or choose All. Usually push, branch create/delete are required

    GitHub GitLab Bitbucket

    "},{"location":"installing-lagoon/bulk-storage-provisioner/","title":"Bulk Storage Provisioner","text":""},{"location":"installing-lagoon/bulk-storage-provisioner/#aws-specific-instructions","title":"AWS-specific instructions","text":"

    Info

    The EFS info here is only applicable to AWS installations, but the basic process should be similar for all NFS volumes.

    In order to create the necessary Bulk StorageClass, you will need to have an RWX-capable storage backend.

    In this example, we will provide documentation to configure EFS as a NFS server, and configure that for use with Lagoon

    "},{"location":"installing-lagoon/bulk-storage-provisioner/#requirements","title":"Requirements","text":"
    1. Provision and configure an EFS, taking note of any security group requirements (https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-mount-cmd-dns-name.html)
    2. The DNS name for the mount target of the EFS volume - usually file-system-id.efs.aws-region.amazonaws.com
    3. Familiarity with the NFS CSI driver for Kubernetes - https://github.com/kubernetes-csi/csi-driver-nfs
    "},{"location":"installing-lagoon/bulk-storage-provisioner/#steps","title":"Steps","text":"
    1. Add Helm repository for the NFS CSI driver Add Helm repo
      helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts\n
    2. Configure the bulk StorageClass EFS NFS mount target in a values file. Note that this step also installs a secret into the namespace to handle deleting volumes, as per here

      csi-driver-nfs-storageclass.yaml

      apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\nname: bulk\nprovisioner: nfs.csi.k8s.io\nparameters:\nserver: file-system-id.efs.aws-region.amazonaws.com\nshare: /\ncsi.storage.k8s.io/provisioner-secret-name: \"mount-options\"\ncsi.storage.k8s.io/provisioner-secret-namespace: \"csi-driver-nfs\"\nreclaimPolicy: Delete\nvolumeBindingMode: Immediate\nmountOptions:\n- nfsvers=4.1\n- rsize=1048576\n- wsize=1048576\n- hard\n- timeo=600\n- retrans=2\n- noresvport\n---\napiVersion: v1\nkind: Secret\nmetadata:\nname: mount-options\nnamespace: csi-driver-nfs\nstringData:\nmountOptions: \"nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport\"\n
      3. Install the NFS CSI driver Install NFS CSI Driver
      helm upgrade --install --create-namespace \\\n--namespace csi-driver-nfs --wait \\\ncsi-driver-nfs csi-driver-nfs/csi-driver-nfs\n
      4. Install the StorageClass and secret Install bulk StorageClass and Secret
      kubectl apply -f csi-driver-nfs-storageclass.yaml\n

    "},{"location":"installing-lagoon/create-user/","title":"Create Lagoon user","text":"
    1. Add user via Lagoon CLI:

      Add user
      lagoon add user --email user@example.com --firstName MyFirstName --lastName MyLastName\n
    2. Go to your email and click the password reset link in the email.

    3. Follow the instructions and log in to Lagoon UI with created password.
    4. Add the SSH public key of the user via Settings.
    "},{"location":"installing-lagoon/deploy-project/","title":"Deploy Your Project","text":"
    1. Run the following command to deploy your project:

      Deploy
      lagoon deploy branch -p <YOUR-PROJECT-NAME> -b <YOUR-BRANCH-NAME>\n
    2. Go to the Lagoon UI and take a look at your project - you should now see the environment for this project!

    3. Look in your cluster at your pods list, and you should see the build pod as it begins to clone Git repositories, set up services, etc.See all pods
      kubectl get pods --all-namespaces | grep lagoon-build\n
    "},{"location":"installing-lagoon/gitlab/","title":"GitLab","text":"

    Not needed for *most* installs, but this is configured to integrate Lagoon with GitLab for user and group authentication.

    1. Create Personal Access token in GitLab for a user with admin access.
    2. Create system hooks under your-gitlab.com/admin/hooks pointing to: webhookhandler.lagoon.example.com and define a random secret token.
      1. Enable \u201crepository update events\u201d
    3. Update lagoon-core-values.yml:

      lagoon-core-values.yml
      api:\nadditionalEnvs:\nGITLAB_API_HOST: <<URL of GitLab example: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << Personal Access token with Access to API >>\nGITLAB_SYSTEM_HOOK_TOKEN: << System Hook Secret Token >>\nwebhook-haondler:\nadditionalEnvs:\nGITLAB_API_HOST: <<URL of GitLab example: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << Personal Access token with Access to API >>\nGITLAB_SYSTEM_HOOK_TOKEN: << System Hook Secret Token >>\nwebhooks2tasks:\nadditionalEnvs:\nGITLAB_API_HOST: <<URL of GitLab example: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << Personal Access token with Access to API >>\nGITLAB_SYSTEM_HOOK_TOKEN: << System Hook Secret Token >>\n
    4. Helm update the lagoon-core helmchart.

    5. If you've already created users in Keycloak, delete them.
    6. Run the following command in an API pod:Sync with GitLab
        yarn sync:gitlab:all\n
    "},{"location":"installing-lagoon/install-harbor/","title":"Install Harbor","text":"
    1. Add Helm repository:

      Add Helm repository
      helm repo add harbor https://helm.goharbor.io\n
    2. Consider the optimal configuration of Harbor for your particular circumstances - see their docs for more recommendations:

      1. We recommend using S3-compatible storage for image blobs (imageChartStorage).
      2. We recommend using a managed database service for the Postgres service (database.type).
      3. In high-usage scenarios we recommend using a managed Redis service. (redis.type)
    3. Create the file harbor-values.yml inside of your config directory. The proxy-buffering annotations help with large image pushes:

      harbor-values.yml
      expose:\ningress:\nannotations:\nkubernetes.io/tls-acme: \"true\"\nnginx.ingress.kubernetes.io/proxy-buffering: \"off\"\nnginx.ingress.kubernetes.io/proxy-request-buffering: \"off\"\nhosts:\ncore: harbor.lagoon.example.com\ntls:\nenabled: true\ncertSource: secret\nsecret:\nsecretName: harbor-harbor-ingress\nexternalURL: https://harbor.lagoon.example.com\nharborAdminPassword: <your Harbor Admin Password>\nchartmuseum:\nenabled: false\nclair:\nenabled: false\nnotary:\nenabled: false\ntrivy:\nenabled: false\njobservice:\njobLogger: stdout\n
    4. Install Harbor, checking the requirements for the currently supported Harbor versions:

      Install Harbor
      helm upgrade --install --create-namespace \\\n--namespace harbor --wait \\\n-f harbor-values.yml \\\nharbor harbor/harbor\n
    5. Visit Harbor at the URL you set in harbor.yml.

      1. Username: admin
      2. Password:
      Get Harbor secret
      kubectl -n harbor get secret harbor-core -o jsonpath=\"{.data.HARBOR_ADMIN_PASSWORD}\" | base64 --decode\n
    6. You will need to add the above Harbor credentials to the Lagoon Remote values.yml in the next step, as well as harbor-values.yml.

    "},{"location":"installing-lagoon/install-lagoon-remote/","title":"Install Lagoon Remote","text":"

    Now we will install Lagoon Remote into the Lagoon namespace. The RabbitMQ service is the broker.

    1. Create lagoon-remote-values.yml in your config directory as you did the previous two files, and update the values.

      • rabbitMQPassword
      Get RabbitMQ password
      kubectl -n lagoon-core get secret lagoon-core-broker -o jsonpath=\"{.data.RABBITMQ_PASSWORD}\" | base64 --decode\n
      • rabbitMQHostname
      lagoon-remote-values.yml
      lagoon-core-broker.lagoon-core.svc.local\n
      • taskSSHHost
      Update SSH Host
      kubectl get service lagoon-core-broker-amqp-ext \\\n-o custom-columns=\"NAME:.metadata.name,IP ADDRESS:.status.loadBalancer.ingress[*].ip,HOSTNAME:.status.loadBalancer.ingress[*].hostname\"\n
      • harbor-password
      Get Harbor secret
      kubectl -n harbor get secret harbor-harbor-core -o jsonpath=\"{.data.HARBOR_ADMIN_PASSWORD}\" | base64 --decode\n
    2. Add the Harbor configuration from the Install Harbor step.

      lagoon-remote-values.yml
      lagoon-build-deploy:\nenabled: true\nextraArgs:\n- \"--enable-harbor=true\"\n- \"--harbor-url=https://harbor.lagoon.example.com\"\n- \"--harbor-api=https://harbor.lagoon.example.com/api/\"\n- \"--harbor-username=admin\"\n- \"--harbor-password=<from harbor-harbor-core secret>\"\nrabbitMQUsername: lagoon\nrabbitMQPassword: <from lagoon-core-broker secret>\nrabbitMQHostname: lagoon-core-broker.lagoon-core.svc.cluster.local\nlagoonTargetName: <name of lagoon remote, can be anything>\ntaskSSHHost: <IP of ssh service loadbalancer>\ntaskSSHPort: \"22\"\ntaskAPIHost: \"api.lagoon.example.com\"\ndbaas-operator:\nenabled: true\nmariadbProviders:\nproduction:\nenvironment: production\nhostname: 172.17.0.1.nip.io\nreadReplicaHostnames:\n- 172.17.0.1.nip.io\npassword: password\nport: '3306'\nuser: root\ndevelopment:\nenvironment: development\nhostname: 172.17.0.1.nip.io\nreadReplicaHostnames:\n- 172.17.0.1.nip.io\npassword: password\nport: '3306'\nuser: root\n
    3. Enable ssh-core service account

    4. Install Lagoon Remote:

      Install Lagoon remote
      helm upgrade --install --create-namespace \\\n--namespace lagoon \\\n-f lagoon-remote-values.yml \\\nlagoon-remote lagoon/lagoon-remote\n
    "},{"location":"installing-lagoon/lagoon-backups/","title":"Lagoon Backups","text":"

    Lagoon uses the K8up backup operator: https://k8up.io. Lagoon isn\u2019t tightly integrated with K8up, it\u2019s more that Lagoon can create its resources in a way that K8up can automatically discover and backup.

    Lagoon has been extensively tested with K8up 1.x, but is not compatible with 2.x yet. We recommend using the 1.1.0 chart version (App version v1.2.0).

    1. Create new AWS User with policies:

      example K8up IAM user
      {\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Sid\":\"VisualEditor0\",\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:ListAllMyBuckets\",\n\"s3:CreateBucket\",\n\"s3:GetBucketLocation\"\n],\n\"Resource\":\"*\"\n},\n{\n\"Sid\":\"VisualEditor1\",\n\"Effect\":\"Allow\",\n\"Action\":\"s3:ListBucket\",\n\"Resource\":\"arn:aws:s3:::baas-*\"\n},\n{\n\"Sid\":\"VisualEditor2\",\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\"\n],\n\"Resource\":\"arn:aws:s3:::baas-*/*\"\n}\n]\n}\n
    2. Create k8up-values.yml (customize for your provider):

      k8up-values.yml
      k8up:\nenvVars:\n- name: BACKUP_GLOBALS3ENDPOINT\nvalue: 'https://s3.eu-west-1.amazonaws.com'\n- name: BACKUP_GLOBALS3BUCKET\nvalue: ''\n- name: BACKUP_GLOBALKEEPJOBS\nvalue: '1'\n- name: BACKUP_GLOBALSTATSURL\nvalue: 'https://backup.lagoon.example.com'\n- name: BACKUP_GLOBALACCESSKEYID\nvalue: ''\n- name: BACKUP_GLOBALSECRETACCESSKEY\nvalue: ''\n- name: BACKUP_BACKOFFLIMIT\nvalue: '2'\n- name: BACKUP_GLOBALRESTORES3BUCKET\nvalue: ''\n- name: BACKUP_GLOBALRESTORES3ENDPOINT\nvalue: 'https://s3.eu-west-1.amazonaws.com'\n- name: BACKUP_GLOBALRESTORES3ACCESSKEYID\nvalue: ''\n- name: BACKUP_GLOBALRESTORES3SECRETACCESSKEY\nvalue: ''\ntimezone: Europe/Zurich\n
    3. Install K8up:

      Install K8up Step 1
      helm repo add appuio https://charts.appuio.ch\n
      Install K8up Step 2
      kubectl apply -f https://github.com/vshn/k8up/releases/download/v1.2.0/k8up-crd.yaml\n
      Install K8up Step 3
      helm upgrade --install --create-namespace \\\n--namespace k8up \\\n-f k8up-values.yaml \\\n--version 1.1.0 \\\nk8up appuio/k8up\n
    4. Update lagoon-core-values.yml:

      lagoon-core-values.yml
      s3BAASAccessKeyID: <<Access Key ID for restore bucket>>\ns3BAASSecretAccessKey: <<Access Key Secret for restore bucket>>\n
    5. Redeploy lagoon-core.

    "},{"location":"installing-lagoon/lagoon-cli/","title":"Install the Lagoon CLI","text":"
    1. Check https://github.com/uselagoon/lagoon-cli#install on how to install for your operating system. For macOS and Linux, you can use Homebrew:
      1. brew tap uselagoon/lagoon-cli
      2. brew install lagoon
    2. The CLI needs to know how to communicate with Lagoon, so run the following command:

      Lagoon config
          lagoon config add \\\n--graphql https://YOUR-API-URL/graphql \\\n--ui https://YOUR-UI-URL \\\n--hostname YOUR.SSH.IP \\\n--lagoon YOUR-LAGOON-NAME \\\n--port 22\n
    3. Access Lagoon by authenticating with your SSH key.

      1. In the Lagoon UI (the URL is in values.yml if you forget), go to Settings.
      2. Add your public SSH key.
      3. You need to set the default Lagoon to your Lagoon so that it doesn\u2019t try to use the amazee.io defaults:

        Lagoon config
            lagoon config default --lagoon <YOUR-LAGOON-NAME>\n
    4. Now run lagoon login. Lagoon talks to SSH and authenticates against your public/private key pair, and gets a token for your username.

    5. Verify via lagoon whoami that you are logged in.

    Info

    We don\u2019t generally recommend using the Lagoon Admin role, but you\u2019ll need to create an admin account at first to get started. Ideally, you\u2019ll immediately create another account to work from which is not an admin.

    "},{"location":"installing-lagoon/lagoon-core/","title":"Install Lagoon Core","text":""},{"location":"installing-lagoon/lagoon-core/#install-the-helm-chart","title":"Install the Helm chart","text":"
    1. Add Lagoon Charts repository to your Helm Repositories:

      Add Lagoon Charts repository
      helm repo add lagoon https://uselagoon.github.io/lagoon-charts/\n
    2. Create a directory for the configuration files we will create, and make sure that it\u2019s version controlled. Ensure that you reference this path in commands referencing your values.yml files.

    3. Create values.yml in the directory you\u2019ve just created. Update the endpoint URLs (change them from api.lagoon.example.com to your values). Example: https://github.com/uselagoon/lagoon-charts/blob/main/charts/lagoon-core/ci/linter-values.yaml
    4. Now run helm upgrade --install command, pointing to values.yml, like so:

      Upgrade Helm with values.yml
      helm upgrade --install --create-namespace --namespace lagoon-core -f values.yml lagoon-core lagoon/lagoon-core`\n
    5. Lagoon Core is now installed!

    Warning

    Sometimes we run into Docker Hub pull limits. We are considering moving our images elsewhere if this continues to be a problem.

    "},{"location":"installing-lagoon/lagoon-core/#configure-keycloak","title":"Configure Keycloak","text":"

    Visit the Keycloak dashboard at the URL you defined in the values.yml for Keycloak.

    1. Click \"Administration Console\"
    2. Username: admin
    3. Password: use lagoon-core-keycloak secret, key-value KEYCLOAK_ADMIN_PASSWORD
    4. Retrieve the secret like so:

      Retrieve secret
      kubectl -n lagoon-core get secret lagoon-core-keycloak -o jsonpath=\"{.data.KEYCLOAK_ADMIN_PASSWORD}\" | base64 --decode\n
    5. Click on User on top right.

      1. Go to Manage Account.
      2. Add an Email for the admin account you created.
      3. Save.
    6. Go to Realm Lagoon -> Realm Settings -> Email
      1. Configure email server for Keycloak, test connection via \u201cTest connection\u201d button.
    7. Go to Realm Lagoon -> Realm Settings -> Login
      1. Enable \u201cForgot Password\u201d
      2. Save.
    "},{"location":"installing-lagoon/lagoon-core/#log-in-to-the-ui","title":"Log in to the UI","text":"

    You should now be able to visit the Lagoon UI at the URL you defined in the values.yml for the UI.

    1. Username: lagoonadmin
    2. Secret: use lagoon-core-keycloak secret key-value: LAGOON-CORE-KEYCLOAK
    3. Retrieve the secret:Retrieve secret
          kubectl -n lagoon-core get secret lagoon-core-keycloak -o jsonpath=\"{.data.KEYCLOAK_LAGOON_ADMIN_PASSWORD}\" | base64 --decode\n
    "},{"location":"installing-lagoon/lagoon-files/","title":"Lagoon Files","text":"

    Lagoon files are used to store the file output of tasks, such as backups, and can be hosted on any S3-compatible storage.

    1. Create new AWS User with policies:

      Example files IAM user
      {\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:ListBucket\",\n\"s3:GetBucketLocation\",\n\"s3:ListBucketMultipartUploads\"\n],\n\"Resource\":\"arn:aws:s3:::S3_BUCKET_NAME\"\n},\n{\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:AbortMultipartUpload\"\n],\n\"Resource\":\"arn:aws:s3:::S3_BUCKET_NAME/*\"\n}\n]\n}\n
    2. Update lagoon-core-values.yml:

      lagoon-core-values.yml
      s3FilesAccessKeyID: <<Access Key ID>>\ns3FilesBucket: <<Bucket Name for Lagoon Files>>\ns3FilesHost: <<S3 endpoint like \"https://s3.eu-west-1.amazonaws.com\" >>\ns3FilesSecretAccessKey: <<Access Key Secret>>\ns3FilesRegion: <<S3 Region >>\n
    3. If you use ingress-nginx in front of lagoon-core, we suggest setting this configuration which will allow for bigger file uploads:

      lagoon-core-values.yml
      controller:\nconfig:\nclient-body-timeout: '600' # max 600 secs fileuploads\nproxy-send-timeout: '1800' # max 30min connections - needed for websockets\nproxy-read-timeout: '1800' # max 30min connections - needed for websockets\nproxy-body-size: 1024m # 1GB file size\nproxy-buffer-size: 64k # bigger buffer\n
    "},{"location":"installing-lagoon/lagoon-logging/","title":"Lagoon Logging","text":"

    Lagoon integrates with OpenSearch to store application, container and router logs. Lagoon Logging collects the application, router and container logs from Lagoon projects, and sends them to the logs concentrator. It needs to be installed onto each lagoon-remote instance.

    In addition, it should be installed in the lagoon-core cluster to collect logs from the lagoon-core service. This is configured in the LagoonLogs section.

    Logging Overview: Lucid Chart

    See also: Logging.

    Read more about Lagoon logging here: https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logging

    1. Create lagoon-logging-values.yaml:

      lagoon-logging-values.yaml
      tls:\ncaCert: |\n<< content of ca.pem from Logs-Concentrator>>\nclientCert: |\n<< content of client.pem from Logs-Concentrator>>\nclientKey: |\n<< content of client-key.pem from Logs-Concentrator>>\nforward:\nusername: <<Username for Lagoon Remote 1>>\npassword: <<Password for Lagoon Remote 1>>\nhost: <<ExternalIP of Logs-Concentrator Service LoadBalancer>>\nhostName: <<Hostname in Server Cert of Logs-Concentrator>>\nhostPort: '24224'\nselfHostname: <<Hostname in Client Cert of Logs-Concentrator>>\nsharedKey: <<Generated ForwardSharedKey of Logs-Concentrator>>\ntlsVerifyHostname: false\nclusterName: <<Short Cluster Identifier>>\nlogsDispatcher:\nserviceMonitor:\nenabled: false\nlogging-operator:\nmonitoring:\nserviceMonitor:\nenabled: false\nlagoonLogs:\nenabled: true\nrabbitMQHost: lagoon-core-broker.lagoon-core.svc.cluster.local\nrabbitMQUser: lagoon\nrabbitMQPassword: <<RabbitMQ Lagoon Password>>\nexcludeNamespaces: {}\n
    2. Install lagoon-logging:

      Install lagoon-logging
      helm repo add banzaicloud-stable https://kubernetes-charts.banzaicloud.com\n\nhelm upgrade --install --create-namespace \\\n--namespace lagoon-logging \\\n-f lagoon-logging-values.yaml \\\nlagoon-logging lagoon/lagoon-logging\n
    "},{"location":"installing-lagoon/lagoon-logging/#logging-nginx-ingress-controller","title":"Logging NGINX Ingress Controller","text":"

    If you'd like logs from ingress-nginx inside lagoon-logging:

    1. The ingress controller must be installed in the namespace ingress-nginx
    2. Add the content of this file to ingress-nginx:

      ingress-nginx log-format-upstream
      controller:\nconfig:\nlog-format-upstream: >-\n{\n\"time\": \"$time_iso8601\",\n\"remote_addr\": \"$remote_addr\",\n\"x-forwarded-for\": \"$http_x_forwarded_for\",\n\"true-client-ip\": \"$http_true_client_ip\",\n\"req_id\": \"$req_id\",\n\"remote_user\": \"$remote_user\",\n\"bytes_sent\": $bytes_sent,\n\"request_time\": $request_time,\n\"status\": \"$status\",\n\"host\": \"$host\",\n\"request_proto\": \"$server_protocol\",\n\"request_uri\": \"$uri\",\n\"request_query\": \"$args\",\n\"request_length\": $request_length,\n\"request_time\": $request_time,\n\"request_method\": \"$request_method\",\n\"http_referer\": \"$http_referer\",\n\"http_user_agent\": \"$http_user_agent\",\n\"namespace\": \"$namespace\",\n\"ingress_name\": \"$ingress_name\",\n\"service_name\": \"$service_name\",\n\"service_port\": \"$service_port\"\n}\n
    3. Your logs should start flowing!

    "},{"location":"installing-lagoon/logs-concentrator/","title":"Logs-Concentrator","text":"

    Logs-concentrator collects the logs being sent by Lagoon clusters and augments them with additional metadata before inserting them into Elasticsearch.

    1. Create certificates according to ReadMe: https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logs-concentrator
    2. Create logs-concentrator-values.yml:

      logs-concentrator-values.yml
      tls:\ncaCert: |\n<<contents of ca.pem>>\nserverCert: |\n<<contents of server.pem\nserverKey: |\n<<contents of server-key.pem>>\nelasticsearchHost: elasticsearch-opendistro-es-client-service.elasticsearch.svc.cluster.local\nelasticsearchAdminPassword: <<ElasticSearch Admin Password>>\nforwardSharedKey: <<Random 32 Character Password>>\nusers:\n- username: <<Username for Lagoon Remote 1>>\npassword: <<Random Password for Lagoon Remote 1>>\nservice:\ntype: LoadBalancer\nserviceMonitor:\nenabled: false\n
    3. Install logs-concentrator:

      Install logs-concentrator
      helm upgrade --install --create-namespace \\\n--namespace lagoon-logs-concentrator \\\n-f logs-concentrator-values.yaml \\\nlagoon-logs-concentrator lagoon/lagoon-logs-concentrator\n
    "},{"location":"installing-lagoon/opendistro/","title":"OpenDistro","text":"

    To install an OpenDistro cluster, you will need to configure TLS and secrets so that Lagoon can talk to it securely. You're going to have to create a handful of JSON files - put these in the same directory as the values files you've been creating throughout this installation process.

    Install OpenDistro Helm, according to https://opendistro.github.io/for-elasticsearch-docs/docs/install/helm/

    "},{"location":"installing-lagoon/opendistro/#create-keys-and-certificates","title":"Create Keys and Certificates","text":"
    1. Generate certificates

      Note:

      CFSSL is CloudFlare's PKI/TLS swiss army knife. It is both a command line tool and an HTTP API server for signing, verifying, and bundling TLS certificates. It requires Go 1.12+ to build.

      1. Install CFSSL: https://github.com/cloudflare/cfssl
      2. Generate CA. You'll need the following file:
      ca-csr.json
      {\n\"CN\": \"ca.elasticsearch.svc.cluster.local\",\n\"hosts\": [\n\"ca.elasticsearch.svc.cluster.local\"\n],\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n},\n\"ca\": {\n\"expiry\": \"87600h\"\n}\n}\n
    2. Run the following two commands:

      Generate certificate
      cfssl gencert -initca ca-csr.json | cfssljson -bare ca -\nrm ca.csr\n

      You'll get ca-key.pem, and ca.pem. This is your CA key and self-signed certificate.

    3. Next, we'll generate the node peering certificate. You'll need the following two files:

      ca-config.json
      {\n\"signing\": {\n\"default\": {\n\"expiry\": \"87600h\"\n},\n\"profiles\": {\n\"peer\": {\n\"expiry\": \"87600h\",\n\"usages\": [\n\"signing\",\n\"key encipherment\",\n\"server auth\",\n\"client auth\"\n]\n},\n\"client\": {\n\"expiry\": \"87600h\",\n\"usages\": [\n\"signing\",\n\"key encipherment\",\n\"client auth\"\n]\n}\n}\n}\n}\n
      node.json
      {\n\"hosts\": [\n\"node.elasticsearch.svc.cluster.local\"\n],\n\"CN\": \"node.elasticsearch.svc.cluster.local\",\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n}\n}\n
    4. Run the following two commands:

      Generate certificate keys
      cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer node.json | cfssljson -bare node\nrm node.csr\n

      You'll get node.pem and node-key.pem. This is the peer certificate that will be used by nodes in the ES cluster.

    5. Next, we'll convert the key to the format supported by Java with the following command:

      Convert key format
      openssl pkey -in node-key.pem -out node-key.pkcs8\n
    6. Now we'll generate the admin certificate. You'll need the following file:

      admin.json
      {\n\"CN\": \"admin.elasticsearch.svc.cluster.local\",\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n}\n}\n
    7. Run the following two commands:

      Generate admin certificate keys
      cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client admin.json | cfssljson -bare admin\nrm admin.csr\n

      You'll get admin.pem and admin-key.pem. This is the certificate that will be used to perform admin commands on the opendistro-security plugin.

    8. Next, we'll convert the key to the format supported by Java with the following command:

      Convert key format
      openssl pkey -in admin-key.pem -out admin-key.pkcs8\n
    "},{"location":"installing-lagoon/opendistro/#installing-opendistro","title":"Installing OpenDistro","text":"

    Now that we have our keys and certificates, we can continue with the installation.

    1. Generate hashed passwords.

      1. The elasticsearch-secrets-values.yaml needs two hashed passwords. Create them with this command (run it twice, enter a random password, store both the plaintext and hashed passwords).
      Generate hashed passwords
      docker run --rm -it docker.io/amazon/opendistro-for-elasticsearch:1.12.0 sh -c \"chmod +x /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh; /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh\"\n
    2. Create secrets:

      1. You'll need to create elasticsearch-secrets-values.yaml. See this gist as an example: https://gist.github.com/Schnitzel/43f483dfe0b23ca0dddd939b12bb4b0b
    3. Install secrets with the following commands:

      Install secrets
      helm repo add incubator https://charts.helm.sh/incubator`\nhelm upgrade --namespace elasticsearch --create-namespace --install elasticsearch-secrets incubator/raw --values elasticsearch-secrets-values.yaml `\n
    4. You'll need to create elasticsearch-values.yaml. See this gist as an example: (fill all <\\> with values) https://gist.github.com/Schnitzel/1e386654b6abf75bf4d66a544db4aa6a

    5. Install Elasticsearch:

      Install Elasticsearch
      helm upgrade --namespace elasticsearch --create-namespace --install elasticsearch opendistro-es-X.Y.Z.tgz --values elasticsearch-values.yaml\n
    6. Configure security inside Elasticsearch with the following:

      Configure security
      kubectl exec -n elasticsearch -it elasticsearch-opendistro-es-master-0 -- bash\nchmod +x /usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh\n/usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh -nhnv -cacert /usr/share/elasticsearch/config/admin-root-ca.pem -cert /usr/share/elasticsearch/config/admin-crt.pem -key /usr/share/elasticsearch/config/admin-key.pem -cd /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/\n
    7. Update lagoon-core-values.yaml with:

      lagoon-core-values.yaml
      elasticsearchURL: http://elasticsearch-opendistro-es-client-service.elasticsearch.svc.cluster.local:9200\nkibanaURL: https://<<Kibana Public URL>>\nlogsDBAdminPassword: \"<<PlainText Elasticsearch Admin Password>>\"\n
    8. Rollout Lagoon Core:

      Rollout Lagoon Core
      helm upgrade --install --create-namespace --namespace lagoon-core -f values.yaml lagoon-core lagoon/lagoon-core\n
    9. Sync all Lagoon Groups with Opendistro Elasticsearch

      Sync groups
      kubectl -n lagoon-core exec -it deploy/lagoon-core-api -- sh\nyarn run sync:opendistro-security\n
    10. "},{"location":"installing-lagoon/querying-graphql/","title":"Querying with GraphQL","text":"
      1. You\u2019ll need an app for sending and receiving GraphQL queries. We recommend GraphiQL.

        1. If you\u2019re using Homebrew, you can install it with brew install --cask graphiql.
      2. We need to tell Lagoon Core about the Kubernetes cluster. The GraphQL endpoint is: https://<YOUR-API-URL>/graphql

      3. Go to Edit HTTP Headers, and Add Header.

        1. Header Name: Authorization
        2. Value: Bearer YOUR-TOKEN-HERE
        3. In your home directory, the Lagoon CLI has created a .lagoon.yml file. Copy the token from that file and use it for the value here.
        4. Save.
      4. Now you\u2019re ready to run some queries. Run the following test query to ensure everything is working correctly:

        Get all projects
        query allProjects {allProjects {name } }\n
      5. This should give you the following response:

        API Response
          {\n    \"data\": {\n      \"allProjects\": []\n    }\n  }\n

        Read more about GraphQL here in our documentation.

      6. Once you get the correct response, we need to add a mutation.

        1. Run the following query:

          Add mutation
          mutation addKubernetes {\naddKubernetes(input:\n{\nname: \"<TARGET-NAME-FROM-REMOTE-VALUES.yml>\",\nconsoleUrl: \"<URL-OF-K8S-CLUSTER>\",\ntoken: \"xxxxxx\u201d\nrouterPattern: \"${environment}.${project}.lagoon.example.com\"\n}){id}\n}\n
          1. name: get from lagoon-remote-values.yml
          2. consoleUrl: API Endpoint of Kubernetes cluster. Get from values.yml
          3. token: get a token for the ssh-core service account

            Get token
            kubectl -n lagoon get secret/lagoon-remote-ssh-core-token -o json | jq -r '.data.token | @base64d'\n

      Info

      Authorization tokens for GraphQL are very short term so you may need to generate a new one. Run lagoon login and then cat the .lagoon.yml file to get the new token, and replace the old token in the HTTP header with the new one.

      "},{"location":"installing-lagoon/requirements/","title":"Installing Lagoon Into Existing Kubernetes Cluster","text":""},{"location":"installing-lagoon/requirements/#requirements","title":"Requirements","text":"
      • Kubernetes 1.23+ (Kubernetes 1.21 is supported, but 1.23 is recommended)
      • Familiarity with Helm and Helm Charts, and kubectl.
      • Ingress controller, we recommend ingress-nginx, installed into ingress-nginx namespace
      • Cert manager (for TLS) - We highly recommend using letsencrypt
      • StorageClasses (RWO as default, RWM for persistent types)

      Note

      We acknowledge that this is a lot of steps, and our roadmap for the immediate future includes reducing the number of steps in this process.

      "},{"location":"installing-lagoon/requirements/#specific-requirements-as-of-january-2023","title":"Specific requirements (as of January 2023)","text":""},{"location":"installing-lagoon/requirements/#kubernetes","title":"Kubernetes","text":"

      Lagoon supports Kubernetes versions 1.21 onwards. We actively test and develop against Kubernetes 1.24, also regularly testing against 1.21,1.22 and 1.25.

      The next large round of breaking changes is in Kubernetes 1.25, and we will endeavour to be across these in advance, although this will require a bump in the minimum supported version of Lagoon.

      "},{"location":"installing-lagoon/requirements/#ingress-nginx","title":"ingress-nginx","text":"

      Lagoon is currently configured only for a single ingress-nginx controller, and therefore defining an IngressClass was not necessary in the past.

      In order to use the recent ingress-nginx controllers (v4 onwards, required for Kubernetes 1.22), the following configuration should be used, as per the ingress-nginx docs.

      • nginx-ingress should be configured as the default controller - set .controller.ingressClassResource.default: true in Helm values
      • nginx-ingress should be configured to watch ingresses without IngressClass set - set .controller.watchIngressWithoutClass: true in Helm values

      This will configure the controller to create any new ingresses with itself as the IngressClass, and also to handle any existing ingresses without an IngressClass set.

      Other configurations may be possible, but have not been tested.

      "},{"location":"installing-lagoon/requirements/#harbor","title":"Harbor","text":"

      Versions 2.1 and 2.2+ of Harbor are currently supported. The method of retrieving robot accounts was changed in 2.2, and the Lagoon remote-controller is able to handle these tokens. This means that Harbor has to be configured with the credentials in lagoon-build-deploy - not lagoon-core.

      We recommend installing a Harbor version greater than 2.6.0 with Helm chart 1.10.0 or greater.

      "},{"location":"installing-lagoon/requirements/#k8up-for-backups","title":"k8up for backups","text":"

      Lagoon has built in configuration for the K8up backup operator. Lagoon can configure prebackup pods, schedules and retentions, and manage backups and restores for K8up. Lagoon currently only supports the 1.x versions of K8up, owing to a namespace change in v2 onwards, but we are working on a fix.

      K8up v2:

      Lagoon does not currently support K8up v2 onwards due to a namespace change here.

      We recommend installing K8up version 1.2.0 with Helm Chart 1.1.0

      "},{"location":"installing-lagoon/requirements/#storage-provisioners","title":"Storage provisioners","text":"

      Lagoon utilizes a default 'standard' StorageClass for most workloads, and the internal provisioner for most Kubernetes platforms will suffice. This should be configured to be dynamic provisioning and expandable where possible.

      Lagoon also requires a StorageClass called 'bulk' to be available to support persistant pod replicas (across nodes). This StorageClass should support ReadWriteMany (RWX) access mode and should be configured to be dynamic provisioning and expandable where possible. See https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes for more information, and the production drivers list for a complete list of compatible drivers.

      We have curently only included the instructions a generic Bulk Storage provisioner using NFS Bulk Storage Provisioner. In AWS the production EFS CSI driver is limited to provisioning no more than 1000 PVCs. We are awaiting an upstream possible fix here - but most other providers CSI drivers should also work, as will configurations with an NFS-compatible server and provisioner.

      "},{"location":"installing-lagoon/requirements/#how-much-kubernetes-experienceknowledge-is-required","title":"How much Kubernetes experience/knowledge is required?","text":"

      Lagoon uses some very involved Kubernetes and cloud-native concepts, and while full familiarity may not be necessary to install and configure Lagoon, diagnosing issues and contributing may prove difficult without a good level of familiarity.

      As an indicator, comfort with the curriculum for the Certified Kubernetes Administrator would be suggested as a minimum.

      "},{"location":"installing-lagoon/update-lagoon/","title":"Updating","text":"
      1. Download newest charts using Helm.

        Download newest charts
        helm repo update\n
      2. Check with helm diff for changes (https://github.com/databus23/helm-diff).

        Check for changes
        helm diff upgrade --install --create-namespace --namespace lagoon-core \\\n-f values.yml lagoon-core lagoon/lagoon-core\n
      3. Back up the Lagoon databases prior to any Helm actions. We also suggest scaling the API to a single pod, to aid the database migration scripts running in the initContainers.

      4. Run the upgrade using Helm.

        Run upgrade
        helm upgrade --install --create-namespace --namespace lagoon-core \\\n-f values.yaml lagoon-core lagoon/lagoon-core\n
      5. (Note that as of Lagoon v2.11.0, this step is no longer required.) If upgrading Lagoon Core, ensure you run the rerun_initdb.sh script to perform post upgrade migrations.

        Run script
        kubectl --namespace lagoon-core exec -it lagoon-core-api-db-0 -- \\\nsh -c /rerun_initdb.sh\n
      6. Re-scale the API pods back to their original level.

      7. If upgrading Lagoon Core, and you have enabled groups/user syncing for OpenSearch, you may additionally need to run the sync:opendistro-security script to update the groups in OpenSearch. This command can also be prefixed with a GROUP_REGEX=<group-to-sync to sync a single group at a time, as syncing the entire group structure may take a long time.

        Run script
        kubectl --namespace lagoon-core exec -it deploy/lagoon-core-api -- \\\nsh -c yarn sync:opendistro-security\n

      Check https://github.com/uselagoon/lagoon/releases for additional upgrades.

      "},{"location":"installing-lagoon/update-lagoon/#database-backups","title":"Database Backups","text":"

      You may want to back up the databases before upgrading Lagoon Core, the following will create backups you can use to restore from if required. You can delete them afterwards.

      "},{"location":"installing-lagoon/update-lagoon/#api-db","title":"API DB","text":"Back up API DB
      kubectl --namespace lagoon-core exec -it lagoon-core-api-db-0 -- \\\nsh -c 'mysqldump --max-allowed-packet=500M --events \\\n    --routines --quick --add-locks --no-autocommit \\\n    --single-transaction infrastructure | gzip -9 > \\\n    /var/lib/mysql/backup/$(date +%Y-%m-%d_%H%M%S).infrastructure.sql.gz'\n
      "},{"location":"installing-lagoon/update-lagoon/#keycloak-db","title":"Keycloak DB","text":"Back up Keycloak DB
      kubectl --namespace lagoon-core exec -it lagoon-core-keycloak-db-0 -- \\\nsh -c 'mysqldump --max-allowed-packet=500M --events \\\n    --routines --quick --add-locks --no-autocommit \\\n    --single-transaction keycloak | gzip -9 > \\\n    /var/lib/mysql/backup/$(date +%Y-%m-%d_%H%M%S).keycloak.sql.gz'\n
      "},{"location":"interacting/graphql-queries/","title":"GraphQL API","text":""},{"location":"interacting/graphql-queries/#running-graphql-queries","title":"Running GraphQL queries","text":"

      Direct API interactions in Lagoon are done via GraphQL.

      In order to authenticate with the API, we need a JWT (JSON Web Token) that allows us to use the GraphQL API as admin. To generate this token, open the terminal of the storage-calculator pod via your Kubernetes UI, or via kubectl and run the following command:

      Generate JWT token.
      ./create_jwt.py\n

      This will return a long string which is the JWT token. Make a note of this, as we will need it to send queries.

      We also need the URL of the API endpoint, which can be found under \"Ingresses\" in your Kubernetes UI or via kubectl on the command line. Make a note of this endpoint URL, which we will also need.

      To compose and send GraphQL queries, we recommend GraphiQL.app, a desktop GraphQL client with features such as autocomplete. To continue with the next steps, install and start the app.

      Under \"GraphQL Endpoint\", enter the API endpoint URL with /graphql on the end. Then click on \"Edit HTTP Headers\" and add a new header:

      • \"Header name\": Authorization
      • \"Header value\": Bearer [JWT token] (make sure that the JWT token has no spaces, as this would not work)

      Press ESC to close the HTTP header overlay and now we are ready to send the first GraphQL request!

      Enter this in the left panel

      Running a query
      query allProjects{\nallProjects {\nname\n}\n}\n

      And press the \u25b6\ufe0f button (or press CTRL+ENTER).

      If all went well, your first GraphQL response should appear shortly afterwards in the right pane.

      "},{"location":"interacting/graphql-queries/#creating-the-first-project","title":"Creating the first project","text":"

      Let's create the first project for Lagoon to deploy! For this we'll use the queries from the GraphQL query template in create-project.gql.

      For each of the queries (the blocks starting with mutation {), fill in all of the empty fields marked by TODO comments and run the queries in GraphiQL.app. This will create one of each of the following two objects:

      1. kubernetes : The Kubernetes (or Openshift) cluster to which Lagoon should deploy. Lagoon is not only capable of deploying to its own Kubernetes cluster, but also to any Kubernetes cluster anywhere in the world.
      2. project : The Lagoon project to be deployed, which is a Git repository with a .lagoon.yml configuration file committed in the root.
      "},{"location":"interacting/graphql-queries/#allowing-access-to-the-project","title":"Allowing access to the project","text":"

      In Lagoon, each developer authenticates via their SSH key(s). This determines their access to:

      1. The Lagoon API, where they can see and edit projects they have access to.
      2. Remote shell access to containers that are running in projects they have access to.
      3. The Lagoon logging system, where a developer can find request logs, container logs, Lagoon logs and more.

      To allow access to the project, we first need to add a new group to the API:

      Add group to API
      mutation {\naddGroup (\ninput: {\n# TODO: Enter the name for your new group.\nname: \"\"\n}\n)     {\nid\nname\n}\n}\n

      Then we need to add a new user to the API:

      Add new user to API
      mutation {\naddUser(\ninput: {\nemail: \"michael.schmid@example.com\"\nfirstName: \"Michael\"\nlastName: \"Schmid\"\ncomment: \"CTO\"\n}\n) {\n# TODO: Make a note of the user ID that is returned.\nid\n}\n}\n

      Then we can add an SSH public key for the user to the API:

      Add SSH public key for the user to API
      mutation {\naddSshKey(\ninput: {\n# TODO: Fill in the name field.\n# This is a non-unique identifier for the SSH key.\nname: \"\"\n# TODO: Fill in the keyValue field.\n# This is the actual SSH public key (without the type at the beginning and without the comment at the end, ex. `AAAAB3NzaC1yc2EAAAADAQ...3QjzIOtdQERGZuMsi0p`).\nkeyValue: \"\"\n# TODO: Fill in the keyType field.\n# Valid values are either SSH_RSA, SSH_ED25519, ECDSA_SHA2_NISTP256/384/521\nkeyType: SSH_RSA\nuser: {\n# TODO: Fill in the userId field.\n# This is the user ID that we noted from the addUser query.\nid:\"0\",\nemail:\"michael.schmid@example.com\"\n}\n}\n) {\nid\n}\n}\n

      After we add the key, we need to add the user to a group:

      Add user to group
      mutation {\naddUserToGroup (\ninput: {\nuser: {\n#TODO: Enter the email address of the user.\nemail: \"\"\n}\ngroup: {\n#TODO: Enter the name of the group you want to add the user to.\nname: \"\"\n}\n#TODO: Enter the role of the user.\nrole: OWNER\n}\n) {\nid\nname\n}\n}\n

      After running one or more of these kinds of queries, the user will be granted access to create tokens via SSH, access containers and more.

      "},{"location":"interacting/graphql-queries/#adding-notifications-to-the-project","title":"Adding notifications to the project","text":"

      If you want to know what is going on during a deployment, we suggest configuring notifications for your project, which provide:

      • Push notifications
      • Build start information
      • Build success or failure messages
      • And many more!

      As notifications can be quite different in terms of the information they need, each notification type has its own mutation.

      As with users, we first add the notification:

      Add notification
      mutation {\naddNotificationSlack(\ninput: {\n# TODO: Fill in the name field.\n# This is your own identifier for the notification.\nname: \"\"\n# TODO: Fill in the channel field.\n# This is the channel for the message to be sent to.\nchannel: \"\"\n# TODO: Fill in the webhook field.\n# This is the URL of the webhook where messages should be sent, this is usually provided by the chat system to you.\nwebhook: \"\"\n}\n) {\nid\n}\n}\n

      After the notification is created, we can now assign it to our project:

      Assign notification to project
      mutation {\naddNotificationToProject(\ninput: {\nnotificationType: SLACK\n# TODO: Fill in the project field.\n# This is the project name.\nproject: \"\"\n# TODO: Fill in the notification field.\n# This is the notification name.\nnotificationName: \"\"\n# TODO: OPTIONAL\n# The kind notification class you're interested in defaults to DEPLOYMENT\ncontentType: DEPLOYMENT/PROBLEM\n# TODO: OPTIONAL\n# Related to contentType PROBLEM, we can set the threshold for the kinds of problems\n# we'd like to be notified about\nnotificationSeverityThreshold \"NONE/UNKNOWN/NEGLIGIBLE/LOW/MEDIUM/HIGH/CRITICAL\n}\n) {\nid\n}\n}\n

      Now for every deployment you will receive messages in your defined channel.

      "},{"location":"interacting/graphql-queries/#example-graphql-queries","title":"Example GraphQL queries","text":""},{"location":"interacting/graphql-queries/#adding-a-new-kubernetes-target","title":"Adding a new Kubernetes target","text":"

      Note

      In Lagoon, both addKubernetes and addOpenshift can be used for both Kubernetes and OpenShift targets - either will work interchangeably.

      The cluster to which Lagoon should deploy.

      Add Kubernetes target
      mutation {\naddKubernetes(\ninput: {\n# TODO: Fill in the name field.\n# This is the unique identifier of the cluster.\nname: \"\"\n# TODO: Fill in consoleUrl field.\n# This is the URL of the Kubernetes cluster\nconsoleUrl: \"\"\n# TODO: Fill in the token field.\n# This is the token of the `lagoon` service account created in this cluster (this is the same token that we also used during installation of Lagoon).\ntoken: \"\"\n}\n) {\nname\nid\n}\n}\n
      "},{"location":"interacting/graphql-queries/#adding-a-group-to-a-project","title":"Adding a group to a project","text":"

      This query will add a group to a project. Users of that group will be able to access the project. They will be able to make changes, based on their role in that group.

      Add a group to a project
      mutation {\naddGroupsToProject (\ninput: {\nproject: {\n#TODO: Enter the name of the project.\nname: \"\"\n}\ngroups: {\n#TODO: Enter the name of the group that will be added to the project.\nname: \"\"\n}\n}\n) {\nid\n}\n}\n
      "},{"location":"interacting/graphql-queries/#adding-a-new-project","title":"Adding a new project","text":"

      This query adds a new Lagoon project to be deployed, which is a Git repository with a .lagoon.yml configuration file committed in the root.

      If you omit the privateKey field, a new SSH key for the project will be generated automatically.

      If you would like to reuse a key from another project. you will need to supply the key in the addProject mutation.

      Add a new project
      mutation {\naddProject(\ninput: {\n# TODO: Fill in the name field.\n# This is the project name.\nname: \"\"\n# TODO: Fill in the private key field (replace newlines with '\\n').\n# This is the private key for a project, which is used to access the Git code.\nprivateKey: \"\"\n# TODO: Fill in the Kubernetes field.\n# This is the ID of the Kubernetes or OpenShift to assign to the project.\nkubernetes: 0\n# TODO: Fill in the name field.\n# This is the project name.\ngitUrl: \"\"\n# TODO: Fill in the branches to be deployed.\nbranches: \"\"\n# TODO: Define the production environment.\nproductionEnvironment: \"\"\n}\n) {\nname\nkubernetes {\nname\nid\n}\ngitUrl\nbranches\npullrequests\n}\n}\n
      "},{"location":"interacting/graphql-queries/#list-projects-and-groups","title":"List projects and groups","text":"

      This is a good query to see an overview of all projects, clusters and groups that exist within our Lagoon.

      Get an overview of all projects, clusters, and groups
      query {\nallProjects {\nname\ngitUrl\n}\nallKubernetes {\nname\nid\n}\nallGroups{\nid\nname\nmembers {\n# This will display the users in this group.\nuser {\nid\nfirstName\nlastName\n}\nrole\n}\ngroups {\nid\nname\n}\n}\n}\n
      "},{"location":"interacting/graphql-queries/#single-project","title":"Single project","text":"

      If you want a detailed look at a single project, this query has been proven quite good:

      Take a detailed look at one project
      query {\nprojectByName(\n# TODO: Fill in the project name.\nname: \"\"\n) {\nid\nbranches\ngitUrl\npullrequests\nproductionEnvironment\nnotifications(type: SLACK) {\n... on NotificationSlack {\nname\nchannel\nwebhook\nid\n}\n}\nenvironments {\nname\ndeployType\nenvironmentType\n}\nkubernetes {\nid\n}\n}\n}\n
      "},{"location":"interacting/graphql-queries/#querying-a-project-by-its-git-url","title":"Querying a project by its Git URL","text":"

      Don't remember the name of a project, but know the Git URL? Search no longer, there is a GraphQL query for that:

      Query project by Git URL
      query {\nprojectByGitUrl(gitUrl: \"git@server.com:org/repo.git\") {\nname\n}\n}\n
      "},{"location":"interacting/graphql-queries/#updating-objects","title":"Updating objects","text":"

      The Lagoon GraphQL API can not only display objects and create objects, it also has the capability to update existing objects, using a patch object.

      Update the branches to deploy within a project:

      Update deploy branches.
      mutation {\nupdateProject(\ninput: { id: 109, patch: { branches: \"^(prod|stage|dev|update)$\" } }\n) {\nid\n}\n}\n

      Update the production environment within a project:

      Warning

      This requires a redeploy in order for the changes to be reflected in the containers.

      Update prod environment
       mutation {\nupdateProject(\ninput: { id: 109, patch: { productionEnvironment: \"main\" } }\n) {\nid\n}\n}\n

      You can also combine multiple changes at once:

      Update prod environment and set deploy branches.
      mutation {\nupdateProject(\ninput: {\nid: 109\npatch: {\nproductionEnvironment: \"main\"\nbranches: \"^(prod|stage|dev|update)$\"\n}\n}\n) {\nid\n}\n}\n
      "},{"location":"interacting/graphql-queries/#deleting-environments","title":"Deleting Environments","text":"

      You can also use the Lagoon GraphQL API to delete an environment. You'll need to know the project name and the environment name in order to run the command.

      Delete environment.
      mutation {\ndeleteEnvironment(\ninput: {\n# TODO: Fill in the name field.\n# This is the environment name.\nname:\"\"\n# TODO: Fill in the project field.\n# This is the project name.\nproject:\"\"\nexecute:true\n}\n)\n}\n
      "},{"location":"interacting/graphql-queries/#querying-a-project-to-see-what-groups-and-users-are-assigned","title":"Querying a project to see what groups and users are assigned","text":"

      Want to see what groups and users have access to a project? Want to know what their roles are? Do I have a query for you! Using the query below you can search for a project and display the groups, users, and roles that are assigned to that project.

      Query groups, users, and roles assigned to project
      query search{\nprojectByName(\n#TODO: Enter the name of the project.\nname: \"\"\n) {\nid,\nbranches,\nproductionEnvironment,\npullrequests,\ngitUrl,\nkubernetes {\nid\n},\ngroups{\nid\nname\ngroups {\nid\nname\n}\nmembers {\nrole\nuser {\nid\nemail\n}\n}\n}\n}\n}\n
      "},{"location":"interacting/graphql-queries/#maintaining-project-metadata","title":"Maintaining project metadata","text":"

      Project metadata can be assigned using arbitrary key/value pairs. Projects can then be queried by the associated metadata; for example you may categorize projects by type of software, version number, or any other categorization you may wish to query on later.

      "},{"location":"interacting/graphql-queries/#addupdate-metadata-on-a-project","title":"Add/update metadata on a project","text":"

      Updates to metadata expect a key/value pair. It operates as an UPSERT, meaning if a key already exists the value will be updated, otherwise inserted.

      You may have any number of k/v pairs stored against a project.

      Add a key/value pair to metadata
      mutation {\nupdateProjectMetadata(\ninput: { id: 1,  patch: { key: \"type\", value: \"saas\" } }\n) {\nid\nmetadata\n}\n}\n
      "},{"location":"interacting/graphql-queries/#query-for-projects-by-metadata","title":"Query for projects by metadata","text":"

      Queries may be by key only (e.g return all projects where a specific key exists) or both key and value where both key and value must match.

      All projects that have the version tag:

      Query by metadata
      query projectsByMetadata {\nprojectsByMetadata(metadata: [{key: \"version\"] ) {\nid\nname\n}\n}\n

      All projects that have the version tag, specifically version 8:

      Query by metadata
      query projectsByMetadata {\nprojectsByMetadata(metadata: [{key: \"version\", value: \"8\"] ) {\nid\nname\n}\n}\n
      "},{"location":"interacting/graphql-queries/#removing-metadata-on-a-project","title":"Removing metadata on a project","text":"

      Metadata can be removed on a per-key basis. Other metadata key/value pairs will persist.

      Remove metadata
      mutation {\nremoveProjectMetadataByKey (\ninput: { id: 1,  key: \"version\" }\n) {\nid\nmetadata\n}\n}\n
      "},{"location":"interacting/graphql/","title":"GraphQL","text":""},{"location":"interacting/graphql/#connect-to-graphql-api","title":"Connect to GraphQL API","text":"

      API interactions in Lagoon are done via GraphQL. In order to authenticate to the API, you need a JWT (JSON Web Token), which will authenticate you against the API via your SSH public key.

      To generate this token, use the remote shell via the token command:

      Get token
      ssh -p [PORT] -t lagoon@[HOST] token\n

      example.com connection string:

      Get example.com token
      ssh -p 22 -t lagoon@ssh.example.com token\n

      This will return a long string, which is the JWT token.

      We also need the URL of the API endpoint. Contact your Lagoon administrator for this.

      For example.com this is https://api.example.com/graphql.

      Now we need a GraphQL client! Technically this is just HTTP, but we suggest GraphiQL. It has a nice UI that allows you to write GraphQL requests with autocomplete. Download, install and start it. [GraphiQL App]

      Enter the API endpoint URL. Then click on \"Edit HTTP Headers\" and add a new Header:

      • \"Header name\": Authorization
      • \"Header value\": Bearer [jwt token] (make sure that the JWT token has no spaces, that won't work)

      Close the HTTP Header overlay (press ESC) and now you are ready to make your first GraphQL Request!

      Enter this on the left window:

      Get all projects
      query whatIsThere {\nallProjects {\nid\ngitUrl\nname\nbranches\npullrequests\nproductionEnvironment\nenvironments {\nname\nenvironmentType\n}\n}\n}\n

      And press the \u25b6\ufe0f button (or press CTRL+ENTER).

      If all went well, you should see your first GraphQL response.

      "},{"location":"interacting/graphql/#mutations","title":"Mutations","text":"

      The Lagoon GraphQL API can not only display objects and create objects, but it also has the capability to update existing objects. All of Lagoon's GraphQL uses best practices.

      Info

      Mutation queries in GraphQL modify the data in the data store, and return a value. They can be used to insert, update, and delete data. Mutations are defined as a part of the schema._

      Update the branches to deploy within a project:

      Update deploy branches
      mutation editProjectBranches {\nupdateProject(input:{id:109, patch:{branches:\"^(prod|stage|dev|update)$\"}}) {\nid\n}\n}\n

      Update the production environment within a project:

      Warning

      This requires a redeploy in order for all changes to be reflected in the containers.

      Update production environment
      mutation editProjectProductionEnvironment {\nupdateProject(input:{id:109, patch:{productionEnvironment:\"prod\"}}) {\nid\n}\n}\n

      You can also combine multiple changes into a single query:

      Multiple changes
      mutation editProjectProductionEnvironmentAndBranches {\nupdateProject(input:{id:109, patch:{productionEnvironment:\"prod\", branches:\"^(prod|stage|dev|update)$\"}}) {\nid\n}\n}\n
      "},{"location":"interacting/lagoon-ui/","title":"The Lagoon UI","text":"

      The Lagoon UI is your first point of call with Lagoon. If you have any issues with access, please contact your Lagoon administrator.

      The UI allows you to complete a variety of tasks with your projects and organizations. Learn more about organizations here. and what you can do with organizations in the UI here.

      "},{"location":"interacting/organizations/","title":"Working with Organizations in the UI","text":"

      Here are some step-by-step guides to help walk you through useful organization-related tasks in the Lagoon UI, working with groups, projects, users, and roles.

      "},{"location":"interacting/organizations/#log-in-and-find-organizations","title":"Log in and find organizations","text":""},{"location":"interacting/organizations/#view-who-has-access-to-a-project","title":"View who has access to a project","text":""},{"location":"interacting/organizations/#add-user-to-group-with-role","title":"Add User to Group with Role","text":""},{"location":"interacting/organizations/#remove-a-user-from-a-group","title":"Remove a User from a Group","text":""},{"location":"interacting/organizations/#change-a-user-role","title":"Change a User Role","text":""},{"location":"interacting/organizations/#add-an-email-notification-to-a-project","title":"Add an Email Notification to a Project","text":""},{"location":"interacting/organizations/#add-a-group-to-a-project","title":"Add a Group to a Project","text":""},{"location":"interacting/organizations/#add-a-user-with-organization-owner-privileges","title":"Add a User with Organization Owner Privileges","text":""},{"location":"interacting/organizations/#create-a-new-project-add-a-group-and-create-a-production-environment","title":"Create a new Project, add a Group, and create a Production Environment","text":""},{"location":"interacting/rbac/","title":"Role-Based Access Control (RBAC)","text":"

      Version 1.0 of Lagoon changed how you access your projects! Access to your project is handled via groups, with projects assigned to one or multiple groups. Users are added to groups with a role. Groups can also be nested within sub-groups. This change provides a lot more flexibility and the possibility to recreate real world teams within Lagoon.

      "},{"location":"interacting/rbac/#roles","title":"Roles","text":"

      When assigning a user to a group, you need to provide a group role for that user inside this group. Each one of the 5 current existing group roles gives the user different permissions to the group and projects assigned to the group. Here are the platform-wide roles and the group roles that are currently found in Lagoon:

      "},{"location":"interacting/rbac/#platform-wide-roles","title":"Platform-Wide Roles","text":"

      Platform-wide roles are typically assigned to people that manage Lagoon.

      "},{"location":"interacting/rbac/#platform-wide-owner","title":"Platform-Wide Owner","text":"

      The platform-wide owner has access to everything across all of Lagoon.

      "},{"location":"interacting/rbac/#platform-wide-viewer","title":"Platform-Wide Viewer","text":"

      Similar to the platform-wide owner, except this role can only view.

      "},{"location":"interacting/rbac/#platform-wide-organization-owner","title":"Platform-Wide Organization Owner","text":"

      The platform-wide organization owner role provides permission to create, update, delete, and all other permissions related to changes withing an organization, including existing organizations. It does not grant full platform-wide owner access, this means the ability to access and deploy projects still needs to be granted via a group within an organization.

      This role also has the ability to view all the deploytargets (kubernetes clusters) assigned to Lagoon so that they can be assigned to an organization when it is being created.

      NOTE

      By default this role does not allow the creation of environments or the ability to trigger deployments within a project within an organization. They can add themselves to a group with a role that does grant them this permission.

      "},{"location":"interacting/rbac/#organization-roles","title":"Organization Roles","text":""},{"location":"interacting/rbac/#organization-owner","title":"Organization Owner","text":"

      The organization owner role allows for the creation and deletion of projects, groups, and notifications within their organization.

      They can add users to groups, change the roles of users within those groups, and associate projects with groups. This gives the organization owner the ability to clearly see who has access, and quickly add and remove users.

      Organization owners now also have the ability to create Slack or other notifications directly, and associate those notifications with a project without requiring help from your Lagoon administrator.

      Organization owners also have the ability to add and remove other owners, admins, or viewers to manage their organization.

      NOTE

      By default this role does not allow organization owners to create environments or trigger deployments within a project. They can add themselves to a group with a role that does grant them this permission. When creating a project, an organization owner can opt to be added as an owner of the project default group.

      "},{"location":"interacting/rbac/#organization-admin","title":"Organization Admin","text":"

      The organization admin role is the same as organization owner, except that this role cannot make changes to the owners, admins, or viewers of the organization.

      "},{"location":"interacting/rbac/#organization-viewer","title":"Organization Viewer","text":"

      The organization view has access to view the projects, group and user access, and notifications within their organization.

      "},{"location":"interacting/rbac/#group-roles","title":"Group Roles","text":""},{"location":"interacting/rbac/#owner","title":"Owner","text":"

      The owner role can do everything within a group and its associated projects. They can add and manage users of a group. Be careful with this role, as it can delete projects and production environments!

      IMPORTANT

      If a user has this role in a group that is within the scope of an organization, this role's ability to manage that group's users is removed. Only organization owners or admins can manage groups and their users.

      "},{"location":"interacting/rbac/#maintainer","title":"Maintainer","text":"

      The maintainer role can do everything within a group and its associated projects except deleting the project itself or the production environment. They can add and manage users of a group.

      "},{"location":"interacting/rbac/#developer","title":"Developer","text":"

      The developer role has SSH access only to development environments. This role cannot access, update or delete the production environment. They can run a sync task with the production environment as a source, but not as the destination. Cannot manage users of a group.

      IMPORTANT

      This role does not prevent the deployment of the production environment as a deployment is triggered via a Git push! You need to make sure that your Git server prevents these users from pushing into the branch defined as production environment.

      "},{"location":"interacting/rbac/#reporter","title":"Reporter","text":"

      The reporter role has view access only. They cannot access any environments via SSH or make modifications to them. They can run cache-clear tasks. This role is mostly used for stakeholders to have access to Lagoon UI and logging.

      "},{"location":"interacting/rbac/#guest","title":"Guest","text":"

      The guest role has the same privileges as the reporter role listed above.

      Here is a table that lists the roles and the access they have:

      "},{"location":"interacting/rbac/#lagoon-100-rbac-permission-matrix","title":"Lagoon 1.0.0 RBAC Permission Matrix","text":"SelfGuestDeveloperMaintainerOwnerOrganization ViewerOrganization OwnerPlatform-Wide OwnerPlatform-Wide Admin Name Resource Scope Attributes addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID Name Resource Scope Attributes getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add Name Resource Scope Attributes addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID userCanSshToEnvironment environment ssh:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add Name Resource Scope Attributes deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID userCanSshToEnvironment environment ssh:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add Name Resource Scope Attributes deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add Name Resource Scope Attributes getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId Name Resource Scope Attributes getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId Name Resource Scope Attributes addOrUpdateEnvironmentStorage environment storage addNotificationSlack notification add updateNotificationSlack notification update deleteNotificationSlack notification delete addKubernetes kubernetes add updateKubernetes kubernetes update deleteKubernetes kubernetes delete getAllOpenshifts openshift viewAll getAllProjects project viewAll addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID allEnvironments environment viewAll getEnvironmentStorageMonthByEnvironmentId environment storage getEnvironmentHoursMonthByEnvironmentId environment storage getEnvironmentHitsMonthByEnvironmentId environment storage addOrUpdateEnvironmentStorage environment storage addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add getAllOrganizations organization viewAll addOrganization add viewAll updateOrganization update viewAll deleteOrganization delete viewAll getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId Name Resource Scope Attributes getEnvironmentStorageMonthByEnvironmentId environment storage getEnvironmentHoursMonthByEnvironmentId environment storage getEnvironmentHitsMonthByEnvironmentId environment storage getAllOpenshifts openshift viewAll addOrUpdateEnvironmentStorage environment storage addNotificationSlack notification add updateNotificationSlack notification update deleteNotificationSlack notification delete addKubernetes kubernetes add updateKubernetes kubernetes update deleteKubernetes kubernetes delete getAllProjects project viewAll addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add getAllOrganizations organization viewAll addOrganization add viewAll updateOrganization update viewAll deleteOrganization delete viewAll getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId"},{"location":"interacting/ssh/","title":"SSH","text":"

      Lagoon allows you to connect to your running containers via SSH. The containers themselves don't actually have an SSH server installed, but instead you connect via SSH to Lagoon, which then itself creates a remote shell connection via the Kubernetes API for you.

      "},{"location":"interacting/ssh/#ensure-you-are-set-up-for-ssh-access","title":"Ensure you are set up for SSH access","text":""},{"location":"interacting/ssh/#generating-an-ssh-key","title":"Generating an SSH Key","text":"

      It is recommended to generate a separate SSH key for each device as opposed to sharing the same key between multiple computers. Instructions for generating an SSH key on various systems can be found below:

      "},{"location":"interacting/ssh/#osx-mac","title":"OSX (Mac)","text":"

      Mac

      "},{"location":"interacting/ssh/#linux-ubuntu","title":"Linux (Ubuntu)","text":"

      Linux

      "},{"location":"interacting/ssh/#windows","title":"Windows","text":"

      Windows

      "},{"location":"interacting/ssh/#ssh-agent","title":"SSH Agent","text":""},{"location":"interacting/ssh/#osx-mac_1","title":"OSX (Mac)","text":"

      OSX does not have its SSH agent configured to load configured SSH keys at startup, which can cause some headaches. You can find a handy guide to configuring this capability here: https://www.backarapper.com/add-ssh-keys-to-ssh-agent-on-startup-in-macos/

      "},{"location":"interacting/ssh/#linux","title":"Linux","text":"

      Linux distributions vary in how they use the ssh-agent . You can find a general guide here: https://www.ssh.com/academy/ssh/agent

      "},{"location":"interacting/ssh/#windows_1","title":"Windows","text":"

      SSH key support in Windows has improved markedly as of recently, and is now supported natively. A handy guide to configuring the Windows 10 SSH agent can be found here: https://richardballard.co.uk/ssh-keys-on-windows-10/

      "},{"location":"interacting/ssh/#uploading-ssh-keys","title":"Uploading SSH Keys","text":""},{"location":"interacting/ssh/#via-the-ui","title":"Via the UI","text":"

      You can upload your SSH key(s) through the UI. Log in as you normally would.

      In the upper right hand corner, click on Settings:

      You will then see a page where you can upload your SSH key(s), and it will show any uploaded keys. Paste your key into the text box, give it a name, and click \"Add.\" That's it! Add additional keys as needed.

      "},{"location":"interacting/ssh/#via-command-line","title":"Via Command Line","text":"

      A general example of using the Lagoon API via GraphQL to add an SSH key to a user can be found here

      "},{"location":"interacting/ssh/#ssh-into-a-pod","title":"SSH into a pod","text":"

      Note

      The easiest way to SSH into a pod is to use the Lagoon CLI.

      The instructions below only apply if you want to use the regular ssh client, or other advanced use cases.

      "},{"location":"interacting/ssh/#connection","title":"Connection","text":"

      Connecting is straightforward and follows the following pattern:

      SSH
      ssh [PROJECT-ENVIRONMENT-NAME]@[HOST]\n
      • HOST - The remote shell SSH endpoint host (for example ssh.example.com).
      • PROJECT-ENVIRONMENT-NAME - The environment you want to connect to. This is most commonly in the pattern PROJECTNAME-ENVIRONMENT.

      As an example:

      SSH example
      ssh drupal-example-main@ssh.example.com\n

      This will connect you to a cli pod in the environment main of the project drupal-example.

      "},{"location":"interacting/ssh/#podservice-container-definition","title":"Pod/Service, Container Definition","text":"

      By default the remote shell will try to connect you to the first container in the pod of the service type cli. If you would like to connect to another service you can specify it using a service=[SERVICE-NAME] argument to the SSH command.

      Note

      When you run the ssh client command with just a USER@HOST argument, it will assume that you want an interactive session and allocate a pty. This give you a regular shell environment where you can enter commands at a prompt, send interrupts using ^C etc.

      However, when you provide an argument to the ssh client command, it assumes that you want a non-interactive session (e.g. just run a command and return) and will not allocate a pty.

      So when providing an argument such as service=[SERVICE-NAME], if you want an interactive shell session you need to tell the ssh client to not \"auto-detect\" if it needs a pty and just allocate one anyway using the -t flag.

      SSH to another service example
      ssh -t [PROJECT-ENVIRONMENT-NAME]@[HOST] service=[SERVICE-NAME]\n

      If your pod/service contains multiple containers, Lagoon will connect you to the first defined container. You can also define the specific container to connect to via:

      Define container
      ssh -t [PROJECT-ENVIRONMENT-NAME]@[HOST] service=[SERVICE-NAME] container=[CONTAINER-NAME]\n

      For example, to connect to the php container within the nginx pod:

      SSH to php container
      ssh -t drupal-example-main@ssh.example.com service=nginx container=php\n
      "},{"location":"interacting/ssh/#copying-files","title":"Copying files","text":"

      The common case of copying a file into your cli pod can be achieved with the usual SSH-compatible tools.

      "},{"location":"interacting/ssh/#scp","title":"scp","text":"Copy file with scp
      scp [local_path] [project_name]-[environment_name]@ssh.example.com:[remote_path]\n
      "},{"location":"interacting/ssh/#rsync","title":"rsync","text":"Copy files with rsync
      rsync --rsh=ssh [local_path] [project_name]-[environment_name]@ssh.example.com:[remote_path]\n
      "},{"location":"interacting/ssh/#tar","title":"tar","text":"Bash
      ssh [project_name]-[environment_name]@ssh.example.com tar -zcf - [remote_path] | tar -zxf - -C /tmp/\n
      "},{"location":"interacting/ssh/#specifying-non-cli-podservice","title":"Specifying non-CLI pod/service","text":"

      In the rare case that you need to specify a non-CLI service you can specify the service=... and/or container=... arguments in the copy command.

      Piping tar through the ssh connection is the simplest method, and can be used to copy a file or directory using the usual tar flags:

      Bash
      ssh [project_name]-[environment_name]@ssh.example.com service=solr tar -zcf - [remote_path] | tar -zxf - -C /tmp/\n

      You can also use rsync with a wrapper script to reorder the arguments to ssh in the manner required by Lagoon's SSH service:

      Bash
      #!/usr/bin/env sh\nsvc=$1 user=$3 host=$4\nshift 4\nexec ssh -l \"$user\" \"$host\" \"$svc\" \"$@\"\n

      Put that in an executable shell script rsh.sh and specify the service=... in the rsync command:

      rsync to non-CLI pod
      rsync --rsh=\"/path/to/rsh.sh service=cli\" /tmp/foo [project_name]-[environment_name]@ssh.example.com:/tmp/foo\n

      The script could also be adjusted to also handle a container=... argument.

      "},{"location":"lagoonizing/","title":"Lagoonizing Your Existing Site","text":"

      Lagoonizing, or getting your existing site ready for the Lagoon platform, isn't generally difficult (depending on your site and setup), but does have a handful of steps. We've put together a stepo-by-step guide to make this process easier for you.

      "},{"location":"lagoonizing/#requirements","title":"Requirements","text":"

      Make sure your system meets the requirements for working with Lagoon locally.

      "},{"location":"lagoonizing/#local-development-environment","title":"Local Development Environment","text":"

      Set up your local development environment. You can choose between Pygmy and Lando.

      "},{"location":"lagoonizing/#command-line-and-git","title":"Command Line and Git","text":"

      You'll need to interact with Lagoon via the command line, and you'll need Git as well, so make sure they're ready to go.

      "},{"location":"lagoonizing/#command-line","title":"Command line","text":"

      You\u2019ll need to use a command line terminal for some tasks. Whatever you want to use is fine, including your operating system default tool. Here are a few options:

      • iTerm2 (Mac)
      • PowerShell (Windows)
      • Fish (Mac, Windows, Linux)
      • Tabby (Mac, Windows, Linux)
      "},{"location":"lagoonizing/#install-git","title":"Install Git","text":"

      If you don\u2019t have one already, you\u2019ll need a Git client of some kind. Command line, GUI, whatever works for you (our examples will use the command line, FYI). Here are a few options:

      • Installing Git (Mac, Windows, Linux)
      • SourceTree (Mac, Windows)
      • GitHub Desktop (Mac, Windows)
      • GitKraken (Mac, Windows, Linux - free for public repositories)
      "},{"location":"lagoonizing/#what-your-lagoon-administrator-needs","title":"What your Lagoon administrator Needs","text":"

      The person setting up your Lagoon, usually your Lagoon administrator will need some information, which is detailed here.

      "},{"location":"lagoonizing/#configure-webhooks","title":"Configure Webhooks","text":"

      Next, you'll need to configure webhooks for your Git respository. You can find those instructions here.

      "},{"location":"lagoonizing/#docker-composeyml","title":"docker-compose.yml","text":"

      The docker-compose.yml file is used by Lagoon to:

      • Learn which services/containers should be deployed.
      • Define how the images for the containers are built.
      • Define additional configurations like persistent volumes.

      You can read more about it in our docker-compose.yml documentation.

      This is the first of two files we\u2019ll create and set up to get your site ready for Lagoon.

      Docker-compose (the tool) is very strict in validating the content of the YAML file, so we can only do configuration within labels of a service definition.

      Warning

      Lagoon only reads the labels, service names, image names and build definitions from a docker-compose.yml file. Definitions like: ports, environment variables, volumes, networks, links, users, etc. are IGNORED. This is intentional, as the docker-compose file is there to define your local environment configuration. Lagoon learns from the lagoon.type the type of service you are deploying and from that knows about ports, networks and any additional configuration that this service might need.

      Let\u2019s walk through setting up some basic services. In this example, we\u2019ll set up NGINX, PHP, and MariaDB, which you\u2019ll need for many systems like Drupal, Laravel, and other content management systems.

      Here is a straightforward example of a docker-compose.yml file for Drupal:

      docker-compose.yml
      version: '2.3'\nx-lagoon-project:\n# Lagoon project name (leave `&lagoon-project` when you edit this)\n&lagoon-project drupal-example\nx-volumes:\n&default-volumes\n# Define all volumes you would like to have real-time mounted into the docker containers\nvolumes:\n- .:/app:delegated\nx-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# Route that should be used locally, if you are using pygmy, this route *must* end with .docker.amazee.io\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n# Uncomment if you would like to have the system behave like in production\n#LAGOON_ENVIRONMENT_TYPE: production\n# Uncomment to enable xdebug and then restart via `docker compose up -d`\n#XDEBUG_ENABLE: \"true\"\nx-user:\n&default-user\n# The default user under which the containers should run. Change this if you are on linux and run with a user other than id `1000`.\nuser: '1000'\nservices:\nnginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.name: nginx\nlagoon.persistent: /app/web/sites/default/files/\nmariadb:\nimage: uselagoon/mariadb-10.11-drupal\nlabels:\nlagoon.type: mariadb\n

      Now let\u2019s break down what each of these options mean.

      "},{"location":"lagoonizing/#basic-settings","title":"Basic Settings","text":"

      x-lagoon-project: This is the machine name of your project, define it here. We\u2019ll use \u201cdrupal-example.\u201d

      x-volumes: This tells Lagoon what to mount into the container. Your web application lives in /app, but you can add or change this if needed.

      x-environment:

      • Here you can set your local development URL. If you are using Pygmy, it must end with .docker.amazee.io.
      • If you want to exactly mimic the production environment, uncomment LAGOON_ENVIRONMENT_TYPE: production.
      • If you want to enable x-debug, uncomment DEBUG_ENABLE: \"true\".

      x-user: You are unlikely to need to change this, unless you are on Linux and would like to run with a user other than 1000.

      "},{"location":"lagoonizing/#services","title":"services","text":"

      This defines all the services you want to deploy. Unfortunately, docker-compose calls them services, even though they are actually defining the containers. Going forward we'll be calling them services, and throughout this documentation.

      The name of the service (nginx, php, and mariadb in the example above) is used by Lagoon as the name of the Kubernetes pod (yet another term - again, we'll be calling them services) that is generated, plus any additional Kubernetes objects that are created based on the defined lagoon.type. This could be things like services, routes, persistent storage, etc.

      "},{"location":"lagoonizing/#docker-images","title":"Docker Images","text":"

      If you want Lagoon to build a Dockerfile for your service during every deployment, you can define it here:

      build

      • context
        • The build context path that should be passed on into the Docker build command.
      • dockerfile:
        • Location and name of the Dockerfile that should be built.

      Warning

      Lagoon does NOT support the short version of build: <Dockerfile> and will fail if it finds such a definition.

      image

      • If you don't need to build a Dockerfile and just want to use an existing Dockerfile, define it via image.

      In our example, we\u2019re giving the path of the current directory. NGINX is set to build nginx.dockerfile, and PHP, php.dockerfile. MariaDB is using an existing image at uselagoon/mariadb-10.11-drupal. You can learn more about our Docker images here.

      "},{"location":"lagoonizing/#types","title":"Types","text":"

      Lagoon needs to know what type of service you are deploying in order to configure the correct Kubernetes objects.

      This is done via the lagoon.type label. There are many different types to choose from. Read our public documentation about Service Types to see all of them and their additional configuration possibilities.

      You might have noticed that in our example, both the PHP and NGINX services have their type defined as nginx-php-persistent. That\u2019s because they are what\u2019s called multi-container pods.

      "},{"location":"lagoonizing/#multi-container-pods","title":"Multi-Container Pods","text":"

      Kubernetes doesn\u2019t deploy plain containers. Instead, it deploys pods, with each one or more containers. Usually Lagoon creates a single pod with a container inside for each defined docker-compose service. For some cases, we need to put two containers inside a single pod, as these containers are so dependent on each other that they should always stay together. An example for such a situation is the PHP and NGINX containers that both contain PHP code of a web application like Drupal, as we\u2019ve done above.

      For these cases, it is possible to tell Lagoon which services should stay together. This is done in the following way (remember that we are calling containers services):

      1. Define both services with a lagoon.type that expects two services (in the example this is nginx-php-persistent defined on the NGINX and PHP services).
      2. Link the second service with the first one, setting the label lagoon.name of the second one to match the first one. (in the example this is done by setting lagoon.name: nginx).

      This will cause Lagoon to realize that the nginx and php services are combined in a pod that will be called nginx.

      Lagoon still needs to understand which of the two services is the actual individual service type (nginx and php in this case). It does this by searching for the service names of the matching service types. nginx-php-persistent expects one service with the name nginx and one with php in the docker-compose.yml.

      If for any reason you want to use different names for the services, or you need more than one pod with the type nginx-php-persistent, there is an additional label lagoon.deployment.servicetype, which can be used to define the actual service type.

      Here\u2019s an example showing how multi-container pods can be set up in more detail:

      docker-compose.yml
      nginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # If this isn't present, Lagoon will use the container name, which in this case is nginx.\nlagoon.deployment.servicetype: nginx\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # We want this service to be part of the nginx pod in Lagoon.\nlagoon.deployment.servicetype: php\n

      There is quite a bit more you can do in docker-compose.yml, but setting up your services is the most important part. Check out our documentation on docker-compose.yml to learn what else you can do.

      "},{"location":"lagoonizing/#lagoonyml","title":".lagoon.yml","text":"

      The .lagoon.yml file is the central file for setting up your project. It contains configuration in order to do the following:

      • Define routes for accessing your sites.
      • Define pre-rollout tasks.
      • Define post-rollout tasks.
      • Set up SSL certificates.
      • Add cron jobs for environments.

      The .lagoon.yml file must be created and placed at the root of your Git repository.

      Here is an example .lagoon.yml file showing a variety of configuration options for a Drupal site that we\u2019ll go over:

      .lagoon.yml
      docker-compose-yaml: docker-compose.yml\nenvironment_variables:\ngit_sha: 'true'\ntasks:\npre-rollout:\n- run:\nname: drush sql-dump\ncommand: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz\nservice: cli\npost-rollout:\n- run:\nname: drush cim\ncommand: drush -y cim\nservice: cli\nshell: bash\n- run:\nname: drush cr\ncommand: drush -y cr\nservice: cli\nroutes:\ninsecure: Redirect\nenvironments:\nmain:\nroutes:\n- nginx:\n- example.com\n- example.net\n- \"www.example.com\":\ntls-acme: 'true'\ninsecure: Redirect\nhsts: max-age=31536000\n- \"example.ch\":\nAnnotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nstaging:\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\n
      "},{"location":"lagoonizing/#general-settings","title":"General Settings","text":""},{"location":"lagoonizing/#docker-compose-yaml","title":"docker-compose-yaml","text":"

      This file tells the build script which docker-compose YAML file should be used, in order to learn which services and containers should be deployed. This defaults to docker-compose.yml, but could be used for a specific Lagoon docker-compose YAML file if you need something like that.

      "},{"location":"lagoonizing/#environment_variablesgit_sha","title":"environment_variables.git_sha","text":"

      This setting allows you to enable injecting the deployed Git SHA into your project as an environment variable. By default this is disabled. Setting the value to true sets the SHA as the environment variable LAGOON_GIT_SHA.

      "},{"location":"lagoonizing/#tasks","title":"Tasks","text":"

      There are different type of tasks you can define, and they differ when exactly they are executed in a build flow:

      "},{"location":"lagoonizing/#pre-rollout-tasks-pre_rolloutirun","title":"Pre-Rollout Tasks - pre_rollout.[i].run","text":"

      The tasks defined as pre_rollout tasks will run against your project after the new images have been built successfully, and before the project gets altered in any way. This feature enables you, for example, to create a database dump before the rollout is running, as in our example above. This will make it easier to roll back in case of an issue with the rollout.

      "},{"location":"lagoonizing/#post-rollout-tasks-post_rolloutirun","title":"Post-Rollout Tasks - post_rollout.[i].run","text":"

      Here you can specify tasks which need to run against your project, after:

      • All images have been successfully built.
      • All containers are updated with the new images.
      • All running containers have passed their readiness checks.

      Common uses for post_rollout tasks include running drush updb, drush cim, or clearing various caches. In the above example, we run drush cim and drush cr.

      name

      • The name is an arbitrary label for making it easier to identify each task in the logs.

      command

      • Here you specify what command should run. These are run in the WORKDIR of each container. For Lagoon images this is /app, keep this in mind if you need to cd into a specific location to run your task.

      service

      • The service in which to run the task. If following our drupal-example, this will be the CLI container, as it has all your site code, files, and a connection to the database. Typically you do not need to change this.

      shell

      Which shell should be used to run the task. By default sh is used, but if the container also has other shells (like bash), you can define it here. This is useful if you want to run some small if/else bash scripts within the post-rollouts. (see the example above for how to write a script with multiple lines).

      "},{"location":"lagoonizing/#routes","title":"Routes","text":""},{"location":"lagoonizing/#routesautogenerateenabled","title":"routes.autogenerate.enabled","text":"

      This allows for the disabling of the automatically created routes altogether. This does NOT disable the custom routes per environment, see below for more on that.

      "},{"location":"lagoonizing/#routesautogenerateinsecure","title":"routes.autogenerate.insecure","text":"

      This allows you to define the behavior of the automatically created routes. This does NOT configure the custom routes per environment, see below for more on that. This is the option we\u2019re using in the example above, with insecure: Redirect.

      The following options are allowed:

      Allow

      • Sets up routes for both HTTP and HTTPS (this is the default).

      Redirect

      • Will redirect any HTTP requests to HTTPS.

      None

      • A route for HTTP will not be created, and no redirect.
      "},{"location":"lagoonizing/#environments","title":"Environments","text":"

      Environment names match your deployed branches or pull requests. This allows each environment to have a different configuration. In this example, we have the environments main and staging.

      "},{"location":"lagoonizing/#environmentsnameroutes","title":"environments.[name].routes","text":"

      In the route section, we identify the domain names to which the environment will respond. It is typical to only have an environment with routes specified for your production environment. All environments receive a generated route, but sometimes there is a need for a non-production environment to have its own domain name. You can specify it here, and then add that domain with your DNS provider as a CNAME to the generated route name (these routes publish in deploy messages).

      The first element after the environment is the target service, NGINX in our example. This is how we identify which service incoming requests will be sent to.

      The simplest route is the example.com example in our sample .lagoon.yml above - you can see it has no additional configuration. This will assume that you want a Let's Encrypt certificate for your route and no redirect from HTTPS to HTTP.

      "},{"location":"lagoonizing/#annotations","title":"Annotations","text":"

      Info

      Route/Ingress annotations are only supported by projects that deploy into clusters that run nginx-ingress controllers! Check with your Lagoon administrator if this is supported.

      Annotations can be a YAML map of annotations supported by the nginx-ingress controller, this is specifically useful for easy redirects:

      In this example any requests to example.ch will be redirected to https://www.example.ch with keeping folders or query parameters intact:

      (example.com/folder?query -> https://www.example.ch/folder?query)

      .lagoon.yml example
              - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\n

      You can of course also redirect to any other URL not hosted on Lagoon. This will direct requests to example.de to https://www.google.com:

      .lagoon.yml example
              - \"example.de\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com\n
      "},{"location":"lagoonizing/#ssl-configuration-tls-acme","title":"SSL Configuration - tls-acme","text":"

      tls-acme : \u2018true\u2019

      • Tells Lagoon to issue a Let's Encrypt certificate for that route. This is the default.
      • If you don't want a Let's Encrypt, set this to tls-acme: \u2018false\u2019.

      insecure

      • Can be set to None, Allow or Redirect.
      • Allow simply sets up both routes for HTTP and HTTPS (this is the default).
      • Redirect will redirect any HTTP requests to HTTPS.

      None

      • Will mean a route for HTTP will not be created, and no redirect will take place.

      Hsts

      • Can be set to a value of max-age=31536000;includeSubDomains;preload.
      • Ensure there are no spaces and no other parameters included.
      • Only the max-age parameter is required. The required max-age parameter indicates the length of time, in seconds, the HSTS policy is in effect for.

      Info

      If you plan to switch from a SSL certificate signed by a Certificate Authority (CA) to a Let's Encrypt certificate, it's best to get in touch with your Lagoon administrator to oversee the transition.

      "},{"location":"lagoonizing/#environmentsnametypes","title":"environments.[name].types","text":"

      The Lagoon build process checks the lagoon.type label from the docker-compose.yml file in order to learn what type of service should be deployed (read more about them in the documentation of docker-compose.yml).

      Sometimes you might want to override the type just for a single environment, and not for all of them.

      "},{"location":"lagoonizing/#service-name-service-type","title":"`service-name: service-type","text":"
      • service-name`` is the name of the service fromdocker-compose.yml` you would like to override.
      • service-type the type of the service you would like to use in your override.

      For example, if you want a MariaDB-Galera high availability database for your production environment called main - this is what we\u2019re doing in our example file:

      .lagoon.yml example
      environments:\nmain:\ntypes:\nmariadb: mariadb-galera\n
      "},{"location":"lagoonizing/#environmentsnametemplates","title":"environments.[name].templates","text":"

      The Lagoon build process checks the lagoon.template label from the docker-compose.yml file in order to check if the service needs a custom template file (read more about them in the documentation of docker-compose.yml).

      Sometimes you might want to override the template just for a single environment, and not for all of them:

      "},{"location":"lagoonizing/#service-name-template-file","title":"service-name: template-file","text":"
      • service-name is the name of the service from docker-compose.yml you would like to override.
      • template-file is the path and name of the template to use for this service in this environment.
      .lagoon.yml example
      environments:\nmain:\ntemplates:\nmariadb: mariadb.main.deployment.yml\n
      "},{"location":"lagoonizing/#environmentsnamerollouts","title":"environments.[name].rollouts","text":"

      The Lagoon build process checks the lagoon.rollout label from the docker-compose.yml file in order to check if the service needs a special rollout type (read more about them in the documentation of docker-compose.yml).

      Sometimes you might want to override the rollout type just for a single environment, especially if you also overwrote the template type for the environment:

      "},{"location":"lagoonizing/#service-name-rollout-type","title":"service-name: rollout-type","text":"
      • service-name is the name of the service from docker-compose.yml you would like to override.
      • rollout-type is the type of rollout. See the documentation of docker-compose.yml for possible values.
      .lagoon.yml example
      environments:\nmain:\nrollouts:\nmariadb: statefulset\n
      "},{"location":"lagoonizing/#cron-jobs-environmentsnamecronjobs","title":"Cron jobs - environments.[name].cronjobs","text":"

      As most of the time it is not desirable to run the same cron jobs across all environments, you must explicitly define which jobs you want to run for each environment. In our example, we\u2019re creating a drush cron job that will run once per hour.

      name

      • Just a friendly name for identifying what the cron job will do.

      schedule

      • The schedule for executing the cron job. This follows the standard convention of cron. If you're not sure about the syntax, Crontab Generator can help.
      • You can specify M for the minute, and your cron job will run once per hour at a random minute (the same minute each hour), or M/15 to run it every 15 mins, but with a random offset from the hour (like 6, 21, 36, 51).
      • You can specify H for the hour, and your cron job will run once per day at a random hour (the same hour every day), or H(2-4) to run it once per day within the hours of 2-4.

      command

      • The command to execute. Like the tasks, this executes in the WORKDIR of the service. For Lagoon images, this is /app.

      service

      • Which service of your project to run the command in. For most projects, this is the CLI service.

      There is quite a bit more you can do in .lagoon.yml. Check out our documentation on .lagoon.yml to find out.

      "},{"location":"lagoonizing/#drupal-specific-setup","title":"Drupal-specific Setup","text":"

      If you\u2019re moving a Drupal site to Lagoon, there are a few Drupal-specific tasks to complete in order to get everything all set up.

      "},{"location":"lagoonizing/#settings-files","title":"Settings Files","text":"

      The next step is to update your settings files. Lagoon uses a set of environment-specific settings files which use environment variables, so no sensitive information is stored in these files, and they are all safe to commit. We have a variety of different example projects in our example repository - if you\u2019re starting from scratch, we encourage using one of them. If you\u2019re not, just pick a similar one and copy the relevant settings files. Check out the documentation on environment variables for more information on how to use them.

      Copy in the settings files from the example repository, and then review it to remove configuration for services that your site isn\u2019t using (for example, not all sites use Solr or Redis). If you need to override configuration for a specific environment type (things like disabling caching on development environments), additional settings files can be set up (there\u2019s even some in the example repository already), and are loaded in the following order:

      settings.php
       all.settings.php\n all.services.yml\n production.settings.php\n production.services.yml\n development.settings.php\n development.services.yml\n settings.local.php\n services.local.yml\n
      "},{"location":"lagoonizing/#update-your-gitignore-settings","title":"Update Your .gitignore Settings","text":"

      Make sure your .gitignore will allow you to commit the settings files. Drupal is shipped with sites/*/settings*.php and sites/*/services*.yml in .gitignore. You can remove that, as with Lagoon we don't ever keep sensitive information in the Git repository.

      "},{"location":"lagoonizing/#note-about-webroot-in-drupal","title":"Note About Webroot in Drupal","text":"

      Unfortunately the Drupal community has not decided on a standardized webroot folder name. Some projects put Drupal within /web, and others within /docroot or somewhere else. The Lagoon Drupal settings files assume that your Drupal is within /web, if this is different for your Drupal installation, please adapt the files accordingly.

      "},{"location":"lagoonizing/#build-your-images","title":"Build Your Images","text":"

      First, we need to build the defined images:

      build your images
      docker compose build\n

      This may take several minutes and you\u2019ll get a long response, which should look something like this.

      This will tell docker-compose to build the Docker images for all containers that have a build: definition in docker-compose.yml. Usually for Drupal this includes cli, nginx and php. We do this because we want to run specific build commands (like composer install) or inject specific environment variables (like WEBROOT) into the images.

      Usually building is not needed every time you edit your Drupal code (as the code is mounted into the containers from your host), but rebuilding does not hurt. Plus Lagoon will build the exact same Docker images during a deployment, so you check that your build will also work during a deployment by just running docker compose build again.

      "},{"location":"lagoonizing/#start-containers","title":"Start Containers","text":"

      Now that the images are built, we can start the containers:

      start the containers
      docker compose up -d\n

      You will get a response something like this:

      containers started
      \u279c  lagoon-test git:(main) docker compose up -d\nRecreating lagoon-test_cli_1   ... done\nStarting lagoon-test_redis_1   ... done\nStarting lagoon-test_solr_1    ... done\nStarting lagoon-test_mariadb_1 ... done\nRecreating lagoon-test_php_1   ... done\nRecreating lagoon-test_nginx_1 ... done\nRecreating lagoon-test_varnish_1 ... done\n

      This will bring up all containers. After the command is done, you can check with docker compose ps to ensure that they are all fully up and have not crashed. That response should look something like this:

      view running containers
      \u279c  lagoon-test git:(main) docker compose ps\nName                       Command               State            Ports\n----------------------------------------------------------------------------------------\nlagoon-test_cli_1       /sbin/tini -- /lagoon/entr ...   Up      9000/tcp\nlagoon-test_mariadb_1   /sbin/tini -- /lagoon/entr ...   Up      0.0.0.0:32768->3306/tcp\nlagoon-test_nginx_1     /sbin/tini -- /lagoon/entr ...   Up      8080/tcp\nlagoon-test_php_1       /sbin/tini -- /lagoon/entr ...   Up      9000/tcp\nlagoon-test_redis_1     /sbin/tini -- /lagoon/entr ...   Up      6379/tcp\nlagoon-test_solr_1      /sbin/tini -- /lagoon/entr ...   Up      0.0.0.0:32769->8983/tcp\n

      If there is a problem, check the logs with docker compose logs -f [servicename].

      "},{"location":"lagoonizing/#re-run-composer-install-for-composer-projects-only","title":"Re-Run `composer install`` (for Composer projects only)","text":"

      If you\u2019re running a Drupal 8+ project, you should be using Composer, and you\u2019ll need to get all dependencies downloaded and installed. Connect into the cli container and run composer install:

      re-run composer install
      docker compose exec cli bash\n[drupal-example]cli-drupal:/app$ composer install\n

      This might sound weird, as there was already a composer install executed during the build step, so here\u2019s why we do this again:

      • In order to be able to edit files on the host and have them immediately available in the container, the default docker-composer.yml mounts the whole folder into the containers (this happens with .:/app:delegated in the volumes section). This also means that all dependencies installed during the Docker build are overwritten with the files on the host.
      • Locally, you probably want access to dependencies defined as require-dev in composer.json, while on a production deployment they would just use unnecessary space. So we run composer install --no-dev in the Dockerfile and composer install manually.

      If everything went well, open the LAGOON_ROUTE defined in docker-compose.yml (for example http://drupal.docker.amazee.io) and you should be greeted by a nice Drupal error. Don't worry - that's okay right now, the most important thing is that it tries to load a Drupal site.

      If you get a 500 or similar error, make sure that everything is loaded properly with Composer.

      "},{"location":"lagoonizing/#check-status-and-install-drupal","title":"Check Status and Install Drupal","text":"

      Finally it's time to install Drupal, but just before that we want to make sure everything works. We suggest using Drush for that with drush status:

      run drush status
      docker compose exec cli bash\n[drupal-example]cli-drupal:/app$ drush status\n

      The above command should return something like the following:

      drush status results
      [drupal-example]cli-drupal:/app$ drush status\n[notice] Missing database table: key_value\nDrupal version       :  8.6.1\nSite URI             :  http://drupal.docker.amazee.io\nDatabase driver      :  mysql\nDatabase hostname    :  mariadb\nDatabase port        :  3306\nDatabase username    :  drupal\nDatabase name        :  drupal\nPHP binary           :  /usr/local/bin/php\nPHP config           :  /usr/local/etc/php/php.ini\nPHP OS               :  Linux\nDrush script         :  /app/vendor/drush/drush/drush\nDrush version        :  9.4.0\nDrush temp           :  /tmp\nDrush configs        :  /home/.drush/drush.yml\n                        /app/vendor/drush/drush/drush.yml\nDrupal root          :  /app/web\nSite path            :  sites/default\n

      You may have to tell pygmy about your public key before the next step. If you get an error like Permission denied (publickey), check out the documentation here: pygmy - adding ssh keys.

      Now it\u2019s time to install Drupal (if instead you would like to import an existing SQL File, please skip to the next step, but we suggest you install a clean Drupal in the beginning to be sure everything works.)

      run drush si

      [drupal-example]cli-drupal:/app$ drush site-install\n
      This should output something like:

      drush si results
      [drupal-example]cli-drupal:/app$ drush site-install\nYou are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y\nStarting Drupal installation. This takes a while. Consider using the --notify global option.\nInstallation complete.  User name: admin  User password: arbZJekcqh\nCongratulations, you installed Drupal!\n

      Now you can visit the URL defined in LAGOON_ROUTE and you should see a fresh and cleanly installed Drupal - Congrats!

      "},{"location":"lagoonizing/#import-existing-database-dump","title":"Import existing Database Dump","text":"

      If you have an already existing Drupal site you probably want to import its database over to your local site. There are many different ways on how to create a database dump, if your current hosting provider has Drush installed, you can use the following:

      drush sql-dump
      [your-existing-site]$ drush sql-dump --result-file=dump.sql\nDatabase dump saved to dump.sql                         [success]\n

      Now you have a dump.sql file that contains your whole database. Copy this file into your local Git repository and connect to the CLI, you should see the file in there:

      here's our dump file

      [drupal-example] docker compose exec cli bash\n[drupal-example]cli-drupal:/app$ ls -l dump.sql\n-rw-r--r--    1 root     root          5281 Dec 19 12:46 dump.sql\n
      Now you can import the dump after dropping the current database (still connected to the cli):

      dump existing db and import dump file
      [drupal-example]cli-drupal:/app$ drush sql-drop\nDo you really want to drop all tables in the database drupal? (y/n): y\n[drupal-example]cli-drupal:/app$ drush sql-cli < dump.sql\n
      "},{"location":"lagoonizing/#drupal-files-directory","title":"Drupal files directory","text":"

      A Drupal site also consists of the files directory. To migrate your files from your existing site, just add the files into the correct folder (probably web/sites/default/files, sites/default/files or something similar). Remember what you've set as your webroot - it may not be the same for all projects.

      "},{"location":"lagoonizing/#deploy","title":"Deploy","text":"

      If you\u2019ve done everything in this guide, and your Lagoon administrator has everything set up, you are now ready to deploy your site!

      If you are deploying a Drupal site, follow this deployment guide.

      For all other deployments, follow this deployment guide.

      "},{"location":"logging/kibana-examples/","title":"Kibana Examples","text":"

      Have you seen the Kibana getting started video and are now ready to work with logs? We are here to help! This page will give you examples of Kibana queries you can use. This is not a Kibana 101 class, but it can help you understand some of what you can do in Kibana.

      Ready to get started? Good!

      Note

      Make sure that you have selected your tenant before starting! You can do that by on the Tenant icon on the left-hand menu. Once you have selected your tenant, click on the Discover icon again to get started.

      "},{"location":"logging/kibana-examples/#router-logs","title":"Router Logs","text":"

      Below you'll find examples for two common log requests:

      • Viewing the total number of hits/requests to your site.
      • Viewing the number of hits/requests from a specific IP address.
      "},{"location":"logging/kibana-examples/#total-number-of-hitsrequests-to-your-site","title":"Total Number of hits/requests to your site","text":"
      • Let's start Kibana up and select Discovery (#1 in screen shot below)
      • Then the router logs for your project(#2).
      • From there, we will filter some of this information down a bit. Let's focus on our main production environment.
      • In the search bar (#3), enter:

        openshift_project: \"name of your production project\"

      • This will show you all the hits to your production environment in the given time frame.
      • You can change the time frame in the upper right hand corner (#4).
      • Clicking on the arrow next to the entry (#5) will expand it and show you all the information that was captured.
      • You can add any of those fields to the window by hovering over them and clicking add on the left hand side (#6).
      • You can also further filter your results by using the search bar.

      "},{"location":"logging/kibana-examples/#number-of-hitsrequests-from-a-specific-ip-address","title":"Number of hits/requests from a specific IP address","text":"

      Running the query above will give you a general look at all the traffic to your site, but what if you want to narrow in on a specific IP address? Perhaps you want to see how many times an IP has hit your site and what specific pages they were looking at. This next query should help.

      We are going to start off with the same query as above, but we are going to add a couple of things.

      • First, add the following fields: client_ip and http_request.
      • This will show you a list of all IP addresses and the page they requested. Here is what we see for the amazee.io website:

      That looks good, but what if we wanted to just show requests from a specific IP address? You can filter for the address by adding it to your search criteria.

      • We are going to add: AND client_ip: \"IP address\".
      • That will filter the results to just show you hits from that specific IP address, and the page they were requesting. Here is what it looks like for our amazee.io website:

      "},{"location":"logging/kibana-examples/#container-logs","title":"Container Logs","text":"

      Container logs will show you all stout and sterr messages for your specific container and project. We are going to show an example for getting logs from a specific container and finding specific error numbers in that container.

      "},{"location":"logging/kibana-examples/#logs-from-a-container","title":"Logs from a container","text":"

      Want to see the logs for a specific container (php, nginx, etc)? This section will help! Let's focus on looking at NGINX logs.

      • We start by opening up Kibana and selecting Discover (#1 in the screen shot below).
      • From there, we select the container logs for our project (#2).
      • Let's go to the search bar (#3) and enter: kubernetes.container_name: \"nginx\"
      • This will display all NGINX logs for our project.
      • Clicking on the arrow next to an entry (#4) will expand that entry and show you all of the information it gathered.
      • Let's add the message field and the level field to the view. You can do that by clicking on \"Add\" on the left hand side (#5).
      • You can change the time frame in the upper right hand corner of the screen (#6), in the example below I'm looking at logs for the last 4 hours.

      "},{"location":"logging/kibana-examples/#specific-errors-in-logs","title":"Specific errors in logs","text":"

      Want to see how many 500 Internal Server errors you've had in your NGINX container? You can do that by changing the search query. If you search:

      kubernetes.container_name: \"nginx\" AND message: \"500\"

      That will only display 500 error messages in the NGINX container. You can search for any error message in any container that you would like!

      "},{"location":"logging/kibana-examples/#visualization","title":"Visualization","text":"

      Kibana will also give you the option to create visualizations or graphs. We are going to create a chart to show number of hits/requests in a month using the same query we used above.

      1. Click on Visualize on the left hand side of Kibana.
      2. Click on the blue plus sign.
      3. For this example, we are going to select a Vertical Bar chart.
      4. Select the router logs for your project.
      5. Click on X-Axis under Buckets and select Date Histogram, with the interval set to daily
      6. Success!! You should now see a nice bar graph showing your daily traffic.

      Note

      Make sure that you select an appropriate time frame for the data in the upper right hand corner.

      Here is an example of a daily hits visualization chart:

      Also note that you can save your visualizations (and searches)! That will make it even faster to access them in the future. And because each account has their own Kibana Tenant, no searches or visualizations are shared with another account.

      "},{"location":"logging/kibana-examples/#troubleshooting","title":"Troubleshooting","text":""},{"location":"logging/logging/","title":"Logging","text":"

      Lagoon provides access to the following logs via Kibana:

      • Logs from the Kubernetes Routers, including every single HTTP and HTTPS request with:
        • Source IP
        • URL
        • Path
        • HTTP verb
        • Cookies
        • Headers
        • User agent
        • Project
        • Container name
        • Response size
        • Response time
      • Logs from containers:
        • stdout and stderr messages
        • Container name
        • Project
      • Lagoon logs:
        • Webhooks parsing
        • Build logs
        • Build errors
        • Any other Lagoon related logs
      • Application logs:
        • For Drupal: install the Lagoon Logs module in order to receive logs from Drupal Watchdog.
        • For Laravel: install the Lagoon Logs for Laravel package.
        • For other workloads:
          • Send logs to udp://application-logs.lagoon.svc:5140
          • Ensure logs are structured as JSON encoded objects.
          • Ensure the type field contains the name of the Kubernetes namespace ($LAGOON_PROJECT-$LAGOON_ENVIRONMENT).

      To access the logs, please contact your Lagoon administrator to get the URL for the Kibana route.

      Each Lagoon user account has their own login and will see the logs only for the projects to which they have access.

      Each Lagoon user account also has their own Kibana Tenant, which means no saved searches or visualizations are shared with another account.

      If you would like to know more about how to use Kibana: https://www.elastic.co/webinars/getting-started-kibana.

      "},{"location":"other-tools/client-libraries/","title":"Lagoon client libraries","text":"

      If you're interested in developing tooling for the Lagoon ecosystem, there are a few libraries that you may find helpful.

      "},{"location":"other-tools/client-libraries/#golang","title":"Golang","text":""},{"location":"other-tools/client-libraries/#machinery","title":"Machinery","text":"

      The Machinery library is the most actively supported and developed of the tooling libraries for Lagoon. It is a central store of all the basic operations used across all our golang based tool types, primarily -- but not exclusively -- for API interaction.

      https://github.com/uselagoon/machinery/

      "},{"location":"other-tools/client-libraries/#php","title":"PHP","text":"

      If you're looking for PHP integration, the php-sdk may give you a good jumping off point for your work.

      https://github.com/uselagoon/lagoon-php-sdk

      "},{"location":"other-tools/client-libraries/#third-party-libraries","title":"Third Party Libraries","text":""},{"location":"other-tools/client-libraries/#ansible","title":"Ansible","text":"

      A frequently updated and expanding Ansible library for interacting with Lagoon.

      https://github.com/salsadigitalauorg/lagoon_ansible_collection

      "},{"location":"other-tools/sail/","title":"Sail:onLagoon","text":"

      Sail:onLagoon is a Laravel extension that simplifies the process of Lagoonizing Laravel sites that are already using Laravel Sail to generate their docker-compose setup. This extension provides additional features and configurations tailored for Lagoon environments.

      Check out Sail:onLagoon on GitHub: https://github.com/uselagoon/sailonlagoon

      Here's a quickstart step by step to get you started:

      Watch a short video demonstrating how quickly you can get a Laravel site ready for Lagoon:

      "},{"location":"releases/2.10.0/","title":"2.10.0","text":""},{"location":"releases/2.10.0/#release-links","title":"Release Links","text":"
      • lagoon v2.10.0
      • lagoon-ui core-v2.10.0
      • lagoon-build-deploy core-v2.10.0
      • lagoon-core chart 1.12.0
      "},{"location":"releases/2.10.0/#upgrades","title":"Upgrades","text":""},{"location":"releases/2.10.0/#upgrade-to-v29x-first","title":"Upgrade to v2.9.x first","text":"

      You must upgrade to Lagoon v2.9.x before upgrading to v2.10.0. Ensure you read all the linked release notes.

      "},{"location":"releases/2.10.0/#deprecations","title":"Deprecations","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.11.0/","title":"2.11.0","text":""},{"location":"releases/2.11.0/#release-links","title":"Release Links","text":"
      • lagoon v2.11.0
      • lagoon-ui core-v2.11.0
      • lagoon-build-deploy core-v2.11.0
      • lagoon-core chart 1.16.0
      "},{"location":"releases/2.11.0/#upgrades","title":"Upgrades","text":""},{"location":"releases/2.11.0/#upgrade-to-v210x-first","title":"Upgrade to v2.10.x first","text":"

      You must upgrade to Lagoon v2.10.x before upgrading to v2.11.0. Ensure you read all the linked release notes.

      "},{"location":"releases/2.11.0/#essential-database-backups","title":"Essential database backups","text":"

      Ensure you have a local backup of the api-db and keycloak-db before you commence this update, as there are complex migrations taking place in preparation for the v2.12.0 release.

      "},{"location":"releases/2.11.0/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.11.0/#storage-calculator-removed-from-core","title":"Storage Calculator removed from core","text":"

      The storage-calculator service was removed from core in this release, and the service is now included in lagoon-remote.

      "},{"location":"releases/2.12.0/","title":"2.12.0","text":""},{"location":"releases/2.12.0/#release-links","title":"Release Links","text":"
      • lagoon v2.12.0
      • lagoon-ui core-v2.12.0
      • lagoon-build-deploy core-v2.12.0
      • lagoon-core chart 1.23.0
      "},{"location":"releases/2.12.0/#upgrades","title":"Upgrades","text":""},{"location":"releases/2.12.0/#essential-database-backups","title":"Essential database backups","text":"

      Ensure you have a local backup of the api-db and keycloak-db before you commence this update. The update of these databases from MariaDB 10.4 to 10.6 should update seamlessly. In the event it does not go smoothly, the image cannot be rolled back owing to incompatible storage engines. You will need to drop the db and restore the backup to get running again.

      "},{"location":"releases/2.12.0/#kubernetes-121-minimum-requirement","title":"Kubernetes 1.21 minimum requirement","text":"

      The minimum supported version of Kubernetes is 1.21 as of this release.

      "},{"location":"releases/2.12.0/#deprecations","title":"Deprecations","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.13.0/","title":"2.13.0","text":""},{"location":"releases/2.13.0/#release-links","title":"Release Links","text":"
      • lagoon v2.13.0
      • lagoon-ui core-v2.13.0
      • lagoon-build-deploy core-v2.13.0
      • lagoon-core chart 1.25.0
      "},{"location":"releases/2.13.0/#upgrades","title":"Upgrades","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.13.0/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.13.0/#monitoring-urls","title":"monitoring-urls","text":"

      The storage and use of monitoring-urls provided in lagoon.yml has been removed from the API.

      "},{"location":"releases/2.14.0/","title":"2.14.0","text":""},{"location":"releases/2.14.0/#upgrades","title":"Upgrades","text":"

      This tag was never released, and the 2.14.2 release should be installed instead.

      "},{"location":"releases/2.14.0/#deprecations","title":"Deprecations","text":"

      This tag was never released, and the 2.14.2 release should be installed instead.

      "},{"location":"releases/2.14.1/","title":"2.14.1","text":""},{"location":"releases/2.14.1/#release-links","title":"Release Links","text":"
      • lagoon v2.14.2
      • lagoon-ui core-v2.14.2
      • lagoon-build-deploy core-v2.14.2
      • lagoon-core chart 1.28.0
      • lagoon-remote chart 0.76.0
      "},{"location":"releases/2.14.1/#release-notes","title":"Release Notes","text":"

      This release was superseded, and the 2.14.2 release is recommended to be installed instead.

      "},{"location":"releases/2.14.1/#upgrades","title":"Upgrades","text":"

      This release was superseded, and the 2.14.2 release is recommended to be installed instead.

      "},{"location":"releases/2.14.1/#deprecations","title":"Deprecations","text":"

      This release was superseded, and the 2.14.2 release is recommended to be installed instead.

      "},{"location":"releases/2.14.2/","title":"2.14.2","text":""},{"location":"releases/2.14.2/#release-links","title":"Release Links","text":"
      • lagoon v2.14.2
      • lagoon-ui core-v2.14.2
      • lagoon-build-deploy core-v2.14.2
      • lagoon-core chart 1.28.0
      • lagoon-remote chart 0.76.0
      "},{"location":"releases/2.14.2/#release-notes","title":"Release Notes","text":"

      This release resolved a couple of minor issues discovered after releasing the 2.14.0 and 2.14.1 releases.

      "},{"location":"releases/2.14.2/#upgrades","title":"Upgrades","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.14.2/#deprecations","title":"Deprecations","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.15.0/","title":"2.15.0","text":""},{"location":"releases/2.15.0/#release-links","title":"Release Links","text":"
      • lagoon v2.15.0
      • lagoon-ui core-v2.15.0
      • lagoon-build-deploy core-v2.15.0
      • lagoon-core chart 1.29.0
      "},{"location":"releases/2.15.0/#release-notes","title":"Release Notes","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.0/#upgrades","title":"Upgrades","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.0/#deprecations","title":"Deprecations","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.1/","title":"2.15.1","text":""},{"location":"releases/2.15.1/#release-links","title":"Release Links","text":"
      • lagoon v2.15.1
      • lagoon-ui core-v2.15.1
      • lagoon-build-deploy core-v2.15.1
      • lagoon-core chart 1.31.0
      "},{"location":"releases/2.15.1/#release-notes","title":"Release Notes","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.1/#upgrades","title":"Upgrades","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.1/#deprecations","title":"Deprecations","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.2/","title":"2.15.2","text":""},{"location":"releases/2.15.2/#release-links","title":"Release Links","text":"
      • lagoon v2.15.2
      • lagoon-ui core-v2.15.2
      • lagoon-build-deploy core-v2.15.2
      • lagoon-core chart 1.34.0
      "},{"location":"releases/2.15.2/#release-notes","title":"Release Notes","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.2/#upgrades","title":"Upgrades","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.2/#deprecations","title":"Deprecations","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.3/","title":"2.15.3","text":""},{"location":"releases/2.15.3/#release-links","title":"Release Links","text":"
      • lagoon v2.15.3
      • lagoon-ui core-v2.15.3
      • lagoon-build-deploy core-v2.15.3
      • lagoon-core chart 1.35.0
      "},{"location":"releases/2.15.3/#release-notes","title":"Release Notes","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.3/#upgrades","title":"Upgrades","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.3/#deprecations","title":"Deprecations","text":"

      This release was superseded, and the 2.15.4 release is recommended to be installed instead.

      "},{"location":"releases/2.15.4/","title":"2.15.4","text":""},{"location":"releases/2.15.4/#release-links","title":"Release Links","text":"
      • lagoon v2.15.4
      • lagoon-ui core-v2.15.4
      • lagoon-build-deploy core-v2.15.4
      • lagoon-core chart 1.36.0
      "},{"location":"releases/2.15.4/#release-notes","title":"Release Notes","text":"

      This release resolved a couple of minor issues discovered after releasing the 2.15.0, 2.15.1, 2.15.2, and 2.15.3 releases.

      "},{"location":"releases/2.15.4/#upgrades","title":"Upgrades","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.15.4/#deprecations","title":"Deprecations","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.16.0/","title":"2.16.0","text":""},{"location":"releases/2.16.0/#release-links","title":"Release Links","text":"
      • lagoon v2.16.0
      • lagoon-ui core-v2.16.0
      • lagoon-build-deploy core-v2.16.0
      • lagoon-core chart 1.37.0
      "},{"location":"releases/2.16.0/#upgrades","title":"Upgrades","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.16.0/#deprecations","title":"Deprecations","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.17.0/","title":"2.17.0","text":""},{"location":"releases/2.17.0/#release-links","title":"Release Links","text":"
      • lagoon v2.17.0
      • lagoon-ui core-v2.17.0
      • lagoon-build-deploy core-v2.17.0
      • lagoon-core chart 1.41.0
      • lagoon-remote chart 0.87.0
      "},{"location":"releases/2.17.0/#upgrades","title":"Upgrades","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.17.0/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.17.0/#activestandby-task-image","title":"activestandby task image","text":"
      • This release introduces a new active/standby task image that does not require the use of the dioscuri controller. Dioscuri is deprecated and will eventually be removed from the lagoon-remote helm chart. If you use active/standby functionality in your clusters, you should upgrade to lagoon v2.17.0 and update your remote clusters to the version of the lagoon-remote helm chart the in the 2.17.0 release.
      "},{"location":"releases/2.17.0/#api-harbor-support","title":"API Harbor support","text":"
      • Support for Harbor in the API will be removed in a future release. If you currently have your core installation with Harbor support, you should move to using the integration within lagoon-remote instead. See the documentation here and read the section about Harbor.
      • Removed in 2.20.1
      "},{"location":"releases/2.17.0/#harbor-21-and-earlier-support","title":"Harbor 2.1 and earlier support","text":"
      • Support for Harbor 2.1.x (chart version 1.5.x) and older in lagoon-remote will be removed in a future release. You should consider upgrading Harbor to a newer version (currently Lagoon supports up to v2.9.x (chart version 1.13.x)), following any recommended upgrade paths from Harbor.
      "},{"location":"releases/2.18.0/","title":"2.18.0","text":""},{"location":"releases/2.18.0/#release-links","title":"Release Links","text":"
      • lagoon v2.18.0
      • lagoon-ui core-v2.18.0
      • lagoon-build-deploy core-v2.18.0
      • lagoon-core chart 1.42.0
      • lagoon-remote chart 0.88.0
      "},{"location":"releases/2.18.0/#release-notes","title":"Release Notes","text":"

      This release was superseded, and the 2.18.2 release is recommended to be installed instead.

      "},{"location":"releases/2.18.0/#upgrades","title":"Upgrades","text":"

      This release was superseded, and the 2.18.2 release is recommended to be installed instead.

      "},{"location":"releases/2.18.0/#deprecations","title":"Deprecations","text":"

      This release was superseded, and the 2.18.2 release is recommended to be installed instead.

      "},{"location":"releases/2.18.1/","title":"2.18.1","text":""},{"location":"releases/2.18.1/#release-links","title":"Release Links","text":"
      • lagoon v2.18.1
      • lagoon-core chart 1.43.0
      "},{"location":"releases/2.18.1/#release-notes","title":"Release Notes","text":"

      This release was superseded, and the 2.18.2 release is recommended to be installed instead.

      "},{"location":"releases/2.18.1/#upgrades","title":"Upgrades","text":"

      This release was superseded, and the 2.18.2 release is recommended to be installed instead.

      "},{"location":"releases/2.18.1/#deprecations","title":"Deprecations","text":"

      This release was superseded, and the 2.18.2 release is recommended to be installed instead.

      "},{"location":"releases/2.18.2/","title":"2.18.2","text":""},{"location":"releases/2.18.2/#release-links","title":"Release Links","text":"
      • lagoon v2.18.2
      • lagoon-core chart 1.44.0
      "},{"location":"releases/2.18.2/#release-notes","title":"Release Notes","text":"

      This release resolved a couple of minor issues discovered after releasing the 2.18.0 and 2.18.1 release.

      "},{"location":"releases/2.18.2/#upgrades","title":"Upgrades","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.18.2/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.18.2/#in-built-drupal-tasks","title":"In-built Drupal Tasks","text":"
      • The standard drupal based tasks that Lagoon ships with (Drush ....) have been flagged as deprecated and should not be used anymore. These will need to be replaced with custom tasks. Example replacement tasks will be provided prior to their removal.
      "},{"location":"releases/2.18.2/#setenvironmentservices","title":"setEnvironmentServices","text":"
      • This release introduces a deprecation of the setEnvironmentServices mutation to updated services for an environment, it is being replaced with addOrUpdateEnvironmentService and deleteEnvironmentService. This is because the type is being refactored to support additional information, and eventually additional functionality. For now, the actions-handler service will still support the older setEnvironmentServices for backwards compatibility for a short period to allow older versions of lagoon-remote to still work, but a new version of lagoon-remote will be available that will no longer provides the payload that the actions-handler uses.
      "},{"location":"releases/2.18.2/#core-registry-variable","title":"Core Registry variable","text":"
      • The value for registry which was previously required by the lagoon-core chart is no longer required. If you are using this, you will need to add it under the new unauthenticatedRegistry setting when installing lagoon-remote in the lagoon-build-deploy section of your values file. If you aren't using an actual registry and have the example disabled-only-use-harbor-via-deploy-controller.invalid value, then you do not need to do anything except you can now remove the registry setting from your core values file.
      "},{"location":"releases/2.18.2/#bytesused","title":"bytesUsed","text":"
      • The environment storage return field named bytesUsed is deprecated. The actual value stored is kibibytes. A new return field called kibUsed exists and should be used, the returned data is the same and both fields are still returned. bytesUsed will be removed in a future release, make any adjustments now to use kibUsed. This will be a breaking change in a future release.
      "},{"location":"releases/2.18.2/#addorupdateenvironmentstorage","title":"addOrUpdateEnvironmentStorage","text":"
      • addOrUpdateEnvironmentStorage is deprecated, addOrUpdateStorageOnEnvironment is the replacement to use as it supports the updated input value for kibUsed. addOrUpdateEnvironmentStorage will be completely removed in a future release.
      "},{"location":"releases/2.18.2/#activesystems","title":"activesystems","text":"
      • The ability to configure projects to use different subsystems for managing deployments/tasks has been removed. Setting any values for the activeSystems* fields on the project will have no effect and the fields will be removed in a future release.
      "},{"location":"releases/2.19.0/","title":"2.19.0","text":""},{"location":"releases/2.19.0/#release-links","title":"Release Links","text":"
      • lagoon v2.19.0
      • lagoon-ui core-v2.19.0
      • lagoon-build-deploy core-v2.19.0
      • lagoon-core chart 1.45.0
      • lagoon-remote chart 0.89.0
      "},{"location":"releases/2.19.0/#upgrades","title":"Upgrades","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.19.0/#deprecations","title":"Deprecations","text":"

      There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

      "},{"location":"releases/2.20.0/","title":"2.20.0","text":""},{"location":"releases/2.20.0/#release-links","title":"Release Links","text":"
      • lagoon v2.20.0
      • lagoon-ui core-v2.20.0
      • lagoon-build-deploy core-v2.20.0
      • lagoon-core chart 1.46.0
      • lagoon-remote chart 0.92.0
      "},{"location":"releases/2.20.0/#release-notes","title":"Release Notes","text":"

      This release was superseded, and the 2.20.1 release is recommended to be installed instead.

      "},{"location":"releases/2.20.0/#upgrades","title":"Upgrades","text":"

      This release was superseded, and the 2.20.1 release is recommended to be installed instead.

      "},{"location":"releases/2.20.0/#deprecations","title":"Deprecations","text":"

      This release was superseded, and the 2.20.1 release is recommended to be installed instead.

      "},{"location":"releases/2.20.1/","title":"2.20.1","text":""},{"location":"releases/2.20.1/#release-links","title":"Release Links","text":"
      • lagoon v2.20.1
      • lagoon-ui core-v2.20.1
      • lagoon-build-deploy core-v2.20.1
      • lagoon-core chart 1.47.0
      "},{"location":"releases/2.20.1/#release-notes","title":"Release Notes","text":"

      This release resolved a couple of minor issues discovered after releasing the 2.20.0 release.

      "},{"location":"releases/2.20.1/#upgrades","title":"Upgrades","text":"

      This release contains changes that you may need to be aware of. Read carefully before you upgrade.

      "},{"location":"releases/2.20.1/#harbor-21x-and-earlier","title":"Harbor 2.1.x and earlier","text":"
      • This release removes the support for Harbor from the Lagoon API. If you're still using the Harbor support in the API, you should NOT upgrade until you have configured your lagoon-remote installations to use Harbor instead. See the documentation here and read the section about Harbor.
      • We also recommend that if you're using Harbor version 2.1.x and earlier, that you upgrade this as soon as possible. Follow any instructions that Harbor recommend for upgrading. As of this release, lagoon-remote has been tested up to Harbor version 2.10.0 (helm chart version 1.14.0). Lagoon will stop supporting Harbor 2.1.x and earlier in a future release.
      "},{"location":"releases/2.20.1/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.20.1/#kubernetes-minimum-supported-version-is-now-125-tested-up-to-130","title":"Kubernetes minimum supported version is now 1.25, tested up to 1.30","text":"
      • The minimum supported version of Kubernetes is now 1.25, owing to deprecations in some core API functions, and the availability of upstream charts. The v2.20.0 release will not install into an earlier version of Kubernetes, so any Kubernetes upgrades will need to be performed prior to the Lagoon update.
      "},{"location":"releases/2.20.1/#deleted-backups","title":"Deleted Backups","text":"
      • When a backup is deleted via the webhook, it will now actually be removed from the API rather than being flagged as deleted. The Backup type field deleted is deprecated, and will be removed in a future release. Additionally, includeDeleted if requested when querying backups will not change the result as there will be no deleted backups to include.
      "},{"location":"releases/2.20.1/#api-harbor-support","title":"API Harbor support","text":"
      • In 2.17.0 we announced that Harbor support in the API was deprecated. This release of Lagoon removes all support for Harbor from the API. See upgrade notes above.
      "},{"location":"releases/2.20.1/#deleteallremoveall-mutations-removed","title":"DeleteAll/RemoveAll mutations removed","text":"
      • This release removes all DeleteAllX and RemoveAllX from the API. These were only ever meant for local development and are no longer relevant.
      "},{"location":"releases/2.20.1/#error-handling-on-deployment-triggers","title":"Error handling on deployment triggers","text":"
      • In the past, if triggering a deployment using any of the DeployEnvironmentX mutations and an error was encountered, the API would not return an actual error, just a string that contained the error. This was changed in this release to actually return an error now. As this is a change in behaviour, it may impact any users that may have previously been capturing the string error text and parsing it to check for errors.
      "},{"location":"releases/2.21.0/","title":"2.21.0","text":""},{"location":"releases/2.21.0/#release-links","title":"Release Links","text":"
      • lagoon v2.21.0
      • lagoon-ui core-v2.21.0
      • lagoon-build-deploy core-v2.21.0
      • lagoon-core chart 1.48.0
      • lagoon-remote chart 0.94.0
      "},{"location":"releases/2.21.0/#release-notes","title":"Release Notes","text":"

      This release is a standard Lagoon release.

      "},{"location":"releases/2.21.0/#upgrades","title":"Upgrades","text":""},{"location":"releases/2.21.0/#upgrade-to-v220x-first","title":"Upgrade to v2.20.x first","text":"

      You must upgrade to Lagoon v2.20.x before upgrading to v2.21.0. Ensure you read all the linked release notes. The upgrade to v2.20.x is to ensure that the functionality used to enable the feature flags in the broker service is present prior to being called as a pre-upgrade job in v2.22.x

      "},{"location":"releases/2.21.0/#keycloak-24","title":"Keycloak 24","text":"

      This release includes an update to Keycloak 24. This should be a seamless experience for all users.

      "},{"location":"releases/2.21.0/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.21.0/#organization-notification-graphql-commands","title":"Organization & Notification GraphQL commands","text":"

      Some of the GraphQL commands used to modify organization user roles have changed. The API schema documents them. Some of the GRaphQL command inputs used to interact with Notifications may have changed. The API schema documents them.

      "},{"location":"releases/2.22.0/","title":"2.22.0","text":""},{"location":"releases/2.22.0/#release-links","title":"Release Links","text":"
      • lagoon v2.22.0
      • lagoon-ui core-v2.22.0
      • lagoon-build-deploy core-v2.22.0
      • lagoon-core chart 1.49.0
      • lagoon-remote chart 0.95.0
      "},{"location":"releases/2.22.0/#release-notes","title":"Release Notes","text":"

      This release is a standard Lagoon release. There are changes required for teams managing their own Lagoon installations (core and remote).

      "},{"location":"releases/2.22.0/#upgrades","title":"Upgrades","text":"

      Self-managed Lagoon installs will need to be aware of three changes in lagoon-core and lagoon-remote. Please read the following sections carefully to ensure you update components that apply to your installation correctly.

      "},{"location":"releases/2.22.0/#lagoon-custom-resource-definitions-crds","title":"Lagoon Custom Resource Definitions (CRDs)","text":"

      We introduced a new API version of the Lagoon Build and Task CRDs in https://github.com/uselagoon/lagoon-charts/pull/688. You must upgrade these after installing the latest version of lagoon-remote. Failure to update the CRDs will result in the remote controller failing to start, or builds and tasks failing.

      If you're installing the version defined in the top of these release notes, you can use the following to upgrade the CRDs to the version required.

      Text Only
      helm show crds lagoon/lagoon-build-deploy --version 0.30.2 | kubectl apply -f -\n

      Alternatively, see the README in the lagoon-build-deploy chart for further examples on how to update the Lagoon Build and Task CRDs.

      "},{"location":"releases/2.22.0/#dockerhost-statefulset","title":"DockerHost StatefulSet","text":"

      To help with improving or distributing build loads, we converted the docker-host from a Deployment to a StatefulSet in https://github.com/uselagoon/lagoon-charts/pull/687. This allows the docker-host to be scaled.

      This will provide the ability to load-balance docker build workloads. It will result in a new docker-host cache being created the first time any replica starts up (including on the first deployment), this may result in the first few builds being less-optimized whilst the cache rebuilds. This StatefulSet must only be scaled up or down via helm, and not directly in kubernetes otherwise the load-balancing of the workloads will not be able to be fully utilised.

      "},{"location":"releases/2.22.0/#nats-ssh-portal","title":"NATS / SSH Portal","text":"

      The version of NATS used by Lagoon was updated in https://github.com/uselagoon/lagoon-charts/pull/602. If your installation of Lagoon utilises SSH portals and NATS, you need to be aware of changes to the structure of the NATS values. This upgrade requires minimal config structure changes in your lagoon-core and lagoon-remote values files. There are no changes to the certs or keys, just the naming of the YAML items. See the pullrequest description for more information.

      "},{"location":"releases/2.22.0/#deprecations","title":"Deprecations","text":"

      tbc

      "},{"location":"releases/policy/","title":"Policy","text":""},{"location":"releases/policy/#upgrade-policy","title":"Upgrade Policy","text":"

      Our general policy is that you should upgrade to the latest version of each minor version before you upgrade to the latest version.

      You should check all upgrade requirements and deprecation notices for all versions as you upgrade.

      An example of this policy is as follows

      • Currently installed v2.13.0, planning to upgrade to v2.16.0
        1. Upgrade to v2.14.2 (the latest 2.14.x release)
        2. Upgrade to v2.15.4 (the latest 2.15.x release)
        3. Upgrade to v2.16.0

      We may, from time to time, provide additional context to the upgrades listed in these pages.

      "},{"location":"releases/policy/#deprecation-policy","title":"Deprecation Policy","text":"

      As Lagoon continues to evolve, we occasionally need to replace, rename or retire existing processes, tools or configuration. Where this may impact a user's processes or procedures, we intend to outline a timeframe to allow any necessary changes to be made.

      Deprecations will be tracked by the release they are announced in, and then updated when the actual deprecation occurs. All deprecations should provide a rough timeline (in months or releases).

      We may, from time to time, provide additional context to the deprecations listed in these pages.

      "},{"location":"resources/faq/","title":"FAQ","text":""},{"location":"resources/faq/#i-found-a-bug","title":"I found a bug! \ud83d\udc1e","text":"

      If you've found a bug, please raise a GitHub issue for it, or contact your Lagoon administrator.

      "},{"location":"resources/faq/#i-found-a-security-issue","title":"I found a security issue! \ud83d\udc1e","text":"

      If you've found a security issue, please send your findings to security@amazee.io. Please DO NOT file a GitHub issue for it.

      "},{"location":"resources/faq/#im-interested-in-amazeeios-hosting-services-with-lagoon","title":"I'm interested in amazee.io's hosting services with Lagoon","text":"

      That's great news! You can contact them via email at sales@amazee.io.

      "},{"location":"resources/faq/#how-can-i-restore-a-backup","title":"How can I restore a backup?","text":"

      We have backups available for files and databases, typically taken every 24 hours at most. These backups are stored offsite.

      We keep up to 7 daily backups and 4 weekly backups.

      If you ever need to recover or restore a backup, feel free to submit a ticket or send us a message via chat and we will be more than happy to help!

      "},{"location":"resources/faq/#how-can-i-download-a-database-dump","title":"How can I download a database dump?","text":""},{"location":"resources/faq/#im-getting-an-invalid-ssl-certificate-error","title":"I'm getting an invalid SSL certificate error","text":"

      The first thing to try is what is listed in our documentation about SSL.

      If you follow those steps, and you are still seeing an error, please submit a ticket or send us a message on chat and we can help resolve this for you.

      "},{"location":"resources/faq/#im-getting-an-array-error-when-running-a-drush-command","title":"I'm getting an \"Array\" error when running a Drush command","text":"

      This was a bug that was prevalent in Drush versions 8.1.16 and 8.1.17. There error would look something like this:

      Bash
      The command could not be executed successfully (returned: Array [error]\n(\n[default] => Array\n(\n[default] => Array\n(\n[driver] => mysql\n[prefix] => Array\n(\n[default] =>\n)\n, code: 0)\nError: no database record could be found for source @main [error]\n

      Upgrading Drush should fix that for you. We strongly suggest that you use version 8.3 or newer. Once Drush is upgraded the command should work!

      "},{"location":"resources/faq/#im-seeing-an-internal-server-error-when-trying-to-access-my-kibana-logs","title":"I'm seeing an Internal Server Error when trying to access my Kibana logs","text":"

      No need to panic! This usually happens when a tenant has not been selected. To fix this, follow these steps:

      1. Go to \"Tenants\" on the left-hand menu of Kibana.
      2. Click on your tenant name.
      3. You'll see a pop-up window that says: \"Tenant Change\" and the name of your tenant.
      4. Go back to the \"Discover\" tab and attempt your query again.

      You should now be able to see your logs.

      "},{"location":"resources/faq/#im-unable-to-ssh-into-any-environment","title":"I'm unable to SSH into any environment","text":"

      I'm unable to SSH into any environment. I'm getting the following message: Permission denied (publickey). When I run drush sa no aliases are returned.

      This typically indicates an issue with Pygmy. You can find our troubleshooting docs for Pygmy here: https://pygmystack.github.io/pygmy/troubleshooting/

      "},{"location":"resources/faq/#how-can-i-check-the-status-of-a-build","title":"How can I check the status of a build?","text":""},{"location":"resources/faq/#how-do-i-add-a-cron-job","title":"How do I add a cron job?","text":""},{"location":"resources/faq/#how-do-i-add-a-new-route","title":"How do I add a new route?","text":""},{"location":"resources/faq/#how-do-i-remove-a-route","title":"How do I remove a route?","text":"

      Lagoon will detect the removal of routes from your .lagoon.yml during a deployment. Check the deployment logs to confirm that the routes were removed automatically or for instructions on how to remove them.

      "},{"location":"resources/faq/#when-i-run-pygmy-status-no-keys-are-loaded","title":"When I run pygmy status, no keys are loaded","text":"

      You'll need to load your SSH key into pygmy. Here's how: https://pygmystack.github.io/pygmy/ssh_agent

      "},{"location":"resources/faq/#when-i-run-drush-sa-no-aliases-are-returned","title":"When I run drush sa no aliases are returned","text":"

      This typically indicates an issue with Pygmy. You can find our troubleshooting docs for Pygmy here: https://pygmystack.github.io/pygmy/troubleshooting

      "},{"location":"resources/faq/#my-deployments-fail-with-a-message-saying-drush-needs-a-more-functional-environment","title":"My deployments fail with a message saying: \"drush needs a more functional environment\"","text":"

      This usually means that there is no database uploaded to the project. Follow our step-by-step guide to add a database to your project.

      "},{"location":"resources/faq/#when-i-start-pygmy-i-see-an-address-already-in-use-error","title":"When I start Pygmy I see an \"address already in use\" error?","text":"

      Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use Error: failed to start containers: amazeeio-haproxy

      This is a known error! Most of the time it means that there is already something running on port 80. You can find the culprit by running the following query:

      netstat -ltnp | grep -w ':80'\n

      That should list everything running on port 80. Kill the process running on port 80. Once port 80 is freed up, Pygmy should start up with no further errors.

      "},{"location":"resources/faq/#how-can-i-change-branchespr-environmentsproduction-on-my-project","title":"How can I change branches/PR environments/production on my project?","text":"

      You can make that change using the Lagoon API! You can find the documentation for this change in our GraphQL documentation.

      "},{"location":"resources/faq/#how-do-i-add-a-redirect","title":"How do I add a redirect?","text":""},{"location":"resources/faq/#how-can-i-add-new-users-and-ssh-keys-to-my-projectgroup","title":"How can I add new users (and SSH keys) to my project/group?","text":"

      This can be done via the Lagoon API. You can find the steps documentation for this change in our GraphQL documentation.

      "},{"location":"resources/faq/#can-an-environment-be-completely-deleted-to-roll-out-large-code-changes-to-my-project","title":"Can an environment be completely deleted to roll out large code changes to my project?","text":"

      Environments are fully built from scratch at each deploy, dropping the old database and files and pushing your code would result in a fresh clean build, Don\u2019t forget to re-sync!

      It is possible to delete an environment via GraphQL. You can find the instructions in our GraphQL documentation.

      "},{"location":"resources/faq/#how-do-i-get-my-new-environment-variable-to-show-up","title":"How do I get my new environment variable to show up?","text":"

      Once you've added a runtime environment variable to your production environment via GraphQL, then all you need to do a deploy in order to get your change to show up on your environment.

      "},{"location":"resources/faq/#how-do-i-sftp-files-tofrom-my-lagoon-environment","title":"How do I SFTP files to/from my Lagoon environment?","text":"

      For cloud hosting customers, you can SFTP to your Lagoon environment by using the following information:

      • Server Hostname: ssh.example.com
      • Port: 22
      • Username: <Project-Environment-Name>

      Your username is going to be the name of the environment you are connecting to, most commonly in the pattern PROJECTNAME-ENVIRONMENT.

      You may also be interested in checking out our new Lagoon Sync tool, which you can read about here: https://github.com/uselagoon/lagoon-sync

      Authentication also happens automatically via SSH Public & Private Key Authentication.

      "},{"location":"resources/faq/#i-dont-want-to-use-lets-encrypt-i-have-an-ssl-certificate-i-would-like-to-install","title":"I don't want to use Let's Encrypt. I have an SSL certificate I would like to install","text":"

      We can definitely help with that. Once you have your own SSL certificate, feel free to submit a ticket or send us a message via chat and we will be more than happy to help! You will need to send us the following files:

      • Certificate key (.key)
      • Certificate file (.crt)
      • Intermediate certificates (.crt)

      Also, you will need to set the tls-acme option in .lagoon.yml to false.

      "},{"location":"resources/faq/#is-it-possible-to-mount-an-external-volume-efsfusesmbetc-into-lagoon","title":"Is it possible to mount an external volume (EFS/Fuse/SMB/etc) into Lagoon?","text":"

      Mounting an external volume would need to be handled completely inside of your containers, Lagoon does not provide a provision for this type of connection as part of the platform.

      A developer can handle this by installing the necessary packages into the container (via the Dockerfile), and ensuring the volume mount is connected via a pre- or post-rollout task.

      "},{"location":"resources/faq/#is-there-a-way-to-stop-a-lagoon-build","title":"Is there a way to stop a Lagoon build?","text":"

      If you have a build that has been running for a long time, and want to stop it, you will need to reach out to support. Currently, builds can only be stopped by users with admin access to the cluster.

      "},{"location":"resources/faq/#we-installed-the-elasticsearchsolr-service-on-our-website-how-can-we-get-access-to-the-ui-port-92008983-from-a-browser","title":"We installed the Elasticsearch\\Solr service on our website. How can we get access to the UI (port 9200/8983) from a browser?","text":"

      We suggest only exposing web services (NGINX/Varnish/Node.js) in your deployed environments. Locally, you can get the ports mapped for these services by checking docker compose ps, and then load http://localhost:<port> in your browser.

      "},{"location":"resources/faq/#i-have-a-question-that-isnt-answered-here","title":"I have a question that isn't answered here","text":"

      You should contact your Lagoon administrator for any hosting-related enquiries, but you can also reach out to the Lagoon team via Discord or email at uselagoon@amazee.io.

      "},{"location":"resources/glossary/","title":"Glossary","text":"Term Definition Access Mode Controls how a persistent volume can be accessed. Active/Standby Active/Standby deployments, also known as blue/green deployments, are a way to seamlessly switch over your production content. Ansible An open-source suite of software tools that enables infrastructure as code. AWS Amazon Web Services Amazon S3 Glacier A secure and inexpensive S3 storage for long-term backup. BitBucket Git hosting owned by Atlassian, which integrates with their tools. Brew Homebrew is a package manager for OSX. CA A Certificate Authority is a trusted entity that issues Secure Sockets Layer (SSL) certificates. CDN Content Delivery Network - distributes content via caching CI Continuous Integration CIDR Classess Inter-Domain Routing - a method of assigning IP addresses CLI Command Line Interface Cluster A unified group of servers or VMs, distributed and managed together, which serves one entity to ensure high availability, load balancing, and scalability. CMS Content Management System Cron job The cron command-line utility is a job scheduler on Unix-like operating systems. Users who set up and maintain software environments use cron to schedule jobs, also known as cron jobs, to run periodically at fixed times, dates, or intervals. Composer A package manager DDEV A Docker-based PHP development environment popular in the Drupal community. DDoS Distributed Denial of Service DNS Domain Name System Docker A container engine using Linux features and automating application deployment. Docker Compose A tool for defining and running Docker applications via YAML files. Drupal Open-source Content Management System Drush A command line shell for Drupal. EC2 Amazon Elastic Compute Cloud Elasticsearch An open-source search engine. It provides a distributed, multi-tenant-capable full-text search engine with a web interface and schema-free JSON documents. Galera A generic synchronous multi-master replication library for transactional databases. Git A free and open-source distributed version control system. Git Hash/SHA A generated string that identifies each commit. Uses the SHA-1 algorithm GitHub A proprietary version control hosting company using Git. A subsidiary of Microsoft, it offers all of the distributed version control and source code management functionality of Git as well as additional features. GitLab A web-based Git repository manager with CI capabilities. Grafana An open-source analytics and monitoring solution. GraphQL An open-source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data. Harbor An open source container image registry that secures images with role-based access control, scans images for vulnerabilities, and signs images as trusted. Helm A package manager for Kubernetes, it helps you manage Kubernetes applications. Helm Charts Helm Charts help you define, install, and upgrade even the most complex Kubernetes application. HTTP HyperText Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. IAM AWS Identity and Access Management (IAM) is a web service that helps you securely control access to AWS resources. IDE An integrated development environment is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools, and a debugger. Ingress controller An Ingress controller is a specialized load balancer for Kubernetes (and other containerized) environments. IPTables A command line utility for configuring Linux kernel firewall. Jenkins An open-source automation server. JWT JSON Web Token. k3s A highly available, certified Kubernetes distribution. k3d k3d is a lightweight wrapper to run k3s in Docker. k8s Numeronym for Kubernetes (K + 8 letters + s) k8up K8up is a backup operator that will handle storage and app backups on a k8s/OpenShift cluster. Keycloak An open-source identity and access management system. Kibana An open-source data visualization plugin for Elasticsearch. It provides visualization capabilities on top of the content indexed on an Elasticsearch cluster. KinD Kubernetes in Docker - a tool for running local Kubernetes clusters using Docker container \u201cnodes\u201d. Kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI. kubectl The Kubernetes command-line tool which allows you to run commands against Kubernetes clusters. Kubernetes An open-source system for automating deployment, scaling, and management of containerized applications. Lagoon An open-source application delivery platform for Kubernetes. Lagoonize Configuration changes to allow your app to run on Lagoon. Lando A free, open source, cross-platform, local development environment and DevOps tool built on Docker. Laravel A free, open-source PHP web framework, following the model\u2013view\u2013controller (MVC) architectural pattern and based on Symfony. Let's Encrypt Aa free, automated, and open certificate authority (CA). MariaDB A community-developed, commercially supported fork of the MySQL relational database management system, intended to remain free and open-source software under the GNU General Public License. Master node A single node in the cluster on which a collection of processes which manage the cluster state are running. Microservice The practice of breaking up an application into a series of smaller, more specialized parts, each of which communicate with one another across common interfaces such as APIs and REST interfaces like HTTP MongoDB MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with schema. Multi-Tenant A single instance of software runs on a server and serves multiple tenants - a tenant is a group of users who share common access with privileges to access the software instance. The software is designed to provide each tenant a share of the resources. MVC Model-view-controller - an architectural pattern that separates an application into three main logical components: the model, the view, and the controller. Each of these components are built to handle specific development aspects of an application. MySQL MySQL is an open-source relational database management system. NGINX NGINX is a web server which can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. Node Single EC2 instance (AWS virtual machine) Node.js An open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside of a browser. Open source A type of computer software in which source code is released under a license in which the copyright holder grants users the rights to study, change, and distribute the software to anyone and for any purpose. Open-source software may be developed in a collaborative public manner. OpenSearch A community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data. OpenShift Container application platform that brings Docker and Kubernetes to the enterprise. PHP PHP (Personal Home Page) is a general-purpose programming language originally designed for web development. PhpStorm A development tool (IDE) for PHP and web projects. Pod A group of containers that are deployed together on the same host. The basic unit that Kubernetes works with. PostgreSQL A free and open-source relational database management system emphasizing extensibility and technical standards compliance. Public/Private Key Public-key encryption is a cryptographic system that uses two keys -- a public key known to everyone and a private or secret key known only to the recipient of the message. Puppet An open-source software configuration management and deployment tool. PV PersistentVolume - a piece of storage in the cluster that has been provisioned by an administrator or dynamically provisioned using Storage Classes. PVC Persistent Volume Claim - a request for storage by a user. Pygmy A Lagoon flavored local development system. Python Python is an open-source, interpreted, high-level, general-purpose programming language. RabbitMQ An open-source message-broker software. RBAC Role-Based Access Control RDS Relational Database Service Redis An open source, in-memory data store used as a database, cache, streaming engine, and message broker. Restic An open-source backup program. ROX Kubernetes access mode ReadOnlyMany - the volume can be mounted as read-only by many nodes. Ruby An interpreted, high-level, general-purpose programming language which supports multiple programming paradigms. It was designed with an emphasis on programming productivity and simplicity. In Ruby, everything is an object, including primitive data types. RWO Kubernetes access mode ReadWriteOnce - the volume can be mounted as read-write by a single node. ReadWriteOnce access mode still can allow multiple pods to access the volume when the pods are running on the same node. RWOP Kubernetes access mode ReadWriteOncePod - the volume can be mounted as read-write by a single Pod. Use ReadWriteOncePod access mode if you want to ensure that only one pod across whole cluster can read that PVC or write to it. This is only supported for CSI volumes and Kubernetes version 1.22+. RWX Kubernetes access mode ReadWriteMany - the volume can be mounted as read-write by many nodes. S3 Amazon Simple Storage Service. SBOM Software Bill of Materials. SHA-1 Secure Hash Algorithm 1, a hash function which takes an input and produces a 160-bit hash value known as a message digest \u2013 typically rendered as 40 hexadecimal digits. It was designed by the United States National Security Agency, and is a U.S. Federal Information Processing Standard. Solr An open-source enterprise-search platform, written in Java. SSH Secure Socket Shell, a network protocol that provides administrators with a secure way to access a remote computer. SSL Secure Socket Layer Storage Classes A StorageClass provides a way for Kubernetes administrators to describe the \"classes\" of storage they offer. Different classes might map to quality-of-service levels, or to backup policies, or to arbitrary policies determined by the cluster administrators Symfony Symfony is a PHP web application framework and a set of reusable PHP components/libraries, Drupal 8 and up are based on Symfony. TCP Transmission Control Protocol, a standard that defines how to establish and maintain a network conversation through which application programs can exchange data. TLS Transport Layer Security Trivy A simple and comprehensive vulnerability scanner for containers, suitable for CI. TTL Time to live or hop limit is a mechanism that limits the lifespan or lifetime of data in a computer or network. Varnish A powerful, open-source HTTP engine/reverse HTTP proxy that can speed up a website by caching (or storing) a copy of a webpage the first time a user visits. VM Virtual Machine Webhook A webhook is a way for an app like GitHub, GitLab, Bitbucket, etc, to provide other applications with immediate data and act upon something, like a pull request. YAML YAML Ain't Markup Language - YAML is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted."},{"location":"resources/tutorials-and-webinars/","title":"Tutorials, Webinars, and Videos","text":""},{"location":"resources/tutorials-and-webinars/#intro-to-lagoon-webinar","title":"Intro to Lagoon Webinar","text":"

      [Slides]

      "},{"location":"resources/tutorials-and-webinars/#advance-lando-ing-with-lagoon","title":"Advance Lando-ing with Lagoon","text":""},{"location":"resources/tutorials-and-webinars/#webinar-lagoon-insights","title":"Webinar - Lagoon Insights","text":""},{"location":"resources/tutorials-and-webinars/#lagoon-deployment-demo","title":"Lagoon Deployment Demo","text":""},{"location":"resources/tutorials-and-webinars/#how-to-manage-multiple-drupal-sites-with-lagoon","title":"How to Manage Multiple Drupal Sites with Lagoon","text":"

      [Slides]

      "},{"location":"resources/tutorials-and-webinars/#kubernetes-webinar-101","title":"Kubernetes Webinar 101","text":"

      [Slides]

      "},{"location":"resources/tutorials-and-webinars/#kubernetes-webinar-102","title":"Kubernetes Webinar 102","text":"

      [Slides]

      "},{"location":"resources/tutorials-and-webinars/#server-side-rendering-best-practices-how-we-run-decoupled-websites-with-110-million-hits-per-month","title":"Server-side Rendering Best Practices: How We Run Decoupled Websites with 110 Million Hits per Month","text":""},{"location":"resources/tutorials-and-webinars/#lagoon-opensource-docker-build-deployment-system-with-full-drupal-support","title":"Lagoon: OpenSource Docker Build & Deployment System with Full Drupal Support","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-fix-an-internal-server-error-in-kibana","title":"How do I fix an internal server error in Kibana?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-add-a-new-route","title":"How do I add a new route?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-check-the-status-of-a-build","title":"How do I check the status of a build?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-add-a-redirect-in-lagoon","title":"How do I add a redirect in Lagoon?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-download-a-database-dump","title":"How do I download a database dump?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-add-a-cron-job","title":"How do I add a cron job?","text":""},{"location":"resources/tutorials-and-webinars/#deploying-web-applications-on-kubernetes-toby-bellwood-techweek21-talk","title":"Deploying web applications on Kubernetes - Toby Bellwood | Techweek21 Talk","text":""},{"location":"resources/tutorials-and-webinars/#dealing-with-unprecedented-scale-during-covid-19-sean-hamlin-techweek21-talk","title":"Dealing with unprecedented scale during Covid-19 - Sean Hamlin| Techweek21 Talk","text":""},{"location":"resources/tutorials-and-webinars/#silverstripe-from-local-to-live-on-lagoon-thom-toogood-techweek21-talk","title":"Silverstripe from local to live on Lagoon -Thom Toogood | Techweek21 Talk","text":""},{"location":"using-lagoon-advanced/","title":"Using Lagoon - Advanced","text":"

      This section covers some of the more advanced features and functionality of Lagoon. If you're new to Lagoon, start with Using Lagoon - the Basics.

      If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our Discord.

      "},{"location":"using-lagoon-advanced/active-standby/","title":"Active/Standby","text":""},{"location":"using-lagoon-advanced/active-standby/#configuration","title":"Configuration","text":"

      To change an existing project to support active/standby you'll need to configure some project settings with the Lagoon API.

      • productionEnviromment should be set to the branch name of the current active environment.
      • standbyProductionEnvironment should be set to the branch name of the current environment that is in standby.
      Update project settings
      mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionEnvironment:\"production-brancha\"\nstandbyProductionEnvironment:\"production-branchb\"\n}\n}){\nstandbyProductionEnvironment\nname\nproductionEnvironment\n}\n}\n
      "},{"location":"using-lagoon-advanced/active-standby/#lagoonyml-production_routes","title":".lagoon.yml - production_routes","text":"

      To configure a project for active/standby in the .lagoon.yml file, you'll need to configure the production_routes section with any routes you want to attach to the active environment, and any routes to the standby environment. During an active/standby switch, these routes will migrate between the two environments.

      If you have two production environments, production-brancha and production-branchb, with the current active production environment as production-brancha then:

      • Routes under production_routes.active will direct you to production-brancha.
      • Routes under production_routes.standby will direct you to production-branchb.

      During an active/standby switch, the routes will swap:

      • Routes under production_routes.active will direct you to production-branchb.
      • Routes under production_routes.standby will direct you to production-brancha.
      .lagoon.yml
      production_routes:\nactive:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'false'\n- active.example.com:\ntls-acme: 'false'\nstandby:\nroutes:\n- nginx:\n- standby.example.com:\ntls-acme: 'false'\n

      Info

      Any routes that are under the section environments..routes will not be moved as part of active/standby. These routes will always be attached to the environment as defined. Ensure that if you do need a specific route to be migrated during an active/standby switch, that you remove them from the environments section and place them under the production_routes section specific to if it should be an active or standby route. See more about routes in .lagoon.yml.

      "},{"location":"using-lagoon-advanced/active-standby/#triggering-a-switch-event","title":"Triggering a switch event","text":""},{"location":"using-lagoon-advanced/active-standby/#via-the-ui","title":"via the UI","text":"

      To trigger the switching of environment routes, you can visit the standby environment in the Lagoon UI and click on the button labeled Switch Active/Standby environments. You will be prompted to confirm your action.

      Once confirmed, it will take you to the tasks page where you can view the progress of the switch.

      "},{"location":"using-lagoon-advanced/active-standby/#via-the-api","title":"via the API","text":"

      To trigger an event to switch the environments, run the following GraphQL mutation. This will tell Lagoon to begin the process.

      Active Standby Switch
      mutation ActiveStandby {\nswitchActiveStandby(\ninput:{\nproject:{\nname:\"drupal-example\"\n}\n}\n){\nid\nremoteId\n}\n}\n

      A task is created in the current active environment tasks tab when a switch event is triggered. You can check the status of the switch here.

      Using the remoteId from the switchActiveStandby mutation, we can also check the status of the task.

      Check task status
      query getTask {\ntaskByRemoteId(id: \"<remoteId>\") {\nid\nname\ncreated\nstarted\ncompleted\nstatus\nlogs\n}\n}\n
      "},{"location":"using-lagoon-advanced/active-standby/#drush-aliases","title":"drush aliases","text":"

      By default, projects will be created with the following aliases that will be available when active/standby is enabled on a project.

      • lagoon-production
      • lagoon-standby

      The lagoon-production alias will point to whichever site is defined as productionEnvironment, and lagoon-standby will always point to the site that is defined as standbyProductionEnvironment.

      These aliases are configurable by updating the project. Be aware that changing them may require you to update any scripts that rely on them.

      Update Drush Aliases
      mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionAlias:\"custom-lagoon-production-alias\"\nstandbyAlias:\"custom-lagoon-standby-alias\"\n}\n}){\nproductionAlias\nname\nstandbyAlias\n}\n}\n
      "},{"location":"using-lagoon-advanced/active-standby/#disabling-activestandby","title":"Disabling Active/Standby","text":"

      You need to decide which of these 2 branches are the one you want to go forward with as being the main environment and then ensure it is set as the active branch (e.g production-branchb).

      1. In your .lagoon.yml file in this (now active) branch, move the routes from the production_routes.active.routes section into the environments.production-branchb section. This will mean that they are then attached to the production-branchb environment only.
      2. Once you've done this, you can delete the entire production_routes section from the .lagoon.yml file and re-deploy the production-branchb environment.
      3. If you no longer need the other branch production-brancha, you can delete it.
      4. If you keep the branch in Git, you should also remove the production_routes from that branch .lagoon.yml too, just to prevent any confusion. The branch will remain as production type unless you delete and redeploy it (wiping all storage and databases, etc).
      5. Once you've got the project in a state where there is only the production-branchb production environment, and all the other environments are development, update the project to remove the standbyProductionEnvironment from the project so that the active/standby labels on the environments go away.
      Turn off Active/Standby
      mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionEnvironment:\"production-branchb\"\nstandbyProductionEnvironment:\"\"\n}\n}){\nstandbyProductionEnvironment\nname\nproductionEnvironment\n}\n}\n
      "},{"location":"using-lagoon-advanced/active-standby/#notes","title":"Notes","text":"

      When the active/standby trigger has been executed, the productionEnvironment and standbyProductionEnvironments will switch within the Lagoon API. Both environments are still classed as production environment types. We use the productionEnvironment to determine which one is labelled as active. For more information on the differences between environment types, read the documentation for environment types

      Get environments via GraphQL
      query projectByName {\nprojectByName(name:\"drupal-example\"){\nproductionEnvironment\nstandbyProductionEnvironment\n}\n}\n

      Before switching environments:

      Results of environment query
      {\n\"data\": {\n\"projectByName\": {\n\"productionEnvironment\": \"production-brancha\",\n\"standbyProductionEnvironment\": \"production-branchb\"\n}\n}\n}\n

      After switching environments:

      Results of environment query
      {\n\"data\": {\n\"projectByName\": {\n\"productionEnvironment\": \"production-branchb\",\n\"standbyProductionEnvironment\": \"production-brancha\"\n}\n}\n}\n
      "},{"location":"using-lagoon-advanced/blackfire/","title":"Blackfire","text":""},{"location":"using-lagoon-advanced/blackfire/#blackfire-variables","title":"Blackfire variables","text":"

      The Lagoon Base Images have support for Blackfire included in the PHP Images (see the PHP images).

      In order to use Blackfire in Lagoon, these three environment variables need to be defined:

      Environment Variable Default Description BLACKFIRE_ENABLED (not set) Used to enable blackfire extension with setting variable to TRUE or true BLACKFIRE_SERVER_ID (not set) Set to Blackfire Server ID provided by Blackfire.io. Needs BLACKFIRE_ENABLED set to true BLACKFIRE_SERVER_TOKEN (not set) Set to Blackfire Server Token provided by Blackfire.io. Needs BLACKFIRE_ENABLED set to true"},{"location":"using-lagoon-advanced/blackfire/#local-usage-of-blackfire","title":"Local Usage of Blackfire","text":"

      For local usage of Blackfire with Lagoon Images, set the above environment variables for the PHP container. Here is an example for a Drupal application:

      docker-compose.yml
      services:\n[[snip]]\nphp:\n[[snip]]\nenvironment:\n<< : *default-environment # loads the defined environment variables from the top\nBLACKFIRE_ENABLED: TRUE\nBLACKFIRE_SERVER_ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\nBLACKFIRE_SERVER_TOKEN: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n

      After restarting the containers, you should be able to profile via the Blackfire Browser Plugin or the Blackfire CLI.

      "},{"location":"using-lagoon-advanced/blackfire/#remote-usage-of-blackfire","title":"Remote Usage of Blackfire","text":"

      In order to use Blackfire in deployed Lagoon environments the same enviornment variables need to be set, this time via one of the possibilities of adding environment variables to Lagoon. Important: Environment variables set in the docker-compose.yml for local development are not used by Lagoon in remote environments!

      "},{"location":"using-lagoon-advanced/blackfire/#debugging","title":"Debugging","text":"

      The Blackfire Agent running in the PHP containers outputs logs as normal container logs, which can be seen via docker compose logs or via the Lagoon Logging Infrastructure for remote environments.

      By default the Logs are set to Level 3 (info), via the environment variable BLACKFIRE_LOG_LEVEL the level can be increased to 4 (debug) to generate more debugging ouput.

      "},{"location":"using-lagoon-advanced/custom-tasks/","title":"Custom Tasks","text":"

      Lagoon allows for the definition of custom tasks at environment, project, and group levels. This is presently accomplished through the GraphQL API and exposed in the UI.

      "},{"location":"using-lagoon-advanced/custom-tasks/#defining-a-custom-task","title":"Defining a custom task","text":"

      When defining a task you need to determine a number of things.

      "},{"location":"using-lagoon-advanced/custom-tasks/#which-task-do-you-want-to-run","title":"Which task do you want to run?","text":"

      In most cases, the custom task you will be running will be something that will be run in a shell on one of the containers in your application.

      For instance, in a Node.js application, you may be interested in running a yarn audit in your node container. The command, in this case, would simply be yarn audit.

      "},{"location":"using-lagoon-advanced/custom-tasks/#where-will-this-task-be-run","title":"Where will this task be run?","text":"

      We have to define where this task will be run -- this means two things, first, which project or environment we'll be running the task in, and, second, which service.

      Let's say that we'd like for our yarn audit task to be available to run in any environment in a specific project (let's say the project's ID is 42 for this example). We will therefore specify the project's ID when we create our task definition, as we will describe below.

      The second question regards which environment we want to target with our task. When you set up your project, you specify several services in your docker-compose.yml. We use this service name to determine where the command is actually executed.

      "},{"location":"using-lagoon-advanced/custom-tasks/#who-can-run-this-task","title":"Who can run this task?","text":"

      There are three levels of permissions to the task system corresponding to project roles. Guest, Developer, and Maintainer -- from most restrictive to least restrictive, with each role being able to invoke the tasks defined for the lower role (Developer can see Guest tasks, Maintainers can see all tasks).

      "},{"location":"using-lagoon-advanced/custom-tasks/#defining-a-task","title":"Defining a task","text":"

      Tasks are defined by calling the addAdvancedTaskDefinition mutation. Importantly, this simply defines the task, it does not invoke it. It simply makes it avaliable to be run in an environment.

      Schematically, the call looks like this

      Define a new task
      mutation addAdvancedTask {\naddAdvancedTaskDefinition(input:{\nname: string,\nconfirmationText: string,\ntype: [COMMAND|IMAGE],\n[project|environment]: int,\ndescription: string,\nservice: string,\ncommand: string,\nadvancedTaskDefinitionArguments: [\n{\nname: \"ENVIROMENT_VARIABLE_NAME\",\ndisplayName: \"Friendly Name For Variable\",\ntype: [STRING | ENVIRONMENT_SOURCE_NAME | ENVIRONMENT_SOURCE_NAME_EXCLUDE_SELF]\n}\n]\n}) {\n... on AdvancedTaskDefinitionImage {\nid\nname\ndescription\nservice\nimage\nconfirmationText\nadvancedTaskDefinitionArguments {\ntype\nrange\nname\ndisplayName\n}\n...\n}\n... on AdvancedTaskDefinitionCommand {\nid\nname\ndescription\nservice\ncommand\nadvancedTaskDefinitionArguments {\ntype\nrange\nname\ndisplayName\n}\n...\n}\n}\n}\n

      Fields name and description are straightforward. They're simply the name and description of the task - these are used primarily in the UI.

      The type field needs some explanation - for now, only platform admins are able to define IMAGE type commands - these allow for the running of specifically created task images as tasks, rather than targeting existing services. Most tasks, though, will be COMMAND types.

      The [project|environment] set of fields will attach the task to either the project or environment (depending on the key you use), with the value being the id. In the case we're considering for our yarn audit we will specify we're targeting a project with an ID of 42.

      We put the service we'd like to target with our task in the service field, and command is the actual command that we'd like to run.

      "},{"location":"using-lagoon-advanced/custom-tasks/#arguments-passed-to-tasks","title":"Arguments passed to tasks","text":"

      In order to give more flexibility to the users invoking the tasks via the Lagoon UI, we support defining task arguments. These arguments are displayed as text boxes or drop downs and are required for the task to be invoked.

      Here is an example of how we might set up two arguments.

      Define task arguments
      advancedTaskDefinitionArguments: [\n{\nname: \"ENV_VAR_NAME_SOURCE\",\ndisplayName: \"Environment source\",\ntype: ENVIRONMENT_SOURCE_NAME\n},\n{\nname: \"ENV_VAR_NAME_STRING\",\ndisplayName: \"Echo value\",\ntype: STRING\n}\n]\n})\n

      This fragment shows both types of arguments the system currently supports. The first, ENV_VAR_NAME_SOURCE is an example of type ENVIRONMENT_SOURCE_NAME, which will present the user of the UI a dropdown of the different environments inside of a project. If we don't want to allow the task to be run on the invoking environment (say, if we want to import a database from another environment), we can restrict the environment list by using ENVIRONMENT_SOURCE_NAME_EXCLUDE_SELF. The second ENV_VAR_NAME_STRING is of type STRING and will present the user with a textbox to fill in.

      The values that the user selects will be available as environment variables in the COMMAND type tasks when the task is run.

      "},{"location":"using-lagoon-advanced/custom-tasks/#system-wide-tasks","title":"System wide tasks","text":"

      Only your Lagoon administrator is able to register system wide tasks. These tasks will appear for all environments, subject to the user's permission to invoke them.

      Creating a system wide task is almost exactly the same as other task types, with two exceptions.

      First, you set the systemWide: true field in your addAdvancedTaskDefinition mutation.

      Second, you make sure you have not specified groupName, project, or environment - which would defeat the purpose, since these fields are used to target specific contexts.

      "},{"location":"using-lagoon-advanced/custom-tasks/#confirmation","title":"Confirmation","text":"

      When the confirmationText field has text, it will be displayed with a confirmation modal in the UI before the user is able to run the task.

      "},{"location":"using-lagoon-advanced/custom-tasks/#invoking-the-task","title":"Invoking the task","text":"

      With the task now defined, the task should now show up in the tasks dropdown in the Lagoon UI.

      We are also able to invoke it via the GraphQL api by using the invokeTask mutation.

      Invoke task
      mutation invokeTask {\ninvokeRegisteredTask(advancedTaskDefinition: int, environment: int) {\nstatus\n}\n}\n

      Note that invokeTask will always invoke a task on a specific environment.

      "},{"location":"using-lagoon-advanced/custom-tasks/#example","title":"Example","text":"

      Let's now setup our yarn audit example.

      Define task mutation
      mutation runYarnAudit {\naddAdvancedTaskDefinition(input:{\nname:\"Run yarn audit\",\nproject: 42,\ntype:COMMAND,\npermission:DEVELOPER,\ndescription: \"Runs a 'yarn audit'\",\nservice:\"node\",\ncommand: \"yarn audit\"})\n{\nid\n}\n}\n

      This, then, will define our task for our project (42). When we run this, we will get the ID of the task definition back (for argument's sake, let's say it's 9)

      This task will now be available to run from the UI for anyone with the DEVELOPER or MAINTAINER role.

      "},{"location":"using-lagoon-advanced/deploytarget-configs/","title":"DeployTarget Configurations","text":"

      DeployTarget configurations are a way to define how a project can deploy to multiple clusters. This feature is useful when you have two clusters, one which could be dedicated for running production workloads, and another that is used for running development workloads.

      The configuration for these is not limited to just a production/development split though, so projects could perceivably target more than one specific cluster.

      The basic idea of a DeployTarget configuration is that it is a way to easily define how a project can deploy across multiple clusters. It uses the existing methods of checking if a environment is valid

      "},{"location":"using-lagoon-advanced/deploytarget-configs/#important-information","title":"Important Information","text":"

      Before going in to how to configure a project to leverage DeployTarget configurations, there are some things you need to know.

      1. Environments now have two new fields available to them to identify which DeployTarget(Kubernetes or OpenShift) they have been created on.

        1. kubernetesNamespacePattern
        2. kubernetes
      2. Once an environment has been deployed to a specific DeployTarget, it will always deploy to this target, even if the DeployTarget configuration, or project configuration is modified.

        1. This offers some safety to existing environments by preventing changes to DeployTarget configurations from creating new environments on different clusters.
        2. This is a new feature that is part of Lagoon, not specifically for DeployTarget configurations.
      3. By default, if no DeployTarget configurations are associated to a project, that project will continue to use the existing methods to determine which environments to deploy. These are the following fields used for this.

        1. branches
        2. pullrequests
        3. kubernetesNamespacePattern
        4. kubernetes
      4. As soon as any DeployTarget configurations are added to a project, then all future deployments for this project will use these configurations. What is defined in the project is ignored, and overwritten to inform users that DeployTarget configurations are in use.

      5. DeployTarget configurations are weighted, which means that a DeployTarget configuration with a larger weight is prioritized over one with lower weight.

        1. The order in which they are returned by the query is the order they are used to determine where an environment should be deployed.

      6. Active/Standby environments can only be deployed to the same cluster, so your DeployTarget configuration must be able to deploy both those environments to the same target.

      7. Projects that leverage the promote feature of Lagoon must be aware that DeployTarget configurations are ignored for the destination environment.

        1. The destination environment will always be deployed to the same target that the source environment is on, your DeployTarget configuration MUST be configured correctly for this source environment.
        2. For safety, it is best to define both the source and destination environment in the same DeployTarget configuration branch regex.
      "},{"location":"using-lagoon-advanced/deploytarget-configs/#configuration","title":"Configuration","text":"

      To configure a project to use DeployTarget configurations, the first step is to add a configuration to a project.

      The following GraphQL mutation can be used, this particular example will add a DeployTarget configuration to the project with the project ID 1. It will allow only the branches that match the name main to be deployed, and pullrequests is set to false. This means no other branches will be able to deploy to this particular target, and no pull requests will be deployed to this particular target. The deployTarget is ID 1, this could be a Kubernetes cluster in a specific region, or designated for a specific type of workload (production or development).

      Configure DeployTarget
      mutation addDeployTargetConfig{\naddDeployTargetConfig(input:{\nproject: 1\nbranches: \"main\"\npullrequests: \"false\"\ndeployTarget: 1\nweight: 1\n}){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n

      Info

      deployTarget is an alias the Kubernetes or OpenShift ID in the Lagoon API

      It is also possible to configure multiple DeployTarget configurations.

      The following GraphQL mutation can be used, this particular example will add a DeployTarget configuration to the same project as above.

      It will allow only the branches that regex match with ^feature/|^(dev|test|develop)$ to be deployed, and pullrequests is set to true so all pull requests will reach this target.

      The targeted cluster in this example is ID 2, which is a completely different Kubernetes cluster to what was defined above for the main branch.

      Configure DeployTarget
      mutation addDeployTargetConfig{\naddDeployTargetConfig(input:{\nproject: 1\nbranches: \"^feature/|^(dev|test|develop)$\"\npullrequests: \"true\"\ndeployTarget: 2\nweight: 1\n}){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n

      Once these have been added to a project, you can return all the DeployTarget configurations for a project using the following query

      Get DeployTargets
      query deployTargetConfigsByProjectId{\ndeployTargetConfigsByProjectId(project:1){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n# result:\n{\n\"data\": {\n\"deployTargetConfigsByProjectId\": [\n{\n\"id\": 1,\n\"weight\": 1,\n\"branches\": \"main\",\n\"pullrequests\": \"false\",\n\"deployTargetProjectPattern\": null,\n\"deployTarget\": {\n\"name\": \"production-cluster\",\n\"id\": 1\n},\n\"project\": {\n\"name\": \"my-project\"\n}\n},\n{\n\"id\": 2,\n\"weight\": 1,\n\"branches\": \"^feature/|^(dev|test|develop)$\",\n\"pullrequests\": \"true\",\n\"deployTargetProjectPattern\": null,\n\"deployTarget\": {\n\"name\": \"development-cluster\",\n\"id\": 2\n},\n\"project\": {\n\"name\": \"my-project\"\n}\n}\n]\n}\n}\n
      "},{"location":"using-lagoon-advanced/nodejs/","title":"Node.js Graceful Shutdown","text":"

      Node.js has integrated web server capabilities. Plus, with Express, these can be extended even more.

      Unfortunately, Node.js does not handle shutting itself down very nicely out of the box. This causes many issues with containerized systems. The biggest issue is that when a Node.js container is told to shut down, it will immediately kill all active connections, and does not allow them to stop gracefully.

      This part explains how you can teach Node.js to behave like a real web server: finishing active requests and then gracefully shutting down.

      As an example we use a no-frills Node.js server with Express:

      app.js
      const express = require('express');\nconst app = express();\n// Adds a 5 second delay for all requests.\napp.use((req, res, next) => setTimeout(next, 5000));\napp.get('/', function (req, res) {\nres.send(\"Hello World\");\n})\nconst server = app.listen(3000, function () {\nconsole.log('Example app listening on port 3000!');\n})\n

      This will just show \"Hello World\" in when the web server is visited at localhost:3000. Note the 5 second delay in the response in order to simulate a request that takes some computing time.

      "},{"location":"using-lagoon-advanced/nodejs/#part-a-allow-requests-to-be-finished","title":"Part A: Allow requests to be finished","text":"

      If we run the above example and stop the Node.js process while the request is handled (within the 5 seconds), we will see that the Node.js server immediately kills the connection, and our browser will show an error.

      To explain to our Node.js server that it should wait for all the requests to be finished before actually stopping itself, we add the following code:

      Graceful Shutdown
      const startGracefulShutdown = () => {\nconsole.log('Starting shutdown of express...');\nserver.close(function () {\nconsole.log('Express shut down.');\n});\n}\nprocess.on('SIGTERM', startGracefulShutdown);\nprocess.on('SIGINT', startGracefulShutdown);\n

      This basically calls server.close(), which will instruct the Node.js HTTP server to:

      1. Not accept any more requests.
      2. Finish all running requests.

      It will do this on SIGINT (when you press CTRL + C) or on SIGTERM (the standard signal for a process to terminate).

      With this small addition, our Node.js will wait until all requests are finished, and then stop itself.

      If we were not running Node.js in a containerized environment, we would probably want to include some additional code that actually kills the Node.js server after a couple of seconds, as it is technically possible that some requests are either taking very long or are never stopped. Because it is running in a containerized system, if the container is not stopped, Docker and Kubernetes will run a SIGKILL after a couple of seconds (usually 30) which cannot be handled by the process itself, so this is not a concern for us.

      "},{"location":"using-lagoon-advanced/nodejs/#part-b-yarn-and-npm-children-spawning-issues","title":"Part B: Yarn and NPM children spawning issues","text":"

      If we only implemented Part A, we would have a good experience. In the real world, many Node.js systems are built with Yarn or NPM, which provide not only package management systems to Node.js, but also script management.

      With these script functionalities, we simplify the start of our application. We can see many package.json files that look like:

      package.json
      {\n\"name\": \"node\",\n\"version\": \"1.0.0\",\n\"main\": \"index.js\",\n\"license\": \"MIT\",\n\"dependencies\": {\n\"express\": \"^4.15.3\"\n},\n\"scripts\": {\n\"start\": \"node index.js\"\n}\n}\n

      and with the defined scripts section we can run our application just with:

      Start application
      yarn start\n

      or

      Start application
      npm start\n

      This is nice and makes the life of developers easier. So we also end up using the same within Dockerfiles:

      .dockerfile
      CMD [\"yarn\", \"start\"]\n

      Unfortunately there is a big problem with this:

      If yarn or npm get a SIGINT or SIGTERM signal, they correctly forward the signal to spawned child process (in this case node index.js). However, it does not wait for the child processes to stop. Instead, yarn/npm immediately stop themselves. This signals to Docker/Kubernetes that the container is finished and Docker/Kubernetes will kill all children processes immediately. There are issues open for Yarn and NPM but unfortunately they are not solved yet.

      The solution for the problem is to not use Yarn or NPM to start your application and instead use node directly:

      .dockerfile
      CMD [\"node\", \"index.js\"]\n

      This allows Node.js to properly terminate and Docker/Kubernetes will wait for Node.js to be finished.

      "},{"location":"using-lagoon-advanced/private-repositories/","title":"Private Repositories","text":"
      1. Give the deploy key access to the Git repositories in your GitHub/GitLab/BitBucket.
      2. Add ARG LAGOON_SSH_PRIVATE_KEY to your dockerfile (before the step of the build process that needs the SSH key).
      3. Add RUN /lagoon/entrypoints/05-ssh-key.sh to your dockerfile (before the step of the build process that needs the SSH key).
      Set up your private respository
      RUN /lagoon/entrypoints/05-ssh-key.sh && composer install && rm /home/.ssh/key\n
      "},{"location":"using-lagoon-advanced/project-default-users-keys/","title":"Project Default Users and SSH Keys","text":"

      When a Lagoon project is created, by default an associated SSH \"project key\" is generated and the private key made available inside the CLI pods of the project. A service account default-user@project is also created and given MAINTAINER access to the project. The SSH \"project key\" is attached to that default-user@project.

      The result of this is that from inside the CLI pod of any environment it is possible to SSH to any other environment within the same project. This access is used for running tasks from the command line such as synchronizing databases between environments (e.g. drush sql-sync).

      There is more information on the MAINTAINER role available in the RBAC documentation.

      "},{"location":"using-lagoon-advanced/project-default-users-keys/#specifying-the-project-key","title":"Specifying the project key","text":"

      It is possible to specify an SSH private key when creating a project, but this is not recommended as it has security implications.

      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/","title":"Setting up Xdebug with Lagoon","text":""},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#enable-xdebug-extension-in-the-containers","title":"Enable Xdebug extension in the containers","text":"

      The Lagoon base images are pre-configured with Xdebug but, for performance reasons, the extension is not loaded by default. To enable the extension, the XDEBUG_ENABLE environment variable must be set to true:

      • Locally (Pygmy and Lando)

        1. If your project is based off the lagoon-examples docker-compose.yml file, the environment variable already exists. Uncomment these lines.
        2. Make sure to rebuild and restart the containers after changing any environment variables. - Remotely (dev/prod)
        3. You can use the Lagoon API to add the environment variable to a running environment.
        4. Make sure to redeploy the environment after changing this any environment variables.
      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#activate-xdebug-extension","title":"Activate Xdebug Extension","text":"

      The default Xdebug configuration requires a \"trigger\" to activate the extension and start a session. You can view the complete documentation for activating the debugger but the most straightforward instructions are below.

      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#cli","title":"CLI","text":"

      The php-cli image is configured to always activate Xdebug when it\u2019s enabled, so there is nothing else that needs to be done. Running any PHP script will start a debugging session.

      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#web","title":"Web","text":"

      Install a browser extension to set/unset an activation cookie.

      Make sure the activation cookie is set for the website you want to start debugging.

      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#configure-phpstorm","title":"Configure PHPStorm","text":"
      1. PHPStorm is configured correctly by default.
      2. Click the \u201cStart Listening for PHP Debug Connections\u201d icon in the toolbar.
      3. Load a webpage or run a Drush command.
      4. On first run, PHPStorm should pop up a window asking you to:
        1. Confirm path mappings.
        2. Select the correct file locally that was triggered on the server.
      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#configure-visual-studio-code","title":"Configure Visual Studio Code","text":"
      1. Install the PHP Debug extension by Felix Becker.
      2. Follow the instructions to create a basic launch.json for PHP.
      3. Add correct path mappings. For a typical Drupal site, an example would be:

        launch.json
        \"pathMappings\": {\n\"/app\": \"${workspaceFolder}\",\n},\n
      4. In the Run tab of Visual Studio Code, click the green arrow next to \u201cListen for Xdebug\u201d

      5. Load a webpage or run a Drush command.
      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#troubleshooting","title":"Troubleshooting","text":"
      • Verify that Xdebug extension is loaded. The best way to do this on a Drupal site is to check the PHP status page. You should find a section about Xdebug and all its settings.
      • Verify the following settings:
      Directive Local Value xdebug.mode debug xdebug.client_host host.docker.internal or your IP address xdebug.client_port 9003
      • Enable Xdebug logging within the running containers. All you need is an environment variable named XDEBUG_LOG set to anything to enable logging. Logs will be saved to /tmp/xdebug.log. If you are using the lagoon-examples then you can uncomment some existing lines.
      • Verify you have the activation cookie set. You can use the browser tools in Chrome or Firefox to check that a XDEBUG_SESSION cookie is set.
      • Verify that Xdebug is activated and attempting to start a debug session with your computer. You can use the nc -l 9003 command line tool to open the Xdebug port. If everything is configured in PHP correctly, you should get a Xdebug init response when you load a webpage or run a Drush command.
      • Verify that the xdebug.client_host has been set correctly. For local debugging with Docker for Mac, this value should be host.docker.internal. For remote debugging this value should be your IP address. If this value was not correctly determined, you can override it by setting the DOCKERHOST environment variable.
      • When using Lando locally, in order to debug scripts run from the CLI you must first SSH into the CLI container via lando ssh. You won\u2019t be able to debug things by running lando drush or lando php.
      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#mac-specific-troubleshooting","title":"Mac specific troubleshooting","text":"
      • Verify that Docker for Mac networking is not broken. On your host machine, run nc -l 9003, then in a new terminal window, run:

        Verify Docker for Mac networking
        docker compose run cli nc -zv host.docker.internal 9003\n

        You should see a message like: host.docker.internal (192.168.65.2:9003) open.

      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#linux-specific-troubleshooting","title":"Linux specific troubleshooting","text":"
      • Ensure the host host.docker.internal can be reached. If docker has been installed manually (and not through Docker Desktop), this host will not resolve. You can force this to resolve with an additional snippet in your docker-compose.yml file (instructions taken from this blog post):

        docker-compose.yml alterations for Linux
          services:\ncli:\nextra_hosts:\nhost.docker.internal: host-gateway\nphp:\nextra_hosts:\nhost.docker.internal: host-gateway\n
      "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#xdebug-2","title":"Xdebug 2","text":"

      If you're running older images you may still be using Xdebug version 2. All the information on this page still applies, but some of the configuration names and values have changes:

      v3 v2 xdebug.mode xdebug.remote_enabled On xdebug.client_host xdebug.remote_host host.docker.internal or your IP address xdebug.client_port xdebug.remote_port 9000"},{"location":"using-lagoon-advanced/simplesaml/","title":"SimpleSAML","text":""},{"location":"using-lagoon-advanced/simplesaml/#simplesamlphp","title":"SimpleSAMLphp","text":"

      This is an example of how to add SimpleSAMLphp to your project and then modify configuration to serve it via NGINX.

      "},{"location":"using-lagoon-advanced/simplesaml/#requirements","title":"Requirements","text":"

      Add SimpleSAMLphp to your project:

      Add SimpleSAMLphp to your project via Composer
      composer req simplesamlphp/simplesamlphp\n
      "},{"location":"using-lagoon-advanced/simplesaml/#modify-configuration-for-simplesamlphp","title":"Modify configuration for SimpleSAMLphp","text":"

      Copy authsources.php and config.php from vendor/simplesamlphp/simplesamlphp/config-templates to somewhere outside vendor directory, such as conf/simplesamlphp. You also need saml20-idp-remote.php from vendor/simplesamlphp/simplesamlphp/metadata-templates.

      In config.php set following values for Lagoon:

      Base URL path where SimpleSAMLphp is accessed:

      config.php
        'baseurlpath' => 'https://YOUR_DOMAIN.TLD/simplesaml/',\n

      Store sessions to database:

      config.php
        'store.type'                    => 'sql',\n  'store.sql.dsn'                 => vsprintf('mysql:host=%s;port=%s;dbname=%s', [\n    getenv('MARIADB_HOST'),\n    getenv('MARIADB_PORT'),\n    getenv('MARIADB_DATABASE'),\n  ]),\n

      Alter other settings to your liking:

      • Check the paths for logs and certs.
      • Secure SimpleSAMLphp dashboard.
      • Set up level of logging.
      • Set technicalcontact and timezone.

      Add authsources (IdPs) to authsources.php, see example:

      authsources.php
        'default-sp' => [\n    'saml:SP',\n    // The entity ID of this SP.\n    'entityID' => 'https://YOUR_DOMAIN.TLD',\n    // The entity ID of the IdP this should SP should contact.\n    // Can be NULL/unset, in which case the user will be shown a list of available IdPs.\n    'idp' => 'https://YOUR_IDP_DOMAIN.TLD',\n    // The URL to the discovery service.\n    // Can be NULL/unset, in which case a builtin discovery service will be used.\n    'discoURL' => null,\n    'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',\n    'certificate' => '/app/conf/simplesamlphp/certs/saml.crt',\n    'privatekey' => '/app/conf/simplesamlphp/certs/saml.pem',\n    'redirect.sign' => TRUE,\n    'redirect.validate' => TRUE,\n    'authproc' => [\n      50 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:1.3.6.1.4.1.5923.1.1.1.6' => 'eduPersonPrincipalName',\n      ],\n      51 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:2.5.4.42' => 'givenName',\n      ],\n      52 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:2.5.4.4' => 'sn',\n      ],\n      53 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:0.9.2342.19200300.100.1.3' => 'mail',\n      ],\n    ],\n  ],\n

      Add IdP metadata to saml20-idp-remote.php, see example:

      saml20-idp-remote.php
      <?php\n/**\n * SAML 2.0 remote IdP metadata for SimpleSAMLphp.\n *\n * Remember to remove the IdPs you don't use from this file.\n *\n * See: https://simplesamlphp.org/docs/stable/simplesamlphp-reference-idp-remote\n */\n/**\n * Some IdP.\n */\n$metadata['https://YOUR_IDP_DOMAIN.TLD'] = [\n'entityid' => 'https://YOUR_IDP_DOMAIN.TLD',\n'name' => [\n'en' => 'Some IdP',\n],\n'description' => 'Some IdP',\n...\n];\n

      In your build process, copy configuration files to SimpleSAMLphp:

      • vendor/simplesamlphp/simplesamlphp/config/authsources.php
      • vendor/simplesamlphp/simplesamlphp/config/config.php
      • vendor/simplesamlphp/simplesamlphp/metadata/saml20-idp-remote.php
      "},{"location":"using-lagoon-advanced/simplesaml/#create-nginx-conf-for-simplesamlphp","title":"Create NGINX conf for SimpleSAMLphp","text":"

      Create file lagoon/nginx/location_prepend_simplesamlphp.conf:

      location_prepend_simplesamlphp.conf
      location ^~ /simplesaml {\nalias /app/vendor/simplesamlphp/simplesamlphp/www;\nlocation ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\\.php)(?<pathinfo>/.*)?$ {\ninclude          fastcgi_params;\nfastcgi_pass     ${NGINX_FASTCGI_PASS:-php}:9000;\nfastcgi_param    SCRIPT_FILENAME $document_root$phpfile;\n# Must be prepended with the baseurlpath\nfastcgi_param    SCRIPT_NAME /simplesaml$phpfile;\nfastcgi_param    PATH_INFO $pathinfo if_not_empty;\n}\n}\n

      This will route /simplesaml URLs to SimpleSAMLphp in vendor.

      "},{"location":"using-lagoon-advanced/simplesaml/#add-additional-nginx-conf-to-nginx-image","title":"Add additional NGINX conf to NGINX image","text":"

      Modify nginx.dockerfile and add location_prepend_simplesamlphp.conf to the image:

      nginx.dockerfile
      ARG CLI_IMAGE\nFROM ${CLI_IMAGE} AS cli\n\nFROM uselagoon/nginx-drupal\n\nCOPY --from=cli /app /app\n\nCOPY lagoon/nginx/location_prepend_simplesamlphp.conf /etc/nginx/conf.d/drupal/location_prepend_simplesamlphp.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/location_prepend_simplesamlphp.conf\n\n# Define where the Drupal Root is located\nENV WEBROOT=public\n
      "},{"location":"using-lagoon-advanced/triggering-deployments/","title":"Triggering Deployments","text":""},{"location":"using-lagoon-advanced/triggering-deployments/#trigger-a-new-deployment-using-azure-pipelines","title":"Trigger a new deployment using Azure Pipelines","text":"

      In order to automatically trigger new deployments using Azure Pipelines follow these instructions:

      1. Add your deployment SSH private key to Azure as a secure file as id_rsa_lagoon. For more information about secure files have a look at the Azure Documentation Site.
      2. Add the following configuration to your azure-pipelines.yml:
      azure-pipelines.yml
      pool:\nvmImage: 'ubuntu-latest'\nstages:\n# .. other stages\n- stage: Deploy\ncondition: and(succeeded(), in(variables['Build.SourceBranch'], 'refs/heads/staging', 'refs/heads/develop'))\njobs:\n- job: DeployLagoon\nsteps:\n- task: DownloadSecureFile@1\nname: lagoonSshKey\ndisplayName: 'Download Lagoon SSH key'\ninputs:\nsecureFile: id_rsa_lagoon\n- script: |\ncurl -L \"https://github.com/uselagoon/lagoon-cli/releases/download/v0.21.3/lagoon-cli-v0.21.3-linux-amd64\" -o ./lagoon\nchmod +x ./lagoon\ndisplayName: 'Download lagoon-cli'\n- script: ./lagoon login -i $(lagoonSshKey.secureFilePath)\ndisplayName: 'Log into Lagoon'\n- script: ./lagoon deploy branch -e $(Build.SourceBranchName) -p my-awesome-project -b $(Build.SourceBranchName) --force\ndisplayName: 'Trigger deployment using lagoon-cli'\n

      This will trigger a new deployment whenever changes are made on the develop or staging branch. Adjust these values accordingly so they fit your deployment strategy and configuration.

      "},{"location":"using-lagoon-advanced/triggering-deployments/#push-without-deploying","title":"Push without deploying","text":"

      There may be a case where you want to push without a deployment. Make sure your commit message contains \"[skip deploy]\" or \"[deploy skip]\" and Lagoon will not trigger a deployment from that commit.

      "},{"location":"using-lagoon-advanced/using-harbor/","title":"Harbor","text":"

      Harbor is used as the default package repository for Lagoon when deploying to Kubernetes infrastructure. Harbor provides a Docker registry and a container security scanning solution provided by Trivy.

      Note

      When running Lagoon locally, the configuration for Harbor is handled entirely automagically.

      If you are running Lagoon locally, you can access that UI at localhost:8084. The username is admin and the password is admin.

      Note

      If you are hosting a site with a provider, they may not allow customer access to the Harbor UI.

      Once logged in, the first screen is a list of all repositories your user has access to. Each \"repository\" in Harbor correlates to a project in Lagoon.

      Within each Harbor repository, you'll see a list of container images from all environments with a single Lagoon project.

      From here, you can drill down into an individual container in order to see its details, including an overview of its security scan results.

      "},{"location":"using-lagoon-advanced/using-harbor/security-scanning/","title":"Security Scanning","text":"

      Harbor comes with a built-in security scanning solution provided by the Trivy service. This service analyzes a specified container image for any installed packages, and collects the version numbers of those installed packages. The Trivy service then searches the National Vulnerability Database for any CVEs (common vulnerabilities and exposures) affecting those package versions. Trivy is also library aware, so it will scan any Composer files or other package library definition files and report any vulnerabilities found within those package versions. These vulnerabilities are then reported within Harbor for each individual container.

      An example of a security scan in Harbor, showing applicable vulnerabilities for a scanned container:

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/","title":"Running Harbor Locally","text":"

      Lagoon supports running Harbor locally, where it makes use of MinIO as a storage backend, which is an AWS S3 compatible local storage solution.

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/#settings","title":"Settings","text":"

      Harbor is composed of multiple containers, which all require different settings in order for them to run successfully.

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/#environment-variables","title":"Environment Variables","text":"

      The following environment variables are required to be set in order for Harbor to properly start:

      • HARBOR_REGISTRY_STORAGE_AMAZON_BUCKET
        • This needs to be set to the name of the AWS bucket which Harbor will save images to.
        • Defaults to harbor-images when Lagoon is run locally or during CI testing.
      • HARBOR_REGISTRY_STORAGE_AMAZON_REGION
        • This needs to be set to the AWS region in which Harbor's bucket is located.
        • Defaults to us-east-1 when Lagoon is run locally or during CI testing.
      • REGISTRY_STORAGE_S3_ACCESSKEY
        • This needs to be set to the AWS access key Harbor should use to read and write to the AWS bucket.
        • Defaults to an empty string when Lagoon is run locally or during CI testing, as MinIO does not require authentication.
      • REGISTRY_STORAGE_S3_SECRETKEY
        • This needs to be set to the AWS secret key Harbor should use to read and write to the AWS bucket.
        • Defaults to an empty string when Lagoon is run locally or during CI testing, as MinIO does not require authentication.

      The following environment variables can be set if required:

      • HARBOR_REGISTRY_STORAGE_AMAZON_ENDPOINT
        • If this variable is set, the Harbor registry will use its value as the address of the s3 entrypoint.
        • Defaults to https://s3.amazonaws.com when this variable is not set.
      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/#container-specific-settings","title":"Container Specific Settings","text":"

      The following containers make use of configuration files:

      • HarborRegistry
      • HarborRegistryCtl
      • Harbor-Core
      • Harbor-Database
      • Harbor-Jobservice
      • Harbor-Trivy

      The following containers do not require configuration files to run:

      • Harbor-Nginx
      • Harbor-Portal
      • Harbor-Redis
      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/","title":"Harbor-Core","text":"

      Harbor-Core requires a configuration file to start, which is located at /etc/core/app.conf within the container. Any changes made to this config file are temporary and will not persist once the pod is restarted.

      The configmap from which this config file is generated is stored within Lagoon in the services/harbor-core/harbor-core.yml file. Any changes made to this configmap will be persisted across container restarts.

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/#config-file-contents","title":"Config File Contents","text":"
      • _REDIS_URL
        • Tells harbor-core and the Chartmuseum service connection info for the Redis server.
        • The default value is harbor-redis:6379,100,.
      • _REDIS_URL_REG
        • The url which harborregistry should use to connect to the Redis server.
        • The default value is redis://harbor-redis:6379/2.
      • ADMIRAL_URL
        • Tells harbor-core where to find the admiral service.
        • This service is not used with Lagoon's implementation of Harbor.
        • The default value is NA.
      • CFG_EXPIRATION
        • This value is not used.
        • The default value is 5.
      • CHART_CACHE_DRIVER
        • Tells harbor-core where to store any uploaded charts.
        • The default value is redis.
      • CLAIR_ADAPTER_URL
        • The URL that harbor-core should use to connect to the harbor-trivy service.
        • The default value is http://harbor-trivy:8080.
      • CLAIR_DB
        • The database type harborclair should use.
        • This value is not used, and is included only for legacy support
        • The default value is postgres.
      • CLAIR_DB_HOST
        • This value is not used, and is included only for legacy support
        • Tells harbor-core where to find the harborclair service.
        • The default value is harbor-database.
      • CLAIR_DB_PASSWORD
        • The password used to access harborclair's postgres database.
        • The default value is test123 when run locally or during CI testing.
        • This value is not used, and is included only for legacy support
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • CLAIR_DB_PORT
        • The port harborclair should use to connect to the harborclair server.
        • This value is not used, and is included only for legacy support
        • The default value is 5432.
      • CLAIR_DB_SSLMODE
        • Whether or not harborclair should use SSL to connect to the postgresql server.
        • This value is not used, and is included only for legacy support
        • The default value is disable.
      • CLAIR_DB_USERNAME
        • The user harborclair should use to connect to the postgresql server.
        • This value is not used, and is included only for legacy support
        • The default value is postgres.
      • CLAIR_HEALTH_CHECK_SERVER_URL
        • This value tells harbor-core where it should issue health checks to for the harbor-trivy service.
        • The default value is http://harbor-trivy:8080
      • CLAIR_URL
        • The URL that harbor-core should use to connect to the harbor-trivy service.
        • The default value is http://harbor-trivy:6060.
      • CONFIG_PATH
        • Where harbor-core should look for its config file.
        • The default value is /etc/core/app.conf.
      • CORE_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harbor-core.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • CORE_URL
        • The URL that harbor-core should publish to other Harbor services in order for them to connect to the harbor-core service.
        • The default value is http://harbor-core:8080.
      • DATABASE_TYPE
        • The database type Harbor should use.
        • The default value is postgresql.
      • HARBOR_ADMIN_PASSWORD
        • The password which should be used to access harbor using the admin user.
        • The default value is admin when run locally or during CI testing.
        • This value is retreived from a secret created when Harbor is first set up on a running Lagoon.
      • HARBOR_NGINX_ENDPOINT
        • This environment variable tells harborregistry where its NGINX ingress controller, harbor-nginx, is running in order to construct proper push and pull instructions in the UI, among other things.
        • The default value is set to http://harbor-nginx:8080 when run locally or during CI testing.
        • Lagoon attempts to obtain and set this variable automagically when run in production. If that process fails, this service will fail to run.
      • HTTP_PROXY
        • The default value is an empty string.
      • HTTPS_PROXY
        • The default value is an empty string.
      • JOBSERVICE_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harbor-jobservice.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • JOBSERVICE_URL
        • The URL that harbor-core should use to connect to the harbor-jobservice service.
        • The default value is http://harbor-jobservice:8080.
      • LOG_LEVEL
        • The default log level of the harbor-core service.
        • The default value is error.
      • NO_PROXY
        • A list of hosts which should never have their requests proxied.
        • The default is harbor-core,harbor-jobservice,harbor-database,harbor-trivy,harborregistry,harbor-portal,127.0.0.1,localhost,.local,.internal.
      • PORTAL_URL
        • This value tells the service where to connect to the harbor-portal service.
        • The default value is http://harbor-portal:8080.
      • POSTGRESQL_DATABASE
        • The postgres database harbor-core should use when connecting to the postgresql server.
        • The default value is registry.
      • POSTGRESQL_HOST
        • Where harbor-core should connect to the postgresql server.
        • The default value is harbor-database.
      • POSTGRESQL_MAX_IDLE_CONNS
        • The maximum number of idle connections harbor-core should leave open to the postgresql server.
        • The default value is 50.
      • POSTGRESQL_MAX_OPEN_CONNS
        • The maximum number of open connections harbor-core should have to the postgresql server.
        • The default value is 100.
      • POSTGRESQL_PASSWORD
        • The password Harbor should use to connect to the postgresql server.
        • The default value is a randomly generated value.
      • POSTGRESQL_PORT
        • The port harbor-core should use to connect to the postgresql server.
        • The default value is 5432.
      • POSTGRESQL_USERNAME
        • The username harbor-core should use to connect to the postgresql server.
        • The default value is postgres.
      • POSTGRESQL_SSLMODE
        • Whether or not harbor-core should use SSL to connect to the postgresql server.
        • The default value is disable.
      • REGISTRY_HTTP_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harborregistry.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retreived from a secret created when Harbor is first set up on a running Lagoon.
      • REGISTRY_STORAGE_PROVIDER_NAME
        • The storage backend that harborregistry should use.
        • The default value is s3.
      • REGISTRY_URL
        • The URL that harbor-core should use to connect to the harborregistry service..
        • The default value is http://harborregistry:5000.
      • REGISTRYCTL_URL
        • This value tells the service where to connect to the harborregistryctl service.
        • The default value is set to http://harborregistryctl:8080.
      • ROBOT_TOKEN_DURATION
        • This values sets how many days each issues robot token should be valid for.
        • The default value is set to 999.
      • SYNC_REGISTRY
        • This value is not used.
        • The default value is false.
      • TOKEN_SERVICE_URL
        • The URL that the harbor-core service publishes to other services in order to retrieve a JWT token.
        • The default value is http://harbor-core:8080/service/token.
      • TRIVY_ADAPTER_URL
        • The URL that the harbor-core service should use to connect to the harbor-trivy service.
        • The default value is http://harbor-trivy:8080.
      • WITH_CHARTMUSEUM
        • Tells harbor-core if the Chartmuseum service is being used.
        • This service is not used with Lagoon's implementation of Harbor.
        • The default value is false.
      • WITH_CLAIR
        • Tells harbor-core if the harborclair service is being used.
        • Lagoon does use this service in its implementation of Harbor.
        • The default value is true.
      • WITH_NOTARY
        • Tells harbor-core if the Notary service is being used.
        • This service is not used with Lagoon's implementation of Harbor.
        • The default value is false.
      • WITH_TRIVY
        • Tells harbor-core if the Trivy service is being used.
        • The default value is true.
      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/","title":"Harbor-Database","text":"

      Harbor-Database requires specific environment variables to be set in order to start, which are stored within secrets as described in the services/harbor-database/harbor-core.yml file.

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/#config-file-contents","title":"Config File Contents","text":"
      • POSTGRES_DB
        • The default database to be set up when initializing the Postgres service.
        • The default value is postgres.
      • POSTGRES_PASSWORD
        • The root password for the Postgres database.
        • The default value is test123.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • POSTGRES_USER
        • The default user to be set up when initializing the Postgres service.
        • The default value is postgres.
      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/","title":"Harbor-Jobservice","text":"

      Harbor-Jobservice requires a configuration file to start, which is located at /etc/jobservice/config.yml within the container. Any changes made to this config file are temporary and will not persist once the pod is restarted.

      The configmap from which this config file is generated is stored within Lagoon in the services/harbor-jobservice/harbor-jobservice.yml file. Any changes made to this configmap will be persisted across container restarts.

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/#config-file-contents","title":"Config File Contents","text":"
      • CORE_URL
        • This value tells harbor-jobservice where harbor-core can be reached.
        • The default value is http://harbor-core:8080.
      • CORE_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harbor-core.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • HTTP_PROXY
        • The default value is an empty string.
      • HTTPS_PROXY
        • The default value is an empty string.
      • JOBSERVICE_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harbor-jobservice.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • LOG_LEVEL
        • The logging level this service should use.
        • The default value is error.
          • This can also be set to debug to enable very verbose logging.
      • NO_PROXY
        • A list of hosts which should never have their requests proxied.
        • The default is harbor-core,harbor-jobservice,harbor-database,harbor-trivy,harborregistry,harbor-portal,127.0.0.1,localhost,.local,.internal.
      • REGISTRY_CONTROLLER_URL
        • This value tells the service where to connect to the harborregistryctl service.
        • The default value is set to http://harborregistryctl:8080
      • SCANNER_LOG_LEVEL
        • The logging level the scanning service should use.
        • The default value is error.
          • This can also be set to debug to enable very verbose logging.
      • SCANNER_STORE_REDIS_URL
        • This value tells harbor-trivy how to connect to its Redis store.
        • The default value is redis://harbor-redis:6379/4.
      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/","title":"Harbor-Trivy","text":"

      Harbor-Trivy is configured via specific environment variables and does not use a config file.

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/#environment-variables","title":"Environment Variables","text":"
      • SCANNER_LOG_LEVEL
        • The logging level this service should use.
        • The default value is error.
          • This can be set to debug to enable very verbose logging.
      • SCANNER_STORE_REDIS_URL
        • This value tells harbor-trivy how to connect to its Redis store.
        • The default value is redis://harbor-redis:6379/4.
      • SCANNER_JOB_QUEUE_REDIS_URL
        • This value tells harbor-trivy how to connect to its Redis store.
        • The default value is redis://harbor-redis:6379/4.
      • SCANNER_TRIVY_VULN_TYPE
        • This value tells harbor-trivy what types of vulnerabilities it should be searching for.
        • The default value is os,library
      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/","title":"HarborRegistry","text":"

      HarborRegistry requires a configuration file to start, which is located at /etc/registry/config.yml within the container. Any changes made to this config file are temporary and will not persist once the pod is restarted.

      This config file is stored within the services/harborregistry/harborregistry.yml file and loaded into the container as /etc/registry/pre-config.yml.

      A custom container entrypoint, services/harborregistry/entrypoint.sh, then transposes provided environment variables into this config file and saves the results as /etc/registry/config.yml.

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/#config-file-contents","title":"Config File Contents","text":"
      • CORE_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harbor-core.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • HARBOR_NGINX_ENDPOINT
        • This environment variable tells harborregistry where its NGINX ingress controller, harbor-nginx, is running in order to construct proper push and pull instructions in the UI, among other things.
        • The default value is set to http://harbor-nginx:8080 when run locally or during CI testing.
        • Lagoon attempts to obtain and set this variable automagically when run in production. If that process fails, this service will fail to run.
      • JOBSERVICE_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harbor-jobservice.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • REGISTRY_HTTP_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harborregistry.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • REGISTRY_REDIS_PASSWORD
        • This environment variable tells harborregistryctl the password that should be used to connect to Redis.
        • The default value is an empty string.
      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/","title":"HarborRegistryCtl","text":"

      HarborRegistryCtl requires a configuration file to start, which is located at /etc/registryctl/config.yml within the container. Any changes made to this config file are temporary and will not persist once the pod is restarted.

      The configmap from which this config file is generated is stored within Lagoon in the services/harborregistryctl/harborregistry.yml file. Any changes made to this configmap will be persisted across container restarts.

      "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/#config-file-contents","title":"Config File Contents","text":"
      • CORE_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harbor-core.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • JOBSERVICE_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harbor-jobservice.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • REGISTRY_HTTP_SECRET
        • This value is a pre-shared key that must match between the various services connecting to harborregistry.
        • The default value is set to secret123 when Harbor is run locally or during CI testing.
        • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
      • REGISTRY_REDIS_PASSWORD
        • This environment variable tells harborregistryctl the password that should be used to connect to Redis.
        • The default value is an empty string.
      "},{"location":"using-lagoon-the-basics/","title":"Using Lagoon - Overview","text":"

      This section covers some of the basic features and functionality in Lagoon. If you're familiar with these, move on to Using Lagoon - Advanced.

      If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our Discord.

      "},{"location":"using-lagoon-the-basics/#requirements","title":"Requirements","text":""},{"location":"using-lagoon-the-basics/#docker","title":"Docker","text":"

      To run a Lagoon Project, your system must meet the requirements to run Docker. We suggest installing the latest version of Docker for your workstation. You can download Docker here. We also suggest allowing Docker at least 4 CPUs and 4 GB RAM.

      "},{"location":"using-lagoon-the-basics/#local-development-environments","title":"Local Development Environments","text":"

      You can choose from pygmy, Lando, or DDEV - it's up to you!

      Learn more about Lagoon and Local Development Environments

      "},{"location":"using-lagoon-the-basics/#step-by-step-guides","title":"Step by Step Guides","text":"
      • General: set up a new project in Lagoon
      • General: first deployment
      • Drupal: first deployment in Drupal
      • Drupal: Lagoonize your Drupal site
      • All: build and deployment process of Lagoon
      "},{"location":"using-lagoon-the-basics/#overview-of-lagoon-configuration-files","title":"Overview of Lagoon Configuration Files","text":""},{"location":"using-lagoon-the-basics/#lagoonyml","title":".lagoon.yml","text":"

      This is the main file that will be used by Lagoon to understand what should be deployed, as well as many other things. See documentation for .lagoon.yml.

      "},{"location":"using-lagoon-the-basics/#docker-composeyml","title":"docker-compose.yml","text":"

      This file is used by Docker Compose to start your local development environment. Lagoon also uses it to understand which of the services should be deployed, which type, and how to build them. This happens via labels. See documentation for docker-compose.yml.

      "},{"location":"using-lagoon-the-basics/#dockerfiles","title":"Dockerfiles","text":"

      Some Docker images and containers need additional customizations from the provided images. This usually has two reasons:

      1. Application code: Containers like NGINX, PHP, Node.js, etc, need the actual programming code within their images. This is done during a Docker build step, which is configured in a Dockerfile. Lagoon has full support for Docker, and therefore also allows you full control over the resulting images via Dockerfile customizations.
      2. Customization of images: Lagoon also allows you to customize the base images according to your needs. This can be to inject an additional environment variable, change a service configuration, or even install additional tools. We advise caution with installing additional tools to the Docker images, as you will need to maintain any adaptions in the future!
      "},{"location":"using-lagoon-the-basics/#supported-services-base-images-by-lagoon","title":"Supported Services & Base Images by Lagoon","text":"Type Versions Dockerfile MariaDB 10.4, 10.5, 10.6, 10.11 mariadb/Dockerfile PostgreSQL 11, 12, 13, 14, 15, 16 postgres/Dockerfile MongoDB 4 mongo/Dockerfile NGINX openresty/1.25 nginx/Dockerfile Node.js 18, 20, 22 node/Dockerfile PHP FPM 8.1, 8.2, 8.3 php/fpm/Dockerfile PHP CLI 8.1, 8.2, 8.3 php/cli/Dockerfile Python 3.8, 3.9, 3.10, 3.11, 3.12 python/Dockerfile Redis 6, 7 redis/Dockerfile Solr 8, 9 solr/Dockerfile Varnish 6, 7 varnish/Dockerfile Opensearch 2 opensearch/Dockerfiles RabbitMQ 3.10 rabbitmq/Dockerfile Ruby 3.1, 3.2, 3.3 ruby/Dockerfile

      All images are pushed to https://hub.docker.com/u/uselagoon. We suggest always using the latest tag (like uselagoon/nginx:latest) as they are kept up to date in terms of features and security.

      If you choose to use a specific Lagoon version of an image like uselagoon/nginx:20.10.0 or uselagoon/node-10:20.10.0 it is your own responsibility to upgrade the version of the images as soon as a new Lagoon version is released!

      "},{"location":"using-lagoon-the-basics/configure-webhooks/","title":"Configure Webhooks","text":"

      Your Lagoon administrator will also give you the route to the webhook-handler. You will add this to your repository as an outgoing webhook, and choose which events to send to Lagoon. Typically, you will send all push and pull request events. In Lagoon it is possible to add a regular expression to determine which branches and pull requests actually result in a deploy, and your Lagoon administrator can set that up for you. For example, all branches that start with feature- could be deployed to Lagoon.

      Info for amazee.io customers

      If you are an amazee.io customer, the route to the webhook-handler is: https://hooks.lagoon.amazeeio.cloud.

      Danger

      Managing the following settings will require you to have a high level of access to these repositories, which will be controlled by your organization. If you cannot access these settings, please contact your systems administrator or the appropriate person within your organization.

      "},{"location":"using-lagoon-the-basics/configure-webhooks/#github","title":"GitHub","text":"
      1. Proceed to Settings -> Webhooks -> Add webhook in your GitHub repository.
      2. The Payload URL is the route to the webhook-handler of your Lagoon instance, provided by your Lagoon administrator.
      3. Set Content type to application/json.
      4. Choose \"Let me select individual events.\"
      5. Choose which events will trigger your webhook. We suggest that you send Push and Pull request events, and then filter further in the Lagoon configuration of your project.
      6. Make sure the webhook is set to Active.
      7. Click Add webhook to save your configuration.
      "},{"location":"using-lagoon-the-basics/configure-webhooks/#gitlab","title":"GitLab","text":"
      1. Navigate to Settings -> Integrations in your GitLab repository.
      2. The URL is the route to the webhook-handler of your Lagoon instance, provided by your Lagoon administrator.
      3. Select the Trigger events which will send a notification to Lagoon. We suggest that you send Push events and Merge request events, and then filter further in the Lagoon configuration of your project.
      4. Click Add webhookto save your configuration.
      "},{"location":"using-lagoon-the-basics/configure-webhooks/#bitbucket","title":"Bitbucket","text":"
      1. Navigate to Settings -> Webhooks -> Add new webhook in your repository.
      2. Title is for your reference.
      3. URL is the route to the webhook-handler of your Lagoon instance, provided by your Lagoon administrator.
      4. Choose from a full list of triggers and select the following:

        • Repository
          • Push
        • Pull Request
          • Created
          • Updated
          • Approved
          • Approval removed
          • Merged
          • Declined

        5. Click Save to save the webhook configurations for Bitbucket.

      "},{"location":"using-lagoon-the-basics/first-deployment/","title":"First Deployment","text":"

      Note

      If you are deploying a Drupal Project, skip this and read the Drupal-specific first deployment documentation.

      "},{"location":"using-lagoon-the-basics/first-deployment/#1-make-sure-you-are-ready","title":"1. Make sure you are ready","text":"

      In order to make your first deployment a successful one, please make sure that your project is Lagoonized and that you have set up the project in Lagoon. If not, or you're not sure, or that doesn't sound familiar, don't worry, go back and follow the Step-by-Step Guides which show you how this works, and then come back and deploy!

      "},{"location":"using-lagoon-the-basics/first-deployment/#2-push","title":"2. Push","text":"

      With Lagoon, you create a new deployment by pushing into a branch that is configured to be deployed.

      If you don't have any new code to push, don't worry! Run:

      Git push
      git commit --allow-empty -m \"go, go! Power Rangers!\"\ngit push\n

      This will trigger a push, and your Git hosting will inform Lagoon about this push via the configured webhook.

      If all is correct, you should see a notification in your configured chat system. (Contact your Lagoon administrator for this):

      This informs you that Lagoon has just started to deploy your code. Depending on the size of the code and amount of containers, this will take a couple of seconds. Just relax. If you want to know what's happening now, check out the Build and Deploy Process of Lagoon.

      You can also check your Lagoon UI to see the progress of any deployment. (Contact your Lagoon administrator for this).

      "},{"location":"using-lagoon-the-basics/first-deployment/#3-its-done","title":"3. It's done","text":"

      As soon as Lagoon is done building and deploying it will send a second notification to the chat system, here an example:

      It tells you:

      • Which project has been deployed.
      • Which branch and Git SHA have been deployed.
      • A link to the full logs of the build and deployment.
      • Links to all routes (URLs) where the environment can be reached.

      You can also quickly tell what kind of notification it is by the emoji at the beginning - whether it's just info that the build has started, a success, or fail.

      That's it! We hope that wasn't too hard - making devOps accessible is what we are striving for!

      "},{"location":"using-lagoon-the-basics/first-deployment/#but-wait-how-about-other-branches-or-the-production-environment","title":"But wait, how about other branches or the production environment?","text":"

      That's the beauty of Lagoon: it's exactly the same! Just push the name of the branch and that one will be deployed.

      "},{"location":"using-lagoon-the-basics/first-deployment/#failure-dont-worry","title":"Failure? Don't worry","text":"

      Did the deployment fail? Oh no! But we're here to help:

      1. If you deployed a Drupal site, make sure to read the Drupal-specific first deployment documentation, which explains why this happens.
      2. Click on the Logs link in the error notification, it will tell you where in the deployment process the failure happened.
      3. If you can't figure it out, just ask your Lagoon administrator, they are here to help!
      4. Reach out to us in your support channel or in the community Discord.
      "},{"location":"using-lagoon-the-basics/going-live/","title":"Going Live","text":"

      Congratulations, you're this close to going live with your website on Lagoon! In order to make this as seamless as possible, we've got this final checklist for you. It leads you through the last few things you should check before taking your site live.

      "},{"location":"using-lagoon-the-basics/going-live/#check-your-lagoonyml","title":"Check your .lagoon.yml","text":""},{"location":"using-lagoon-the-basics/going-live/#routes-ssl","title":"Routes / SSL","text":"

      Check to be sure that all routes have been set up in your .lagoon.yml. Be aware that if you don't point the domains towards Lagoon, you should disable Let's Encrypt (LE) certificate creation, as it will lead to issues. Domains not pointing towards Lagoon will be disabled after a while in order to not exceed the Let's Encrypt quotas.

      If you use Certificate Authority (CA) signed certificates, you can set tls-acme to false , but leave the insecure flag set to Allow or Redirect. In the case of CA certificates, contact your Lagoon administrator with the routes and the SSL certificate that needs to be put in place.

      .lagoon.yml
      environments:\nmain:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'false'\ninsecure: Allow\n- www.example.com:\ntls-acme: 'false'\ninsecure: Allow\n

      As soon as the DNS entries point towards your Lagoon installation, you can switch the flags: tls-acme to true and insecure to Redirect

      .lagoon.yml
      environments:\nmain:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'true'\ninsecure: Redirect\n- www.example.com:\ntls-acme: 'true'\ninsecure: Redirect\n

      Note

      As checking every page of your website might be a bit a tedious job, you can make use of mixed-content-scan. This will crawl the entire site and give you back pages that include assets from a non-HTTPS site.

      "},{"location":"using-lagoon-the-basics/going-live/#redirects","title":"Redirects","text":"

      If you need non-www to www redirects, make sure you have them set up in the redirects-map.conf - see Documentation.

      "},{"location":"using-lagoon-the-basics/going-live/#cron-jobs","title":"Cron jobs","text":"

      Check if your cron jobs have been set up for your production environment - see .lagoon.yml.

      "},{"location":"using-lagoon-the-basics/going-live/#dns","title":"DNS","text":"

      To make it as smooth as possible for you to get your site pointing to our servers, we have dedicated load-balancer DNS records. Those technical DNS resource records are used for getting your site linked to the amazee.io infrastructure and serve no other purpose. If you are in doubt of the CNAME record, contact your Lagoon administrator about the exact CNAME you need to set up.

      Example on amazee.io : <region-identifier>.amazee.io

      Before you switch over your domain to Lagoon, make sure you lower the Time-to-Live (TTL) before you go live. This will ensure that the switch from the old to the new servers will go quickly. We usually advise a TTL of 300-600 seconds prior to the DNS switch. More information about TTL.

      Info

      This information only relates to amazee.io hosted projects, and will shortly be removed from these docs and added to amazee.io specific ones

      "},{"location":"using-lagoon-the-basics/going-live/#recommended-settings-for-fastly","title":"Recommended settings for Fastly:","text":""},{"location":"using-lagoon-the-basics/going-live/#subdomains-cname","title":"Subdomains (CNAME)","text":"

      The recommended method of pointing your subdomain's (e.g. www.example.com) DNS records at Lagoon is via a CNAME record as shown below:

      CNAME: cdn.amazee.io

      "},{"location":"using-lagoon-the-basics/going-live/#root-domains-aaaaa","title":"Root domains (A/AAAA)","text":"

      Configuring the root domain (e.g. example.com.) can be tricky because the DNS specification does not allow root domains to point to a CNAME. Therefore, the following A and AAAA records should be used. Please ensure you set up individual records for each IP listed below:

      • A: 151.101.2.191
      • A: 151.101.66.191
      • A: 151.101.130.191
      • A: 151.101.194.191
      • AAAA: 2a04:4e42::703
      • AAAA: 2a04:4e42:200::703
      • AAAA: 2a04:4e42:400::703
      • AAAA: 2a04:4e42:600::703
      "},{"location":"using-lagoon-the-basics/going-live/#production-environment","title":"Production environment","text":"

      Lagoon understands the concept of development and production environments. Development environments automatically send noindex and nofollow headers in order to prohibit indexing by search engines.

      X-Robots-Tag: noindex, nofollow

      During project setup, the production environment should already be defined. If that's omitted, your environment will run in development mode. You can check if the environment is set as production environment in the Lagoon user interface. If the production environment is not set, let your Lagoon administrator know, and they will configure the system accordingly.

      "},{"location":"using-lagoon-the-basics/lagoon-build-errors-and-warnings/","title":"Lagoon Build Errors and Warnings","text":"

      Newer releases of Lagoon have the capability to identify potential issues with the build, and highlight them as warnings without failing. This is also a way for the Lagoon team to inform users of pending deprecations and changes to functionality.

      For example, if the Lagoon team makes a change to a setting in lagoon.yml, and there\u2019s something that users need to change, the warning will mention it, so users will be able to change it before it becomes a breaking change. They should be resolved ASAP wherever possible, as future releases of Lagoon may not be able to handle the errors, but they shouldn't stop your build.

      If you aren't sure how to resolve these errors, please reach out to your Lagoon administrator, or ask a question in the Lagoon community.

      "},{"location":"using-lagoon-the-basics/lagoon-build-errors-and-warnings/#docker-compose-errors","title":"Docker Compose Errors","text":"

      Please also see the section on Common Docker Compose Issues, as some of these issues may be covered there

      Lagoon Build output indicating env_file error
      > an env_file is defined in your docker-compose file, but no matching file found\n

      Docker Compose expects a referenced env file to be present at build time, but that env file is only present in local development, or has been excluded from the Dockerfile. The Lagoon team is working to hopefully allow Docker Compose to ignore this error, so this warning will remain until we have a resolution.

      Lagoon Build output indicating string key error
      > an invalid string key was detected in your docker-compose file\n

      There is an error in your Docker Compose file, most likely relating to a malformed or misused alias or anchor. The error message should help you understand where.

      Lagoon Build output indicating yaml validation error
      > There are yaml validation errors in your docker-compose file that should be corrected\n

      There is an error in your Docker Compose file, most likely relating to a malformed or misused alias or anchor. The error message should help you understand where.

      "},{"location":"using-lagoon-the-basics/lagoon-build-errors-and-warnings/#deprecated-images","title":"Deprecated Images","text":"

      Please see the dedicated page on how to handle this warning

      "},{"location":"using-lagoon-the-basics/local-development-environments/","title":"Local Development Environments","text":"

      Even though Lagoon has only a hard dependency on Docker and Docker Compose (which is mostly shipped with Docker) there are some things which are nice for local development that are not included in Docker:

      • An HTTP reverse proxy for nice URLs and HTTPS offloading.
      • A DNS system so we don't have to remember IP addresses.
      • SSH agents to use SSH keys within containers.
      • A system that receives and displays mail locally.
      Warning

      You do not need to install Lagoon locally to use it locally! That sounds confusing but follow the documentation. Lagoon is the system that deploys your local development environment to your production environment, it's not the environment itself.

      "},{"location":"using-lagoon-the-basics/local-development-environments/#pygmy-ddev-or-lando-the-choice-is-yours","title":"pygmy, DDEV, or Lando - the choice is yours","text":""},{"location":"using-lagoon-the-basics/local-development-environments/#pygmy","title":"pygmy","text":"

      Lagoon has traditionally worked best with pygmy , which is a preconfigured system of the above tools and works out of the box with Lagoon. It lives at https://github.com/pygmystack/pygmy

      pygmy is written in Golang, so to install it, run:

      Install with HomeBrew
      brew tap pygmystack/pygmy && brew install pygmy\n

      For detailed usage or installation info on pygmy, see its documentation.

      "},{"location":"using-lagoon-the-basics/local-development-environments/#lando","title":"Lando","text":"

      Lagoon is well-integrated with Lando! For more information, please see the documentation at https://docs.lando.dev/config/lagoon.html to get yourself up and running.

      Lando's workflow for Lagoon will be familiar to users of Lando, and will also be the easiest way for Lagoon newcomers to get up and running. Pygmy presents a closer integration with Docker, which will lend itself better to more complex scenarios and use cases but will also require a deeper understanding.

      "},{"location":"using-lagoon-the-basics/local-development-environments/#ddev","title":"DDEV","text":"

      Lagoon is also supported on DDEV! Check out their documentation to get started: https://ddev.readthedocs.io/en/stable/users/providers/lagoon/.

      We have previously evaluated adding support for other systems like Docksal and Docker4Drupal, and while we may add support for these in the future, our current focus is on supporting our current tools.

      "},{"location":"using-lagoon-the-basics/setup-project/","title":"Set Up a New Project","text":"

      Note

      We are working hard on getting our CLI and GraphQL API set up to allow everyone using Lagoon to set up and configure their projects themselves. Right now, it needs more testing before we can release those features, so hold tight!

      Until then, the setup of a new project involves talking to your Lagoon administrator, which is ok, as they are much friendlier than APIs. \ud83d\ude0a

      Please have the following information ready for your Lagoon administrator:

      • A name you would like the project to be known by
        • This name can only contain lowercase characters, numbers and dashes
        • Double dashes (--) are not allowed within a project name
      • SSH public keys, email addresses and the names of everybody that will work on this project. Here are instructions for generating and copying SSH keys for GitHub, GitLab, and Bitbucket.
      • The URL of the Git repository where your code is hosted (git@example.com:test/test.git).
      • The name of the Git branch you would like to use for your production environment (see Environment Types for details about the environments).
      • Which branches and pull requests you would like to deploy to your additional environments. With Lagoon, you can filter branches and pull requests by name with regular expressions, and your Lagoon administrator can get this set up for you.

      We suggest deploying specific important branches (like develop and main) and pull requests. But that's all up to you! (see Workflows for some more information)

      "},{"location":"using-lagoon-the-basics/setup-project/#1-make-sure-your-project-is-lagoonized","title":"1. Make sure your project is Lagoonized","text":"

      This means that the .lagoon.yml and docker-compose.yml files are available in your Git repository and configured accordingly.

      If this is not the case, check out the list of Step-by-Step Guides on how to do so before proceeding.

      "},{"location":"using-lagoon-the-basics/setup-project/#2-provide-access-to-your-code","title":"2. Provide access to your code","text":"

      In order to deploy your code, Lagoon needs access to it. By design and for security, Lagoon only needs read access to your Git repository.

      You may need your Lagoon administrator to tell you the SSH public key or the Git account to give read access to.

      "},{"location":"using-lagoon-the-basics/setup-project/#3-configure-webhooks","title":"3. Configure Webhooks","text":"

      Lagoon needs to be informed about a couple of events that are happening to your Git repository. Currently these are pushes and pull requests, but we may add more in the future.

      As Lagoon supports many different Git hosts, we have split off those instructions into this documentation: Configure Webhooks.

      "},{"location":"using-lagoon-the-basics/setup-project/#4-next-first-deployment","title":"4. Next: First deployment","text":"

      Congratulations, you are now ready to run your first deployment.

      "},{"location":"ja/#lagoon-kubernetes","title":"Lagoon - Kubernetes\u5411\u3051\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30ea\u30d0\u30ea\u30fc\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0","text":"

      Lagoon\u306f\u958b\u767a\u8005\u304c\u7406\u60f3\u3068\u3059\u308b\u3082\u306e\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u305d\u308c\u306f\u958b\u767a\u8005\u304c\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u3067\u307e\u3063\u305f\u304f\u540c\u3058\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002\u540c\u3058Docker\u30a4\u30e1\u30fc\u30b8\u3001\u540c\u3058\u30b5\u30fc\u30d3\u30b9\u8a2d\u5b9a\u3001\u305d\u3057\u3066\u540c\u3058\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/#_1","title":"\u306f\u3058\u3081\u306b","text":"

      \u3042\u306a\u305f\u304cLagoon\u3092\u4f7f\u7528\u3057\u3066\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30db\u30b9\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      Lagoon\u306e\u6a5f\u80fd\u306b\u3064\u3044\u3066\u3088\u308a\u6df1\u304f\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u306f\u3001Lagoon\u306e\u9ad8\u5ea6\u306a\u4f7f\u3044\u65b9\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

      Lagoon\u306e\u4ed5\u7d44\u307f\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u306f\u3001Lagoon\u306e\u57fa\u672c\u7684\u306a\u6982\u5ff5\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u305d\u3057\u3066\u3001\u3088\u308a\u6df1\u3044\u7406\u89e3\u306e\u305f\u3081\u306b\u3001Lagoon\u306e\u9ad8\u5ea6\u306a\u6982\u5ff5\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u3042\u306a\u305f\u304cLagoon\u3092\u958b\u767a\u3057\u305f\u3044(\u6a5f\u80fd\u3092\u8ffd\u52a0\u3001\u30d0\u30b0\u3092\u4fee\u6b63)\u5834\u5408\u306f\u3001Lagoon\u306e\u958b\u767a\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/#tldr-lagoon","title":"TL;DR: Lagoon\u306e\u4ed5\u7d44\u307f","text":"
      1. \u958b\u767a\u8005\u306f\u3001YAML \u30d5\u30a1\u30a4\u30eb\u5185\u3067\u5fc5\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3001\u8a2d\u5b9a\u3057\u307e\u3059\u3002
      2. \u4fee\u6b63\u3057\u305f\u30b3\u30fc\u30c9\u3092 Git \u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
      3. Lagoon \u306f YAML \u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3001\u5fc5\u8981\u306a\u69cb\u6210\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
      4. Lagoon \u306f\u5fc5\u8981\u306a Docker \u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002
      5. Lagoon \u306f\u305d\u308c\u3089\u3092 Docker \u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
      6. Lagoon \u306f Kubernetes \u306b\u5fc5\u8981\u306a\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
      7. Lagoon \u306f\u30b3\u30f3\u30c6\u30ca\u306e\u5c55\u958b\u3092\u76e3\u8996\u3057\u307e\u3059\u3002
      8. \u3059\u3079\u3066\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001Lagoon \u306f\u3055\u307e\u3056\u307e\u306a\u65b9\u6cd5 (Slack\u3001\u30e1\u30fc\u30eb\u3001Web \u30b5\u30a4\u30c8\u306a\u3069) \u3067\u958b\u767a\u8005\u306b\u901a\u77e5\u3057\u307e\u3059\u3002
      "},{"location":"ja/#_2","title":"\u30d8\u30eb\u30d7","text":"

      \u8cea\u554f\u3084\u30a2\u30a4\u30c7\u30a2\u304c\u3042\u308a\u307e\u3057\u305f\u3089\u30b3\u30fc\u30c9\u30e1\u30f3\u30c6\u30ca\u30fc\u3084\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u306b\u4f1a\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      Lagoon Discord\u306e\u4f1a\u8a71\u3078\u3054\u53c2\u52a0\u304f\u3060\u3055\u3044\uff1ahttps://discord.gg/te5hHe95JE

      "},{"location":"ja/#lagoon_1","title":"Lagoon\u306b\u3064\u3044\u3066","text":"
      1. Lagoon \u306f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3068\u30d3\u30eb\u30c9\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u975e\u5e38\u306b\u8907\u96d1\u3067\u3059\u3002\u8907\u6570\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30bd\u30fc\u30b9\u3001\u8907\u6570\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u3001\u8907\u6570\u306e\u901a\u77e5\u30b7\u30b9\u30c6\u30e0\u304c\u3042\u308a\u307e\u3059\u3002\u5404\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306f1\u30641\u3064\u304c\u7279\u6709\u306e\u3082\u306e\u3067\u3042\u308a\u3001\u6570\u79d2\u304b\u3089\u6570\u6642\u9593\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u67d4\u8edf\u6027\u3068\u5805\u7262\u6027\u3092\u8003\u616e\u3057\u3066\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306f\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0 \u30b7\u30b9\u30c6\u30e0\u3092\u4ecb\u3057\u3066\u901a\u4fe1\u3059\u308b\u305f\u3081\u3001\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u30b9\u30b1\u30fc\u30eb\u30a2\u30c3\u30d7\u304a\u3088\u3073\u30b9\u30b1\u30fc\u30eb\u30c0\u30a6\u30f3\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30c0\u30a6\u30f3\u30bf\u30a4\u30e0\u3092\u4e57\u308a\u5207\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u4ed6\u306e\u90e8\u5206\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u3053\u3068\u306a\u304f\u3001\u672c\u756a\u74b0\u5883\u3067 Lagoon \u306e\u65b0\u3057\u3044\u90e8\u5206\u3092\u8a66\u3059\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
      2. Lagoon \u3067\u306f\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5404\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u306f\u305d\u308c\u305e\u308c\u56fa\u6709\u306e\u9577\u6240\u304c\u3042\u308a\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u3001\u5404\u30b5\u30fc\u30d3\u30b9\u306b\u6700\u3082\u9069\u3057\u305f\u8a00\u8a9e\u3092\u6c7a\u5b9a\u3059\u308b\u3088\u3046\u52aa\u3081\u3066\u3044\u307e\u3059\u3002\u73fe\u5728\u3001Lagoon \u306e\u591a\u304f\u306f Node.js \u3067\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u6700\u521d\u306bNode.js\u3092\u4f7f\u3044\u59cb\u3081\u305f\u304b\u3089\u3060\u3051\u3067\u306a\u304f\u3001Node.js\u304cwebhooks\u3001\u30bf\u30b9\u30af\u306a\u3069\u306e\u975e\u540c\u671f\u51e6\u7406\u3092\u53ef\u80fd\u306b\u3059\u308b\u304b\u3089\u3067\u3059\u3002\u4e00\u90e8\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u7d20\u6674\u3089\u3057\u3044\u3068\u3053\u308d\u3067\u3042\u308a\u3001\u4ed6\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3078\u306e\u5f71\u97ff\u3092\u61f8\u5ff5\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u4e00\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5225\u306e\u8a00\u8a9e\u3067\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
      3. Lagoon\u306fDrupal\u7279\u6709\u306e\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4efb\u610f\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002Drupal\u7528\u306e\u65e2\u5b58\u306eDocker\u30a4\u30e1\u30fc\u30b8\u304c\u3042\u308a\u3001Drush\u306e\u3088\u3046\u306aDrupal\u7279\u6709\u306e\u30c4\u30fc\u30eb\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u304c\u3001Drupal\u7279\u6709\u306e\u90e8\u5206\u306f\u305d\u3053\u3060\u3051\u3067\u3059\u3002
      4. Lagoon\u306fDevOps\u3067\u3059\u3002\u958b\u767a\u8005\u304c\u5fc5\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u304c\u6b63\u3057\u3044\u65b9\u6cd5\u3067\u306a\u3044\u3068\u601d\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3057\u3001\u958b\u767a\u8005\u306b\u3042\u307e\u308a\u306b\u3082\u591a\u304f\u306e\u6a29\u9650\u3092\u4e0e\u3048\u3066\u3044\u308b\u3068\u601d\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3057\u304b\u3057\u3001\u79c1\u305f\u3061\u306f\u30b7\u30b9\u30c6\u30e0\u30a8\u30f3\u30b8\u30cb\u30a2\u3068\u3057\u3066\u3001\u958b\u767a\u8005\u3092\u5f37\u5316\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u958b\u767a\u8005\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u3089\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308c\u3070\u3001\u5f7c\u3089\u81ea\u8eab\u304c\u30d0\u30b0\u3084\u30df\u30b9\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
      5. Lagoon\u306fDocker\u3068Kubernetes\u4e0a\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      6. Lagoon\u306f\u5b8c\u5168\u306b\u30ed\u30fc\u30ab\u30eb\u3067\u958b\u767a\u30fb\u30c6\u30b9\u30c8\u304c\u53ef\u80fd\u3067\u3059\u3002
      7. Lagoon\u306f\u5b8c\u5168\u306b\u7d71\u5408\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u79c1\u305f\u3061\u304c \u5168\u30d7\u30ed\u30bb\u30b9\u3092\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002Git\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u306e\u53d7\u4fe1\u304b\u3089Docker\u30b3\u30f3\u30c6\u30ca\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u3001\u540c\u3058Git\u30cf\u30c3\u30b7\u30e5\u304c\u30af\u30e9\u30b9\u30bf\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002
      8. \u6700\u3082\u91cd\u8981\u306a\u70b9: \u3053\u308c\u306f\u9032\u884c\u4e2d\u306e\u4f5c\u696d\u3067\u3059\u3002\u307e\u3060\u7d42\u308f\u308a\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002amazee.io\u3067\u306f\u3001\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u3057\u3066\u3001\u53ef\u80fd\u306a\u9650\u308a\u30b3\u30fc\u30c9\u3092\u5171\u6709\u3057\u3001\u5354\u529b\u3057\u3066\u4f5c\u696d\u3092\u9032\u3081\u308b\u5fc5\u8981\u304c\u3042\u308b\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002

      \u79c1\u305f\u3061\u306f\u3042\u306a\u305f\u304cLagoon\u306e\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3068\u30b5\u30fc\u30d3\u30b9\u304c\u3069\u306e\u3088\u3046\u306b\u9023\u643a\u3057\u3066\u52d5\u4f5c\u3059\u308b\u304b\u3001\u7406\u89e3\u3057\u3066\u3082\u3089\u3048\u308b\u3053\u3068\u3092\u671b\u3093\u3067\u3044\u307e\u3059\u3002\u3053\u3053\u306b\u30b9\u30ad\u30fc\u30de\u304c\u3042\u308a\u307e\u3059(\u5c11\u3057\u53e4\u304f\u3001\u6700\u8fd1\u8ffd\u52a0\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u3084Kubernetes\u3092\u30ab\u30d0\u30fc\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u66f4\u65b0\u4f5c\u696d\u4e2d\u3067\u3059):Lucid Chart

      "},{"location":"ja/#lagoon_2","title":"Lagoon\u306e\u6b74\u53f2","text":"

      \u8aac\u660e\u3057\u305f\u3088\u3046\u306b\u3001Lagoon\u306f\u7406\u60f3\u3092\u73fe\u5b9f\u306b\u3057\u305f\u3082\u306e\u3067\u3059\u3002amazee.io\u3067\u306f\u3001Drupal\u30928\u5e74\u4ee5\u4e0a\u30db\u30b9\u30c8\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u79c1\u305f\u3061\u306e\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e4\u56de\u76ee\u306e\u5927\u304d\u306a\u6539\u8a02\u3067\u3059\u30023\u56de\u76ee\u306e\u6539\u8a02\u306fPuppet\u3068Ansible\u3092\u4e2d\u5fc3\u306b\u69cb\u7bc9\u3055\u308c\u307e\u3057\u305f\u3002\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u5404\u90e8\u5206\u306f\u5168\u3066\u8a2d\u5b9a\u7ba1\u7406\u3067\u884c\u308f\u308c\u307e\u3057\u305f\u3002\u3053\u308c\u306b\u3088\u308a\u65b0\u3057\u3044\u30b5\u30fc\u30d0\u30fc\u306e\u8a2d\u5b9a\u304c\u975e\u5e38\u306b\u901f\u304f\u3067\u304d\u307e\u3057\u305f\u304c\u3001\u540c\u6642\u306b\u958b\u767a\u8005\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u4f59\u5730\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u79c1\u305f\u3061\u306f\u3044\u304f\u3064\u304b\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3092\u5b9f\u88c5\u3057\u307e\u3057\u305f\u304c\u3001\u3059\u3067\u306bDocker\u3092\u672c\u756a\u74b0\u5883\u3067\u4f7f\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001\u79c1\u305f\u3061\u306f\u305d\u306e\u3053\u3068\u306b\u5b8c\u5168\u306b\u6e80\u8db3\u3057\u3066\u3044\u305f\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u79c1\u305f\u3061\u306f\u3001\u65e2\u5b58\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3060\u3051\u3067\u306f\u8db3\u308a\u306a\u3044\u3068\u6c17\u3065\u304d\u307e\u3057\u305f\u3002\u30c7\u30ab\u30c3\u30d7\u30ebDrupal\u306e\u53f0\u982d\u3001\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u3067\u306eNode.js\u306e\u52d5\u4f5c\u8981\u6c42\u3001Elasticsearch\u3078\u306e\u8981\u671b\u3001\u7570\u306a\u308bSolr\u30d0\u30fc\u30b8\u30e7\u30f3\u306a\u3069\u3001\u591a\u304f\u306b\u5bfe\u5fdc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u3002

      \u540c\u6642\u306b\u3001\u79c1\u305f\u3061\u306f\u9577\u5e74\u306b\u308f\u305f\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u305f\u3081\u306bDocker\u3092\u4f7f\u7528\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u672c\u756a\u74b0\u5883\u3067\u5168\u3066\u3092Docker\u3067\u884c\u3046\u3068\u3044\u3046\u306e\u306f\u5e38\u306b\u8003\u3048\u3066\u3044\u307e\u3057\u305f\u3002\u552f\u4e00\u306e\u554f\u984c\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u3068\u672c\u756a\u74b0\u5883\u3068\u306e\u9023\u643a\u3067\u3057\u305f\u3002\u4ed6\u306b\u3082\u3001\u672c\u756a\u74b0\u5883\u3067Drupal\u3092Docker\u3067\u52d5\u4f5c\u3055\u305b\u308b\u30b7\u30b9\u30c6\u30e0\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u30ed\u30fc\u30ab\u30eb\u3068\u672c\u756a\u74b0\u5883\u3067\u6b63\u78ba\u306b\u540c\u3058\u30a4\u30e1\u30fc\u30b8\u3068\u30b5\u30fc\u30d3\u30b9\u3092\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3059\u308b\u3082\u306e\u306f\u4f55\u3082\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002

      Lagoon\u306f2017\u5e74\u306b\u8a95\u751f\u3057\u307e\u3057\u305f\u3002\u305d\u308c\u4ee5\u6765\u3001\u672c\u756a\u74b0\u5883\u3067Docker\u3092\u52d5\u4f5c\u3055\u305b\u308b\u30b7\u30b9\u30c6\u30e0\u306b\u767a\u5c55\u3057\u307e\u3057\u305f\u3002Lagoon\u306f\u3001\u6211\u3005\u306e\u7b2c3\u4e16\u4ee3\u306e\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3092\u3001\u6700\u5148\u7aef\u306e\u5168Docker\u30d9\u30fc\u30b9\u306e\u30b7\u30b9\u30c6\u30e0\u306b\u7f6e\u304d\u63db\u3048\u307e\u3057\u305f\u3002

      "},{"location":"ja/#_3","title":"\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9","text":"

      amazee.io\u3067\u306f\u3001\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u53ef\u80fd\u6027\u3092\u4fe1\u3058\u3066\u3044\u307e\u3059\u3002Drupal\u306e\u3088\u3046\u306a\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u72ec\u5360\u7684\u306a\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306f\u5e38\u306b\u6211\u3005\u306b\u3068\u3063\u3066\u554f\u984c\u3067\u3057\u305f\u3002\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u4f1a\u793e\u306e\u5f37\u3055\u3068\u6210\u529f\u306f\u3001\u5358\u306b\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u3084\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u3060\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u308c\u306f\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3092\u52d5\u304b\u3059\u4eba\u3005\u3068\u77e5\u8b58\u3067\u3059\u3002 \u30d7\u30ed\u30bb\u30b9\u3001\u30b9\u30ad\u30eb\u3001\u4e88\u671f\u3057\u306a\u3044\u72b6\u6cc1\u306b\u5bfe\u5fdc\u3059\u308b\u80fd\u529b\u3001\u305d\u3057\u3066\u6700\u5f8c\u306b\u5fd8\u308c\u3066\u306f\u306a\u3089\u306a\u3044\u306e\u306f\u3001\u5f7c\u3089\u304c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u63d0\u4f9b\u3059\u308b\u30b5\u30dd\u30fc\u30c8\u3067\u3059\u3002

      "},{"location":"ja/#_4","title":"\u30e9\u30a4\u30bb\u30f3\u30b9","text":"

      Lagoon\u306f\u3001Apache 2.0 \u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u4e0b\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002

      "},{"location":"ja/code-of-conduct/","title":"\u884c\u52d5\u898f\u7bc4","text":""},{"location":"ja/code-of-conduct/#our-pledge","title":"\u79c1\u305f\u3061\u306e\u8a93\u3044","text":"

      \u30aa\u30fc\u30d7\u30f3\u3067\u6b53\u8fce\u7684\u306a\u74b0\u5883\u3092\u80b2\u3066\u308b\u305f\u3081\u306b\u3001\u79c1\u305f\u3061\u306f\u8ca2\u732e\u8005\u3084\u30e1\u30f3\u30c6\u30ca\u3068\u3057\u3066\u3001\u5e74\u9f62\u3001\u4f53\u578b\u3001\u969c\u5bb3\u3001\u6c11\u65cf\u6027\u3001\u6027\u81ea\u8a8d\u3068\u6027\u8868\u73fe\u3001\u7d4c\u9a13\u306e\u30ec\u30d9\u30eb\u3001\u56fd\u7c4d\u3001\u500b\u4eba\u306e\u5916\u898b\u3001\u4eba\u7a2e\u3001\u5b97\u6559\u3001\u307e\u305f\u306f\u6027\u7684\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u6027\u7684\u6307\u5411\u306b\u95a2\u4fc2\u306a\u304f\u3001\u79c1\u305f\u3061\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3078\u306e\u53c2\u52a0\u3092\u8ab0\u3082\u304c\u30cf\u30e9\u30b9\u30e1\u30f3\u30c8\u306e\u306a\u3044\u7d4c\u9a13\u306b\u3059\u308b\u3053\u3068\u3092\u8a93\u3044\u307e\u3059\u3002

      "},{"location":"ja/code-of-conduct/#our-standards","title":"\u79c1\u305f\u3061\u306e\u57fa\u6e96","text":"

      \u7a4d\u6975\u7684\u306a\u74b0\u5883\u4f5c\u308a\u306b\u8ca2\u732e\u3059\u308b\u884c\u52d5\u306e\u4f8b:

      • \u30a6\u30a7\u30eb\u30ab\u30df\u30f3\u30b0\u3067\u5305\u62ec\u7684\u306a\u8a00\u8449\u9063\u3044\u3092\u3059\u308b\u3053\u3068\u3002
      • \u7570\u306a\u308b\u8996\u70b9\u3068\u7d4c\u9a13\u3092\u5c0a\u91cd\u3059\u308b\u3053\u3068\u3002
      • \u5efa\u8a2d\u7684\u306a\u6279\u8a55\u3092\u7a4f\u3084\u304b\u306b\u53d7\u3051\u5165\u308c\u308b\u3053\u3068\u3002
      • \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u305f\u3081\u306b\u6700\u5584\u3092\u5c3d\u304f\u3059\u3053\u3068\u3002
      • \u4ed6\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30e1\u30f3\u30d0\u30fc\u306b\u5bfe\u3059\u308b\u5171\u611f\u3092\u793a\u3059\u3053\u3068\u3002

      \u53c2\u52a0\u8005\u306b\u3088\u308b\u8a31\u3055\u308c\u306a\u3044\u884c\u52d5\u306e\u4f8b:

      • \u6027\u7684\u306a\u8a00\u8449\u3084\u30a4\u30e1\u30fc\u30b8\u306e\u4f7f\u7528\u3001\u304a\u3088\u3073\u6b53\u8fce\u3055\u308c\u306a\u3044\u6027\u7684\u306a\u95a2\u5fc3\u3084\u30a2\u30c9\u30d0\u30f3\u30b9\u3002
      • \u30c8\u30ed\u30fc\u30ea\u30f3\u30b0\u3001\u4fae\u8fb1\u7684/\u8511\u8996\u7684\u306a\u30b3\u30e1\u30f3\u30c8\u3001\u304a\u3088\u3073\u500b\u4eba\u307e\u305f\u306f\u653f\u6cbb\u7684\u306a\u653b\u6483\u3002
      • \u516c\u5171\u306e\u5834\u307e\u305f\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u3067\u306e\u30cf\u30e9\u30b9\u30e1\u30f3\u30c8\u3002
      • \u660e\u78ba\u306a\u8a31\u53ef\u306a\u3057\u306b\u4ed6\u4eba\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u60c5\u5831(\u7269\u7406\u7684\u307e\u305f\u306f\u96fb\u5b50\u7684\u306a\u4f4f\u6240\u306a\u3069)\u3092\u516c\u958b\u3059\u308b\u3053\u3068\u3002
      • \u5408\u7406\u7684\u306b\u4e0d\u9069\u5207\u3068\u8003\u3048\u3089\u308c\u308b\u4ed6\u306e\u884c\u70ba\u3002 \u5c02\u9580\u7684\u306a\u74b0\u5883\u3067\u306f\u4e0d\u9069\u5207\u3068\u8003\u3048\u3089\u308c\u308b\u5834\u5408\u3002
      "},{"location":"ja/code-of-conduct/#our-responsibilities","title":"\u79c1\u305f\u3061\u306e\u8cac\u4efb","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7ba1\u7406\u8005\u306f\u3001\u53d7\u3051\u5165\u308c\u3089\u308c\u308b\u884c\u52d5\u306e\u57fa\u6e96\u3092\u660e\u78ba\u306b\u3057\u3001\u4e0d\u53d7\u3051\u5165\u308c\u53ef\u80fd\u306a\u884c\u52d5\u306e\u4e8b\u4f8b\u306b\u5bfe\u3057\u3066\u9069\u5207\u3067\u516c\u6b63\u306a\u662f\u6b63\u63aa\u7f6e\u3092\u3068\u308b\u3053\u3068\u304c\u671f\u5f85\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7ba1\u7406\u8005\u306f\u3001\u3053\u306e\u884c\u52d5\u898f\u7bc4\u306b\u5408\u81f4\u3057\u3066\u3044\u306a\u3044\u30b3\u30e1\u30f3\u30c8\u3001\u30b3\u30df\u30c3\u30c8\u3001\u30b3\u30fc\u30c9\u3001\u30a6\u30a3\u30ad\u306e\u7de8\u96c6\u3001\u554f\u984c\u3001\u304a\u3088\u3073\u305d\u306e\u4ed6\u306e\u8ca2\u732e\u3092\u524a\u9664\u3001\u7de8\u96c6\u3001\u307e\u305f\u306f\u62d2\u5426\u3059\u308b\u6a29\u5229\u3068\u8cac\u4efb\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u4e0d\u9069\u5207\u3001\u8105\u5a01\u7684\u3001\u653b\u6483\u7684\u3001\u307e\u305f\u306f\u6709\u5bb3\u3068\u898b\u306a\u3059\u4ed6\u306e\u884c\u52d5\u3092\u884c\u3063\u305f\u8ca2\u732e\u8005\u3092\u4e00\u6642\u7684\u307e\u305f\u306f\u6c38\u4e45\u306b\u7981\u6b62\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/code-of-conduct/#scope","title":"\u9069\u7528\u7bc4\u56f2","text":"

      \u3053\u306e\u884c\u52d5\u898f\u7bc4\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b9\u30da\u30fc\u30b9\u5185\u3060\u3051\u3067\u306a\u304f\u3001\u500b\u4eba\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u305d\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u4ee3\u8868\u3057\u3066\u516c\u5171\u306e\u30b9\u30da\u30fc\u30b9\u306b\u3044\u308b\u3068\u304d\u306b\u3082\u9069\u7528\u3055\u308c\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u4ee3\u8868\u3059\u308b\u4f8b\u3068\u3057\u3066\u306f\u3001\u516c\u5f0f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3001\u516c\u5f0f\u306e\u30bd\u30fc\u30b7\u30e3\u30eb\u30e1\u30c7\u30a3\u30a2\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u901a\u3058\u3066\u6295\u7a3f\u3059\u308b\u3053\u3068\u3001\u30aa\u30f3\u30e9\u30a4\u30f3\u307e\u305f\u306f\u30aa\u30d5\u30e9\u30a4\u30f3\u306e\u30a4\u30d9\u30f3\u30c8\u3067\u6307\u540d\u3055\u308c\u305f\u4ee3\u8868\u8005\u3068\u3057\u3066\u884c\u52d5\u3059\u308b\u3053\u3068\u306a\u3069\u304c\u3042\u308a\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4ee3\u8868\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7ba1\u7406\u8005\u306b\u3088\u3063\u3066\u3055\u3089\u306b\u5b9a\u7fa9\u3055\u308c\u3001\u660e\u78ba\u5316\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/code-of-conduct/#enforcement","title":"\u57f7\u884c","text":"

      \u8650\u5f85\u7684\u3001\u5acc\u304c\u3089\u305b\u306e\u3042\u308b\u3001\u307e\u305f\u306f\u305d\u308c\u4ee5\u5916\u306e\u4e0d\u53d7\u3051\u5165\u308c\u53ef\u80fd\u306a\u884c\u52d5\u306e\u4e8b\u4f8b\u306f\u3001\u9023\u7d61\u5148\u306b\u5831\u544a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c1\u30fc\u30e0\u306fuselagoon@amazee.io\u306b\u3044\u307e\u3059\u3002\u307e\u305f\u3001CoC\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\u3092\u5b8c\u4e86\u3057\u305fLagoon\u30c1\u30fc\u30e0\u306e\u30e1\u30f3\u30d0\u30fc\u3067\u3042\u308bAlanna\u307e\u305f\u306fBrandon\u306b\u76f4\u63a5\u9023\u7d61\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c1\u30fc\u30e0\u306f\u3059\u3079\u3066\u306e\u82e6\u60c5\u3092\u30ec\u30d3\u30e5\u30fc\u3057\u3001\u8abf\u67fb\u3057\u3001\u72b6\u6cc1\u306b\u9069\u3057\u305f\u3068\u8003\u3048\u308b\u65b9\u6cd5\u3067\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c1\u30fc\u30e0\u306f\u3001\u4e8b\u8c61\u306e\u5831\u544a\u8005\u306b\u95a2\u3059\u308b\u6a5f\u5bc6\u6027\u3092\u7dad\u6301\u3059\u308b\u7fa9\u52d9\u304c\u3042\u308a\u307e\u3059\u3002\u5177\u4f53\u7684\u306a\u65bd\u884c\u30dd\u30ea\u30b7\u30fc\u306e\u8a73\u7d30\u306f\u3001\u5225\u9014\u6295\u7a3f\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30e1\u30f3\u30c6\u30ca\u30fc\u304c\u8aa0\u5b9f\u306b\u884c\u52d5\u898f\u7bc4\u306b\u5f93\u308f\u306a\u3044\u5834\u5408\u3001\u307e\u305f\u306f\u305d\u308c\u3092\u5f37\u5236\u3057\u306a\u3044\u5834\u5408\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30ea\u30fc\u30c0\u30fc\u30b7\u30c3\u30d7\u306e\u4ed6\u306e\u30e1\u30f3\u30d0\u30fc\u306b\u3088\u3063\u3066\u4e00\u6642\u7684\u307e\u305f\u306f\u6c38\u4e45\u7684\u306a\u5f71\u97ff\u3092\u53d7\u3051\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/code-of-conduct/#attribution","title":"\u30a2\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3","text":"

      \u3053\u306e\u884c\u52d5\u898f\u7bc4\u306f\u3001Contributor Covenant\u3001\u30d0\u30fc\u30b8\u30e7\u30f31.4\u304b\u3089\u30a2\u30c0\u30d7\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3061\u3089\u3067\u3054\u89a7\u3044\u305f\u3060\u3051\u307e\u3059 http://contributor-covenant.org/version/1/4\u3002

      "},{"location":"ja/contributing/","title":"\u8ca2\u732e","text":"

      \u6211\u3005\u306fLagoon\u3078\u306e\u3042\u3089\u3086\u308b\u7a2e\u985e\u306e\u8ca2\u732e\u3092\u5fc3\u304b\u3089\u6b53\u8fce\u3057\u307e\u3059\uff01

      "},{"location":"ja/contributing/#what-kind-of-contributions-do-we-need","title":"\u3069\u306e\u3088\u3046\u306a\u8ca2\u732e\u304c\u5fc5\u8981\u3067\u3059\u304b\uff1f","text":"

      Lagoon\u306f\u3069\u3093\u306a\u7a2e\u985e\u306e\u8ca2\u732e\u3067\u3082\u6069\u6075\u3092\u53d7\u3051\u307e\u3059 - \u30d0\u30b0\u4fee\u6b63\u3001\u65b0\u6a5f\u80fd\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u66f4\u65b0\u3001\u3042\u308b\u3044\u306f\u5358\u7d14\u306a\u30ad\u30e5\u30fc\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306a\u3069 - \u3042\u306a\u305f\u304c\u52a9\u3051\u3066\u304f\u308c\u308b\u3053\u3068\u3092\u6211\u3005\u306f\u5b09\u3057\u304f\u601d\u3044\u307e\u3059\u3002

      "},{"location":"ja/contributing/#developing-for-lagoon","title":"Lagoon\u306e\u958b\u767a","text":"

      Lagoon\u3092\u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u4e0a\u3067\u52d5\u304b\u3059\u65b9\u6cd5\u306b\u3064\u3044\u3066\u3001KinD\u3092\u4f7f\u7528\u3057\u305fDeveloping Lagoon\u3068\u3044\u3046\u30bb\u30af\u30b7\u30e7\u30f3\u5168\u4f53\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u307e\u3060\u975e\u5e38\u306bWIP\u3067\u3059\u304c\u3001\u3042\u306a\u305f\u3092\u52a9\u3051\u308b\u305f\u3081\u306e\u591a\u304f\u306eMakefile\u30eb\u30fc\u30c1\u30f3\u304c\u5b58\u5728\u3057\u307e\u3059\u3002

      "},{"location":"ja/contributing/#installing-lagoon","title":"Lagoon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

      \u6211\u3005\u306fLagoon\u3092Helm\u30c1\u30e3\u30fc\u30c8\u304b\u3089\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u65b9\u6cd5\u3092\u6982\u8aac\u3057\u305f\u5225\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u540d\u3082Installing Lagoon Into Existing Kubernetes Cluster - \u3053\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u53ef\u80fd\u306a\u9650\u308a\u30b9\u30e0\u30fc\u30ba\u306b\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\uff01

      "},{"location":"ja/contributing/#help-us-with-our-examples","title":"\u6211\u3005\u306e\u4f8b\u984c\u3067\u306e\u52a9\u3051","text":"

      \u73fe\u5728\u3001\u6211\u3005\u306e\u6700\u5927\u306e\u30cb\u30fc\u30ba\u306e\u4e00\u3064\u306f\u3001Lagoon\u304cDrupal\u4ee5\u5916\u306e\u5404\u7a2e\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u306a\u3069\u3068\u3069\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3059\u308b\u304b\u306e\u4f8b\u3092\u307e\u3068\u3081\u308b\u3053\u3068\u3067\u3059\u3002

      \u3082\u3057\u3001\u3042\u306a\u305f\u304c\u73fe\u5728\u6211\u3005\u304cDocker Compose\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u6301\u3063\u3066\u3044\u306a\u3044\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9CMS\u307e\u305f\u306f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u7acb\u3061\u4e0a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u308c\u3070\u3001PR\u3092\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u65e2\u5b58\u306e\u4f8b\u3092https://github.com/uselagoon/lagoon-ex\u3067\u3054\u89a7\u304f\u3060\u3055\u3044\u3002 \u30d2\u30f3\u30c8\u3001\u30a2\u30c9\u30d0\u30a4\u30b9\u3001\u30b9\u30bf\u30fc\u30bf\u30fc\u306e\u554f\u984c\u306b\u3064\u3044\u3066\u306f\u3001examples\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

      \u305f\u3060\u3057\u3001\u53ef\u80fd\u306a\u9650\u308a\u3001\u57fa\u672c\u306eDocker Hub\u30a4\u30e1\u30fc\u30b8https://hub.docker.com/u/uselagoon\u3092\u4f7f\u7528\u3057\u3066\u4f5c\u6210\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u9069\u5207\u306a\u30a4\u30e1\u30fc\u30b8\u304c\u306a\u3044\u5834\u5408\u3084\u3001\u5f53\u793e\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001PR(\u53ef\u80fd\u306a\u5834\u5408)\u3092\u6295\u3052\u3066\u3044\u305f\u3060\u304f\u304b\u3001\u554f\u984c\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044(\u4ed6\u306e\u8ab0\u304b\u304c\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306b)https://github.com/uselagoon/lagoon-images\u306b\u3066\u3002

      \u65e2\u5b58\u306e\u4f8b\u3092\u6539\u5584\u3059\u308b\u305f\u3081\u306b\u79c1\u305f\u3061\u3092\u624b\u4f1d\u3063\u3066\u304f\u3060\u3055\u3044\u3001\u3082\u3057\u3054\u53ef\u80fd\u3067\u3042\u308c\u3070 - \u79c1\u305f\u3061\u306f\u6700\u826f\u306e\u65b9\u6cd5\u3092\u8ffd\u6c42\u3057\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u304b\u3001\u4f55\u304b\u610f\u5473\u306e\u306a\u3044\u3053\u3068\u3092\u3057\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f

      \u3053\u308c\u3089\u306e\u4f8b\u306e\u3044\u305a\u308c\u304b\u306e\u30c6\u30b9\u30c8\u306b\u8ca2\u732e\u3059\u308b\u4eba\u306b\u306f\u30dc\u30fc\u30ca\u30b9\u30dd\u30a4\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059 \u2013 https://github.com/amazeeio/drupal-example-simple/blob/8.x/TESTING_dockercompose.md\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3044\u304f\u3064\u304b\u306e\u4f8b\u30c6\u30b9\u30c8\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u305d\u308c\u3089\u3092\u30ac\u30a4\u30c0\u30f3\u30b9\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u79c1\u305f\u3061\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001Lando\u306e\u512a\u308c\u305f\u30c1\u30fc\u30e0\u304b\u3089\u306eLeia\u3067\u3059\u3002

      \u4ed6\u306e\u4f8b\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u6539\u5584\u3059\u308b\u305f\u3081\u306b\u79c1\u305f\u3061\u3092\u624b\u4f1d\u3063\u3066\u304f\u3060\u3055\u3044 \u2013 \u79c1\u305f\u3061\u306f\u5b8c\u5168\u306a\u3082\u306e\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u3001 \u539f\u7a3f\u3001\u6574\u7406\u3001\u5f79\u7acb\u3064\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30ea\u30f3\u30af\u3001\u660e\u78ba\u306a\u58f0\u660e\u306f\u5168\u3066\u8d85\u7d20\u6674\u3089\u3057\u3044\u3067\u3059\u3002

      \u4f55\u304b\u8cea\u554f\u304c\u3042\u308b\u5834\u5408\u306f\u3001Discord\u3067\u79c1\u305f\u3061\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\uff01

      "},{"location":"ja/contributing/#i-found-a-security-issue","title":"\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u554f\u984c\u3092\u898b\u3064\u3051\u307e\u3057\u305f \ud83d\udd13","text":"

      \u79c1\u305f\u3061\u306f\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u975e\u5e38\u306b\u91cd\u8996\u3057\u3066\u3044\u307e\u3059\u3002 \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u554f\u984c\u3092\u767a\u898b\u3057\u305f\u308a\u3001\u767a\u898b\u3057\u305f\u3068\u601d\u3063\u305f\u3089\u3001\u662f\u975e\u30e1\u30f3\u30c6\u30ca\u306b\u6ce8\u610f\u3092\u4fc3\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u5371\u967a

      \u7d50\u679c\u3092security@amazee.io\u306b\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002 GitHub\u306e\u554f\u984c\u3068\u3057\u3066\u305d\u308c\u3089\u3092\u30d5\u30a1\u30a4\u30eb\u3057\u3066\u306f\u7d76\u5bfe\u306b\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002

      \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ec\u30dd\u30fc\u30c8\u306f\u975e\u5e38\u306b\u8a55\u4fa1\u3055\u308c\u3001\u516c\u5171\u306e\u30ab\u30eb\u30de\u3068\u30b9\u30ef\u30c3\u30b0\u304c\u3082\u3089\u3048\u307e\u3059\uff01 \u79c1\u305f\u3061\u306f\u307e\u305f\u3001\u30d0\u30b0\u30d0\u30a6\u30f3\u30c6\u30a3\u30b7\u30b9\u30c6\u30e0\u306e\u4f5c\u696d\u3082\u9032\u3081\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/contributing/#i-found-an-issue","title":"\u554f\u984c\u3092\u898b\u3064\u3051\u307e\u3057\u305f","text":"

      \u79c1\u305f\u3061\u306f\u5e38\u306b\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u3053\u3068\u306b\u8208\u5473\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u554f\u984c\u5831\u544a\u306f\u5927\u6b53\u8fce\u3067\u3059\u3002 \u3042\u306a\u305f\u306e\u554f\u984c\u304c\u3059\u3067\u306b\u554f\u984c\u30ad\u30e5\u30fc\u306b\u5b58\u5728\u3057\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/contributing/#i-have-a-feature-request-or-idea","title":"\u6a5f\u80fd\u306e\u8981\u671b\u3084\u30a2\u30a4\u30c7\u30a2\u304c\u3042\u308a\u307e\u3059","text":"

      \u7d20\u6575\u3067\u3059\uff01 \u554f\u984c\u3092\u4f5c\u6210\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u3001\u79c1\u305f\u3061\u306f\u305d\u308c\u3092\u691c\u8a0e\u3059\u308b\u3053\u3068\u3092\u559c\u3073\u307e\u3059\u3002 \u305d\u308c\u304c\u5b9f\u88c5\u3055\u308c\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 \u3057\u304b\u3057\u3001\u79c1\u305f\u3061\u306f\u5e38\u306bLagoon\u306b\u4f55\u3092\u3082\u305f\u3089\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u306e\u30a2\u30a4\u30c7\u30a2\u3092\u805e\u304f\u3053\u3068\u306b\u8208\u5473\u304c\u3042\u308a\u307e\u3059\u3002

      \u5225\u306e\u826f\u3044\u65b9\u6cd5\u306f\u3001\u3042\u306a\u305f\u306e\u30a2\u30a4\u30c7\u30a2\u306b\u3064\u3044\u3066Discord\u7d4c\u7531\u3067\u79c1\u305f\u3061\u3068\u8a71\u3059\u3053\u3068\u3082\u3067\u3059\u3002 . \u4eca\u65e5\u53c2\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\uff01

      "},{"location":"ja/contributing/#i-wrote-some-code","title":"\u79c1\u306f\u3044\u304f\u3064\u304b\u306e\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u307e\u3057\u305f","text":"

      \u7d20\u6674\u3089\u3057\u3044\uff01\u305d\u308c\u306b\u3064\u3044\u3066\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u304a\u9001\u308a\u304f\u3060\u3055\u3044\u3001\u53ef\u80fd\u306a\u9650\u308a\u30ec\u30d3\u30e5\u30fc\u3057\u3001\u53ef\u80fd\u3067\u3042\u308c\u3070\u30de\u30fc\u30b8\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/","title":"Lagoon\u306f\u5e45\u5e83\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u8a00\u8a9e\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059","text":"

      Lagoon\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b9\u30bf\u30c3\u30af\u3092\u5927\u304d\u304f3\u3064\u306e\u30ec\u30d9\u30eb\u306b\u5206\u985e\u3057\u3066\u3044\u307e\u3059:

      "},{"location":"ja/applications/#_1","title":"\u8a00\u8a9e","text":"

      Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u57fa\u672c\u7684\u306a\u69cb\u6210\u8981\u7d20\u3067\u3042\u308a\u3001\u901a\u5e38\u306fLagoon\u5c02\u7528\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/applications/#_2","title":"\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af","text":"

      \u3053\u308c\u3089\u306e\u57fa\u672c\u30a4\u30e1\u30fc\u30b8\u3092\u57fa\u306b\u3001\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3092\u63d0\u4f9b\u3057\u305f\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u99c6\u52d5\u3057\u305f\u308a\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30ed\u30b8\u30c3\u30af\u3001\u30c4\u30fc\u30eb\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/#_3","title":"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3","text":"

      \u901a\u5e38\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e0a\u306b\u69cb\u7bc9\u3055\u308c\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u7de8\u96c6\u8005\u3084\u958b\u767a\u8005\u304c\u6700\u7d42\u88fd\u54c1\u3092\u5f62\u4f5c\u308b\u305f\u3081\u306b\u64cd\u4f5c\u3059\u308b\u30ec\u30a4\u30e4\u30fc\u3067\u3059\u3002

      Lagoon\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u7167\u3059\u308b\u3068\u304d\u3001\u901a\u5e38\u306f3\u3064\u306e\u65b9\u6cd5\u3067\u305d\u308c\u3089\u3092\u53c2\u7167\u3057\u307e\u3059:

      "},{"location":"ja/applications/#_4","title":"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8","text":"

      \u3053\u308c\u3089\u306f\u5b8c\u5168\u306b\u6a5f\u80fd\u3059\u308b\u3001\u30af\u30ed\u30fc\u30f3\u53ef\u80fd\u306a\u30b9\u30bf\u30fc\u30bf\u30fc\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3059\u3002\u5b9a\u671f\u7684\u306b\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3068\u66f4\u65b0\u304c\u884c\u308f\u308c\u3001\u308f\u305a\u304b\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u62e1\u5f35\u3057\u3066\u4f7f\u7528\u3067\u304d\u308b\u72b6\u614b\u306b\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/applications/#_5","title":"\u4f8b","text":"

      \u3053\u308c\u3089\u306f\u5b8c\u5168\u306b\u6a5f\u80fd\u3059\u308b\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3001\u5b9a\u671f\u7684\u306b\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3068\u66f4\u65b0\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u500b\u5225\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u52d5\u4f5c\u3055\u305b\u308b\u306b\u306f\u3042\u308b\u7a0b\u5ea6\u306e\u52b4\u529b\u304c\u5fc5\u8981\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/applications/#_6","title":"\u30c7\u30e2","text":"

      \u3053\u308c\u3089\u306f\u5b9f\u8a3c\u306e\u305f\u3081\u306b\u69cb\u7bc9\u3055\u308c\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3001\u6982\u5ff5\u691c\u8a3c\u3068\u3057\u3066\u306f\u4f7f\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001\u5b9a\u671f\u7684\u306a\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3084\u66f4\u65b0\u306f\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093\u3002

      \u3088\u308a\u5b8c\u5168\u306a\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u79c1\u305f\u3061\u306eGitHub\u30ea\u30dd\u30b8\u30c8\u30ea:https://www.github.com/lagoon-examples \u3068\u79c1\u305f\u3061\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8 https://lagoon.sh/application/ \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/laravel/","title":"Laravel\u3092Lagoon\u3067\u5b9f\u884c","text":"

      Laravel\u3092Lagoon\u3067\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u8907\u6570\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002

      • \u65e2\u5b58\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u81ea\u5206\u3067\u300clagoonize\u300d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff08Lagoonizing\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff09\u3002
      • \u53c2\u8003\u3068\u3057\u3066\u3001\u30b7\u30f3\u30d7\u30eb\u306alagoonize\u3055\u308c\u305fLaravel\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u4f8b\u793a\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u7528\u610f\u3057\u3066\u3044\u307e\u3059\u3002
      • \uff08\u63a8\u5968\uff09 \"Sail:onLagoon\"\u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u6a19\u6e96\u7684\u306aLaravel Sail\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308a\u3001\u9069\u5207\u306aLagoon\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002
      "},{"location":"ja/applications/laravel/#_1","title":"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u74b0\u5883\u30ad\u30fc","text":"

      \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ad\u30fc\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001CLI\u307e\u305f\u306fUI\u3092\u901a\u3058\u3066APP_KEY\u74b0\u5883\u5909\u6570(environment variable)\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u3053\u308c\u306b\u3088\u308a\u3001\u30ad\u30fc\u3092\u30b3\u30fc\u30c9\u5185\uff08\u4f8b\u3048\u3070.env\u30d5\u30a1\u30a4\u30eb\uff09\u306b\u4fdd\u5b58\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u306a\u308a\u307e\u3059\u3002

      \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ad\u30fc\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001php artisan key:generate --show\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u66f4\u305b\u305a\u306b\u3001\u6709\u52b9\u306a\u30ad\u30fc\u3092\u51fa\u529b\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/node/#_1","title":"\u306f\u3058\u3081\u306b","text":"

      Lagoon\u306f\u3001\u516c\u5f0f\u306eNode Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u305fNode.js\u30a4\u30e1\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002

      Lagoon\u4e0a\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u52d5\u304b\u3059\u305f\u3081\u306e\u9069\u5fdc\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306e\u8a73\u3057\u3044\u60c5\u5831\u306f\u3001Node.js Docker\u30a4\u30e1\u30fc\u30b8\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/options/","title":"Lagoon\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a","text":""},{"location":"ja/applications/options/#lagoonyml","title":"lagoon.yml","text":"

      Lagoon\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u304a\u3088\u3073\u74b0\u5883\u30ec\u30d9\u30eb\u306e\u8a2d\u5b9a\u306f\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u306e .lagoon.yml \u30d5\u30a1\u30a4\u30eb\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      lagoon-yml.md\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/options/#docker-composeyml","title":"docker-compose.yml","text":"

      Lagoon\u306e\u30b5\u30fc\u30d3\u30b9\u30ec\u30d9\u30eb\u306e\u8a2d\u5b9a\u306f\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001lagoon.type\u3068\u95a2\u9023\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u30e9\u30d9\u30eb\u306f\u3001\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      docker-compose-yml.md\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/options/#_1","title":"\u30b9\u30c8\u30ec\u30fc\u30b8","text":"

      Lagoon\u306f\u307b\u3068\u3093\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u63d0\u4f9b\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002Lagoon\u7d44\u307f\u8fbc\u307f\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u306b\u306f\u3001\u5fc5\u8981\u306aPVC\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u306a\u3069\u3092\u8ffd\u52a0\u3067\u304d\u308b-persistent\u30d0\u30ea\u30a2\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u53cd\u6620\u3059\u308b\u3088\u3046\u306b\u4f8b\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002

      "},{"location":"ja/applications/options/#_2","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9","text":"

      Lagoon\u306f\u4ee5\u4e0b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059:

      • Mariadb - \u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5168\u30d0\u30fc\u30b8\u30e7\u30f3
      • PostgreSQL - \u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5168\u30d0\u30fc\u30b8\u30e7\u30f3
      "},{"location":"ja/applications/options/#_3","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30fb\u30a2\u30ba\u30fb\u30a2\u30fb\u30b5\u30fc\u30d3\u30b9","text":"

      Lagoon\u306f\u307e\u305f\u3001dbaas-operator\u3092\u5229\u7528\u3057\u3066\u3001\u57fa\u76e4\u3068\u306a\u308b\u30de\u30cd\u30fc\u30b8\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9\uff08\u4f8b\uff1aRDS\u3001Google Cloud Databases\u3001Azure Database\uff09\u3092\u4f7f\u7528\u3057\u3066\u3053\u308c\u3089\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u81ea\u52d5\u7684\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3059\u308b\u6a5f\u80fd\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u30af\u30e9\u30b9\u30bf\u7528\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u304a\u3088\u3073\u8a2d\u5b9a\u3055\u308c\u308b\u3068\u3001\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u304c\u5229\u7528\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3068\u3057\u3066\u30dd\u30c3\u30c9\u304c\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/applications/options/#_4","title":"\u30ad\u30e3\u30c3\u30b7\u30e5","text":"

      Lagoon\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066Redis\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u4e00\u90e8\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u652f\u63f4\u3059\u308b\u305f\u3081\u306b\u3001\u30de\u30cd\u30fc\u30b8\u30c9Redis\u30b5\u30fc\u30d3\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/applications/options/#_5","title":"\u691c\u7d22","text":"

      Lagoon\u306f\u691c\u7d22\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u3057\u3066Elasticsearch\u3001Solr\u3001OpenSearch\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u5916\u90e8\u306e\u691c\u7d22\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3082\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/options/#_6","title":"\u30a4\u30f3\u30b0\u30ec\u30b9/\u30eb\u30fc\u30c8","text":"

      Lagoon\u306f\u3001\u30a4\u30f3\u30b0\u30ec\u30b9\u8981\u4ef6\u3092\u6301\u3064\u30b5\u30fc\u30d3\u30b9\u306e\u30eb\u30fc\u30c8\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u306f\u3001\u5404\u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b .lagoon.yml \u306b\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/options/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      Lagoon\u306f\u3001\u30d3\u30eb\u30c9\u6642\u3068\u30e9\u30f3\u30bf\u30a4\u30e0\u6642\u306b\u74b0\u5883\u5909\u6570\u3092\u591a\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u304c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u91cd\u8981\u306a\u8a2d\u5b9a(\u4f8b:\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a/\u8a8d\u8a3c\u60c5\u5831)\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u5834\u5408\u3001\u30ed\u30fc\u30ab\u30eb\u3068Lagoon\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u540c\u69d8\u306e\u540d\u524d\u3092\u4ed8\u3051\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002

      \u8a73\u7d30\u306f environment-variables.md\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/other/","title":"Lagoon\u3067\u4ed6\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c","text":"

      Lagoon\u304c\u7279\u5b9a\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u8a00\u8a9e\u7528\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u6301\u3063\u3066\u3044\u306a\u304f\u3066\u3082\u3001Lagoon\u3067\u30d3\u30eb\u30c9\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002

      commons\u30a4\u30e1\u30fc\u30b8\u3092\u62e1\u5f35\u307e\u305f\u306f\u7d99\u627f\u3059\u308b\u3053\u3068\u3067\u3001Lagoon\u306f\u307b\u307c\u3042\u3089\u3086\u308b\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/other/#hugo","title":"Hugo","text":"

      \u3053\u306e\u7c21\u5358\u306a\u4f8b\u306f\u3001Hugo\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3092\u30d3\u30eb\u30c9\u3057\u3001NGINX\u30a4\u30e1\u30fc\u30b8\u3067\u9759\u7684\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u63d0\u4f9b\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002commons\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066Hugo\u3092\u8ffd\u52a0\u3057\u3001\u30b5\u30a4\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u3066\u30d3\u30eb\u30c9\u3057\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305fNGINX\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u305fNGINX\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u30b5\u30a4\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

      nginx.dockerfile
      FROM uselagoon/commons AS builder\n\nRUN apk add hugo git\nWORKDIR /app\nCOPY . /app\nRUN hugo\n\nFROM uselagoon/nginx\n\nCOPY --from=builder /app/public/ /app\nCOPY lagoon/static-files.conf /etc/nginx/conf.d/app.conf\n\nRUN fix-permissions /usr/local/openresty/nginx\n
      docker-compose.yml
      services:\nnginx:\nbuild:\ncontext: .\ndockerfile: lagoon/nginx.Dockerfile\nlabels:\nlagoon.type: nginx\n
      "},{"location":"ja/applications/php/#_1","title":"\u306f\u3058\u3081\u306b","text":"

      Lagoon\u306f\u3001Drupal\u3001Laravel\u3001Wordpress\u3001Magento\u3001Symfony\u306a\u3069\u3001\u69d8\u3005\u306aPHP\u30d9\u30fc\u30b9\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002

      Lagoon\u3067PHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u9069\u5fdc\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3001PHP-cli Docker\u30a4\u30e1\u30fc\u30b8\u304a\u3088\u3073PHP-FPM Docker\u30a4\u30e1\u30fc\u30b8\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/python/#_1","title":"\u306f\u3058\u3081\u306b","text":"

      Lagoon\u306f\u3001Python\u30d9\u30fc\u30b9\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u308bPython 3.7\u4ee5\u4e0a\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

      Lagoon\u4e0a\u3067Python\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u52d5\u4f5c\u3055\u305b\u308b\u305f\u3081\u306e\u8abf\u6574\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3001Python Docker\u30a4\u30e1\u30fc\u30b8\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/ruby/","title":"Ruby\u3068Ruby on Rails","text":""},{"location":"ja/applications/ruby/#_1","title":"\u306f\u3058\u3081\u306b","text":"

      \u79c1\u305f\u3061\u306f\u3001\u516c\u5f0f\u306e Ruby alpine Docker \u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u305f Ruby 3.0 \u4ee5\u4e0a\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002 \u4ee5\u4e0b\u3067\u306f\u3001Rails \u30a2\u30d7\u30ea\u3092 Lagoon \u306b\u30c7\u30d7\u30ed\u30a4\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u3053\u3067\u8aac\u660e\u3059\u308b\u8a73\u7d30\u306e\u591a\u304f\u306f\u5b9f\u969b\u306b\u306f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u4f9d\u5b58\u3057\u307e\u305b\u3093\u3002

      "},{"location":"ja/applications/ruby/#lagoon-rails","title":"Lagoon \u3067 Rails \u3092\u5b9f\u884c\u3059\u308b","text":""},{"location":"ja/applications/ruby/#_2","title":"\u30ea\u30af\u30a8\u30b9\u30c8\u3078\u306e\u5fdc\u7b54","text":"

      Lagoon\u306e\u4f8b\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3042\u308bRuby on Rails\u306e\u4f8b\u304c\u53c2\u8003\u306b\u306a\u308a\u307e\u3059\u3002

      docker-compose.yml\u3067\u306f\u3001\u52d5\u7684\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3059\u308b\u4e3b\u8981\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066ruby\u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

      ruby\u30b5\u30fc\u30d3\u30b9\u7528\u306b\u6307\u5b9a\u3055\u308c\u305fdockerfile\u3092\u898b\u3066\u307f\u308b\u3068\u3001\u30dd\u30fc\u30c83000\u3092\u516c\u958b\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002nginx\u30b5\u30fc\u30d3\u30b9\u306f\u3001\u975e\u9759\u7684\u30a2\u30bb\u30c3\u30c8\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u3053\u306e\u30dd\u30fc\u30c8\u306eruby\u30b5\u30fc\u30d3\u30b9\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059(\u8a73\u7d30\u306fnginx\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)\u3002

      "},{"location":"ja/applications/ruby/#_3","title":"\u30ed\u30ae\u30f3\u30b0","text":"

      Lagoon\u306e\u30ed\u30ae\u30f3\u30b0\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306b\u3064\u3044\u3066\u306f\u3001\u6b21\u306e\u6587\u66f8\u3067\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002\u57fa\u672c\u7684\u306b\u3001\u3053\u306e\u30a4\u30f3\u30d5\u30e9\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30ed\u30b0\u3092UDP\u30e1\u30c3\u30bb\u30fc\u30b8\u3067udp://application-logs.lagoon.svc:5140\u306b\u9001\u4fe1\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      Rails\u306e\u4f8b\u3067\u306f\u3001logstash-logger\u3068\u3044\u3046gem\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001\u305d\u306e\u5f8cconfig/application.rb\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u521d\u671f\u5316\u3057\u3066\u3044\u307e\u3059\uff1a

      config/application.rb
          if ENV.has_key?('LAGOON_PROJECT') && ENV.has_key?('LAGOON_ENVIRONMENT') then\nlagoon_namespace = ENV['LAGOON_PROJECT'] + \"-\" + ENV['LAGOON_ENVIRONMENT']\nLogStashLogger.configure do |config|\nconfig.customize_event do |event|\nevent[\"type\"] = lagoon_namespace\nend\nend\nconfig.logstash.host = 'application-logs.lagoon.svc'\nconfig.logstash.type = :udp\nconfig.logstash.port = 5140\nend\n
      "},{"location":"ja/applications/ruby/#_4","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a","text":"

      \u3053\u306e\u4f8b\u3067\u306f\u3001\u79c1\u305f\u3061\u306ePostgreSQL\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059(docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)\u3002Lagoon\u3067\u306eRails\u3092\u7528\u3044\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u306e\u8a2d\u5b9a\u306f\u975e\u5e38\u306b\u7c21\u5358\u3067\u3059\u3002Lagoon \u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u63d0\u4f9b\u3057\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001config/database.yml \u30d5\u30a1\u30a4\u30eb\u3067\u3053\u308c\u3089\u306e\u74b0\u5883\u5909\u6570\u3092\u5229\u7528\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u7c21\u5358\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u3092\u69cb\u6210\u3067\u304d\u307e\u3059\u3002

      config/database.yml
      default: &default\nadapter: postgresql\nencoding: unicode\npool: <%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>\nusername: <%= ENV.fetch(\"POSTGRES_USERNAME\") { \"drupal\" } %>\npassword: <%= ENV.fetch(\"POSTGRES_PASSWORD\") { \"drupal\" } %>\nhost: <%= ENV.fetch(\"POSTGRES_HOST\") { \"postgres\" } %>\ndatabase: <%= ENV.fetch(\"'POSTGRES_DATABASE'\") { \"drupal\" } %>\n
      "},{"location":"ja/applications/wordpress/","title":"WordPress\u3092Lagoon\u3067\u5b9f\u884c","text":"

      WordPress\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001Composer\u3092\u4f7f\u7528\u3057\u3066WordPress\u3001\u305d\u306e\u4f9d\u5b58\u95a2\u4fc2\u3001\u304a\u3088\u3073\u30c6\u30fc\u30de\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u3053\u306eWordPress\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001https://github.com/roots/bedrock\u306e\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u6a19\u6e96\u5316\u3055\u308c\u305fLagoon\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d1\u30bf\u30fc\u30f3\u306b\u5408\u308f\u305b\u3066\u62e1\u5f35\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/applications/wordpress/#composer","title":"Composer\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

      \u3053\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001WordPress\u3068\u305d\u306e\u30c6\u30fc\u30de\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u305f\u3081\u306bComposer\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/wordpress/#_1","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9","text":"

      Lagoon\u306fMariaDB\u3068PostgreSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u304c\u3001WordPress\u3067\u306ePostgreSQL\u306e\u30b5\u30dd\u30fc\u30c8\u306f\u9650\u5b9a\u7684\u306a\u306e\u3067\u3001\u4f7f\u7528\u306f\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u3002

      "},{"location":"ja/applications/wordpress/#nginx","title":"NGINX\u306e\u8a2d\u5b9a","text":"

      Lagoon\u306b\u306fWordPress\u7528\u306e\u7d44\u307f\u8fbc\u307f\u8a2d\u5b9a\u304c\u3042\u308a\u307e\u305b\u3093 - \u4ee3\u308f\u308a\u306b\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u306f\u521d\u671f\u8a2d\u5b9a\u306enginx.conf\u304c\u4ed8\u5c5e\u3057\u3066\u3044\u307e\u3059\u3002\u6539\u5584\u70b9\u304c\u3042\u308c\u3070\u3001\u305c\u3072\u8ca2\u732e\u3057\u3066\u304f\u3060\u3055\u3044\uff01

      "},{"location":"ja/applications/wordpress/#wp-cli","title":"WP-CLI","text":"

      Lagoon\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001WordPress\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306bwp-cli\u3092cli\u30a4\u30e1\u30fc\u30b8\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/","title":"\u6982\u8981","text":"

      Lagoon\u306fDrupal\u30b5\u30a4\u30c8\u3092\u30db\u30b9\u30c8\u3059\u308b\u305f\u3081\u306b\u4f5c\u3089\u308c\u307e\u3057\u305f(\u3044\u3084\u3001\u672c\u5f53\u306b\u3001\u5c11\u306a\u304f\u3068\u3082\u6700\u521d\u306f\u305d\u3046\u3067\u3057\u305f\uff01)

      \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Drupal\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u69d8\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u306b\u95a2\u3059\u308b\u8a73\u7d30\u60c5\u5831\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/#drupal_integrations-drupal","title":"drupal_integrations Drupal\u30b9\u30ad\u30e3\u30d5\u30a9\u30fc\u30eb\u30c7\u30a3\u30f3\u30b0\u30d1\u30c3\u30b1\u30fc\u30b8","text":"

      packagist\u3067\u5229\u7528\u53ef\u80fd\u306adrupal_integrations\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u3001Lagoon\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306bDrupal\u306ecore-composer-scaffold\u3092\u62e1\u5f35\u3057\u307e\u3059\u3002\u307e\u305f\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eDrush\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306e\u8ffd\u52a0\u306eDrush\u30b3\u30de\u30f3\u30c9drush la\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/#lagoon-logs-drupal","title":"lagoon-logs Drupal\u30e2\u30b8\u30e5\u30fc\u30eb","text":"

      drupal.org\u3067\u5229\u7528\u53ef\u80fd\u306alagoon_logs\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001Lagoon\u4e0a\u306eDrupal\u306b\u5bfe\u3057\u3066\u8a2d\u5b9a\u4e0d\u8981\u306e\u30ed\u30ae\u30f3\u30b0\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/automatic-updates/","title":"\u81ea\u52d5\u66f4\u65b0","text":"

      Lagoon\u306f\u3001Drupal\u306e\u30b3\u30a2\u90e8\u5206\u3084contrib\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u66f4\u65b0\u65b9\u6cd5\u306e\u4e00\u90e8\u3068\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002Lagoon\u306f\u5909\u66f4\u3067\u304d\u306a\u3044\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3057\u3001\u5909\u66f4\u3067\u304d\u306a\u3044\u30b3\u30f3\u30c6\u30ca\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9\u304c\u5b9f\u884c\u6642\u306b\u5909\u66f4\u3055\u308c\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u554f\u984c\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      1. \u30b3\u30f3\u30c6\u30ca\u306e\u518d\u8d77\u52d5\u306b\u3088\u308b\u5909\u66f4\u306e\u6d88\u5931: \u30b3\u30f3\u30c6\u30ca\u306fKubernetes\u306b\u3088\u3063\u3066\u81ea\u52d5\u7684\u306b\u7ba1\u7406\u3055\u308c\u3066\u304a\u308a\u3001\u3044\u3064\u3067\u3082\u79fb\u52d5\u3001\u518d\u8d77\u52d5\u3001\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u304c\u767a\u751f\u3059\u308b\u3068\u3001\u6700\u521d\u306b\u69cb\u7bc9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u304c\u5b9f\u884c\u3055\u308c\u3001\u5b9f\u884c\u6642\u306b\u52a0\u3048\u3089\u308c\u305f\u5909\u66f4\u306f\u3059\u3079\u3066\u5931\u308f\u308c\u307e\u3059\u3002
      2. \u30bf\u30b9\u30af\u3068Cron\u30b8\u30e7\u30d6\u306e\u554f\u984c: \u30bf\u30b9\u30af\u3084Cron\u30b8\u30e7\u30d6\u306f\u6700\u521d\u306b\u69cb\u7bc9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u3067\u5b9f\u884c\u3055\u308c\u308b\u305f\u3081\u3001\u66f4\u65b0\u3055\u308c\u305f\u30b3\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002
      3. \u8aad\u307f\u53d6\u308a\u5c02\u7528\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308b\u66f4\u65b0\u306e\u5236\u9650: \u66f4\u65b0\u306b\u306f\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u5f37\u5236\u3059\u308b\u74b0\u5883\u3092\u69cb\u6210\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002
      4. \u8907\u6570\u30b3\u30f3\u30c6\u30ca\u66f4\u65b0\u6642\u306e\u4e0d\u4e00\u81f4: \u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3067\u306f\u3001\u305d\u308c\u305e\u308c\u5358\u4e00\u306e\u6a5f\u80fd\u3092\u6301\u3064\u5c0f\u3055\u306a\u30b3\u30f3\u30c6\u30ca\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002\u4e00\u822c\u7684\u306aDrupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u30b3\u30fc\u30c9\u306e\u30b3\u30d4\u30fc\u3092\u542b\u3080cli\u3001php\u3001nginx\u306e\u30b3\u30f3\u30c6\u30ca\u304c3\u3064\u5b58\u5728\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30b3\u30f3\u30c6\u30ca\u306e\u3046\u30611\u3064\u3060\u3051\u3092\u66f4\u65b0\u3059\u308b\u3068\u3001\u30b3\u30fc\u30c9\u306e\u4e0d\u4e00\u81f4\u306b\u3088\u308b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002

      Lagoon\u3067\u306f\u4ee5\u4e0b\u306e\u66f4\u65b0\u65b9\u6cd5\u304c\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/automatic-updates/#drupal","title":"Drupal \u81ea\u52d5\u66f4\u65b0","text":"

      Drupal \u81ea\u52d5\u66f4\u65b0\u30e2\u30b8\u30e5\u30fc\u30eb:contrib\u30e2\u30b8\u30e5\u30fc\u30eb\u306e[\u81ea\u52d5\u66f4\u65b0] (https ://www.drupal.org/project/automatic_updates)\u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u304a\u308a\u3001Drupal\u30b3\u30a2\u306b\u79fb\u884c\u3057\u3066\u3082\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/automatic-updates/#drush","title":"Drush","text":"

      drush pm-install\u307e\u305f\u306fdrush pm-update\u30b3\u30de\u30f3\u30c9\u306f\u3001amazeeio/drupal-integrations\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4e00\u90e8\u3068\u3057\u3066\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/drush-9/#_1","title":"\u30a8\u30a4\u30ea\u30a2\u30b9","text":"

      \u6b8b\u5ff5\u306a\u304c\u3089\u3001Drush 9\u3067\u306f Drush 8\u306e\u3088\u3046\u306a\u52d5\u7684\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u6ce8\u5165\u6a5f\u80fd\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002Drush\u30c1\u30fc\u30e0\u3068\u5354\u529b\u3057\u3066\u3001\u3053\u306e\u6a5f\u80fd\u3092\u518d\u3073\u5b9f\u88c5\u3067\u304d\u308b\u3088\u3046\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u5f53\u9762\u306e\u9593\u3001Drush 9\u3092Lagoon\u3068\u4e00\u7dd2\u306b\u4f7f\u7528\u3059\u308b\u969b\u306e\u56de\u907f\u7b56\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/drush-9/#_2","title":"\u57fa\u672c\u7684\u306a\u8003\u3048\u65b9","text":"

      Drush 9\u306f\u65b0\u3057\u3044\u30b3\u30de\u30f3\u30c9drush site:alias-convert\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001Drush 8 \u5f62\u5f0f\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092 Drush 9\u306eYAML\u5f62\u5f0f\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306f\u3001Lagoon\u306b\u73fe\u5728\u5b58\u5728\u3059\u308b\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u4e00\u5ea6\u3060\u3051\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u3001\u305d\u308c\u3089\u3092/app/drush/sites\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u3053\u308c\u3089\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u306f drush sa\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u969b\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/drush-9/#_3","title":"\u6e96\u5099","text":"

      drush site:alias-convert\u3092\u4f7f\u7528\u3059\u308b\u524d\u306b\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      • drush\u30d5\u30a9\u30eb\u30c0\u5185\u306ealiases.drushrc.php\u3092lagoon.aliases.drushrc.php\u306b\u30ea\u30cd\u30fc\u30e0\u3057\u307e\u3059\u3002
      "},{"location":"ja/applications/drupal/drush-9/#_4","title":"\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u751f\u6210","text":"

      cli\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001Drush\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u5909\u63db\u3067\u304d\u307e\u3059:

      \u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u751f\u6210

      docker-compose exec cli drush site:alias-convert /app/drush/sites --yes\n
      \u751f\u6210\u3055\u308c\u305fYAML\u30d5\u30a1\u30a4\u30eb\u306fGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30df\u30c3\u30c8\u3059\u308b\u306e\u304c\u826f\u3044\u7fd2\u6163\u3067\u3059\u3002\u305d\u3046\u3059\u308b\u3053\u3068\u3067\u3001\u4ed6\u306e\u958b\u767a\u8005\u3082\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/drush-9/#_5","title":"\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u4f7f\u7528","text":"

      Drush 9\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306f\u30b0\u30eb\u30fc\u30d7\u540d\u3067\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u304c\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u4eca\u56de\u3067\u3042\u308c\u3070\u3001\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u540d\u306flagoon\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u3001\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u4ed8\u304d\u306e\u3059\u3079\u3066\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002

      \u3059\u3079\u3066\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u8868\u793a
      drush sa --format=list\n

      \u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u5229\u7528\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u3088\u3046\u306b\u3057\u307e\u3059:

      Drush \u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u4f7f\u7528
      drush @lagoon.main ssh\n
      "},{"location":"ja/applications/drupal/drush-9/#_6","title":"\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u66f4\u65b0","text":"

      Lagoon\u3067\u65b0\u3057\u3044\u74b0\u5883\u304c\u4f5c\u6210\u3055\u308c\u305f\u5834\u5408\u3001drush site:alias-convert\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3001\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u30d5\u30a1\u30a4\u30eb (.yml) \u3092\u66f4\u65b0\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3067lagoon.site.yml\u304c\u66f4\u65b0\u3055\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u6700\u521d\u306blagoon.site.yml\u3092\u524a\u9664\u3057\u3066\u304b\u3089\u3001\u3082\u3046\u4e00\u5ea6drush site:alias-convert\u3092\u5b9f\u884c\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/drush-9/#drush-rsync","title":"\u30ed\u30fc\u30ab\u30eb\u304b\u3089\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u3078\u306eDrush rsync","text":"

      \u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u304b\u3089\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u8ffd\u52a0\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6e21\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      Drush rsync
      drush rsync @self:%files @lagoon.main:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n

      \u3053\u308c\u306f\u3001Lagoon\u306e\u30bf\u30b9\u30afUI\u3092\u4f7f\u7528\u305b\u305a\u306b\u3001\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u9593\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f\u3059\u308b\u5834\u5408\u306b\u3082\u5f53\u3066\u306f\u307e\u308a\u307e\u3059\u3002

      \u305f\u3068\u3048\u3070\u3001@lagoon.main\u304b\u3089@lagoon.dev\u3078\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f\u3057\u305f\u3044\u5834\u5408\u3001\u4e0a\u8a18\u306e\u8ffd\u52a0\u30d1\u30e9\u30e1\u30fc\u30bf\u306a\u3057\u3067\u30ed\u30fc\u30ab\u30eb\u3067drush rsync @lagoon.main @lagoon.dev\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\"Cannot specify two remote aliases\" (2 \u3064\u306e\u30ea\u30e2\u30fc\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306f\u6307\u5b9a\u3067\u304d\u307e\u305b\u3093) \u3068\u3044\u3046\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      \u3053\u308c\u3092\u89e3\u6c7a\u3059\u308b\u306b\u306f\u3001\u307e\u305a\u5b9b\u5148\u306e\u74b0\u5883\u306bSSH\u3067\u63a5\u7d9a drush @lagoon.dev ssh\u3057\u3001\u4e0a\u8a18\u3068\u540c\u69d8\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066 rsync\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      Drush rsync
      drush rsync @lagoon.main:%files  @self:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n

      \u4e0a\u8a18\u306e\u5185\u5bb9\u306f\u3001\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u304b\u3089\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3078 rsync\u3092\u4f7f\u3063\u3066\u540c\u671f\u3059\u308b\u5834\u5408\u306b\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002

      \u307e\u305f\u3001\u79c1\u305f\u3061\u306fDrush\u306e\u30e1\u30f3\u30c6\u30ca\u3068\u5354\u529b\u3057\u3066\u3001\u3053\u308c\u3092\u81ea\u52d5\u7684\u306b\u6ce8\u5165\u3059\u308b\u65b9\u6cd5\u3092\u6a21\u7d22\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/first-deployment-of-drupal/","title":"Drupal\u306e\u521d\u56de\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8","text":""},{"location":"ja/applications/drupal/first-deployment-of-drupal/#1-make-sure-you-are-all-set","title":"1. \u6e96\u5099\u3092\u6574\u3048\u307e\u3057\u3087\u3046","text":"

      \u521d\u56de\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u6210\u529f\u3055\u305b\u308b\u305f\u3081\u306b\u306f\u3001Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304cLagoon\u5316\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3068\u3001Lagoon\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u3046\u3067\u306a\u3044\u5834\u5408\u3067\u3082\u5fc3\u914d\u306f\u3044\u308a\u307e\u305b\u3093\uff01\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#2-push","title":"2. \u30d7\u30c3\u30b7\u30e5","text":"

      Lagoon \u3092\u5229\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u30c7\u30d7\u30ed\u30a4\u7528\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306b push \u3059\u308b\u3053\u3068\u3067\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002

      \u65b0\u3057\u3044\u30b3\u30fc\u30c9\u3092push\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044\u5834\u5408\u3067\u3082\u5fc3\u914d\u306f\u3044\u308a\u307e\u305b\u3093\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002

      Git\u306bpush
      git commit --allow-empty -m \"go, go! Power Rangers!\"\ngit push\n

      \u30d7\u30c3\u30b7\u30e5\u304c\u5b9f\u884c\u3055\u308c\u308b\u3068\u3001Git\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u304c\u8a2d\u5b9a\u6e08\u307f\u306eWebhook\u3092\u4ecb\u3057\u3066Lagoon\u306b\u901a\u77e5\u3057\u307e\u3059\u3002

      \u3059\u3079\u3066\u6b63\u5e38\u3067\u3042\u308c\u3070\u3001\u8a2d\u5b9a\u6e08\u307f\u306e\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u306b\u901a\u77e5\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002(\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306fLagoon\u7ba1\u7406\u8005\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044):

      \u3053\u306e\u901a\u77e5\u306f\u3001Lagoon\u304c\u30b3\u30fc\u30c9\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u958b\u59cb\u3057\u305f\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u6642\u9593\u306f\u3001\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u30b5\u30a4\u30ba\u3068\u30b3\u30f3\u30c6\u30ca\u306e\u6570\u306b\u3088\u3063\u3066\u6570\u79d2\u304b\u304b\u308a\u307e\u3059\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002\u73fe\u5728\u306e\u72b6\u6cc1\u3092\u78ba\u8a8d\u3057\u305f\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30bb\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u30c7\u30d7\u30ed\u30a4\u306e\u9032\u884c\u72b6\u6cc1\u306f\u3001LagoonUI\u3067\u3082\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002(URL\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044)

      "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#3-a-fail","title":"3. \u5931\u6557","text":"

      .lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30c7\u30d7\u30ed\u30a4\u5f8c\u51e6\u7406\u30bf\u30b9\u30af\u306b\u3088\u3063\u3066\u306f\u3001drush updb\u3084drush cr\u306a\u3069\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306eDrush\u30bf\u30b9\u30af\u306f\u3001\u74b0\u5883\u5185\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u30c7\u30d7\u30ed\u30a4\u76f4\u5f8c\u3067\u306f\u5f53\u7136\u306a\u304c\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u65b9\u6cd5\u3092\u6b21\u306b\u8aac\u660e\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#4-synchronize-local-database-to-the-remote-lagoon-environment","title":"4. \u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30ea\u30e2\u30fc\u30c8\u306eLagoon\u74b0\u5883\u306b\u540c\u671f","text":"

      Lagoon\u306f\u5b8c\u5168\u306aDrush\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u30ea\u30e2\u30fc\u30c8\u306eLagoon\u74b0\u5883\u3092\u540c\u671f\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u8b66\u544a

      \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306e\u524d\u306b\u3001pygmy\u306b\u516c\u958b\u30ad\u30fc\u3092\u767b\u9332\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      Permission denied (publickey)\u306a\u3069\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u3001\u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:pygmy - ssh\u30ad\u30fc\u306e\u8ffd\u52a0

      \u307e\u305a\u306f\u3001Drush \u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046:

      \u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u53d6\u5f97
      drush sa\n

      \u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u73fe\u5728\u30c7\u30d7\u30ed\u30a4\u6e08\u307f\u306e\u74b0\u5883\u304c\u53d6\u5f97\u3055\u308c\u307e\u3059\uff08\u6700\u65b0\u306e\u72b6\u614b\u306f\u3001develop\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u6642\u70b9\u306e\u3082\u306e\u3068\u4eee\u5b9a\u3057\u307e\u3059\uff09:

      \u8fd4\u3055\u308c\u305f\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9
      [drupal-example]cli-drupal:/app$ drush sa\n@develop\n@self\ndefault\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9(Drush\u3067\u306f\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9@self\u3067\u8868\u3055\u308c\u307e\u3059)\u3068\u30ea\u30e2\u30fc\u30c8\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9(@develop)\u3092\u540c\u671f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      Drush sql-sync
      drush sql-sync @self @develop\n

      \u6b21\u306e\u3088\u3046\u306a\u7d50\u679c\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

      Drush sql-sync\u306e\u7d50\u679c
      [drupal-example]cli-drupal:/app$ drush sql-sync @self @develop\nYou will destroy data in ssh.example.com/drupal and replace with data from drupal.\nDo you really want to continue? (y/n): y\nStarting to dump database on Source.                                                                              [ok]\nDatabase dump saved to /home/drush-backups/drupal/20180227075813/drupal_20180227_075815.sql.gz               [success]\nStarting to discover temporary files directory on Destination.                                                    [ok]\nYou will delete files in drupal-example-develop@ssh.example.com:/tmp/drupal_20180227_075815.sql.gz and replace with data from /home/drush-backups/drupal/20180227075813/drupal_20180227_075815.sql.gz\nDo you really want to continue? (y/n): y\nCopying dump file from Source to Destination.                                                                     [ok]\nStarting to import dump file onto Destination database.\n

      \u3055\u3066\u3001\u518d\u5ea6\u30c7\u30d7\u30ed\u30a4\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4eca\u5ea6\u306f\u7a7a\u306e\u30d7\u30c3\u30b7\u30e5\u3067\u3059:

      Git push
      git commit --allow-empty -m \"\u884c\u3051\u3001\u884c\u3051\uff01 \u30d1\u30ef\u30fc\u30ec\u30f3\u30b8\u30e3\u30fc\uff01\"\ngit push\n

      \u4eca\u5ea6\u306f\u3059\u3079\u3066\u6b63\u5e38\u306b\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3059:

      \u901a\u77e5\u5185\u306e\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001Drupal\u30b5\u30a4\u30c8\u304c\u3059\u3079\u3066\u306e\u6a5f\u80fd\u3092\u5099\u3048\u3066\u30ed\u30fc\u30c9\u3055\u308c\u305f\u72b6\u614b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u304a\u305d\u3089\u304f\u307e\u3060\u753b\u50cf\u306f\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u305d\u308c\u306f\u30b9\u30c6\u30c3\u30d75\u3067\u51e6\u7406\u3057\u307e\u3059\u3002

      \u30c7\u30d7\u30ed\u30a4\u304c\u4f9d\u7136\u3068\u3057\u3066\u5931\u6557\u3059\u308b\u5834\u5408\u306f\u3001\u8a73\u7d30\u60c5\u5831\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\u306b\u30ed\u30b0\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#5-synchronize-local-files-to-the-remote-lagoon-environment","title":"5. \u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30e2\u30fc\u30c8\u306eLagoon\u74b0\u5883\u306b\u540c\u671f","text":"

      \u304a\u305d\u3089\u304f\u4e88\u60f3\u901a\u308a\u3067\u3059\u304c\u3001Drush\u3092\u4f7f\u3063\u3066\u540c\u671f\u3067\u304d\u307e\u3059:

      Drush rsync
      drush rsync @self:%files @develop:%files\n

      \u6b21\u306e\u3088\u3046\u306a\u8868\u793a\u304c\u51fa\u308b\u306f\u305a\u3067\u3059:

      Drush rsync results
      [drupal-example]cli-drupal:/app$ drush rsync @self:%files @develop:%files\nYou will delete files in drupal-example-develop@ssh.example.com:/app/web/sites/default/files and replace with data from /app/web/sites/default/files/\nDo you really want to continue? (y/n): y\n

      \u3057\u304b\u3057\u3001\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u3053\u306e\u3088\u3046\u306b\u6b63\u3057\u304f\u8868\u793a\u3055\u308c\u306a\u3044\u3053\u3068\u3082\u3042\u308b\uff1a

      Drush rsync results
      [drupal-example]cli-drupal:/app$ drush rsync @self:%files @develop:%files\nYou will delete files in drupal-example-develop@ssh.example.com:'/app/web/%files' and replace with data from '/app/web/%files'/\nDo you really want to continue? (y/n):\n

      \u3053\u306e\u7406\u7531\u306f\u3001Drupal\u304c\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3092\u89e3\u6c7a\u3067\u304d\u306a\u3044\u305f\u3081\u3067\u3059\u3002\u3053\u308c\u306f\u304a\u305d\u3089\u304f\u3001Drupal\u304c\u5b8c\u5168\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u3053\u3068\u304c\u539f\u56e0\u3067\u3059\u3002\u56de\u907f\u7b56\u3068\u3057\u3066\u306fdrush rsync @self:sites/default/files @develop:sites/default/files\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5b9f\u969b\u306b\u306f\u30ed\u30fc\u30ab\u30eb\u3068\u30ea\u30e2\u30fc\u30c8\u306e Drupal \u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059 (drush status\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059)

      "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#6-its-done","title":"6. \u5b8c\u4e86","text":"

      Lagoon\u304c\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u3092\u5b8c\u4e86\u3059\u308b\u3068\u3001\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u306b\u6b21\u306e\u3088\u3046\u306a2\u56de\u76ee\u306e\u901a\u77e5\u304c\u9001\u4fe1\u3055\u308c\u307e\u3059\u3002:

      \u901a\u77e5\u306f\u6b21\u306e\u3088\u3046\u306a\u5185\u5bb9\u3092\u793a\u3057\u3066\u3044\u307e\u3059:

      • \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8
      • \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u3068Git SHA
      • \u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u306e\u30ed\u30b0\u3078\u306e\u30ea\u30f3\u30af
      • \u74b0\u5883\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8(URL)\u3078\u306e\u30ea\u30f3\u30af

      \u3053\u308c\u3067\u4f5c\u696d\u306f\u5b8c\u4e86\u3067\u3059! DevOps\u3092\u7c21\u5358\u306b\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u3053\u3068\u304c\u79c1\u305f\u3061\u306e\u76ee\u6a19\u3067\u3059\u3002

      "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#but-wait-how-about-other-branches-or-the-production-environment","title":"\u3057\u304b\u3057\u3001\u4ed6\u306e\u30d6\u30e9\u30f3\u30c1\u3084\u672c\u756a\u74b0\u5883\u306f\u3069\u3046\u306a\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f","text":"

      Lagoon\u306e\u512a\u308c\u305f\u70b9\u306f\u3001\u307e\u3063\u305f\u304f\u540c\u3058\u65b9\u6cd5\u3067\u51e6\u7406\u3067\u304d\u308b\u3053\u3068\u3067\u3059\u3002\u672c\u756a\u74b0\u5883\u30d6\u30e9\u30f3\u30c1\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u305f\u30d6\u30e9\u30f3\u30c1\u540d\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3068\u3001\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#failure-dont-worry","title":"\u30c7\u30d7\u30ed\u30a4\u306e\u5931\u6557","text":"

      \u30c7\u30d7\u30ed\u30a4\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u304b\uff1f \u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u30d8\u30eb\u30d7\u3092\u7528\u610f\u3057\u3066\u3044\u307e\u3059:

      1. \u30a8\u30e9\u30fc\u901a\u77e5\u5185\u306e logs \u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30bb\u30b9\u3067\u3069\u3053\u3067\u5931\u6557\u3057\u305f\u304b\u304c\u308f\u304b\u308a\u307e\u3059\u3002
      2. \u554f\u984c\u304c\u89e3\u6c7a\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30b5\u30dd\u30fc\u30c8\u3044\u305f\u3057\u307e\u3059!
      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/","title":"Drupal\u3068Fastly\u306e\u7d71\u5408","text":""},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
      • Drupal 7\u4ee5\u964d
      • Fastly\u30b5\u30fc\u30d3\u30b9ID
      • \u30d1\u30fc\u30b8\u6a29\u9650\u3092\u6301\u3064Fastly API\u30c8\u30fc\u30af\u30f3
      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#drupal-7url","title":"Drupal 7\u3067\u306eURL\u30d9\u30fc\u30b9\u306e\u30d1\u30fc\u30b8","text":"
      1. Fastly Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
      2. Fastly\u30b5\u30fc\u30d3\u30b9ID\u3068API\u30c8\u30fc\u30af\u30f3\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
      3. \u5fc5\u8981\u306b\u5fdc\u3058\u3066Webhooks\u3092\u8a2d\u5b9a\u3057\u307e\u3059(\u4f8b\u3048\u3070\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30d1\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u305f\u3068\u304d\u306bSlack\u306b\u901a\u77e5\u3059\u308b\u306a\u3069)\u3002
      4. Drupal 7\u3067\u306fURL\u30d9\u30fc\u30b9\u306e\u30d1\u30fc\u30b8(\u7c21\u6613\u30d1\u30fc\u30b8)\u306e\u307f\u304c\u53ef\u80fd\u3067\u3059\u3002
      5. settings.php\u3067Drupal\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8IP\u3092\u5909\u66f4\u3057\u307e\u3059:
      Drupal 7\u306e\u305f\u3081\u306esettings.php\u306e\u5909\u66f4
      $conf['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP';\n
      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#drupal-10","title":"Drupal 10\u4ee5\u964d\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u30d1\u30fc\u30b8","text":"

      Composer\u3092\u4f7f\u3063\u3066\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u53d6\u5f97\u3057\u307e\u3059:

      Fastly Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u4f9d\u5b58\u95a2\u4fc2\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
      composer require drupal/fastly drupal/http_cache_control drupal/purge\n

      \u6b21\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u5316\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      • fastly
      • fastlypurger
      • http_cache_control (2.x)
      • purge
      • purge_ui (\u6280\u8853\u7684\u306b\u306f\u5fc5\u9808\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u672c\u756a\u74b0\u5883\u3067\u6709\u52b9\u306b\u3059\u308b\u3068\u975e\u5e38\u306b\u4fbf\u5229\u3067\u3059)
      • purge_processor_lateruntime
      • purge_processor_cron
      • purge_queuer_coretags
      • purge_drush (Drush\u3092\u4f7f\u3063\u305f\u30d1\u30fc\u30b8\u306b\u4fbf\u5229\u3067\u3059\u3002\u3053\u3061\u3089\u306b\u30b3\u30de\u30f3\u30c9\u306e\u30ea\u30b9\u30c8\u304c\u3042\u308a\u307e\u3059)
      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#drupalfastly_1","title":"Drupal\u3067Fastly\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3059","text":"

      Fastly\u30b5\u30fc\u30d3\u30b9ID\u3068API\u30c8\u30fc\u30af\u30f3\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30b5\u30a4\u30c8ID\u306f\u81ea\u52d5\u7684\u306b\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u5b9f\u884c\u6642\u74b0\u5883\u5909\u6570\u3092\u5229\u7528\u3059\u308b\u304b\u3001/admin/config/services/fastly\u306b\u3042\u308b\u8a2d\u5b9a\u30d5\u30a9\u30fc\u30e0\u3092\u7de8\u96c6\u3067\u304d\u307e\u3059:

      • FASTLY_API_TOKEN
      • FASTLY_API_SERVICE
      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_2","title":"\u30d1\u30fc\u30b8\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a","text":"
      • \u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u30cf\u30c3\u30b7\u30e5\u9577: 4\u6587\u5b57
      • \u30d1\u30fc\u30b8\u65b9\u5f0f: \u30bd\u30d5\u30c8\u30d1\u30fc\u30b8\u3092\u4f7f\u7528

      \u307b\u3068\u3093\u3069\u306e\u30b5\u30a4\u30c8\u3067\u306f4\u6587\u5b57\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3067\u5341\u5206\u3067\u3059\u304c\u3001\u6570\u767e\u4e07\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u6301\u3064\u30b5\u30a4\u30c8\u3067\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u306e\u885d\u7a81\u3092\u6e1b\u3089\u3059\u305f\u3081\u306b5\u6587\u5b57\u306e\u65b9\u304c\u826f\u3044\u3067\u3057\u3087\u3046\u3002

      \u6ce8\u610f:

      \u30bd\u30d5\u30c8\u30d1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002Fastly\u5185\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u53e4\u304f\u306a\u3063\u305f\u3068\u30de\u30fc\u30af\u3055\u308c\u3001\u5b8c\u5168\u306b\u524a\u9664\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u306a\u3044\u306e\u3067\u3001\u30aa\u30ea\u30b8\u30f3\u304c\u30c0\u30a6\u30f3\u3057\u3066\u3044\u308b\u5834\u5408\u306b\u3082\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059(\u53e4\u304f\u306a\u3063\u305f\u3082\u306e\u3092\u63d0\u4f9b\u3059\u308b\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408)

      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_3","title":"\u53e4\u3044\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a","text":"

      \u30b5\u30a4\u30c8\u306b\u9069\u3057\u305f\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6700\u5c0f1\u6642\u9593(3600)\u3001\u6700\u59271\u9031\u9593(604800)\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a2d\u5b9a\u304c\u4e00\u822c\u7684\u3067\u3059:

      1. \u518d\u691c\u8a3c\u6642\u306b\u30b9\u30c6\u30fc\u30eb - \u30aa\u30f3\u300114440\u79d2
      2. \u30a8\u30e9\u30fc\u6642\u306b\u30b9\u30c6\u30fc\u30eb - \u30aa\u30f3\u3001604800\u79d2

      \u5fc5\u8981\u306b\u5fdc\u3058\u3066Webhook\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059(\u305f\u3068\u3048\u3070\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30d1\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u305f\u3068\u304d\u306bSlack\u306b\u901a\u77e5\u3092\u9001\u308b\u306a\u3069)

      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#purge","title":"Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u8a2d\u5b9a","text":"

      \u30d1\u30fc\u30b8\u30da\u30fc\u30b8/admin/config/development/performance/purge\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002

      \u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u307e\u3059:

      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_4","title":"\u30ad\u30e3\u30c3\u30b7\u30e5\u7121\u52b9\u5316","text":"
      • Drupal Origin: \u30bf\u30b0
      • Fastly: E\u3001\u30bf\u30b0\u3001URL
      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_5","title":"\u30ad\u30e5\u30fc","text":"
      • \u30ad\u30e5\u30fc\u30ef\u30fc:\u30b3\u30a2\u30bf\u30b0\u30ad\u30e5\u30fc\u30ef\u30fc\u3001\u30d1\u30fc\u30b8\u30d6\u30ed\u30c3\u30af(\u8907\u6570\u53ef)
      • \u30ad\u30e5\u30fc:\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
      • \u30d7\u30ed\u30bb\u30c3\u30b5:\u30b3\u30a2\u30d7\u30ed\u30bb\u30c3\u30b5\u3001\u30ec\u30a4\u30c8\u30e9\u30f3\u30bf\u30a4\u30e0\u30d7\u30ed\u30bb\u30c3\u30b5\u3001\u30d1\u30fc\u30b8\u30d6\u30ed\u30c3\u30af(\u8907\u6570\u53ef)

      \u3053\u308c\u306f\u3001Drupal\u306e\u7d44\u307f\u8fbc\u307f\u306e\u30b3\u30a2\u30bf\u30b0\u30ad\u30e5\u30fc\u30ef\u30fc\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30e5\u30fc\u306b\u30bf\u30b0\u3092\u8ffd\u52a0\u3057\u3001\u30ad\u30e5\u30fc\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3055\u308c (\u30c7\u30d5\u30a9\u30eb\u30c8)\u3001\u4ee5\u4e0b\u306e\u30d7\u30ed\u30bb\u30c3\u30b5\u306b\u3088\u3063\u3066\u51e6\u7406\u3055\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

      • Cron\u30d7\u30ed\u30bb\u30c3\u30b5
      • \u30ec\u30a4\u30c8\u30e9\u30f3\u30bf\u30a4\u30e0\u30d7\u30ed\u30bb\u30c3\u30b5

      cron\u30d7\u30ed\u30bb\u30c3\u30b5\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u30b5\u30a4\u30c8\u3067cron\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 (\u7406\u60f3\u7684\u306b\u306f1\u5206\u3054\u3068)\u3002cli\u30dd\u30c3\u30c9\u3067cron\u3092\u624b\u52d5\u5b9f\u884c\u3057\u3066\u3001purge_processor_cron_cron()\u304c\u30a8\u30e9\u30fc\u306a\u304f\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      cron\u306e\u958b\u59cb
      [drupal8]production@cli-drupal:/app$ drush cron -v\n...\n[notice] purge_processor_cron_cron()\u306e\u5b9f\u884c\u3092\u958b\u59cb\u3001node_cron()\u306e\u5b9f\u884c\u306f21.16ms\u304b\u304b\u308a\u307e\u3057\u305f\u3002\n

      \u30ec\u30a4\u30a2\u30a6\u30c8\u30d1\u30fc\u30b8\u306f\u3001\u30da\u30fc\u30b8\u30ed\u30fc\u30c9\u3054\u3068\u306bhook_exit()\u3067\u5b9f\u884c\u3055\u308c\u308bLate runtime processor\u306b\u3088\u3063\u3066\u51e6\u7406\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d1\u30fc\u30b8\u8981\u6c42\u304c\u30ad\u30e5\u30fc\u306b\u8ffd\u52a0\u3055\u308c\u308b\u3068\u307b\u307c\u540c\u6642\u306b\u51e6\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u975e\u5e38\u306b\u4fbf\u5229\u3067\u3059\u3002

      \u4e21\u65b9\u306e\u65b9\u5f0f\u3092\u4f75\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30d1\u30fc\u30b8\u304c\u53ef\u80fd\u306a\u9650\u308a\u8fc5\u901f\u306b\u5b9f\u884c\u3055\u308c\u308b\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_6","title":"\u6700\u9069\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u8a2d\u5b9a","text":"

      Drupal\u306f\u6a19\u6e96\u8a2d\u5b9a\u3067\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u3068Fastly\u3067\u7570\u306a\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u6709\u52b9\u671f\u9650\u3092\u8a2d\u5b9a\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001Drupal\u3067\u9577\u3044\u30ad\u30e3\u30c3\u30b7\u30e5\u6709\u52b9\u671f\u9650\u3092\u8a2d\u5b9a\u3057\u3066\u3082\u3001\u30d6\u30e9\u30a6\u30b6\u304c\u65e2\u306b\u30da\u30fc\u30b8\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u30e6\u30fc\u30b6\u30fc\u306f\u5909\u66f4\u3092\u78ba\u8a8d\u3067\u304d\u307e\u305b\u3093\u3002HTTP Cache Control\u30e2\u30b8\u30e5\u30fc\u30eb\u306e2.x\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3068\u3001\u3055\u307e\u3056\u307e\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u5bfe\u3057\u3066\u3001\u3088\u308a\u8a73\u7d30\u306a\u6709\u52b9\u671f\u9650\u8a2d\u5b9a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002

      \u307b\u3068\u3093\u3069\u306e\u30b5\u30a4\u30c8\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a2d\u5b9a\u304c\u59a5\u5f53\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002

      • \u5171\u6709\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 1\u30f6\u6708
      • \u30d6\u30e9\u30a6\u30b6\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 10\u5206
      • 404 \u30a8\u30e9\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 15\u5206
      • 302 \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 1\u6642\u9593
      • 301 \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 1\u6642\u9593
      • 5xx \u30a8\u30e9\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: \u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u306a\u3044

      \u6ce8\u610f:

      \u3053\u306e\u8a2d\u5b9a\u306f\u3001\u30b5\u30a4\u30c8\u4e0a\u306e\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306b\u5bfe\u3057\u3066\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#ip","title":"\u5b9f\u969b\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8IP","text":"

      Fastly\u306f\u3001\u5b9f\u969b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092True-Client-IPHTTP\u30d8\u30c3\u30c0\u30fc\u3067\u8fd4\u9001\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002settings.php\u3067\u4ee5\u4e0b\u306e\u5909\u66f4\u3092\u884c\u3046\u3053\u3068\u3067\u3001Drupal\u304c\u3053\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u5c0a\u91cd\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

      Drupal < 8.7.0\u7528\u306esettings.php\u306e\u5909\u66f4
      $settings['reverse_proxy'] = TRUE;\n$settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP';\n

      \u3057\u304b\u3057\u3001Drupal 8.7.0\u3067\u306f\u3001\u3053\u306e\u6a5f\u80fd\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u30b9\u30cb\u30da\u30c3\u30c8\u3067\u540c\u69d8\u306e\u52d5\u4f5c\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002

      Drupal >= 8.7.0\u7528\u306esettings.php\u306e\u5909\u66f4
      /**\n * Drupal\u306bTrue-Client-IP HTTP\u30d8\u30c3\u30c0\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\n */\nif (isset($_SERVER['HTTP_TRUE_CLIENT_IP'])) {\n  $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_TRUE_CLIENT_IP'];\n}\n
      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#drush","title":"Drush\u7d71\u5408","text":"settings.php
       fastly:\n   fastly:purge:all (fpall)                                                    \u30b5\u30fc\u30d3\u30b9\u5168\u4f53\u3092\u30d1\u30fc\u30b8\n   fastly:purge:key (fpkey)                                                    \u30ad\u30fc\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d1\u30fc\u30b8\n   fastly:purge:url (fpurl)                                                    URL\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d1\u30fc\u30b8\n## cURL\u3092\u4f7f\u7528\u3057\u3066Fastly\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u3092\u8868\u793a\u3059\u308b\n\u4ee5\u4e0b\u306e\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044:(Linux\u3068Mac OSX\u3067\u52d5\u4f5c\u3057\u307e\u3059)\n```bash title=\"cURL function\"\nfunction curlf() { curl -sLIXGET -H 'Fastly-Debug:1' \"$@\" | grep -iE 'X-Cache|Cache-Control|Set-Cookie|X-Varnish|X-Hits|Vary|Fastly-Debug|X-Served|surrogate-control|surrogate-key' }\n
      Using cURL
      $ curlf https://www.example-site-fastly.com\ncache-control: max-age=601, public, s-maxage=2764800\nsurrogate-control: max-age=2764800, public, stale-while-revalidate=3600, stale-if-error=3600\nfastly-debug-path: (D cache-wlg10427-WLG 1612906144) (F cache-wlg10426-WLG 1612906141) (D cache-fra19179-FRA 1612906141) (F cache-fra19122-FRA 1612906141)\nfastly-debug-ttl: (H cache-wlg10427-WLG - - 3) (M cache-fra19179-FRA - - 0)\nfastly-debug-digest: 1118d9fefc8a514ca49d49cb6ece04649e1acf1663398212650bb462ba84c381\nx-served-by: cache-fra19179-FRA, cache-wlg10427-WLG\nx-cache: MISS, HIT\nx-cache-hits: 0, 1\nvary: Cookie, Accept-Encoding\n

      \u4e0a\u8a18\u306e\u30d8\u30c3\u30c0\u30fc\u304b\u3089\u3001\u4ee5\u4e0b\u306e\u60c5\u5831\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3059:

      • HTML\u30da\u30fc\u30b8\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u53ef\u80fd
      • \u30d6\u30e9\u30a6\u30b6\u306f\u30da\u30fc\u30b8\u3092601\u79d2\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u307e\u3059
      • Fastly\u306f\u30da\u30fc\u30b8\u309232\u65e5\u9593(2764800\u79d2)\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u307e\u3059
      • \u968e\u5c64\u578b\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u6709\u52b9(Wellington\u306e\u30a8\u30c3\u30b8PoP\u3001\u30d5\u30e9\u30f3\u30b9\u306e\u30b7\u30fc\u30eb\u30c9PoP)
      • HTML\u30da\u30fc\u30b8\u306f\u30a8\u30c3\u30b8PoP\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u3057\u307e\u3057\u305f
      "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#fastly","title":"Fastly\u306b\u624b\u52d5\u3067\u30d1\u30fc\u30b8\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b","text":"

      \u7279\u5b9a\u306e\u30da\u30fc\u30b8\u3092\u624b\u52d5\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u524a\u9664\u3057\u305f\u3044\u5834\u5408\u3001\u3044\u304f\u3064\u304b\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002

      \u5358\u4e00\u306eURL\u3067Fastly\u3092\u30d1\u30fc\u30b8
      curl -Ssi -XPURGE -H 'Fastly-Soft-Purge:1' -H \"Fastly-Key:$FASTLY_API_TOKEN\" https://www.example.com/subpage\n

      \u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3092\u6307\u5b9a\u3057\u3066\u30d1\u30fc\u30b8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

      \u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3067Fastly\u3092\u30d1\u30fc\u30b8
      curl -XPOST -H 'Fastly-Soft-Purge:1' -H \"Fastly-Key:$FASTLY_API_TOKEN\" https://api.fastly.com/service/$FASTLY_API_SERVICE/purge/<surrogatekey>\n

      Fastly CLI\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u3088\u308a\u7c21\u5358\u306b\u30d1\u30fc\u30b8\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/","title":"PHPUnit\u3068PhpStorm","text":"

      \u6ce8\u610f:

      \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306f\u3001\u4ee5\u4e0b\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059:

      - Docker\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b

      - docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u6301\u3064\u6a19\u6e96\u7684\u306aAmazee/Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b

      - Mac\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b(\u4ed6\u306eOS\u3067\u3082\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3059\u304c\u3001\u30d5\u30a9\u30eb\u30c0\u69cb\u9020\u3084\u8a2d\u5b9a\u304c\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059)

      "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_1","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a","text":"
      1. /core/phpunit.xml.dist\u30d5\u30a1\u30a4\u30eb\u3092\u8907\u88fd\u3057\u3001/core/phpunit.xml\u3068\u3044\u3046\u540d\u524d\u3067\u4fdd\u5b58\u3057\u307e\u3059\u3002
      2. /core/phpunit.xml\u3092\u7de8\u96c6\u3057\u3001\u4ee5\u4e0b\u306e\u5909\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059:

        • SIMPLETEST_DB: mysql://drupal:drupal@mariadb:3306/drupal#db
        • SIMPLETEST_BASE_URL: <PROJECT_URL>
      "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#phpstorm","title":"PhpStorm\u306e\u8a2d\u5b9a","text":""},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#docker","title":"Docker\u306e\u8a2d\u5b9a","text":"
      1. PhpStorm\u3067\u3001\u30d5\u30a1\u30a4\u30eb > \u8a2d\u5b9a > \u30d3\u30eb\u30c9\u3001\u5b9f\u884c\u3001\u30c7\u30d7\u30ed\u30a4 > Docker\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002
      2. +\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
      3. Docker for Mac\u3092\u9078\u629e\u3057\u307e\u3059\u3002
      "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#cli","title":"CLI\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u306e\u8a2d\u5b9a","text":"

      \u65b0\u3057\u3044CLI\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u3092\u8ffd\u52a0:

      1. PhpStorm\u3067\u3001\u30d5\u30a1\u30a4\u30eb > \u8a2d\u5b9a > \u8a00\u8a9e & \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af > PHP\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002
      2. ...\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001 +\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
      3. \u6b21\u306b\u3001Docker\u3001vagrant\u306a\u3069\u304b\u3089\u65b0\u3057\u3044CLI\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u3092\u8ffd\u52a0\u3092\u9078\u629e\u3057\u307e\u3059\u3002
      4. \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059: * \u30b5\u30fc\u30d0\u30fc: <DOCKER> * \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb: ./docker-compose.yml * \u30b5\u30fc\u30d3\u30b9: cli * \u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb: \u65e2\u5b58\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a ('docker-compose exec')
      5. \u30d1\u30b9\u306e\u30de\u30c3\u30d4\u30f3\u30b0:
        • \u30ed\u30fc\u30ab\u30eb\u30d1\u30b9: <ROOT_PATH>
        • \u30ea\u30e2\u30fc\u30c8\u30d1\u30b9: /app

      "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_2","title":"\u30ea\u30e2\u30fc\u30c8\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u306e\u8a2d\u5b9a","text":"

      \u30ea\u30e2\u30fc\u30c8\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u306e\u8ffd\u52a0:

      1. PhpStorm\u3067\u3001\u30d5\u30a1\u30a4\u30eb > \u8a2d\u5b9a > \u8a00\u8a9e & \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af > PHP > \u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002
      2. +\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001PHPUnit by Remote Interpreter\u3092\u9078\u629e\u3057\u307e\u3059\u3002
      3. \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059:
        • CLI\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf: <CLI_INTERPRETER>
        • \u30d1\u30b9\u30de\u30c3\u30d4\u30f3\u30b0: <PROJECT_ROOT> -> /app
        • PHPUnit: Use Composer autoloader
        • \u30b9\u30af\u30ea\u30d7\u30c8\u3078\u306e\u30d1\u30b9: /app/vendor/autoload.php
        • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb: /app/web/core/phpunit.xml

      "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_3","title":"\u30e9\u30f3\u30ca\u30fc\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u8a2d\u5b9a/\u69cb\u6210","text":"
      1. \u30e9\u30f3\u30ca\u30fc\u306e\u8a2d\u5b9a:
        1. PhpStorm\u3067\u3001\u5b9f\u884c > \u8a2d\u5b9a\u306e\u7de8\u96c6... > \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 > PHPUnit\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002
        2. \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059:

          1. \u30c6\u30b9\u30c8\u30b9\u30b3\u30fc\u30d7: Defined in the configuration file

          2. \u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc: <CLI_INTERPRETER>

      \u6ce8\u610f:

      Mac\u4ee5\u5916\u306eOS\u3067\u306f\u624b\u9806\u304c\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_4","title":"\u6700\u7d42\u30c1\u30a7\u30c3\u30af","text":""},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_5","title":"\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u524d\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u78ba\u8a8d\u304c\u5fc5\u8981\u3067\u3059\u3002","text":"
      1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u8d77\u52d5\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059:$ docker-compose up -d
      2. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u30a8\u30e9\u30fc\u306a\u304f\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059 (\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3001\u3059\u3079\u3066\u60f3\u5b9a\u901a\u308a\u306b\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044)\u3002\u5fc5\u305a\u3057\u3082\u5fc5\u8981\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304f\u3068\u5b89\u5fc3\u3067\u3059\u3002
      3. \u3053\u308c\u3067\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\uff01
      "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_6","title":"\u5b9f\u884c\u6e96\u5099\u5b8c\u4e86","text":"

      \u4e0a\u8a18\u306e\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u3066\u3044\u308c\u3070\u3001\u5b9f\u884c\u3057\u305f\u3044\u30c6\u30b9\u30c8\u306b\u79fb\u52d5\u3057\u3001\u7dd1\u8272\u306e\u77e2\u5370\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3060\u3051\u3067\u7c21\u5358\u306b\u5b9f\u884c\u3067\u304d\u307e\u3059\uff01

      PhpStorm\u306f\u3001Docker\u3092\u4f7f\u7528\u3057\u3066CLI\u30b3\u30f3\u30c6\u30ca\u306b\u5165\u308a\u3001\u8a2d\u5b9a\u306b\u57fa\u3065\u3044\u3066PHPUnit\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/","title":"\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7:Drupal\u3092Lagoon\u3067\u5b9f\u884c\u3059\u308b\u6e96\u5099","text":""},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#1-lagoon-drupal-setting-files","title":"1. Lagoon Drupal \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

      Drupal\u304cLagoon\u3068\u9023\u643a\u3059\u308b\u305f\u3081\u306b\u306f\u3001Drupal\u306bLagoon\u306e\u3053\u3068\u3092\u3001Lagoon\u306bDrupal\u306e\u3053\u3068\u3092\u6559\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u7279\u5b9a\u306eYAML\u3068PHP\u30d5\u30a1\u30a4\u30eb\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002

      Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u308b\u5834\u5408\u306f\u3001\u79c1\u305f\u3061\u306e\u4f8b\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3042\u308b\u69d8\u3005\u306aDrupal\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u3066 Drupal 8\u3001Drupal 9 \u3060\u3051\u3067\u306a\u304f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u7a2e\u985e\u306a\u3069\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u3082\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u958b\u59cb\u3059\u308b\u306b\u306f\u3001\u81ea\u5206\u306e\u30cb\u30fc\u30ba\u306b\u5408\u3063\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\uff01

      \u4ee5\u4e0b\u306f\u3001Lagoon\u3068Drupal\u306b\u7279\u5316\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u6982\u8981\u3067\u3059\uff1a

      • .lagoon.yml - Lagoon\u304c\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3059\u308b\u5185\u5bb9\u306a\u3069\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306e\u30e1\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002Drupal\u5411\u3051\u306e\u9069\u5207\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7de8\u96c6\u3084\u5909\u66f4\u3092\u884c\u3046\u5834\u5408\u306f\u3001.lagoon.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      • docker-compose.yml\u3001.dockerignore\u3001\u304a\u3088\u3073 *.dockerfile (\u307e\u305f\u306f Dockerfile) - \u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30fc\u30ab\u30eb\u306eDrupal\u958b\u767a\u74b0\u5883\u306e\u5b9f\u884c\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001Docker\u306b\u5bfe\u3057\u3066\u8d77\u52d5\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u7a2e\u985e\u3084\u30d3\u30eb\u30c9\u65b9\u6cd5\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u9069\u5207\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3068\u3001\u591a\u304f\u306e\u30b3\u30e1\u30f3\u30c8\u884c\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u5185\u5bb9\u304c\u8aad\u307f\u53d6\u308c\u308b\u3088\u3046\u5341\u5206\u306a\u30b3\u30e1\u30f3\u30c8\u304c\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002
      • sites/default/* - .php\u3068.yml\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001Drupal\u304c\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u306e\u4e21\u65b9\u3067Lagoon\u30b3\u30f3\u30c6\u30ca\u3068\u901a\u4fe1\u3059\u308b\u65b9\u6cd5\u3092Drupal\u306b\u6307\u793a\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u958b\u767a\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u3067\u7279\u5b9a\u306e\u8a2d\u5b9a\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9 (\u4e0a\u66f8\u304d) \u3059\u308b\u305f\u3081\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u4ed5\u7d44\u307f\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002\u4ed6\u306eDrupal\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3068\u306f\u7570\u306a\u308a\u3001Lagoon\u306fDrupal\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u4e00\u5207\u5e72\u6e09\u3057\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u7531\u306b\u7de8\u96c6\u3067\u304d\u307e\u3059\u3002\u4ed6\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u540c\u69d8\u306b\u3001\u9069\u5207\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3068\u3001\u4e00\u90e8\u30b3\u30e1\u30f3\u30c8\u4ed8\u304d\u306e\u90e8\u5206\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
      • drush/aliases.drushrc.php - Drush\u72ec\u81ea\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3001Drush\u304cLagoon\u306eGraphQL API\u3092\u4f7f\u3063\u3066\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9 (\u30b5\u30a4\u30c8\u306e\u5225\u540d) \u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u3092Drush\u306b\u6307\u793a\u3057\u307e\u3059\u3002
      • drush/drushrc.php - Drush\u30b3\u30de\u30f3\u30c9\u7528\u306e\u9069\u5207\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002
      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#update-your-gitignore-settings","title":".gitignore\u8a2d\u5b9a\u306e\u66f4\u65b0","text":"

      \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30df\u30c3\u30c8\u3067\u304d\u308b\u3088\u3046\u306b\u3001.gitignore\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      Drupal\u306fsites/*/settings*.php\u3068sites/*/services*.yml\u3092.gitignore\u3067\u30b3\u30df\u30c3\u30c8\u304b\u3089\u9664\u5916\u3059\u308b\u3088\u3046\u306b\u521d\u671f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002Lagoon \u74b0\u5883\u3067\u306f\u6a5f\u5bc6\u60c5\u5831\u306f Git \u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u306a\u3044\u306e\u3067\u3001\u3053\u306e\u9664\u5916\u8a2d\u5b9a\u3092\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#note-about-webroot-in-drupal-8","title":"Drupal 8\u306eWEBROOT\u306b\u95a2\u3059\u308b\u6ce8\u610f\u4e8b\u9805","text":"

      \u6b8b\u5ff5\u306a\u304c\u3089\u3001Drupal\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u306fWEBROOT\u30d5\u30a9\u30eb\u30c0\u540d\u306e\u6a19\u6e96\u5316\u304c\u307e\u3060\u6c7a\u307e\u3063\u3066\u3044\u307e\u305b\u3093\u3002Drupal\u3092web\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u914d\u7f6e\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3082\u3042\u308c\u3070\u3001docroot\u3084\u5225\u306e\u5834\u6240\u306b\u5165\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3082\u3042\u308a\u307e\u3059\u3002Lagoon\u306eDrupal\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u3001Drupal\u304cweb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u914d\u7f6e\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u3082\u3057\u3042\u306a\u305f\u306eDrupal\u306e\u69cb\u6210\u304c\u7570\u306a\u308b\u5834\u5408\u306f\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u305d\u308c\u306b\u5408\u308f\u305b\u3066\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#note-about-composerjson","title":"composer.json\u306b\u95a2\u3059\u308b\u6ce8\u610f\u4e8b\u9805","text":"

      Composer \u3092\u4f7f\u3063\u3066 Drupal \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u5834\u5408\u3001composer.json\u3092\u78ba\u8a8d\u3057\u3001name\u304cdrupal/drupal\u3067\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u540d\u524d\u306f Drush \u3084\u305d\u306e\u4ed6\u306e Drupal \u95a2\u9023\u30c4\u30fc\u30eb\u3068\u7af6\u5408\u3057\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001myproject/drupal\u306a\u3069\u3001\u5225\u306e\u540d\u524d\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#2-customize-docker-composeyml","title":"2. docker-compose.yml\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba","text":"

      lagoon-project\u3068LAGOON_ROUTE\u306e\u5024\u3092\u5fd8\u308c\u305a\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3001\u30b5\u30a4\u30c8\u540d\u3068\u30a2\u30af\u30bb\u30b9\u3057\u305f\u3044URL\u306b\u66f8\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4ee5\u4e0b\u306b\u4f8b\u3092\u793a\u3057\u307e\u3059:

      docker-compose.yml
      x-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# Route that should be used locally. If you are using pygmy, this route *must* end with .docker.amazee.io.\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n
      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#3-build-images","title":"3. \u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9","text":"

      \u307e\u305a\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      \u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9
      docker-compose build\n

      \u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001docker-compose.yml\u5185\u3067build:\u306e\u5b9a\u7fa9\u304c\u3042\u308b\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u3088\u3046\u306bdocker-compose\u306b\u6307\u793a\u3057\u307e\u3059\u3002\u901a\u5e38\u3001Drupal\u3067\u306fcli\u3001nginx\u3001php\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u8a72\u5f53\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u7279\u5b9a\u306e\u30d3\u30eb\u30c9\u30b3\u30de\u30f3\u30c9(composer install\u306a\u3069)\u3092\u5b9f\u884c\u3057\u305f\u308a\u3001\u7279\u5b9a\u306e\u74b0\u5883\u5909\u6570(WEBROOT\u306a\u3069)\u3092\u30a4\u30e1\u30fc\u30b8\u306b\u6ce8\u5165\u3059\u308b\u305f\u3081\u3067\u3059\u3002

      \u901a\u5e38\u3001Drupal \u30b3\u30fc\u30c9\u3092\u7de8\u96c6\u3059\u308b\u305f\u3073\u306b\u30d3\u30eb\u30c9\u3092\u884c\u3046\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093 (\u30b3\u30fc\u30c9\u306f\u30db\u30b9\u30c8\u304b\u3089\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u308b\u305f\u3081)\u3002\u3068\u306f\u3044\u3048\u3001\u30d3\u30eb\u30c9\u3092\u3057\u3066\u3082\u4f55\u3089\u304b\u306e\u554f\u984c\u304c\u751f\u3058\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3055\u3089\u306b\u3001Lagoon \u306f\u30c7\u30d7\u30ed\u30a4\u4e2d\u306b\u307e\u3063\u305f\u304f\u540c\u3058 Docker \u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u306e\u3067\u3001docker-compose build\u30b3\u30de\u30f3\u30c9\u3092\u3082\u3046\u4e00\u5ea6\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30d7\u30ed\u30a4\u6642\u306b\u3082\u30d3\u30eb\u30c9\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#4-start-containers","title":"4. \u30b3\u30f3\u30c6\u30ca\u306e\u8d77\u52d5","text":"

      \u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u305f\u306e\u3067\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3067\u304d\u307e\u3059:

      \u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5
      docker-compose up -d\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002\u30b3\u30de\u30f3\u30c9\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u3001docker-compose ps\u3067\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u5b8c\u5168\u306b\u7acb\u3061\u4e0a\u304c\u3063\u3066\u3044\u308b\u304b\u3001\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u3066\u3044\u306a\u3044\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u554f\u984c\u304c\u3042\u308b\u5834\u5408\u306f\u3001docker-compose logs -f [servicename]\u3067\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#5-rerun-composer-install","title":"5. composer install\u3092\u518d\u5b9f\u884c\u3057\u307e\u3059\uff08composer\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u307f\uff09","text":"

      \u30ed\u30fc\u30ab\u30eb\u306e\u958b\u767a\u74b0\u5883\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u3044\u3068\u601d\u3046\u3067\u3057\u3087\u3046\u3002\u305d\u306e\u305f\u3081\u3001cli\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u3066composer install\u3092\u5b9f\u884c\u3057\u307e\u3059:

      CLI\u3067composer install\u3092\u5b9f\u884c
      docker-compose exec cli bash\ncomposer install\n

      \u5c11\u3057\u5947\u5999\u306b\u611f\u3058\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u30d3\u30eb\u30c9\u624b\u9806\u3067\u3059\u3067\u306bcomposer install\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u8aac\u660e\u3092\u52a0\u3048\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3059:

      • \u30db\u30b9\u30c8\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3066\u3001\u3059\u3050\u306b\u30b3\u30f3\u30c6\u30ca\u3067\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306edocker-composer.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u3059\u3079\u3066\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u30b3\u30f3\u30c6\u30ca\u5185\u306b\u30de\u30a6\u30f3\u30c8\u3057\u3066\u3044\u307e\u3059 (\u30dc\u30ea\u30e5\u30fc\u30e0\u30bb\u30af\u30b7\u30e7\u30f3\u306e.:/app:delegated\u304c\u3053\u308c\u306b\u8a72\u5f53\u3057\u307e\u3059)\u3002\u3064\u307e\u308a\u3001Docker\u30d3\u30eb\u30c9\u6642\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u306f\u3001\u30db\u30b9\u30c8\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002
      • \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306b\u304a\u3044\u3066\u306f\u3001composer.json\u3067require-dev\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u3082\u5b58\u5728\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308b\u3067\u3057\u3087\u3046\u3002\u4e00\u65b9\u3001\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u305d\u3046\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u306f\u305f\u3060\u7121\u99c4\u306a\u5bb9\u91cf\u3092\u6d88\u8cbb\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u3001Dockerfile\u5185\u3067\u306f composer install --no-dev\u3092\u5b9f\u884c\u3057\u3001\u624b\u52d5\u3067composer install\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

      \u3059\u3079\u3066\u554f\u984c\u306a\u304f\u52d5\u4f5c\u3057\u3066\u3044\u308b\u5834\u5408\u3001docker-compose.yml (\u4f8b\u3048\u3070 http://drupal.docker.amazee.io)\u3067\u5b9a\u7fa9\u3055\u308c\u305fLAGOON_ROUTE\u3092\u958b\u304f\u3068\u3001Drupal\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u4eca\u306e\u6bb5\u968e\u3067\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u91cd\u8981\u306a\u306e\u306f\u3001Drupal\u30b5\u30a4\u30c8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u3002

      500\u30a8\u30e9\u30fc\u3084\u540c\u69d8\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001Composer\u306b\u3088\u3063\u3066\u3059\u3079\u3066\u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#6-check-status-and-install-drupal","title":"6. \u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u78ba\u8a8d\u3068Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

      \u3044\u3088\u3044\u3088Drupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u304c\u3001\u305d\u306e\u524d\u306b\u3059\u3079\u3066\u304c\u6a5f\u80fd\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u306bDrush\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059:

      Drush status
      docker-compose exec cli bash\ndrush status\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7d50\u679c\u304c\u8fd4\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

      Drush status result
      [drupal-example]cli-drupal:/app$ drush status\n[notice] Missing database table: key_value\nDrupal version       :  8.6.1\nSite URI             :  http://drupal.docker.amazee.io\nDatabase driver      :  mysql\nDatabase hostname    :  mariadb\nDatabase port        :  3306\nDatabase username    :  drupal\nDatabase name        :  drupal\nPHP binary           :  /usr/local/bin/php\nPHP config           :  /usr/local/etc/php/php.ini\nPHP OS               :  Linux\nDrush script         :  /app/vendor/drush/drush/drush\nDrush version        :  9.4.0\nDrush temp           :  /tmp\nDrush configs        :  /home/.dr ush/drush.yml\n                        /app/vendor/drush/drush/drush.yml\nDrupal root          :  /app/web\nSite path            :  sites/default\n

      \u8b66\u544a

      \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u524d\u306b\u3001pygmy\u306b\u516c\u958b\u9375\u306b\u3064\u3044\u3066\u4f1d\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      Permission denied (publickey)\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u304c\u51fa\u305f\u5834\u5408\u306f\u3001\u3053\u3061\u3089\u304b\u3089SSH\u30ad\u30fc\u306e\u8ffd\u52a0\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044: pygmy - ssh\u30ad\u30fc\u306e\u8ffd\u52a0

      \u6b21\u306bDrupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059(\u65e2\u5b58\u306eSQL\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u30b9\u30c6\u30c3\u30d77\u3078\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305f\u3060\u3057\u3001\u3059\u3079\u3066\u304c\u6a5f\u80fd\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\u306b\u3001\u6700\u521d\u304b\u3089\u30af\u30ea\u30fc\u30f3\u306aDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002))\u3002

      Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
      drush site-install\n

      \u4ee5\u4e0b\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

      drush site-install
      [drupal-example]cli-drupal:/app$ drush site-install\nYou are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y\nStarting Drupal installation. This takes a while. Consider using the --notify global option.\nInstallation complete.  User name: admin  User password: a7kZJekcqh\nCongratulations, you installed Drupal!\n

      LAGOON_ROUTE\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308bURL\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001\u65b0\u3057\u304f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fDrupal\u30b5\u30a4\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\uff01

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#7-import-existing-database-dump","title":"7. \u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b","text":"

      \u65e2\u306b\u65e2\u5b58\u306eDrupal\u30b5\u30a4\u30c8\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30ed\u30fc\u30ab\u30eb\u30b5\u30a4\u30c8\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u3068\u601d\u3046\u3067\u3057\u3087\u3046\u3002

      \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u306f\u591a\u6570\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u306e\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306bDrush\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059:

      Drush sql-dump
      drush sql-dump --result-file=dump.sql\n\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u306fdump.sql\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\n

      \u3053\u308c\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5168\u4f53\u3092\u542b\u3080dump.sql\u30d5\u30a1\u30a4\u30eb\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002

      \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u3001cli\u306b\u63a5\u7d9a\u3059\u308b\u3068\u3001\u305d\u306e\u4e2d\u306b\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

      dump.sql\u306e\u8868\u793a
      [drupal-example]cli-drupal:/app$ ls -l dump.sql\n-rw-r--r--    1 root     root          5281 Dec 19 12:46 dump.sql\n

      \u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u524a\u9664\u3057\u3001\u30c0\u30f3\u30d7\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u304d\u307e\u3059\u3002

      dump.sql\u306e\u30a4\u30f3\u30dd\u30fc\u30c8
      drush sql-drop\n\ndrush sql-cli < dump.sql\n

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3001\u3059\u3079\u3066\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3067\u3001Drupal\u30b5\u30a4\u30c8\u304c\u6b63\u5e38\u306b\u6a5f\u80fd\u3057\u3066\u3044\u308b\u306f\u305a\u3067\u3059\uff01

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#8-drupal-files-directory","title":"8. Drupal\u30d5\u30a1\u30a4\u30eb \u30c7\u30a3\u30ec\u30af\u30c8\u30ea","text":"

      Drupal\u30b5\u30a4\u30c8\u306b\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3082\u5fc5\u8981\u3067\u3059\u3002\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u5168\u4f53\u306fDocker\u30b3\u30f3\u30c6\u30ca\u5185\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u308b\u305f\u3081\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u6b63\u3057\u3044\u30d5\u30a9\u30eb\u30c0\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044 (\u304a\u305d\u3089\u304fweb/sites/default/files\u3001sites/default/files\u307e\u305f\u306f\u540c\u69d8\u306e\u30d5\u30a9\u30eb\u30c0\u3067\u3059)\u3002\u8a2d\u5b9a\u3057\u305fWEBROOT\u3092\u899a\u3048\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044 - \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3054\u3068\u306b\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093

      "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#done","title":"9. \u5b8c\u4e86","text":"

      \u30ed\u30fc\u30ab\u30eb\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002Lagoon \u30c1\u30fc\u30e0\u306f\u3001\u7686\u69d8\u306e\u697d\u3057\u3044 Drupaling \u3092\u5fdc\u63f4\u3057\u3066\u3044\u307e\u3059\uff01

      "},{"location":"ja/applications/drupal/subfolders/","title":"\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0","text":"

      \u4f8b\u3048\u3070\u3001www.example.com\u306f\u3042\u308bDrupal\u30b5\u30a4\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3057\u3001www.example.com/blog\u306f\u5225\u306eDrupal\u3067\u69cb\u7bc9\u3055\u308c\u305f\u30d6\u30ed\u30b0\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002

      \u3053\u306e\u5834\u5408\u3001\u4e21\u65b9\u306eDrupal\u3092\u5358\u4e00\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u7ba1\u7406\u3057\u3001\u307e\u3068\u3081\u3066\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u5168\u3066\u306e\u30c1\u30fc\u30e0\u306b\u9069\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u306a\u304f\u3001\u72b6\u6cc1\u306b\u3088\u3063\u3066\u306f\u5225\u3005\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f7f\u7528\u3057\u305f\u65b9\u304c\u826f\u3044\u5834\u5408\u3082\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/subfolders/#_2","title":"\u30eb\u30fc\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5909\u66f4","text":"

      \u30eb\u30fc\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(\u3053\u306e\u4f8b\u3067\u306fwww.example.com\u306eDrupal\u30b5\u30a4\u30c8)\u306f\u3001NGINX\u3092\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3078\u306e\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306eNGINX\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u3044\u304f\u3064\u304b\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059:

      "},{"location":"ja/applications/drupal/subfolders/#location_prependconf","title":"location_prepend.conf","text":"

      Drupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30eb\u30fc\u30c8\u306blocation_prepend.conf\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059:

      location_prepend.conf
      resolver 8.8.8.8 valid=30s;\n\nlocation ~ ^/subfolder {\n  # $http_x_forwarded_proto\u304c\u7a7a\u306e\u5834\u5408 (\u4e0a\u6d41\u306e\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u304b\u3089\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408)\n  # \u73fe\u5728\u306e\u30b9\u30ad\u30fc\u30e0\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\n  set_if_empty $http_x_forwarded_proto $scheme;\n\n  proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;\n  proxy_set_header      X-Forwarded-Proto $scheme;\n  proxy_set_header      X-Forwarded-Proto $http_x_forwarded_proto;\n  proxy_set_header      X-Lagoon-Forwarded-Host $ \u30db\u30b9\u30c8;\n  # \u5143\u306e\u30db\u30b9\u30c8\u3092\u4e0b\u6d41\u304c\u77e5\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n  proxy_set_header      X-REVERSEPROXY $hostname;\n  proxy_set_header      FORWARDED \"\";\n  # Drupal 8\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u305f\u3081\u3001FORWARDED\u30d8\u30c3\u30c0\u30fc\u3092\u524a\u9664\u3057\u307e\u3059\u3002\n  proxy_set_header      Proxy \"\";\n  # Drupal 8\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u305f\u3081\u3001Proxy\u30d8\u30c3\u30c0\u30fc\u3092\u524a\u9664\u3057\u307e\u3059\u3002\n  proxy_ssl_server_name on;\n\n  # NGINX\u3067DNS\u89e3\u6c7a\u3092\u6b63\u3057\u304f\u52d5\u4f5c\u3055\u305b\u308b\u306b\u306f\u3001\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n  set                   $subfolder_drupal_host \"https://nginx-lagoonproject-${LAGOON_GIT_SAFE_BRANCH}.clustername.com:443\";\n  # LAGOON_GIT_SAFE_BRANCH\u5909\u6570\u306fdocker\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u6642\u306b\u7f6e\u63db\u3055\u308c\u307e\u3059\u3002\n  proxy_pass            $subfolder_drupal_host;\n  proxy_set_header      Host $proxy_host;\n  # $proxy_host\u306f\u3001NGINX\u304cproxy_pass\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6(\u30b9\u30ad\u30fc\u30e0\u3068\u30dd\u30fc\u30c8\u3092\u9664\u304f\u30db\u30b9\u30c8\u540d)\u3092\u5143\u306b\u81ea\u52d5\u751f\u6210\u3055\u308c\u307e\u3059\u3002\n\n  expires off; # \u30d7\u30ed\u30ad\u30b7\u304b\u3089\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u3092\u5c0a\u91cd\u3057\u3001\u4e0a\u66f8\u304d\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\n

      \u4ee5\u4e0b\u306e\u6587\u5b57\u5217\u3092\u7f6e\u63db\u3057\u3066\u304f\u3060\u3055\u3044:

      • /subfolder\uff1a\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u4f8b\u3048\u3070\u3001/blog\u3002
      • nginx\uff1a\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u53c2\u7167\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      • lagoonproject\uff1a\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eLagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      "},{"location":"ja/applications/drupal/subfolders/#n-ginx-dockerfile","title":"N GINX Dockerfile","text":"

      \u4ee5\u4e0b\u306e\u5185\u5bb9\u3092NGINX Dockerfile(nginx.dockerfile\u307e\u305f\u306fDockerfile.nginx)\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044:

      nginx.dockerfile
      COPY location_prepend.conf /etc/nginx/conf.d/drupal/location_prepend.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/*\n
      "},{"location":"ja/applications/drupal/subfolders/#_3","title":"\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5909\u66f4","text":"

      \u30eb\u30fc\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u540c\u69d8\u306b\u3001\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(\u3053\u306e\u4f8b\u3067\u306f\u3001www.example.com/blog\u306eDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb)\u306b\u5bfe\u3057\u3066\u3082\u3001\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e2\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059:

      "},{"location":"ja/applications/drupal/subfolders/#location_drupal_append_subfolderconf","title":"location_drupal_append_subfolder.conf","text":"

      \u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3001location_drupal_append_subfolder.conf\u3068\u3044\u3046\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059:

      location_drupal_append_subfolder.conf
      # Drupal\u306f\u3001`subfolder`\u3067\u59cb\u307e\u308b\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u304c\u4ed8\u3044\u305f\u30b9\u30af\u30ea\u30d7\u30c8\u540d\u3092\u6ce8\u5165\u3059\u308b\u3068\u3001\n# \u3059\u3079\u3066\u306eURL\u306b`subfolder`\u3092\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3068\u3057\u3066\u4ed8\u52a0\u3057\u3066\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002\nfastcgi_param  SCRIPT_NAME        /subfolder/index.php;\n\n# \u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u7d4c\u7531\u3067\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u30aa\u30ea\u30b8\u30ca\u30eb\u306eHOST URL\u3092\n# PHP\u306b\u6ce8\u5165\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Drupal\u306f\u73fe\u5728\u306eHOST\u3067\u306f\u306a\u304f\u3001\n# \u30aa\u30ea\u30b8\u30ca\u30eb\u306eHOST URL\u3092\u7528\u3044\u3066\u3059\u3079\u3066\u306e URL \u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002\n\n# \u6700\u521d\u306b\u3001HOST\u3092\u901a\u5e38\u306e\u30db\u30b9\u30c8\u5909\u6570\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\nfastcgi_param  HTTP_HOST          $http\n``` _host;\n# \u305d\u308c\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u3001`X-Lagoon-Forwarded-Host`\u3067\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002\nfastcgi_param  HTTP_HOST          $http_x_lagoon_forwarded_host if_not_empty;\n

      \u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u540d\u3067 /subfolder\u3092\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001/blog\u306e\u3088\u3046\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/subfolders/#server_prepend_subfolderconf","title":"server_prepend_subfolder.conf","text":"

      \u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u3067\u306eDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3001server_prepend_subfolder.conf\u3068\u3044\u3046\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044:

      server_prepend_subfolder.conf
      # \u5185\u90e8NGINX\u30ea\u30e9\u30a4\u30c8\u306f`last`\u30d5\u30e9\u30b0\u3092\u4f7f\u3046\u305f\u3081\u3001\n# \u30ea\u30e9\u30a4\u30c8\u306e\u524d\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u6709\u7121\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\n# `last`\u30d5\u30d5\u30e9\u30b0\u306fNGINX\u306b\u5bfe\u3057\u3066\u3001\u3053\u308c\u4ee5\u964d\u306e\u30ea\u30e9\u30a4\u30c8\u51e6\u7406\u3092\u884c\u308f\u306a\u3044\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\n# (\u307e\u305f\u3001`if`\u306f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u4e00\u90e8\u3067\u3059\u3002)\ninclude /etc/nginx/helpers/010_redirects.conf;\n\n# \u3053\u306e\u30ea\u30e9\u30a4\u30c8\u306f\u30ea\u30af\u30a8\u30b9\u30c8URL\u304b\u3089`/subfolder/`\u3092\u524a\u9664\u3057\u3001\n# \u3042\u305f\u304b\u3082\u6700\u521d\u304b\u3089`/`\u3067\u3042\u3063\u305f\u304b\u306e\u3088\u3046\u306bNGINX\u304c\n# \u51e6\u7406\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\n# `last`\u30d5\u30e9\u30b0\u3082\u91cd\u8981\u3067\u3059\u3002\n# \u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u30ea\u30e9\u30a4\u30c8\u304c\u6c38\u7d9a\u7684\u306b\u7e70\u308a\u8fd4\u3055\u308c\u308b\u306e\u3092\u9632\u304e\u307e\u3059\u3002\nrewrite ^/subfolder/(.*)          /$1             last;\n\n# NGINX\u306b\u3088\u3063\u3066\u73fe\u5728\u51e6\u7406\u3055\u308c\u3066\u3044\u308b\u30db\u30b9\u30c8\u60c5\u5831\u304c\u4e0a\u66f8\u304d\u3055\u308c\u306a\u3044\u3088\u3046\u3001\n# \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u7d76\u5bfe\u30d1\u30b9\u3092\u4f7f\u7528\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002\nabsolute_redirect off;\n\n# `/subfolder`\u3060\u3051\u304c\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u5834\u5408\u3001301\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3067\n# `/subfolder`(Drupal\u306f\u672b\u5c3e\u306e\u30b9\u30e9\u30c3\u30b7\u30e5\u3092\u597d\u307f\u307e\u3059)\u306b\u8ee2\u9001\u3057\u307e\u3059\u3002\nrewrite ^/subfolder               /subfolder/     permanent;\n\n# \u305d\u306e\u4ed6\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u306f\u3001301\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u30d1\u30b9\u306b`/subfolder/`\u3092\u5148\u982d\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\nrewrite ^\\/(.*)                   /subfolder/$1   permanent;\n

      /subfolder\u306f\u3001\u4f7f\u7528\u3059\u308b\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u540d\u524d\u3068\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001\u30d6\u30ed\u30b0\u7528\u306e\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u3067\u3042\u308c\u3070 /blog\u3068\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/subfolders/#nginx-dockerfile","title":"NGINX Dockerfile","text":"

      NGINX Dockerfile\u3082\u7de8\u96c6\u304c\u5fc5\u8981\u3067\u3059\u3002

      NGINX Dockerfile(\u901a\u5e38\u306fnginx.dockerfile \u307e\u305f\u306f Dockerfile.nginx)\u306b\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044:

      nginx.dockerfile
      COPY location_drupal_append_subfolder.conf /etc/nginx/conf.d/drupal/location_drupal_append_subfolder.conf\nCOPY server_prepend_subfolder.conf /etc/nginx/conf.d/drupal/server_prepend_subfolder.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/*\n
      "},{"location":"ja/applications/drupal/services/","title":"\u6982\u8981","text":""},{"location":"ja/applications/drupal/services/#mariadbmysql","title":"MariaDB\u306f\u3001\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eMySQL\u306e\u5f8c\u7d99\u8005\u3067\u3059","text":"

      Drupal\u3068MariaDB\u306b\u3064\u3044\u3066\u5b66\u3076

      \u6a19\u6e96\u7684\u306aMariaDB\u30a4\u30e1\u30fc\u30b8\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3(\u3053\u306eMariaDB-Drupal\u30a4\u30e1\u30fc\u30b8\u306f\u3053\u308c\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059)

      "},{"location":"ja/applications/drupal/services/#redis","title":"Redis\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u30d6\u30ed\u30fc\u30ab\u30fc\u3001\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u3001\u9ad8\u901f\u3067\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a4\u30f3\u30e1\u30e2\u30ea\u30fb\u30ad\u30fc\u30d0\u30ea\u30e5\u30fc\u30fb\u30c7\u30fc\u30bf\u30b9\u30c8\u30a2\u3067\u3059","text":"

      Drupal\u3068Redis\u306b\u3064\u3044\u3066\u5b66\u3076

      Redis-persistent\u30a4\u30e1\u30fc\u30b8\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3

      "},{"location":"ja/applications/drupal/services/#solr","title":"Solr\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059","text":"

      Drupal\u3068Solr\u306b\u3064\u3044\u3066\u5b66\u3076

      \u6a19\u6e96\u7684\u306aSolr\u30a4\u30e1\u30fc\u30b8\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 (\u3053\u306eSolr-Drupal\u30a4\u30e1\u30fc\u30b8\u306f\u3053\u308c\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059)

      "},{"location":"ja/applications/drupal/services/#varnishhttphttp","title":"Varnish\u306f\u3001\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306e\u5f37\u529b\u306a\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eHTTP\u30a8\u30f3\u30b8\u30f3\u304a\u3088\u3073\u30ea\u30d0\u30fc\u30b9HTTP\u30d7\u30ed\u30ad\u30b7\u3067\u3059","text":"

      Drupal\u3068Varnish\u306b\u3064\u3044\u3066\u5b66\u3076

      \u6a19\u6e96\u7684\u306aVarnish\u30a4\u30e1\u30fc\u30b8\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 (\u3053\u306eVarnish-Drupal\u30a4\u30e1\u30fc\u30b8\u306f\u3053\u308c\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059)

      "},{"location":"ja/applications/drupal/services/mariadb/","title":"MariaDB","text":"

      Lagoon\u306e mariadb-drupal Docker\u30a4\u30e1\u30fc\u30b8 Dockerfile \u306f\u3001Lagoon\u306eDrupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f mariadb \u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002 mariadb \u30a4\u30e1\u30fc\u30b8\u3068\u7570\u306a\u308b\u306e\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u74b0\u5883\u5909\u6570\u306b\u3088\u3063\u3066\u884c\u308f\u308c\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u521d\u671f\u8a2d\u5b9a\u3060\u3051\u3067\u3059:

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e MARIADB_DATABASE drupal \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308bDrupal\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 MARIADB_USER drupal \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc MARIADB_PASSWORD drupal \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9

      LAGOON_ENVIRONMENT_TYPE \u5909\u6570\u304c production \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f MARIADB_INNODB_BUFFER_POOL_SIZE=1024 \u304a\u3088\u3073 MARIADB_INNODB_LOG_FILE_SIZE=256 \u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u6700\u9069\u5316\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/services/mariadb/#mariadb_1","title":"MariaDB \u30ed\u30b0\u306e\u8ffd\u52a0\u8a2d\u5b9a","text":"

      \u958b\u767a\u306e\u904e\u7a0b\u3067\u3001\u30af\u30a8\u30ea\u30ed\u30b0\u307e\u305f\u306f\u30b9\u30ed\u30fc\u30af\u30a8\u30ea\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u305d\u3046\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u74b0\u5883\u5909\u6570 MARIADB_LOG_SLOW \u307e\u305f\u306f MARIADB_LOG_QUERIES \u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306fdocker-compose.yml\u3067\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059.

      "},{"location":"ja/applications/drupal/services/mariadb/#mysql","title":"\u30db\u30b9\u30c8\u304b\u3089MySQL\u30b3\u30f3\u30c6\u30ca\u3078\u306e\u63a5\u7d9a","text":"

      Sequel Pro\u3001MySQL Workbench\u3001HeidiSQL\u3001DBeaver\u3001\u6a19\u6e96\u7684\u306amysql-cli\u306a\u3069\u306e\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u3001Docker\u30b3\u30f3\u30c6\u30ca\u5185\u306eMySQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3057\u305f\u3044\u5834\u5408\u3001IP\u30a2\u30c9\u30ec\u30b9\u3068\u30dd\u30fc\u30c8\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/services/mariadb/#mysql_1","title":"\u30b3\u30f3\u30c6\u30ca\u304b\u3089\u516c\u958b\u3055\u308c\u305f MySQL \u30dd\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b","text":"

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001Docker\u306f\u5404\u30b3\u30f3\u30c6\u30ca\u8d77\u52d5\u6642\u306bMySQL\u306e\u516c\u958b\u30dd\u30fc\u30c8\u3092\u30e9\u30f3\u30c0\u30e0\u306b\u5272\u308a\u5f53\u3066\u307e\u3059\u3002\u3053\u308c\u306f\u30dd\u30fc\u30c8\u306e\u885d\u7a81\u3092\u9632\u3050\u305f\u3081\u306b\u884c\u308f\u308c\u307e\u3059\u3002

      docker\u3092\u4f7f\u3063\u3066\u516c\u958b\u30dd\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f:

      docker port [container_name]\u3092\u5b9f\u884c

      \u30dd\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b
      $ docker port drupal_example_mariadb_1\n3306/tcp -> 0.0.0.0:32797\n

      \u307e\u305f\u306f\u3001Drupal\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306edocker-compose\u3092\u4f7f\u7528\u3057\u3066:

      docker-compose port [service_name] [internal_port]\u3092\u5b9f\u884c

      \u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b
      docker-compose port mariadb 3306\n0.0.0.0:32797\n
      "},{"location":"ja/applications/drupal/services/mariadb/#_1","title":"\u9759\u7684\u30dd\u30fc\u30c8\u306e\u8a2d\u5b9a(\u975e\u63a8\u5968)","text":"

      \u958b\u767a\u4e2d\u306b\u5916\u90e8\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001MySQL\u63a5\u7d9a\u30dd\u30fc\u30c8\u3092\u5e38\u306b\u78ba\u8a8d\u3057\u8a2d\u5b9a\u3059\u308b\u306e\u306f\u9762\u5012\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      \u9759\u7684\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001docker-compose.yml\u306e\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\u3092\u7de8\u96c6\u3057\u307e\u3059\u3002

      docker-compose.yml
        mariadb:\n...\nports:\n- \"33772:3306\" # \u30dd\u30fc\u30c83306\u3092\u30db\u30b9\u30c8\u30dd\u30fc\u30c8\u306e33772\u3092\u6307\u5b9a\u3057\u3066\u516c\u958b\u3057\u307e\u3059\u3002\u3053\u308c\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u30dd\u30fc\u30c8\u306e\u885d\u7a81\u3092\u7ba1\u7406\u3059\u308b\u8cac\u4efb\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u3002\n

      \u8b66\u544a

      \u9759\u7684\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30dd\u30fc\u30c8\u306e\u885d\u7a81\u3092\u7ba1\u7406\u3059\u308b\u8cac\u4efb\u304c\u751f\u3058\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/services/mariadb/#mysql_2","title":"MySQL\u3078\u306e\u63a5\u7d9a","text":"

      \u3053\u308c\u3089\u306e\u8a73\u7d30\u3092\u4f7f\u7528\u3057\u3066\u3001\u304a\u597d\u307f\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30c4\u30fc\u30eb\u306b\u63a5\u7d9a\u3067\u304d\u307e\u3059\u3002

      Linux OS X IP/\u30db\u30b9\u30c8 \u30b3\u30f3\u30c6\u30ca\u304b\u3089\u306eIP docker.amazee.io \u30dd\u30fc\u30c8 \u30b3\u30f3\u30c6\u30ca\u304b\u3089\u516c\u958b\u3055\u308c\u305f\u30dd\u30fc\u30c8 \u30b3\u30f3\u30c6\u30ca\u304b\u3089\u516c\u958b\u3055\u308c\u305f\u30dd\u30fc\u30c8 \u30e6\u30fc\u30b6\u30fc\u540d drupal drupal \u30d1\u30b9\u30ef\u30fc\u30c9 drupal drupal \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 drupal drupal"},{"location":"ja/applications/drupal/services/nginx/","title":"NGINX","text":"

      Lagoon\u306enginx-drupal Docker\u30a4\u30e1\u30fc\u30b8\u3002Drupal\u3068\u9023\u643a\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002Lagoon\u306enginx\u30a4\u30e1\u30fc\u30b8\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/services/nginx/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u3001Lagoon\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • drupal.conf\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u3067\u304d\u308b\u3060\u3051\u30b7\u30f3\u30d7\u30eb\u3067\u3001\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3084\u3059\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30a4\u30f3\u30bb\u30af\u30b7\u30e7\u30f3(server\u3001location /\u3001location @drupal\u3001location @php)\u306binclude\u6307\u793a\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002
      • Drupal.conf\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u3055\u3089\u306a\u308b\u60c5\u5831\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002
      "},{"location":"ja/applications/drupal/services/nginx/#drupal-drupalconf","title":"\u542b\u307e\u308c\u308bDrupal\u8a2d\u5b9a - drupal.conf","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Drupal 7, 8, 9\u306e\u5b8c\u5168\u306aNGINX\u52d5\u4f5c\u8a2d\u5b9a\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8ffd\u52a0\u6a5f\u80fd\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

      • humanstxt Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30b5\u30dd\u30fc\u30c8
      • robotstxt Drupal\u30e2\u30b8\u30e5\u30fc\u30eb
      • \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u7528\u306evagrant\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u7981\u6b62\u3057\u307e\u3059\u3002
      "},{"location":"ja/applications/drupal/services/nginx/#drupalconf-customization","title":"Drupal.conf\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba","text":"

      drupal.conf\u30d5\u30a1\u30a4\u30eb\u306f\u3001nginx\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092Drupal\u7528\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3082\u306e\u3067\u3059\u3002\u9867\u5ba2\u306b\u3088\u3063\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u65b9\u6cd5\u306f\u69d8\u3005\u3067\u3059:

      • \u4fee\u6b63\u304c\u56f0\u96e3 (\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u96e3\u3057\u3044 )
      • *.conf\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u305f\u7d44\u307f\u8fbc\u307f\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba

      drupal.conf\u30d5\u30a1\u30a4\u30eb\u306f\u3044\u304f\u3064\u304b\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u5206\u304b\u308c\u3066\u3044\u307e\u3059\u3002\u79c1\u305f\u3061\u304c\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u542b\u3081\u305f\u30bb\u30af\u30b7\u30e7\u30f3\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:

      • server
      • location /
      • location @drupal
      • location @php.

      \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u306f\u3001\u305d\u308c\u305e\u308c2\u3064\u306e\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u304c\u3042\u308a\u307e\u3059:

      • *_prepend.conf
      • *_append.conf

      location @drupal\u30bb\u30af\u30b7\u30e7\u30f3\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059:

      drupal.conf
      location @drupal {\ninclude /etc/nginx/conf.d/drupal/location_drupal_prepend*.conf;\ninclude        /etc/nginx/fastcgi.conf;\nfastcgi_param  SCRIPT_NAME        /index.php;\nfastcgi_param  SCRIPT_FILENAME    $realpath_root/index.php;\nfastcgi_pass   ${NGINX_FASTCGI_PASS:-php}:9000;\ninclude /etc/nginx/conf.d/drupal/location_drupal_append*.conf;\n}\n

      \u3053\u306e\u8a2d\u5b9a\u306f\u3001\u304a\u5ba2\u3055\u307e\u304clocation_drupal_prepend.conf\u304a\u3088\u3073location_drupal_append.conf\u3068\u3044\u3046\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u4ed6\u306e\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u306e\u524d\u306b\u633f\u5165\u3057\u305f\u3044\u8a2d\u5b9a\u3068\u3001\u5f8c\u306b\u633f\u5165\u3057\u305f\u3044\u8a2d\u5b9a\u3092\u3059\u3079\u3066\u8a18\u8ff0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u4e00\u5ea6\u4f5c\u6210\u3055\u308c\u308b\u3068\u3001nginx\u30b3\u30f3\u30c6\u30ca\u5185\u306b\u5fc5\u305a\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u306e\u3067\u3001Dockerfile.nginx\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8ffd\u52a0\u3057\u307e\u3059:

      dockerfile.nginx
      COPY location_drupal_prepend.conf /etc/nginx/conf.d/drupal/location_drupal_prepend.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/location_drupal_prepend.conf\n
      "},{"location":"ja/applications/drupal/services/nginx/#drupal-core-statistics-module-configuration","title":"Drupal Core Statistics\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u8a2d\u5b9a","text":"

      \u30b3\u30a2\u306eStatistics\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u7c21\u5358\u306a\u8a2d\u5b9a\u5909\u66f4\u304c\u5fc5\u8981\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      \u30c7\u30d5\u30a9\u30eb\u30c8\u306eNGINX\u8a2d\u5b9a\u3067\u306f\u3001\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8/core/modules/statistics/statistics.php\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u62d2\u5426\u3055\u308c\u307e\u3059(404)

      \u3053\u308c\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306eNGINX\u8a2d\u5b9a\u306b\u95a2\u9023\u3057\u3066\u3044\u307e\u3059:

      drupal.conf
      location ~* ^.+\\.php$ {\n    try_files /dev/null @drupal;\n}\n

      \u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u7279\u5b9a\u306e\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u3092\u5b9a\u7fa9\u3057\u3001\u3053\u308c\u3092\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d7\u30ea\u30da\u30f3\u30c9\u8a2d\u5b9a\u3068\u3057\u3066\u6ce8\u5165\u3057\u307e\u3059:

      drupal.conf
      ## Allow access to to the statistics endpoint.\nlocation ~* ^(/core/modules/statistics/statistics.php) {\n      try_files /dev/null @php;\n}\n

      NGINX\u30b3\u30f3\u30c6\u30ca\u306e\u30d3\u30eb\u30c9\u6642\u306b\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002

      dockerfile.nginx
      # Drupal Statistics\u30e2\u30b8\u30e5\u30fc\u30eb\u306eNGINX\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3059\u308b\nCOPY .lagoon/nginx/location_prepend_allow_statistics.conf /etc/nginx/conf.d/drupal/location_prepend_allow_statistics.conf\n
      "},{"location":"ja/applications/drupal/services/php-cli/","title":"PHP-cli","text":"

      Lagoon\u306ephp-cli-drupal Docker\u30a4\u30e1\u30fc\u30b8\u306fDrupal\u3068\u9023\u643a\u3059\u308b\u305f\u3081\u306b\u6700\u9069\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306fLagoon\u306ephp-cli\u30a4\u30e1\u30fc\u30b8\u3092\u57fa\u306b\u4f5c\u3089\u308c\u3066\u304a\u308a\u3001Drupal\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u65e5\u3005\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306b\u5fc5\u8981\u306a\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u5168\u3066\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

      • drush
      • drupal console
      • drush launcher (Drush\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u30b5\u30a4\u30c8\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001Drush 8\u306b\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3057\u307e\u3059)
      "},{"location":"ja/applications/drupal/services/php-cli/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 7.3 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306b\u5229\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86) - uselagoon/php-7.3-cli-drupal
      • 7.4 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306b\u5229\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86) - uselagoon/php-7.4-cli-drupal
      • 8.0 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306b\u5229\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86) - uselagoon/php-8.0-cli-drupal
      • 8.1 Dockerfile - uselagoon/php-8.1-cli-drupal
      • 8.2 Dockerfile - uselagoon/php-8.2-cli-drupal
      • 8.3 Dockerfile - uselagoon/php-8.3-cli-drupal

      \u5168\u3066\u306ePHP\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u305d\u308c\u305e\u308c\u306eDockerfiles\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/services/php-cli/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      "},{"location":"ja/applications/drupal/services/redis/","title":"Redis","text":"

      \u5185\u90e8\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u306b\u306f\u3001Redis\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002Redis\u30b5\u30fc\u30d3\u30b9\u3092 docker-compose.yaml\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002

      docker-compose.yml
        redis:\nimage: uselagoon/redis-5\nlabels:\nlagoon.type: redis\n<< : *default-user # \u5b9a\u7fa9\u6e08\u307f\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\nenvironment:\n<< : *default-environment\n

      \u307e\u305f\u3001Redis\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u3092settings.php\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/services/redis/#drupal-7","title":"Drupal 7","text":"settings.php
        if(getenv('LAGOON')){\n    $conf['redis_client_interface'] = 'PhpRedis';\n    $conf['redis_client_host'] = 'redis';\n    $conf['lock_inc'] = 'sites/all/modules/contrib/redis/redis.lock.inc';\n    $conf['path_inc'] = 'sites/all/modules/contrib/redis/redis.path.inc';\n    $conf['cache_backends'][] = 'sites/all/modules/contrib/redis/redis.autoload.inc';\n    $conf['cache_default_class'] = 'Redis_Cache';\n    $conf['cache_class_cache_form'] = 'DrupalDatabaseCache';\n    $conf['cache_class_cache_field'] = 'DrupalDatabaseCache';\n  }\n

      \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u9020\u306b\u3088\u3063\u3066\u306f\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30d1\u30b9\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      "},{"location":"ja/applications/drupal/services/redis/#drupal-8","title":"Drupal 8","text":"

      Drupal 8 \u306e\u8a2d\u5b9a\u306f\u307b\u3068\u3093\u3069\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u306e\u307e\u307e\u3067\u3059\u304c\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b Redis \u306f\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002

      settings.php
      if (getenv('LAGOON')){\n  $settings['redis.connection']['interface'] = 'PhpRedis';\n  $settings['redis.connection']['host'] = getenv('REDIS_HOST') ?: 'redis';\n  $settings['redis.connection']['port'] = getenv('REDIS_SERVICE_PORT') ?: '6379';\n  $settings['cache_prefix']['default'] = getenv('LAGOON_PROJECT') . '_' . getenv('LAGOON_GIT_SAFE_BRANCH');\n  // Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u4e2d\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u3002\n  if (!drupal_installation_attempted() && extension_loaded('redis')) {\n    $settings['cache']['default'] = 'cache.backend.redis';\n    // \u305d\u3057\u3066\u3001Redis\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u306a\u304f\u3066\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\n    $class_loader->addPsr4('Drupal\\\\redis\\\\', 'modules/contrib/redis/src');\n    $settings['bootstrap_container_definition'] = [\n      'parameters' => [],\n      'services' => [\n        'redis.factory' => [\n          'class' => 'Drupal\\redis\\ClientFactory',\n        ],\n        'cache.backend.redis' => [\n          'class' => 'Drupal\\redis\\Cache\\CacheBackendFactory',\n          'arguments' => ['@redis.factory', '@cache_tags_provider.container', '@serialization.phpserialize'],\n        ],\n        'cache.container' => [\n          'class' => '\\Drupal\\redis\\Cache\\PhpRedis',\n           'factory' => ['@cache.backend.redis', 'get'],\n          'arguments' => ['container'],\n        ],\n        'cache_tags_provider.container' => [\n          'class' => 'Drupal\\redis\\Cache\\RedisCacheTagsChecksum',\n          'arguments' => ['@redis.factory'],\n        ],\n        'serialization.phpserialize' => [\n          'class' => 'Drupal\\Component\\Serialization\\PhpSerialize',\n        ],\n      ],\n    ];\n  }\n}\n
      "},{"location":"ja/applications/drupal/services/redis/#_1","title":"\u6c38\u7d9a\u6027","text":"

      Redis\u306f\u3001\u6c38\u7d9a\u7684\u306a\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

      docker-compose.yml
      redis:\nimage: uselagoon/redis-5-persistent\nlabels:\nlagoon.type: redis-persistent\nenvironment:\n<< : *default-environment\n
      "},{"location":"ja/applications/drupal/services/redis/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u74b0\u5883\u5909\u6570\u306f\u3001Redis\u306b\u95a2\u3059\u308b\u4e00\u822c\u7684\u306a\u60c5\u5831\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e LOGLEVEL notice Redis\u306e\u30ed\u30b0\u30ec\u30d9\u30eb DATABASES 1 \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6570 MAXMEMORY 100mb Redis\u306e\u6700\u5927\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf"},{"location":"ja/applications/drupal/services/redis/#redis_1","title":"Redis\u306e\u30d5\u30a7\u30a4\u30eb\u30aa\u30fc\u30d0\u30fc","text":"

      Redis\u30b3\u30f3\u30c6\u30ca\u304c\u5229\u7528\u3067\u304d\u306a\u3044\u5834\u5408(\u4f8b\u3048\u3070\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u4e2d\u306a\u3069)\u306bRedis\u306e\u30d5\u30a7\u30a4\u30eb\u30aa\u30fc\u30d0\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306e\u30b9\u30cb\u30da\u30c3\u30c8\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

      \u4ee5\u4e0b\u3092Drupal\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u306asettings.php\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002

      settings.php
      if (getenv('LAGOON')) {\n  $contrib_path = is_dir('sites/all/modules/contrib') ? 'sites/all/modules/contrib' : 'sites/all/modules';\n  $redis = DRUPAL_ROOT . '/sites/all/modules/contrib/redis';\n  if (file_exists(\"$redis/redis.module\")) {\n    require_once \"$redis/redis.module\";\n    $conf['redis_client_host'] = getenv('REDIS_HOST') ?: 'redis';\n    $conf['redis_client_port'] = getenv('REDIS_SERVICE_PORT') ?: 6379;\n    $conf['cache_prefix'] = getenv('REDIS_CACHE_PREFIX') ?: getenv('LAGOON_PROJECT') . '_' . getenv('LAGOON_GIT_SAFE_BRANCH');\n    try {\n      // Redis\u306b\u63a5\u7d9a\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\n      $client = Redis_Client::getClient();\n      $response = $client->ping();\n      if (!$response) {\n      throw new \\Exception('Redis\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3057\u305f\u304c\u3001\u6b63\u3057\u304f\u5fdc\u7b54\u3057\u3066\u3044\u307e\u305b\u3093\u3002');\n      }\n      $conf['redis_client_interface'] = 'PhpRedis';\n      $conf['lock_inc'] = $contrib_path . '/redis/redis.lock.inc';\n      $conf['path_inc'] = $contrib_path . '/redis/redis.path.inc';\n      $conf['cache_backends'][] = $contrib_path . '/redis/redis.autoload.inc';\n      $conf['cache_default_class'] = 'Redis_Cache';\n    } catch (\\Exception $e) {\n      // Redis \u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u306f\u5229\u7528\u3067\u304d\u306a\u3044\u305f\u3081\u3001Redis\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u8a2d\u5b9a\u3092\u884c\u308f\u305a\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u4f7f\u7528\u3055\u308c\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u6b21\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u518d\u8a66\u884c\u3055\u308c\u307e\u3059\u3002\n      // 'DrupalFakeCache'\u30af\u30e9\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\n      if (!class_exists('DrupalFakeCache')) {\n        $conf['cache_backends'][] = 'includes/cache-install.inc';\n      }\n      $conf['cache_default_class'] = 'DrupalFakeCache';\n    }\n  }\n}\n
      "},{"location":"ja/applications/drupal/services/solr/","title":"Solr","text":""},{"location":"ja/applications/drupal/services/solr/#_1","title":"\u6a19\u6e96\u7684\u306a\u4f7f\u3044\u65b9","text":"

      Solr 5.5\u30016.6\u3001\u304a\u3088\u3073 7.7\u3067\u306f\u3001search_api_solr Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b9\u30ad\u30fc\u30de\u30d5\u30a1\u30a4\u30eb\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u4f7f\u7528\u3059\u308bSolr\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f8b\u306e\u3088\u3046\u306bdocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/services/solr/#_2","title":"\u30ab\u30b9\u30bf\u30e0\u30b9\u30ad\u30fc\u30de","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067Solr\u306e\u30b9\u30ad\u30fc\u30de\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3092\u5b9f\u88c5\u3059\u308b\u306b\u306f\u3001Lagoon\u304c\u3069\u306e\u3088\u3046\u306b\u6a19\u6e96\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\u304b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      • docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u306e solr \u30bb\u30af\u30b7\u30e7\u30f3\u3067\u3001 image: uselagoon/solr:8 \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059:
      docker-compose.yml
        build:\ncontext: .\ndockerfile: solr.dockerfile\n
      • \u30b9\u30ad\u30fc\u30de\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002\u901a\u5e38\u3001.lagoon/solr\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
      • solr.dockerfile \u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
      solr.dockerfile
      FROM uselagoon/solr:8\n\nCOPY .lagoon/solr /solr-conf/conf\n\nCMD solr-recreate drupal /solr-conf && solr-foreground\n

      \u76ee\u6a19\u306f\u3001\u30d3\u30eb\u30c9\u3059\u308b\u30a4\u30e1\u30fc\u30b8\u306e/solr-conf/confSolr\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u3067\u3059\u3002

      "},{"location":"ja/applications/drupal/services/solr/#_3","title":"\u30de\u30eb\u30c1\u30b3\u30a2","text":"

      \u8907\u6570\u306e\u30b3\u30a2\u3092\u5b9f\u88c5\u3059\u308b\u306b\u306f\u3001\u4e0a\u8a18\u306e\u3088\u3046\u306b\u72ec\u81ea\u306eSolr\u30b9\u30ad\u30fc\u30de\u3092\u7528\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5fc5\u8981\u306a\u5909\u66f4\u306fDockerfile\u306eCMD\u3060\u3051\u3067\u3001\u5fc5\u8981\u306a\u30b3\u30a2\u3054\u3068\u306bprecreate-core corename /solr-conf/ ;\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002

      solr.dockerfile
      FROM uselagoon/solr:8-drupal\n\nCMD solr-recreate drupal /solr-conf && solr-recreate more-drupal /solr-conf && solr-foreground\n
      "},{"location":"ja/applications/drupal/services/varnish/","title":"Varnish","text":"

      Drupal\u3092Varnish\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3068\u4e00\u7dd2\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002Lagoon\u306fVarnish\u304c\u3059\u3067\u306b\u8a2d\u5b9a\u6e08\u307f\u306eDrupal Varnish config\u3067varnish-drupalDocker\u30a4\u30e1\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002

      \u3053\u306eVarnish config\u306f\u4ee5\u4e0b\u306e\u3053\u3068\u3092\u884c\u3044\u307e\u3059:

      • Drupal\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u3092\u7406\u89e3\u3057\u3001\u8a8d\u8a3c\u3055\u308c\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066Varnish\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u81ea\u52d5\u7684\u306b\u7121\u52b9\u306b\u3057\u307e\u3059\u3002
      • \u3053\u306e\u6a5f\u80fd\u306f\u3001\u30a2\u30bb\u30c3\u30c8(\u753b\u50cf\u3001CSS\u3001JS\u306a\u3069)\u3092\u81ea\u52d5\u7684\u306b 1 \u304b\u6708\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306b\u3082\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u305b\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u8a8d\u8a3c\u3055\u308c\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u3082\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u306a\u3044\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u3082\u884c\u308f\u308c\u307e\u3059\u3002
      • Drupal 8\u306e\u30d1\u30fc\u30b8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u4f7f\u7528\u3055\u308c\u308bBAN\u304a\u3088\u3073URIBAN\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002
      • Google Analytics\u306e\u30ea\u30f3\u30af\u304c\u8907\u6570\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u306b\u3001URL\u30d1\u30e9\u30e1\u30fc\u30bf\u304b\u3089utm_\u3068gclid\u3092\u524a\u9664\u3057\u307e\u3059\u3002
      • \u4ed6\u306b\u3082\u826f\u3044\u3053\u3068\u304c\u305f\u304f\u3055\u3093\u3042\u308a\u307e\u3059 - drupal.vcl\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002
      "},{"location":"ja/applications/drupal/services/varnish/#drupal-8","title":"Drupal 8\u3068\u306e\u4f7f\u7528","text":"

      \u8981\u7d04: examples repo\u306edrupal8-advanced example\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3068Drupal\u306e\u8a2d\u5b9a\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u6ce8\u610f:\u3053\u308c\u3089\u306e\u4f8b\u306e\u591a\u304f\u306f\u3001\u540c\u3058drupal-example-simple\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306e\u7570\u306a\u308b\u30d6\u30e9\u30f3\u30c1/\u30cf\u30c3\u30b7\u30e5\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u5fc5\u305a\u3001\u30b5\u30f3\u30d7\u30eb\u30ea\u30b9\u30c8\u304b\u3089\u6b63\u78ba\u306a\u30d6\u30e9\u30f3\u30c1\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044!

      "},{"location":"ja/applications/drupal/services/varnish/#purgevarnish-purge","title":"Purge\u3068Varnish Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

      Drupal 8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3067Varnish\u3092\u5b8c\u5168\u306b\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001Purge\u3068Varnish Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u306f\u591a\u304f\u306e\u30b5\u30d6\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u5c11\u306a\u304f\u3068\u3082\u4ee5\u4e0b\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a

      • purge
      • purge_drush
      • purge_tokens
      • purge_ui
      • purge_processor_cron
      • purge_processor_lateruntime
      • purge_queuer_coretags
      • varnish_purger
      • varnish_purge_tags

      \u4e00\u5ea6\u306b\u3059\u3079\u3066\u3092\u53d6\u5f97\u3057\u307e\u3059:

      Purge\u3068Varnish Purge\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
      composer require drupal/purge drupal/varnish_purge\n\ndrush en purge purge_drush purge_tokens purge_ui purge_processor_cron purge_processor_lateruntime purge_queuer_coretags varnish_purger varnish_purge_tags\n
      "},{"location":"ja/applications/drupal/services/varnish/#varnish-purge","title":"Varnish Purge\u306e\u8a2d\u5b9a","text":"
      1. Configuration > Development > Performance > Purge\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002
      2. Add purger\u304b\u3089\u30d1\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
      3. Varnish Bundled Purger\u3092\u9078\u629e\u3057\u307e\u3059(Varnish Purger\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002#Behind the Scenes\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)
      4. \u8ffd\u52a0\u3057\u305f\u3070\u304b\u308a\u306e\u30d1\u30fc\u30b8\u306e\u6a2a\u306b\u3042\u308b\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001Configure\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
      5. \u308f\u304b\u308a\u3084\u3059\u3044\u540d\u524d\u3092\u3064\u3051\u3066\u4e0b\u3055\u3044\u3002Lagoon Varnish \u304c\u826f\u3044\u3067\u3057\u3087\u3046\u3002
      6. \u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059:

        Varnish Purge\u306e\u8a2d\u5b9a
         TYPE: \u30bf\u30b0\n\n REQUEST:\n \u30db\u30b9\u30c8\u540d: varnish\n (\u307e\u305f\u306fdocker-compose.yml\u3067Varnish\u304c\u547c\u3070\u308c\u3066\u3044\u308b\u540d\u524d)\n \u30dd\u30fc\u30c8: 8080\n \u30d1\u30b9: /\n \u30ea\u30af\u30a8\u30b9\u30c8\u65b9\u6cd5: BAN\n \u30b9\u30ad\u30fc\u30e0: http\n\n HEADERS:\n \u30d8\u30c3\u30c0\u30fc: Cache-Tags\n \u5024: [invalidations:separated_pipe]\n
      7. Save configuration\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002

      \u4ee5\u4e0a\u3067\u8a2d\u5b9a\u306f\u5b8c\u4e86\u3067\u3059\uff01\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u8aad\u3093\u3067\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/services/varnish/#varnishdrupal","title":"Varnish\u7528\u306eDrupal\u306e\u8a2d\u5b9a","text":"

      \u4ed6\u306b\u3082\u3044\u304f\u3064\u304b\u306e\u8a2d\u5b9a\u304c\u53ef\u80fd\u3067\u3059:

      1. drush pmu page_cache\u3092\u4f7f\u7528\u3057\u3066Internal Page Cache Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a2\u30f3\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u5947\u5999\u306a\u4e8c\u91cd\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001Varnish \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u307f\u304c\u30af\u30ea\u30a2\u3055\u308c\u3001\u5185\u90e8\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u30af\u30ea\u30a2\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u5909\u66f4\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u975e\u5e38\u306b\u9045\u304f\u53cd\u6620\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u5927\u304d\u306a\u30b5\u30a4\u30c8\u3067\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5927\u91cf\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
      2. production.settings.php\u5185\u306e$config['system.performance']['cache']['page']['max_age']\u30922628000\u306b\u5909\u66f4\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Varnish \u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u30b5\u30a4\u30c8\u3092\u6700\u5927 1 \u30f6\u6708\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002\u4e00\u898b\u9577\u3044\u3088\u3046\u306b\u601d\u308f\u308c\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001Drupal 8 \u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u30b7\u30b9\u30c6\u30e0\u306f\u975e\u5e38\u306b\u512a\u79c0\u3067\u3001\u4f55\u3089\u304b\u306e\u5909\u66f4\u304c\u884c\u308f\u308c\u308b\u3068\u3001Varnish \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u81ea\u52d5\u7684\u306b\u66f4\u65b0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002
      "},{"location":"ja/applications/drupal/services/varnish/#varnish_1","title":"\u30ed\u30fc\u30ab\u30eb\u3067\u306e Varnish \u30c6\u30b9\u30c8","text":"

      Lagoon\u306e\u30ed\u30fc\u30ab\u30eb\u3067\u306eDrupal\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u306f\u3001\u958b\u767a\u4f5c\u696d\u306e\u59a8\u3052\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001Varnish\u3068Drupal\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u304c\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7121\u52b9\u5316\u65b9\u6cd5\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:

      • docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u74b0\u5883\u5909\u6570VARNISH_BYPASS=true\u306b\u3088\u308a\u3001Varnish\u306b\u4e8b\u5b9f\u4e0a\u7121\u52b9\u5316\u3092\u6307\u793a\u3057\u3066\u3044\u307e\u3059\u3002
      • Drupal \u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u3092\u9001\u4fe1\u3057\u306a\u3044\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059(\u958b\u767a\u74b0\u5883\u3088\u3046\u306edevelopment.settings.php\u30d5\u30a1\u30a4\u30eb\u5185\u306eDrupal\u8a2d\u5b9a$config['system.performance']['cache']['page']['max_age'] = 0\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059)

      Varnish\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3059\u308b\u306b\u306f\u3001docker-compose.yml\u3067\u4ee5\u4e0b\u306e\u5909\u66f4\u3092\u884c\u3044\u307e\u3059:

      • Varnish\u30b5\u30fc\u30d3\u30b9\u30bb\u30af\u30b7\u30e7\u30f3\u3067VARNISH_BYPASS\u3092false\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
      • x-environment\u30bb\u30af\u30b7\u30e7\u30f3\u3067LAGOON_ENVIRONMENT_TYPE\u3092production\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
      • docker-compose up -d\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u65b0\u3057\u3044\u74b0\u5883\u5909\u6570\u3068\u3068\u3082\u306b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u518d\u8d77\u52d5\u3057\u307e\u3059\u3002

      \u3053\u308c\u3067\u3001Varnish\u3092\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff01

      \u6b21\u306b\u3001ID\u304c1\u3067URL\u304cdrupal-example.docker.amazee.io/node/1\u3068\u306a\u308b\u30ce\u30fc\u30c9\u3092\u60f3\u5b9a\u3057\u305f\u77ed\u3044\u4f8b\u3067\u3059\u3002

      1. curl -I drupal-example.docker.amazee.io/node/1\u3092\u5b9f\u884c\u3057\u3001\u30d8\u30c3\u30c0\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:
        • X-LAGOON \u306b\u306f varnish \u304c\u542b\u307e\u308c\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b9f\u969b\u306bVarnish\u3092\u901a\u3057\u3066\u51e6\u7406\u3055\u308c\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
        • Varnish\u306f\u304a\u305d\u3089\u304f\u3053\u306e\u30b5\u30a4\u30c8\u3092\u898b\u305f\u3053\u3068\u304c\u306a\u304f\u3001\u6700\u521d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306fVarnish\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30a6\u30a9\u30fc\u30e0\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u3001Age:\u306f0\u306e\u307e\u307e\u3067\u3059\u3002
        • X-Varnish-Cache \u306f MISS \u306b\u306a\u3063\u3066\u3044\u308c\u3070\u3001Varnish\u304c\u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u6e08\u307f\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u898b\u3064\u3051\u3089\u308c\u306a\u304b\u3063\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
      2. curl -I drupal-example.docker.amazee.io/node/1 \u3092\u518d\u5ea6\u5b9f\u884c\u3059\u308b\u3068\u3001\u30d8\u30c3\u30c0\u30fc\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059:
        • Age: \u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u3066\u304b\u3089\u4f55\u79d2\u7d4c\u3063\u305f\u304b\u3092\u793a\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u901f\u5ea6\u306b\u3088\u308a\u307e\u3059\u304c\u3001\u304a\u305d\u3089\u304f1-30\u306e\u9593\u306e\u5024\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002
        • X-Varnish-Cache \u306f HIT \u3068\u306a\u308a\u3001Varnish\u304c\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6b63\u5e38\u306b\u53d6\u5f97\u3057\u3066\u3001\u305d\u308c\u3092\u8fd4\u3057\u305f\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002
      3. Drupal\u306e node/1 \u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u5185\u5bb9\u3092\u5909\u66f4\u3057\u307e\u3059\u3002
      4. curl -I drupal-example.docker.amazee.io/node/1 \u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30d8\u30c3\u30c0\u30fc\u306f\u6700\u521d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u540c\u3058\u306b\u306a\u308b\u306f\u305a\u3067\u3059:
        • Age:0
        • X-Varnish-Cache: MISS
      "},{"location":"ja/applications/drupal/services/varnish/#drupalvarnish","title":"Drupal\u3068Varnish\u306e\u821e\u53f0\u88cf","text":"

      Drupal \u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3092\u5229\u7528\u3057\u3066\u3044\u305f\u7d4c\u9a13\u304c\u3042\u308b\u65b9\u3084\u3001Drupal 8 \u3068 Varnish \u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u4ee5\u524d\u306b\u884c\u3063\u305f\u3053\u3068\u304c\u3042\u308b\u65b9\u306f\u3001Lagoon \u306e Drupal Varnish \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u5909\u66f4\u70b9\u304c\u3042\u308b\u3053\u3068\u306b\u6c17\u3065\u3044\u305f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u3067\u305d\u308c\u3089\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059:

      "},{"location":"ja/applications/drupal/services/varnish/#varnish-purgervarnish-bundled-purger","title":"Varnish Purger\u306e\u4ee3\u308f\u308a\u306bVarnish Bundled Purger\u3092\u4f7f\u7528\u3059\u308b","text":"

      Varnish Purger\u306f\u3001\u7121\u52b9\u5316\u3059\u308b\u5fc5\u8981\u306e\u3042\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3054\u3068\u306bBAN\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002Drupal\u306b\u306f\u591a\u304f\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u304c\u5b58\u5728\u3059\u308b\u305f\u3081\u3001Varnish\u306b\u5927\u91cf\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u306b\u5bfe\u3057\u3066\u3001Varnish Bundled Purger\u306f\u3001\u8907\u6570\u306e\u7121\u52b9\u5316\u3092\u30d1\u30a4\u30d7(|)\u3067\u533a\u5207\u3063\u3066\u30011\u3064\u306eBAN\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u307f\u9001\u4fe1\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001Varnish\u306e\u30d0\u30f3\u6b63\u898f\u8868\u73fe\u30b7\u30b9\u30c6\u30e0\u3068\u9069\u5408\u3057\u3066\u304a\u308a\u3001\u7d50\u679c\u3068\u3057\u3066\u5c11\u306a\u3044\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u3001Varnish\u5185\u306e\u30d0\u30f3\u30ea\u30b9\u30c8\u30c6\u30fc\u30d6\u30eb\u3082\u5c0f\u3055\u304f\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/applications/drupal/services/varnish/#purge-late-runtime-processor","title":"Purge Late runtime processor\u306e\u4f7f\u3044\u65b9","text":"

      Drupal 7\u306eVarnish\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u306f\u7570\u306a\u308a\u3001Drupal 8\u306ePurge\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u524a\u9664\u65b9\u6cd5\u304c\u5c11\u3057\u7570\u306a\u308a\u307e\u3059\u3002Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u524a\u9664\u5bfe\u8c61\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30ad\u30e5\u30fc\u306b\u8ffd\u52a0\u3057\u3001\u305d\u306e\u5f8c\u3055\u307e\u3056\u307e\u306a\u51e6\u7406\u8005\u304c\u30ad\u30e5\u30fc\u3092\u51e6\u7406\u3057\u307e\u3059\u3002Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306fCron processor\u3092\u4f7f\u3046\u3053\u3068\u3092\u63a8\u5968\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u308c\u306f Varnish \u30ad\u30e3\u30c3\u30b7\u30e5\u304ccron\u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u6642\u306e\u307f\u524a\u9664\u3055\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u901a\u5e38\u306ecron\u306f\u304a\u305d\u3089\u304f1\u5206\u3054\u3068\u306a\u3069\u975e\u5e38\u306b\u983b\u7e41\u306b\u306f\u5b9f\u884c\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u53e4\u3044\u30c7\u30fc\u30bf\u304cVarnish\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u6b8b\u3063\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u7de8\u96c6\u8005\u3084\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u6df7\u4e71\u3059\u308b\u4e8b\u614b\u3092\u5f15\u304d\u8d77\u3053\u3059\u304a\u305d\u308c\u304c\u3042\u308a\u307e\u3059\u3002

      \u4ee3\u308f\u308a\u306b\u3001\u79c1\u305f\u3061\u306fPurge Late runtime processor\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5404Drupal\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7d42\u4e86\u6642\u306b\u30ad\u30e5\u30fc\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\u3053\u306e\u5229\u70b9\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u304c\u30d1\u30fc\u30b8\u30ad\u30e5\u30fc\u306b\u8ffd\u52a0\u3055\u308c\u305f\u5834\u5408 (\u7de8\u96c6\u8005\u304c Drupal \u30ce\u30fc\u30c9\u3092\u7de8\u96c6\u3057\u305f\u5834\u5408\u306a\u3069)\u3001\u305d\u306e\u30ce\u30fc\u30c9\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u304c\u76f4\u63a5\u30d1\u30fc\u30b8\u3055\u308c\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u308c\u3068Varnish Bundled Purger\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001Drupal\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u6700\u5f8c\u3060\u3051\u306bVarnish\u306b\u5bfe\u3059\u308b\u5358\u4e00\u306e\u8ffd\u52a0\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u884c\u308f\u308c\u308b\u305f\u3081\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u6642\u9593\u306b\u76ee\u7acb\u3063\u305f\u5f71\u97ff\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      "},{"location":"ja/applications/drupal/services/varnish/#varnish-ban-lurker","title":"Varnish Ban Lurker\u306e\u5b8c\u5168\u306a\u30b5\u30dd\u30fc\u30c8","text":"

      Varnish\u306e\u8a2d\u5b9a\u3067\u306f\u3001Ban Lurker\u304c\u5b8c\u5168\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002Ban Lurker \u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u3068 Varnish \u306e\u30b9\u30e0\u30fc\u30ba\u306a\u52d5\u4f5c\u3092\u7dad\u6301\u3059\u308b\u306e\u306b\u5f79\u7acb\u3064\u30c4\u30fc\u30eb\u3067\u3059\u3002Ban Lurker\u306f\u3001Varnish\u306e\u7981\u6b62\u30ea\u30b9\u30c8\u306b\u3042\u308b\u9805\u76ee\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u5185\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u6bd4\u8f03\u3059\u308b\u5c0f\u3055\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002Varnish\u306e\u7981\u6b62\u6a5f\u80fd\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u5185\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u524a\u9664\u5bfe\u8c61\u3068\u3057\u3066\u30de\u30fc\u30af\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002Ban Lurker\u306f\u524a\u9664\u3059\u3079\u304d\u9805\u76ee\u3092\u898b\u3064\u3051\u308b\u3068\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u524a\u9664\u3057\u3001\u7981\u6b62\u81ea\u4f53\u3082\u89e3\u9664\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u901a\u5e38\u306f\u7981\u6b62\u3055\u308c\u305a\u306b\u305a\u3063\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u5bb9\u91cf\u3092\u5360\u6709\u3057\u7d9a\u3051\u308b\u3001\u30a2\u30af\u30bb\u30b9\u983b\u5ea6\u304c\u4f4e\u304f\u6709\u52b9\u671f\u9650\u304c\u975e\u5e38\u306b\u9577\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u524a\u9664\u3055\u308c\u3001\u66f4\u65b0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u7981\u6b62\u30ea\u30b9\u30c8\u304c\u5c0f\u3055\u304f\u306a\u308a\u3001Varnish\u306e\u5404\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3059\u308b\u51e6\u7406\u6642\u9593\u3082\u77ed\u7e2e\u3055\u308c\u307e\u3059\u3002\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001Ban Lurker\u306eVarnish\u306e\u516c\u5f0f\u8a18\u4e8b\u3084\u3001\u305d\u306e\u4ed6\u306e\u53c2\u8003\u306b\u306a\u308b\u8a18\u4e8b\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/applications/drupal/services/varnish/#_1","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"

      Varnish\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3066\u3044\u306a\u3044\uff1f \u305d\u308c\u3068\u3082\u4f55\u304b\u4ed6\u306e\u554f\u984c\u304c\uff1f \u4ee5\u4e0b\u306b\u30c7\u30d0\u30c3\u30b0\u306e\u65b9\u6cd5\u3092\u3044\u304f\u3064\u304b\u7d39\u4ecb\u3057\u307e\u3059:

      • purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001drush p-debug-en\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306f\u3001Drupal\u30ed\u30b0admin/reports/dblog\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002
      • Drupal\u304c\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u3092\u9001\u4fe1\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6700\u9069\u306a\u30c6\u30b9\u30c8\u65b9\u6cd5\u3068\u3057\u3066\u306f\u3001Lagoon\u304c\u751f\u6210\u3059\u308bVarnish\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d0\u30a4\u30d1\u30b9\u3059\u308b\u305f\u3081\u306eURL\u3092\u4f7f\u7528\u3057\u307e\u3059(\u30ed\u30fc\u30ab\u30eb\u306eDrupal\u306e\u4f8b\u3067\u306f\u3001http://nginx-drupal-example.docker.amazee.io\u306b\u306a\u308a\u307e\u3059)\u3002Cache-Control: max-age=900, public\u30d8\u30c3\u30c0\u30fc\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3001900\u304c$config['system.performance']['cache']['page']['max_age']\u3067\u8a2d\u5b9a\u3057\u305f\u3082\u306e\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
      • \u74b0\u5883\u5909\u6570VARNISH_BYPASS\u304ctrue\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044(docker-compose.yml\u3092\u78ba\u8a8d\u3057\u3001docker-compose up -d varnish\u3092\u5b9f\u884c\u3057\u3066\u74b0\u5883\u5909\u6570\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044)\u3002
      • \u3059\u3079\u3066\u304c\u4e0a\u624b\u304f\u3044\u304b\u306a\u3044\u5834\u5408\u3001\u30c6\u30fc\u30d6\u30eb\u3092\u3072\u3063\u304f\u308a\u8fd4\u3059\u524d\u306b (\u256f\u00b0\u25a1\u00b0)\u256f\ufe35 \u253b\u2501\u253b\u3001Lagoon\u30c1\u30fc\u30e0\u306b\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002\u559c\u3093\u3067\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\u3002
      "},{"location":"ja/community/discord/","title":"Discord\u4e0a\u306eLagoon\u30b3\u30df\u30e5\u30cb\u30c6\u30a3","text":"

      \u79c1\u305f\u3061\u306e\u516c\u5f0f\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4f1a\u8b70\u30b9\u30da\u30fc\u30b9\u306f\u3001Lagoon\u306eDiscord\u3067\u3059\u3002

      \u79c1\u305f\u3061\u306f\u3001\u3053\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u5168\u3066\u306eLagoon\u30e6\u30fc\u30b6\u30fc\u304c\u5354\u529b\u3057\u3001\u554f\u984c\u3092\u89e3\u6c7a\u3057\u3001\u30a2\u30a4\u30c7\u30a2\u3092\u5171\u6709\u3057\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ca2\u732e\u3059\u308b\u5834\u3068\u3057\u3066\u8a2d\u7acb\u3057\u307e\u3057\u305f\u3002\u73fe\u5728\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306fSlack\u3084\u305d\u306e\u4ed6\u306e\u5834\u6240\u306b\u5206\u6563\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u4e00\u5143\u5316\u3059\u308b\u305f\u3081\u306b\u52aa\u529b\u3057\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u5168\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u3084\u9867\u5ba2\u304c\u53c2\u52a0\u3057\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304b\u3089\u5f97\u3089\u308c\u308b\u5229\u76ca\u3092\u5168\u3066\u306e\u4eba\u304c\u4eab\u53d7\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002

      \u3053\u306e\u5834\u6240\u306f\u3001\u73fe\u5728\u306e\u30b5\u30dd\u30fc\u30c8\u30c1\u30e3\u30cd\u30eb\u3092\u7f6e\u304d\u63db\u3048\u308b\u3082\u306e\u3067\u306f\u306a\u3044\u3053\u3068\u3092\u5fd8\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044 - \u305d\u308c\u3089\u306f\u305d\u306e\u307e\u307e\u7dad\u6301\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u3084Lagoon\u306e\u30e1\u30f3\u30c6\u30ca\u3068\u7e4b\u304c\u308b\u5834\u6240\u3067\u3059\u3002

      \u79c1\u305f\u3061\u306f\u5168\u3066\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30e1\u30f3\u30d0\u30fc\u306b\u3001\u79c1\u305f\u3061\u306e\u53c2\u52a0\u3068\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3001\u304a\u3088\u3073\u884c\u52d5\u898f\u7bc4\u3092\u78ba\u8a8d\u3057\u3066\u3044\u305f\u3060\u304f\u3053\u3068\u3092\u304a\u9858\u3044\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/community/discord/#_1","title":"\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u6642\u9593","text":"

      \u73fe\u5728\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30cb\u30fc\u30ba\u3092\u3088\u308a\u3088\u304f\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u8abf\u67fb\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u6642\u9593\u306f\u4e00\u6642\u505c\u6b62\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u3061\u3089\u3067\u30a2\u30f3\u30b1\u30fc\u30c8\u306b\u3054\u8a18\u5165\u304f\u3060\u3055\u3044\u3002

      Lagoon\u306b\u95a2\u3057\u3066\u4f55\u304b\u624b\u52a9\u3051\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001Discord\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002 \u307e\u305f\u306f\u3001uselagoon@amazee.io\u307e\u3067\u30e1\u30fc\u30eb\u3092\u304a\u9001\u308a\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/community/moderation/","title":"Lagoon\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3","text":"

      \u3053\u308c\u3089\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306f\u3001Drupal Diversity & Inclusion\u306e\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u6539\u5909\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      Lagoon\u306e\u7a7a\u9593\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u4eba\u3005\u306b\u5bfe\u3059\u308b\u7406\u89e3\u3001\u5171\u611f\u3001\u500b\u4eba\u7684\u306a\u8a8d\u8b58\u306e\u5411\u4e0a\u3092\u4fc3\u9032\u3059\u308b\u3088\u3046\u52aa\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306b\u306f\u3001\u3042\u306a\u305f\u304c\u500b\u4eba\u7684\u306b\u610f\u898b\u304c\u5408\u308f\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044Drupal\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3084\u5e83\u7bc4\u306a\u6280\u8853\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u4eba\u3005\u3082\u542b\u307e\u308c\u307e\u3059\u3002

      Discord\u304b\u3089\u30ad\u30c3\u30af\u3055\u308c\u305f\u5834\u5408\u3001\u30ad\u30c3\u30af\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u518d\u5165\u5834\u3092\u5e0c\u671b\u3059\u308b\u5834\u5408\u3001\u30ad\u30c3\u30ab\u30fc\u307e\u305f\u306f\u5225\u306e\u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\u306b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8(PM)\u3092\u9001\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3082\u3057\u3001\u6575\u610f\u3042\u308b\u53cd\u5fdc\u3092\u5f15\u304d\u8d77\u3053\u3059\u3088\u3046\u306a\u610f\u56f3\u7684\u306b\u717d\u52d5\u7684\u3001\u3044\u3058\u3081\u3001\u307e\u305f\u306f\u5acc\u304c\u3089\u305b\u884c\u70ba\u306b\u5f93\u4e8b\u3057\u3066\u3044\u308b\u3068\u898b\u3048\u308b\u6df7\u4e71\u3092\u62db\u304f\u4eba\u304c\u3044\u305f\u5834\u5408\u3001\u4ed6\u306e\u30c1\u30e3\u30cd\u30eb\u30e1\u30f3\u30d0\u30fc\u306b\u3068\u3063\u3066\u30b9\u30c8\u30ec\u30b9\u3068\u306a\u308b\u884c\u70ba\u3092\u307b\u3050\u3059\u3088\u308a\u3082\u3001\u30ad\u30c3\u30af\u3059\u308b\u65b9\u304c\u65e9\u304f\u3066\u7c21\u5358\u3067\u3059\u3002

      \u30ad\u30c3\u30af\u306f\u7981\u6b62\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u6df7\u4e71\u3092\u62db\u304f\u53ef\u80fd\u6027\u306e\u3042\u308b\u30b3\u30e1\u30f3\u30c8\u3084\u767a\u8a00\u304c\u771f\u5263\u3067\u3001\u4e8c\u8005\u9593\u306e\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u65ad\u7d76\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\u3068\u8a71\u3059\u3053\u3068\u306b\u3088\u308a\u3001(\u6f5c\u5728\u7684\u306b)\u6df7\u4e71\u3092\u62db\u304f\u4eba\u306f\u3001\u3088\u308a\u914d\u616e\u6df1\u304f\u3001\u5305\u62ec\u7684\u3067\u3001\u591a\u69d8\u6027\u3092\u610f\u8b58\u3057\u305f\u8a00\u8449\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u6307\u5c0e\u3055\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u305d\u3057\u3066\u3001\u3088\u308a\u5efa\u8a2d\u7684\u306a\u65b9\u6cd5\u3067\u95a2\u4e0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/community/moderation/#_1","title":"\u6bb5\u968e\u7684\u306a\u5bfe\u5fdc","text":"
      1. \u6bb5\u968e\u4e00\u306e\u5bfe\u5fdc

        \u30e6\u30fc\u30b6\u30fc\u306f\u30c1\u30e3\u30f3\u30cd\u30eb\u306b\u6b53\u8fce\u3055\u308c\u3001\u30b9\u30af\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u8aad\u307f\u65b9\u3092\u8aac\u660e\u3055\u308c\u3001\u53c2\u52a0\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3078\u306e\u30ea\u30f3\u30af\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002

      2. \u6bb5\u968e\u4e8c\u306e\u5bfe\u5fdc

        \u30e6\u30fc\u30b6\u30fc\u306b\u306f\u3001\u6295\u7a3f\u3092\u30c8\u30d4\u30c3\u30af\u306b\u6cbf\u3063\u305f\u3082\u306e\u306b\u4fdd\u3064\u3088\u3046\u306b\u3001\u307e\u305f\u306f\u53c2\u52a0\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u5b88\u308b\u3088\u3046\u306b\u3001\u30c1\u30e3\u30f3\u30cd\u30eb\u5185\u3067\u512a\u3057\u304f\u601d\u3044\u51fa\u3055\u305b\u307e\u3059\u3002

      3. \u6bb5\u968e\u4e09\u306e\u5bfe\u5fdc

        \u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u306bPM\u304c\u9001\u3089\u308c\u3001\u305d\u306e\u6295\u7a3f\u306b\u554f\u984c\u304c\u3042\u3063\u305f\u7406\u7531\u3068\u3001\u4f55\u3092\u3069\u3046\u9055\u3046\u65b9\u6cd5\u3067\u884c\u3046\u3079\u304d\u304b\u306b\u3064\u3044\u3066\u8aac\u660e\u3055\u308c\u307e\u3059\u3002

      4. \u6bb5\u968e\u56db\u306e\u5bfe\u5fdc

        \u884c\u52d5\u304c\u7d9a\u304f\u5834\u5408\u3001\u30e6\u30fc\u30b6\u30fc\u306fDiscord\u304b\u3089\u5c11\u306a\u304f\u3068\u308224\u6642\u9593\u306f\u8ffd\u653e\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/community/moderation/#_2","title":"\u6bb5\u968e\u7684\u3067\u306a\u3044\u5bfe\u5fdc:\u7981\u6b62","text":"

      \u610f\u56f3\u7684\u306b\u6df7\u4e71\u3092\u5f15\u304d\u8d77\u3053\u3059\u500b\u4eba\u306f\u3001\u6bb5\u968e\u7684\u3067\u306f\u306a\u304f\u3001\u8ffd\u653e\u3055\u308c\u307e\u3059\u3002\u7e70\u308a\u8fd4\u3057\u9055\u53cd\u3059\u308b\u3068\u7981\u6b62\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/community/participation/","title":"Lagoon\u53c2\u52a0\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3","text":"

      \u79c1\u305f\u3061\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u3059\u3079\u3066\u306e\u30e1\u30f3\u30d0\u30fc\u304c\u3001\u4eee\u60f3\u7684\u306a\u30b9\u30da\u30fc\u30b9\u3067\u3082\u7269\u7406\u7684\u306a\u30b9\u30da\u30fc\u30b9\u3067\u3082\u3001\u79c1\u305f\u3061\u306e\u884c\u52d5\u898f\u7bc4\u3092\u9075\u5b88\u3059\u308b\u3053\u3068\u3092\u304a\u9858\u3044\u3057\u307e\u3059\u3002

      \u3053\u308c\u3089\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306f\u3001Drupal Diversity & Inclusion\u306e\u53c2\u52a0\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u53c2\u8003\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002

      1. \u7a4d\u6975\u7684\u306b\u805e\u304d\u3001\u6ce8\u610f\u6df1\u304f\u8aad\u307f\u3001\u7406\u89e3\u3059\u308b\u3053\u3068\u3002
        • \u4f1a\u8a71\u306b\u53c2\u52a0\u3059\u308b\u5834\u5408\u306f\u3001\u30d0\u30c3\u30af\u30ed\u30b0\u3092\u8aad\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u4ed6\u306e\u53c2\u52a0\u8005\u304c\u52b9\u679c\u7684\u306b\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u6a5f\u4f1a\u3092\u4e0e\u3048\u3066\u304f\u3060\u3055\u3044\u3002
        • \u4ed6\u306e\u53c2\u52a0\u8005\u306e\u767a\u8a00\u306e\u80cc\u5f8c\u306b\u306f\u826f\u3044\u610f\u56f3\u304c\u3042\u308b\u3068\u4eee\u5b9a\u3057\u307e\u3059\u3002\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306f\u975e\u5e38\u306b\u591a\u69d8\u3067\u3001\u5168\u4e16\u754c\u304b\u3089\u306e\u53c2\u52a0\u8005\u304c\u3044\u307e\u3059\u3002\u6587\u5316\u7684\u306a\u7279\u6027\u3084\u8a00\u8a9e\u7684\u306a\u7279\u6027\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002
        • \u3053\u306e\u5206\u91ce\u306b\u65b0\u3057\u304f\u53c2\u52a0\u3059\u308b\u4eba\u3082\u591a\u304f\u3044\u307e\u3059\u3002\u5f7c\u3089\u304c\u826f\u3044\u610f\u56f3\u3092\u6301\u3063\u3066\u3044\u308b\u304c\u3001\u307e\u3060\u8a00\u8a9e\u3084\u30a2\u30a4\u30c7\u30a2\u3092\u30de\u30b9\u30bf\u30fc\u3057\u3066\u3044\u306a\u3044\u3068\u4eee\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u79c1\u305f\u3061\u306f\u5f7c\u3089\u3092\u52a9\u3051\u305f\u3044\u3068\u601d\u3063\u3066\u3044\u307e\u3059\uff01
      2. \u4e00\u822c\u5316\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u81ea\u5206\u81ea\u8eab\u306e\u7d4c\u9a13\u304b\u3089\u8a71\u3059\u3053\u3068\u3002\u4ed6\u4eba\u306e\u7d4c\u9a13\u306e\u4fa1\u5024\u3092\u8a8d\u8b58\u3059\u308b\u3002\u4ed6\u4eba\u306e\u4ee3\u308f\u308a\u306b\u8a71\u3059\u3053\u3068\u306f\u907f\u3051\u3066\u304f\u3060\u3055\u3044\u3002
        • \u300c\u5f7c\u3089\u300d\u3001\u300c\u79c1\u305f\u3061\u300d\u3001\u300c\u3042\u306a\u305f\u300d\u306e\u4ee3\u308f\u308a\u306b\u300c\u79c1\u300d\u3092\u4f7f\u3063\u3066\u304f\u3060\u3055\u3044\u3002
        • \u3059\u3079\u3066\u306e\u53c2\u52a0\u8005\u306f\u3001\u4ed6\u306e\u53c2\u52a0\u8005\u304c\u81ea\u5206\u81ea\u8eab\u306e\u30e6\u30cb\u30fc\u30af\u306a\u7d4c\u9a13\u3092\u6301\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3059\u308b\u3079\u304d\u3067\u3059\u3002
        • \u5225\u306e\u53c2\u52a0\u8005\u306e\u7d4c\u9a13\u3092\u7121\u52b9\u306b\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u4ee3\u308f\u308a\u306b\u3001\u3042\u306a\u305f\u81ea\u8eab\u306e\u30b9\u30c8\u30fc\u30ea\u30fc\u3084\u7d4c\u9a13\u3092\u5171\u6709\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      3. \u8cea\u554f\u3092\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30a4\u30c7\u30a2\u3001\u611f\u60c5\u3001\u61f8\u5ff5\u3001\u307e\u305f\u306f\u304a\u4e92\u3044\u306b\u7570\u8b70\u3092\u5531\u3048\u307e\u3059\u3002\u500b\u4eba\u653b\u6483\u306f\u63a7\u3048\u307e\u3059\u3002\u307e\u305a\u306f\u30a2\u30a4\u30c7\u30a2\u306b\u7126\u70b9\u3092\u5f53\u3066\u307e\u3059\u3002
        • \u8a00\u8449\u306b\u3088\u308b\u7570\u8b70\u3001\u76ae\u8089\u306a\u4fae\u8fb1\u3001\u6027\u5225/\u4eba\u7a2e/\u5730\u57df\u306e\u56fa\u5b9a\u89b3\u5ff5\u306a\u3069\u306f\u907f\u3051\u307e\u3059\u3002
      4. \u81ea\u5206\u306e\u80fd\u529b\u3068\u90fd\u5408\u306b\u5408\u308f\u305b\u3066\u6700\u5927\u9650\u306b\u53c2\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002
        • \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u6210\u9577\u306f\u3001\u500b\u4eba\u306e\u610f\u898b\u3092\u53d6\u308a\u5165\u308c\u308b\u3053\u3068\u306b\u304b\u304b\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u306f\u3001\u7686\u3055\u3093\u304c\u58f0\u3092\u4e0a\u3052\u3066\u767a\u8a00\u3059\u308b\u3053\u3068\u3092\u671b\u3093\u3067\u3044\u307e\u3059\u3002\u8ca2\u732e\u3067\u304d\u308b\u6642\u9593\u306f\u4eba\u305d\u308c\u305e\u308c\u3067\u3059\u30025 \u5206\u3067\u3082 5 \u6642\u9593\u3067\u3082\u3001\u53c2\u52a0\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u5e78\u3044\u3067\u3059\u3002
        • \u9759\u304b\u306b\u6f5c\u3093\u3067\u5b66\u3073\u306b\u6765\u308b\u3001\u3064\u307e\u308a\u300c\u6f5c\u3080\u300d\u4eba\u3082\u6b53\u8fce\u3057\u307e\u3059\u304c\u3001\u81ea\u5df1\u7d39\u4ecb\u3092\u3057\u3066\u6328\u62f6\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      5. \u5408\u610f\u3059\u308b\u3053\u3068\u304c\u5fc5\u305a\u3057\u3082\u76ee\u6a19\u3067\u306f\u306a\u3044\u3053\u3068\u3092\u53d7\u3051\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002
        • \u6280\u8853\u7684\u306a\u554f\u984c\u306b\u306f\u3001\u3042\u306a\u305f\u306e\u8a2d\u5b9a\u3067\u306f\u3046\u307e\u304f\u3044\u304b\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044\u304c\u3001\u3055\u307e\u3056\u307e\u306a\u300c\u6b63\u3057\u3044\u300d\u7b54\u3048\u304c\u3057\u3070\u3057\u3070\u5b58\u5728\u3057\u307e\u3059\u3002
      6. \u8a00\u8a9e\u306e\u9055\u3044\u3084\u610f\u56f3\u3057\u306a\u3044\u610f\u5473\u5408\u3044\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002
        • \u300c\u30c6\u30ad\u30b9\u30c8\u306f\u96e3\u3057\u3044\u300d - \u30c6\u30ad\u30b9\u30c8\u3067\u52b9\u679c\u7684\u306b\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3068\u308b\u306e\u306f\u96e3\u3057\u3044\u3053\u3068\u3092\u8a8d\u8b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      7. \u500b\u4eba\u306e\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u8a8d\u3081\u308b\u3002
        • \u660e\u793a\u3055\u308c\u305f\u540d\u524d\u3068\u4ee3\u540d\u8a5e\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4eba\u7a2e\u3001\u6027\u7684\u6307\u5411\u3001\u969c\u5bb3\u306a\u3069\u306b\u3064\u3044\u3066\u7591\u554f\u3092\u5448\u3055\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
        • \u8ab0\u304b\u3092\u3069\u306e\u3088\u3046\u306b\u547c\u3076\u3079\u304d\u304b\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u63a7\u3048\u3081\u304b\u3064\u656c\u610f\u3092\u6301\u3063\u3066\u5c0b\u306d\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001\u3069\u306e\u4ee3\u540d\u8a5e\u3092\u4f7f\u7528\u3059\u3079\u304d\u304b\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u3063\u3066\u5c0b\u306d\u3066\u304f\u3060\u3055\u3044\u3002\u6b63\u3057\u3044\u4ee3\u540d\u8a5e\u3092\u4f7f\u3046\u3053\u3068\u3067\u4ed6\u4eba\u3092\u5c0a\u91cd\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
      8. \u4e00\u90e8\u306e\u30aa\u30d5\u30c8\u30d4\u30c3\u30af\u306a\u4f1a\u8a71\u306f\u8a31\u5bb9\u3055\u308c\u307e\u3059\u3002
        • \u30a2\u30ca\u30a6\u30f3\u30b9\u306e\u30af\u30ed\u30b9\u30dd\u30b9\u30c8\u306e\u4e00\u90e8\u3082\u8a31\u5bb9\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u884c\u70ba\u306f\u8a31\u3055\u308c\u307e\u305b\u3093:
          • \u30b9\u30ec\u30c3\u30c9\u306e\u4e57\u3063\u53d6\u308a
          • \u30b9\u30d1\u30e0\u884c\u70ba
          • \u5546\u696d\u7684\u306a\u5e83\u544a
          • \u9732\u9aa8\u306a\u81ea\u5df1\u5ba3\u4f1d
          • \u7279\u306b\u516c\u5f0f\u306e\u4f1a\u8b70\u6642\u9593\u3084\u96c6\u4e2d\u7684\u306a\u4f1a\u8a71\u4e2d\u306b\u30aa\u30d5\u30c8\u30d4\u30c3\u30af\u306b\u9038\u8131\u3059\u308b\u3053\u3068
        • \u30aa\u30d5\u30c8\u30d4\u30c3\u30af\u306a\u4f1a\u8a71\u3092\u6df1\u3081\u308b\u305f\u3081\u306e\u3088\u308a\u9069\u5207\u306a\u5834\u6240\u3084\u6642\u9593\u3092\u767a\u8868\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002
        • \u9069\u5207\u306a\u884c\u52d5\u304c\u4f55\u304b\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      9. Lagoon\u5185\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5171\u6709\u3059\u308b\u5834\u5408\u306f\u3001\u660e\u78ba\u306a\u540c\u610f\u306e\u3082\u3068\u3067\u306e\u307f\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u5171\u6709\u306f\u614e\u91cd\u306b\u8003\u3048\u3066\u884c\u3044\u3001\u53c2\u52a0\u8005\u3092\u5acc\u304c\u3089\u305b\u305f\u308a\u3001\u50b7\u3064\u3051\u308b\u610f\u56f3\u3092\u3082\u3063\u3066\u884c\u308f\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
        • \u3053\u306e\u30d5\u30a9\u30fc\u30e9\u30e0\u306f\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u3068\u8003\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u3053\u306b\u6295\u7a3f\u3055\u308c\u305f\u3082\u306e\u306f\u8ab0\u3067\u3082\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u3001\u5b9f\u969b\u306b\u8aad\u307e\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3068\u60f3\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
        • Lagoon\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5171\u6709\u3059\u308b\u969b\u306f\u3001\u3059\u3079\u3066\u306e\u53c2\u52a0\u8005\u304b\u3089\u4e8b\u524d\u306b\u8a31\u53ef\u3092\u5f97\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u5f15\u7528\u3055\u308c\u305f\u308a\u3001\u8981\u7d04\u3055\u308c\u305f\u308a\u3001\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u304c\u64ae\u3089\u308c\u305f\u308a\u3059\u308b\u5834\u5408\u3067\u3082\u540c\u69d8\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u3001Twitter\u3084\u4ed6\u306e\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u30e1\u30c7\u30a3\u30a2\u3067\u306e\u5171\u6709\u3082\u542b\u307e\u308c\u307e\u3059\u3002 \u30d6\u30ed\u30b0\u6295\u7a3f\u3001\u8a18\u4e8b\u3001\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u306a\u3069\u3001\u3053\u308c\u3089\u306e\u5834\u6240\u306f\u8b70\u8ad6\u3084\u4f5c\u696d\u9032\u884c\u4e2d\u306e\u5834\u6240\u3067\u3059\u3002\u4f1a\u8a71\u306e\u65ad\u7247\u3092\u524a\u9664\u3059\u308b\u3068\u3001\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304c\u5931\u308f\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u7279\u306bLagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u63a8\u9032\u3059\u308b\u76ee\u7684\u304c\u306a\u3044\u5834\u5408\u3001\u8b70\u8ad6\u3092\u6b6a\u3081\u305f\u308a\u3001\u963b\u6b62\u3057\u305f\u308a\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
        • \u4e0a\u8a18\u3067\u8ff0\u3079\u305f\u901a\u308a\u3001\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u3063\u3066\u30bd\u30fc\u30b7\u30e3\u30eb\u30e1\u30c7\u30a3\u30a2\u3084\u4ed6\u306e\u30d5\u30a9\u30fc\u30e9\u30e0\u306b\u6295\u7a3f\u3059\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u6295\u7a3f\u3057\u305f\u4eba\u304b\u3089\u8a31\u53ef\u3092\u53d6\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u8a31\u53ef\u3092\u53d6\u308b\u969b\u306b\u306f\u3001\u8b58\u5225\u60c5\u5831\u3092\u524a\u9664\u3059\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u8b58\u5225\u60c5\u5831\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u3067\u3082\u3001\u8a31\u53ef\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306b\u306fDiscord\u3001Github\u3001\u305d\u306e\u4ed6\u306eLagoon\u306e\u5a92\u4f53\u304b\u3089\u306e\u5185\u5bb9\u3082\u542b\u307e\u308c\u307e\u3059\u3002
        • \u4f55\u304b\u3092\u5171\u6709\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u305f\u3060\u805e\u3044\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff01\u300c\u306d\u3048\u3001\u3053\u308c\u3092Twitter\u306b\u30b7\u30a7\u30a2\u3057\u3066\u3082\u3044\u3044\u3067\u3059\u304b\uff1f\u3042\u306a\u305f\u306b\u30af\u30ec\u30b8\u30c3\u30c8\u3092\u4ed8\u3051\u308b\u3053\u3068\u3092\u559c\u3093\u3067\u3044\u307e\u3059\uff01\u300d
        • \u53c2\u52a0\u8005\u304cLagoon\u306e\u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\u306b\u30cf\u30e9\u30b9\u30e1\u30f3\u30c8\u884c\u70ba\u3092\u5831\u544a\u3059\u308b\u305f\u3081\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u8a31\u53ef\u3092\u5f97\u308b\u3053\u3068\u306a\u304f\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u516c\u306b\u307e\u305f\u306f\u79c1\u7684\u306b\u500b\u4eba\u3092\u6065\u305a\u304b\u3057\u304f\u3059\u308b\u305f\u3081\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u308b\u3053\u3068\u306f\u8a31\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u30cf\u30e9\u30b9\u30e1\u30f3\u30c8\u884c\u70ba\u306e\u5831\u544a\u306b\u306e\u307f\u9069\u7528\u3055\u308c\u307e\u3059\u3002
      10. \u5b89\u5168\u304b\u3064\u9069\u5207\u306a\u5834\u5408\u306b\u306f\u3001\u305d\u306e\u5834\u3067\u304a\u4e92\u3044\u306e\u82e6\u60c5\u3092\u89e3\u6c7a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u5b89\u5168\u3067\u3042\u308b\u5834\u5408\u3001\u5bfe\u7acb\u304c\u8d77\u3053\u3063\u305f\u5834\u6240\u3067\u660e\u78ba\u5316\u3057\u3001\u95a2\u4e0e\u3057\u3088\u3046\u3068\u52aa\u3081\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001Discord\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u3002
        • \u5bfe\u7acb\u304c\u30a8\u30b9\u30ab\u30ec\u30fc\u30c8\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u7ba1\u7406\u8005\u3084\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30de\u30cd\u30fc\u30b8\u30e3\u30fc(Alanna)\u306b\u9023\u7d61\u3059\u308b\u3002
        • \u52a9\u3051\u3092\u6c42\u3081\u308b\u3002
        • \u5bfe\u7acb\u306e\u4e3b\u984c\u304cLagoon\u3068\u306f\u95a2\u4fc2\u306a\u3044\u5834\u5408\u306f\u3001\u305d\u306e\u4f1a\u8a71\u3092\u3088\u308a\u9069\u5207\u306a\u30c1\u30e3\u30f3\u30cd\u30eb\u3078\u79fb\u52d5\u3055\u305b\u308b\u3002

      \u5bfe\u9762\u3067\u306eLagoon\u30b9\u30da\u30fc\u30b9\u306b\u304a\u3051\u308b\u8ffd\u52a0\u7684\u306a\u914d\u616e\u4e8b\u9805

      1. \u30a4\u30d9\u30f3\u30c8\u306e\u884c\u52d5\u898f\u7bc4\u304c\u3042\u308b\u5834\u5408\u306f\u305d\u308c\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u306a\u3044\u5834\u5408\u306f\u3001\u79c1\u305f\u3061\u306e\u884c\u52d5\u898f\u7bc4\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002
      2. \u4eba\u3005\u3001\u5f7c\u3089\u306e\u79fb\u52d5\u88c5\u7f6e\u3001\u307e\u305f\u306f\u4ed6\u306e\u88dc\u52a9\u6a5f\u5668\u306b\u3001\u305d\u306e\u4eba\u306e\u540c\u610f\u306a\u304f\u89e6\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u3082\u3057\u8ab0\u304b\u304c\u3042\u308b\u7279\u5b9a\u306e\u884c\u52d5\u3092\u6b62\u3081\u308b\u3088\u3046\u306b\u983c\u3093\u3060\u3089\u3001\u3059\u3050\u306b\u6b62\u3081\u3066\u304f\u3060\u3055\u3044\u3002
      3. \u4f55\u304b\u554f\u984c\u304c\u3042\u3063\u305f\u5834\u5408\u306f\u3001\u30a4\u30d9\u30f3\u30c8\u306e\u30b9\u30bf\u30c3\u30d5\u306b\u5831\u544a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 Lagoon\u30c1\u30fc\u30e0\u306e\u30e1\u30f3\u30d0\u30fc\u306b\u95a2\u3059\u308b\u554f\u984c\u306e\u5834\u5408\u306f\u3001uselagoon@amazee.io\u306b\u5831\u544a\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      Lagoon\u30c1\u30fc\u30e0\u306f\u3001Lagoon\u306e\u30b9\u30da\u30fc\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8ab0\u3067\u3082\u7d42\u4e86\u3055\u305b\u308b\u6a29\u5229\u3092\u4fdd\u7559\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/","title":"Lagoon\u306e\u9ad8\u5ea6\u306a\u6982\u5ff5","text":"

      \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Lagoon\u306e\u3088\u308a\u9ad8\u5ea6\u306a\u6982\u5ff5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002Lagoon\u3092\u4f7f\u3046\u306e\u304c\u521d\u3081\u3066\u306e\u65b9\u306f\u3001\u307e\u305aLagoon\u306e\u57fa\u672c\u6982\u5ff5\u304b\u3089\u59cb\u3081\u3066\u304f\u3060\u3055\u3044\u3002

      \u5c02\u9580\u7684\u306a\u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001\u79c1\u305f\u3061\u306eDiscord\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30e1\u30f3\u30d0\u30fc\u3084\u30e1\u30f3\u30c6\u30ca\u30fc\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-advanced/backups/","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7","text":"

      Lagoon\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u3068\u30b3\u30f3\u30c6\u30ca\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u4e21\u65b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u6a5f\u80fd\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u3001k8up operator\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30aa\u30da\u30ec\u30fc\u30bf\u306f\u3001\u3053\u308c\u3089\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u30ab\u30bf\u30ed\u30b0\u5316\u3059\u308b\u305f\u3081\u306bRestic\u3092\u5229\u7528\u3057\u3001\u901a\u5e38\u306fAWS S3\u30d0\u30b1\u30c3\u30c8\u306b\u63a5\u7d9a\u3057\u3066\u751f\u6210\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u5b89\u5168\u306a\u30aa\u30d5\u30b5\u30a4\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/backups/#production","title":"production\u74b0\u5883","text":""},{"location":"ja/concepts-advanced/backups/#_2","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb","text":"

      \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u30b3\u30f3\u30c6\u30ca\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067production\u74b0\u5883\u5185\u3067\u591c\u9593\u306b\u884c\u308f\u308c\u307e\u3059\u3002

      \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u7570\u306a\u308b\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u306e\"Backup Schedule\"\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u3067\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/backups/#_3","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u4fdd\u6301","text":"

      production\u74b0\u5883\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u4ee5\u4e0b\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306b\u5f93\u3063\u3066\u4fdd\u6301\u3055\u308c\u307e\u3059:

      • \u65e5\u6b21:7
      • \u9031\u6b21:6
      • \u6708\u6b21:1
      • \u6642\u9593\u3054\u3068:0

      \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u7570\u306a\u308b\u4fdd\u6301\u671f\u9593\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u306b\u3042\u308b\"Backup Retention\"\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u3067\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/backups/#_4","title":"\u958b\u767a\u74b0\u5883","text":"

      \u958b\u767a\u74b0\u5883\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u6bce\u6669\u8a66\u307f\u3089\u308c\u307e\u3059\u304c\u3001\u3042\u304f\u307e\u3067\u30d9\u30b9\u30c8\u30a8\u30d5\u30a9\u30fc\u30c8\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002

      "},{"location":"ja/concepts-advanced/backups/#_5","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u53d6\u5f97","text":"

      Restic\u306b\u4fdd\u5b58\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306fLagoon\u5185\u3067\u8ffd\u8de1\u3055\u308c\u3001Lagoon UI\u306e\u5404\u74b0\u5883\u306e\u300c\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u300d\u30bf\u30d6\u304b\u3089\u56de\u5fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/backups/#_6","title":"\u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304a\u3088\u3073/\u307e\u305f\u306f\u30ea\u30b9\u30c8\u30a2\u4f4d\u7f6e","text":"

      Lagoon\u306f\u3001\u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eLagoon API\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\"\u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u8a2d\u5b9a\"\u304a\u3088\u3073/\u307e\u305f\u306f\"\u30ab\u30b9\u30bf\u30e0\u30ea\u30b9\u30c8\u30a2\u8a2d\u5b9a\"\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u3001\u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u30ea\u30b9\u30c8\u30a2\u306e\u5834\u6240\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002

      \u5371\u967a

      \u6ce8\u610f\u3057\u3066\u9032\u3081\u3066\u304f\u3060\u3055\u3044:\u3053\u308c\u3089\u306e\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u30ec\u30d9\u30eb\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7/\u30ea\u30b9\u30c8\u30a2\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u5834\u6240\u304c\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002\u8a2d\u5b9a\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u3068\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7/\u30ea\u30b9\u30c8\u30a2\u304c\u5931\u6557\u3059\u308b\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8","text":""},{"location":"ja/concepts-advanced/base-images/#what-is-a-base-image","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3068\u306f\u4f55\u3067\u3059\u304b\uff1f","text":"

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001Lagoon\u4e0a\u3067\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u4f7f\u7528\u3067\u304d\u308b\u3001\u307e\u305f\u306f\u4f7f\u7528\u3057\u3066\u3044\u308bDocker\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u76e3\u67fb\u3055\u308c\u3066\u3044\u306a\u3044\u3082\u306e\u304c\u4e0a\u6d41\u304b\u3089\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9/\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6301\u3061\u8fbc\u307e\u308c\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u4f4e\u30ec\u30d9\u30eb\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304b\u3089\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ec\u30d9\u30eb\u306e\u30c6\u30fc\u30de\u3068\u30e2\u30b8\u30e5\u30fc\u30eb\u307e\u3067\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u74b0\u5883\u4e0a\u3067\u5fc5\u8981\u3068\u306a\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u3082\u306e\u304c\u3059\u3079\u3066\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u3069\u306e\u30b7\u30b9\u30c6\u30e0\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u3066\u3044\u308b\u304b\u304c\u308f\u304b\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u6642\u9593\u3068\u30ea\u30bd\u30fc\u30b9\u306e\u7bc0\u7d04\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u5171\u6709\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u3092\u500b\u3005\u306e\u6570\u767e\u306e\u30b5\u30a4\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      "},{"location":"ja/concepts-advanced/base-images/#derived-images","title":"\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8","text":"

      \u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3068\u306f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u62e1\u5f35\u3059\u308b\u30a4\u30e1\u30fc\u30b8\u306e\u3053\u3068\u3092\u6307\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u3044\u304f\u3064\u304b\u306e\u30d6\u30ed\u30b0\u30b5\u30a4\u30c8\u3092\u4f5c\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u79c1\u305f\u3061\u306eDrupal\u30a4\u30e1\u30fc\u30b8\u3092\u53d6\u5f97\u3057\u3001\u30d6\u30ed\u30b0\u30b5\u30a4\u30c8\u306b\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u30c6\u30fc\u30de\u3059\u3079\u3066\u3092\u542b\u3081\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3001\u305d\u306e\u30d6\u30ed\u30b0\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3079\u3066\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u6d3e\u751f\u3057\u307e\u3059\u3002

      \u3059\u3079\u3066\u306e\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u306f\u3001composer.json\u30d5\u30a1\u30a4\u30eb(Packagist\u3001Satis\u3001\u307e\u305f\u306fGitHub\u306a\u3069\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u7d4c\u7531\u3067)\u3092\u53d6\u308a\u8fbc\u3080\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u57fa\u672c\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

      \u3055\u3089\u306b\u3001\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001/build/pre_composer\u30b9\u30af\u30ea\u30d7\u30c8\u3078\u306e\u547c\u3073\u51fa\u3057\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u304c\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u30b9\u30af\u30ea\u30d7\u30c8\u3001\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306a\u3069\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u66f4\u65b0\u307e\u305f\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u308b\u3068\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5b9f\u884c\u3055\u308c\u3001pre_composer\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u305d\u306e\u5f8c\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#anatomy-of-a-base-image","title":"\u3079\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u69cb\u9020","text":"

      \u60c5\u5831

      \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306f\u3001Drupal\u3084Laravel\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u4f8b\u306b\u53d6\u308a\u4e0a\u3052\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5143\u3005Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3053\u308c\u3089\u306e\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5411\u3051\u306b\u66f8\u304b\u308c\u305f\u3082\u306e\u3067\u3059\u3002\u4ed6\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u5185\u5bb9\u3082\u30ab\u30d0\u30fc\u3059\u308b\u3088\u3046\u306b\u62e1\u5f35\u3055\u308c\u307e\u3059\u304c\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u5185\u5bb9\u306b\u95a2\u4fc2\u306a\u304f\u3001\u30d7\u30ed\u30bb\u30b9\u306f\u5909\u308f\u308a\u307e\u305b\u3093\u3002

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001Composer\u3067\u7ba1\u7406\u3055\u308c\u3001BitBucket\u3001GitHub\u3001\u307e\u305f\u306fGitLab (\u30c1\u30fc\u30e0\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u3082\u306e)\u306b\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5404\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u72ec\u81ea\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#metapackages","title":"\u30e1\u30bf\u30d1\u30c3\u30b1\u30fc\u30b8","text":"

      \u30e1\u30bf\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u3001\u8907\u6570\u306e\u4ed6\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u5305\u62ec\u3059\u308bComposer\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u4f8b\u3048\u3070\u3001Laravel\u3084Drupal\u306e\u30b3\u30a2\u30d5\u30a1\u30a4\u30eb\u3001\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3084\u30c6\u30fc\u30de\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002 \u3053\u308c\u306b\u3088\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u306b Laravel \u3084 Drupal \u306a\u3069\u3092\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002

      \u4ee5\u4e0b\u306f\u3001Laravel\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092 composer.json \u304b\u3089\u4f7f\u7528\u3057\u305f\u4f8b\u3067\u3059:

      composer.json
      \"require\": {\n    \"amazeelabs/algm_laravel_baseimage\": \"*\"\n},\n

      \u79c1\u305f\u3061\u306b\u5fc5\u7528\u306a\u306e\u306fGitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u6307\u3059\u3053\u306e\u30e1\u30bf\u30d1\u30c3\u30b1\u30fc\u30b8\u3060\u3051\u3067\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#docker-composeyml","title":"docker-compose.yml","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4ed6\u306e\u90e8\u5206\u306f docker-compose.yml \u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3001Drupal \u306e\u30a4\u30e1\u30fc\u30b8\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001MariaDB\u3001Solr\u3001Redis\u3001Varnish\u3082\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306fDrupal\u306b\u6700\u9069\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u3059\u3079\u3066docker-compose.yml\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#drupal","title":"Drupal","text":"

      Drupal\u30d9\u30fc\u30b9\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Drupal\u30b3\u30a2\u306b\u52a0\u3048\u3066\u4ee5\u4e0b\u306e\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30c8\u30c4\u30fc\u30eb\u3084\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

      • Drupal Console
      • Drush
      • Configuration installer
      • Redis
      • Poll
      • Search API
      • Search API Solr
      • Varnish Purge
      • Purge
      • Admin Toolbar
      • CDN
      • Password Policy
      • Pathauto
      • Ultimate Cron
      "},{"location":"ja/concepts-advanced/base-images/#configuration","title":"\u8a2d\u5b9a","text":"

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001Laravel\u3067\u4f7f\u7528\u3055\u308c\u308b\u74b0\u5883\u5909\u6570\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002

      \u3053\u308c\u3089\u306f\u4ee5\u4e0b\u306e\u5024\u3067\u3059:

      • DB_CONNECTION
      • DB_HOST
      • DB_PORT
      • DB_DATABASE
      • DB_USERNAME
      • DB_PASSWORD
      • REDIS_HOST
      • REDIS_PASSWORD
      • REDIS_PORT

      \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb(\u901a\u5e38\u306f/config\u306b\u4f4d\u7f6e\u3057\u3066\u3044\u307e\u3059)\u304c\u3053\u308c\u3089\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-advanced/base-images/#queues","title":"\u30ad\u30e5\u30fc","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u30ad\u30e5\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001artisan-worker\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u30ef\u30fc\u30ab\u30fc\u30b3\u30f3\u30c6\u30ca\u3067\u3001artisan queue:work\u306e\u5b9f\u884c\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\uff08docker-compose.yml\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\uff09

      "},{"location":"ja/concepts-advanced/base-images/#understanding-the-process-of-building-a-base-image","title":"\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306e\u7406\u89e3 \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8","text":"

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3059\u308b\u30d7\u30ed\u30bb\u30b9\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u90e8\u5206\u304c\u3042\u308a\u307e\u3059\u3002\u4e3b\u8981\u306a\u30b9\u30c6\u30c3\u30d7\u306f\u3059\u3079\u3066Makefile\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002Jenkinsfile\u306b\u306f\u3088\u308a\u30b7\u30f3\u30d7\u30eb\u306a\u30d3\u30e5\u30fc\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u898b\u308b\u3053\u3068\u3067\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u4f55\u304c\u8d77\u3053\u308b\u304b\u3092\u3088\u304f\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307b\u3068\u3093\u3069\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059(\u3053\u308c\u306f\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3059\u308b\u969b\u306b\u91cd\u8981\u3067\u3059)\u3002\u30ed\u30fc\u30ab\u30eb\u3067\u5168\u3066\u3092\u4f5c\u6210\u3057\u3001\u30c6\u30b9\u30c8\u3057\u305f\u5f8c\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3068\u3001\u5b9f\u969b\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306fJenkins\u306b\u3088\u3063\u3066\u69cb\u7bc9\u3055\u308c\u3001Harbor\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#makefile-and-build-assumptions","title":"Makefile\u3068\u30d3\u30eb\u30c9\u306e\u524d\u63d0\u6761\u4ef6","text":"

      \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u3001\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306b\u6700\u4f4e\u9650\u5fc5\u7528\u306a\u74b0\u5883\u5909\u6570\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#base-image-build-variables","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u30d3\u30eb\u30c9\u5909\u6570","text":"

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306b\u6ce8\u5165\u3055\u308c\u308b\u5909\u6570\u3068\u3001\u305d\u308c\u3092\u898b\u3064\u3051\u308b\u5834\u6240\u3067\u3059\u3002

      • BUILD_NUMBER - \u3053\u308c\u306f\u81ea\u52d5\u7684\u306bJenkins\u306b\u3088\u3063\u3066\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002
      • GIT_BRANCH - \u3053\u308c\u306fJenkins\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u81ea\u4f53\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u305d\u306e\u6642\u70b9\u3067\u30d3\u30eb\u30c9\u3055\u308c\u3066\u3044\u308b\u30d6\u30e9\u30f3\u30c1(develop\u3001main\u306a\u3069)\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002
      • DOCKER_REPO/DOCKER_HUB - \u3053\u308c\u306fJenkinsfile\u81ea\u4f53\u5185\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u3066\u751f\u6210\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u308bDocker\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30cf\u30d6\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u3002
      • DOCKER_USERNAME/DOCKER_PASSWORD - \u3053\u308c\u3089\u306f\u3001\u30d3\u30eb\u30c9\u306e\u65e9\u3044\u6bb5\u968e\u3067Docker\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u5b9f\u969b\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5909\u6570\u306fJenkins\u306e\u8a8d\u8a3c\u60c5\u5831\u5185\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306fJenkinsfile\u81ea\u4f53\u3067\u4f7f\u7528\u3055\u308c\u3001Makefile\u306e\u4e00\u90e8\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3064\u307e\u308a\u3001Jenkins\u4ee5\u5916\u306e\u5834\u6240(\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3059\u308b\u306a\u3069)\u3067\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5834\u5408\u3001docker login\u3092\u624b\u52d5\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      \u5b9f\u969b\u306b\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u3067make\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u308c\u3089\u304c\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3068\u601d\u3046\u3067\u3057\u3087\u3046 - \u305f\u3068\u3048\u3070\u3001\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089make\u3092\u5b9f\u884c\u3059\u308b\u3068\u304d\u306b\u3053\u308c\u3089\u3092\u8a2d\u5b9a\u3059\u308b\u3060\u3051\u3067\u3082\u69cb\u3044\u307e\u305b\u3093:

      \u30ed\u30fc\u30ab\u30eb\u3067make\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b
      GIT_BRANCH=example_branch_name DOCKER_HUB=the_docker_hub_the_images_are_pushed_to DOCKER_REPO=your_docker_repo_here BUILD_NUMBER=<some_integer> make images_remove\n
      "},{"location":"ja/concepts-advanced/base-images/#makefile-targets","title":"Makefile targets","text":"

      \u6700\u3082\u91cd\u8981\u306a\u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:

      • images_build : \u74b0\u5883\u5909\u6570\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u753b\u50cf\u3092\u30d3\u30eb\u30c9\u3057\u3066\u30bf\u30b0\u3092\u4ed8\u3051\u3066\u516c\u958b\u3057\u307e\u3059\u3002
      • images_publish : \u30d3\u30eb\u30c9\u3055\u308c\u305f\u753b\u50cf\u3092Docker\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
      • images_start : \u30c6\u30b9\u30c8\u306a\u3069\u306e\u305f\u3081\u306b\u30a4\u30e1\u30fc\u30b8\u3092\u958b\u59cb\u3057\u307e\u3059\u3002
      • images_test:\u30a4\u30e1\u30fc\u30b8\u306b\u5bfe\u3057\u3066\u57fa\u672c\u7684\u306a\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • images_remove:\u30d3\u30eb\u30c9\u74b0\u5883\u5909\u6570\u304c\u4e0e\u3048\u3089\u308c\u308b\u3068\u3001\u4ee5\u524d\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u524a\u9664\u3057\u307e\u3059\u3002
      "},{"location":"ja/concepts-advanced/base-images/#example-workflow-for-building-a-new-release-of-a-base-image","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30ea\u30ea\u30fc\u30b9\u3092\u30d3\u30eb\u30c9\u3059\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u4f8b","text":"

      \u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u307b\u3068\u3093\u3069\u306f\u3001\u69d8\u3005\u306a\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u9593\u3067\u5171\u6709\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u4e3b\u306b\u4e0a\u8a18\u3067\u8aac\u660e\u3057\u305fMakefile\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002

      1. Docker Login - Docker\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3001Harbor\u306eURL\u304cDocker\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u6e21\u3055\u308c\u307e\u3059\u3002
      2. Docker Build - make images_build\u30b9\u30c6\u30c3\u30d7\u304c\u73fe\u5728\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u4ee5\u4e0b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u307e\u3059:
        1. \u3059\u3079\u3066\u306e\u74b0\u5883\u5909\u6570\u304c\u30d3\u30eb\u30c9\u306e\u305f\u3081\u306b\u6e96\u5099\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
        2. docker-compose build\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u73fe\u5728\u306eGit\u30d6\u30e9\u30f3\u30c1\u304b\u3089\u3044\u304f\u3064\u304b\u306e\u65b0\u3057\u3044Docker\u30a4\u30e1\u30fc\u30b8\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002
      3. Image Test - \u3053\u308c\u306b\u3088\u308amake images_test\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u30c6\u30b9\u30c8\u3055\u308c\u308b\u30a4\u30e1\u30fc\u30b8\u306b\u3088\u308a\u7570\u306a\u308a\u307e\u3059\u3002\u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001\u3053\u308c\u306f\u30a4\u30e1\u30fc\u30b8\u3092\u958b\u59cb\u3057\u3001\u4f55\u3089\u304b\u306e\u65b9\u6cd5\u3067\u5bfe\u8a71\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u975e\u5e38\u306b\u76f4\u611f\u7684\u306a\u30c6\u30b9\u30c8\u3067\u3059(Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u30ea\u30b9\u30c8\u8868\u793a\u306a\u3069)\u3002
      4. Docker Push - \u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001images_publish\u306emake\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u542b\u307e\u308c\u308b\u30ed\u30b8\u30c3\u30af\u304c\u5b9f\u884c\u3055\u308c\u3001\u305d\u306e\u7d50\u679c\u3068\u3057\u3066\u751f\u6210\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u306b\u30bf\u30b0\u304c\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002 \u30b9\u30c6\u30c3\u30d72\u306eDocker Build\u3067\u305d\u308c\u3089\u3092Harbor\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3064\u3044\u3066\u306f\u3001\u672c\u30ac\u30a4\u30c9\u306e\u4ed6\u306e\u5834\u6240\u3067\u8a73\u3057\u304f\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002
      5. Docker Clean Images - images_remove\u3068\u3044\u3046make\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u5b9f\u884c\u3057\u3001\u3053\u308c\u3089\u304cHarbor\u306b\u3042\u308b\u305f\u3081\u3001\u65b0\u3057\u304f\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092Docker\u30db\u30b9\u30c8\u304b\u3089\u5358\u7d14\u306b\u524a\u9664\u3057\u307e\u3059\u3002
      "},{"location":"ja/concepts-advanced/base-images/#releasing-a-new-version-of-a-base-image","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30ea\u30ea\u30fc\u30b9","text":"

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30ea\u30ea\u30fc\u30b9\u3059\u308b\u7406\u7531\u306f\u591a\u3005\u3042\u308a\u307e\u3059\u3002Drupal\u3084Laravel\u3001Node.js\u306a\u3069\u306e\u30a4\u30e1\u30fc\u30b8\u3067\u306f\u3001\u6a5f\u80fd\u3084\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u305f\u3081\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u3084\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u307e\u305f\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u307e\u305f\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u30d0\u30f3\u30c9\u30eb\u3055\u308c\u3066\u3044\u308b\u57fa\u672c\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001PHP\u3084Node.js\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u306a\u3069\u3067\u3059\u3002\u307e\u305f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u3066\u3044\u308b\u5b9f\u969b\u306e\u57fa\u672c\u7684\u306a\u30a4\u30e1\u30fc\u30b8\u3092\u66f4\u65b0\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002

      \u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d9\u30fc\u30b9\u3068\u306a\u308b\u30a4\u30e1\u30fc\u30b8\u306f\u3001Lagoon\u30c1\u30fc\u30e0\u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u3066\u3044\u308b\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u6708\u306b\u4e00\u56de(\u307e\u305f\u306f\u305d\u308c\u4ee5\u4e0a)\u306e\u983b\u5ea6\u3067\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u304c\u66f4\u65b0\u3055\u308c\u305f\u3068\u304d\u3001\u3042\u306a\u305f\u306f\u30a2\u30c3\u30d7\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u30d0\u30f3\u30c9\u30eb\u3055\u308c\u3066\u3044\u308b\u5909\u66f4\u3068\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u53d6\u308a\u5165\u308c\u308b\u305f\u3081\u306b\u3001\u81ea\u5206\u81ea\u8eab\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u307e\u3059\u3002 Drupal8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30ea\u30ea\u30fc\u30b9\u3092\u66f4\u65b0\u304a\u3088\u3073\u30bf\u30b0\u4ed8\u3051\u3057\u307e\u3059\u3002\u6211\u3005\u306f\u65b0\u3057\u3044\u30e2\u30b8\u30e5\u30fc\u30eb(ClamAV)\u3092\u57fa\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002Drupal\u3067\u30c7\u30e2\u3092\u884c\u3046\u306e\u306f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u4e2d\u3067\u6700\u3082\u8a2d\u5b9a\u304c\u8907\u96d1\u3060\u304b\u3089\u3067\u3059\u3002\u3059\u3079\u3066\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u5171\u901a\u3059\u308b\u624b\u9806\u3092\u4ee5\u4e0b\u306b\u8a18\u8f09\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#step-1-pull-down-the-base-image-locally","title":"\u30b9\u30c6\u30c3\u30d71 - \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u30ed\u30fc\u30ab\u30eb\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b","text":"

      \u3053\u308c\u306f\u5358\u306bGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30ed\u30fc\u30ab\u30eb\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u3067\u3059\u3002Drupal8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u5834\u5408\u3067\u306f\u3001Bitbucket\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u306e\u3067\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

      Clone Git repo.
      git clone ssh://git@bitbucket.biscrum.com:7999/webpro/drupal8_base_image.git\n

      "},{"location":"ja/concepts-advanced/base-images/#step-2-make-the-changes-to-the-repository","title":"\u30b9\u30c6\u30c3\u30d72 - \u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b","text":"

      \u60c5\u5831

      \u3053\u3053\u3067\u793a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306fDrupal 8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u7279\u6709\u306e\u3082\u306e\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u3042\u3089\u3086\u308b\u5909\u66f4(\u30d5\u30a1\u30a4\u30eb\u306e\u8ffd\u52a0\u3001\u57fa\u672c\u7684\u306aDocker\u30a4\u30e1\u30fc\u30b8\u306e\u5909\u66f4\u306a\u3069)\u306f\u3059\u3079\u3066\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u5bfe\u3057\u3066\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u884c\u308f\u308c\u307e\u3059\u3002

      \u6211\u3005\u306e\u4f8b\u3067\u306f\u3001ClamAV\u30e2\u30b8\u30e5\u30fc\u30eb\u3092Drupal 8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u95a2\u4e0e\u3057\u307e\u3059\u3002\u6700\u521d\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5fc5\u8981\u3068\u3059\u308b\u3053\u3068\u3067\u3001\u3053\u308c\u306b\u3088\u308a\u6211\u3005\u306ecomposer.json\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306fcomposer require\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u884c\u308f\u308c\u307e\u3059\u3002

      \u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059: Composer require\u3067\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3002

      composer require drupal/clamav\n

      Composer require\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u306fcomposer.json\u30d5\u30a1\u30a4\u30eb\u306b\u8868\u793a\u3055\u308c\u308b\u3079\u304d\u3067\u3059\u3002 \u3053\u3053\u3067\u306f\u3001composer.json\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304d\u3001\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30ea\u30b9\u30c8\u3092\u898b\u3066\u3001ClamAV\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u30ea\u30b9\u30c8\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#step-22-ensure-that-the-required-drupal-module-is-enabled-in-template-based-derived-images","title":"\u30b9\u30c6\u30c3\u30d72.2 - \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d9\u30fc\u30b9\u306e\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u5fc5\u8981\u306aDrupal\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b","text":"

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u3055\u308c\u305f\u4efb\u610f\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d9\u30fc\u30b9\u306e\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u3092Lagoon Bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u884c\u308f\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u5177\u4f53\u7684\u306b\u306f\u3001dependencies\u30bb\u30af\u30b7\u30e7\u30f3\u306elagoon_bundle.info.yml\u30d5\u30a1\u30a4\u30eb\u306b\u4f9d\u5b58\u6027\u3068\u3057\u3066\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u8981\u6c42\u3057\u307e\u3059\u3002Lagoon Bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u5f37\u5236\u3059\u308b\u305f\u3081\u3060\u3051\u306b\u5b58\u5728\u3059\u308b\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 \u3053\u3053\u3067\u306f\u3001web/modules/contrib/lagoon/lagoon_bundle/lagoon_bundle.info.yml\u3092\u958b\u304d\u3001\u4f9d\u5b58\u95a2\u4fc2\u3068\u3057\u3066clamav:clamav\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

      \u3053\u308c\u306b\u4f9d\u5b58\u95a2\u4fc2\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001\u6d3e\u751f\u3057\u305f\u30a4\u30e1\u30fc\u30b8\u4e0a\u3067Lagoon Bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u306b\u306a\u308b\u305f\u3073\u306b\u3001\u305d\u306e\u4f9d\u5b58\u95a2\u4fc2(\u3053\u306e\u5834\u5408\u3001\u65b0\u305f\u306b\u8ffd\u52a0\u3055\u308c\u305fClamAV\u30e2\u30b8\u30e5\u30fc\u30eb)\u3082\u6709\u52b9\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u6642\u306blagoon_bundle\u3092\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u6709\u52b9\u306b\u3059\u308b\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u5f37\u5236\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#step-23-test","title":"\u30b9\u30c6\u30c3\u30d72.3 - \u30c6\u30b9\u30c8","text":"

      \u3053\u308c\u306f\u3042\u306a\u305f\u304c\u4f55\u3092\u30c6\u30b9\u30c8\u3057\u3066\u3044\u308b\u304b\u306b\u3088\u308a\u307e\u3059\u3002ClamAV\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u5834\u5408\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3067\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u3001Lagoon Bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u5316\u3055\u308c\u305f\u3068\u304d\u306bClamAV\u3082\u6709\u52b9\u5316\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3067\u3059\u3002 \u3053\u3053\u3067\u306f\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u304c/app/web/modules/contrib\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002

      \u305d\u3057\u3066\u3001lagoon_bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u5316\u3059\u308b\u3068\u304d\u306b\u3001clamav\u3082\u6709\u52b9\u5316\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002 Drush\u3067\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u5316\u3059\u308b\u3002

      drush pm-enable lagoon_bundle -y\n

      \u8b66\u544a

      \u4e0a\u8a18\u306e\u30b3\u30f3\u30c6\u30ca\u3067JWT\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308b\u3067\u3057\u3087\u3046\u3002\u4e0a\u306e\u30c7\u30e2\u3067\u306f\u3053\u306e\u30a8\u30e9\u30fc\u306f\u7121\u8996\u3057\u3066\u304b\u307e\u3044\u307e\u305b\u3093\u3002\u80cc\u666f\u3068\u3057\u3066\u3001\u3042\u306a\u305f\u304c\u4f5c\u696d\u3057\u3066\u3044\u308b\u30b5\u30a4\u30c8\u306bLagoon\u74b0\u5883\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u3053\u306e\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

      \u30c6\u30b9\u30c8\u304c\u7d42\u4e86\u3057\u305f\u306e\u3067\u3001\u30a4\u30e1\u30fc\u30b8\u3092\u30bf\u30b0\u4ed8\u3051\u3057\u3066\u30d3\u30eb\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#step-3-tagging-images","title":"\u30b9\u30c6\u30c3\u30d73 - \u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30b0\u4ed8\u3051","text":"

      \u30a4\u30e1\u30fc\u30b8\u306f\u3001Git\u30bf\u30b0\u306b\u57fa\u3065\u3044\u3066\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3055\u308c\u307e\u3059 - \u3053\u308c\u3089\u306f\u6a19\u6e96\u7684\u306a\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0(semver)\u306e\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3046\u3079\u304d\u3067\u3059\u3002\u3059\u3079\u3066\u306e\u30bf\u30b0\u306f vX.Y.Z \u306e\u69cb\u9020\u3092\u6301\u3064\u3079\u304d\u3067\u3042\u308a\u3001X\u3001Y\u3001Z\u306f\u6574\u6570\u3067\u3059(\u6b63\u78ba\u306b\u306fX.Y.Z\u81ea\u4f53\u304c\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3042\u308a\u3001vX.Y.Z\u306f\u30bf\u30b0\u3067\u3059)\u3002\u3053\u308c\u306f\u30a4\u30e1\u30fc\u30b8\u30bf\u30b0\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u306e\u3067\u5fc5\u305a\u5f93\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      \u3053\u306e\u4f8b\u3067\u306f\u3001ClamAV\u3092\u8ffd\u52a0\u3057\u305f\u3053\u3068\u3092\u793a\u3059Drupal8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30bf\u30b0\u4ed8\u3051\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#here-we-demonstrate-how-to-tag-an-image","title":"\u3053\u3053\u3067\u306f\u3001\u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30b0\u4ed8\u3051\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059","text":"

      \u79c1\u305f\u3061\u306f\u3001git log\u3092\u4f7f\u7528\u3057\u3066\u3001\u901a\u5e38\u306e\u30b3\u30df\u30c3\u30c8\u3084\u30d7\u30c3\u30b7\u30e5\u3068\u540c\u3058\u3088\u3046\u306b\u3001\u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8(\u3057\u304b\u3057\u30d7\u30c3\u30b7\u30e5\u306f\u3057\u306a\u3044)\u3057\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002

      1. \u307e\u3060\u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8\u3057\u3066\u3044\u306a\u3051\u308c\u3070\u3001\u30b3\u30df\u30c3\u30c8\u3057\u307e\u3059\u3002
      2. \u6b21\u306b\u3001git tag\u3092\u4f7f\u7528\u3057\u3066\u3001\u3069\u306e\u30bf\u30b0\u306b\u3044\u308b\u306e\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
      3. \u6b21\u306b\u3001git tag -a v0.0.9 -m \u201cAdds clamAV to base.\u201d\u3092\u4f7f\u7528\u3057\u3066\u30bf\u30b0\u4ed8\u3051\u3057\u307e\u3059\u3002
        1. _git -a, --annotate\u3092\u4f7f\u3046\u3068 \u7121\u7f72\u540d\u306e\u6ce8\u91c8\u4ed8\u304d\u30bf\u30b0\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
      4. \u6b21\u306b\u3001git push --tags\u3067\u30bf\u30b0\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
      5. \u6700\u5f8c\u306b\u3001git push\u3067\u5168\u3066\u306e\u5909\u66f4\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002

      \u5371\u967a

      \u30bf\u30b0\u306f\u305d\u308c\u81ea\u4f53\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u660e\u793a\u7684\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\uff01

      "},{"location":"ja/concepts-advanced/base-images/#how-git-tags-map-to-image-tags","title":"Git\u306e\u30bf\u30b0\u304c\u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30b0\u306b\u3069\u306e\u3088\u3046\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u308b\u304b","text":"

      \u5371\u967a

      \u30d3\u30eb\u30c9\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u3088\u308a\u307e\u3059\u304c\u3001\u307b\u307c\u78ba\u5b9f\u306bdevelop\u30d6\u30e9\u30f3\u30c1\u7d4c\u7531\u3067\u5909\u66f4\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u3001\u305d\u308c\u3092main\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3059\u308b\u3067\u3057\u3087\u3046\u3002

      \u3053\u3053\u3067\u899a\u3048\u3066\u304a\u304f\u3079\u304d\u91cd\u8981\u306a\u70b9\u306f\u3001Jenkins\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001\u6700\u65b0\u306e\u30b3\u30df\u30c3\u30c8\u30bf\u30b0\u306b\u57fa\u3065\u3044\u3066\u30a4\u30e1\u30fc\u30b8\u3092\u30bf\u30b0\u4ed8\u3051\u3059\u308b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002

      \u30a4\u30e1\u30fc\u30b8\u306f\u4ee5\u4e0b\u306e\u30eb\u30fc\u30eb\u3067\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3001\u3053\u308c\u306b\u8a72\u5f53\u3059\u308b\u3082\u306e\u3054\u3068\u306b\u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u307e\u3059:

      1. main\u30d6\u30e9\u30f3\u30c1\u304c\u30d3\u30eb\u30c9\u3055\u308c\u308b\u3068\u3001latest\u3068\u3057\u3066\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u307e\u3059\u3002
      2. develop\u30d6\u30e9\u30f3\u30c1\u304c\u30d3\u30eb\u30c9\u3055\u308c\u308b\u3068\u3001development\u3068\u3057\u3066\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u307e\u3059\u3002
      3. \u30d3\u30eb\u30c9\u3055\u308c\u308b\u30b3\u30df\u30c3\u30c8\u304c\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3066\u3044\u308c\u3070\u3001\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u306f\u305d\u306e\u30b3\u30df\u30c3\u30c8\u306e\u30bf\u30b0\u4ed8\u3051\u3067\u30d3\u30eb\u30c9\u3055\u308c\u307e\u3059\u3002
        1. \u4e0a\u3067\u793a\u3057\u305f\u3088\u3046\u306b\u3001\u3053\u308c\u304c\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30ea\u30ea\u30fc\u30b9\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002\u307e\u305f\u3001\u4efb\u610f\u306e\u30bf\u30b0\u3067\u30a2\u30c9\u30db\u30c3\u30af\u306a\u30d3\u30eb\u30c9\u3092\u884c\u3046\u305f\u3081\u306b\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u30bf\u30b0\u540d\u306b\u306f\u5341\u5206\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306f\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u306e\u30bf\u30b0\u3067\u306e\u307f\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002
      "},{"location":"ja/concepts-advanced/base-images/#step-4-building-the-new-base-images","title":"\u30b9\u30c6\u30c3\u30d74 - \u65b0\u3057\u3044\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9","text":"

      \u60c5\u5831

      \u4e00\u822c\u7684\u306b\u306f\u3001\u81ea\u52d5\u30d3\u30eb\u30c9\u306e\u305f\u3081\u306e\u30c8\u30ea\u30ac\u30fc\u30b9\u30c8\u30e9\u30c6\u30b8\u30fc\u3092\u3053\u3053\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u305d\u308c\u306f\u3042\u306a\u305f\u306e\u30cb\u30fc\u30ba\u3084\u8a2d\u5b9a\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u305f\u3081\u3001\u3053\u3053\u3067\u306f\u624b\u52d5\u3067\u30d3\u30eb\u30c9\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

      1. \u3042\u306a\u305f\u306eLagoon Jenkins\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002
      2. \u4f5c\u696d\u4e2d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8(\u3053\u306e\u5834\u5408\u3001AIOBI Drupal 8 Base)\u3092\u9078\u629e\u3057\u307e\u3059\u3002
      3. \u30d3\u30eb\u30c9\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
      4. \u300cBuild Now\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002

      \u3053\u308c\u306b\u3088\u308a\u3001\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u304c\u958b\u59cb\u3055\u308c\u3001\u6210\u529f\u3059\u308c\u3070\u65b0\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u3092Harbor\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002

      \u30d3\u30eb\u30c9\u304c\u6210\u529f\u3057\u306a\u3044\u5834\u5408\u306f\u3001\u30d3\u30eb\u30c9\u81ea\u4f53\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ed\u30b0\u3092\u8aad\u307f\u3001\u3069\u3053\u3067\u5931\u6557\u3057\u305f\u304b\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u4e0b\u306eHarbor\u304b\u3089\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3067\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u79c1\u305f\u3061\u304cJenkins\u3067\u30d3\u30eb\u30c9\u3057\u305f\u3070\u304b\u308a\u306e\u30a4\u30e1\u30fc\u30b8\u306fHarbor\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u3001\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u305d\u308c\u304cv0.0.9\u3068\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u305d\u306e\u30bf\u30b0\u306e\u3064\u3044\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u79c1\u305f\u3061\u306fmain\u30d6\u30e9\u30f3\u30c1\u3092\u30d3\u30eb\u30c9\u3057\u305f\u306e\u3067\u3001\u300clatest\u300d\u30a4\u30e1\u30fc\u30b8\u3082\u30d3\u30eb\u30c9\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u6bb5\u968e\u3067\u306f\u3001v0.0.9\u3068\u300clatest\u300d\u30a4\u30e1\u30fc\u30b8\u306f\u540c\u4e00\u3067\u3059\u3002

      "},{"location":"ja/concepts-advanced/base-images/#acknowledgement","title":"\u8b1d\u8f9e","text":"

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u69cb\u9020\u306f\u3001\u5b9f\u969b\u306b\u306f\u3001 Denpal\u306e\u30d5\u30a9\u30fc\u30af\u3067\u3059\u3002\u3053\u308c\u306f\u5143\u306eDrupal Composer Template\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u304c\u3001Lagoon(\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u307e\u305f\u306f\u30db\u30b9\u30c8\u3055\u308c\u305fLagoon)\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u3059\u3079\u3066\u3092\u542b\u3093\u3067\u3044\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/environment-idling/","title":"\u74b0\u5883\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0(\u30aa\u30d7\u30b7\u30e7\u30f3)","text":""},{"location":"ja/concepts-advanced/environment-idling/#_2","title":"\u74b0\u5883\u30a2\u30a4\u30c9\u30e9\u30fc\u3068\u306f\u4f55\u3067\u3059\u304b\uff1f","text":"

      Lagoon\u306f\u3001Aergia\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc(lagoon-remote\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u3059)\u3092\u5229\u7528\u3057\u3066\u3001\u4e00\u5b9a\u671f\u9593\u4f7f\u7528\u3055\u308c\u3066\u3044\u306a\u3044\u74b0\u5883\u3092\u81ea\u52d5\u7684\u306b\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001Kubernetes\u30af\u30e9\u30b9\u30bf\u306e\u8ca0\u8377\u3092\u8efd\u6e1b\u3057\u3001\u5b9f\u969b\u306b\u4f7f\u7528\u4e2d\u306e\u672c\u756a\u74b0\u5883\u3068\u958b\u767a\u74b0\u5883\u306e\u5168\u4f53\u7684\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306b\u884c\u308f\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/environment-idling/#_3","title":"\u74b0\u5883\u306f\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u3059\u304b\uff1f","text":"

      \u74b0\u5883\u30a2\u30a4\u30c9\u30e9\u30fc\u306b\u306f\u591a\u304f\u306e\u7570\u306a\u308b\u8a2d\u5b9a\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u6a19\u6e96\u7684\u306aLagoon\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u793a\u3057\u307e\u3059(\u3053\u308c\u3089\u306f\u3042\u306a\u305f\u306eLagoon\u3067\u306f\u5168\u304f\u7570\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001Lagoon\u7ba1\u7406\u8005\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff01)

      • \u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u306f4\u6642\u9593\u3054\u3068\u306b\u8a66\u307f\u3089\u308c\u307e\u3059\u3002
      • \u672c\u756a\u74b0\u5883\u306f\u6c7a\u3057\u3066\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u305b\u3093\u3002
      • CLI\u30dd\u30c3\u30c9\u306f\u3001cron\u30b8\u30e7\u30d6\u304c\u542b\u307e\u308c\u3066\u304a\u3089\u305a\u3001\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u63a5\u7d9a\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u3067\u306a\u3044\u5834\u5408\u306b\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u3059\u3002
      • \u4ed6\u306e\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30dd\u30c3\u30c9\u306f\u3001\u74b0\u5883\u4e0a\u3067\u904e\u53bb4\u6642\u9593\u306e\u9593\u306b\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u304c\u306a\u304b\u3063\u305f\u5834\u5408\u306b\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u3059\u3002
      • \u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d3\u30eb\u30c9\u304c\u9032\u884c\u4e2d\u3067\u3042\u308c\u3070\u3001\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u306f\u884c\u308f\u308c\u307e\u305b\u3093\u3002
      "},{"location":"ja/concepts-advanced/environment-idling/#_4","title":"\u74b0\u5883\u306f\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u304b\u3089\u89e3\u9664\u3055\u308c\u307e\u3059\u304b\uff1f","text":"

      Aergia\u306f\u3001\u4efb\u610f\u306e\u74b0\u5883\u304c\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u3068\u81ea\u52d5\u7684\u306b\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u3092\u89e3\u9664\u3057\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u74b0\u5883\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3060\u3051\u3067\u74b0\u5883\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002\u540c\u69d8\u306b\u3001\u74b0\u5883\u3078\u306eSSH\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3059\u308b\u3068\u3001\u30b5\u30fc\u30d3\u30b9\u3082\u518d\u958b\u3057\u307e\u3059\u3002

      \u30a2\u30f3\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u306f\u6570\u79d2\u304b\u304b\u308a\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001Kubernetes\u30af\u30e9\u30b9\u30bf\u306f\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3089\u3067\u3059\u3002\u3053\u306e\u9593\u3001\u8a2a\u554f\u8005\u306b\u306f\u3001\u73fe\u5728\u81ea\u5206\u306e\u74b0\u5883\u304c\u8d77\u52d5\u4e2d\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3059\u5f85\u6a5f\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/environment-idling/#idler","title":"Idler\u304c\u79c1\u306e\u74b0\u5883\u3092\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u3057\u306a\u3044\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

      \u306f\u3044\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8(\u3059\u3079\u3066\u306e\u74b0\u5883\u306b\u5f71\u97ff)\u3068\u74b0\u5883(1\u3064\u306e\u74b0\u5883\u306e\u307f\u3092\u5bfe\u8c61\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408)\u306bautoIdle\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u3042\u308a\u3001\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u304c\u884c\u308f\u308c\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u30021\u306e\u5024\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/\u74b0\u5883\u304c\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u306e\u5bfe\u8c61\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c0\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u74b0\u5883\u304c0\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u3066\u3082\u3001\u74b0\u5883\u306f\u6c7a\u3057\u3066\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u305b\u3093\u3002 \u30c7\u30d5\u30a9\u30eb\u30c8\u306f\u5e38\u306b1(\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u304c\u6709\u52b9)\u3067\u3059\u3002

      \u3053\u308c\u3089\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/\u74b0\u5883\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a2d\u5b9a\u65b9\u6cd5\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u76f8\u8ac7\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-advanced/environment-types/","title":"\u74b0\u5883\u306e\u7a2e\u985e","text":"

      Lagoon\u306f\u73fe\u5728\u3001production(\u672c\u756a\u74b0\u5883)\u3068development(\u958b\u767a\u74b0\u5883)\u306e2\u3064\u306e\u7570\u306a\u308b\u74b0\u5883\u30bf\u30a4\u30d7\u3092\u533a\u5225\u3057\u3066\u3044\u307e\u3059\u3002

      Lagoon GraphQL API\u3092\u901a\u3058\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u969b\u306b\u306f\u3001productionEnvironment\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Lagoon\u304c\u5b9f\u884c\u3059\u308b\u3059\u3079\u3066\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u3001\u73fe\u5728\u306e\u74b0\u5883\u540d\u304cproductionEnvironment\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3068\u4e00\u81f4\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002\u3082\u3057\u305d\u3046\u3067\u3042\u308c\u3070\u3001Lagoon\u306f\u3053\u306e\u74b0\u5883\u3092production\u74b0\u5883\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u307e\u3059\u3002\u3053\u308c\u306f2\u3064\u306e\u5834\u6240\u3067\u884c\u308f\u308c\u307e\u3059:

      1. GraphQL API\u81ea\u4f53\u5185\u3002
      2. \u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u306eLAGOON_ENVIRONMENT_TYPE\u3068\u3044\u3046\u540d\u524d\u306e\u74b0\u5883\u5909\u6570\u3002

      \u3053\u306e2\u3064\u3060\u3051\u3067\u3059\u3002Lagoon\u81ea\u4f53\u306fdevelopment\u3068production\u306e\u74b0\u5883\u3092\u307e\u3063\u305f\u304f\u540c\u3058\u3088\u3046\u306b\u6271\u3044\u307e\u3059(\u6700\u7d42\u7684\u306b\u306f\u74b0\u5883\u306e\u9055\u3044\u3092\u3067\u304d\u308b\u3060\u3051\u5c11\u306a\u304f\u3059\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059 - \u305d\u308c\u304cLagoon\u306e\u7f8e\u3057\u3055\u3067\u3059)\u3002

      \u3053\u306e\u60c5\u5831\u3092\u4f7f\u7528\u3059\u308b\u3082\u306e\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059:

      • \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001development\u74b0\u5883\u306f\u30d2\u30c3\u30c8\u304c4\u6642\u9593\u306a\u3044\u5834\u5408\u306b\u4f11\u6b62\u72b6\u614b\u306b\u306a\u308a\u307e\u3059(\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3001\u81ea\u52d5\u7684\u306b\u8d77\u52d5\u3057\u307e\u3059)\u3002\u307e\u305f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b1\u3064\u305a\u3064\u306e\u74b0\u5883\u3067\u81ea\u52d5\u4f11\u6b62\u3092\u7121\u52b9\u306b\u3059\u308b\u3088\u3046\u4f9d\u983c\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\uff01
      • \u30c7\u30d5\u30a9\u30eb\u30c8\u306eDrupal settings.php\u30d5\u30a1\u30a4\u30eb\u306f\u3001development.settings.php\u3068 production.settings.php\u3068\u3044\u3046\u8ffd\u52a0\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u74b0\u5883\u30bf\u30a4\u30d7\u3054\u3068\u306b\u7570\u306a\u308b\u8a2d\u5b9a\u3084\u69cb\u6210\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002
      • \u3082\u3057\u3001\u3042\u306a\u305f\u304cproduction\u74b0\u5883\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883(\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u307e\u305f\u306fREST\u7d4c\u7531\u3067)\u3092\u524a\u9664\u3059\u308b\u306a\u3089\u3001Lagoon\u306f\u8aa4\u3063\u3066\u524a\u9664\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u306b\u62d2\u5426\u3057\u307e\u3059\u3002production\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u306b\u306f\u3001API\u3067productionEnvironment\u3092\u5909\u66f4\u3059\u308b\u304b\u3001REST API\u306ePOST\u30da\u30a4\u30ed\u30fc\u30c9\u3067forceDeleteProductionEnvironment: true\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u7528\u304c\u3042\u308a\u307e\u3059\u3002
      • Lagoon\u306e\u7ba1\u7406\u8005\u306f\u3001production\u74b0\u5883\u60c5\u5831\u3092\u8ffd\u52a0\u306e\u76ee\u7684\u3067\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001amazee.io\u3067\u306f\u3001\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u4fa1\u683c\u3092\u8a08\u7b97\u3059\u308b\u305f\u3081\u306b\u3001production\u74b0\u5883\u306e\u30d2\u30c3\u30c8\u6570\u3060\u3051\u3092\u8a08\u7b97\u3057\u3066\u3044\u307e\u3059\u3002
      "},{"location":"ja/concepts-advanced/environment-variables/","title":"\u74b0\u5883\u5909\u6570","text":"

      API\u30c8\u30fc\u30af\u30f3\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3092\u74b0\u5883\u5909\u6570\u306b\u4fdd\u5b58\u3059\u308b\u3053\u3068\u306f\u4e00\u822c\u7684\u3067\u3059\u3002

      \u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3046\u3068\u3001\u3053\u308c\u3089\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u306f\u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308a\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u3001\u5404\u74b0\u5883\u304c\u74b0\u5883\u5909\u6570\u307e\u305f\u306f.env\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u5225\u306e\u74b0\u5883\u5909\u6570\u30bb\u30c3\u30c8\u3092\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002

      \u74b0\u5883\u5909\u6570\u306b\u306fDockerfile\u307e\u305f\u306f\u30e9\u30f3\u30bf\u30a4\u30e0\u6642(API\u74b0\u5883\u5909\u6570\u7d4c\u7531)\u306e\u3044\u305a\u308c\u304b\u3067\u5b9a\u7fa9\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308b\u305f\u3081\u512a\u5148\u9806\u4f4d\u304c\u3042\u308a\u3001\u3088\u308a\u4f4e\u3044\u6570\u5b57\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u304c\u512a\u5148\u3055\u308c\u307e\u3059\u3002

      1. \u74b0\u5883\u5909\u6570(Lagoon API\u7d4c\u7531\u3067\u5b9a\u7fa9) - \u74b0\u5883\u56fa\u6709\u3002
      2. \u74b0\u5883\u5909\u6570(Lagoon API\u7d4c\u7531\u3067\u5b9a\u7fa9) - \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u3002
      3. Dockerfile\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570(ENV\u30b3\u30de\u30f3\u30c9)\u3002
      4. .lagoon.env.\u306e$LAGOON_GIT_BRANCH\u307e\u305f\u306f.lagoon.env.\u306e$LAGOON_GIT_SAFE_BRANCH\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570(\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u3001$LAGOON_GIT_BRANCH\u3068$LAGOON_GIT_SAFE_BRANCH\u304c\u3053\u306eDocker\u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3068\u4e00\u81f4\u3059\u308b\u540d\u524d\u3067\u3042\u308b\u5834\u5408\u3001\u3053\u308c\u3089\u306e\u5024\u3092\u3053\u306e\u7279\u5b9a\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u5909\u6570\u306b\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002\uff09
      5. .lagoon.env\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570(\u5b58\u5728\u3059\u308b\u5834\u5408)\u3001\u3053\u308c\u3092\u5168\u3066\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u5909\u6570\u306e\u4e0a\u66f8\u304d\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
      6. .env\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u3002
      7. .env.defaults\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u3002

      .lagoon.env.\u306e$LAGOON_GIT_BRANCH\u3001.lagoon.env.\u306e$LAGOON_GIT_SAFE_BRANCH\u3001.env\u3001\u305d\u3057\u3066 .env.defaults\u306f\u3001\u5168\u3066\u3001\u5404\u30b3\u30f3\u30c6\u30ca\u81ea\u4f53\u306b\u3088\u3063\u3066\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4e00\u90e8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u308b\u969b\u306b\u30bd\u30fc\u30b9\u5316\u3055\u308c\u307e\u3059\u3002\u305d\u308c\u3089\u306fLagoon\u3067\u306f\u306a\u304f\u3001\u30b3\u30f3\u30c6\u30ca\u306eENTRYPOINT\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u3088\u3063\u3066\u8aad\u307f\u8fbc\u307e\u308c\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u305d\u308c\u3089\u3092\u63a2\u3057\u307e\u3059\u3002\u74b0\u5883\u5909\u6570\u304c\u671f\u5f85\u901a\u308a\u306b\u8868\u793a\u3055\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u4ed6\u306e\u5834\u6240\u3092\u6307\u3059WORKDIR\u8a2d\u5b9a\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-advanced/environment-variables/#environment-variables-lagoon-api","title":"\u74b0\u5883\u5909\u6570 - Lagoon API","text":"

      Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u305f\u304f\u306a\u3044\u5909\u6570(\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3084API\u30ad\u30fc\u306a\u3069)\u306b\u3064\u3044\u3066\u306f\u3001Lagoon API\u306e\u74b0\u5883\u5909\u6570\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5909\u6570\u306f\u3001\u8ab0\u304b\u304c\u30ed\u30fc\u30ab\u30eb\u306e\u958b\u767a\u74b0\u5883\u3084\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u4e0a\u306b\u6301\u3063\u3066\u3044\u308b\u3068\u3001\u5371\u967a\u306b\u3055\u3089\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      Lagoon API\u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u307e\u305f\u306f\u74b0\u5883\u56fa\u6709\u306e\u5909\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u30b9\u30b3\u30fc\u30d7\u9650\u5b9a\u306e\u30d3\u30eb\u30c9\u6642\u307e\u305f\u306f\u30e9\u30f3\u30bf\u30a4\u30e0\u306b\u5bfe\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3059\u3079\u3066Lagoon GraphQL API\u3092\u901a\u3058\u3066\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002GraphQL API\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001GraphQL API\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/environment-variables/#runtime-environment-variables-lagoon-api","title":"\u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u5909\u6570 - LagoonAPI","text":"

      \u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u5909\u6570\u306f\u81ea\u52d5\u7684\u306b\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u3067\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u74b0\u5883\u304c\u518d\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u5f8c\u306b\u306e\u307f\u8ffd\u52a0\u307e\u305f\u306f\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002

      \u3053\u308c\u306f\u3001ID 463\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u30e9\u30f3\u30bf\u30a4\u30e0\u5909\u6570(\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd)\u3092\u5b9a\u7fa9\u3057\u307e\u3059:

      \u30e9\u30f3\u30bf\u30a4\u30e0\u5909\u6570\u306e\u8ffd\u52a0
      mutation addRuntimeEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:RUNTIME,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"\n}\n) {\nid\n}\n}\n

      \u3053\u308c\u306f\u3001\u74b0\u5883ID 546\u7279\u6709\u306e\u30e9\u30f3\u30bf\u30a4\u30e0\u5909\u6570(\u7279\u5b9a\u306e\u74b0\u5883\u306e\u307f\u3067\u5229\u7528\u53ef\u80fd)\u3092\u5b9a\u7fa9\u3057\u307e\u3059:

      \u74b0\u5883ID\u306e\u5b9a\u7fa9
      mutation addRuntimeEnv {\naddEnvVariable(\ninput:{\ntype:ENVIRONMENT,\ntypeId:546,\nscope:RUNTIME,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"\n}\n) {\nid\n}\n}\n
      "},{"location":"ja/concepts-advanced/environment-variables/#build-time-environment-variables-lagoon-api","title":"\u30d3\u30eb\u30c9\u6642\u306e\u74b0\u5883\u5909\u6570 LagoonAPI","text":"

      \u30d3\u30eb\u30c9\u6642\u306e\u74b0\u5883\u5909\u6570\u306f\u30d3\u30eb\u30c9\u4e2d\u306b\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3042\u308a\u3001Dockerfiles\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      \u30d3\u30eb\u30c9\u6642\u306e\u74b0\u5883\u5909\u6570\u306e\u4f7f\u7528
      ARG MYVARIABLENAME\n

      \u901a\u5e38\u3001ARG\u306fFROM\u306e\u5f8c\u306b\u8a18\u8ff0\u3057\u307e\u3059\u3002ARG\u3068FROM\u306b\u3064\u3044\u3066\u306edocker\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u8aad\u3080\u3002

      \u3053\u308c\u306f\u3001ID 463\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u30d3\u30eb\u30c9\u6642\u5909\u6570(\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd)\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u30d3\u30eb\u30c9\u6642\u5909\u6570\u3092\u5b9a\u7fa9\u3059\u308b
      mutation addBuildtimeEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:BUILD,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"}\n) {\nid\n}\n}\n

      \u3053\u308c\u306f\u3001\u74b0\u5883ID 546\u7279\u6709\u306e\u30d3\u30eb\u30c9\u6642\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u307e\u3059(\u305d\u306e\u7279\u5b9a\u306e\u74b0\u5883\u5185\u3060\u3051\u3067\u5229\u7528\u53ef\u80fd)\u3002

      \u74b0\u5883ID\u3092\u5b9a\u7fa9\u3059\u308b
      mutation addBuildtimeEnv {\naddEnvVariable(input:{type:ENVIRONMENT, typeId:546, scope:BUILD, name:\"MYVARIABLENAME\", value:\"MyVariableValue\"}) {\nid\n}\n}\n

      \u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u74b0\u5883\u5909\u6570\u306f\u3001\u30d3\u30eb\u30c9\u4e2d\u306b\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u304d\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3001Specials \u00bb container-registries\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u307e\u305f\u306f\u74b0\u5883\u30ec\u30d9\u30eb\u3067\u9069\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u3053\u308c\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u3092\u5b9a\u7fa9\u3057\u307e\u3059 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8ID 463\u306e\u305f\u3081\u306e\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u5909\u6570(\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd):

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u5909\u6570\u3092\u5b9a\u7fa9\u3059\u308b
      mutation addContainerRegistryEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:CONTAINER_REGISTRY,\nname:\"MY_OWN_REGISTRY_PASSWORD\",\nvalue:\"MySecretPassword\"})\n) {\nid\n}\n}\n

      \u3053\u308c\u306f\u3001\u74b0\u5883ID 546\u7279\u6709\u306e\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u307e\u3059(\u305d\u306e\u7279\u5b9a\u306e\u74b0\u5883\u5185\u3067\u306e\u307f\u5229\u7528\u53ef\u80fd):

      \u74b0\u5883ID\u3092\u5b9a\u7fa9\u3059\u308b
      mutation addContainerRegistryEnv {\naddEnvVariable(\ninput:{\ntype:ENVIRONMENT,\ntypeId:546,\nscope:CONTAINER_REGISTRY,\nname:\"MY_OWN_REGISTRY_PASSWORD\",\nvalue:\"MySecretPassword\"}\n) {\nid\n}\n}\n
      "},{"location":"ja/concepts-advanced/environment-variables/#global-environment-variables-lagoon-api","title":"\u30b0\u30ed\u30fc\u30d0\u30eb\u74b0\u5883\u5909\u6570 - Lagoon API","text":"

      \u30b0\u30ed\u30fc\u30d0\u30eb\u74b0\u5883\u5909\u6570\u306f\u3001\u30d3\u30eb\u30c9\u306b\u3088\u3063\u3066\u6d88\u8cbb\u3055\u308c\u308b\u305f\u3081\u306e\u30d3\u30eb\u30c9\u6642\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u3001\u307e\u305f\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u3067\u5229\u7528\u53ef\u80fd\u306a\u30e9\u30f3\u30bf\u30a4\u30e0\u5909\u6570\u3068\u3057\u3066\u5229\u7528\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/environment-variables/#environment-files-existing-directly-in-the-git-repo","title":"Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u76f4\u63a5\u5b58\u5728\u3059\u308b\u74b0\u5883\u30d5\u30a1\u30a4\u30eb","text":"

      Git\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306b\u5b89\u5168\u306b\u4fdd\u5b58\u3067\u304d\u308b\u74b0\u5883\u5909\u6570\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u76f4\u63a5\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059 \u3002\u3053\u308c\u3089\u306e\u5909\u6570\u306f\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u3082\u5229\u7528\u53ef\u80fd\u3067\u3042\u308a\u3001\u3088\u308a\u79fb\u690d\u6027\u304c\u9ad8\u304f\u306a\u308a\u307e\u3059\u3002

      \u74b0\u5883\u30d5\u30a1\u30a4\u30eb\u306e\u69cb\u6587\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059:

      myenvironment.env
      MYVARIABLENAME=\"MyVariableValue\"\nMVARIABLENUMBER=4242\nDB_USER=$DB_USERNAME # DB_USERNAME\u306e\u5024\u3067DB_USER\u3092\u518d\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304cLagoon\u63d0\u4f9b\u306e\u5909\u6570\u306b\u5bfe\u3057\u3066\u5225\u306e\u5909\u6570\u540d\u3092\u671f\u5f85\u3057\u3066\u3044\u308b\u5834\u5408\u306a\u3069\u3067\u3059\u3002\n
      "},{"location":"ja/concepts-advanced/environment-variables/#lagoonenvbranchname","title":".lagoon.env.$BRANCHNAME","text":"

      \u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308b\u74b0\u5883\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u305f\u3044\u5834\u5408\u306f\u3001.lagoon.env.$BRANCHNAME\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306e\u5834\u5408\u306f.lagoon.env.main\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u74b0\u5883\u9593\u3067\u306e\u74b0\u5883\u5909\u6570\u306e\u533a\u5225\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/environment-variables/#env-and-envdefaults","title":".env and .env.defaults","text":"

      .env\u3068.env.defaults\u306f\u3001\u4ed6\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306e\u74b0\u5883\u5909\u6570\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u74b0\u5883\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u5229\u7528\u3057\u307e\u3059(Workflows\u53c2\u7167)\u3002

      "},{"location":"ja/concepts-advanced/environment-variables/#special-environment-variables","title":"\u7279\u5225\u306a\u74b0\u5883\u5909\u6570","text":""},{"location":"ja/concepts-advanced/environment-variables/#php_error_reporting","title":"PHP_ERROR_REPORTING","text":"

      \u3053\u306e\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001PHP\u304c\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30ec\u30d9\u30eb\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001production\u74b0\u5883\u304b\u958b\u767a\u74b0\u5883\u304b\u306b\u3088\u3063\u3066\u52d5\u7684\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

      production\u74b0\u5883\u3067\u306f\u3001\u3053\u306e\u5024\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE\u306b\u306a\u308a\u307e\u3059\u3002

      \u958b\u767a\u74b0\u5883\u3067\u306f\u3001\u3053\u306e\u5024\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067E_ALL & ~E_DEPRECATED & ~E_STRICT\u306b\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/environment-variables/#custom-backup-settings","title":"\u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u8a2d\u5b9a","text":"

      Lagoon\u306f\u3001\u6b21\u306e4\u3064\u306e\u5909\u6570\u3059\u3079\u3066\u304cBUILD\u30bf\u30a4\u30d7\u306e\u5909\u6570\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u4efb\u610f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5834\u6240\u3068\u8a8d\u8a3c\u60c5\u5831\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u74b0\u5883\u5909\u6570\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u3067(\u74b0\u5883\u3054\u3068\u3067\u306f\u306a\u304f)\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u305d\u308c\u3089\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u306bLagoon\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u5fc5\u8981\u3067\u3059(\u3059\u3079\u3066\u306e\u74b0\u5883\u306b\u3064\u3044\u3066)\u3002

      \u3053\u308c\u3089\u306e\u5909\u6570\u306e\u3044\u305a\u308c\u304b\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001Lagoon\u304c\u4f5c\u6210\u304a\u3088\u3073\u7ba1\u7406\u3059\u308b\u3059\u3079\u3066\u306e\u74b0\u5883\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u3053\u308c\u3089\u306e\u8a8d\u8a3c\u60c5\u5831\u3092\u4f7f\u7528\u3057\u3066\u683c\u7d0d\u3055\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u3053\u308c\u3089\u306e\u8a8d\u8a3c\u60c5\u5831\u306e\u4e2d\u65ad\u304c\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u5931\u6557\u307e\u305f\u306f\u30a2\u30af\u30bb\u30b9\u4e0d\u80fd\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      \u74b0\u5883\u5909\u6570\u540d \u76ee\u7684 LAGOON_BAAS_CUSTOM_BACKUP_ENDPOINT Lagoon\u306b\u3088\u3063\u3066\u958b\u59cb\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4fdd\u5b58\u3059\u308bS3\u4e92\u63db\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u6307\u5b9a\u3057\u307e\u3059S3 Sydney\u306e\u4f8b\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 https://s3.ap-southeast-2.amazonaws.com LAGOON_BAAS_CUSTOM_BACKUP_BUCKET Lagoon\u306b\u3088\u3063\u3066\u958b\u59cb\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4fdd\u5b58\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u540d\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u306e\u4f8b\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 example-restore-bucket LAGOON_BAAS_CUSTOM_BACKUP_ACCESS_KEY \u30ab\u30b9\u30bf\u30e0 \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306bLagoon\u304c\u4f7f\u7528\u3059\u308b\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u306e\u4f8b\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 AKIAIOSFODNN7EXAMPLE LAGOON_BAAS_CUSTOM_BACKUP_SECRET_KEY \u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306bLagoon\u304c\u4f7f\u7528\u3059\u308b\u79d8\u5bc6\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u306e\u4f8b\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

      S3\u30d0\u30b1\u30c3\u30c8\u3067\u306f\u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u306f\u4e0d\u8981\u3067\u3001\u5b8c\u5168\u306b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      Lagoon\u306f\u3053\u308c\u3089\u306eS3\u30d0\u30b1\u30c3\u30c8\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u52d5\u7684\u306b\u524a\u9664\u3059\u308b\u305f\u3081\u3001\u30d0\u30b1\u30c3\u30c8\u30ec\u30d9\u30eb\u3067\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u4fdd\u6301\u30dd\u30ea\u30b7\u30fc\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002

      "},{"location":"ja/concepts-advanced/environment-variables/#custom-restore-location","title":"\u30ab\u30b9\u30bf\u30e0\u5fa9\u5143\u5834\u6240","text":"

      BUILD\u30bf\u30a4\u30d7\u306e\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u4ee5\u4e0b\u306e\u51684\u3064\u306e\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u4efb\u610f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u30ea\u30b9\u30c8\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002\u74b0\u5883\u5909\u6570\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u3067\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a(\u74b0\u5883\u3054\u3068\u3067\u306f\u306a\u304f)\u3001\u305d\u308c\u3089\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3001Lagoon\u306e\u30c7\u30d7\u30ed\u30a4\u304c\u5fc5\u8981\u3067\u3059(\u5404\u74b0\u5883\u306b\u3064\u3044\u3066)\u3002

      \u3053\u308c\u3089\u306e\u5909\u6570\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001Lagoon\u306b\u3088\u3063\u3066\u5fa9\u5143\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u74b0\u5883\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u304c\u3053\u308c\u3089\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3092\u4f7f\u7528\u3057\u3066\u4fdd\u5b58\u3055\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3078\u306e\u30a2\u30af\u30bb\u30b9\u304c\u4e2d\u65ad\u3055\u308c\u308b\u3068\u3001\u5fa9\u5143\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u5931\u6557\u307e\u305f\u306f\u30a2\u30af\u30bb\u30b9\u4e0d\u80fd\u306b\u3064\u306a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

      \u74b0\u5883\u5909\u6570\u540d \u76ee\u7684 LAGOON_BAAS_CUSTOM_RESTORE_ENDPOINT Lagoon\u306b\u3088\u3063\u3066\u958b\u59cb\u3055\u308c\u305f\u5fa9\u5143\u3092\u4fdd\u5b58\u3059\u308b S3 \u4e92\u63db\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002S3 Sydney\u306e\u4f8b\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 https://s3.ap-southeast-2.amazonaws.com LAGOON_BAAS_CUSTOM_RESTORE_BUCKET Lagoon\u306b\u3088\u3063\u3066\u958b\u59cb\u3055\u308c\u305f\u5fa9\u5143\u3092\u4fdd\u5b58\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u540d\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u306e\u4f8b\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 example-restore-bucket LAGOON_BAAS_CUSTOM_RESTORE_ACCESS_KEY \u30ab\u30b9\u30bf\u30e0\u5fa9\u5143\u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306bLagoon\u304c\u4f7f\u7528\u3059\u308b\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u306e\u4f8b\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 AKIAIOSFODNN7EXAMPLE LAGOON_BAAS_CUSTOM_RESTORE_SECRET_KEY \u30ab\u30b9\u30bf\u30e0\u5fa9\u5143\u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306bLagoon\u304c\u4f7f\u7528\u3059\u308b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u306e\u4f8b\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

      Lagoon\u306f\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30d0\u30b1\u30c3\u30c8\u5185\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u7f72\u540d\u6e08\u307fURL \u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u3001S3\u30d0\u30b1\u30c3\u30c8\u3067\u306f\u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      S3\u30d0\u30b1\u30c3\u30c8 example-restore-bucket \u306e\u307f\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308b\u3088\u3046\u306b\u4f5c\u6210\u3067\u304d\u308b AWS IAM \u30dd\u30ea\u30b7\u30fc\u306e\u4f8b\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002

      aws_iam_restore_policy.json
      {\n\"Version\": \"2012-10-17\",\n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"s3:GetBucketLocation\",\n\"s3:ListBucket\"\n],\n\"Resource\": [\n\"arn:aws:s3:::example-restore-bucket\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:GetObjectVersion\",\n\"s3:GetBucketLocation\",\n\"s3:PutObjectAcl\"\n],\n\"Resource\": [\n\"arn:aws:s3:::example-restore-bucket/*\"\n]\n}\n]\n}\n

      \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u5f37\u5316\u3068\u30b9\u30c8\u30ec\u30fc\u30b8\u30b3\u30b9\u30c8\u524a\u6e1b\u306e\u305f\u3081\u306b\u3001\u8a2d\u5b9a\u3055\u308c\u305f\u30e9\u30a4\u30d5\u30bf\u30a4\u30e0\u5f8c\u306b\u5fa9\u5143\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u524a\u9664\u3059\u308b(\u4f8b\u3048\u3070\u30017\u65e5\u9593)\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Lagoon\u306f\u3053\u306e\u30b7\u30ca\u30ea\u30aa\u3092\u3046\u307e\u304f\u51e6\u7406\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u5fa9\u5143\u3055\u308c\u305f\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u518d\u4f5c\u6210\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/feature-flags/","title":"\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d5\u30e9\u30b0","text":"

      Lagoon\u306e\u4e00\u90e8\u306e\u6a5f\u80fd\u306f\u3001\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d5\u30e9\u30b0\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u5236\u5fa1\u3067\u304d\u307e\u3059\u3002 \u3053\u308c\u306f\u3001\u65b0\u3057\u3044\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u6a5f\u80fd\u3092\u5236\u5fa1\u3055\u308c\u305f\u65b9\u6cd5\u3067\u5c55\u958b\u3059\u308b\u305f\u3081\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u7ba1\u7406\u8005\u3092\u652f\u63f4\u3059\u308b\u3088\u3046\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/feature-flags/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u4ee5\u4e0b\u306e\u74b0\u5883\u5909\u6570\u306f\u3001\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d5\u30e9\u30b0\u3092\u5207\u308a\u66ff\u3048\u308b\u305f\u3081\u306b\u74b0\u5883\u307e\u305f\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u74b0\u5883\u5909\u6570\u540d \u30a2\u30af\u30c6\u30a3\u30d6\u30b9\u30b3\u30fc\u30d7 \u5c0e\u5165\u3055\u308c\u305f\u30d0\u30fc\u30b8\u30e7\u30f3 \u524a\u9664\u3055\u308c\u305f\u30d0\u30fc\u30b8\u30e7\u30f3 \u30c7\u30d5\u30a9\u30eb\u30c8\u5024 \u8aac\u660e LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD global 2.2.0 - \u7121\u52b9 \u3053\u306e\u74b0\u5883\u307e\u305f\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30dd\u30c3\u30c9\u306b\u975eroot\u30dd\u30c3\u30c9\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001enabled\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u30d5\u30e9\u30b0\u306f\u6700\u7d42\u7684\u306b\u5ec3\u6b62\u3055\u308c\u3001\u305d\u306e\u6642\u70b9\u3067\u975eroot\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u304c\u5f37\u5236\u3055\u308c\u307e\u3059\u3002 LAGOON_FEATURE_FLAG_ISOLATION_NETWORK_POLICY global 2.2.0 - \u7121\u52b9 \u30c7\u30d7\u30ed\u30a4\u6642\u306b\u5404\u74b0\u5883\u306b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u540d\u524d\u7a7a\u9593\u5206\u96e2\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30dd\u30ea\u30b7\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3001enabled\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u30d5\u30e9\u30b0\u306f\u6700\u7d42\u7684\u306b\u5ec3\u6b62\u3055\u308c\u3001\u305d\u306e\u6642\u70b9\u3067\u540d\u524d\u7a7a\u9593\u5206\u96e2\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30dd\u30ea\u30b7\u30fc\u304c\u5f37\u5236\u3055\u308c\u307e\u3059\u3002\u6ce8: \u3053\u306e\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3057\u3066\u304b\u3089\u7121\u52b9\u306b\u3059\u308b\u3068\u3001\u65e2\u5b58\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306f\u524a\u9664\u3055\u308c\u307e\u305b\u3093\u3002 \u4ee5\u524d\u306e\u30c7\u30d7\u30ed\u30a4\u304b\u3089\u306e\u30dd\u30ea\u30b7\u30fc\u524a\u9664\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u3089\u306f\u624b\u52d5\u3067\u524a\u9664\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002"},{"location":"ja/concepts-advanced/feature-flags/#_2","title":"\u30af\u30e9\u30b9\u30bf\u30fc\u30ec\u30d9\u30eb\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb","text":"

      \u6a5f\u80fd\u30d5\u30e9\u30b0\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u30ec\u30d9\u30eb\u3067\u3082\u5236\u5fa1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u308blagoon-build-deploy\u30c1\u30e3\u30fc\u30c8\u304c\u3042\u308a\u307e\u3059\u3002 \u5404\u6a5f\u80fd\u30d5\u30e9\u30b0\u306b\u306f\u3001\u8a2d\u5b9a\u3067\u304d\u308b\u5024\u304cdefault\u3068force\u306e2\u7a2e\u985e\u3042\u308a\u307e\u3059\u3002

      • default\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u74b0\u5883\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u5236\u5fa1\u3057\u307e\u3059\u304c\u3001\u4e0a\u8a18\u306e\u74b0\u5883\u5909\u6570\u306b\u3088\u3063\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u307e\u305f\u306f\u74b0\u5883\u30ec\u30d9\u30eb\u3067\u4e0a\u66f8\u304d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
      • force\u3082\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u74b0\u5883\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u5236\u5fa1\u3057\u307e\u3059\u304c\u3001\u4e0a\u8a18\u306e\u74b0\u5883\u5909\u6570\u306b\u3088\u3063\u3066\u4e0a\u66f8\u304d\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
      "},{"location":"ja/concepts-advanced/service-types/","title":"\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7","text":"

      \u4ee5\u4e0b\u306b\u793a\u3059\u306e\u306f\u3001docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u5185\u306e lagoon.type \u3092\u901a\u3058\u3066\u5b9a\u7fa9\u3067\u304d\u308b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3067\u3059\u3002

      \u8b66\u544a

      \u4e00\u5ea6 lagoon.type \u304c\u5b9a\u7fa9\u3055\u308c\u3001\u74b0\u5883\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3068\u3001\u7570\u306a\u308b\u30bf\u30a4\u30d7\u306b\u5909\u66f4\u3059\u308b\u3053\u3068\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u304a\u3089\u305a\u3001\u74b0\u5883\u304c\u58ca\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/service-types/#basic","title":"basic","text":"

      \u57fa\u672c\u7684\u306a\u30b3\u30f3\u30c6\u30ca\u3067\u3001\u65e2\u5b58\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u306a\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u307b\u3068\u3093\u3069\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30dd\u30fc\u30c8\u306f\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3057\u3066\u5909\u66f4\u3067\u304d\u307e\u3059\u3002\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u304c\u5fc5\u8981\u3067\u306a\u3044\u5834\u5408(\u4f8b:\u5185\u90e8\u5411\u3051\u30b5\u30fc\u30d3\u30b9\u306e\u5834\u5408)\u3001docker-compose.yml \u5185\u3067 lagoon.autogeneratedroute: false \u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3000\u3067TCP\u63a5\u7d9a 3000 \u306f\u3044 \u3044\u3044\u3048 lagoon.service.port, lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#basic-persistent","title":"basic-persistent","text":"

      basic\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3057\u3001lagoon.persistent \u3092\u3067\u30de\u30a6\u30f3\u30c8\u306e\u4f4d\u5024\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3000\u3067TCP\u63a5\u7d9a 3000 \u306f\u3044 \u306f\u3044 lagoon.service.port, lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.persistent.class"},{"location":"ja/concepts-advanced/service-types/#cli","title":"cli","text":"

      PHP\u3001Node.js\u306a\u3069\u3001\u4efb\u610f\u306eCLI\u30b3\u30f3\u30c6\u30ca\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002 /var/run/secrets/lagoon/sshkey/ssh-privatekey\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u3066\u3044\u308b\u9867\u5ba2\u306eSSH\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ad\u30fc\u304c\u81ea\u52d5\u7684\u306b\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u305d\u306e\u4ed6\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - \u3044\u3044\u3048 \u3044\u3044\u3048 \u3044\u3044\u3048 -"},{"location":"ja/concepts-advanced/service-types/#cli-persistent","title":"cli-persistent","text":"

      cli\u3068\u540c\u3058\u3067\u3059\u304c\u3001lagoon.persistent.name\u306f\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6301\u3064\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3092\u6307\u5b9a\u3055\u308c\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u5b9a\u7fa9\u3055\u308c\u305flagoon.persistent\u30e9\u30d9\u30eb\u306e\u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u307e\u3059\u3002\u81ea\u8eab\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u305b\u305a\u3001\u5225\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u305f\u3081\u3060\u3051\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u305d\u306e\u4ed6\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - \u3044\u3044\u3048 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.name, lagoon.persistent"},{"location":"ja/concepts-advanced/service-types/#elasticsearch","title":"elasticsearch","text":"

      Elasticsearch\u30b3\u30f3\u30c6\u30ca\u306f\u3001/usr/share/el\u306e\u4e0b\u306b\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002 elasticsearch/data

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf localhost:9200/_cluster/health?local=true \u3067HTTP\u901a\u4fe1 9200 \u306a\u3057 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#kibana","title":"kibana","text":"

      Kibana\u30b3\u30f3\u30c6\u30ca\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 5601\u3067TCP\u63a5\u7d9a 5601 \u306f\u3044 \u306a\u3057 -"},{"location":"ja/concepts-advanced/service-types/#logstash","title":"logstash","text":"

      Logstash\u30b3\u30f3\u30c6\u30ca\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 9600\u3067TCP\u63a5\u7d9a 9600 \u306a\u3057 \u306a\u3057 -"},{"location":"ja/concepts-advanced/service-types/#mariadb","title":"mariadb","text":"

      Lagoon\u306bmariadb-single\u3068mariadb-dbaas\u306e\u3069\u3061\u3089\u304b\u3092\u81ea\u52d5\u7684\u306b\u6c7a\u5b9a\u3055\u305b\u308b\u30e1\u30bf\u30b5\u30fc\u30d3\u30b9\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - - - - -"},{"location":"ja/concepts-advanced/service-types/#mariadb-single","title":"mariadb-single","text":"

      MariaDB\u30b3\u30f3\u30c6\u30ca\u3002/lagoon/mysql-backup.sh 127.0.0.1\u3092\u5b9f\u884c\u3059\u308b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306ecron\u30b8\u30e7\u30d6\u309224\u6642\u9593\u3054\u3068\u306b\u4f5c\u6210\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3306\u3067TCP\u63a5\u7d9a 3306 \u306a\u3057 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#mariadb-dbaas","title":"mariadb-dbaas","text":"

      DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u3092\u4ecb\u3057\u305f\u5171\u6709MariaDB\u30b5\u30fc\u30d0\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf \u4e0d\u8981 3306 \u306a\u3057 - -"},{"location":"ja/concepts-advanced/service-types/#mongo","title":"mongo","text":"

      Lagoon\u306bmongo-single\u3068mongo-dbaas\u306e\u3069\u3061\u3089\u304b\u3092\u81ea\u52d5\u7684\u306b\u6c7a\u5b9a\u3055\u305b\u308b\u30e1\u30bf\u30b5\u30fc\u30d3\u30b9\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - - - - -"},{"location":"ja/concepts-advanced/service-types/#mongo-single","title":"mongo-single","text":"

      MongoDB\u30b3\u30f3\u30c6\u30ca\u3001/data/db\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u6700\u5c0f1GB\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 27017\u3067TCP\u63a5\u7d9a 27017 \u306a\u3057 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#mongo-dbaas","title":"mongo-dbaas","text":"

      DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u3092\u4ecb\u3057\u305f\u5171\u6709MongoDB\u30b5\u30fc\u30d0\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf \u4e0d\u8981 27017 \u3044\u3044\u3048 - -"},{"location":"ja/concepts-advanced/service-types/#nginx","title":"nginx","text":"

      NGINX\u30b3\u30f3\u30c6\u30ca\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf localhost:50000/nginx_status 8080 \u306f\u3044 \u3044\u3044\u3048 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#nginx-php","title":"nginx-php","text":"

      nginx\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u8ffd\u52a0\u3067php\u30b3\u30f3\u30c6\u30ca\u304c\u3042\u308a\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf NGINX: localhost:50000/nginx_status, PHP: /usr/sbin/check_fcgi 8080 \u306f\u3044 \u3044\u3044\u3048 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#nginx-php-persistent","title":"nginx-php-persistent","text":"

      nginx-php\u3068\u540c\u69d8\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3057\u3001lagoon.persistent \u3067\u30de\u30a6\u30f3\u30c8\u306e\u4f4d\u7f6e\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf NGINX: localhost:50000/nginx_status, PHP: /usr/sbin/check_fcgi http\u306e8080 \u306f\u3044 \u306f\u3044 lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.persistent.class"},{"location":"ja/concepts-advanced/service-types/#node","title":"node","text":"

      Node.js \u30b3\u30f3\u30c6\u30ca\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3000\u3067TCP\u63a5\u7d9a 3000 \u306f\u3044 \u306a\u3057 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#node-persistent","title":"node-persistent","text":"

      node\u3068\u540c\u69d8\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3057\u3001lagoon.persistent\u3067\u30de\u30a6\u30f3\u30c8\u306e\u4f4d\u7f6e\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3000\u3067TCP\u63a5\u7d9a 3000 \u306f\u3044 \u306f\u3044 lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.persistent.class"},{"location":"ja/concepts-advanced/service-types/#none","title":"none","text":"

      Lagoon\u306b\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b8c\u5168\u306b\u7121\u8996\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - - - - -"},{"location":"ja/concepts-advanced/service-types/#opensearch","title":"opensearch","text":"

      OpenSearch\u30b3\u30f3\u30c6\u30ca\u3001/usr/share/opensearch/data\u4ee5\u4e0b\u306b\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf localhost:920\u3067\u306eHTTP 0/_cluster/health?local=true| 9200 | \u3044\u3044\u3048 | \u306f\u3044 |lagoon.persistent.size`"},{"location":"ja/concepts-advanced/service-types/#postgres","title":"postgres","text":"

      Lagoon\u306bpostgres-single\u3068postgres-dbaas\u306e\u3069\u3061\u3089\u304b\u3092\u81ea\u52d5\u7684\u306b\u6c7a\u5b9a\u306b\u6c7a\u5b9a\u3055\u305b\u308b\u30e1\u30bf\u30b5\u30fc\u30d3\u30b9\u3002

      \u5065\u5eb7\u30c1\u30a7\u30c3\u30af \u9732\u51fa\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - - - - -"},{"location":"ja/concepts-advanced/service-types/#postgres-single","title":"postgres-single","text":"

      Postgres\u30b3\u30f3\u30c6\u30ca\u3002\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u7528\u306ecron\u30b8\u30e7\u30d6\u3092\u4f5c\u6210\u3057\u300124\u6642\u9593\u3054\u3068\u306b/lagoon/postgres-backup.sh localhost\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

      \u5065\u5eb7\u30c1\u30a7\u30c3\u30af \u9732\u51fa\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 5432\u3067TCP\u63a5\u7d9a 5432 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#postgres-dbaas","title":"postgres-dbaas","text":"

      DBaaS Operator\u7d4c\u7531\u3067\u5171\u6709PostgreSQL\u30b5\u30fc\u30d0\u3092\u5229\u7528\u3057\u307e\u3059\u3002

      \u5065\u5eb7\u30c1\u30a7\u30c3\u30af \u9732\u51fa\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf \u4e0d\u8981 5432 \u3044\u3044\u3048 - -"},{"location":"ja/concepts-advanced/service-types/#python","title":"python","text":"

      Python\u30b3\u30f3\u30c6\u30ca\u3002\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      \u5065\u5eb7\u30c1\u30a7\u30c3\u30af \u9732\u51fa\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 8800\u3067HTTP\u63a5\u7d9a 8800 \u306f\u3044 \u3044\u3044\u3048 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#python-persistent","title":"python-persistent","text":"

      \u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5099\u3048\u305fPython\u30b3\u30f3\u30c6\u30ca\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 8800\u3067HTTP\u63a5\u7d9a 8800 \u306f\u3044 \u306f\u3044 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#redis","title":"redis","text":"

      Redis\u30b3\u30f3\u30c6\u30ca\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 6379\u3067TCP\u63a5\u7d9a 6379 \u3044\u3044\u3048 \u3044\u3044\u3048 -"},{"location":"ja/concepts-advanced/service-types/#redis-persistent","title":"redis-persistent","text":"

      /data\u4ee5\u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u81ea\u52d5\u751f\u6210\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5099\u3048\u305fRedis\u30b3\u30f3\u30c6\u30ca\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 6379\u3067TCP\u63a5\u7d9a 6379 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#solr","title":"solr","text":"

      /var/solr\u4ee5\u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u81ea\u52d5\u751f\u6210\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5099\u3048\u305fSolr\u30b3\u30f3\u30c6\u30ca\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 8983\u3067TCP\u63a5\u7d9a 8983 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#varnish","title":"varnish","text":"

      Varnish\u30b3\u30f3\u30c6\u30ca\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf HTTP\u30ea\u30af\u30a8\u30b9\u30c8 localhost:8080/varnish_status 8080 \u306f\u3044 \u3044\u3044\u3048 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#varnish-persistent","title":"varnish-persistent","text":"

      /var/cache/varnish \u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6301\u3064Varnish\u30b3\u30f3\u30c6\u30ca\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf HTTP\u30ea\u30af\u30a8\u30b9\u30c8 localhost:8080/varnish_status 8080 \u306f\u3044 \u306f\u3044 lagoon.autogeneratedroute, lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#worker","title":"worker","text":"

      \u4efb\u610f\u306e\u7a2e\u985e\u306e\u30ef\u30fc\u30ab\u30fc\u30b3\u30f3\u30c6\u30ca(\u30ad\u30e5\u30fc\u30ef\u30fc\u30ab\u30fc\u306a\u3069)\u3067\u3001\u516c\u958b\u30b5\u30fc\u30d3\u30b9\u30dd\u30fc\u30c8\u304c\u306a\u3044\u5834\u5408\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - \u3044\u3044\u3048 \u3044\u3044\u3048 \u3044\u3044\u3048 -"},{"location":"ja/concepts-advanced/service-types/#worker-persistent","title":"worker-persistent","text":"

      worker\u3068\u540c\u3058\u3067\u3059\u304c\u3001lagoon.persistent.name\u304c\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6301\u3064\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3092\u4e0e\u3048\u3089\u308c\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u3001\u5b9a\u7fa9\u3055\u308c\u305flagoon.persistent\u30e9\u30d9\u30eb\u306e\u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u81ea\u8eab\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u305f\u3081\u306b\u306e\u307f\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u305d\u306e\u4ed6\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - \u3044\u3044\u3048 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.name, lagoon.persistent"},{"location":"ja/concepts-advanced/workflows/","title":"\u30ef\u30fc\u30af\u30d5\u30ed\u30fc","text":"

      Lagoon\u306f\u3001\u53ef\u80fd\u306a\u9650\u308a\u591a\u69d8\u306a\u958b\u767a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001\u30c1\u30fc\u30e0\u306b\u5bfe\u3057\u3066\u7279\u5b9a\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5f37\u5236\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u5404\u958b\u767a\u30c1\u30fc\u30e0\u304c\u81ea\u5206\u305f\u3061\u306e\u30b3\u30fc\u30c9\u3092\u3069\u306e\u3088\u3046\u306b\u958b\u767a\u3057\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u304b\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/workflows/#fixed-branches","title":"\u56fa\u5b9a\u30d6\u30e9\u30f3\u30c1","text":"

      \u6700\u3082\u76f4\u63a5\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u56fa\u5b9a\u30d6\u30e9\u30f3\u30c1\u306b\u57fa\u3065\u3044\u305f\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u3059:

      Lagoon\u304c\u30c7\u30d7\u30ed\u30a4\u3059\u3079\u304d\u30d6\u30e9\u30f3\u30c1(\u4f8b\u3048\u3070 develop\u3001staging\u3001main\u306a\u3069\u3001\u3053\u308c\u3089\u306f\u6b63\u898f\u8868\u73fe\u3067 ^(develop|staging|main)$\u3068\u306a\u308a\u307e\u3059)\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u305d\u308c\u3067\u5b8c\u4e86\u3067\u3059\uff01

      \u65b0\u3057\u3044\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u8a2d\u5b9a\u3057\u305f\u30d6\u30e9\u30f3\u30c1\u306b\u305d\u308c\u3089\u3092\u30de\u30fc\u30b8\u3057\u3066\u30d7\u30c3\u30b7\u30e5\u3057\u3001Lagoon\u304c\u305d\u306e\u6a5f\u80fd\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u554f\u984c\u304c\u306a\u3051\u308c\u3070\u3001\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u3092\u3042\u306a\u305f\u306e\u672c\u756a\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3057\u3066\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/workflows/#feature-branches","title":"\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1","text":"

      \u3082\u3046\u5c11\u3057\u9ad8\u5ea6\u306a\u3082\u306e\u306b\u306a\u308b\u3068\u3001\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1\u304c\u3042\u308a\u307e\u3059\u3002Lagoon\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u3092\u6b63\u898f\u8868\u73fe\u3067\u5b9a\u7fa9\u3059\u308b\u80fd\u529b\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u4e0a\u8a18\u306e\u6b63\u898f\u8868\u73fe\u3092\u3053\u306e\u3088\u3046\u306b\u62e1\u5f35\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:^feature\\/|^(staging|main)$\u3002\u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u306ffeature/\u3067\u59cb\u307e\u308b\u3059\u3079\u3066\u306e\u30d6\u30e9\u30f3\u30c1\u3001\u304a\u3088\u3073staging\u3068main\u3068\u3044\u3046\u540d\u524d\u306e\u30d6\u30e9\u30f3\u30c1\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\u79c1\u305f\u3061\u306e\u958b\u767a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093:

      • \u65b0\u3057\u3044\u30d6\u30e9\u30f3\u30c1\u3092\u4f5c\u6210\u3059\u308b main\u304b\u3089feature/myfeature\u3092\u547c\u3073\u51fa\u3057\u3001feature/myfeature\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
      • Lagoon\u306f\u3001feature/myfeature\u30d6\u30e9\u30f3\u30c1\u3092\u65b0\u3057\u3044\u74b0\u5883\u3068\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u3057\u3001\u4ed6\u306e\u6a5f\u80fd\u3068\u306f\u72ec\u7acb\u3057\u3066\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002
      • feature/myfeature\u3092main\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3059\u308b\u3068\u3001\u305d\u308c\u306f\u3042\u306a\u305f\u306e\u672c\u756a\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002

      \u3082\u3057\u3054\u5e0c\u671b\u3067\u3042\u308c\u3070\u3001feature/myfeature\u3084\u4ed6\u306e\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1\u3092\u6700\u521d\u306bstaging\u306b\u30de\u30fc\u30b8\u3057\u3066\u3001\u8907\u6570\u306e\u6a5f\u80fd\u3092\u4e00\u7dd2\u306b\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001main\u306b\u30de\u30fc\u30b8\u3067\u304d\u307e\u3059\u3002

      \u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u6574\u7406\u3068\u30af\u30ea\u30fc\u30f3\u3055\u304c\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002\u5404\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1\u306f\u81ea\u8eab\u306eLagoon\u74b0\u5883\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u3001\u975e\u5e38\u306b\u901f\u304f\u5927\u91cf\u306e\u74b0\u5883\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u305d\u308c\u3089\u5168\u3066\u304c\u30ea\u30bd\u30fc\u30b9\u3092\u6d88\u8cbb\u3057\u307e\u3059\u3002\u672a\u4f7f\u7528\u306e\u30d6\u30e9\u30f3\u30c1\u306f\u5fc5\u305a\u30de\u30fc\u30b8\u3059\u308b\u304b\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u3053\u306e\u305f\u3081\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u8003\u3048\u308b\u3053\u3068\u304c\u7406\u306b\u304b\u306a\u3063\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      "},{"location":"ja/concepts-advanced/workflows/#pull-requests","title":"\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8","text":"

      \u3055\u3089\u306b\u9ad8\u5ea6\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u3088\u308b\u3082\u306e\u3067\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8(\u307e\u305f\u306f\u30de\u30fc\u30b8\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u3082\u547c\u3070\u308c\u307e\u3059)\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308bGit\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u30a2\u30a4\u30c7\u30a2\u306f\u3001\u30d3\u30eb\u30c9\u4e2d\u306bLagoon\u304c\u30de\u30fc\u30b8\u3092\u884c\u3063\u3066\u304f\u308c\u308b\u306e\u3067\u3001\u5b9f\u969b\u306b\u30de\u30fc\u30b8\u3059\u308b\u5fc5\u8981\u306f\u306a\u304f\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u30d6\u30e9\u30f3\u30c1\u3068\u4e00\u7dd2\u306b\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3068\u3044\u3046\u30a2\u30a4\u30c7\u30a2\u306e\u80cc\u666f\u306b\u3042\u308a\u307e\u3059\u3002

      \u79c1\u305f\u3061\u306e\u4f8b\u3067\u306f\u3001Lagoon\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u30d6\u30e9\u30f3\u30c1^(staging|main)$\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092.* (\u3059\u3079\u3066\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b)\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u305b\u307e\u3059\u3002 \u3053\u308c\u3067\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059:

      1. main\u304b\u3089\u65b0\u3057\u3044\u30d6\u30e9\u30f3\u30c1feature/myfeature\u3092\u4f5c\u6210\u3057\u3001feature/myfeature\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059(\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u30d6\u30e9\u30f3\u30c1\u306fstaging\u3068main\u306e\u307f\u306e\u305f\u3081\u3001\u4eca\u306f\u30c7\u30d7\u30ed\u30a4\u306f\u884c\u308f\u308c\u307e\u305b\u3093)\u3002
      2. \u3042\u306a\u305f\u306eGit\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3067feature/myfeature\u304b\u3089main\u3078\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
      3. Lagoon\u306f\u4eca\u3001feature/myfeature\u30d6\u30e9\u30f3\u30c1\u3092main\u30d6\u30e9\u30f3\u30c1\u306e\u4e0a\u306b\u30de\u30fc\u30b8\u3057\u3001\u305d\u306e\u7d50\u679c\u306e\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002
      4. \u3053\u308c\u3067\u3001feature/myfeature\u30d6\u30e9\u30f3\u30c1\u306e\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002\u307e\u308b\u3067main\u306b\u30de\u30fc\u30b8\u3055\u308c\u305f\u304b\u306e\u3088\u3046\u306b\u3001feature/myfeature\u30d6\u30e9\u30f3\u30c1\u3092\u4f5c\u6210\u3057\u3066\u304b\u3089main\u3067\u8d77\u3053\u3063\u305f\u3059\u3079\u3066\u306e\u5909\u66f4\u304c\u305d\u3053\u306b\u3042\u308a\u307e\u3059\u306e\u3067\u3001main\u30d6\u30e9\u30f3\u30c1\u306e\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u3068\u5fc3\u914d\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002
        1. \u30de\u30fc\u30b8\u306e\u7af6\u5408\u304c\u3042\u308b\u5834\u5408\u3001\u30d3\u30eb\u30c9\u304c\u5931\u6557\u3057\u3001Lagoon\u306f\u505c\u6b62\u3057\u3066\u3042\u306a\u305f\u306b\u901a\u77e5\u3057\u307e\u3059\u3002
      5. \u3042\u306a\u305f\u304c\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30c6\u30b9\u30c8\u3092\u7d42\u3048\u305f\u5f8c \u30ea\u30af\u30a8\u30b9\u30c8\u30d6\u30e9\u30f3\u30c1\u3067\u306f\u3001Git\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306b\u623b\u3063\u3066\u5b9f\u969b\u306b\u30b3\u30fc\u30c9\u3092main\u306b\u30de\u30fc\u30b8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001main\u306e\u30c7\u30d7\u30ed\u30a4\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u307e\u3059\u3002
      6. \u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30de\u30fc\u30b8\u3055\u308c\u308b\u3068\u3001\u81ea\u52d5\u7684\u306b\u30af\u30ed\u30fc\u30ba\u3055\u308c\u3001Lagoon\u306f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u74b0\u5883\u3092\u81ea\u52d5\u7684\u306b\u524a\u9664\u3057\u307e\u3059\u3002

      \u4e00\u90e8\u306e\u30c1\u30fc\u30e0\u3067\u306f\u3001\u5171\u6709\u306estaging\u30d6\u30e9\u30f3\u30c1\u306b\u5bfe\u3057\u3066\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f5c\u6210\u3057\u3001\u305d\u306e\u5f8c\u3001\u5225\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4ecb\u3057\u3066staging\u30d6\u30e9\u30f3\u30c1\u3092main\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3059\u308b\u3053\u3068\u3092\u9078\u629e\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u3001\u4f7f\u7528\u3057\u3066\u3044\u308bGit\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u7a2e\u985e\u306b\u3088\u308a\u307e\u3059\u3002

      \u307e\u305f\u3001Lagoon\u3067\u306f\u3001\u30bf\u30a4\u30c8\u30eb\u306b\u7279\u5b9a\u306e\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308b\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u307f\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b63\u898f\u8868\u73fe\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f[BUILD]\u306f\u3001\u30bf\u30a4\u30c8\u30eb\u304c[BUILD] My Pull Request\u306e\u3088\u3046\u306a\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u307f\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001\u30bf\u30a4\u30c8\u30eb\u304cMy other Pull Request\u306e\u3088\u3046\u306a\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u81ea\u52d5\u7684\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u74b0\u5883\u306e\u6570\u3092\u5c11\u306a\u304f\u4fdd\u3064\u3053\u3068\u304c\u3067\u304d\u3001\u307e\u3060\u74b0\u5883\u304c\u5fc5\u8981\u3067\u306a\u3044\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4fdd\u6301\u3059\u308b\u3053\u3068\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-advanced/workflows/#automatic-database-sync-for-pull-requests","title":"\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u81ea\u52d5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540c\u671f","text":"

      \u81ea\u52d5\u7684\u306a\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u74b0\u5883\u306f\u7d20\u6674\u3089\u3057\u3044\u3053\u3068\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u305d\u308c\u3089\u306e\u74b0\u5883\u304c\u4f5c\u6210\u3055\u308c\u305f\u3068\u304d\u306b\u5225\u306e\u74b0\u5883\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u540c\u671f\u3055\u308c\u308b\u3068\u4fbf\u5229\u3060\u308d\u3046\u3068\u3082\u601d\u3044\u307e\u3059\u3002Lagoon\u306f\u305d\u308c\u3092\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff01

      \u6b21\u306e\u4f8b\u306f\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u74b0\u5883\u306e\u6700\u521d\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3067\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u540c\u671f\u3057\u307e\u3059:

      .lagoon.yml
      tasks:\npost-rollout:\n- run:\nname: IF no Drupal installed & Pullrequest = Sync database from staging\ncommand: |\nif [[ -n ${LAGOON_PR_BASE_BRANCH} ]] && tables=$(drush sqlq 'show tables;') && [ -z \"$tables\" ]; then\ndrush -y sql-sync @staging default\nfi\nservice: cli\nshell: bash\n
      "},{"location":"ja/concepts-advanced/workflows/#promotion","title":"\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3","text":"

      \u74b0\u5883\u306b\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u5225\u306e\u65b9\u6cd5\u306f\u3001\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u3059\u3002

      \u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u8003\u3048\u65b9\u306f\u3001\u4f8b\u3068\u3057\u3066\u3053\u3053\u304b\u3089\u6765\u3066\u3044\u307e\u3059\u3002

      staging\u30d6\u30e9\u30f3\u30c1\u3092main\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3057\u3001main\u306b\u5909\u66f4\u304c\u306a\u3051\u308c\u3070\u3001\u3064\u307e\u308amain\u3068staging\u304cGit\u3067\u307e\u3063\u305f\u304f\u540c\u3058\u30b3\u30fc\u30c9\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3067\u3082\u3001\u7d50\u679c\u3068\u3057\u3066\u5f97\u3089\u308c\u308bDocker\u30a4\u30e1\u30fc\u30b8\u304c\u308f\u305a\u304b\u306b\u7570\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u6700\u5f8c\u306estaging\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3068\u73fe\u5728\u306emain\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u9593\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u4e0a\u6d41Docker\u30a4\u30e1\u30fc\u30b8\u304c\u5909\u66f4\u3055\u308c\u305f\u304b\u3001\u307e\u305f\u306f\u3055\u307e\u3056\u307e\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306b\u3088\u3063\u3066\u30ed\u30fc\u30c9\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u304c\u5909\u66f4\u3055\u308c\u305f\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3067\u3059\u3002\u3053\u308c\u306f\u975e\u5e38\u306b\u5c0f\u3055\u3044\u78ba\u7387\u3067\u3059\u304c\u5b58\u5728\u3057\u307e\u3059\u3002

      \u305d\u306e\u305f\u3081\u3001 \u3053\u306e\u72b6\u6cc1\u3067\u306fLagoon\u306f\u4e00\u3064\u306e\u74b0\u5883\u304b\u3089\u5225\u306e\u74b0\u5883\u3078\u306eLagoon\u30a4\u30e1\u30fc\u30b8\u306e\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u3068\u3044\u3046\u6982\u5ff5\u3092\u7406\u89e3\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u57fa\u672c\u7684\u306b\u3001\u3059\u3067\u306b\u69cb\u7bc9\u3055\u308c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305fDocker\u30a4\u30e1\u30fc\u30b8\u3092\u4e00\u3064\u306e\u74b0\u5883\u304b\u3089\u53d6\u308a\u51fa\u3057\u3001\u305d\u308c\u3089\u306e\u307e\u3063\u305f\u304f\u540c\u3058Docker\u30a4\u30e1\u30fc\u30b8\u3092\u5225\u306e\u74b0\u5883\u3067\u4f7f\u7528\u3059\u308b\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

      \u79c1\u305f\u3061\u306e\u4f8b\u3067\u306f\u3001main\u74b0\u5883\u304b\u3089production\u74b0\u5883\u3078Docker\u30a4\u30e1\u30fc\u30b8\u3092\u30d7\u30ed\u30e2\u30fc\u30c8\u3057\u305f\u3044\u3068\u601d\u3063\u3066\u3044\u307e\u3059:

      • \u6700\u521d\u306b\u3001main\u3068\u3044\u3046\u540d\u524d\u306e\u901a\u5e38\u306e\u30c7\u30d7\u30ed\u30a4\u74b0\u5883\u304c\u5fc5\u8981\u3067\u3059\u3002\u74b0\u5883\u304c\u6b63\u5e38\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      • \u307e\u305f\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306bproduction\u3068\u3044\u3046\u540d\u524d\u306e\u30d6\u30e9\u30f3\u30c1\u304c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u304c\u3042\u308b\u3068\u3001\u4eba\u3005\u304c\u3053\u306e\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u306a\u3069\u3001\u5947\u5999\u306a\u6df7\u4e71\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
      • \u6b21\u306b\u3001lagoon cli\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u307e\u3059:
      \u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b
      lagoon deploy promote --project=\"myproject\" --source=\"main\" --destination=\"production\"\n

      \u3053\u308c\u306f\u3001\u30bd\u30fc\u30b9main\u304b\u3089\u30c7\u30b9\u30c6\u30a3\u30cd\u30fc\u30b7\u30e7\u30f3production\u3078\u306e\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u3092\u5e0c\u671b\u3059\u308b\u3053\u3068\u3092Lagoon\u306b\u4f1d\u3048\u307e\u3059\u3002

      Lagoon\u306f\u6b21\u306e\u3053\u3068\u3092\u884c\u3044\u307e\u3059:

      • .lagoon.yml\u3068docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30fc\u30c9\u3059\u308b\u305f\u3081\u306b\u3001Git\u30d6\u30e9\u30f3\u30c1main\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059(Lagoon\u304c \u5b8c\u5168\u306b\u52d5\u4f5c\u3059\u308b\u306b\u306f\u3053\u308c\u3089\u304c\u307e\u3060\u5fc5\u8981\u3067\u3059)\u3002
      • docker-compose.yml\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u3001\u3059\u3079\u3066\u306eKubernetes/OpenShift\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u304c\u3001\u74b0\u5883\u5909\u6570\u3068\u3057\u3066LAGOON_GIT_BRANCH=production\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
      • main\u74b0\u5883\u304b\u3089\u6700\u65b0\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30b3\u30d4\u30fc\u3057\u3001\u305d\u308c\u3089\u3092\u4f7f\u7528\u3057\u307e\u3059(\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3057\u305f\u308a\u3001\u4e0a\u6d41\u304b\u3089\u30bf\u30b0\u4ed8\u3051\u3057\u305f\u308a\u3059\u308b\u4ee3\u308f\u308a\u306b)\u3002
      • \u901a\u5e38\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u3088\u3046\u306b\u3001\u3059\u3079\u3066\u306e\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

      \u4ed6\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3068\u540c\u69d8\u306b\u3001\u6210\u529f\u307e\u305f\u306f\u5931\u6557\u306e\u901a\u77e5\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/","title":"Lagoon\u306e\u57fa\u672c\u7684\u306a\u6982\u5ff5","text":"

      \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Lagoon\u306e\u57fa\u672c\u7684\u306a\u6982\u5ff5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u3059\u3067\u306b\u3053\u308c\u3089\u306b\u3064\u3044\u3066\u7406\u89e3\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001Lagoon\u306e\u9ad8\u5ea6\u306a\u6982\u5ff5\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002

      \u3082\u3057\u52a9\u3051\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001\u79c1\u305f\u3061\u306eDiscord\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3084\u30e1\u30f3\u30c6\u30ca\u30fc\u3078\u3054\u9023\u7d61\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/","title":"\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30bb\u30b9","text":"

      \u3053\u306e\u6587\u66f8\u3067\u306f\u3001Lagoon\u306e\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u4e2d\u306b\u5b9f\u969b\u306b\u4f55\u304c\u8d77\u3053\u308b\u304b\u3092\u8aac\u660e\u3057\u307e\u3059\u3002\u5b9f\u969b\u306e\u30d7\u30ed\u30bb\u30b9\u304b\u3089\u5927\u5e45\u306b\u5358\u7d14\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001Lagoon\u304c\u65b0\u3057\u3044\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3073\u306b\u4f55\u304c\u884c\u308f\u308c\u3066\u3044\u308b\u304b\u3092\u7406\u89e3\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002

      \u4ee5\u4e0b\u306e\u30d3\u30c7\u30aa\u3092\u898b\u3066\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d7\u30ed\u30bb\u30b9\u306e\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#1-openshiftkubernetes","title":"1. \u74b0\u5883\u306e\u305f\u3081\u306eOpenShift\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/Kubernetes\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306e\u8a2d\u5b9a","text":"

      \u307e\u305a\u3001Lagoon\u306f\u6307\u5b9a\u3055\u308c\u305f\u74b0\u5883\u306eOpenShift\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/Kubernetes\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u304c\u5b58\u5728\u3057\u3066\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u5fc5\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u3001\u74b0\u5883\u5909\u6570\u3092lagoon-env\u3068\u3044\u3046ConfigMap\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u74b0\u5883\u306e\u30bf\u30a4\u30d7\u3084\u540d\u524d\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u306a\u3069\u306e\u60c5\u5831\u3067\u6e80\u305f\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#2-git","title":"2. Git\u306e\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3068\u30de\u30fc\u30b8","text":"

      \u6b21\u306b\u3001Lagoon\u306fGit\u304b\u3089\u30b3\u30fc\u30c9\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002.lagoon.yml\u3001docker-compose.yml\u3001\u304a\u3088\u3073.env\u3092\u8aad\u307f\u53d6\u308b\u305f\u3081\u3060\u3051\u3067\u306a\u304f\u3001Docker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306b\u3082\u3053\u308c\u304c\u5fc5\u8981\u3067\u3059\u3002

      \u6ce8\u610f\u70b9\u3068\u3057\u3066\u3001Lagoon\u306f\u30d6\u30e9\u30f3\u30c1/PR\u304cLagoon\u3067\u8a2d\u5b9a\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306e\u6b63\u898f\u8868\u73fe\u3068\u4e00\u81f4\u3059\u308b\u5834\u5408\u306b\u306e\u307f\u3001\u3053\u308c\u3089\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u3069\u306e\u3088\u3046\u306b\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u305f\u304b\u306b\u57fa\u3065\u3044\u3066\u3001\u7570\u306a\u308b\u3053\u3068\u304c\u8d77\u3053\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#webhook","title":"\u30d6\u30e9\u30f3\u30c1Webhook\u30d7\u30c3\u30b7\u30e5","text":"

      \u30c7\u30d7\u30ed\u30a4\u304cGit webhook\u7d4c\u7531\u3067\u81ea\u52d5\u7684\u306b\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u3001\u5358\u4e00\u306e\u30d6\u30e9\u30f3\u30c1\u5411\u3051\u3067\u3042\u308b\u5834\u5408\u3001Lagoon\u306fwebhook\u30da\u30a4\u30ed\u30fc\u30c9\u306b\u542b\u307e\u308c\u308bGit SHA\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u305f\u5404Git SHA\u3054\u3068\u306b\u30c7\u30d7\u30ed\u30a4\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#rest","title":"\u30d6\u30e9\u30f3\u30c1REST\u30c8\u30ea\u30ac\u30fc","text":"

      REST API\u7d4c\u7531(UI\u307e\u305f\u306fGraphQL\u7d4c\u7531)\u3067\u624b\u52d5\u3067\u30d6\u30e9\u30f3\u30c1\u30c7\u30d7\u30ed\u30a4\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u3001POST\u30da\u30a4\u30ed\u30fc\u30c9\u3067SHA\u3092\u5b9a\u7fa9\u3057\u306a\u3044\u5834\u5408\u3001Lagoon\u306f\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u6700\u65b0\u306e\u30b3\u30df\u30c3\u30c8\u3092\u5358\u306b\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u3001\u305d\u308c\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#_2","title":"\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8","text":"

      \u30c7\u30d7\u30ed\u30a4\u304c\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8(PR)\u30c7\u30d7\u30ed\u30a4\u3067\u3042\u308b\u5834\u5408\u3001Lagoon\u306f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30d9\u30fc\u30b9\u3068HEAD\u30d6\u30e9\u30f3\u30c1\u304a\u3088\u3073SHA\u3092\u30ed\u30fc\u30c9\u3057\u3001\u6b21\u306e\u3053\u3068\u3092\u884c\u3044\u307e\u3059:

      • PR\u304c\u6307\u3057\u3066\u3044\u308b\u30d6\u30e9\u30f3\u30c1(\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1)\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002
      • PR\u304c\u8d77\u6e90\u3068\u306a\u308b\u30d6\u30e9\u30f3\u30c1(HEAD\u30d6\u30e9\u30f3\u30c1)\u3092\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1\u306e\u4e0a\u306b\u30de\u30fc\u30b8\u3057\u307e\u3059\u3002
      • \u3088\u308a\u5177\u4f53\u7684\u306b\u306f:
        • Lagoon\u306f\u3001Webhook\u3067\u9001\u4fe1\u3055\u308c\u305f\u7279\u5b9a\u306eSHA\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u3066\u30de\u30fc\u30b8\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306eSHA\u306f\u30d6\u30e9\u30f3\u30c1\u30d8\u30c3\u30c9\u3092\u6307\u3057\u3066\u3044\u308b\u5834\u5408\u3082\u3042\u308c\u3070\u3001 \u305d\u3046\u3067\u306a\u3044\u5834\u5408 \u3082\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001GitHub\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u65b0\u3057\u3044\u30d7\u30c3\u30b7\u30e5\u3092\u884c\u3046\u3068\u3001\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1\u306eSHA\u304c\u73fe\u5728\u306e\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1HEAD\u3092\u6307\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

      \u30de\u30fc\u30b8\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u3001Lagoon\u3082\u505c\u6b62\u3057\u3001\u305d\u306e\u3053\u3068\u3092\u304a\u77e5\u3089\u305b\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#3","title":"3. \u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9","text":"

      docker-compose.yml\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u5404\u30b5\u30fc\u30d3\u30b9\u306b\u3064\u3044\u3066\u3001Lagoon\u306f\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u3053\u306e\u6642\u70b9\u3067\u30d3\u30eb\u30c9\u304c\u884c\u308f\u308c\u307e\u3059\u3002\u30d3\u30eb\u30c9\u306e\u9806\u5e8f\u306f\u3001docker-compose.yml\u3067\u306e\u8a2d\u5b9a\u9806\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u306e\u30d3\u30eb\u30c9\u5f15\u6570\u304c\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002

      • LAGOON_GIT_SHA
      • LAGOON_GIT_BRANCH
      • LAGOON_PROJECT
      • LAGOON_BUILD_TYPE ( pullrequest\u3001branch\u3001\u307e\u305f\u306f promote \u306e\u3044\u305a\u308c\u304b)
      • LAGOON_SSH_PRIVATE_KEY - \u30bd\u30fc\u30b9\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308bSSH\u306e\u79d8\u5bc6\u9375\u3067\u3059\u3002\u30d3\u30eb\u30c9\u5f15\u6570\u3092\u5b9f\u969b\u306e\u9375\u306b\u5909\u63db\u3059\u308b\u306b\u306f\u3001RUN /lagoon/entrypoints/05-ssh-key.sh\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u306e\u9375\u306f/home/.ssh/key\u306b\u3042\u308a\u3001SSH\u3068Git\u304c\u81ea\u52d5\u7684\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002\u5b89\u5168\u306e\u305f\u3081\u3001RUN rm /home/.ssh/key\u3092\u4f7f\u7528\u3057\u3066\u9375\u3092\u518d\u5ea6\u524a\u9664\u3057\u307e\u3059\u3002
      • LAGOON_GIT_SOURCE_REPOSITORY - \u30bd\u30fc\u30b9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u5b8c\u5168\u306aGit URL\u3067\u3059

      \u307e\u305f\u3001\u3053\u308c\u304c\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30d3\u30eb\u30c9\u3067\u3042\u308b\u5834\u5408\u306f\u4ee5\u4e0b\u3068\u306a\u308a\u307e\u3059\u3002

      • LAGOON_PR_HEAD_BRANCH
      • LAGOON_PR_HEAD_SHA
      • LAGOON_PR_BASE_BRANCH
      • LAGOON_PR_BASE_SHA
      • LAGOON_PR_TITLE

      \u307e\u305f\u3001\u3059\u3067\u306b\u69cb\u7bc9\u3055\u308c\u305f\u5404\u30a4\u30e1\u30fc\u30b8\u306e\u540d\u524d\u3082\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002\u3042\u306a\u305f\u306edocker-compose.yml\u304c\u6700\u521d\u306bcli\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3057\u3001\u6b21\u306bnginx\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001nginx\u30a4\u30e1\u30fc\u30b8\u306e\u540d\u524d\u306fNGINX_IMAGE\u3068\u3057\u3066\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#4-kubernetesopenshift","title":"4. Kubernetes\u307e\u305f\u306fOpenShift\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b","text":"

      \u6b21\u306b\u3001Lagoon\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u304b\u3089\u5b9a\u7fa9\u3055\u308c\u308b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30eb\u30fc\u30c8\u3001\u304a\u3088\u3073.lagoon.yml\u3067\u5b9a\u7fa9\u3057\u305f\u8ffd\u52a0\u53ef\u80fd\u306a\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092Kubernetes\u307e\u305f\u306fOpenShift\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002

      \u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001LAGOON_ROUTES\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8\u3092\u30ab\u30f3\u30de\u533a\u5207\u308a\u306eURL\u3068\u3057\u3066\u516c\u958b\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u4ee5\u4e0b\u306e\u9806\u5e8f\u30671\u3064\u306e\u30eb\u30fc\u30c8\u3092\"main\"\u30eb\u30fc\u30c8\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u307e\u3059:

      1. \u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u5834\u5408:.lagoon.yml\u3067\u6700\u521d\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8
      2. docker-compose.yml\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u6700\u521d\u306e\u30eb\u30fc\u30c8
      3. \u306a\u3057

      \"main\"\u30eb\u30fc\u30c8\u306fLAGOON_ROUTE\u74b0\u5883\u5909\u6570\u3092\u4ecb\u3057\u3066\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#5","title":"5. \u30a4\u30e1\u30fc\u30b8\u306e\u30d7\u30c3\u30b7\u30e5\u3068\u30bf\u30b0\u4ed8\u3051","text":"

      \u3053\u308c\u3067\u3001\u4ee5\u524d\u306b\u30d3\u30eb\u30c9\u3057\u305fDocker\u30a4\u30e1\u30fc\u30b8\u3092\u5185\u90e8\u306eDocker\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      docker-compose.yml\u3067\u30d3\u30eb\u30c9\u3059\u308bDockerfile\u3092\u6307\u5b9a\u305b\u305a\u306b\u30a4\u30e1\u30fc\u30b8\u306e\u307f\u3092\u6307\u5b9a\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u306b\u3064\u3044\u3066\u3082\u3001\u30bf\u30b0\u4ed8\u3051\u304c\u884c\u308f\u308c\u3001\u5185\u90e8Docker\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u8a8d\u8b58\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30b3\u30f3\u30c6\u30ca\u3067\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#6","title":"6. \u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8","text":"

      Lagoon\u306f\u3001\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\uff08PVC\uff09\u3092\u5fc5\u8981\u3068\u3057\u3066\u8981\u6c42\u3057\u305f\u5404\u30b5\u30fc\u30d3\u30b9\u306e\u305f\u3081\u306b\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#7-cron","title":"7. Cron\u30b8\u30e7\u30d6","text":"

      MariaDB\u306e\u3088\u3046\u306bcron\u30b8\u30e7\u30d6\u3092\u8981\u6c42\u3059\u308b\u5404\u30b5\u30fc\u30d3\u30b9\u3001\u304a\u3088\u3073.lagoon.yml\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30ab\u30b9\u30bf\u30e0cron\u30b8\u30e7\u30d6\u3054\u3068\u306b\u3001Lagoon\u306fcron\u30b8\u30e7\u30d6\u74b0\u5883\u5909\u6570\u3092\u751f\u6210\u3057\u3001\u305d\u308c\u3089\u306f\u5f8c\u3067\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306b\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#8","title":"8. \u5b9a\u7fa9\u6e08\u307f\u306e\u30d7\u30ec\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306e\u5b9f\u884c","text":"

      \u6b21\u306bLagoon\u306f.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305fpre-rollout\u306e\u30bf\u30b9\u30af\u3092\u78ba\u8a8d\u3057\u3001\u305d\u308c\u3089\u3092\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b1\u3064\u305a\u3064\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30bf\u30b9\u30af\u306f\u73fe\u5728\u5b9f\u884c\u4e2d\u306e\u30dd\u30c3\u30c9\u3067\u5b9f\u884c\u3055\u308c\u308b\u305f\u3081\u3001\u6700\u65b0\u306e\u30b3\u30df\u30c3\u30c8\u306b\u306e\u307f\u5b58\u5728\u3059\u308b\u6a5f\u80fd\u3084\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u307e\u305f\u3001\u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3002

      \u3053\u308c\u3089\u306e\u30bf\u30b9\u30af\u306e\u3044\u305a\u308c\u304b\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u3001Lagoon\u306f\u76f4\u3061\u306b\u505c\u6b62\u3057\u901a\u77e5\u3057\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306f\u9032\u884c\u3057\u307e\u305b\u3093\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#9-deploymentconfigsstatefulsetsdaemonsets","title":"9. DeploymentConfigs\u3001Statefulsets\u3001Daemonsets","text":"

      \u3053\u308c\u304c\u304a\u305d\u3089\u304f\u6700\u3082\u91cd\u8981\u306a\u30b9\u30c6\u30c3\u30d7\u3067\u3059\u3002\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u306b\u57fa\u3065\u3044\u3066\u3001Lagoon\u306f[ Deployment\u3001Statefulset \u307e\u305f\u306f Daemonsets \u3092\u30b5\u30fc\u30d3\u30b9\u7528\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002 (Deployment\u306fOpenShift\u306e DeploymentConfigs \u3068\u540c\u7b49\u3067\u3059)

      \u3053\u308c\u306b\u306f\u3001\u4ee5\u524d\u306b\u53ce\u96c6\u3057\u305f\u60c5\u5831\u3001cron\u30b8\u30e7\u30d6\u3001\u6c38\u7d9a\u7684\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4f4d\u7f6e\u3001\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u306a\u3069\u5168\u3066\u304c\u542b\u307e\u308c\u307e\u3059\u3002

      \u3053\u308c\u3089\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u306f\u3001\u74b0\u5883\u5909\u6570\u304c\u5909\u66f4\u3055\u308c\u305f\u308a\u3001\u30a4\u30e1\u30fc\u30b8\u304c\u5909\u66f4\u3055\u308c\u305f\u308a\u3057\u305f\u5834\u5408\u306a\u3069\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066Kubernetes\u3084OpenShift\u304c\u30dd\u30c3\u30c9\u306e\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u81ea\u52d5\u7684\u306b\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u3053\u3068\u3082\u5f15\u304d\u8d77\u3053\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5909\u66f4\u304c\u306a\u3044\u5834\u5408\u306f\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306f\u884c\u308f\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306ePHP\u30b3\u30fc\u30c9\u306e\u307f\u3092\u66f4\u65b0\u3057\u305f\u5834\u5408\u3001Varnish\u3001Solr\u3001MariaDB\u3001Redis\u306a\u3069\u306e\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u304c\u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u3092\u542b\u307e\u306a\u3044\u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u306a\u3044\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5168\u3066\u304c\u975e\u5e38\u306b\u9ad8\u901f\u306b\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#10","title":"10. \u3059\u3079\u3066\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064","text":"

      \u3053\u3053\u3067Lagoon\u306f\u5f85\u6a5f\u3057\u307e\u3059\uff01\u65b0\u3057\u3044\u30dd\u30c3\u30c9\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u3059\u3079\u3066\u5b8c\u4e86\u3057\u3001\u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af\u304c\u6210\u529f\u3059\u308b\u306e\u3092\u5f85\u3061\u307e\u3059\u3002

      \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3084\u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af\u306e\u3044\u305a\u308c\u304b\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306f\u3053\u3053\u3067\u505c\u6b62\u3055\u308c\u3001Slack\u306a\u3069\u306e\u5b9a\u7fa9\u6e08\u307f\u306e\u901a\u77e5\u30b7\u30b9\u30c6\u30e0\u3092\u901a\u3058\u3066\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u5931\u6557\u3057\u305f\u3053\u3068\u304c\u901a\u77e5\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#11","title":"11. \u5b9a\u7fa9\u3055\u308c\u305f\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306e\u5b9f\u884c","text":"

      \u6b21\u306b\u3001Lagoon\u306f.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066post-rollout\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30bf\u30b9\u30af\u3092\u63a2\u3057\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u3067\u305d\u308c\u3089\u3092\u4e00\u3064\u305a\u3064\u5b9f\u884c\u3057\u307e\u3059\u3002

      \u3053\u308c\u3089\u306e\u3044\u305a\u308c\u304b\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u3001Lagoon\u306f\u76f4\u3061\u306b\u505c\u6b62\u3057\u3001\u3042\u306a\u305f\u306b\u901a\u77e5\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/build-and-deploy-process/#12","title":"12. \u6210\u529f","text":"

      \u5168\u3066\u304c\u9806\u8abf\u306b\u9032\u307f\u3001\u4f55\u3082\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u3001Lagoon\u306f\u3053\u306e\u30d3\u30eb\u30c9\u3092\u6210\u529f\u3068\u30de\u30fc\u30af\u3057\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u901a\u77e5\u3092\u4ecb\u3057\u3066\u3042\u306a\u305f\u306b\u901a\u77e5\u3057\u307e\u3059\u3002\u2705

      "},{"location":"ja/concepts-basics/docker-compose-yml/","title":"docker-compose.yml","text":"

      docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306fLagoon\u304c\u4ee5\u4e0b\u306e\u76ee\u7684\u306e\u305f\u3081\u306b\u5229\u7528\u3057\u307e\u3059:

      • \u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u30b5\u30fc\u30d3\u30b9/\u30b3\u30f3\u30c6\u30ca\u3092\u77e5\u308b
      • \u30b3\u30f3\u30c6\u30ca\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u3069\u306e\u3088\u3046\u306b\u30d3\u30eb\u30c9\u3055\u308c\u308b\u304b\u3092\u5b9a\u7fa9\u3059\u308b
      • \u6c38\u7d9a\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u3088\u3046\u306a\u8ffd\u52a0\u306e\u8a2d\u5b9a\u3092\u5b9a\u7fa9\u3059\u308b

      Docker Compose(\u30c4\u30fc\u30eb)\u306fYAML\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u306e\u691c\u8a3c\u306b\u975e\u5e38\u306b\u53b3\u683c\u3067\u3042\u308b\u305f\u3081\u3001\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\u306elabels\u5185\u3067\u306e\u307f\u8a2d\u5b9a\u3092\u884c\u3046\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002

      \u8b66\u544a

      Lagoon\u306fdocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30e9\u30d9\u30eb\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u3001\u30a4\u30e1\u30fc\u30b8\u540d\u3001\u30d3\u30eb\u30c9\u5b9a\u7fa9\u306e\u307f\u3092\u8aad\u307f\u53d6\u308a\u307e\u3059\u3002\u30dd\u30fc\u30c8\u3001\u74b0\u5883\u5909\u6570\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u30ea\u30f3\u30af\u3001\u30e6\u30fc\u30b6\u30fc\u306a\u3069\u306e\u5b9a\u7fa9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002

      \u3053\u308c\u306f\u610f\u56f3\u7684\u306a\u3082\u306e\u3067\u3001docker-compose\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306e\u8a2d\u5b9a\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002Lagoon\u306flagoon.type\u304b\u3089\u3042\u306a\u305f\u304c\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u3044\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u5b66\u3073\u3001\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u5fc5\u8981\u3068\u3059\u308b\u30dd\u30fc\u30c8\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u305d\u306e\u4ed6\u306e\u8ffd\u52a0\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u77e5\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u4ee5\u4e0b\u306b\u3001Drupal\u7528\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306e\u7c21\u5358\u306a\u4f8b\u3092\u793a\u3057\u307e\u3059:

      docker-compose.yml
      version: '2.3'\nx-lagoon-project:\n# Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d(\u3053\u308c\u3092\u7de8\u96c6\u3059\u308b\u969b\u306f`&lagoon-project`\u3092\u6b8b\u3057\u3066\u304f\u3060\u3055\u3044)\n&lagoon-project drupal-example\nx-volumes:\n&default-volumes\n# Docker\u30b3\u30f3\u30c6\u30ca\u306b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30de\u30a6\u30f3\u30c8\u3057\u305f\u3044\u3059\u3079\u3066\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u5b9a\u7fa9\u3057\u307e\u3059\nvolumes:\n- .:/app:delegated\nx-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# \u30ed\u30fc\u30ab\u30eb\u3067\u4f7f\u7528\u3059\u308b\u30eb\u30fc\u30c8\u3002pygmy\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u30eb\u30fc\u30c8\u306f *\u5fc5\u305a* .docker.amazee.io\u3067\u7d42\u308f\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n# \u672c\u756a\u74b0\u5883\u3068\u540c\u69d8\u306e\u52d5\u4f5c\u3092\u3055\u305b\u305f\u3044\u5834\u5408\u306f\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\n#LAGOON_ENVIRONMENT_TYPE: production\n# Xdebug\u3092\u6709\u52b9\u306b\u3057\u3001`docker-compose up -d`\u3067\u518d\u8d77\u52d5\u3057\u305f\u3044\u5834\u5408\u306f\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\n#XDEBUG_ENABLE: \"true\"\nx-user:\n&default-user\n# \u30b3\u30f3\u30c6\u30ca\u304c\u5b9f\u884c\u3055\u308c\u308b\u3079\u304d\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u3002Linux\u4e0a\u3067ID `1000`\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u306f\u3053\u308c\u3092\u5909\u66f4\u3057\u307e\u3059\nuser: '1000'\nservices:\nnginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent # (1)\nlagoon.persistent: /app/web/sites/default/files/\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent # (2)\nlagoon.name: nginx\nlagoon.persistent: /app/web/sites/default/files/\nmariadb:\nimage: uselagoon/mariadb-10.11-drupal\nlabels:\nlagoon.type: mariadb\n
      1. \u3053\u3053\u3067\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9\u306b\u6ce8\u76ee\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      2. \u3053\u3053\u3067\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9\u306b\u6ce8\u76ee\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      "},{"location":"ja/concepts-basics/docker-compose-yml/#basic-settings","title":"\u57fa\u672c\u8a2d\u5b9a","text":"

      x-lagoon-project:

      \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30de\u30b7\u30f3\u540d\u3067\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002\"drupal-example\"\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

      x-volumes:

      \u3053\u308c\u306fLagoon\u306b\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3082\u306e\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f/app\u306b\u5b58\u5728\u3057\u307e\u3059\u304c\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u3053\u308c\u3092\u8ffd\u52a0\u307e\u305f\u306f\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      x-environment:

      1. \u3053\u3053\u3067\u30ed\u30fc\u30ab\u30eb\u958b\u767aURL\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002pygmy\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001.docker.amazee.io\u3067\u7d42\u308f\u3089\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
      2. \u5b8c\u5168\u306b\u672c\u756a\u74b0\u5883\u306b\u4f3c\u305b\u305f\u3044\u5834\u5408\u306f\u3001LAGOON_ENVIRONMENT_TYPE: production \u306e\u30b3\u30e1\u30f3\u30c8\u3092\u5916\u3057\u307e\u3059\u3002
      3. Xdebug\u3092\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001DEBUG_ENABLE: \"true\" \u306e\u30b3\u30e1\u30f3\u30c8\u3092\u5916\u3057\u307e\u3059\u3002

      x-user:

      Linux\u3092\u4f7f\u7528\u3057\u3066\u3044\u3066\u30011000\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u3067\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u3092\u9664\u304d\u3001\u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u307b\u3068\u3093\u3069\u3042\u308a\u307e\u305b\u3093\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#services","title":"services","text":"

      \u3053\u3053\u3067\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002 \u6b8b\u5ff5\u306a\u304c\u3089\u3001 Docker Compose\u306f\u305d\u308c\u3089\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059\u304c\u3001\u5b9f\u969b\u306b\u306f\u30b3\u30f3\u30c6\u30ca\u3067\u3059\u3002\u3053\u308c\u304b\u3089\u306f\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3076\u3053\u3068\u306b\u3057\u307e\u3059\u3002

      \u305d\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d(\u4e0a\u8a18\u306e\u4f8b\u3067\u306f nginx\u3001php\u3001mariadb)\u306f\u3001Lagoon\u306b\u3088\u3063\u3066\u751f\u6210\u3055\u308c\u308bKubernetes\u306e\u30dd\u30c3\u30c9\u306e\u540d\u524d(\u307e\u305f\u5225\u306e\u7528\u8a9e\u3068\u3057\u3066\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059)\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u3001\u3055\u3089\u306b\u5b9a\u7fa9\u3055\u308c\u305flagoon.type\u306b\u57fa\u3065\u3044\u3066\u4f5c\u6210\u3055\u308c\u308bKubernetes\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3068\u3057\u3066\u3082\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3001\u30eb\u30fc\u30c8\u3001\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306a\u3069\u304c\u542b\u307e\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      \u30b5\u30fc\u30d3\u30b9\u540d\u306fRFC 1035\u306eDNS\u30e9\u30d9\u30eb\u6a19\u6e96\u306b\u6e96\u62e0\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30b5\u30fc\u30d3\u30b9\u540d\u306f\u4ee5\u4e0b\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      • \u6700\u592763\u6587\u5b57\u3092\u542b\u3080
      • \u5c0f\u6587\u5b57\u306e\u82f1\u6570\u5b57\u307e\u305f\u306f'-'\u306e\u307f\u3092\u542b\u3080
      • \u82f1\u5b57\u3067\u59cb\u307e\u308b
      • \u82f1\u6570\u5b57\u3067\u7d42\u308f\u308b

      \u8b66\u544a

      \u4e00\u5ea6\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3092\u8a2d\u5b9a\u3057\u305f\u3089\u3001\u4fee\u6b63\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u4fee\u6b63\u3059\u308b\u3068\u3001\u30b3\u30f3\u30c6\u30ca\u5185\u3067\u69d8\u3005\u306a\u554f\u984c\u304c\u767a\u751f\u3057\u3001\u4e0d\u6574\u5408\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#docker-images","title":"Docker\u30a4\u30e1\u30fc\u30b8","text":""},{"location":"ja/concepts-basics/docker-compose-yml/#build","title":"build","text":"

      \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3054\u3068\u306bLagoon\u304c\u3042\u306a\u305f\u306e\u30b5\u30fc\u30d3\u30b9\u306eDockerfile\u3092\u30d3\u30eb\u30c9\u3057\u3066\u307b\u3057\u3044\u5834\u5408\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3067\u304d\u307e\u3059:

      build

      • context
        • docker build \u30b3\u30de\u30f3\u30c9\u306b\u6e21\u3059\u3079\u304d\u30d3\u30eb\u30c9\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9
      • dockerfile:
        • \u30d3\u30eb\u30c9\u3059\u308b\u3079\u304dDockerfile\u306e\u5834\u6240\u3068\u540d\u524d

      \u8b66\u544a

      Lagoon\u306f\u77ed\u7e2e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002build: <Dockerfile>\u306e\u5b9a\u7fa9\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u51e6\u7406\u306f\u5931\u6557\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#image","title":"image","text":"

      Dockerfile\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u3001\u65e2\u5b58\u306eDockerfile\u3092\u4f7f\u7528\u3057\u305f\u3044\u5834\u5408\u306f\u3001image\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#types","title":"\u30bf\u30a4\u30d7","text":"

      Lagoon\u306f\u3001Kubernetes\u3084OpenShift\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6b63\u3057\u304f\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u77e5\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      \u3053\u308c\u306flagoon.type\u30e9\u30d9\u30eb\u3092\u901a\u3058\u3066\u884c\u308f\u308c\u307e\u3059\u3002\u9078\u629e\u3067\u304d\u308b\u30bf\u30a4\u30d7\u306f\u591a\u6570\u3042\u308a\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u30bf\u30a4\u30d7\u3068\u8ffd\u52a0\u8a2d\u5b9a\u306e\u53ef\u80fd\u6027\u3092\u898b\u308b\u306b\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#skipignore-containers","title":"\u30b3\u30f3\u30c6\u30ca\u306e\u30b9\u30ad\u30c3\u30d7/\u7121\u8996","text":"

      \u305f\u3068\u3048\u3070\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u6642\u306b\u306e\u307f\u30b3\u30f3\u30c6\u30ca\u304c\u5fc5\u8981\u306a\u5834\u5408\u306a\u3069\u3001Lagoon\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u5b8c\u5168\u306b\u7121\u8996\u3055\u305b\u305f\u3044\u5834\u5408\u306f\u3001\u305d\u306e\u30bf\u30a4\u30d7\u306bnone\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#persistent-storage","title":"\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8","text":"

      \u4e00\u90e8\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u306f\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5fc5\u8981\u3067\u3059\u3002Lagoon\u3067\u306f\u3001\u5404\u30b3\u30f3\u30c6\u30ca\u304c\u6700\u59271\u3064\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u306b\u81ea\u8eab\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u8981\u6c42\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d(\u305d\u308c\u3092\u4ed6\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u305b\u308b\u3053\u3068\u3082\u53ef\u80fd)\u3001\u307e\u305f\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u4ed6\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u4f5c\u6210\u3057\u305f\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3088\u3046\u6307\u793a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

      \u591a\u304f\u306e\u5834\u5408\u3001Lagoon\u306f\u305d\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u3069\u3053\u306b\u914d\u7f6e\u3059\u3079\u304d\u304b\u3092\u77e5\u3063\u3066\u3044\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001 \u4f8b\u3048\u3070\u3001MariaDB\u30b3\u30f3\u30c6\u30ca\u306e\u5834\u5408\u3001Lagoon\u306f\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092/var/lib/mysql\u306b\u914d\u7f6e\u3059\u3079\u304d\u3068\u77e5\u3063\u3066\u304a\u308a\u3001\u305d\u308c\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u8ffd\u52a0\u306e\u8a2d\u5b9a\u306a\u3057\u306b\u81ea\u52d5\u7684\u306b\u305d\u3053\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u4e00\u90e8\u306e\u72b6\u6cc1\u3067\u306f\u3001Lagoon\u306f\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u3069\u3053\u306b\u914d\u7f6e\u3059\u3079\u304d\u304b\u3092\u77e5\u308b\u305f\u3081\u306b\u3042\u306a\u305f\u306e\u52a9\u3051\u304c\u5fc5\u8981\u3067\u3059\u3002

      • lagoon.persistent - \u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u3079\u304d\u7d76\u5bfe\u30d1\u30b9(\u4e0a\u8a18\u306e\u4f8b\u3067\u306f/app/web/sites/default/files/\u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u306fDrupal\u304c\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u671f\u5f85\u3059\u308b\u30d1\u30b9\u3067\u3059)\u3002
      • lagoon.persistent.name - Lagoon\u306b\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u65b0\u3057\u3044\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u306a\u3044\u3088\u3046\u306b\u6307\u793a\u3057\u3001\u4ee3\u308f\u308a\u306b\u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u5b9a\u7fa9\u6e08\u307f\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059\u3002
      • lagoon.persistent.size - \u5fc5\u8981\u306a\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u30b5\u30a4\u30ba(Lagoon\u306f\u901a\u5e38\u3001\u6700\u5c0f5G\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3082\u3057\u3082\u3063\u3068\u5fc5\u8981\u306a\u3089\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044)\u3002
      • lagoon.persistent.class - \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306fLagoon\u306f\u81ea\u52d5\u7684\u306b\u9069\u5207\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9(MySQL\u306eSSD\u3001Nginx\u306e\u5927\u91cf\u30b9\u30c8\u30ec\u30fc\u30b8\u306a\u3069)\u3092\u30b5\u30fc\u30d3\u30b9\u306b\u5272\u308a\u5f53\u3066\u307e\u3059\u3002\u3053\u308c\u3092\u4e0a\u66f8\u304d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u3053\u3067\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001Lagoon\u304c\u52d5\u4f5c\u3059\u308bKubernetes/OpenShift\u306e\u30a4\u30f3\u30d5\u30e9\u57fa\u76e4\u306b\u5927\u304d\u304f\u4f9d\u5b58\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3064\u3044\u3066\u306fLagoon\u306e\u7ba1\u7406\u8005\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044\u3002
      "},{"location":"ja/concepts-basics/docker-compose-yml/#auto-generated-routes","title":"\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8","text":"

      docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u3092\u6709\u52b9\u307e\u305f\u306f\u7121\u52b9\u306b\u3059\u308b\u3053\u3068\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002

      • lagoon.autogeneratedroute: false \u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u81ea\u52d5\u7684\u306b\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u304c\u505c\u6b62\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u9069\u7528\u3067\u304d\u307e\u3059\u304c\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9\u306a\u3069\u306e\u8ffd\u52a0\u306e\u5185\u90e8\u5411\u3051\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u969b\u306bbasic\u304a\u3088\u3073basic-persistent\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3067\u7279\u306b\u4fbf\u5229\u3067\u3059\u3002\u9006\u3082\u307e\u305f\u540c\u69d8\u306b\u3001.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u304c\u305d\u308c\u3089\u3092\u7121\u52b9\u306b\u3059\u308b\u3068\u304d\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002
      "},{"location":"ja/concepts-basics/docker-compose-yml/#multi-container-pods","title":"\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30fc\u30dd\u30c3\u30c9","text":"

      Kubernetes\u3068OpenShift\u306f\u5358\u7d14\u306a\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001\u305d\u308c\u305e\u308c\u304c1\u3064\u4ee5\u4e0a\u306e\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u6301\u3064\u30dd\u30c3\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u901a\u5e38\u3001Lagoon\u306f\u5b9a\u7fa9\u3055\u308c\u305fdocker-compose\u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b\u30b3\u30f3\u30c6\u30ca\u30fc\u304c\u5185\u90e8\u306b\u3042\u308b\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3042\u308b\u30b1\u30fc\u30b9\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30b3\u30f3\u30c6\u30ca\u30fc\u304c\u4e92\u3044\u306b\u975e\u5e38\u306b\u4f9d\u5b58\u3057\u3066\u3044\u3066\u3001\u5e38\u306b\u4e00\u7dd2\u306b\u3044\u308b\u3079\u304d\u3067\u3042\u308b\u305f\u3081\u3001\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u5185\u306b2\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u914d\u7f6e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u3088\u3046\u306a\u72b6\u6cc1\u306e\u4e00\u4f8b\u306f\u3001PHP\u30b3\u30f3\u30c6\u30ca\u3068NGINX\u30b3\u30f3\u30c6\u30ca\u304cDrupal\u306e\u3088\u3046\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306ePHP\u30b3\u30fc\u30c9\u3092\u542b\u3080\u5834\u5408\u3067\u3059\u3002

      \u3053\u308c\u3089\u306e\u30b1\u30fc\u30b9\u3067\u306f\u3001\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u4e00\u7dd2\u306b\u3059\u3079\u304d\u304b\u3092Lagoon\u306b\u4f1d\u3048\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3001\u6b21\u306e\u3088\u3046\u306b\u884c\u3044\u307e\u3059(\u79c1\u305f\u3061\u304c\u30b3\u30f3\u30c6\u30ca\u3092docker-compose\u306e\u305f\u3081\u306bservices\u3068\u547c\u3093\u3067\u3044\u308b\u3053\u3068\u3092\u899a\u3048\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044):

      1. \u4e21\u65b9\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u3001\u4e8c\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u671f\u5f85\u3059\u308blagoon.type\u3067\u5b9a\u7fa9\u3057\u307e\u3059(\u3053\u306e\u4f8b\u3067\u306f\u3001nginx\u3068php\u30b5\u30fc\u30d3\u30b9\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308bnginx-php-persistent\u3067\u3059)\u3002
      2. \u7b2c2\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u7b2c1\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u30ea\u30f3\u30af\u3057\u3001\u7b2c2\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30e9\u30d9\u30eblagoon.name\u306b\u3066\u7b2c1\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059(\u3053\u306e\u4f8b\u3067\u306f\u3001lagoon.name: nginx\u3068\u6307\u5b9a\u3057\u307e\u3059)\u3002

      \u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u306fnginx\u3068php\u30b3\u30f3\u30c6\u30ca\u3092nginx\u3068\u547c\u3070\u308c\u308b1\u3064\u306e\u30dd\u30c3\u30c9\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3057\u307e\u3059\u3002

      \u8b66\u544a

      \u4e00\u5ea6\u30b5\u30fc\u30d3\u30b9\u306elagooon.name\u3092\u8a2d\u5b9a\u3057\u305f\u3089\u3001\u4fee\u6b63\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u3042\u306a\u305f\u306e\u30b3\u30f3\u30c6\u30ca\u3067\u6df7\u4e71\u3092\u5f15\u304d\u8d77\u3053\u3057\u3001\u4e0d\u6574\u5408\u3092\u5f15\u304d\u8d77\u3053\u3059\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002

      Lagoon\u306f\u30012\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u3046\u3061\u3069\u308c\u304c\u5b9f\u969b\u306e\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\uff08\u3053\u306e\u5834\u5408\u3001nginx\u304a\u3088\u3073php\uff09\u3067\u3042\u308b\u304b\u3092\u7406\u89e3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u30bf\u30a4\u30d7\u306b\u3088\u3063\u3066\u4e0e\u3048\u3089\u308c\u305f\u540d\u524d\u3068\u540c\u3058\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u691c\u7d22\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001nginx-php-persistent\u306fdocker-compose.yml\u5185\u306bnginx\u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3068php\u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u304c1\u3064\u305a\u3064\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u307e\u3059\u3002\u4f55\u3089\u304b\u306e\u7406\u7531\u3067\u30b5\u30fc\u30d3\u30b9\u306b\u7570\u306a\u308b\u540d\u524d\u3092\u4f7f\u7528\u3057\u305f\u3044\u5834\u5408\u3001\u307e\u305f\u306fnginx-php-persistent\u30bf\u30a4\u30d7\u306e\u30dd\u30c3\u30c9\u3092\u8907\u6570\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u306b\u306f\u3001\u5b9f\u969b\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306blagoon.deployment.servicetype\u3068\u3044\u3046\u8ffd\u52a0\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u4f8b:

      docker-compose.yml
      nginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # \u3053\u308c\u304c\u306a\u3044\u5834\u5408\u3001Lagoon\u306f\u30b3\u30f3\u30c6\u30ca\u540d\u3001\u3064\u307e\u308a\u3053\u306e\u5834\u5408\u306fnginx\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\nlagoon.deployment.servicetype: nginx\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092Lagoon\u306eNGINX\u30dd\u30c3\u30c9\u306e\u4e00\u90e8\u306b\u3057\u307e\u3059\u3002\nlagoon.deployment.servicetype: php\n

      \u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u306fnginx\u3068php\u3067\u3059(\u597d\u304d\u306a\u540d\u524d\u3092\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002lagoon.name\u306fLagoon\u306b\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u4e00\u7dd2\u306e\u30dd\u30c3\u30c9\u306b\u3059\u3079\u304d\u3092\u4f1d\u3048\u307e\u3059 - \u540c\u3058\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3059\u3079\u3066\u4e00\u7dd2\u306e\u30dd\u30c3\u30c9\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002

      Lagoon\u306f\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u304cnginx\u3001php\u3067\u3042\u308b\u304b\u3092\u8a8d\u8b58\u3059\u308b\u305f\u3081\u306b\u3001lagoon.deployment.servicetype: nginx\u304a\u3088\u3073lagoon.deployment.servicetype: php\u3068\u5b9a\u7fa9\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#helm-templates-kubernetes-only","title":"Helm\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 (Kubernetes\u306e\u307f)","text":"

      Lagoon\u306fKubernetes\u3067\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4f5c\u6210\u306bHelm\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u4e00\u9023\u306e\u30c1\u30e3\u30fc\u30c8\u304cbuild-deploy-tool\u30a4\u30e1\u30fc\u30b8\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#custom-rollout-monitor-types","title":"\u30ab\u30b9\u30bf\u30e0\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30e2\u30cb\u30bf\u30fc\u30bf\u30a4\u30d7","text":"

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001Lagoon\u306f\u30ab\u30b9\u30bf\u30e0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u304cKubernetes\u307e\u305f\u306fOpenshift\u5185\u306eDeploymentConfig\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4ecb\u3057\u3066\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3055\u308c\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306b\u57fa\u3065\u3044\u3066\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3092\u76e3\u8996\u3057\u307e\u3059\u3002\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u304c\u7570\u306a\u308b\u76e3\u8996\u65b9\u6cd5\u3092\u5fc5\u8981\u3068\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306flagoon.rollout\u3092\u901a\u3058\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

      • deploymentconfig - \u3053\u308c\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4e2d\u306eDeploymentConfig\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u671f\u5f85\u3057\u307e\u3059\u3002
      • daemonset - \u30b5\u30fc\u30d3\u30b9\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5185\u306eDaemonset\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u671f\u5f85\u3057\u307e\u3059\u3002
      • false - \u3069\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3082\u76e3\u8996\u305b\u305a\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u9069\u7528\u3055\u308c\u3001\u30a8\u30e9\u30fc\u3092\u6295\u3052\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u6e80\u8db3\u3057\u307e\u3059\u3002

      \u307e\u305f\u3001\u7279\u5b9a\u306e\u74b0\u5883\u306e\u307f\u306b\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3092\u4e0a\u66f8\u304d\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f.lagoon.yml\u3067\u884c\u3044\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#docker-compose-v2-compatibility","title":"Docker Compose v2\u4e92\u63db\u6027","text":"

      \u30d0\u30b0

      \u30ed\u30fc\u30ab\u30eb\u3067Docker Compose V2\u306e\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u3068\u3001\u4e00\u90e8\u306e\u65e2\u77e5\u306e\u554f\u984c\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059 - \u3053\u308c\u3089\u306e\u554f\u984c\u306f\u5f8c\u306e\u30ea\u30ea\u30fc\u30b9(v2.17.3\u4ee5\u964d)\u3067\u89e3\u6c7a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\u7b56\u306f\u901a\u5e38\u3001\u4f7f\u7528\u3057\u3066\u3044\u308bDocker Compose\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u304b(\u307e\u305f\u306f\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b)\u3001\u3042\u308b\u3044\u306f\u4f7f\u7528\u3057\u3066\u3044\u308bDocker Desktop\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u3053\u3068\u3067\u3059\u3002 Docker Desktop\u306e\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u8a73\u3057\u304f\u306f

      depends_on\u306e\u30a8\u30e9\u30fc\u3092\u793a\u3059Docker Compose\u51fa\u529b
      Failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization\n\n\u307e\u305f\u306f\n\nFailed to solve: drupal9-base-cli: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed`\n
      • \u3053\u308c\u3089\u306fDocker Compose v2.13.0\u3067\u89e3\u6c7a\u3055\u308c\u307e\u3059\u3002
      • \u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u3001\u30d3\u30eb\u30c9\u304c\u3001\u307e\u3060\u30d3\u30eb\u30c9\u3055\u308c\u3066\u3044\u306a\u3044Docker\u30a4\u30e1\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u305f\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002BuildKit\u306f\u4e26\u5217\u306b\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u3001\u3082\u3057\u3082\u3046\u4e00\u3064\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u7d99\u627f\u3059\u308b\u3082\u306e\u304c\u3042\u308b\u5834\u5408(Drupal\u306eCLI\u306e\u3088\u3046\u306b)\u306f\u3053\u306e\u4e8b\u8c61\u304c\u767a\u751f\u3057\u307e\u3059\u3002
      • \u30de\u30eb\u30c1\u30b9\u30c6\u30fc\u30b8\u30d3\u30eb\u30c9\u3068\u3057\u3066\u518d\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001\u30d3\u30eb\u30c9\u5185\u306etarget\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
      • \u3059\u3067\u306b\u65b0\u3057\u3044Docker Compose\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u30a8\u30e9\u30fc\u306f\u3001docker-container\u30d3\u30eb\u30c9\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092buildx\u3067\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002docker buildx ls\u304cdocker-container\u30d9\u30fc\u30b9\u306e\u3082\u306e\u3067\u306f\u306a\u304f\u3001docker builder\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u3068\u3057\u3066\u8868\u793a\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002Docker buildx\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3053\u3061\u3089\u3067\u3059.
      volumes_from\u30a8\u30e9\u30fc\u3092\u793a\u3059Docker Compose\u51fa\u529b
      no such service: container:amazeeio-ssh-agent\n
      • \u3053\u306e\u554f\u984c\u306fDocker Compose v2.17.3\u3067\u89e3\u6c7a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
      • \u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u30b3\u30f3\u30c6\u30ca\u3078\u306eSSH\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u304c\u3001\u3042\u306a\u305f\u306eDocker Compose\u30b9\u30bf\u30c3\u30af\u306e\u5916\u90e8\u3067\u5b9f\u884c\u3055\u308c\u3001\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002
      • \u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u304b\u3089SSH\u30a2\u30af\u30bb\u30b9\u304c\u5fc5\u8981\u306a\u3044\u5834\u5408\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
      "},{"location":"ja/concepts-basics/docker-compose-yml/#buildkit-and-lagoon","title":"BuildKit\u3068Lagoon","text":"

      BuildKit\u306f\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u52b9\u7387\u7684\u3067\u8868\u73fe\u529b\u8c4a\u304b\u3067\u7e70\u308a\u8fd4\u3057\u5229\u7528\u53ef\u80fd\u306a\u65b9\u6cd5\u3067\u30d3\u30eb\u30c9\u6210\u679c\u7269\u306b\u5909\u63db\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u30ad\u30c3\u30c8\u3067\u3059\u3002

      Lagoon v2.11.0\u306e\u30ea\u30ea\u30fc\u30b9\u306b\u3088\u308a\u3001Lagoon\u306f\u3088\u308a\u9ad8\u5ea6\u306aBuildKit\u30d9\u30fc\u30b9\u306edocker-compose\u30d3\u30eb\u30c9\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u74b0\u5883\u3067BuildKit\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u74b0\u5883\u306bDOCKER_BUILDKIT=1\u3092\u30d3\u30eb\u30c9\u6642\u306e\u5909\u6570\u3068\u3057\u3066\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#docker-compose-errors-in-lagoon-builds","title":"Lagoon\u30d3\u30eb\u30c9\u3067\u306eDocker Compose\u30a8\u30e9\u30fc","text":"

      Docker Compose\u3067\u4e00\u822c\u7684\u306a\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001Lagoon\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u30da\u30fc\u30b8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#common-docker-compose-issues","title":"\u3088\u304f\u3042\u308bDocker Compose\u306e\u554f\u984c","text":"

      \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4e00\u822c\u7684\u306aDocker Compose\u306e\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u3067\u767a\u751f\u3059\u308b\u304b\u3001\u307e\u305f\u306fLagoon\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u3068\u8b66\u544a\u3068\u3057\u3066\u767a\u751f\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      "},{"location":"ja/concepts-basics/docker-compose-yml/#dual-mapping-keys","title":"\u4e8c\u91cd\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc","text":"\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc\u306e\u30a8\u30e9\u30fc\u3092\u793a\u3059Docker Compose\u306e\u51fa\u529b
      ERR: yaml: unmarshal errors: line 22: mapping key \"<<\" already defined at line 21\n

      Lagoon\u306e\u521d\u671f\u30ea\u30ea\u30fc\u30b9\u3067\u306f\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u3068\u30e6\u30fc\u30b6\u30fc\u30b3\u30fc\u30c9\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u306bYAML\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u30da\u30a2\u304c\u6dfb\u4ed8\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002Docker Compose\u306e\u65b0\u3057\u3044\u30ea\u30ea\u30fc\u30b9\u3067\u306f\u3001\u3053\u308c\u3092\u30a8\u30e9\u30fc\u3068\u3057\u3066\u5831\u544a\u3057\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u4f8b\u304c\u73fe\u5728\u66f4\u65b0\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u306e\u3001\u66f4\u65b0\u304c\u5fc5\u8981\u306a\u53e4\u3044\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      \u3053\u306e\u30a8\u30e9\u30fc\u306f\u3001Docker Compose\u304c\u914d\u5217\u306b\u4f55\u3092\u633f\u5165\u3057\u3066\u3044\u308b\u306e\u304b\u5206\u304b\u3089\u306a\u3044\u305f\u3081\u3001\u91cd\u8907\u3057\u3066\u3044\u308b\u3068\u4eee\u5b9a\u3057\u3066\u767a\u751f\u3057\u307e\u3059\u3002

      \u3042\u306a\u305f\u306edocker-compose.yml\u304c\u3053\u306e(\u307e\u305f\u306f\u985e\u4f3c\u306e)\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u3092\u4e00\u3064\u4ee5\u4e0a\u542b\u3093\u3067\u3044\u308b\u5834\u5408\u3001\u3042\u306a\u305f\u306f\u5f71\u97ff\u3092\u53d7\u3051\u307e\u3059\u3002

      \u4e8c\u91cd\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc\u3092\u542b\u3080Docker Compose\u306e\u30a8\u30e9\u30fc
      ...\n<< : [*default-volumes]\n<< : [*default-user]\n...\n

      \u4fee\u6b63\u7248\u3067\u306f\u3001\u4e21\u65b9\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u30921\u3064\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc\u306b\u7d71\u5408\u3057\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u7b87\u6240\u3092\u5bfe\u51e6\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      Docker Compose\u306b\u304a\u3051\u308b\u8907\u6570\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc\u306e\u6b63\u3057\u3044\u633f\u5165\u65b9\u6cd5
      ...\n<< : [*default-volumes, *default-user]\n...\n
      "},{"location":"ja/concepts-basics/lagoon-yml/","title":".lagoon.yml","text":"

      .lagoon.yml \u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306e\u4e2d\u5fc3\u3068\u306a\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u64cd\u4f5c\u3092\u884c\u3046\u305f\u3081\u306e\u8a2d\u5b9a\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

      • \u30b5\u30a4\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u30eb\u30fc\u30c8\u3092\u5b9a\u7fa9\u3059\u308b
      • \u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b
      • \u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b
      • SSL\u8a3c\u660e\u66f8\u3092\u8a2d\u5b9a\u3059\u308b
      • \u74b0\u5883\u306e\u305f\u3081\u306ecron\u30b8\u30e7\u30d6\u3092\u8ffd\u52a0\u3059\u308b

      .lagoon.yml \u30d5\u30a1\u30a4\u30eb\u306f\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30eb\u30fc\u30c8\u306b\u914d\u7f6e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#_1","title":"\u6c4e\u7528\u7684\u306a\u8a2d\u5b9a","text":""},{"location":"ja/concepts-basics/lagoon-yml/#docker-compose-yaml","title":"docker-compose-yaml","text":"

      \u3053\u306e\u8a2d\u5b9a\u306f\u3001\u30d3\u30eb\u30c9\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u3069\u306eDocker Compose YAML\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3079\u304d\u304b\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30b3\u30f3\u30c6\u30ca\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3079\u304d\u304b\u3092\u628a\u63e1\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3068\u3057\u3066 docker-compose.yml \u3092\u6307\u3057\u307e\u3059\u304c\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u7279\u5b9a\u306eLagoon Docker Compose YAML\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#environment_variablesgit_sha","title":"environment_variables.git_sha","text":"

      \u3053\u306e\u8a2d\u5b9a\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305fGit SHA\u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3053\u308c\u306f\u7121\u52b9\u3067\u3059\u3002\u5024\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001SHA\u304c\u74b0\u5883\u5909\u6570 LAGOON_GIT_SHA \u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#routes","title":"\u30eb\u30fc\u30c8","text":"

      \u30eb\u30fc\u30c8\u306f\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u30b5\u30fc\u30d3\u30b9\u3078\u8ee2\u9001\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059 \u3002\u74b0\u5883\u5185\u306e\u5404\u30b5\u30fc\u30d3\u30b9\u306b\u306f\u30eb\u30fc\u30c8\u304c\u3042\u308a\u3001\u30c9\u30e1\u30a4\u30f3\u540d\u306f\u624b\u52d5\u307e\u305f\u306f\u81ea\u52d5\u3067\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u30c8\u30c3\u30d7\u30ec\u30d9\u30eb\u306e routes \u30bb\u30af\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u306f\u3001\u3059\u3079\u3066\u306e\u74b0\u5883\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066\u9069\u7528\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#routesautogenerate","title":"routes.autogenerate","text":"

      \u30eb\u30fc\u30c8\u3092\u81ea\u52d5\u7684\u306b\u4f5c\u6210\u3059\u308b\u3088\u3046\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002\u624b\u52d5\u30eb\u30fc\u30c8\u306f\u74b0\u5883\u3054\u3068\u306b\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002

      • enabled: \u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306f\u3001false\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306ftrue\u3067\u3059\u3002
      • allowPullrequests: \u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u305f\u3081\u306b enabled: false\u3092\u4e0a\u66f8\u304d\u3059\u308b\u306b\u306f\u3001true\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002.lagoon.yml
        routes:\nautogenerate:\nenabled: false\nallowPullrequests: true\n
      • insecure: HTTP\u63a5\u7d9a\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fAllow\u3067\u3059\u3002
        • Allow: \u30eb\u30fc\u30c8\u306fHTTP\u3068HTTPS\u306e\u4e21\u65b9\u306b\u5fdc\u7b54\u3057\u307e\u3059\u3002
        • Redirect: \u30eb\u30fc\u30c8\u306f\u4efb\u610f\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092HTTPS\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002
      • prefixes: \u5404\u74b0\u5883\u306e\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u306e\u30d7\u30ec\u30d5\u30a3\u30af\u30b9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u8a00\u8a9e\u30d7\u30ec\u30d5\u30a3\u30af\u30b9\u30c9\u30e1\u30a4\u30f3\u3084Drupal\u306edomain\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u305f\u30de\u30eb\u30c1\u30c9\u30e1\u30a4\u30f3\u30b5\u30a4\u30c8\u306a\u3069\u306b\u4fbf\u5229\u3067\u3059\u3002

        .lagoon.yml
          routes:\nautogenerate:\nprefixes:\n- www\n- de\n- fr\n- it\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#tasks","title":"\u30bf\u30b9\u30af","text":"

      \u5b9a\u7fa9\u53ef\u80fd\u306a\u30bf\u30b9\u30af\u306b\u306f\u8907\u6570\u306e\u7a2e\u985e\u304c\u3042\u308a\u3001\u305d\u308c\u3089\u306f\u30d3\u30eb\u30c9\u30d5\u30ed\u30fc\u306e\u4e2d\u306e\u3069\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u5b9f\u884c\u3055\u308c\u308b\u304b\u304c\u7570\u306a\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#pre-rollout-tasks-pre_rolloutirun","title":"\u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af - pre_rollout.[i].run","text":"

      \u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f\u5f8c\u3001\u304b\u3064\u3001\u4ee5\u4e0b\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u306e\u524d\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      • \u65b0\u898f\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3067\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u66f4\u65b0\u3055\u308c\u308b
      • \u65e2\u5b58\u306e\u74b0\u5883\u306b\u4ed6\u306e\u5909\u66f4\u304c\u52a0\u3048\u3089\u308c\u308b

      \u3053\u306e\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u3068\u3001\u305f\u3068\u3048\u3070\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u524d\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u4f5c\u6210\u3059\u308b\u306a\u3069\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306e\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002

      \u60c5\u5831

      \u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306f\u3001\u66f4\u65b0\u524d\u306e\u65e2\u5b58\u306e\u30dd\u30c3\u30c9\u5185\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3064\u307e\u308a:

      • \u6700\u5f8c\u306e\u30c7\u30d7\u30ed\u30a4\u4ee5\u964d\u306bDockerfile\u306b\u52a0\u3048\u3089\u308c\u305f\u5909\u66f4\u306f\u3001\u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u304c\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306b\u306f\u53cd\u6620\u3055\u308c\u307e\u305b\u3093\u3002
      • \u65e2\u5b58\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u306a\u3044\u5834\u5408(\u4f8b\u3048\u3070\u3001\u65b0\u3057\u3044\u74b0\u5883\u306e\u521d\u671f\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u6642\u306a\u3069)\u3001\u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306f\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002
      "},{"location":"ja/concepts-basics/lagoon-yml/#post-rollout-tasks-post_rolloutirun","title":"\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af - post_rollout.[i].run","text":"

      \u4ee5\u4e0b\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u306e\u5f8c\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u30bf\u30b9\u30af\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      • \u5168\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u30d3\u30eb\u30c9\u3055\u308c\u308b
      • \u5168\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u65b0\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u3067\u66f4\u65b0\u3055\u308c\u308b
      • readiness\u30c1\u30a7\u30c3\u30af\u3092\u901a\u904e\u3057\u3001\u5168\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u7a3c\u50cd\u3059\u308b

      \u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306e\u4e00\u822c\u7684\u306a\u4f7f\u7528\u4f8b\u306b\u306f\u3001drush updb\u3001drush cim\u306e\u5b9f\u884c\u3084\u3001\u3055\u307e\u3056\u307e\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002

      • name
        • \u540d\u524d\u306f\u3001\u30ed\u30b0\u5185\u306e\u5404\u30bf\u30b9\u30af\u3092\u8b58\u5225\u3059\u308b\u305f\u3081\u306e\u4efb\u610f\u306e\u30e9\u30d9\u30eb\u3067\u3059\u3002
      • command
        • \u3053\u3053\u3067\u306f\u3001\u5b9f\u884c\u3059\u308b\u3079\u304d\u30b3\u30de\u30f3\u30c9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3001\u5404\u30b3\u30f3\u30c6\u30ca\u306eWORKDIR\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002Lagoon\u306e\u30a4\u30e1\u30fc\u30b8\u306e\u5834\u5408\u3001\u3053\u308c\u306f/app\u3067\u3059\u3002\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u7279\u5b9a\u306e\u5834\u6240\u306bcd\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u5ff5\u982d\u306b\u7f6e\u3044\u3066\u304f\u3060\u3055\u3044\u3002
      • service
        • \u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002Drupal\u306e\u4f8b\u306b\u5f93\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u308c\u306fCLI\u30b3\u30f3\u30c6\u30ca\u306b\u306a\u308a\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u306e\u30b3\u30fc\u30c9\u3001\u30d5\u30a1\u30a4\u30eb\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u63a5\u7d9a\u304c\u3059\u3079\u3066\u542b\u307e\u308c\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002\u901a\u5e38\u3001\u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002
      • container
        • \u30b5\u30fc\u30d3\u30b9\u304c\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408(\u4f8b:nginx-php)\u3001\u30dd\u30c3\u30c9\u5185\u3067\u63a5\u7d9a\u3059\u308b\u30b3\u30f3\u30c6\u30ca\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059(\u4f8b:nginx\u30dd\u30c3\u30c9\u5185\u306ephp\u30b3\u30f3\u30c6\u30ca)\u3002
      • shell
        • \u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b7\u30a7\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306fsh\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u304c\u3001\u30b3\u30f3\u30c6\u30ca\u304c\u4ed6\u306e\u30b7\u30a7\u30eb(bash\u306a\u3069)\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u306fsh\u4ee5\u5916\u306e\u30b7\u30a7\u30eb\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u5185\u3067if/else\u3092\u4f7f\u3063\u305f\u5c0f\u3055\u306abash\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002\u8907\u6570\u884c\u306b\u308f\u305f\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u8a18\u8ff0\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3076\u306b\u306f\u4ee5\u4e0b\u306e\u4f8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      • when
        • \u30bf\u30b9\u30af\u306e\u6761\u4ef6\u4ed8\u304d\u5b9f\u884c\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u304b\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001true/false\u306b\u8a55\u4fa1\u3055\u308c\u308b\u5f0f\u3067\u3042\u308b\u3053\u3068\u3092\u671f\u5f85\u3055\u308c\u307e\u3059\u3002

      \u6ce8: \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u4e2d\u306bpre/post-rollout\u30bf\u30b9\u30af\u3092\u4e00\u6642\u7684\u306b\u7121\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001API\u3067\u4ee5\u4e0b\u306e\u74b0\u5883\u5909\u6570\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u307e\u305f\u306f\u74b0\u5883\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff08\u74b0\u5883\u5909\u6570\u306e\u8a2d\u5b9a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3053\u3053\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff09\u3002

      • LAGOON_PREROLLOUT_DISABLED=true
      • LAGOON_POSTROLLOUT_DISABLED=true
      "},{"location":"ja/concepts-basics/lagoon-yml/#example-post-rollout-tasks","title":"post-rollout\u30bf\u30b9\u30af\u306e\u4f8b","text":"

      \u4ee5\u4e0b\u306f\u3044\u304f\u3064\u304b\u306e\u6709\u7528\u306apost-rollout\u30bf\u30b9\u30af\u306e\u4f8b\u3067\u3059\u3002

      Drupal\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af:

      .lagoon.yml
      - run:\n  name: IF no Drupal installed\n  command: | # (1)\nif tables=$(drush sqlq \"show tables like 'node';\") && [ -z \"$tables\" ]; then\n#### whatever you like\nfi\nservice: cli\n  shell: bash\n

      \u30d6\u30e9\u30f3\u30c1\u540d\u306b\u57fa\u3065\u3044\u3066\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af:

      .lagoon.yml
      - run:\nname: Different tasks based on branch name\ncommand: |\n### Runs if current branch is not 'production'\nservice: cli\nwhen: LAGOON_GIT_BRANCH != \"production\"\n

      \u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c:

      .lagoon.yml
      - run:\nname: Run Script\ncommand: './scripts/script.sh'\nservice: cli\n

      \u30dd\u30c3\u30c9\u5185\u306e\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u5bfe\u8c61\u306b\u3059\u308b:

      .lagoon.yml
      - run:\nname: show php env variables\ncommand: env\nservice: nginx\ncontainer: php\n

      Drupal & Drush 9: \u30de\u30b9\u30bf\u30fc\u74b0\u5883\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f:

      .lagoon.yml
      - run:\n    name: Sync DB and Files from master if we are not on master\n    command: |\n# Only if we don't have a database yet\nif tables=$(drush sqlq 'show tables;') && [ -z \"$tables\" ]; then\ndrush sql-sync @lagoon.master @self # (1)\ndrush rsync @lagoon.master:%files @self:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n      fi\nservice: cli\n    when: LAGOON_ENVIRONMENT_TYPE != \"production\"\n
      1. \u3053\u3053\u3067\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u305f\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      "},{"location":"ja/concepts-basics/lagoon-yml/#backup-retention","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u671f\u9593 ( #backup-retention }","text":""},{"location":"ja/concepts-basics/lagoon-yml/#backup-retentionproductionmonthly","title":"backup-retention.production.monthly","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eproduction\u74b0\u5883\u306e\u6708\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u6570\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

      \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 1 \u3067\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#backup-retentionproductionweekly","title":"backup-retention.production.weekly","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eproduction\u74b0\u5883\u306e\u9031\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u6570\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

      \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 6 \u3067\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#backup-retentionproductiondaily","title":"backup-retention.production.daily","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eproduction\u74b0\u5883\u306e\u65e5\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u6570\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

      \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 7 \u3067\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#backup-retentionproductionhourly","title":"backup-retention.production.hourly","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eproduction\u74b0\u5883\u306e\u6bce\u6642\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u6570\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

      \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 0 \u3067\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#backup-schedule","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb","text":""},{"location":"ja/concepts-basics/lagoon-yml/#backup-scheduleproduction","title":"backup-schedule.production","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u305f\u3060\u3057\u3001Minute \u30d6\u30ed\u30c3\u30af\u306f M \u3067\u306a\u3051\u308c\u3070\u306a\u3089\u305a\u3001\u4ed6\u306e\u5024\u306f Lagoon \u30d3\u30eb\u30c9\u306b\u5931\u6557\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u306f\u3053\u308c\u3089\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4f55\u5206\u306b\u884c\u3046\u304b\u30e9\u30f3\u30c0\u30e0\u306b\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u30e6\u30fc\u30b6\u30fc\u306f\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306e\u6b8b\u308a\u306e\u90e8\u5206\u3092\u6642\u9593\u5358\u4f4d\u3067\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002

      \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u30c7\u30d5\u30a9\u30eb\u30c8\u306f M H(22-2) * * * \u3067\u3059\u3002\u6ce8\u610f\u3057\u3066\u9802\u304d\u305f\u3044\u306e\u306f\u3001 \u3053\u308c\u3089\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u3001\u30af\u30e9\u30b9\u30bf\u306e\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#environments","title":"\u74b0\u5883","text":"

      \u74b0\u5883\u540d\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u540d\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u540d\u3068\u4e00\u81f4\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5404\u74b0\u5883\u3067\u7570\u306a\u308b\u8a2d\u5b9a\u3092\u6301\u3064\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u79c1\u305f\u3061\u306e\u4f8b\u3067\u306f\u3001main\u3068staging\u74b0\u5883\u306b\u9069\u7528\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnameroutes","title":"environments.[name].routes","text":"

      \u624b\u52d5\u30eb\u30fc\u30c8\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u6307\u793a\u3059\u308b\u305f\u3081\u306b\u74b0\u5883\u3054\u3068\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30c9\u30e1\u30a4\u30f3\u540d\u3067\u3059\u3002\u3059\u3079\u3066\u306e\u74b0\u5883\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u3001\u624b\u52d5\u30eb\u30fc\u30c8\u306f\u901a\u5e38\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u30e1\u30a4\u30f3\u30c9\u30e1\u30a4\u30f3(www.example.com\u306a\u3069)\u3092\u4f7f\u7528\u3057\u3066\u672c\u756a\u74b0\u5883\u3067\u306e\u307f\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

      \u30d2\u30f3\u30c8

      Lagoon\u306f\u624b\u52d5\u30eb\u30fc\u30c8\u3092\u5236\u5fa1\u3067\u304d\u306a\u3044\u306e\u3067\u3001DNS\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3067DNS\u30ec\u30b3\u30fc\u30c9\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u81ea\u52d5\u30eb\u30fc\u30c8\u3092\u6307\u3059CNAME\u30ec\u30b3\u30fc\u30c9\u3092\u8a2d\u5b9a\u3067\u304d\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      \u74b0\u5883\u306e\u6b21\u306e\u6700\u521d\u306e\u8981\u7d20\u306f\u30bf\u30fc\u30b2\u30c3\u30c8\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308a\u3001\u79c1\u305f\u3061\u306e\u4f8b\u3067\u306fnginx\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002 \u3053\u308c\u306f\u79c1\u305f\u3061\u304c\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u5165\u3063\u3066\u304f\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308b\u304b\u3092\u8b58\u5225\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002

      \u6700\u3082\u5358\u7d14\u306a\u30eb\u30fc\u30c8\u306f example.com\u3067\u3001\u3053\u308c\u306f\u79c1\u305f\u3061\u306e\u4f8b\u306e.lagoon.yml\u3067\u78ba\u8a8d \u3067\u304d\u307e\u3059 - \u8ffd\u52a0\u306e\u8a2d\u5b9a\u304c\u306a\u3044\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u3042\u306a\u305f\u304c\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066Let's Encrypt\u8a3c\u660e\u66f8\u3092\u671b\u3093\u3067\u3044\u308b\u3068\u4eee\u5b9a\u3057\u3001HTTPS\u304b\u3089HTTP\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      \u4ee5\u4e0b\u306e\"www.example.com\"\u306e\u4f8b\u3067\u306f\u3001\u3055\u3089\u306b3\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059(\u307e\u305f\u3001\u30eb\u30fc\u30c8\u306e\u7d42\u308f\u308a\u306b\u3042\u308b:\u3068\u3001\u30eb\u30fc\u30c8\u304c\"\u3067\u56f2\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u3053\u308c\u306f\u91cd\u8981\u3067\u3059\uff01):

      .lagoon.yml
      - \"www.example.com\":\ntls-acme: true\ninsecure: Redirect\nhstsEnabled: true\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#ssl-configuration-tls-acme","title":"SSL\u8a2d\u5b9a tls-acme","text":"

      \u8b66\u544a

      tls-acme: true\u304b\u3089tls-acme: false\u306b\u5207\u308a\u66ff\u3048\u308b\u3068\u3001\u3053\u306e\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066\u4ee5\u524d\u306b\u751f\u6210\u3055\u308c\u305f\u8a3c\u660e\u66f8\u304c\u3059\u3079\u3066\u524a\u9664\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5916\u90e8\u306eCDN\u3092\u4f7f\u7528\u3057\u3066\u3044\u3066\u8a3c\u660e\u66f8\u306e\u30d4\u30f3\u7559\u3081\u3092\u884c\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u4e88\u671f\u3057\u306a\u3044\u6319\u52d5\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      • tls-acme:Let's Encrypt\u3092\u901a\u3058\u305f\u81ea\u52d5TLS\u8a3c\u660e\u66f8\u751f\u6210\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306ftrue\u3067\u3001\u81ea\u52d5\u8a3c\u660e\u66f8\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306ffalse\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
      • insecure:HTTP\u63a5\u7d9a\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fAllow\u3067\u3059\u3002
        • Allow:\u30eb\u30fc\u30c8\u306fHTTP\u3068HTTPS\u306b\u5fdc\u7b54\u3057\u307e\u3059\u3002
        • Redirect:\u30eb\u30fc\u30c8\u306f\u3059\u3079\u3066\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092HTTPS\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002
      • hstsEnabled: Strict-Transport-Security\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f false\u3067\u3059\u3002
      • hstsMaxAge: max-age\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 31536000 (1 \u5e74)\u3067\u3059\u3002
      • hstsPreload: preload\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f false\u3067\u3059\u3002
      • hstsIncludeSubdomains: includeSubDomains\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f false\u3067\u3059\u3002

      \u60c5\u5831

      \u8a3c\u660e\u66f8\u8a8d\u8a3c\u6a5f\u95a2(CA)\u306b\u3088\u3063\u3066\u7f72\u540d\u3055\u308c\u305fSSL\u8a3c\u660e\u66f8\u304b\u3089Let's Encrypt\u8a3c\u660e\u66f8\u306b\u5207\u308a\u66ff\u3048\u308b\u4e88\u5b9a\u306e\u5834\u5408\u3001\u79fb\u884c\u3092\u76e3\u8996\u3059\u308b\u305f\u3081\u306bLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#monitoring-a-specific-path","title":"\u7279\u5b9a\u306e\u30d1\u30b9\u306e\u76e3\u8996","text":"

      UptimeRobot\u304c\u3042\u306a\u305f\u306e\u30af\u30e9\u30b9\u30bf\u30fc(Kubernetes\u307e\u305f\u306fOpenShift)\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001Lagoon\u306f\u5404\u30eb\u30fc\u30c8/\u30a4\u30f3\u30b0\u30ec\u30b9\u306bannotation\u3092\u8a2d\u5b9a\u3057\u3066stakater/IngressControllerMonitor\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u306f\u30eb\u30fc\u30c8\u306e\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u3092\u76e3\u8996\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u7279\u5b9a\u306e\u30eb\u30fc\u30c8\u3092\u76e3\u8996\u3057\u305f\u3044\u5834\u5408\u3001\u30eb\u30fc\u30c8\u4ed5\u69d8\u306bmonitoring-path\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3053\u308c\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u304d\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u4f7f\u7528\u6cd5\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u3092\u30d0\u30a4\u30d1\u30b9\u3059\u308b\u76e3\u8996\u7528\u306e\u30d1\u30b9\u3092\u8a2d\u5b9a\u3057\u3001\u30b5\u30a4\u30c8\u306e\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u76e3\u8996\u3092\u53ef\u80fd\u306b\u3059\u308b\u3053\u3068\u3067\u3059\u3002

      .lagoon.yml
      - \"www.example.com\":\nmonitoring-path: \"/bypass-cache\"\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#ingress-annotations","title":"Ingress annotations","text":"

      \u8b66\u544a

      \u30eb\u30fc\u30c8/Ingress\u306eannotations\u306f\u3001nginx-ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u5b9f\u884c\u3059\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u307f\u304c\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306fLagoon\u7ba1\u7406\u8005\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      • annotations\u306f\u3001nginx-ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308bannotations\u306eYAML\u30de\u30c3\u30d7\u3067\u3059\u3002\u3053\u308c\u306f\u7279\u306b\u3001\u7c21\u5358\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3084\u4ed6\u306e\u8a2d\u5b9a\u306b\u4fbf\u5229\u3067\u3059\u3002
      "},{"location":"ja/concepts-basics/lagoon-yml/#restrictions","title":"\u5236\u9650\u4e8b\u9805","text":"

      Lagoon\u3067\u306f\u3001\u4e00\u90e8\u306eannotations\u304c\u7981\u6b62\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u307e\u305f\u306f\u90e8\u5206\u7684\u306b\u5236\u9650\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u4ee5\u4e0b\u306e\u8868\u306f\u3001\u3053\u308c\u3089\u306e\u30eb\u30fc\u30eb\u3092\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u3002

      \u3042\u306a\u305f\u306e.lagoon.yml\u304c\u3053\u308c\u3089\u306eannotations\u306e\u3044\u305a\u308c\u304b\u3092\u542b\u3093\u3067\u3044\u308b\u5834\u5408\u3001\u30d3\u30eb\u30c9\u304c\u5931\u6557\u3059\u308b\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002

      \u6ce8\u91c8 \u30ce\u30fc\u30c8 nginx.ingress.kubernetes.io/auth-snippet \u7981\u6b62 nginx.ingress.kubernetes.io/configuration-snippet rewrite\u3001add_header\u3001set_real_ip\u3001\u304a\u3088\u3073 more_set_headers \u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u306b\u5236\u9650\u3055\u308c\u3066\u3044\u307e\u3059\u3002 nginx.ingress.kubernetes.io/modsecurity-snippet \u7981\u6b62 nginx.ingress.kubernetes.io/server-snippet rewrite\u3001add_header\u3001set_real_ip\u3001\u304a\u3088\u3073 more_set_headers \u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u306b\u5236\u9650\u3055\u308c\u3066\u3044\u307e\u3059\u3002 nginx.ingress.kubernetes.io/stream-snippet \u7981\u6b62 nginx.ingress.kubernetes.io/use-regex \u7981\u6b62"},{"location":"ja/concepts-basics/lagoon-yml/#ingress-annotations-redirects","title":"Ingress\u306eannotations\u30ea\u30c0\u30a4\u30ec\u30af\u30c8","text":"

      \u3053\u306e\u4f8b\u3067\u306f\u3001example.ch\u3078\u306e\u4efb\u610f\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u3001\u30d5\u30a9\u30eb\u30c0\u30fc\u3084\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4fdd\u6301\u3057\u305f\u307e\u307e https://www.example.ch\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u307e\u3059(example.com/folder?query -> https://www.example.ch/folder?query)\u3002

      .lagoon.yml
      - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\n

      Lagoon\u306b\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u4ed6\u306e\u4efb\u610f\u306eURL\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002 \u4ee5\u4e0b\u306fexample.de\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092https://www.google.com\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002

      .lagoon.yml
      - \"example.de\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#trusted-reverse-proxies","title":"\u4fe1\u983c\u3055\u308c\u308b\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7","text":"

      \u8b66\u544a

      Kubernetes\u306f\u5358\u4e00\u306enginx.ingress.kubernetes.io/server-snippet\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u307f\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\u975e\u672c\u756a\u74b0\u5883\u306e\u30eb\u30fc\u30c8\u3067\u3053\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001add_header X-Robots-Tag \"noindex, nofollow\";\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3082\u30b5\u30fc\u30d0\u30fc\u30b9\u30cb\u30da\u30c3\u30c8\u306e\u4e00\u90e8\u3068\u3057\u3066\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u3001\u958b\u767a\u74b0\u5883\u3067\u30ed\u30dc\u30c3\u30c8\u304c\u30af\u30ed\u30fc\u30eb\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u306b\u5fc5\u8981\u3067\u3059\u3002ingress\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u958b\u767a\u74b0\u5883\u3067\u3053\u308c\u3092\u9632\u3050\u305f\u3081\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30c7\u30d5\u30a9\u30eb\u30c8\u306eserver-snippet\u306f\u3001.lagoon.yml\u306b\u8a2d\u5b9a\u3055\u308c\u305fserver-snippets\u306b\u3088\u3063\u3066\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002

      \u4e00\u90e8\u306e\u8a2d\u5b9a\u3067\u306f\u3001\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7(CDN\u306a\u3069)\u304cKubernetes\u30af\u30e9\u30b9\u30bf\u306e\u524d\u306b\u914d\u7f6e\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3067\u306f\u3001\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u306eIP\u304c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eREMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR\u30d8\u30c3\u30c0\u30fc\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30ea\u30af\u30a8\u30b9\u30bf\u30fc\u306e\u30aa\u30ea\u30b8\u30ca\u30ebIP\u306fHTTP_X_ORIGINAL_FORWARDED_FOR\u30d8\u30c3\u30c0\u30fc\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002

      \u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u30ea\u30af\u30a8\u30b9\u30c8IP\u3092\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u3001 REMOTE_ADDR HTTP_X_FORWARDED_FOR HTTP_X_REAL_IP \u30d8\u30c3\u30c0\u30fc\u306b\u5143\u306eIP\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001\u4fe1\u983c\u3059\u308b\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u306eIP\u3092\u30a4\u30f3\u30b0\u30ec\u30b9\u306b\u4f1d\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      .lagoon.yml
      - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/server-snippet: |\nset_real_ip_from 1.2.3.4/32;\n

      \u3053\u306e\u4f8b\u3067\u306f\u3001CIDR 1.2.3.4/32(\u3053\u306e\u5834\u5408\u306fIP 1.2.3.4)\u3092\u4fe1\u983c\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001IP 1.2.3.4 \u304b\u3089Kubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u308b\u3068\u3001X-Forwarded-For \u30d8\u30c3\u30c0\u30fc\u304c\u5206\u6790\u3055\u308c\u3001\u305d\u306e\u5185\u5bb9\u304c REMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR \u30d8\u30c3\u30c0\u30fc\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnametypes","title":"Environments.[name].types","text":"

      Lagoon\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089lagoon.type\u30e9\u30d9\u30eb\u3092\u8abf\u3079\u3066\u3001\u3069\u306e\u7a2e\u985e\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3079\u304d\u304b\u3092\u5b66\u7fd2\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

      \u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u5168\u74b0\u5883\u3067\u306f\u306a\u304f\u3001\u5358\u4e00\u306e\u74b0\u5883\u3060\u3051\u3067type\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3082\u3057\u3001\u30b5\u30fc\u30d3\u30b9\u30d6\u30ed\u30fc\u30ab\u30fc/\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306b\u5171\u6709\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u305b\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u958b\u767a\u74b0\u5883\u3067\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eMariaDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002

      service-name: service-type

      • service-name\u306f\u3001docker-compose.yml\u304b\u3089\u4e0a\u66f8\u304d\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059
      • service-type\u306f\u3001\u4e0a\u66f8\u304d\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3067\u3059

      MariaDB_Galera\u306e\u8a2d\u5b9a\u4f8b:

      .lagoon.yml
      environments:\ndevelop:\ntypes:\nmariadb: mariadb-single\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnametemplates","title":"environments.[name].templates","text":"

      Lagoon\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089lagoon.template\u30e9\u30d9\u30eb\u3092\u8abf\u3079\u3066\u3001\u30b5\u30fc\u30d3\u30b9\u304c\u30ab\u30b9\u30bf\u30e0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

      \u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u306f\u306a\u304f\u3001\u7279\u5b9a\u306e\u74b0\u5883\u3060\u3051\u3067\u4e0a\u66f8\u304d\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059:

      service-name: template-file

      • service-name\u306f\u3001docker-compose.yml\u304b\u3089\u4e0a\u66f8\u304d\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059\u3002
      • template-file\u306f\u3001\u3053\u306e\u74b0\u5883\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u4f7f\u7528\u3059\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30d1\u30b9\u3068\u540d\u524d\u3067\u3059\u3002
      "},{"location":"ja/concepts-basics/lagoon-yml/#example-template-override","title":"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4e0a\u66f8\u304d\u306e\u4f8b","text":".lagoon.yml
      environments:\nmain:\ntemplates:\nmariadb: mariadb.main.deployment.yml\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#environments-name-rollouts","title":"environments.[name].rollouts","text":"

      Lagoon\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9 lagoon.rollout\u30e9\u30d9\u30eb\u3092docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8abf\u3079\u3066\u3001\u30b5\u30fc\u30d3\u30b9\u304c\u7279\u5225\u306a\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30a4\u30d7\u3092\u5fc5\u8981\u3068\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

      \u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u7279\u306b\u74b0\u5883\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30bf\u30a4\u30d7\u3092\u4e0a\u66f8\u304d\u3057\u305f\u5834\u5408\u306b\u306f\u3001\u5358\u4e00\u306e\u74b0\u5883\u3060\u3051\u3067\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30a4\u30d7\u3092\u4e0a\u66f8\u304d\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002

      service-name: rollout-type

      • service-name\u306f\u3001\u4e0a\u66f8\u304d\u3057\u305f\u3044docker-compose.yml\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059\u3002
      • rollout-type\u306f\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002\u53ef\u80fd\u306a\u5024\u306b\u3064\u3044\u3066\u306f\u3001docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      "},{"location":"ja/concepts-basics/lagoon-yml/#custom-rollout-type-example","title":"\u30ab\u30b9\u30bf\u30e0\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30a4\u30d7\u306e\u4f8b","text":".lagoon.yml
      environments:\nmain:\nrollouts:\nmariadb: statefulset\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnameautogenerateroutes","title":"environments.[name].autogenerateRoutes","text":"

      \u30eb\u30fc\u30c8\u306e\u81ea\u52d5\u751f\u6210\u304c\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u5834\u5408\u3067\u3082\u3001\u74b0\u5883\u3054\u3068\u306b\u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      .lagoon.yml
      routes:\nautogenerate:\nenabled: false\nenvironments:\ndevelop:\nautogenerateRoutes: true\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnamecronjobs","title":"environments.[name].cronjobs","text":"

      Cron\u30b8\u30e7\u30d6\u306f\u3001\u901a\u5e38\u3001\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u540c\u3058\u3082\u306e\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u671b\u307e\u3057\u304f\u306a\u3044\u305f\u3081\u3001\u5404\u74b0\u5883\u3067\u660e\u793a\u7684\u306b\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5b9a\u7fa9\u3057\u305f\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306b\u3088\u308a\u3001Cron\u30b8\u30e7\u30d6\u306fKubernetes\u30cd\u30a4\u30c6\u30a3\u30d6\u306eCronJob\u3068\u3057\u3066\u3001\u307e\u305f\u306f\u5b9a\u7fa9\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u306ecrontab\u3092\u4ecb\u3057\u305fin-pod cron\u30b8\u30e7\u30d6\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#cron-job-example","title":"Cron\u30b8\u30e7\u30d6\u306e\u4f8b","text":".lagoon.yml
      cronjobs:\n- name: Hourly Drupal Cron\nschedule: \"M * * * *\" # 1\u6642\u9593\u3054\u3068, \u4f55\u5206\u306a\u306e\u304b\u306f\u30e9\u30f3\u30c0\u30e0.\ncommand: drush cron\nservice: cli\n- name: Nightly Drupal Cron\nschedule: \"M 0 * * *\" # 1\u65e5\u3054\u3068, \u4f55\u5206\u306a\u306e\u304b\u306f\u300100:00\u304b\u308900:59\u306e\u9593\u306e\u30e9\u30f3\u30c0\u30e0.\ncommand: drush cron\nservice: cli\n
      • name: \u4ed6\u306ecron\u30b8\u30e7\u30d6\u3068\u533a\u5225\u3057\u3001\u76ee\u7684\u3092\u7279\u5b9a\u3059\u308b\u305f\u3081\u306e\u4efb\u610f\u306e\u540d\u524d
      • schedule: cron\u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3002Lagoon\u306f\u3001crontab\u5f62\u5f0f\u306e\u62e1\u5f35\u7248\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u69cb\u6587\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001crontab generator\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        • \u5206\u306bM\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001cron\u30b8\u30e7\u30d6\u306f \u30e9\u30f3\u30c0\u30e0\u306a\u5206(\u6bce\u6642\u9593\u540c\u3058\u5206)\u306b1\u6642\u9593\u3054\u3068\u306b\u5b9f\u884c\u3059\u308b\u304b\u3001M/15\u3092\u6307\u5b9a\u3057\u306615\u5206\u3054\u3068\u306b\u5b9f\u884c\u3059\u308b\u304c\u3001\u6642\u9593\u304b\u3089\u306e\u30e9\u30f3\u30c0\u30e0\u306a\u30aa\u30d5\u30bb\u30c3\u30c8(6,21,36,51\u306e\u3088\u3046\u306a)\u3067\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066cron\u30b8\u30e7\u30d6\u3092\u5206\u6563\u3055\u305b\u308b\u3053\u3068\u306f\u3001\u3059\u3079\u3066\u306e\u30b8\u30e7\u30d6\u3092\u52060\u3067\u4e00\u6589\u306b\u5b9f\u884c\u3059\u308b\u3088\u308a\u3082\u826f\u3044\u65b9\u6cd5\u3067\u3059\u3002
        • H\u3092\u6642\u9593\u306b\u6307\u5b9a\u3059\u308b\u3068\u3001cron\u30b8\u30e7\u30d6\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u6642\u9593(\u6bce\u65e5\u540c\u3058\u6642\u9593)\u306b1\u65e51\u56de\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u307e\u305f\u3001H(2-4)\u3092\u6307\u5b9a\u3059\u308b\u3068\u30012\u6642\u304b\u30894\u6642\u306e\u9593\u306b1\u65e51\u56de\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002

      \u30bf\u30a4\u30e0\u30be\u30fc\u30f3:

      • cron\u30b8\u30e7\u30d6\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306fUTC\u3067\u3059\u3002
      • \u30cd\u30a4\u30c6\u30a3\u30d6\u306ecron\u30b8\u30e7\u30d6\u306f\u30ce\u30fc\u30c9\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u3001\u305d\u308c\u306fUTC\u3067\u3059\u3002
      • In-pod\u306ecron\u30b8\u30e7\u30d6\u306f\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u3001UTC\u4ee5\u5916\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
      • command:\u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30b5\u30fc\u30d3\u30b9\u306eWORKDIR\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002Lagoon\u30a4\u30e1\u30fc\u30b8\u306e\u5834\u5408\u3001\u3053\u308c\u306f/app\u3067\u3059\u3002

      \u8b66\u544a

      Cron\u30b8\u30e7\u30d6\u306f\u3001crontab\u3092\u4ecb\u3057\u3066Pod\u5185\u3067\u5b9f\u884c\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u8907\u6570\u884c\u306e\u30b3\u30de\u30f3\u30c9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u8907\u96d1\u306a\u307e\u305f\u306f\u8907\u6570\u884c\u306ecron\u30b3\u30de\u30f3\u30c9\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001\u30b3\u30de\u30f3\u30c9\u3068\u3057\u3066\u4f7f\u7528\u53ef\u80fd\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u7528\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u307e\u305f\u306f\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8 \u30bf\u30b9\u30af \u304c\u6a5f\u80fd\u3059\u308b\u304b\u3069\u3046\u304b\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u5371\u967a

      Cron\u30b8\u30e7\u30d6\u306fKubernetes\u306e\u30dd\u30c3\u30c9\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u304c\u3001\u30dd\u30c3\u30c9\u306e\u518d\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0\u306b\u3088\u308a\u4e2d\u65ad\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001cron\u30b8\u30e7\u30d6\u3092\u4f5c\u6210\u3059\u308b\u969b\u306b\u306f\u3001\u6b21\u306ecron\u30a4\u30f3\u30bf\u30fc\u30d0\u30eb\u3067\u30b3\u30de\u30f3\u30c9\u3092\u5b89\u5168\u306b\u4e2d\u65ad\u3057\u3001\u518d\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      • service:\u30b3\u30de\u30f3\u30c9\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u5b9f\u884c\u3059\u308b\u304b\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u3053\u308c\u306fcli\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002
      "},{"location":"ja/concepts-basics/lagoon-yml/#polysite","title":"\u30dd\u30ea\u30b5\u30a4\u30c8 { #polysite )","text":"

      Lagoon\u3067\u306f\u3001\u540c\u3058Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u3053\u308c\u3092\u30dd\u30ea\u30b5\u30a4\u30c8\u3068\u547c\u3073\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u540c\u3058\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3092\u5b9f\u884c\u3057\u306a\u304c\u3089\u3001\u7570\u306a\u308b\u72ec\u7acb\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u6c38\u7d9a\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u8a31\u53ef\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 .lagoon.yml\u3067\u306f\u3001\u73fe\u5728\u3001\u30dd\u30ea\u30b5\u30a4\u30c8\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u305f\u3081\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u6a19\u6e96\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u306e\u4e3b\u306a\u9055\u3044\u306f\u3001environments\u304c\u4e8c\u6b21\u5143\u8981\u7d20\u3068\u306a\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u304c\u6700\u4e0a\u4f4d\u8981\u7d20\u3068\u306a\u308b\u3053\u3068\u3067\u3059\u3002

      \u3053\u308c\u3092\u5229\u7528\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u3092\u8e0f\u3080\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      1. Lagoon\u306b2\u3064(\u4ee5\u4e0a)\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001\u305d\u308c\u305e\u308c\u306b\u540c\u3058Git URL\u3068\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u30d6\u30e9\u30f3\u30c1\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3042\u306a\u305f\u306e.lagoon.yml\u306b\u5f93\u3063\u3066\u547d\u540d\u3055\u308c\u307e\u3059(\u4f8b:poly-project1 \u3068 poly-project2)
      2. \u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002
      3. (\u3082\u3057\u5fc5\u8981\u306a\u3089)\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u8a2d\u5b9a\u3057\u307e\u3059 - \u305d\u306e\u5f8c\u3001\u30d7\u30c3\u30b7\u30e5/\u30c7\u30d7\u30ed\u30a4\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u30d7\u30c3\u30b7\u30e5\u306f\u3001\u305d\u306eGit URL\u306b\u5bfe\u3059\u308b\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/\u30d6\u30e9\u30f3\u30c1\u3092\u540c\u6642\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002
      "},{"location":"ja/concepts-basics/lagoon-yml/#polysite-example","title":"Polysite\u306e\u4f8b","text":".lagoon.yml
      poly-project1:\nenvironments:\nmain:\nroutes:\n- nginx:\n- project1.com\npoly-project2:\nenvironments:\nmain:\nroutes:\n- nginx:\n- project2.com\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#specials","title":"\u7279\u5225\u306a\u9805\u76ee","text":""},{"location":"ja/concepts-basics/lagoon-yml/#api","title":"api","text":"\u60c5\u5831

      amazee.io\u306b\u30db\u30b9\u30c8\u3055\u308c\u305fLagoon\u3067\u76f4\u63a5\u52d5\u4f5c\u3059\u308b\u5834\u5408\u3001\u3053\u306e\u30ad\u30fc\u306f\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      api\u30ad\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001Lagoon CLI\u3068drush\u304cLagoon GraphQL API\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u5225\u306eURL\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u30b9\u30ad\u30fc\u30e0\u4ed8\u304d\u306e\u5b8c\u5168\u306aURL\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b:http://localhost:3000 \u3053\u308c\u306f\u901a\u5e38\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001Lagoon\u306e\u7ba1\u7406\u8005\u304c\u305d\u3046\u3059\u308b\u3088\u3046\u6307\u793a\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#ssh","title":"ssh","text":"\u60c5\u5831

      amazee.io\u306b\u30db\u30b9\u30c8\u3055\u308c\u305fLagoon\u3067\u76f4\u63a5\u52d5\u4f5c\u3059\u308b\u5834\u5408\u3001\u3053\u306e\u30ad\u30fc\u306f\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      ssh\u30ad\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001Lagoon CLI\u3068drush\u304cLagoon\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u5225\u306eSSH\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u30b3\u30ed\u30f3\u3067\u533a\u5207\u3089\u308c\u305f\u30db\u30b9\u30c8\u540d\u3068\u30dd\u30fc\u30c8\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b:localhost:2020 \u3053\u308c\u306f\u901a\u5e38\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001Lagoon\u306e\u7ba1\u7406\u8005\u304c\u305d\u3046\u3059\u308b\u3088\u3046\u6307\u793a\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#container-registries","title":"container-registries","text":"

      container-registries \u30d6\u30ed\u30c3\u30af\u3067\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u307e\u305f\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u30a4\u30e1\u30fc\u30b8\u3092\u30d7\u30eb\u3059\u308b\u305f\u3081\u306e\u72ec\u81ea\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001username\u3001password\u3001\u304a\u3088\u3073\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u30ec\u30b8\u30b9\u30c8\u30ea\u306e url \u304c\u5fc5\u8981\u3067\u3059\u3002YAML\u3067 url \u3092\u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067Docker Hub\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u30a8\u30f3\u30c8\u30ea\u306b\u8aac\u660e\u3092\u8ffd\u52a0\u3057\u3066\u3001\u60c5\u5831\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u306e\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059

      \u30ec\u30b8\u30b9\u30c8\u30ea\u30e6\u30fc\u30b6\u30fc\u306b\u4f7f\u7528\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u306f2\u3064\u3042\u308a\u307e\u3059\u3002

      • API\u3067\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b
      • .lagoon.yml\u30d5\u30a1\u30a4\u30eb\u306b\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3059\u308b\uff08\u305f\u3060\u3057\u3001\u3053\u308c\u306f\u63a8\u5968\u3057\u307e\u305b\u3093\uff09
      "},{"location":"ja/concepts-basics/lagoon-yml/#environment-variables-method","title":"\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5","text":"

      \u307e\u305a\u3001.lagoon.yml\u306b\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u30e6\u30fc\u30b6\u30fc\u540d\u3084\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30ab\u30b9\u30bf\u30e0\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3067\u3082\u3001URL\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u6b21\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3057\u307e\u3059:

      .lagoon.yml
      container-registries:\ndocker-hub:\ndescription: \"\u30c7\u30d5\u30a9\u30eb\u30c8\u306edocker.io\u30ec\u30b8\u30b9\u30c8\u30ea\u7528\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\"\nmy-custom-registry:\ndescription: \"\u30ab\u30b9\u30bf\u30e0\u30ec\u30b8\u30b9\u30c8\u30ea\u7528\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\"\nurl: my.own.registry.com\nanother-custom-registry:\ndescription: \"\u4ed6\u306e\u30ec\u30b8\u30b9\u30c8\u30ea\u7528\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\"\nusername: myotheruser\nurl: my.other.registry.com\n

      .lagoon.yml\u306b\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5b9a\u7fa9\u3059\u308b\u5834\u5408\u3001\u95a2\u9023\u3059\u308b\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u305f\u3060\u3057\u3001\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u5834\u5408\u3001\u305d\u306e\u5909\u6570\u306e\u5024\u304c\u512a\u5148\u3055\u308c\u307e\u3059\u3002

      \u6b21\u306b\u3001Lagoon API\u3067container_registry\u30bf\u30a4\u30d7\u306e\u74b0\u5883\u5909\u6570\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

      • lagoon add variable -p <\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d> -N <\u30ec\u30b8\u30b9\u30c8\u30ea\u30e6\u30fc\u30b6\u30fc\u306e\u5909\u6570\u540d> -V <\u30e6\u30fc\u30b6\u30fc> -S container_registry
      • lagoon add variable -p <\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d> -N <\u30ec\u30b8\u30b9\u30c8\u30ea\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5909\u6570\u540d> -V <\u30d1\u30b9\u30ef\u30fc\u30c9> -S container_registry
      • (\u8a73\u3057\u304f\u306f\u74b0\u5883\u5909\u6570\u3092\u53c2\u7167)

      \u5909\u6570\u306e\u540d\u524d\u306f.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u540d\u524d\u3068\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u6b21\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\uff1a

      • \u5927\u6587\u5b57\u3067\u8a18\u8ff0\u3059\u308b
      • \u30cf\u30a4\u30d5\u30f3\uff08-\uff09\u3092\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\uff08_\uff09\u306b\u7f6e\u304d\u63db\u3048\u308b
      • \u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u306bREGISTRY_\u3092\u4ed8\u3051\u308b
      • \u30b5\u30d5\u30a3\u30c3\u30af\u30b9\u306b_USERNAME\u307e\u305f\u306f_PASSWORD\u3092\u4ed8\u3051\u308b

      \u3044\u304f\u3064\u304b\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a

      • dockerhub\u306fREGISTRY_DOCKERHUB_USERNAME\u304a\u3088\u3073REGISTRY_DOCKERHUB_PASSWORD\u306b\u306a\u308a\u307e\u3059\u3002
      • docker-hub\u306fREGISTRY_DOCKER_HUB_USERNAME\u304a\u3088\u3073REGISTRY_DOCKER_HUB_PASSWORD\u306b\u306a\u308a\u307e\u3059\u3002
      • my-custom-registry\u306fREGISTRY_MY_CUSTOM_REGISTRY_USERNAME\u304a\u3088\u3073REGISTRY_MY_CUSTOM_REGISTRY_PASSWORD\u306b\u306a\u308a\u307e\u3059\u3002
      • \u30cf\u30a4\u30d5\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u5c0f\u6587\u5b57\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\uff08\u4f8b\uff1aREGISTRY_dockerhub_USERNAME\uff09\u3082\u52d5\u4f5c\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u5e38\u306b\u5927\u6587\u5b57\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u512a\u5148\u3055\u308c\u307e\u3059\u3002
      Legacy method of defining registry password

      \u4ee5\u524d\u306f\u3001\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u3053\u306e\u5834\u5408\u3001\u5909\u6570\u540d\u306f.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u6b21\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3055\u308c\u307e\u3059\uff1a .lagoon.yml

      container-registries:\ndocker-hub:\nusername: dockerhubuser\npassword: MY_DOCKER_HUB_PASSWORD\n

      \u30e6\u30fc\u30b6\u30fc\u540d\u3082\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5909\u6570\u3067\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5b9a\u7fa9\u3059\u308b\u5834\u5408\u306f\u305d\u306e\u9650\u308a\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      \u5909\u6570\u306f\u6b21\u306e\u3088\u3046\u306bAPI\u306b\u8ffd\u52a0\u3067\u304d\u307e\u3059\uff1a

      • lagoon add variable -p <\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d> -N MY_DOCKER_HUB_PASSWORD -V <\u30d1\u30b9\u30ef\u30fc\u30c9> -S container_registry

      \u3053\u306e\u65b9\u6cd5\u306f\u5f15\u304d\u7d9a\u304d\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3059\u304c\u3001\u5c06\u6765\u7684\u306b\u975e\u63a8\u5968\u3068\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u65b9\u6cd5\u306b\u5909\u66f4\u3059\u308b\u6642\u9593\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u3001\u30d3\u30eb\u30c9\u5185\u3067\u8b66\u544a\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002

      \u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5909\u6570\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30ab\u30b9\u30bf\u30e0\u540d\u306e\u5909\u6570\u306e\u4ee3\u308f\u308a\u306b\u305d\u308c\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/lagoon-yml/#hardcoded-values-method","title":"\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3055\u308c\u305f\u5024\u306e\u65b9\u6cd5","text":"

      \u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u304c\u3001.lagoon.yml \u30d5\u30a1\u30a4\u30eb\u306b\u76f4\u63a5\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

      .lagoon.yml
      container-registries:\ndocker-hub:\ndescription: \"\u30c7\u30d5\u30a9\u30eb\u30c8\u306edocker.io\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u8a8d\u8a3c\u60c5\u5831\"\nusername: dockerhubuser\npassword: MySecretPassword\nmy-custom-registry:\ndescription: \"\u81ea\u5206\u306e\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u8a8d\u8a3c\u60c5\u5831\"\nurl: my.own.registry.com\nusername: mycustomuser\npassword: MyCustomSecretPassword\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#consuming-a-custom-or-private-container-registry-image","title":"\u30ab\u30b9\u30bf\u30e0\u307e\u305f\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u30a4\u30e1\u30fc\u30b8\u306e\u4f7f\u7528","text":"

      \u30ab\u30b9\u30bf\u30e0\u307e\u305f\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u5185\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u66f4\u65b0\u3057\u3066\u3001\u30a4\u30e1\u30fc\u30b8\u3092\u5b9a\u7fa9\u3059\u308b\u4ee3\u308f\u308a\u306b\u30d3\u30eb\u30c9\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

      .docker-compose.yml
      services:\nmariadb:\nbuild:\ncontext: .\ndockerfile: Dockerfile.mariadb\n

      docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u304c\u30d3\u30eb\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u66f4\u65b0\u3055\u308c\u305f\u3089\u3001 Dockerfile.<service> \u3092\u4f5c\u6210\u3057\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30a4\u30e1\u30fc\u30b8\u3092 FROM <repo>/<name>:<tag> \u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      .lagoon.yml
      FROM dockerhubuser/my-private-database:tag\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#example-lagoonyml","title":".lagoon.yml \u306e\u4f8b","text":"

      \u3053\u308c\u306f\u5168\u3066\u306e\u53ef\u80fd\u306a\u8a2d\u5b9a\u3092\u793a\u3057\u305f .lagoon.yml \u306e\u4f8b\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5408\u308f\u305b\u3066\u8abf\u6574\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      .lagoon.yml
      docker-compose-yaml: docker-compose.yml\nenvironment_variables:\ngit_sha: 'true'\ntasks:\npre-rollout:\n- run:\nname: drush sql-dump\ncommand: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz\nservice: cli\npost-rollout:\n- run:\nname: drush cim\ncommand: drush -y cim\nservice: cli\nshell: bash\n- run:\nname: drush cr\ncommand: drush -y cr\nservice: cli\nroutes:\nautogenerate:\ninsecure: Redirect\nenvironments:\nmain:\nroutes:\n- nginx:\n- example.com\n- example.net\n- \"www.example.com\":\ntls-acme: true\ninsecure: Redirect\nhstsEnabled: true\n- \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\ntypes:\nmariadb: mariadb\ntemplates:\nmariadb: mariadb.main.deployment.yml\nrollouts:\nmariadb: statefulset\ncronjobs:\n- name: drush cron\nschedule: \"M * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nstaging:\ncronjobs:\n- name: drush cron\nschedule: \"M * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nfeature/feature-branch:\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\n
      "},{"location":"ja/concepts-basics/lagoon-yml/#deprecated","title":"\u975e\u63a8\u5968","text":"

      \u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306f\u975e\u63a8\u5968\u3068\u306a\u308a\u3001\u3042\u306a\u305f\u306e .lagoon.yml \u304b\u3089\u524a\u9664\u3059\u308b\u3079\u304d\u3067\u3059\u3002

      • routes.autogenerate.insecure

        None \u30aa\u30d7\u30b7\u30e7\u30f3\u306f Redirect \u3068\u540c\u7b49\u3067\u3059\u3002

      • environments.[name].monitoring_urls
      • environments.[name].routes.[service].[route].hsts
      • environments.[name].routes.[service].[route].insecure

        None \u30aa\u30d7\u30b7\u30e7\u30f3\u306f Redirect \u3068\u540c\u7b49\u3067\u3059\u3002

      "},{"location":"ja/concepts-basics/building-blocks/deploy-targets/","title":"\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8","text":"

      \u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8 \u306f\u3001Lagoon\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u3069\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u304b\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u4e00\u3064\u307e\u305f\u306f\u305d\u308c\u4ee5\u4e0a\u306e\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u3001\u4f8b\u3048\u3070\u3001\u4e00\u3064\u306f\u672c\u756a\u7528\u3001\u3082\u3046\u4e00\u3064\u306f\u30c6\u30b9\u30c8\u7528\u3068\u3044\u3063\u305f\u5177\u4f53\u7684\u306a\u4f7f\u3044\u5206\u3051\u304c\u53ef\u80fd\u3067\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3078\u306e\u5bfe\u5fdc\u306a\u3069\u3001\u3055\u307e\u3056\u307e\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

      \u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aad\u3080\u3002

      "},{"location":"ja/concepts-basics/building-blocks/groups/","title":"\u30b0\u30eb\u30fc\u30d7","text":"

      \u30b0\u30eb\u30fc\u30d7 \u306f\u30ed\u30fc\u30eb\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7d44\u7e54\u306f1\u3064\u4ee5\u4e0a\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f1\u3064\u4ee5\u4e0a\u306e\u30b0\u30eb\u30fc\u30d7\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002\u30b0\u30eb\u30fc\u30d7\u306f\u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30b0\u30eb\u30fc\u30d7\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u306f\u72ec\u7acb\u3057\u3066\u4f5c\u6210\u3055\u308c\u3001\u305d\u306e\u5f8c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002

      \u7d44\u7e54\u306b\u306f\u3001\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u6570\u3092\u5236\u9650\u3059\u308b\u30af\u30a9\u30fc\u30bf\u304c\u3042\u308a\u307e\u3059\u3002\u30af\u30a9\u30fc\u30bf\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/concepts-basics/building-blocks/notifications/","title":"\u901a\u77e5","text":"

      \u901a\u77e5 \u306f\u3001Lagoon\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u9032\u884c\u72b6\u6cc1\u3092\u4f1d\u3048\u308b\u65b9\u6cd5\u3067\u3059\u3002\u901a\u77e5\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u7a2e\u985e\u304c\u3042\u308a\u307e\u3059:

      • Slack
      • RocketChat
      • \u30e1\u30fc\u30eb
      • Webhook
      • Microsoft Teams

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u4e00\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u901a\u77e5\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7d44\u7e54\u306f\u3001\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u901a\u77e5\u306e\u5272\u308a\u5f53\u3066\u67a0\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u901a\u77e5\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u306f\u72ec\u7acb\u3057\u3066\u4f5c\u6210\u3055\u308c\u3001\u305d\u306e\u5f8c\u4e00\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      Lagoon UI\u3067\u901a\u77e5\u3092\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u3067\u8ffd\u52a0\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3076.

      API\u3092\u901a\u3058\u3066\u901a\u77e5\u3092\u8ffd\u52a0\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3076.

      "},{"location":"ja/concepts-basics/building-blocks/organizations/","title":"\u7d44\u7e54","text":"

      \u7d44\u7e54 \u306f\u3001\u4e00\u3064\u4ee5\u4e0a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u901a\u77e5\u3092\u542b\u3080\u3053\u3068\u304c\u3067\u304d\u308b\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3067\u3059\u3002\u7d44\u7e54\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u5236\u5fa1\u3057\u3001\u30b0\u30eb\u30fc\u30d7\u306e\u4f5c\u6210\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u8ffd\u52a0\u3068\u524a\u9664\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u5272\u308a\u5f53\u3066\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002

      Organizations\u306f\u3001\u69cb\u9020\u306e\u5c64\u3092\u8ffd\u52a0\u3057\u3066\u73fe\u5b9f\u3092\u6a21\u5023\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u7279\u5b9a\u306e\u30b5\u30a4\u30c8\u3067\u4f5c\u696d\u3059\u308b\u30c1\u30fc\u30e0\u3092\u53cd\u6620\u3059\u308b\u305f\u3081\u306b\u3001\u7d44\u7e54\u3092\u4f5c\u6210\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3067\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u305d\u306e\u7d44\u7e54\u306b\u306f\u3001\u305d\u306e\u30b5\u30a4\u30c8\u3092\u69cb\u6210\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001 \u958b\u767a\u8005\u3068 \u547c\u3070\u308c\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u30b5\u30a4\u30c8\u4f5c\u696d\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3059\u3079\u3066\u306e\u4eba\u3005\u3001\u305d\u3057\u3066\u30b5\u30a4\u30c8\u3084\u554f\u984c\u3092\u95b2\u89a7\u3059\u308b\u305f\u3081\u3060\u3051\u306bLagoon\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5225\u306e\u30b0\u30eb\u30fc\u30d7\uff08 \u95b2\u89a7\u8005 \u3068\u547c\u3070\u308c\u308b\uff09\u304c\u542b\u307e\u308c\u3001\u305d\u308c\u305e\u308c\u9069\u5207\u306a\u30ed\u30fc\u30eb\u3092\u6301\u3061\u307e\u3059\u3002

      \u7d44\u7e54\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u901a\u77e5\u3001\u74b0\u5883\u306e\u6570\u3092\u5236\u9650\u3059\u308b\u305f\u3081\u306e\u30af\u30a9\u30fc\u30bf\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30af\u30a9\u30fc\u30bf\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u7d44\u7e54\u3068\u306e\u3084\u308a\u3068\u308a\u306b\u3064\u3044\u3066\u3082\u3063\u3068\u5b66\u3076.

      "},{"location":"ja/concepts-basics/building-blocks/projects/","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8","text":"

      \u30d7\u30ed\u30b8\u30a7\u30af\u30c8 \u306f\u3001Lagoon\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3059\u3002\u7d44\u7e54\u306f1\u3064\u4ee5\u4e0a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f\u30011\u4eba\u4ee5\u4e0a\u306e\u30e6\u30fc\u30b6\u30fc\u3001\u901a\u77e5\u3001\u305d\u3057\u3066\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u7d44\u7e54\u306f\u3001\u4f5c\u6210\u3067\u304d\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u91cf\u3092\u5236\u9650\u3059\u308b\u305f\u3081\u306e\u30af\u30a9\u30fc\u30bf\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/concepts-basics/building-blocks/roles/","title":"\u30ed\u30fc\u30eb","text":"

      \u30ed\u30fc\u30eb \u306f\u30e6\u30fc\u30b6\u30fc\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306f\u30b0\u30eb\u30fc\u30d7\u3084\u7d44\u7e54\u3067\u30ed\u30fc\u30eb\u3092\u4e0e\u3048\u3089\u308c\u307e\u3059\u3002

      \u30b0\u30eb\u30fc\u30d7\u306e\u30e1\u30f3\u30d0\u30fc\u306b\u306f\u4ee5\u4e0b\u306e\u30ed\u30fc\u30eb\u3092\u4e0e\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

      • \u30b2\u30b9\u30c8
      • \u30ec\u30dd\u30fc\u30bf\u30fc
      • \u958b\u767a\u8005
      • \u30e1\u30f3\u30c6\u30ca\u30fc
      • \u30aa\u30fc\u30ca\u30fc

      \u3053\u308c\u3089\u306e\u30ed\u30fc\u30eb\u3068\u305d\u306e\u6a29\u9650\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u3053\u3067\u8a73\u3057\u304f\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059:\u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3002

      \u7d44\u7e54\u306e\u30e1\u30f3\u30d0\u30fc\u306b\u306f\u4ee5\u4e0b\u306e\u30ed\u30fc\u30eb\u3092\u4e0e\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

      • \u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc
      • \u7d44\u7e54\u306e\u30d3\u30e5\u30fc\u30a2

      \u30af\u30a9\u30fc\u30bf\u306e\u5909\u66f4

      \u30af\u30a9\u30fc\u30bf\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc \u306f\u3001\u30af\u30a9\u30fc\u30bf\u306e\u5909\u66f4\u3092\u9664\u304f\u3001\u7d44\u7e54\u306e\u7ba1\u7406\u306b\u95a2\u9023\u3059\u308b\u3059\u3079\u3066\u306e\u4e8b\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5f7c\u3089\u306f\u30e6\u30fc\u30b6\u30fc\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u3001\u901a\u77e5\u306e\u8ffd\u52a0\u3084\u524a\u9664\u304c\u3067\u304d\u307e\u3059\u3002

      \u7d44\u7e54\u306e\u95b2\u89a7\u8005 \u306f\u3001\u7d44\u7e54\u3092\u95b2\u89a7\u3059\u308b\u3060\u3051\u306e\u8aad\u307f\u53d6\u308a\u5c02\u7528\u306e\u30ed\u30fc\u30eb\u3067\u3042\u308a\u3001\u5909\u66f4\u3084\u8ffd\u52a0\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u5f7c\u3089\u306f\u7d44\u7e54\u5185\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u901a\u77e5\u3092\u95b2\u89a7\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u5909\u66f4\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002

      \u30aa\u30fc\u30ca\u30fc\u307e\u305f\u306f\u30d3\u30e5\u30fc\u30a2\u3068\u3057\u3066\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u7d44\u7e54\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002

      "},{"location":"ja/concepts-basics/building-blocks/users/","title":"\u30e6\u30fc\u30b6\u30fc","text":"

      \u30e6\u30fc\u30b6\u30fc \u306f\u3001Lagoon\u30b7\u30b9\u30c6\u30e0\u3068\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306eLagoon\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306f\u4e00\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u7d44\u7e54\u3084\u30b0\u30eb\u30fc\u30d7\u306b\u6240\u5c5e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u5404\u30b0\u30eb\u30fc\u30d7\u306f\u3055\u307e\u3056\u307e\u306a\u8a31\u53ef\u3092\u4ed8\u4e0e\u3059\u308b\u7570\u306a\u308b\u30ed\u30fc\u30eb\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7d44\u7e54\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u304a\u3088\u3073\u30ed\u30fc\u30eb\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u4ed8\u4e0e\u3057\u307e\u3059\u3002

      \u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30fc\u30eb\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aad\u3080\u3002

      "},{"location":"ja/contributing-to-lagoon/api-debugging/","title":"API\u30c7\u30d0\u30c3\u30b0","text":"

      1 . services/api/package.json\u306b\u3042\u308bdev\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u4ee5\u4e0b\u3092\u542b\u3080\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059:

      services/api/package.json
      node --inspect=0.0.0.0:9229\n

      2 . docker-compose.yml\u3092\u66f4\u65b0\u3057\u3066\u3001dist\u30d5\u30a9\u30eb\u30c0\u3092\u30de\u30c3\u30d7\u3057\u30019229\u30dd\u30fc\u30c8\u3092\u516c\u958b\u3057\u307e\u3059:

      docker-compose.yml
        api:\nimage: ${IMAGE_REPO:-lagoon}/api\ncommand: yarn run dev\nvolumes:\n- ./services/api/src:/app/services/api/src\n- ./services/api/dist:/app/services/api/dist\ndepends_on:\n- api-db\n- local-api-data-watcher-pusher\n- keycloak\nports:\n- '3000:3000'\n- '9229:9229'\n

      3 . \u6b21\u306e\u5185\u5bb9\u3092.vscode/launch.json\u306b\u8ffd\u52a0\u3057\u307e\u3059:

      .vscode/launch.json
      {\n// IntelliSense\u3092\u4f7f\u7528\u3057\u3066\u53ef\u80fd\u306a\u5c5e\u6027\u306b\u3064\u3044\u3066\u5b66\u7fd2\u3057\u307e\u3059\u3002\n// \u65e2\u5b58\u306e\u5c5e\u6027\u306e\u8aac\u660e\u3092\u8868\u793a\u3059\u308b\u306b\u306f\u3001\u30db\u30d0\u30fc\u3057\u307e\u3059\u3002\n// \u8a73\u7d30\u60c5\u5831\u306f\u3001\u6b21\u306eURL\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:https://go.microsoft.com/fwlink/?linkid=830387.\n\"version\": \"0.2.0\",\n\"configurations\": [\n{\n\"name\": \"Docker: Attach to Node\",\n\"type\": \"node\",\n\"request\": \"attach\",\n\"port\": 9229,\n\"address\": \"localhost\",\n\"outFiles\": [\"${workspaceRoot}/app/services/api/dist/**/*.js\"],\n\"localRoot\": \"${ \"workspaceFolder}/services/api\",\n      \"remoteRoot\": \"/app/services/api\",\n      \"sourceMaps\": true,\n      \"protocol\": \"inspector\"\n    }\n  ]\n}\n4 . \u30b3\u30f3\u30c6\u30ca\u306e\u518d\u69cb\u7bc9/\u518d\u8d77\u52d5:\n```bash title=\"\u30b3\u30f3\u30c6\u30ca\u306e\u518d\u8d77\u52d5\"\nrm build/api && make build/api && docker-compose restart api\n

      5 . VScode\u3092\u518d\u8d77\u52d5\u3057\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/","title":"Lagoon\u306e\u958b\u767a","text":"

      Lagoon\u306e\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306f\u3001\u73fe\u5728\u3001\u30ed\u30fc\u30ab\u30eb\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u307e\u305f\u306fDocker Compose(\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3068\u3057\u3066)\u3092\u7d4c\u7531\u3057\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u6ce8\u610f:

      \u30d5\u30eb\u306eLagoon\u30b9\u30bf\u30c3\u30af\u306f\u3001\u73fe\u5728ARM\u30d9\u30fc\u30b9\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3(M1/M2 Apple Silicon\u30d9\u30fc\u30b9\u306e\u30de\u30b7\u30f3\u306a\u3069)\u3068\u4e92\u63db\u6027\u306e\u306a\u3044\u4e0a\u6d41\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u4f9d\u5b58\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u4e0a\u3067lagoon-core\u307e\u305f\u306flagoon-remote\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u307e\u305f\u306f\u958b\u767a\u3059\u308b\u3053\u3068\u306f\u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u8a73\u7d30\u306fhttps://github.com/uselagoon/lagoon/issues/3189 \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#docker","title":"Docker","text":"

      Docker\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067Lagoon\u3092\u30d3\u30eb\u30c9\u304a\u3088\u3073\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#dockerdocker-compose","title":"Docker\u3068Docker Compose\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

      Docker\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

      Docker Compose\u306f\u3001Docker for Mac\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002Linux\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u306e\u624b\u9806\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#docker_1","title":"Docker\u306e\u8a2d\u5b9a","text":"

      Docker\u306e\u30bb\u30ad\u30e5\u30a2\u3067\u306a\u3044\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u3092\u8aad\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u518d\u8a2d\u5b9a\u3092\u907f\u3051\u308b\u305f\u3081\u3001\u5168\u3066\u306e\u30ed\u30fc\u30ab\u30ebIPv4\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30a2\u30c9\u30ec\u30b9\u30b9\u30da\u30fc\u30b9\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002 Kubernetes\u3068Docker Compose\u3002\u305f\u3068\u3048\u3070\u3001\"insecure-registries\" : [\"172.16.0.0/12\",\"192.168.0.0/16\"],

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#docker_2","title":"\u5341\u5206\u306aDocker\u30ea\u30bd\u30fc\u30b9\u306e\u5272\u308a\u5f53\u3066","text":"

      \u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u4e0a\u3067Lagoon\u3001Kubernetes\u3001\u307e\u305f\u306fDocker\u30af\u30e9\u30b9\u30bf\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u591a\u304f\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u6d88\u8cbb\u3057\u307e\u3059\u3002Docker\u30db\u30b9\u30c8\u306b\u306f\u6700\u4f4e\u3067\u30828\u3064\u306eCPU\u30b3\u30a2\u306812GB\u306eRAM\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#lagoon_1","title":"\u30ed\u30fc\u30ab\u30eb\u3067Lagoon\u3092\u30d3\u30eb\u30c9\u3059\u308b","text":"

      \u8b66\u544a

      Lagoon\u3092\u3053\u306e\u65b9\u6cd5\u3067\u30d3\u30eb\u30c9\u3092\u8003\u3048\u308b\u306e\u306f\u3001\u305d\u308c\u306b\u6a5f\u80fd\u3084\u6a5f\u80fd\u3092\u958b\u767a\u3057\u305f\u3044\u3001\u307e\u305f\u306f\u5185\u90e8\u30d7\u30ed\u30bb\u30b9\u3092\u30c7\u30d0\u30c3\u30b0\u3057\u305f\u3044\u5834\u5408\u3060\u3051\u3067\u3059\u3002\u307e\u305f\u3001\u30d3\u30eb\u30c9\u305b\u305a\u306bLagoon\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u65b9\u6cd5(\u3064\u307e\u308a\u3001\u516c\u958b\u3055\u308c\u305f\u30ea\u30ea\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5)\u306e\u6307\u793a\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002

      \u79c1\u305f\u3061\u306f\u3001\u5fc5\u8981\u306aDocker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3057\u3001Kubernetes\u3092\u8a2d\u5b9a\u3057\u3001\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306bmake(Makefile\u3092\u53c2\u7167)\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

      \u79c1\u305f\u3061\u306f\u3001\u307b\u3068\u3093\u3069\u306e\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u30b7\u30ca\u30ea\u30aa\u3092\u30ab\u30d0\u30fc\u3059\u308b\u305f\u3081\u306b\u3001Makefile\u306b\u3044\u304f\u3064\u304b\u306e\u30eb\u30fc\u30c1\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3057\u305f\u3002\u3053\u3053\u3067\u306f\u3001\u5b8c\u5168\u306a\u30d7\u30ed\u30bb\u30b9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_1","title":"\u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9","text":"
      1. \u3053\u3053\u3067\u306e-j8\u306f\u3001make\u306b\u30d3\u30eb\u30c9\u3092\u901f\u3081\u308b\u305f\u3081\u306b\u4e26\u5217\u30678\u3064\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u3088\u3046\u306b\u6307\u793a\u3057\u307e\u3059\u3002\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      2. \u30c7\u30d5\u30a9\u30eb\u30c8\u3067SCAN_IMAGES=false\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u30d3\u30eb\u30c9\u3057\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002 \u8106\u5f31\u6027\u3002\u3053\u308c\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u30b9\u30ad\u30e3\u30f3\u7d50\u679c\u3092\u542b\u3080scan.txt\u30d5\u30a1\u30a4\u30eb\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\u306b\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002
      \u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9
      make -j8 build\n
      1. Makefile\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3067Lagoon\u306e\u30c6\u30b9\u30c8\u30eb\u30fc\u30c6\u30a3\u30f3\u3092\u958b\u59cb\u3057\u307e\u3059(\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8)\u3002
      \u30c6\u30b9\u30c8\u958b\u59cb
      make kind/test\n

      \u8b66\u544a

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30c6\u30b9\u30c8\u304c\u591a\u6570\u3042\u308a\u307e\u3059 - \u6a5f\u80fd\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u6700\u4f4e\u9650\u306e\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u30c6\u30b9\u30c8\u306e\u307f\u3092\u8003\u616e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u3001Makefile\u306eTESTS\u5909\u6570\u304b\u3089\u30c6\u30b9\u30c8\u3092\u6307\u5b9a\u3057\u305f\u308a\u524a\u9664\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u3067\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u3053\u306e\u30d7\u30ed\u30bb\u30b9\u3067\u306f\u6b21\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u307e\u3059:

      1. \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u30c4\u30fc\u30eb\u306e\u6b63\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059 - kind\u3001kubectl\u3001helm\u3001jq\u3002
      2. Lagoon\u304c\u6a5f\u80fd\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306aHelm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002
      3. \u524d\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u6b63\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u304c\u3059\u3079\u3066\u30d3\u30eb\u30c9\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
      4. \u30ed\u30fc\u30ab\u30eb\u306eKinD\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306eDocker\u30b3\u30f3\u30c6\u30ca\u306b\u5b8c\u5168\u306b\u7a3c\u50cd\u3059\u308bKubernetes\u30af\u30e9\u30b9\u30bf\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u306e\u30af\u30e9\u30b9\u30bf\u306f\u3001\u30d3\u30eb\u30c9\u3057\u305fLagoon\u30a4\u30e1\u30fc\u30b8\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u305f\u3081\u306b\u63d0\u4f9b\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u3068\u901a\u4fe1\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u305f\u3081\u306b\u30db\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3082\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059\u3002
      5. Lagoon\u3092 https://github.com/uselagoon/lagoon-charts (\u5fc5\u8981\u306b\u5fdc\u3058\u3066Makefile\u306eCHARTS_TREEISH\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u30d6\u30e9\u30f3\u30c1\u3092\u5236\u5fa1\u3057\u3066\u304f\u3060\u3055\u3044).
      6. Harbor Image\u30ec\u30b8\u30b9\u30c8\u30ea\u3092KinD\u30af\u30e9\u30b9\u30bf\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u305d\u306e\u30a4\u30f3\u30b0\u30ec\u30b9\u3068\u30a2\u30af\u30bb\u30b9\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
      7. Docker\u306f\u30d3\u30eb\u30c9\u3057\u305fLagoon\u306e\u30a4\u30e1\u30fc\u30b8\u3092Harbor\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
      8. \u6b21\u306b\u3001lagoon-charts\u306eMakefile\u3092\u4f7f\u7528\u3057\u3066\u3001\u6b8b\u308a\u306e\u8a2d\u5b9a\u624b\u9806\u3092\u9032\u884c\u3057\u307e\u3059\u3002
      9. \u9069\u5207\u306a\u30a4\u30f3\u30b0\u30ec\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059 - NGINX Ingress Controller\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
      10. \u7279\u5b9a\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u8981\u6c42\u3092\u51e6\u7406\u3059\u308b\u30ed\u30fc\u30ab\u30ebNFS\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059 - Read-Write-Many\u64cd\u4f5c(RWX)\u3092\u51e6\u7406\u3059\u308b\u3082\u306e\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
      11. \u305d\u306e\u5f8c\u3001Lagoon Core\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u30ed\u30fc\u30ab\u30eb\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30ed\u30fc\u30ab\u30eb\u3067\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u30c6\u30b9\u30c8\u306b\u5fc5\u8981\u3068\u3055\u308c\u306a\u3044\u4e00\u90e8\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u9664\u5916\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u3001API\u3068Keycloak\u304c\u30aa\u30f3\u30e9\u30a4\u30f3\u306b\u306a\u308b\u306e\u3092\u5f85\u3061\u307e\u3059\u3002
      12. DBaaS\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059 - MariaDB\u3001PostgreSQL\u3001MongoDB\u3002\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u3001 \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u4e2d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u3001\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc(\u4f8b\u3048\u3070\u3001Cloud SQL\u3001RDS\u3001Azure Database\u306a\u3069)\u7d4c\u7531\u3067\u5229\u7528\u53ef\u80fd\u306a\u30de\u30cd\u30fc\u30b8\u30c9\u30b5\u30fc\u30d3\u30b9\u3092\u30a8\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u307e\u3059\u3002
      13. \u6b21\u306bLagoon Remote\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3001Lagoon Core\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u901a\u4fe1\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u3053\u308c\u304c\u5b8c\u4e86\u3059\u308b\u306e\u3092\u5f85\u3063\u3066\u304b\u3089\u7d9a\u884c\u3057\u307e\u3059\u3002
      14. \u30c6\u30b9\u30c8\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3059\u308b\u305f\u3081\u306b\u3001Lagoon Test\u30c1\u30e3\u30fc\u30c8\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30c6\u30b9\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30db\u30b9\u30c8\u3059\u308b\u30ed\u30fc\u30ab\u30eb\u306eGit\u30b5\u30fc\u30d0\u30fc\u304c\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3001\u8a2d\u5b9a\u3067Lagoon API\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u4e8b\u524d\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002\u305d\u308c\u304b\u3089\u3001\u30c6\u30b9\u30c8\u3092\u958b\u59cb\u3059\u308b\u524d\u306b\u6e96\u5099\u30c1\u30a7\u30c3\u30af\u3092\u884c\u3044\u307e\u3059\u3002
      15. Lagoon\u306f\u3001Makefile\u306eTESTS\u5909\u6570\u3067\u6307\u5b9a\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u5404\u30c6\u30b9\u30c8\u306f\u81ea\u8eab\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u74b0\u5883\u3092\u4f5c\u6210\u3057\u3001\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u305f\u5f8c\u306b\u74b0\u5883\u3068\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u524a\u9664\u3057\u307e\u3059\u3002\u30c6\u30b9\u30c8\u306e\u5b9f\u884c\u7d50\u679c\u306flagoon-test-suite-*\u30dd\u30c3\u30c9\u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u30ed\u30b0\u306b\u51fa\u529b\u3055\u308c\u3001\u30b3\u30f3\u30c6\u30ca\u3054\u3068\u306b1\u3064\u306e\u30c6\u30b9\u30c8\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      \u7406\u60f3\u7684\u306b\u306f\u3001\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u304c\u901a\u904e\u3057\u3001\u3059\u3079\u3066\u7d42\u4e86\u3057\u307e\u3059\uff01

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_2","title":"\u30c6\u30b9\u30c8\u306e\u9032\u884c\u72b6\u6cc1\u3068\u30ed\u30fc\u30ab\u30eb\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u8868\u793a","text":"

      \u30c6\u30b9\u30c8\u30eb\u30fc\u30c1\u30f3\u306f\u30ed\u30fc\u30ab\u30eb\u306eKubeconfig\u30d5\u30a1\u30a4\u30eb(\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30c8\u306bkubeconfig.kind.lagoon\u3068\u3044\u3046\u540d\u524d\u3067)\u3092\u4f5c\u6210\u3057\u3001Kubernetes\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3001\u30d3\u30e5\u30fc\u30ef\u3001CLI\u3068\u3068\u3082\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30ed\u30fc\u30ab\u30eb\u30af\u30e9\u30b9\u30bf\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3059\u3002\u79c1\u305f\u3061\u306f\u3001Lens\u3001Octant\u3001kubectl\u3001Portainer\u3068\u3044\u3063\u305f\u30c4\u30fc\u30eb\u3092\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002Lagoon Core\u3001Remote\u3001Tests\u306f\u3059\u3079\u3066Lagoon\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u3067\u30d3\u30eb\u30c9\u3055\u308c\u3001\u5404\u74b0\u5883\u306f\u81ea\u8eab\u306e\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u3066\u5b9f\u884c\u3059\u308b\u305f\u3081\u3001\u78ba\u8a8d\u3059\u308b\u969b\u306b\u306f\u6b63\u3057\u3044\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u30ed\u30fc\u30ab\u30eb\u30af\u30e9\u30b9\u30bf\u3068kubectl\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u6b63\u3057\u3044Kubeconfig\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u3059\u3079\u3066\u306e\u30b3\u30de\u30f3\u30c9\u3067\u884c\u3046\u3053\u3068\u3082\u3001\u597d\u307f\u306e\u30c4\u30fc\u30eb\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

      kubeconfig.kind.lagoon
      KUBECONFIG=./kubeconfig.kind.lagoon kubectl get pods -n lagoon\n

      \u30ed\u30fc\u30ab\u30eb\u306eLagoon\u3092\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308bHelm\u30c1\u30e3\u30fc\u30c8\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u30af\u30ed\u30fc\u30f3\u3055\u308c\u3001lagoon-charts.kind.lagoon\u306b\u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5f8c\u3067\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u7c21\u5358\u306a\u5909\u66f4\u306e\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#lagoon_2","title":"\u30ed\u30fc\u30ab\u30ebLagoon\u30af\u30e9\u30b9\u30bf\u3068\u5bfe\u8a71\u3059\u308b","text":"

      Makefile\u306b\u306f\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fLagoon\u3068\u306e\u5bfe\u8a71\u3092\u7c21\u5358\u306b\u3059\u308b\u3044\u304f\u3064\u304b\u306e\u30eb\u30fc\u30c1\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

      Create local ports
      make kind/port-forwards\n

      \u3053\u308c\u306b\u3088\u308a\u3001UI\u3092\u516c\u958b\u3059\u308b\u305f\u3081\u306e\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002 6060)\u3001API (7070)\u3001\u305d\u3057\u3066 Keycloak (8080)\u3067\u3059\u3002\u3053\u308c\u306f stdout\u306b\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u305f\u3081\u3001\u5225\u306e\u30bf\u30fc\u30df\u30ca\u30eb/\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u5b9f\u884c\u3059\u3079\u304d\u3067\u3057\u3087\u3046\u3002

      \u7ba1\u7406\u8005\u306e\u8cc7\u683c\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b
      make kind/get-admin-creds\n

      \u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u3068\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306e\u5fc5\u8981\u306a\u8cc7\u683c\u60c5\u5831\u304c\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002

      • JWT\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306eGraphQL\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067bearer\u30c8\u30fc\u30af\u30f3\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u7ba1\u7406\u8005\u30b9\u30b3\u30fc\u30d7\u306e\u30c8\u30fc\u30af\u30f3\u3067\u3059\u3002\u8a73\u7d30\u306fGraphQL\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002
      • Keycloak\u306e\"admin\"\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30c8\u30fc\u30af\u30f3\u304c\u3042\u308a\u3001\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30ed\u30fc\u30eb\u306a\u3069\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002
      • Lagoon\u306e\"lagoonadmin\"\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30c8\u30fc\u30af\u30f3\u3082\u3042\u308a\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b0\u30eb\u30fc\u30d7\u3001\u6a29\u9650\u306a\u3069\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
      \u30a4\u30e1\u30fc\u30b8\u306e\u518d\u30d7\u30c3\u30b7\u30e5
      make kind/dev\n

      \u3053\u308c\u306b\u3088\u308a\u3001KIND_SERVICES\u306b\u30ea\u30b9\u30c8\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u3057\u3044\u30bf\u30b0\u3067\u518d\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u3001lagoon-core\u30c1\u30e3\u30fc\u30c8\u304c\u518d\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306fLagoon\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3059\u308b\u5c0f\u3055\u306a\u5909\u66f4\u3092\u30c6\u30b9\u30c8\u3059\u308b\u306e\u306b\u4fbf\u5229\u3067\u3059\u304c\u3001\"\u30e9\u30a4\u30d6\"\u958b\u767a\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u307e\u305a\u3053\u308c\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u518d\u69cb\u7bc9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b:rm build/api && make build/api.

      typescript\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u30d3\u30eb\u30c9\u3059\u308b
      make kind/local-dev-patch\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fNode.js\u3092\u4f7f\u7528\u3057\u3066typescript\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u30d3\u30eb\u30c9\u3055\u308c\u307e\u3059(\u3053\u308c\u306f >16.0)\u3002\u305d\u306e\u5f8c\u3001\u6b21\u306e\u64cd\u4f5c\u3092\u884c\u3044\u307e\u3059:

      • Lagoon\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u306edist\u30d5\u30a9\u30eb\u30c0\u3092Kubernetes\u306e\u6b63\u3057\u3044lagoon-core\u30dd\u30c3\u30c9\u306b\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059
      • \u30b3\u30fc\u30c9\u306e\u5909\u66f4\u3092\u76e3\u8996\u3059\u308bnodemon\u304c\u52d5\u4f5c\u3057\u3066\u3044\u308b\u30b5\u30fc\u30d3\u30b9\u3068\u5171\u306blagoon-core\u30c1\u30e3\u30fc\u30c8\u3092\u518d\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059
      • \u3053\u308c\u306b\u3088\u308a\u3001Lagoon \u3067\u306e\u30e9\u30a4\u30d6\u958b\u767a\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002
      • Kubernetes\u306e\u30dd\u30c3\u30c9\u306b\u5909\u66f4\u304c\u53cd\u6620\u3055\u308c\u308b\u305f\u3081\u306b\u306f\u3001\u6642\u6298\u518d\u30c7\u30d7\u30ed\u30a4\u304c\u5fc5\u8981\u306a\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u7570\u306a\u308b\u30d6\u30e9\u30f3\u30c1\u3092git clean -dfx\u3067\u518d\u30d3\u30eb\u30c9\u3059\u308b\u5834\u5408\u306f\u3001\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u306e\u30d3\u30eb\u30c9\u6210\u679c\u7269\u3092\u30af\u30ea\u30fc\u30f3\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u306a\u304a\u3001dist\u30d5\u30a9\u30eb\u30c0\u306fGit\u306b\u3088\u3063\u3066\u7121\u8996\u3055\u308c\u307e\u3059\u3002
      \u30ed\u30ae\u30f3\u30b0\u3092\u958b\u59cb
      make kind/local-dev-logging\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u306eDocker\u306b\u72ec\u7acb\u3057\u305fOpenDistro for Elasticsearch\u30af\u30e9\u30b9\u30bf\u304c\u4f5c\u6210\u3055\u308c\u3001Lagoon\u304c\u3059\u3079\u3066\u306e\u30ed\u30b0(Lagoon\u304a\u3088\u3073\u30d7\u30ed\u30b8\u30a7\u30af\u30c8)\u3092\u305d\u308c\u306b\u9001\u4fe1\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a2d\u5b9a\u306flagoon-logging\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u30c6\u30b9\u30c8\u3092\u518d\u5b9f\u884c
      make kind/retest\n# OR\nmake kind/retest TESTS='[features-kubernetes]'\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u65e2\u5b58\u306e\u30af\u30e9\u30b9\u30bf\u306b\u5bfe\u3059\u308b\u4e00\u9023\u306e\u30c6\u30b9\u30c8(TESTS\u5909\u6570\u3067\u5b9a\u7fa9)\u304c\u518d\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u30c6\u30b9\u30c8\u7528\u306e\u30a4\u30e1\u30fc\u30b8(tests\u3001local-git\u3001data-watcher-pusher)\u304c\u518d\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002\u30c6\u30b9\u30c8\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 TESTS\u5909\u6570\u3092\u30a4\u30f3\u30e9\u30a4\u30f3\u3067\u6e21\u3057\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002

      \u30c6\u30b9\u30c8\u8a2d\u5b9a\u3092\u66f4\u65b0\u3059\u308b\u5834\u5408\u3001\u30c6\u30b9\u30c8\u30a4\u30e1\u30fc\u30b8\u3092\u518d\u30d3\u30eb\u30c9\u3057\u3066\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001rm build/tests && make build/tests && make kind/push-images IMAGES='tests' && make kind/retest TESTS='[api]'

      Push all images
      make kind/push-images\n# OR\nmake kind/push-images IMAGES='tests local-git'\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002IMAGES\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u7279\u5b9a\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u30bf\u30b0\u3092\u4ed8\u3051\u3066\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002

      Remove cluster
      make kind/clean\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u306eDocker\u304b\u3089KinD Lagoon\u30af\u30e9\u30b9\u30bf\u304c\u524a\u9664\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#ansible","title":"Ansible","text":"

      Lagoon\u30c6\u30b9\u30c8\u3067\u306f\u3001Ansible\u3092\u7528\u3044\u3066\u30c6\u30b9\u30c8\u30b9\u30a4\u30fc\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u7279\u5b9a\u306e\u6a5f\u80fd\u306e\u30c6\u30b9\u30c8\u7bc4\u56f2\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30eb\u30fc\u30c1\u30f3\u306b\u5206\u5272\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u3067\u958b\u767a\u4f5c\u696d\u3092\u884c\u3063\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u5b9f\u884c\u3059\u308b\u30c6\u30b9\u30c8\u3092\u9078\u629e\u3057\u3001Makefile\u5185\u306e$TESTS\u5909\u6570\u3092\u66f4\u65b0\u3057\u3066\u3001\u540c\u6642\u306b\u5b9f\u884c\u3055\u308c\u308b\u30c6\u30b9\u30c8\u3092\u6e1b\u3089\u3057\u307e\u3059\u3002

      \u3053\u308c\u3089\u306e\u30c6\u30b9\u30c8\u306e\u8a2d\u5b9a\u306f3\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u4fdd\u6301\u3055\u308c\u3066\u3044\u307e\u3059:

      • tests\u306fAnsible\u30c6\u30b9\u30c8\u30b5\u30fc\u30d3\u30b9\u305d\u306e\u3082\u306e\u3067\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u306e\u30c6\u30b9\u30c8\u30eb\u30fc\u30c1\u30f3\u3067\u306f\u3001\u5404\u500b\u3005\u306e\u30c6\u30b9\u30c8\u3092\u30c6\u30b9\u30c8\u30b9\u30a4\u30fc\u30c8\u306e\u30dd\u30c3\u30c9\u5185\u306e\u5225\u3005\u306e\u30b3\u30f3\u30c6\u30ca\u3068\u3057\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u4ee5\u4e0b\u306b\u30ea\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002
      • local-git\u306f\u30af\u30e9\u30b9\u30bf\u5185\u3067\u30db\u30b9\u30c8\u3055\u308c\u308bGit\u30b5\u30fc\u30d0\u3067\u3001\u305d\u308c\u304c\u4fdd\u6301\u3057\u3066\u3044\u307e\u3059 \u30c6\u30b9\u30c8\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3002Ansible\u306f\u30c6\u30b9\u30c8\u306e\u9593\u306b\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30d7\u30eb\u3068\u30d7\u30c3\u30b7\u30e5\u3092\u884c\u3044\u307e\u3059\u3002
      • api-data-watcher-pusher\u306f\u3001\u5fc5\u8981\u306aKubernetes\u8a2d\u5b9a\u3001\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u3068SSH\u30ad\u30fc\u3001\u5fc5\u8981\u306a\u30b0\u30eb\u30fc\u30d7\u3068\u901a\u77e5\u3092\u30ed\u30fc\u30ab\u30ebLagoon\u306b\u4e8b\u524d\u306b\u914d\u7f6e\u3059\u308b\u305f\u3081\u306eGraphQL\u5909\u7570\u306e\u30bb\u30c3\u30c8\u3067\u3059\u3002 \u3053\u308c\u306f\u5b9f\u884c\u3054\u3068\u306b\u30ed\u30fc\u30ab\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u74b0\u5883\u3092\u6d88\u53bb\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      Kubernetes\u306b\u95a2\u9023\u3059\u308b\u500b\u3005\u306e\u30eb\u30fc\u30c1\u30f3\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059:

      • active-standby-kubernetes\u306fKubernetes\u3067\u306e\u30a2\u30af\u30c6\u30a3\u30d6/\u30b9\u30bf\u30f3\u30d0\u30a4\u3092\u78ba\u8a8d\u3059\u308b\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • api\u306fAPI - \u30d6\u30e9\u30f3\u30c1/PR\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3001\u6607\u9032\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • bitbucket\u3001gitlab\u3001github\u306f\u7279\u5b9a\u306eSCM\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • drupal-php74\u306f\u5358\u4e00\u30dd\u30c3\u30c9\u306eMariaDB\u3001MariaDB DBaaS\u3001\u304a\u3088\u3073Drupal 8/9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306eDrush\u7279\u5316\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059(drupal-php73\u306fDrush\u30c6\u30b9\u30c8\u3092\u884c\u3044\u307e\u305b\u3093)\u3002
      • drupal-postgres\u306f\u3001Drupal 8\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306e\u5358\u4e00\u30dd\u30c3\u30c9\u306ePostgreSQL\u3068PostgreSQL DBaaS\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • elasticsearch\u306fElasticsearch\u5358\u4e00\u30dd\u30c3\u30c9\u3078\u306e\u30b7\u30f3\u30d7\u30eb\u306aNGINX\u30d7\u30ed\u30ad\u30b7\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • features-variables\u306fLagoon\u5185\u306e\u5909\u6570\u3092\u5229\u7528\u3059\u308b\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • features-kubernetes\u306fKubernetes\u306b\u7279\u5316\u3057\u305f\u6a19\u6e96\u7684\u306aLagoon\u30c6\u30b9\u30c8\u306e\u7bc4\u56f2\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • features-kubernetes-2\u306f\u3088\u308a\u9ad8\u5ea6\u306akub\u3092\u5b9f\u884c\u3057\u307e\u3059 * \u30a8\u30f3\u30c0\u30fc\u30f3\u7279\u6709\u306e\u30c6\u30b9\u30c8 - \u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u8a2d\u5b9a\u3092\u30ab\u30d0\u30fc\u3002
      • nginx\u3001node\u3001python\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u306b\u5bfe\u3057\u3066\u57fa\u672c\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      • node-mongodb\u306f\u3001\u5358\u4e00\u30dd\u30c3\u30c9\u306eMongoDB\u30c6\u30b9\u30c8\u3068Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5bfe\u3059\u308bMongoDB DBaaS\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_3","title":"\u30ed\u30fc\u30ab\u30eb\u958b\u767a","text":"

      \u307b\u3068\u3093\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306fNode.js\u3067\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u591a\u304f\u304c\u540c\u69d8\u306eNode.js\u30b3\u30fc\u30c9\u3068Node.js\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5171\u6709\u3057\u3066\u3044\u308b\u305f\u3081\u3001Yarn\u3068\u3044\u3046\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306fYarn workspaces\u3068\u547c\u3070\u308c\u307e\u3059\u3002Yarn workspaces\u306f\u3001\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u5b9a\u7fa9\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306bpackage.json\u304c\u5fc5\u8981\u3067\u3059\u3002

      \u30b5\u30fc\u30d3\u30b9\u306e\u958b\u767a\u306f\u3001Docker\u5185\u3067\u76f4\u63a5\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059(docker-compose.yml\u3092\u53c2\u7167)\u3002Node.js\u81ea\u4f53\u304cnodemon\u3092\u4ecb\u3057\u3066\u30b3\u30fc\u30c9\u3092\u76e3\u8996\u3057\u3001\u5909\u66f4\u304c\u3042\u308b\u3068Node.js\u30d7\u30ed\u30bb\u30b9\u3092\u81ea\u52d5\u7684\u306b\u518d\u8d77\u52d5\u3057\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#lagoon-commons","title":"lagoon-commons","text":"

      \u30b5\u30fc\u30d3\u30b9\u306f\u591a\u304f\u306eNode.js\u30d1\u30c3\u30b1\u30fc\u30b8\u3060\u3051\u3067\u306a\u304f\u3001\u5b9f\u969b\u306e\u30ab\u30b9\u30bf\u30e0\u30b3\u30fc\u30c9\u3082\u5171\u6709\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u306fnode-packages/lagoon-commons\u5185\u306b\u3042\u308a\u3001\u81ea\u52d5\u7684\u306b\u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u3055\u308c\u307e\u3059\u3002 Yarn\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u306enodemon\u306f\u3001node-packages\u306e\u5909\u66f4\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3001\u30ce\u30fc\u30c9\u30d7\u30ed\u30bb\u30b9\u3092\u81ea\u52d5\u7684\u306b\u518d\u8d77\u52d5\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_4","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":""},{"location":"ja/contributing-to-lagoon/developing-lagoon/#nodejsdocker","title":"Node.js\u30d9\u30fc\u30b9\u306e\u30b5\u30fc\u30d3\u30b9\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3067\u304d\u306a\u3044","text":"

      \u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30a4\u30e1\u30fc\u30b8\u3092\u518d\u30d3\u30eb\u30c9\u3057\u3066\u304f\u3060\u3055\u3044:

      \u30a4\u30e1\u30fc\u30b8\u306e\u518d\u69cb\u7bc9
          make clean\n    make build\n
      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#nodejsnode_modules","title":"Node.js\u30d9\u30fc\u30b9\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9/\u5b9f\u884c\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001node_modules\u306e\u5185\u5bb9\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u3068\u3044\u3046\u30a8\u30e9\u30fc\u304c\u51fa\u308b","text":"

      \u4e00\u90e8\u306e\u30b5\u30fc\u30d3\u30b9\u304cyarn\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u3066\u3044\u308b\u5171\u901a\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u6301\u3063\u3066\u3044\u308b\u305f\u3081\u3001Lagoon\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067yarn\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#nipio","title":"nip.io\u30c9\u30e1\u30a4\u30f3\u306e\u89e3\u6c7a\u3067\u30a8\u30e9\u30fc\u304c\u51fa\u308b","text":"\u30a8\u30e9\u30fc
      Error response from daemon: Get https://registry.172.18.0.2.nip.io:32080/v2/: dial tcp: lookup registry.172.18.0.2.nip.io: no such host\n

      \u3053\u308c\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306e\u30ea\u30be\u30eb\u30d0\u304c\u7d50\u679c\u304b\u3089\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8IP\u3092\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u5834\u5408\u306b\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u56de\u907f\u3059\u308b\u305f\u3081\u306b\u3001/etc/resolv.conf\u3092\u7de8\u96c6\u3057\u3066\u3001\u7d50\u679c\u3092\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3057\u306a\u3044\u516c\u958b\u30ea\u30be\u30eb\u30d0\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u3001\u4e0a\u90e8\u306bnameserver 8.8.8.8\u306e\u3088\u3046\u306a\u884c\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_5","title":"\u4f8b\u793a\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc","text":"

      \u3053\u3053\u3067\u306f\u3001\u958b\u767a\u306e\u30b7\u30ca\u30ea\u30aa\u3068\u7269\u4e8b\u3092\u9032\u3081\u308b\u305f\u3081\u306e\u6709\u7528\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u3044\u304f\u3064\u304b\u7d39\u4ecb\u3057\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#1","title":"\u30c6\u30b9\u30c8\u306e\u8ffd\u52a0 1. \u4e0a\u8a18\u306e\u6700\u521d\u306e\u624b\u9806\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002","text":"
      1. tests/tests/features-variables.yaml\u3092\u7de8\u96c6\u3057\u3001\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
      2. tests\u30a4\u30e1\u30fc\u30b8\u3092\u518d\u69cb\u7bc9\u3057\u307e\u3059\u3002
      \u30c6\u30b9\u30c8\u306e\u69cb\u7bc9
      rm build/tests\nmake -j8 build/tests\n
      1. \u65b0\u3057\u3044tests\u30a4\u30e1\u30fc\u30b8\u3092\u30af\u30e9\u30b9\u30bf\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
      \u30c6\u30b9\u30c8\u30a4\u30e1\u30fc\u30b8\u3092\u30d7\u30c3\u30b7\u30e5
      make kind/push-images IMAGES=tests\n
      1. \u30c6\u30b9\u30c8\u3092\u518d\u5b9f\u884c\u3057\u307e\u3059\u3002
      \u30c6\u30b9\u30c8\u3092\u518d\u5b9f\u884c
      make kind/retest TESTS='[features-variables]'\n
      "},{"location":"ja/contributing-to-lagoon/documentation/","title":"Lagoon\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3078\u306e\u8ca2\u732e","text":"

      \u7686\u3055\u3093\u304b\u3089\u3044\u305f\u3060\u3051\u308b\u3082\u306e\u306f\u4f55\u3067\u3082\u5927\u3044\u306b\u8a55\u4fa1\u3057\u307e\u3059\uff01

      \u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210\u3068\u95b2\u89a7\u3092\u975e\u5e38\u306b\u7c21\u5358\u306b\u3057\u3066\u304a\u308a\u3001\u30c1\u30fc\u30e0\u306f\u5e38\u306b\u30ec\u30d3\u30e5\u30fc\u3084\u30d2\u30f3\u30c8\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u307e\u3059\u3002

      \u79c1\u305f\u3061\u306f\u512a\u308c\u305fMaterial\u30c6\u30fc\u30de\u3068\u5171\u306bmkdocs\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/documentation/#_1","title":"\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u95b2\u89a7\u3068\u66f4\u65b0","text":"

      Lagoon\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30eb\u30fc\u30c8\u304b\u3089(Docker\u304c\u5fc5\u8981\u3067\u3059)\u3001\u4ee5\u4e0b\u3092\u5b9f\u884c\u3057\u307e\u3059:

      Get local docs up and running.
      docker run --rm -it -p 127.0.0.1:8000:8000 -v ${PWD}:/docs ghcr.io/amazeeio/mkdocs-material\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u4efb\u610f\u306e\u66f4\u65b0\u3067\u30e9\u30a4\u30d6\u30ea\u30ed\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u305f\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u304c http://127.0.0.1:8000\u3067\u8d77\u52d5\u3057\u307e\u3059\u3002

      \u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305fDocker\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001\u5fc5\u8981\u306a\u3059\u3079\u3066\u306e\u62e1\u5f35\u6a5f\u80fd\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

      \u3042\u308b\u3044\u306f\u3001mkdocs\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001mkdocs\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u5fc5\u8981\u306a\u3059\u3079\u3066\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      Install mkdocs
      pip3 install -r docs/requirements.txt\nmkdocs serve\n
      "},{"location":"ja/contributing-to-lagoon/documentation/#_2","title":"\u30af\u30e9\u30a6\u30c9\u3067\u306e\u7de8\u96c6","text":"

      \u5404\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30da\u30fc\u30b8\u306b\u306f\u3001\u53f3\u4e0a\u306b\"\u7de8\u96c6\"\u306e\u925b\u7b46\u30a2\u30a4\u30b3\u30f3\u304c\u3042\u308a\u3001\u305d\u308c\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u6b63\u3057\u3044\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002 Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3066\u3002

      \u3053\u3061\u3089\u3067\u3082\u304a\u6c17\u8efd\u306b\u8ca2\u732e\u3057\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u3002\u7d44\u307f\u8fbc\u307f\u306egithub.dev web\u30d9\u30fc\u30b9\u306e\u30a8\u30c7\u30a3\u30bf\u30fc\u3092\u3044\u3064\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u57fa\u672c\u7684\u306a\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u304c\u3042\u308a\u307e\u3059\u304c\u3001mkdocs\u306e\u7d20\u6674\u3089\u3057\u3055\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      "},{"location":"ja/contributing-to-lagoon/documentation/#_3","title":"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u65b9\u6cd5","text":"

      \u79c1\u305f\u3061\u306fDeploy MkDocs GitHub\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3001\u3059\u3079\u3066\u306e\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306e\u30d7\u30c3\u30b7\u30e5\u3092\u30d3\u30eb\u30c9\u3057\u3001gh-pages \u30d6\u30e9\u30f3\u30c1\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/releasing/","title":"Lagoon\u306e\u30ea\u30ea\u30fc\u30b9","text":"

      Lagoon\u306b\u306f\u591a\u304f\u306e\u52d5\u7684\u306a\u90e8\u5206\u304c\u3042\u308b\u305f\u3081\u3001\u30ea\u30ea\u30fc\u30b9\u306f\u304b\u306a\u308a\u8907\u96d1\u3067\u3059\uff01

      "},{"location":"ja/contributing-to-lagoon/releasing/#lagoon-core-","title":"Lagoon-core - \u30bf\u30b0\u3068\u30c6\u30b9\u30c8","text":"
      1. \u6b21\u306e\u5168\u3066\u306e\u7279\u5b9a\u3055\u308c\u305f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059:
        • uselagoon/lagoon
        • uselagoon/build-deploy-tool
        • uselagoon/lagoon-ui
      2. \u78ba\u8a8d\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u6b21\u306e\u30bf\u30b0(\u30de\u30a4\u30ca\u30fc\u307e\u305f\u306f\u30d1\u30c3\u30c1)\u3092\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306fv2.MINOR.PATCH\u3068\u3057\u3001semver\u306b\u5f93\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Jenkins\u30d3\u30eb\u30c9\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u3001https://ci.lagoon.sh/blue/organizations/jenkins/lagoon/branches \u3067\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
      3. \u3053\u308c\u304c\u30d3\u30eb\u30c9\u4e2d\u306e\u9593\u3001lagoon-ui \u3068 build-deploy-tool \u306e\u9069\u5207\u306a\u30b3\u30df\u30c3\u30c8\u306b\u8efd\u91cf\u30bf\u30b0\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f core-v2.MINOR.PATCH \u3068\u3057\u307e\u3059\u3002build-deploy-tool\u306b\u306f\u4ed6\u306e\u30bf\u30b0\u3084\u30ea\u30ea\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001lagoon-ui\u306b\u306f\u72ec\u81ea\u306esemver\u30ea\u30ea\u30fc\u30b9\u304c\u3042\u308a\u3001\u3053\u308c\u306f\u305d\u306e\u6a5f\u80fd\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002
      4. Jenkins\u3067\u306e\u30d3\u30eb\u30c9\u304c\u6210\u529f\u3057\u305f\u3089\u3001https://github.com/uselagoon/lagoon-charts \u306b\u79fb\u52d5\u3057\u3066\u3001\u30c1\u30e3\u30fc\u30c8\u30ea\u30ea\u30fc\u30b9\u306e\u6e96\u5099\u3092\u3057\u307e\u3059\u3002
      5. lagoon-core \u3068 lagoon-test \u30c1\u30e3\u30fc\u30c8\u306echart.yaml\u3067\u3001\u66f4\u65b0\u3057\u307e\u3059\u3002 \u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9:

        • \u30d0\u30fc\u30b8\u30e7\u30f3: \u3053\u308c\u306f\u30c1\u30e3\u30fc\u30c8\u306e\u6b21\u306e\u300c\u30de\u30a4\u30ca\u30fc\u300d\u30ea\u30ea\u30fc\u30b9\u3067\u3001\u901a\u5e38\u306f\u5bfe\u5fdc\u3059\u308blagoon-core\u30ea\u30ea\u30fc\u30b9\u306e\u305f\u3081\u306e\u30de\u30a4\u30ca\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059
        • appVersion: \u3053\u308c\u306f\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u305flagoon-core\u306e\u5b9f\u969b\u306e\u30bf\u30b0\u3067\u3059
        • artifacthub.io/changes: \u5fc5\u8981\u306a\u306e\u306f\u4ee5\u4e0b\u306e\u30b9\u30cb\u30da\u30c3\u30c8\u306e2\u884c\u3067\u3001\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u5b9f\u969b\u306eappVersion\u306b\u5408\u308f\u305b\u3066\u5909\u66f4\u3055\u308c\u307e\u3059\u3002

        sample chart.yml snippets

        # \u3053\u308c\u306f\u30c1\u30e3\u30fc\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002\u3053\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u306f\u3001\u30a2\u30d7\u30ea\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u542b\u3080\u3001\u30c1\u30e3\u30fc\u30c8\u3068\u305d\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b\u305f\u3073\u306b\u5897\u3084\u3059\u3079\u304d\u3067\u3059\u3002\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0(https://semver.org/)\u306b\u5f93\u3046\u3053\u3068\u304c\u671f\u5f85\u3055\u308c\u307e\u3059\u3002\nversion: 1.28.0\n# \u3053\u308c\u306f\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u3067\u3059\u3002\u3053\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\n# \u756a\u53f7\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b\u305f\u3073\u306b\u5897\u52a0\u3055\u305b\u308b\u3079\u304d\u3067\u3059\u3002\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u306b\u5f93\u3046\u3053\u3068\u304c\u671f\u5f85\u3055\u308c\u307e\u305b\u3093\u3002\u305d\u308c\u3089\u306f\n# \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u53cd\u6620\u3059\u308b\u3079\u304d\u3067\u3059\u3002\nappVersion: v2.14.2\n# \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306f\u3001artifacthub.io\u306e\u30c1\u30a7\u30f3\u30b8\u30ed\u30b0\u3092\u53ce\u96c6\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\n# \u305d\u308c\u306f\u5404\u30ea\u30ea\u30fc\u30b9\u3054\u3068\u306b\u65b0\u305f\u306b\u958b\u59cb\u3055\u308c\u308b\u3079\u304d\u3067\u3059\n# \u6709\u52b9\u306a\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u7a2e\u985e\u306f\u3001\u8ffd\u52a0\u3001\u5909\u66f4\u3001\u975e\u63a8\u5968\u3001\u524a\u9664\u3001\u4fee\u6b63\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u304c\u3042\u308a\u307e\u3059\nannotations:\nartifacthub.io/changes: |\n- \u7a2e\u985e: \u5909\u66f4\n\u8aac\u660e: Lagoon appVersion\u3092v2.14.2\u306b\u66f4\u65b0\n
        lagoon-core\u30ea\u30ea\u30fc\u30b9\u306e\u7d50\u679c\u3001lagoon-core\u3068lagoon-test\u306e\u30c1\u30e3\u30fc\u30c8\u306e\u307f\u304c\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002\u4ed6\u306b\u5909\u66f4\u304c\u3042\u308b\u5834\u5408\u306f\u3001lagoon-remote\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002

      6. \u3053\u306e\u30c1\u30e3\u30fc\u30c8\u30ea\u30ea\u30fc\u30b9\u306ePR\u3092\u4f5c\u6210\u3057\u3001Github Actions\u30b9\u30a4\u30fc\u30c8\u304c\u4e00\u9023\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u65bd\u3057\u307e\u3059:

        • Lint\u3068\u30c6\u30b9\u30c8\u30c1\u30e3\u30fc\u30c8 - \u30de\u30c8\u30ea\u30af\u30b9: \u73fe\u5728\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u308bKubernetes\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5bfe\u3057\u3066lint\u3068\u30c1\u30e3\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3044\u307e\u3059
        • Lint\u3068\u30c6\u30b9\u30c8\u30c1\u30e3\u30fc\u30c8 - current: \u4ee5\u524d/\u5c06\u6765\u306eKubernetes\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5bfe\u3057\u3066lint\u3068\u30c1\u30e3\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3044\u307e\u3059
        • Lagoon tests: \u30ea\u30ea\u30fc\u30b9\u306b\u5bfe\u3057\u3066ansible\u30c6\u30b9\u30c8\u306e\u5168\u30b7\u30ea\u30fc\u30ba\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

        \u901a\u5e38\u3001lint\u3068\u30c6\u30b9\u30c8\u30c1\u30e3\u30fc\u30c8\u306e\u5931\u6557\u306f\u3088\u304f\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059(\u30c1\u30e3\u30fc\u30c8\u8a2d\u5b9a\u306e\u6b20\u843d/\u8aa4\u8a2d\u5b9a)\u3002\u5358\u4e00\u306eLagoon\u30c6\u30b9\u30c8\u304c\u5931\u6557\u3059\u308b\u5834\u5408\u306f\u3001\u518d\u5b9f\u884c\u3059\u308b\u3060\u3051\u3067\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u8907\u6570\u306e\u5931\u6557\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001\u8abf\u67fb\u304c\u5fc5\u8981\u3067\u3059\u3002

      \u3053\u308c\u3089\u306e\u30c6\u30b9\u30c8\u304c\u3059\u3079\u3066\u6210\u529f\u3057\u305f\u5f8c\u3001\u30ea\u30ea\u30fc\u30b9\u306e\u4f5c\u6210\u3092\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

      "},{"location":"ja/contributing-to-lagoon/releasing/#lagoon-core-_1","title":"Lagoon-core - \u30ea\u30ea\u30fc\u30b9\u3068\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8","text":"
      1. uselagoon/lagoon \u3067\u3001\u5148\u307b\u3069\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u30bf\u30b0\u304b\u3089\u30ea\u30ea\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\"\u30ea\u30ea\u30fc\u30b9\u306e\u751f\u6210 \"notes\"\u30dc\u30bf\u30f3\u3092\u4f7f\u3063\u3066\u5909\u66f4\u5c65\u6b74\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30ea\u30ea\u30fc\u30b9\u306b\u542b\u3081\u308b\u5185\u5bb9\u306b\u3064\u3044\u3066\u306f\u3001\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u307e\u305f\u3001lagoon-images\u306e\u30ea\u30f3\u30af\u306f\u5e38\u306b\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u7248\u3068\u306a\u308a\u307e\u3059\u3002\u30c1\u30e3\u30fc\u30c8\u3001lagoon-ui\u3001build-deploy-tool\u3078\u306e\u30ea\u30f3\u30af\u306f\u3059\u3079\u3066\u4eca\u3059\u3050\u57cb\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u30ea\u30f3\u30af\u306f\u4eca\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3002\u3053\u308c\u3092\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u3001\u30ea\u30ea\u30fc\u30b9\u3092\u516c\u958b\u3057\u307e\u3059\u3002
      2. uselagoon/build-deploy-tool \u3067\u3001\u5148\u307b\u3069\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u30bf\u30b0\u304b\u3089\u30ea\u30ea\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\"\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8\u3092\u751f\u6210\"\u30dc\u30bf\u30f3\u3092\u4f7f\u7528\u3057\u3066\u5909\u66f4\u5c65\u6b74\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u6700\u5f8c\u306ecore-v2.X\u30bf\u30b0\u304c\u4f7f\u7528\u3055\u308c\u3001\u4ed6\u306e\u30bf\u30b0\u306f\u4f7f\u7528\u3055\u308c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30ea\u30ea\u30fc\u30b9\u306b\u542b\u3081\u308b\u5185\u5bb9\u306b\u3064\u3044\u3066\u306f\u3001\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3092\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u3001\u30ea\u30ea\u30fc\u30b9\u3092\u516c\u958b\u3057\u307e\u3059\u3002
      3. uselagoon/lagoon-ui \u3067\u3001\u5148\u307b\u3069\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u30bf\u30b0\u304b\u3089\u30ea\u30ea\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\"\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8\u3092\u751f\u6210\"\u30dc\u30bf\u30f3\u3092\u4f7f\u7528\u3057\u3066\u5909\u66f4\u5c65\u6b74\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u6700\u5f8c\u306ecore-v2.X\u30bf\u30b0\u304c\u4f7f\u7528\u3055\u308c\u3001\u4ed6\u306e\u30bf\u30b0\u306f\u4f7f\u7528\u3055\u308c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30ea\u30ea\u30fc\u30b9\u306b\u542b\u3081\u308b\u5185\u5bb9\u306b\u3064\u3044\u3066\u306f\u3001\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3092\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u3001\u30ea\u30ea\u30fc\u30b9\u3092\u516c\u958b\u3057\u307e\u3059\u3002
      4. uselagoon/lagoon-charts \u3067 \u6210\u529f\u3057\u305fPR\u3092\u30de\u30fc\u30b8\u3059\u308b\u3068\u3001lagoon-core\u3068lagoon-test\u306e\u30ea\u30ea\u30fc\u30b9\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u7d50\u679c\u3068\u3057\u3066\u5f97\u3089\u308c\u305flagoon-core\u30c1\u30e3\u30fc\u30c8\u30ea\u30ea\u30fc\u30b9\u3092\u7de8\u96c6\u3057\u3001\u30bf\u30a4\u30c8\u30eb\u3068\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\u3059\u308blagoon\u30ea\u30ea\u30fc\u30b9\u3092\u8a18\u8f09\u3057\u307e\u3059\u3002\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u3068\u540c\u69d8\u306b\u3057\u307e\u3059\u3002
      "},{"location":"ja/contributing-to-lagoon/releasing/#lagoon-","title":"Lagoon\u30ea\u30e2\u30fc\u30c8 - \u30ea\u30ea\u30fc\u30b9\u3068\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8","text":"

      Lagoon remote\u306fLagoon Core\u3068\u306f\u5225\u306e\u30ea\u30ea\u30fc\u30b9\u30b5\u30a4\u30af\u30eb\u3092\u6301\u3061\u3001\u305d\u306e\u305f\u3081\u3001\u4f9d\u5b58\u95a2\u4fc2\u306e\u3042\u308b\u30b5\u30d6\u30c1\u30e3\u30fc\u30c8\u3084\u30b5\u30fc\u30d3\u30b9\u304c\u66f4\u65b0\u3055\u308c\u308b\u305f\u3073\u306b\u30ea\u30ea\u30fc\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      "},{"location":"ja/contributing-to-lagoon/tests/","title":"\u30c6\u30b9\u30c8","text":"

      \u79c1\u305f\u3061\u306e\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u306fAnsible\u3067\u66f8\u304b\u308c\u3066\u304a\u308a\u3001\u4e3b\u306b\u4ee5\u4e0b\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u5f93\u3063\u3066\u3044\u307e\u3059:

      1. \u65b0\u3057\u3044Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
      2. \u30d5\u30a1\u30a4\u30eb\u306e\u30ea\u30b9\u30c8(tests/files\u5185)\u304b\u3089\u4e00\u90e8\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3057\u3001\u3053\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30df\u30c3\u30c8\u3057\u307e\u3059\u3002
      3. \u3053\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3092Git\u30b5\u30fc\u30d0\u30fc(\u30ed\u30fc\u30ab\u30eb\u307e\u305f\u306fGitHub\u4e0a)\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
      4. \u30c8\u30ea\u30ac\u30fc\u30b5\u30fc\u30d3\u30b9(\u4f8b\u3048\u3070\u3001\u5b9f\u969b\u306b\u9001\u4fe1\u3055\u308c\u308b\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3068\u540c\u3058\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u30cf\u30f3\u30c9\u30e9\u30fc\u3078\u306e\u30a6\u30a7\u30d6\u30d5\u30c3\u30af)\u306b\u30c8\u30ea\u30ac\u30fc\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002
      5. \u30c6\u30b9\u30c8\u304c\u4f55\u304b\u304c\u8d77\u3053\u308b\u3053\u3068\u3092\u671f\u5f85\u3059\u308bURL\u3092\u76e3\u8996\u3092\u958b\u59cb\u3057\u307e\u3059(\u4f8b\u3048\u3070\u3001Git\u30d6\u30e9\u30f3\u30c1\u3092HTML\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u6301\u3064Node.js\u30a2\u30d7\u30ea\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u306a\u3069)\u3002
      6. URL\u306e\u7d50\u679c\u3068\u671f\u5f85\u3055\u308c\u308b\u7d50\u679c\u3092\u6bd4\u8f03\u3057\u307e\u3059\u3002

      Lagoon\u306f\u4e3b\u306b3\u3064\u306e\u7570\u306a\u308b\u65b9\u6cd5\u3067\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059:

      "},{"location":"ja/contributing-to-lagoon/tests/#1","title":"1. \u30ed\u30fc\u30ab\u30eb\u3067","text":"

      \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u4e2d\u306b\u30c6\u30b9\u30c8\u3059\u308b\u6700\u5584\u306e\u65b9\u6cd5\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u30c6\u30b9\u30c8\u3067\u3059\u3002\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u306fmake\u3092\u4ecb\u3057\u3066\u958b\u59cb\u3055\u308c\u307e\u3059\u3002Make\u306f\u5fc5\u8981\u306a\u3059\u3079\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3001\u30d3\u30eb\u30c9\u3057\u307e\u3059\u3002

      Make tests
      make tests\n

      \u3053\u308c\u306b\u3088\u308a\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u30c6\u30b9\u30c8\u306e\u4e00\u90e8\u3060\u3051\u3092\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u3001make tests-list\u3092\u5b9f\u884c\u3057\u3066\u3059\u3079\u3066\u306e\u5b58\u5728\u3059\u308b\u30c6\u30b9\u30c8\u3092\u8868\u793a\u3057\u3001\u305d\u308c\u305e\u308c\u3092\u500b\u5225\u306b\u5b9f\u884c\u3057\u307e\u3059\u3002

      \u305f\u3068\u3048\u3070\u3001make tests/node\u306fNode.js Docker\u30a4\u30e1\u30fc\u30b8\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

      \u3067 \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u5185\u90e8\u3067\u4f55\u304c\u8d77\u3053\u3063\u3066\u3044\u308b\u306e\u304b\u3092\u5b9f\u969b\u306b\u898b\u308b\u305f\u3081\u306b\u306f\u3001make logs\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059:

      Make logs
      make logs\n

      \u307e\u305f\u306f\u7279\u5b9a\u306e\u30b5\u30fc\u30d3\u30b9\u3060\u3051\u3092\u8868\u793a\u3059\u308b\u306b\u306f:

      Make logs
      make logs service=webhook-handler\n
      "},{"location":"ja/contributing-to-lagoon/tests/#2","title":"2. \u81ea\u52d5\u5316\u3055\u308c\u305f\u7d71\u5408\u30c6\u30b9\u30c8","text":"

      Lagoon\u306b\u5bfe\u3057\u3066\u4f5c\u6210\u3055\u308c\u305f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30c6\u30b9\u30c8\u3059\u308b\u305f\u3081\u306b\u3001\u5c02\u7528\u306eJenkins\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u5b8c\u5168\u306b\u81ea\u52d5\u5316\u3055\u308c\u305f\u7d71\u5408\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059:https://ci.lagoon.sh\u3002\u3053\u308c\u306f.Jenkinsfile\u5185\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001\u958b\u304b\u308c\u305f\u3059\u3079\u3066\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u81ea\u52d5\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002

      \u3053\u308c\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u3001Kubernetes\u30af\u30e9\u30b9\u30bf\u304c\u8d77\u52d5\u3057\u3001\u4e00\u9023\u306e\u30c6\u30b9\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002

      \u30c6\u30b9\u30c8\u306f\u3053\u3053\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

      • https://ci.lagoon.sh/blue/organizations/jenkins/lagoon/activity
      "},{"location":"ja/docker-images/commons/","title":"Commons","text":"

      Lagoon commons Docker\u30a4\u30e1\u30fc\u30b8\u3002\u516c\u5f0f\u306eAlpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u3002

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u81ea\u4f53\u306f\u6a5f\u80fd\u3092\u6301\u3061\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001\u4ed6\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306e\u57fa\u672c\u30a4\u30e1\u30fc\u30b8\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002Lagoon\u5185\u306e\u3059\u3079\u3066\u306ealpine\u30d9\u30fc\u30b9\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u3001commons\u304b\u3089\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u7d99\u627f\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/commons/#_1","title":"\u30c4\u30fc\u30eb","text":"
      • docker-sleep - \u6a19\u6e96\u5316\u3055\u308c\u305f1\u6642\u9593\u306e\u30b9\u30ea\u30fc\u30d7\u6a5f\u80fd
      • fix-permissions - \u6307\u5b9a\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u81ea\u52d5\u7684\u306b\u5168\u30b0\u30eb\u30fc\u30d7\u306e\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u306b\u5909\u66f4
      • wait-for - \u30b5\u30fc\u30d3\u30b9\u304c\u6b63\u3057\u3044\u9806\u5e8f\u3067\u8d77\u52d5\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5c0f\u3055\u306a\u30b9\u30af\u30ea\u30d7\u30c8 - https://github.com/eficode/wait-for \u3092\u57fa\u306b\u3057\u3066\u3044\u307e\u3059
      • entrypoint-readiness - \u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u308b\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u304c\u5b8c\u4e86\u3057\u305f\u3053\u3068\u3092\u78ba\u8a8d
      • entrypoints - /lagoon/entrypoints/* \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u3059\u3079\u3066\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806/\u6570\u5024\u9806\u306b\u8aad\u307f\u8fbc\u3080\u30b9\u30af\u30ea\u30d7\u30c8
      "},{"location":"ja/docker-images/commons/#_2","title":"\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u306e\u4e00\u89a7\u306fhttps://github.com/uselagoon/lagoon-images/tree/main/images/commons/lagoon/entrypoints\u306b\u3042\u308a\u307e\u3059\u3002\u4ee5\u964d\u306e\u4e0b\u6d41\u30a4\u30e1\u30fc\u30b8\u3082\u3001/lagoon\u914d\u4e0b\u306b\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u8ffd\u52a0\u3067\u304d\u3001\u6700\u7d42\u7684\u306a\u30a4\u30e1\u30fc\u30b8\u3067\u5b9f\u884c\u3055\u307e\u3059\u3002

      "},{"location":"ja/docker-images/mariadb/","title":"MariaDB","text":"

      MariaDB\u306f\u3001MySQL\u306e\u5f8c\u7d99\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u3059\u3002

      Lagoon\u306e MariaDB \u30a4\u30e1\u30fc\u30b8\u306eDockerfile\u306f\u3001\u516c\u5f0f\u306eAlpine\u30a4\u30e1\u30fc\u30b8\u3067\u63d0\u4f9b\u3055\u308c\u308b mariadb \u3068 mariadb-client \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u3002

      \u3053\u306eDockerfile\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eMariaDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      • 10.4 Dockerfile (Alpine 3.12 \u306f2022\u5e745\u6708\u307e\u3067\u30b5\u30dd\u30fc\u30c8) - uselagoon/mariadb-10.4
      • 10.5 Dockerfile (Alpine 3.14 \u306f2023\u5e745\u6708\u307e\u3067\u30b5\u30dd\u30fc\u30c8) - uselagoon/mariadb-10.5
      • 10.6 Dockerfile (Alpine 3.16 \u306f2024\u5e745\u6708\u307e\u3067\u30b5\u30dd\u30fc\u30c8) - uselagoon/mariadb-10.6
      • 10.11 Dockerfile (Alpine 3.18 \u306f2025\u5e745\u6708\u307e\u3067\u30b5\u30dd\u30fc\u30c8) - uselagoon/mariadb-10.11

      \u60c5\u5831

      \u3053\u308c\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u516c\u5f0f\u306eMariaDB\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u69cb\u7bc9\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30af\u30eb\u304c\u7570\u306a\u308a\u3001\u57fa\u76e4\u3068\u306a\u308bAlpine\u30a4\u30e1\u30fc\u30b8\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u671f\u9593\u306e\u307f\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://alpinelinux.org/releases/\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5b9f\u969b\u306b\u306f\u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001MariaDB\u30b3\u30f3\u30c6\u30ca\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u307f\u5b9f\u884c\u3057\u3001\u672c\u756a\u74b0\u5883\u3067\u306fDBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u304c\u63d0\u4f9b\u3059\u308bManaged Cloud Databases\u3092\u5229\u7528\u3057\u307e\u3059\u3002

      "},{"location":"ja/docker-images/mariadb/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      MariaDB\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c83306\u3067\u3059\u3002

      Lagoon\u304cMariaDB\u30b3\u30f3\u30c6\u30ca\u306e\u5b9f\u884c\u65b9\u6cd5\u3092\u6700\u9069\u306b\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001lagoon.type: mariadb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306f\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u3067\u5229\u7528\u53ef\u80fd\u306a\u5834\u5408\u3001\u30af\u30e9\u30a6\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u5185\u3067MariaDB\u3092\u78ba\u5b9f\u306b\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u3001lagoon.type: mariadb-single\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002MariaDB\u30b3\u30f3\u30c6\u30ca\u306b\u5bfe\u3057\u3066\u306f\u3001\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5e38\u306b/var/lib/mysql\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • readiness-probe.sh \u30b9\u30af\u30ea\u30d7\u30c8\u3001MariaDB \u30b3\u30f3\u30c6\u30ca\u306e\u6e96\u5099\u5b8c\u4e86\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
      "},{"location":"ja/docker-images/mariadb/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
          mariadb:\nimage: uselagoon/mariadb-10.6-drupal:latest\nlabels:\n# Lagoon\u306bMariaDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u308b\nlagoon.type: mariadb\nports:\n# \u30dd\u30fc\u30c83306\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u3067\u516c\u958b\u3057\u3001`docker-compose port mariadb 3306`\u3067\u305d\u308c\u3092\u898b\u3064\u3051\u308b\n- \"3306\"\nvolumes:\n# MariaDB\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u306b\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\n- db:/var/lib/mysql\n
      "},{"location":"ja/docker-images/mariadb/#included-tools","title":"\u30c4\u30fc\u30eb","text":"
      • mysqltuner.pl - \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u8abf\u6574\u306b\u4fbf\u5229\u306aPerl\u30b9\u30af\u30ea\u30d7\u30c8\u3002
      • mysql-backup.sh - \u958b\u767a\u74b0\u5883\u3067 MySQL \u306e\u65e5\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u81ea\u52d5\u5316\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3002
      • pwgen - \u30e9\u30f3\u30c0\u30e0\u3067\u8907\u96d1\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u751f\u6210\u3059\u308b\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u3002
      "},{"location":"ja/docker-images/mariadb/#included-mycnf-configuration-file","title":"my.cnf \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Lagoon\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u305f \u30c7\u30d5\u30a9\u30eb\u30c8 \u306eMariaDB\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u4ed8\u5c5e\u3057\u3066\u3044\u307e\u3059\u3002\u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

      "},{"location":"ja/docker-images/mariadb/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"\u74b0\u5883\u5909\u6570\u540d \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e MARIADB_DATABASE lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d MARIADB_USER lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc MARIADB_PASSWORD lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 MARIADB_ROOT_PASSWORD Lag00n MariaDB\u306e\u30eb\u30fc\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 MARIADB_CHARSET utf8mb4 \u30b5\u30fc\u30d0\u30fc\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b MARIADB_COLLATION utf8mb4_bin \u30b5\u30fc\u30d0\u30fc\u306e\u7167\u5408\u9806\u5e8f\u3092\u8a2d\u5b9a\u3059\u308b MARIADB_MAX_ALLOWED_PACKET 64M max_allowed_packet\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3059\u308b MARIADB_INNODB_BUFFER_POOL_SIZE 256M MariaDB InnoDB\u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3057\u307e\u3059 MARIADB_INNODB_BUFFER_POOL_INSTANCES 1 InnoDB\u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6570 MARIADB_INNODB_LOG_FILE_SIZE 64M InnoDB\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u30b5\u30a4\u30ba MARIADB_LOG_SLOW (\u8a2d\u5b9a\u306a\u3057) \u9045\u3044\u30af\u30a8\u30ea\u306e\u4fdd\u5b58\u3092\u5236\u5fa1\u3059\u308b\u5909\u6570 MARIADB_LOG_QUERIES (\u8a2d\u5b9a\u306a\u3057) \u3059\u3079\u3066\u306e\u30af\u30a8\u30ea\u306e\u4fdd\u5b58\u3092\u5236\u5fa1\u3059\u308b\u5909\u6570 BACKUPS_DIR /var/lib/mysql/backup \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9 MARIADB_DATA_DIR /var/lib/mysql MariaDB\u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3002\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u3053\u306e\u5024\u3092\u5909\u66f4\u3059\u308b\u3068\u30c7\u30fc\u30bf\u640d\u5931\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff01 MARIADB_COPY_DATA_DIR_SOURCE (\u8a2d\u5b9a\u306a\u3057) Mariadb\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u3001\u8a2d\u5b9a\u3055\u308c\u305fARIADB_DATA_DIR\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3059\u308b\u969b\u306b\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u306b\u3064\u3044\u3066\u30bb\u30eb\u540d\u3057\u307e\u3059\u3002\u3053\u306e\u30d1\u30b9\u3092\u5229\u7528\u3057\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u3042\u3089\u304b\u3058\u3081MariaDB\u306b\u6295\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u305f\u3060\u3057\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306fSQL\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u306a\u304f\u3001\u5b9f\u969b\u306eMariaDB\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002 \u3055\u3089\u306b\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u30b3\u30d4\u30fc\u5148\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u65e2\u5b58\u306eMySQL\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u3001\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002

      LAGOON_ENVIRONMENT_TYPE \u5909\u6570\u304c production \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f MARIADB_INNODB_BUFFER_POOL_SIZE=1024 \u304a\u3088\u3073 MARIADB_INNODB_LOG_FILE_SIZE=256 \u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u6700\u9069\u5316\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/docker-images/mongodb/","title":"MongoDB","text":"

      MongoDB\u306f\u3001\u6c4e\u7528\u7684\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u578b\u5206\u6563\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308a\u3001\u73fe\u4ee3\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u8005\u3084\u30af\u30e9\u30a6\u30c9\u6642\u4ee3\u306e\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u3066\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30c7\u30fc\u30bf\u306f JSON\u306e\u3088\u3046\u306a\u5f62\u5f0f\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u4fdd\u5b58\u3055\u308c\u307e\u3059

      • \u51fa\u5178: mongodb.com
      "},{"location":"ja/docker-images/mongodb/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"

      4.0 Dockerfile - uselagoon/mongo-4

      \u3053\u306eDockerfile\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eMongoDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/docker-images/mongodb/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u3082\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3001Kubernetes\u3084OpenShift\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002
      "},{"location":"ja/docker-images/mysql/","title":"MySQL","text":"

      MySQL\u306f\u4eba\u6c17\u306e\u3042\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0(RDBMS)\u3067\u3059\u3002

      Lagoon\u306e MySQl \u30a4\u30e1\u30fc\u30b8\u306eDockerfile\u306f\u3001\u516c\u5f0f\u306e\u30a2\u30c3\u30d7\u30b9\u30c8\u30ea\u30fc\u30e0docker \u30a4\u30e1\u30fc\u30b8mysql(Oracle Linux variant)\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u3053\u306eDockerfile\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eMariaDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      • 8.0 Dockerfile (2026\u5e744\u6708\u307e\u3067\u5ef6\u9577\u30b5\u30dd\u30fc\u30c8) - uselagoon/mysql-8.0
      • 8.4 Dockerfile (2032\u5e744\u6708\u307e\u3067\u5ef6\u9577\u30b5\u30dd\u30fc\u30c8) - uselagoon/mysql-8.4

      \u60c5\u5831

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fMariaDB\u30a4\u30e1\u30fc\u30b8\u306e\u5b8c\u5168\u306a\u4ee3\u66ff\u54c1\u3068\u3057\u3066\u4f5c\u3089\u308c\u305f\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u52d5\u4f5c\u3055\u305b\u308b\u306b\u306f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u5fc5\u8981\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/docker-images/mysql/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      MySQL\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c83306\u3067\u3059\u3002

      Lagoon\u304cMySQL\u30b3\u30f3\u30c6\u30ca\u306e\u5b9f\u884c\u65b9\u6cd5\u3092\u6700\u9069\u306b\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001lagoon.type: mariadb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306f\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u3067\u5229\u7528\u53ef\u80fd\u306a\u5834\u5408\u3001\u30af\u30e9\u30a6\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u5185\u3067MySQL\u3092\u78ba\u5b9f\u306b\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u3001lagoon.type: mariadb-single\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002MySQL\u30b3\u30f3\u30c6\u30ca\u306b\u5bfe\u3057\u3066\u306f\u3001\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5e38\u306b/var/lib/mysql\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • readiness-probe.sh \u30b9\u30af\u30ea\u30d7\u30c8\u3001MariaDB \u30b3\u30f3\u30c6\u30ca\u306e\u6e96\u5099\u5b8c\u4e86\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
      "},{"location":"ja/docker-images/mysql/#docker-composeyml-snippet-for-non-drupal-projects","title":"\u975eDrupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306edocker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
          mariadb:\nimage: uselagoon/mysql-8.4:latest\nlabels:\n# Lagoon\u306bMariaDB\u4e92\u63db\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u308b\nlagoon.type: mariadb\nports:\n# \u30dd\u30fc\u30c83306\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u3067\u516c\u958b\u3057\u3001`docker-compose port mysql 3306`\u3067\u305d\u308c\u3092\u898b\u3064\u3051\u308b\n- \"3306\"\nvolumes:\n# MySQL\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u306b\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\n- db:/var/lib/mysql\n
      "},{"location":"ja/docker-images/mysql/#docker-composeyml-snippet-for-drupal-projects","title":"Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306edocker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
          mariadb:\nimage: uselagoon/mysql-8.4:latest\nlabels:\n# Lagoon\u306bMariaDB\u4e92\u63db\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u308b\nlagoon.type: mariadb\nports:\n# \u30dd\u30fc\u30c83306\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u3067\u516c\u958b\u3057\u3001`docker-compose port mysql 3306`\u3067\u305d\u308c\u3092\u898b\u3064\u3051\u308b\n- \"3306\"\nenvironment:\n# Lagoon\u3067Drupal\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u671f\u5f85\u3059\u308b\u8a8d\u8a3c\u60c5\u5831\u3068\u4e00\u81f4\u3059\u308b\u3088\u3046\u306b\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8a8d\u8a3c\u60c5\u5831\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u307e\u3059\u3002\n- MYSQL_DATABASE=drupal\n- MYSQL_USER=drupal\n- MYSQL_PASSWORD=drupal\nvolumes:\n# MySQL\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u306b\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\n- db:/var/lib/mysql\n
      "},{"location":"ja/docker-images/mysql/#included-tools","title":"\u30c4\u30fc\u30eb","text":"
      • mysqltuner.pl - \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u8abf\u6574\u306b\u4fbf\u5229\u306aPerl\u30b9\u30af\u30ea\u30d7\u30c8\u3002
      • mysql-backup.sh - \u958b\u767a\u74b0\u5883\u3067 MySQL \u306e\u65e5\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u81ea\u52d5\u5316\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3002
      • pwgen - \u30e9\u30f3\u30c0\u30e0\u3067\u8907\u96d1\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u751f\u6210\u3059\u308b\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u3002
      "},{"location":"ja/docker-images/mysql/#included-mycnf-configuration-file","title":"my.cnf \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Lagoon\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u305f \u30c7\u30d5\u30a9\u30eb\u30c8 \u306eMariaDB\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

      "},{"location":"ja/docker-images/mysql/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"\u74b0\u5883\u5909\u6570\u540d \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e MYSQL_DATABASE lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d MYSQL_USER lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc MYSQL_PASSWORD lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 MYSQL_ROOT_PASSWORD Lag00n MariaDB\u306e\u30eb\u30fc\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 MYSQL_CHARSET utf8mb4 \u30b5\u30fc\u30d0\u30fc\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b MYSQL_COLLATION utf8mb4_bin \u30b5\u30fc\u30d0\u30fc\u306e\u7167\u5408\u9806\u5e8f\u3092\u8a2d\u5b9a\u3059\u308b MYSQL_MAX_ALLOWED_PACKET 64M max_allowed_packet\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3059\u308b MYSQL_INNODB_BUFFER_POOL_SIZE 256M MySQL InnoDB\u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3057\u307e\u3059 MYSQL_INNODB_BUFFER_POOL_INSTANCES 1 InnoDB\u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6570 MYSQL_INNODB_LOG_FILE_SIZE 64M InnoDB\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u30b5\u30a4\u30ba MYSQL_LOG_SLOW (\u8a2d\u5b9a\u306a\u3057) \u9045\u3044\u30af\u30a8\u30ea\u306e\u4fdd\u5b58\u3092\u5236\u5fa1\u3059\u308b\u5909\u6570 MYSQL_LOG_QUERIES (\u8a2d\u5b9a\u306a\u3057) \u3059\u3079\u3066\u306e\u30af\u30a8\u30ea\u306e\u4fdd\u5b58\u3092\u5236\u5fa1\u3059\u308b\u5909\u6570 BACKUPS_DIR /var/lib/mysql/backup \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9 MYSQL_DATA_DIR /var/lib/mysql MySQL\u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3002\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u3053\u306e\u5024\u3092\u5909\u66f4\u3059\u308b\u3068\u30c7\u30fc\u30bf\u640d\u5931\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff01 MARIADB_COPY_DATA_DIR_SOURCE (\u8a2d\u5b9a\u306a\u3057) MySQL\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u3001\u8a2d\u5b9a\u3055\u308c\u305fMYSQL_DATA_DIR\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3059\u308b\u969b\u306b\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u306b\u3064\u3044\u3066\u30bb\u30eb\u540d\u3057\u307e\u3059\u3002\u3053\u306e\u30d1\u30b9\u3092\u5229\u7528\u3057\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u3042\u3089\u304b\u3058\u3081MySQL\u306b\u6295\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u305f\u3060\u3057\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306fSQL\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u306a\u304f\u3001\u5b9f\u969b\u306eMySQL\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002 \u3055\u3089\u306b\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u30b3\u30d4\u30fc\u5148\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u65e2\u5b58\u306eMySQL\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u3001\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002

      LAGOON_ENVIRONMENT_TYPE \u5909\u6570\u304c production \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f MYSQL_INNODB_BUFFER_POOL_SIZE=1024 \u304a\u3088\u3073 MYSQL_INNODB_LOG_FILE_SIZE=256 \u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u6700\u9069\u5316\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/docker-images/nginx/","title":"NGINX","text":"

      Lagoon\u306e nginx \u30a4\u30e1\u30fc\u30b8Dockerfile\u3067\u3059\u3002\u516c\u5f0f\u306eopenresty/openresty \u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u3053\u306eDockerfile\u306f\u3001Lagoon\u5185\u306e\u3042\u3089\u3086\u308b\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u306e\u30d9\u30fc\u30b9\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/nginx/#lagoon","title":"Lagoon\u306e\u8abf\u6574\u4e8b\u9805","text":"

      NGINX\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f 8080 \u30dd\u30fc\u30c8\u3067\u3059\u3002

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • /etc/nginx/* \u5185\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u306b\u3088\u3063\u3066 envplate \u3092\u901a\u3058\u3066\u51e6\u7406\u3055\u308c\u307e\u3059\u3002
      "},{"location":"ja/docker-images/nginx/#nginx-static-filesconf","title":"NGINX \u8a2d\u5b9a(static-files.conf)","text":"

      \u8b66\u544a

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f NGINX \u306f\u9759\u7684\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3084PHP\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u5fc5\u8981\u306a\u3044\u9759\u7684\u30b5\u30a4\u30c8\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059:\u4f8b\u3048\u3070\u3001\u9759\u7684\u30b5\u30a4\u30c8\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30fc\u306e Hugo\u3001Jekyll\u3001Gatsby \u306a\u3069\u3067\u3059\u3002

      PHP\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001php-fpm\u30a4\u30e1\u30fc\u30b8\u3092\u53c2\u7167\u3057\u3001nginx\u3068php-fpm\u3092\u4e00\u7dd2\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      \u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u30d3\u30eb\u30c9\u3057\u3001nginx\u30b3\u30f3\u30c6\u30ca\u306b\u6295\u5165\u3057\u307e\u3059\u3002

      "},{"location":"ja/docker-images/nginx/#_1","title":"\u30d8\u30eb\u30d1\u30fc","text":""},{"location":"ja/docker-images/nginx/#redirects-mapconf","title":"redirects-map.conf","text":"

      \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u3001redirects-map.conf\u30d5\u30a1\u30a4\u30eb\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3092\u4f7f\u7528\u3057\u3066\u3001\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u30c9\u30e1\u30a4\u30f3\u3092\u30b5\u30d6\u30b5\u30a4\u30c8\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u305f\u308a\u3001www\u306a\u3057\u3092www\u4ed8\u304d\u306b\u3059\u308b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u304c\u591a\u3044\u5834\u5408\u306f\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306bredirects-map.conf\u3092\u30b3\u30fc\u30c9\u306e\u96a3\u306b\u4fdd\u5b58\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002

      \u6ce8\u610f:

      \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u304c\u5c11\u306a\u3044\u5834\u5408\u306f\u3001nginx.dockerfile\u306eRUN\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u4fbf\u5229\u306a\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002

      \u4ee5\u4e0b\u306f\u3001www.example.com\u3092example.com\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4fdd\u6301\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3059\u4f8b\u3067\u3059:

      Redirect
      RUN echo \"~^www.example.com http://example.com\\$request_uri;\" >> /etc/nginx/redirects-map.conf\n

      \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u7a2e\u985e\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001redirects-map.conf\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      redirects-map.conf\u3092\u914d\u7f6e\u3057\u305f\u3089\u3001\u30d3\u30eb\u30c9\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u308a\u8fbc\u3080\u305f\u3081\u306b\u3001nginx.dockerfile\u306b\u3082\u305d\u308c\u3092\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      nginx.dockerfile
      COPY redirects-map.conf /etc/nginx/redirects-map.conf\n
      "},{"location":"ja/docker-images/nginx/#_2","title":"\u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c","text":"

      BASIC_AUTH_USERNAME\u304a\u3088\u3073 BASIC_AUTH_PASSWORD \u74b0\u5883\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u306f\u81ea\u52d5\u7684\u306b\u6709\u52b9\u306b\u306a\u308a\u307e\u3059\u3002

      \u8b66\u544a

      \u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u306e\u81ea\u52d5\u8a2d\u5b9a\u306f\u3001\u5229\u4fbf\u6027\u306e\u305f\u3081\u306b\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3084\u6a5f\u5bc6\u30c7\u30fc\u30bf\u3092\u4fdd\u8b77\u3059\u308b\u305f\u3081\u306e\u5b89\u5168\u306a\u65b9\u6cd5\u3068\u306f\u307f\u306a\u3055\u308c\u307e\u305b\u3093\u3002

      "},{"location":"ja/docker-images/nginx/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e BASIC_AUTH restricted \u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306f off \u306b\u8a2d\u5b9a\u3057\u307e\u3059 BASIC_AUTH_USERNAME (\u8a2d\u5b9a\u306a\u3057) \u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u306e\u30e6\u30fc\u30b6\u30fc\u30cd\u30fc\u30e0 BASIC_AUTH_PASSWORD (\u8a2d\u5b9a\u306a\u3057) \u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u306e\u30d1\u30b9\u30ef\u30fc\u30c9(\u975e\u6697\u53f7\u5316) FAST_HEALTH_CHECK (\u8a2d\u5b9a\u306a\u3057) \u7279\u5b9a\u306e\u30e6\u30fc\u30b6\u30fc\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8(StatusCake\u3001Pingdom\u3001Site25x7\u3001Uptime\u3001nagios)\u304b\u3089\u306eGET\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u3001\u8efd\u91cf\u306aLagoon\u30b5\u30fc\u30d3\u30b9\u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u306b\u306f\u3001true\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002"},{"location":"ja/docker-images/nodejs/","title":"Node.js","text":"

      Lagoon\u306e Node.js Docker\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002\u516c\u5f0f\u306eNode Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/nodejs/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"

      Node.js\u306e\u30a4\u30e1\u30fc\u30b8\u306f2\u3064\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002\u901a\u5e38\u306enode:version\u30a4\u30e1\u30fc\u30b8\u3068node:version-builder\u3067\u3059\u3002

      node:version-builder\u306b\u306f\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30d3\u30eb\u30c9\u3059\u308b\u969b\u306b\u5fc5\u8981\u306a\u8ffd\u52a0\u30c4\u30fc\u30eb(\u30d3\u30eb\u30c9\u30e9\u30a4\u30d6\u30e9\u30ea\u3001npm\u3001Yarn\u306a\u3069)\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u8a73\u7d30\u306a\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001Dockerfile\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      • 12 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/node-12
      • 14 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/node-14
      • 16 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/node-16
      • 18 Dockerfile (2025\u5e744\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/node-18
      • 20 Dockerfile (2026\u5e744\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/node-20
      • 22 Dockerfile (2027\u5e744\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/node-22

      \u30d2\u30f3\u30c8

      Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fNode.js\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://nodejs.org/en/about/releases/\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

      "},{"location":"ja/docker-images/nodejs/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      Node.js\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c83000\u3067\u3059\u3002

      Lagoon\u3067\u306f\u3001lagoon.type: node-persistent\u3092\u4f7f\u7528\u3057\u3066\u3001\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002\u8a73\u7d30\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

      \u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3067\u4ee5\u4e0b\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059:

      • lagoon.persistent = \u30b3\u30f3\u30c6\u30ca\u5185\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059 - \u4f8b\u3048\u3070\u3001/app/files
      • lagoon.persistent.size = Lagoon\u306b\u5bfe\u3057\u3001\u3053\u306e\u30d1\u30b9\u306b\u5272\u308a\u5f53\u3066\u308b\u30b9\u30c8\u30ec\u30fc\u30b8\u5bb9\u91cf\u3092\u6307\u5b9a\u3057\u307e\u3059
      • \u540c\u3058\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5171\u6709\u3059\u308b\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u4f7f\u7528\u3057\u307e\u3059 lagoon.persistent.name = (\u30aa\u30d7\u30b7\u30e7\u30f3)\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u540c\u3058\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5171\u6709\u3059\u308b\u5834\u5408\u3001\u5225\u306e\u540d\u524d\u4ed8\u304d\u30b5\u30fc\u30d3\u30b9\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306bLagoon\u306b\u6307\u793a\u3057\u307e\u3059\u3002
      "},{"location":"ja/docker-images/nodejs/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
          node:\nbuild:\n# \u30eb\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u306b\u3042\u308bDockerfile\u304b\u3089\u30d3\u30eb\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# Lagoon\u306b\u5bfe\u3057\u3066\u3001Node.js\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308b\u3053\u3068\u3001/app/files\u306b500MB\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\nlagoon.type: node-persistent\nlagoon.persistent: /app/files\nlagoon.persistent.size: 500Mi\n\u30dd\u30fc\u30c8:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# \u30dd\u30fc\u30c83000\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3057\u3001\n# `docker-compose port node 3000`\u3067\u30dd\u30fc\u30c8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n- \"3000\"\n\u30dc\u30ea\u30e5\u30fc\u30e0:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# files\u3068\u3044\u3046\u540d\u524d\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u5b9a\u7fa9\u3055\u308c\u305f\u30d1\u30b9\u306b\u3092\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u672c\u756a\u74b0\u5883\u3068\u540c\u3058\u72b6\u614b\u3092\u518d\u73fe\u3059\u308b\u305f\u3081\u306b\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u5229\u7528\u3055\u308c\u307e\u3059\u3002\n- files:/app/files\n
      "},{"location":"ja/docker-images/opensearch/","title":"OpenSearch","text":"

      OpenSearch\u306f\u3001\u30c7\u30fc\u30bf\u3092\u7c21\u5358\u306b\u53d6\u308a\u8fbc\u307f\u3001\u691c\u7d22\u3001\u53ef\u8996\u5316\u3001\u5206\u6790\u3059\u308b\u305f\u3081\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4e3b\u5c0e\u306eApache2.0\u30e9\u30a4\u30bb\u30f3\u30b9\u3092\u63a1\u7528\u3057\u305f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u304a\u3088\u3073\u5206\u6790\u30b9\u30a4\u30fc\u30c8\u3067\u3059\u3002

      • \u51fa\u5178: https://opensearch.org/
      "},{"location":"ja/docker-images/opensearch/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 2 Dockerfile - uselagoon/opensearch-2
      "},{"location":"ja/docker-images/opensearch/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      OpenSearch \u306e\u4e00\u90e8\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8\u5024 \u8aac\u660e OPENSEARCH_JAVA_OPTS -Xms512m -Xmx512m OpenSearch\u30b3\u30f3\u30c6\u30ca\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u4e21\u65b9\u306e\u5024\u306f\u540c\u3058\u5024\u3067\u306a\u3051\u308c\u3070\u3001OpenSearch\u306f\u6b63\u5e38\u306b\u8d77\u52d5\u3057\u307e\u305b\u3093\u3002"},{"location":"ja/docker-images/opensearch/#_1","title":"\u65e2\u77e5\u306e\u554f\u984c","text":"

      Linux\u30d9\u30fc\u30b9\u306e\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001vm.max_map_count\u8a2d\u5b9a\u304c\u4f4e\u3044\u305f\u3081\u306b\u3001OpenSearch\u30b3\u30f3\u30c6\u30ca\u306e\u8d77\u52d5\u304c\u5931\u6557\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002

      bash title=\"\u30a8\u30e9\u30fc\" opensearch_1 | ERROR: [1] bootstrap checks failed opensearch_1 | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

      \u3053\u306e\u554f\u984c\u306e\u89e3\u6c7a\u7b56\u306f\u3053\u3053\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059.

      "},{"location":"ja/docker-images/php-cli/","title":"PHP-CLI","text":"

      Lagoon\u306e php-cli Docker\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002Lagoon\u306e php-fpm\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3001\u65e5\u5e38\u7684\u306a\u64cd\u4f5c\u306b\u5fc5\u8981\u306a\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u304c\u3059\u3079\u3066\u63c3\u3063\u3066\u3044\u307e\u3059\u3002

      cli\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u8d77\u52d5\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca(\u307e\u305f\u306f\u30dd\u30c3\u30c9)\u306fComposer\u3084Node.js\u30d9\u30fc\u30b9\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b3\u30fc\u30c9\u30d3\u30eb\u30c9\u3092\u62c5\u5f53\u3057\u307e\u3059\u3002

      \u307e\u305f\u3001MariaDB\u3068PostgreSQL\u4e21\u65b9\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9cli\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

      \u60c5\u5831

      \u3053\u306eDockerfile\u306f\u3001Lagoon\u5185\u3067\u306e\u3042\u3089\u3086\u308bcli\u30cb\u30fc\u30ba\u306e\u57fa\u76e4\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/php-cli/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 7.3 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-7.3-cli
      • 7.4 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-7.4-cli
      • 8.0 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-8.0-cli
      • 8.1 Dockerfile (2024\u5e7411\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.1-cli
      • 8.2 Dockerfile (2025\u5e7412\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.2-cli
      • 8.3 Dockerfile (2026\u5e7412\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.3-cli

      \u3059\u3079\u3066\u306ePHP\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u3001\u305d\u308c\u305e\u308c\u306eDockerfiles\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

      "},{"location":"ja/docker-images/php-cli/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • COMPOSER_ALLOW_SUPERUSER=1\u306f\u3001root\u3068\u3057\u3066Composer\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306b\u95a2\u3059\u308b\u8b66\u544a\u3092\u524a\u9664\u3057\u307e\u3059\u3002
      • 80-shell-timeout.sh\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u304cKubernetes\u74b0\u5883\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u3001\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306ecli\u30dd\u30c3\u30c9\u306b\u5bfe\u3057\u306610\u5206\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
      • cli\u30b3\u30f3\u30c6\u30ca\u306f\u3001Lagoon\u306b\u3088\u3063\u3066\u6ce8\u5165\u3055\u308c\u308b\u304b\u3001SSH_PRIVATE_KEY\u74b0\u5883\u5909\u6570\u3067\u5b9a\u7fa9\u3055\u308c\u305fSSH\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
      "},{"location":"ja/docker-images/php-cli/#cli","title":"CLI\u30c4\u30fc\u30eb","text":"

      \u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308bCLI\u30c4\u30fc\u30eb\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:

      • composer\u30d0\u30fc\u30b8\u30e7\u30f31.9.0 ( COMPOSER_VERSION\u304a\u3088\u3073COMPOSER_HASH_SHA256\u7d4c\u7531\u3067\u5909\u66f4\u53ef\u80fd)
      • node.js\u30d0\u30fc\u30b8\u30e7\u30f317 (2022\u5e743\u6708\u73fe\u5728)
      • npm
      • yarn
      • mariadb-client
      • postgres ql-client
      "},{"location":"ja/docker-images/php-cli/#nodejs","title":"Node.js\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u5909\u66f4","text":"

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306fnodejs-current\u30d1\u30c3\u30b1\u30fc\u30b8(2022\u5e743\u6708\u6642\u70b9\u3067v17)\u304c\u642d\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5225\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u73fe\u5728\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u524a\u9664\u3057\u3066\u76ee\u7684\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Node.js 16\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u3001Dockerfile\u3092\u6b21\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002

      Node.js\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u66f4\u65b0
      RUN apk del nodejs-current \\\n&& apk add --no-cache nodejs=~16\n
      "},{"location":"ja/docker-images/php-cli/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002php-fpm\u74b0\u5883\u5909\u6570\u3082\u9069\u7528\u3055\u308c\u307e\u3059\u3002

      \u540d\u524d \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e MARIADB_MAX_ALLOWED_PACKET 64M MySql\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u6700\u5927\u8a31\u5bb9\u30d1\u30b1\u30c3\u30c8\u30b5\u30a4\u30ba\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002"},{"location":"ja/docker-images/php-fpm/","title":"PHP-FPM","text":"

      Lagoon\u306e php-fpm Docker\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002\u516c\u5f0f\u306ePHP Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      PHP-FPM(FastCGI Process Manager)\u306f\u3001FastCGI \u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305f PHP \u306e\u5b9f\u88c5\u306e\u3072\u3068\u3064\u3067\u3001\u69d8\u3005\u306a\u898f\u6a21\u306e\u30b5\u30a4\u30c8\u3001\u7279\u306b\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u304c\u591a\u3044\u30b5\u30a4\u30c8\u5411\u3051\u306b\u4fbf\u5229\u306a\u8ffd\u52a0\u6a5f\u80fd\u3092\u5099\u3048\u3066\u3044\u307e\u3059\u3002

      • \u51fa\u5178: https://php-fpm.org/

      FastCGI\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u6642\u9593\u306e\u304b\u304b\u308b\u30b3\u30fc\u30c9\u3092\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u30ed\u30fc\u30c9\u3055\u308c\u308b\u6bce\u5ea6\u3067\u306f\u306a\u304f\u3001\u4e00\u5ea6\u3060\u3051\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u524a\u6e1b\u3057\u307e\u3059\u3002

      \u60c5\u5831

      Dockerfile\u306f\u3001Lagoon\u5185\u3067PHP\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306e\u30d9\u30fc\u30b9\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u60f3\u5b9a\u3067\u3059\u3002\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u81ea\u4f53\u304c\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u3092\u4f5c\u6210\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001php-fpm\u306b\u3088\u308bFastCGI\u30ea\u30b9\u30ca\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002php-fpm\u30d7\u30fc\u30eb\u306e\u8a2d\u5b9a\u3092\u8abf\u6574\u3059\u308b\u5fc5\u8981\u304c\u751f\u3058\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

      "},{"location":"ja/docker-images/php-fpm/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 7.3 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-7.3-fpm
      • 7.4 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-7.4-fpm
      • 8.0 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-8.0-fpm
      • 8.1 Dockerfile (2024\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.1-fpm
      • 8.2 Dockerfile (2025\u5e7412\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.2-fpm
      • 8.3 Dockerfile (2026\u5e7412\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.3-fpm

      \u3059\u3079\u3066\u306ePHP\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u305d\u308c\u305e\u308c\u306eDockerfiles\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

      \u30d2\u30f3\u30c8

      Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fPHP\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://www.php.net/supported-versions.php\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

      "},{"location":"ja/docker-images/php-fpm/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • /usr/local/etc/php/php.ini \u304a\u3088\u3073 /usr/local/etc/php-fpm.conf\u30d5\u30a1\u30a4\u30eb\u3001/usr/local/etc/php-f pm.d/\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u5168\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u901a\u3057\u3066envplate\u3067\u51e6\u7406\u3055\u308c\u307e\u3059\u3002
      • \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b PHP \u62e1\u5f35\u6a5f\u80fd\u306b\u3064\u3044\u3066\u306f\u3001Dockerfile\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      • \u3055\u3089\u306a\u308b\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u3082\u3068\u306bDockerfile\u3092\u62e1\u5f35\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u62e1\u5f35\u6a5f\u80fd\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306f\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8How to install more PHP extensions.\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
      "},{"location":"ja/docker-images/php-fpm/#php","title":"PHP\u8a2d\u5b9a","text":"

      PHP \u8a2d\u5b9a\u306b\u306f\u3001PHP\u30d7\u30fc\u30eb\u8a2d\u5b9a\u306e\u4f5c\u6210\u3092\u5bb9\u6613\u306b\u3059\u308b\u305f\u3081\u306e\u9069\u5207\u306a\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u305d\u306e\u4e00\u90e8\u306e\u30ea\u30b9\u30c8\u3067\u3059\u3002\u8a73\u7d30\u306f/usr/local/etc/php.ini\u3001/usr/local/etc/php-fpm.conf \u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:

      \u5024 \u8a73\u7d30 max_execution_time = 900 PHP_MAX_EXECUTION_TIME \u3067\u5909\u66f4\u53ef\u80fd realpath_cache_size = 256k \u5927\u898f\u6a21\u306aPHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6271\u3046\u305f\u3081\u306e\u8a2d\u5b9a memory_limit = 400M \u5927\u898f\u6a21\u306aPHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6271\u3046\u305f\u3081\u306e\u8a2d\u5b9a(PHP_MEMORY_LIMIT \u3067\u5909\u66f4\u53ef\u80fd) opcache.memory_consumption = 265 \u5927\u898f\u6a21\u306aPHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6271\u3046\u305f\u3081\u306e\u8a2d\u5b9a opcache.enable_file_override = 1 \u3068 opcache.huge_code_pages = 1 \u3088\u308a\u9ad8\u901f\u306aPHP\u306e\u305f\u3081\u306e\u8a2d\u5b9a display_errors = Off \u3068 display_startup_errors = Off \u5b9f\u7528\u7684\u306aproduction\u8a2d\u5b9a (PHP_DISPLAY_ERRORS \u304a\u3088\u3073 PHP_DISPLAY_STARTUP_ERRORS \u3067\u5909\u66f4\u53ef\u80fd)\u3002 upload_max_filesize = 2048M \u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u305f\u3081\u306e\u8a2d\u5b9a apc.shm_size = 32m \u3068 apc.enabled = 1 PHP_APC_SHM_SIZE \u304a\u3088\u3073 PHP_APC_ENABLED \u3067\u5909\u66f4\u53ef\u80fd

      \u307e\u305f\u3001php-fpm\u306e\u30a8\u30e9\u30fc\u30ed\u30b0\u306f stderr\u306b\u8a18\u9332\u3055\u308c\u307e\u3059\u3002

      \ud83d\udca1 \u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306e\u3044\u305a\u308c\u3082\u6c17\u306b\u5165\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u6b21\u306e3\u3064\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059:

      1. \u8a2d\u5b9a\u5024\u304c\u74b0\u5883\u5909\u6570\u3067\u5909\u66f4\u3067\u304d\u308b\u5834\u5408\u306f\u3001\u74b0\u5883\u5909\u6570\u3092\u4f7f\u3063\u3066\u304f\u3060\u3055\u3044(\u3053\u308c\u304c\u63a8\u5968\u3055\u308c\u308b\u65b9\u6cd5\u3067\u3059\u3002\u74b0\u5883\u5909\u6570\u306e\u8868 \u306e\u8a73\u7d30\u306f\u4ee5\u4e0b\u306e\u8868\u306b\u307e\u3068\u3081\u3066\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u53c2\u7167\u304f\u3060\u3055\u3044\u3002)
      2. \u4ee5\u4e0b\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3042\u308bphp_admin_value\u304a\u3088\u3073php_admin_flag\u3092\u4f7f\u3063\u3066\u3001\u72ec\u81ea\u306e\u30ab\u30b9\u30bf\u30e0fpm-pool\u8a2d\u5b9a\u3092\u4f5c\u6210\u3057\u3001\u305d\u308c\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
        • \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001PHP \u3092 Apache \u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306fApache\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u3057\u3066\u306ePHP\u5b9f\u884c\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u304c\u3001php-fpm \u306b\u3082\u5f53\u3066\u306f\u307e\u308a\u307e\u3059\u3002 \u91cd\u8981:
          • \u72ec\u81ea\u306e php-fpm \u30d7\u30fc\u30eb\u3092\u9069\u7528\u3057\u305f\u3044\u5834\u5408\u306f\u3001/usr/local/etc/php-fpm.d/www.conf\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u5206\u306e\u8a2d\u5b9a\u3067\u4e0a\u66f8\u304d\u3059\u308b\u304b\u3001\u5225\u306e\u540d\u524d\u3092\u4ed8\u3051\u305f\u3044\u5834\u5408\u306f\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u64cd\u4f5c\u3092\u884c\u308f\u306a\u3044\u3068\u3001\u6700\u521d\u304b\u3089\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u30d7\u30fc\u30eb\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002
          • PHP_INI_SYSTEM\u5909\u66f4\u53ef\u80fd\u30e2\u30fc\u30c9\u306ePHP\u306e\u8a2d\u5b9a\u5024\u306f\u3001fpm-pool\u8a2d\u5b9a\u3067\u306f\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u3046\u3044\u3063\u305f\u8a2d\u5b9a\u5024\u306f\u3001\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u74b0\u5883\u5909\u6570\u3092\u4f7f\u3046\u304b\u3001\u307e\u305f\u306f:
          • \u72ec\u81ea\u306ephp.ini\u307e\u305f\u306fphp-fpm.conf\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059(\u3053\u306e\u65b9\u6cd5\u306f\u63a8\u5968\u3055\u308c\u307e\u305b\u3093)
      "},{"location":"ja/docker-images/php-fpm/#fpm-pool","title":"\u30c7\u30d5\u30a9\u30eb\u30c8\u306efpm-pool","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u3001fpm-pool\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb(php-fpm.d/www.conf)\u304c\u542b\u307e\u308c\u3066\u304a\u308a\u3001\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306ffpm-pool\u3092\u4f5c\u6210\u3057\u3001\u30dd\u30fc\u30c89000\u3067\u30ea\u30c3\u30b9\u30f3\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u307b\u3068\u3093\u3069\u306ePHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30cb\u30fc\u30ba\u3092\u6700\u521d\u304b\u3089\u30ab\u30d0\u30fc\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3067\u3059\u3002\u3082\u3061\u308d\u3093\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u72ec\u81ea\u306e\u8a2d\u5b9a\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

      \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u306e\u8aac\u660e:

      • IPv4\u3068IPv6\u3067\u30dd\u30fc\u30c89000\u3067\u30ea\u30c3\u30b9\u30f3\u3057\u307e\u3059\u3002
      • pm dynamic\u3092\u4f7f\u7528\u3057\u30012\u304b\u308950\u307e\u3067\u306e\u5b50\u30d7\u30ed\u30bb\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
      • \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306b\u3001500\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5f8c\u306bphp-fpm\u30d7\u30fc\u30eb\u306e\u5b50\u30d7\u30ed\u30bb\u30b9\u3092\u518d\u751f\u6210\u3057\u307e\u3059\u3002
      • /ping\u3078\u306efastcgi\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066pong\u3067\u5fdc\u7b54\u3057\u307e\u3059(\u30d7\u30fc\u30eb\u304c\u8d77\u52d5\u3057\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306e\u81ea\u52d5\u30c6\u30b9\u30c8\u306b\u4fbf\u5229)\u3002
      • catch_workers_output = yes\u306b\u3088\u308a\u3001PHP\u306e\u30a8\u30e9\u30fc\u3092\u78ba\u8a8d\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u3002
      • clear_env = no\u306b\u3088\u308a\u3001\u901a\u5e38\u306e Docker \u74b0\u5883\u5909\u6570\u3092\u4f7f\u3063\u3066 PHP \u74b0\u5883\u5909\u6570\u3092\u6ce8\u5165\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b
      "},{"location":"ja/docker-images/php-fpm/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e NEWRELIC_ENABLED false NewRelic\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u6709\u52b9\u306b\u3059\u308b\u306b\u306fNEWRELIC_LICENSE\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3059\u3002 NEWRELIC_LICENSE (\u8a2d\u5b9a\u306a\u3057) \u4f7f\u7528\u3059\u308bNewRelic\u306e\u30e9\u30a4\u30bb\u30f3\u30b9\u3002\u91cd\u8981:NewRelic\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306fNEWRELIC_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 NEWRELIC_BROWSER_MONITORING_ENABLED true NewRelic\u30d6\u30e9\u30a6\u30b6\u76e3\u8996\u7528\u306eJavaScript\u30d5\u30e9\u30b0\u30e1\u30f3\u30c8\u306e\u81ea\u52d5\u633f\u5165\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u91cd\u8981:NewRelic\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306fNEWRELIC_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 NEWRELIC_DISTRIBUTED_TRACING_ENABLED false \u5206\u6563\u30c8\u30ec\u30fc\u30b9\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u91cd\u8981:NewRelic\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001NEWRELIC_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 PHP_APC_ENABLED 1 APC\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306f0\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002 PHP_APC_SHM_SIZE 32m \u5404\u5171\u6709\u30e1\u30e2\u30ea\u30bb\u30b0\u30e1\u30f3\u30c8\u306e\u30b5\u30a4\u30ba\u3002 PHP_DISPLAY_ERRORS Off \u30a8\u30e9\u30fc\u3092\u8868\u793a\u3055\u308c\u308b\u304b\u975e\u8868\u793a\u306b\u3059\u308b\u304b\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_DISPLAY_STARTUP_ERRORS Off \u8d77\u52d5\u6642\u306e\u30a8\u30e9\u30fc\u3092\u8868\u793a\u3059\u308b\u304b\u975e\u8868\u793a\u3059\u308b\u304b\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_ERROR_REPORTING Production E_ALL & ~E _DEPRECATED & ~E_STRICT Development: E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE PHP\u306b\u4f7f\u7528\u3055\u308c\u308bdesired logging\u30ec\u30d9\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_MAX_CHILDREN 50 \u5b50\u30d7\u30ed\u30bb\u30b9\u306e\u6700\u5927\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3002 PHP_FPM_PM_MAX_REQUESTS 500 \u5404\u5b50\u30d7\u30ed\u30bb\u30b9\u304c\u518d\u751f\u6210\u3055\u308c\u308b\u524d\u306b\u5b9f\u884c\u3059\u308b\u3079\u304d\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_MAX_SPARE_SERVERS 2 \u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306e\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u6700\u5927\u8a31\u5bb9\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_MIN_SPARE_SERVERS 2 \u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306e\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u6700\u5c0f\u8a31\u5bb9\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_PROCESS_IDLE_TIMEOUT 60s \u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u7d42\u4e86\u3055\u308c\u308b\u307e\u3067\u306e\u79d2\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_START_SERVERS 2 \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u5b50\u30d7\u30ed\u30bb\u30b9\u306e\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_MAX_EXECUTION_TIME 900 \u5404\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u6700\u5927\u5b9f\u884c\u6642\u9593(\u79d2)\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_MAX_FILE_UPLOADS 20 \u540c\u6642\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u5927\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_MAX_INPUT_VARS 2000 \u53d7\u3051\u5165\u308c\u53ef\u80fd\u306a\u5165\u529b\u5909\u6570\u306e\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_MEMORY_LIMIT 400M \u30b9\u30af\u30ea\u30d7\u30c8\u304c\u6d88\u8cbb\u3067\u304d\u308b\u30e1\u30e2\u30ea\u306e\u6700\u5927\u91cf\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 XDEBUG_ENABLE (\u8a2d\u5b9a\u306a\u3057) xdebug \u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001true\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 BLACKFIRE_ENABLED (\u8a2d\u5b9a\u306a\u3057) blackfire \u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f true \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 BLACKFIRE_SERVER_ID (\u8a2d\u5b9a\u306a\u3057) Blackfire.io\u304c\u63d0\u4f9b\u3059\u308bBlackfire\u30b5\u30fc\u30d0\u30fcID\u3002BLACKFIRE_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 BLACKFIRE_SERVER_TOKEN (\u8a2d\u5b9a\u306a\u3057) Blackfire.io\u304c\u63d0\u4f9b\u3059\u308bBlackfire\u30b5\u30fc\u30d0\u30fc\u30c8\u30fc\u30af\u30f3\u3002BLACKFIRE_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 BLACKFIRE_LOG_LEVEL 3 blackfire\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u30ed\u30b0\u30ec\u30d9\u30eb\u3092\u5909\u66f4\u3057\u307e\u3059\u3002\u5229\u7528\u53ef\u80fd\u306a\u5024:\u30ed\u30b0\u306e\u5197\u9577\u6027\u30ec\u30d9\u30eb (4: \u30c7\u30d0\u30c3\u30b0, 3: \u60c5\u5831, 2: \u8b66\u544a, 1: \u30a8\u30e9\u30fc) \u8a73\u7d30\u306f\u3001blackfire.io\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002"},{"location":"ja/docker-images/postgres/","title":"PostgreSQL","text":"

      Lagoon PostgreSQL Docker\u30a4\u30e1\u30fc\u30b8\u3002\u516c\u5f0fPostgreSQL Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/postgres/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 11 (\u4e92\u63db\u6027\u306e\u305f\u3081\u3060\u3051\u306b\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u306b\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093) - uselagoon/postgres-11
      • 12 Dockerfile (2024\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-12
      • 13 Dockerfile (2025\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-13
      • 14 Dockerfile (2026\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-14
      • 15 Dockerfile (2027\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-15
      • 16 Dockerfile (2028\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-16

      \u30d2\u30f3\u30c8

      Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fPostgreSQL\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://www.postgresql.org/support/versioning\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

      "},{"location":"ja/docker-images/postgres/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      Postgres\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c85432\u3067\u3059\u3002

      Lagoon\u304cPostgres\u30b3\u30f3\u30c6\u30ca\u306e\u5b9f\u884c\u65b9\u6cd5\u3092\u6700\u9069\u306b\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001lagoon.type: postgres\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306f\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u3067\u5229\u7528\u53ef\u80fd\u306a\u5834\u5408\u3001\u30af\u30e9\u30a6\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u5185\u3067Postgres\u3092\u78ba\u5b9f\u306b\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u3001lagoon.type: postgres-single\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002Postgres\u30b3\u30f3\u30c6\u30ca\u306b\u5bfe\u3057\u3066\u306f\u3001\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5e38\u306b/var/lib/postgresql/data\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/docker-images/postgres/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
      postgres:\nimage: uselagoon/postgres-14-drupal:latest\nlabels:\n# Lagoon\u306bPostgres\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u308b\nlagoon.type: postgres\nports:\n# \u30dd\u30fc\u30c85432\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u3067\u516c\u958b\u3057\u3001\n# `docker-compose port postgres 5432`\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\n- \"5432\"\nvolumes:\n# Postgres\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u306b\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\n- db:/var/lib/postgresql/data\n
      "},{"location":"ja/docker-images/postgres/#_1","title":"\u30d2\u30f3\u30c8\uff06\u30b3\u30c4","text":"

      \u30b3\u30f3\u30c6\u30ca\u8d77\u52d5\u76f4\u5f8c\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u521d\u671f\u5316\u3059\u308b\u305f\u3081\u306eSQL\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u306e.sql\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30f3\u30c6\u30ca\u306edocker-entrypoint-initdb.d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u914d\u7f6e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b .sql \u30d5\u30a1\u30a4\u30eb\u306f\u3001PostgreSQL\u30b3\u30f3\u30c6\u30ca\u306e\u8d77\u52d5\u6642\u306b\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u3055\u308c\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u521d\u671f\u5316\u51e6\u7406\u306e\u4e00\u90e8\u3068\u3057\u3066\u52d5\u4f5c\u3057\u307e\u3059\u3002

      \u8b66\u544a

      \u3053\u308c\u3089\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u7a7a\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3055\u308c\u305f\u5834\u5408\u306b\u306e\u307f\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5bfe\u3057\u3066\u306f\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3002

      "},{"location":"ja/docker-images/python/","title":"Python","text":"

      Lagoon python Docker image\u3002\u3053\u308c\u306f\u516c\u5f0f\u306ePython Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/python/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 2.7 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/python-2.7
      • 3.7 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/python-3.7
      • 3.8 Dockerfile (2024\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/python-3.8
      • 3.9 Dockerfile (2025\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/python-3.9
      • 3.10 Dockerfile (2026\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/python-3.10
      • 3.11 Dockerfile (2027\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/python-3.11
      • 3.12 Dockerfile (2028\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8)- uselagoon/python-3.12

      \u30d2\u30f3\u30c8

      Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fPython\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://devguide.python.org/versions/#versions\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

      "},{"location":"ja/docker-images/python/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      Python\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c88800\u3067\u3059\u3002

      Lagoon\u3067\u306f\u3001lagoon.type: python-persistent\u3092\u4f7f\u7528\u3057\u3066\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

      \u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3067\u4ee5\u4e0b\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059: lagoon.persistent = \u30b3\u30f3\u30c6\u30ca\u5185\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059 - \u4f8b\u3048\u3070/app/files lagoon.persistent.size = Lagoon\u306b\u5bfe\u3057\u3066\u3001\u3053\u306e\u30d1\u30b9\u306b\u5272\u308a\u5f53\u3066\u308b\u30b9\u30c8\u30ec\u30fc\u30b8\u5bb9\u91cf\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

      \u540c\u3058\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5171\u6709\u3059\u308b\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u4f7f\u7528\u3057\u307e\u3059 lagoon.persistent.name =(\u30aa\u30d7\u30b7\u30e7\u30f3)\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u540c\u3058\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5171\u6709\u3059\u308b\u5834\u5408\u3001\u5225\u306e\u540d\u524d\u4ed8\u304d\u30b5\u30fc\u30d3\u30b9\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306bLagoon\u306b\u6307\u793a\u3057\u307e\u3059\u3002

      "},{"location":"ja/docker-images/python/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
      python:\nbuild:\n# \u30eb\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u306b\u3042\u308bDockerfile\u3092\u4f7f\u7528\u3057\u3066\u30d3\u30eb\u30c9\u3092\u884c\u3046\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# Lagoon\u306b\u5bfe\u3057\u3001Python\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308b\u3053\u3068\u3068\u3001/app/files\u306b500MB\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\nlagoon.type: python-persistent\nlagoon.persistent: /app/files\nlagoon.persistent.size: 500Mi\nports:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# \u30dd\u30fc\u30c88800\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3057\u3001\n# `docker compose port node 8800`\u3067\u30dd\u30fc\u30c8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n- \"8800\"\nvolumes:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# files\u3068\u3044\u3046\u540d\u524d\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u5b9a\u7fa9\u3055\u308c\u305f\u30d1\u30b9\u306b\u3092\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u672c\u756a\u74b0\u5883\u3068\u540c\u3058\u72b6\u614b\u3092\u518d\u73fe\u3059\u308b\u305f\u3081\u306b\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u5229\u7528\u3055\u308c\u307e\u3059\u3002\n- files:/app/files\n
      "},{"location":"ja/docker-images/rabbitmq/","title":"RabbitMQ","text":"

      Lagoon RabbitMQ Dockerfile\u3067\u3001\u7ba1\u7406\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u3059\u3002docker-hub\u306b\u3042\u308b\u516c\u5f0f\u306erabbitmq:3-management\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u3002

      \u3053\u306eDockerfile\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eRabbitMQ\u30ad\u30e5\u30fc\u30d6\u30ed\u30fc\u30ab\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u3060\u3051\u3067\u306a\u304f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u9ad8\u53ef\u7528\u6027\u30ad\u30e5\u30fc\u30b5\u30dd\u30fc\u30c8(\u30df\u30e9\u30fc\u30ea\u30f3\u30b0\u30ad\u30e5\u30fc)\u3092\u5099\u3048\u305f\u30af\u30e9\u30b9\u30bf\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3068\u3057\u3066\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001RabbitMQ\u30d6\u30ed\u30fc\u30ab\u30fc\u306f\u30b7\u30f3\u30b0\u30eb\u30ce\u30fc\u30c9\u3067\u8d77\u52d5\u3057\u307e\u3059\u3002\u30af\u30e9\u30b9\u30bf\u3092\u8d77\u52d5\u3059\u308b\u5834\u5408\u306f\u3001rabbitmq\u30a4\u30e1\u30fc\u30b8\u306b\u52a0\u3048\u3066rabbitmq_peer_discovery_k8s\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u7d44\u307f\u8fbc\u307e\u308c\u305frabbitmq-cluster Docker\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/docker-images/rabbitmq/#_1","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 3.10 Dockerfile (2023\u5e747\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/rabbitmq
      "},{"location":"ja/docker-images/rabbitmq/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • /etc/rabbitmq/definitions.json\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u6301\u3064envplate\u3092\u901a\u3057\u3066\u51e6\u7406\u3055\u308c\u307e\u3059\u3002
      "},{"location":"ja/docker-images/rabbitmq/#rabbitmqdefinitionsjson","title":"RabbitMQ\u30c7\u30d5\u30a9\u30eb\u30c8\u30b9\u30ad\u30fc\u30de(definitions.json)","text":"
      • \u30df\u30e9\u30fc\u30ea\u30f3\u30b0\u30ad\u30e5\u30fc\u306e\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u306b\u306f\u3001\u5c11\u306a\u304f\u3068\u3082\u4e00\u3064\u306epolicy\u304c\u5fc5\u8981\u3067\u3059\u3002
      • definitions.json\u30b9\u30ad\u30fc\u30de\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u5b9f\u884c\u3001virtualhost(vhost)\u3001\u7ba1\u7406UI\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eusername\u3001password\u3001permissions\u3001policies\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306e\u6700\u5c0f\u9650\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u8d77\u52d5\u6642\u306blagoon-ha\u3068\u3044\u3046\u540d\u524d\u306e\u30dd\u30ea\u30b7\u30fc\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u304c\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u30ad\u30e5\u30fc\u540d\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u4e00\u81f4\u3057\u306a\u3044\u305f\u3081\u3001\u30a2\u30af\u30c6\u30a3\u30d6\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

      definitions.json
      \"policies\":[\n{\"vhost\":\"${RABBITMQ_DEFAULT_VHOST}\",\"name\":\"lagoon-ha\",\"pattern\":\"${RABBITMQ_DEFAULT_HA_PATTERN}\", \"definition\":{\"ha-mode\":\"exactly\",\"ha-params\":2,\"ha-sync-mode\":\"automatic\",\"ha-sync-batch-size\":5}}\n]\n

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001ha-mode\u306fexactly\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u304a\u308a\u3001\u30ad\u30e5\u30fc(mirrors)\u306e\u30df\u30e9\u30fc\u30ea\u30f3\u30b0\u30ce\u30fc\u30c9\u306e\u6b63\u78ba\u306a\u6570\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002\u30ce\u30fc\u30c9\u306e\u6570\u306f ha-params \u3067\u5236\u5fa1\u3055\u308c\u307e\u3059\u3002

      \u8a73\u7d30\u306a\u60c5\u5831\u3084\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306f\u3001\u516c\u5f0f\u306e RabbitMQ \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/docker-images/rabbitmq/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e RABBITMQ_DEFAULT_USER guest \u7ba1\u7406UI\u3078\u306e\u30a2\u30af\u30bb\u30b9\u7528\u306e\u30e6\u30fc\u30b6\u540d RABBITMQ_DEFAULT_PASS guest \u7ba1\u7406UI\u3078\u306e\u30a2\u30af\u30bb\u30b9\u7528\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 RABBITMQ_DEFAULT_VHOST / RabbitMQ\u306e\u30e1\u30a4\u30f3\u306e\u4eee\u60f3\u30db\u30b9\u30c8 RABBITMQ_DEFAULT_HA_PATTERN ^$ \u30df\u30e9\u30fc\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30ad\u30e5\u30fc\u3092\u4e00\u81f4\u3055\u305b\u308b\u305f\u3081\u306e\u6b63\u898f\u8868\u73fe"},{"location":"ja/docker-images/redis/","title":"Redis","text":"

      Lagoon Redis\u30a4\u30e1\u30fc\u30b8Dockerfile \u306f\u3001\u516c\u5f0f redis:alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u3053\u306eDockerfile\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eRedis ephemeral \u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/redis/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 5 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/redis-5\u307e\u305f\u306fuselagoon/redis-5-persistent
      • 6 Dockerfile - uselagoon/redis-6\u307e\u305f\u306fuselagoon/redis-6-persistent
      • 7 Dockerfile - uselagoon/redis-7\u307e\u305f\u306fuselagoon/redis-7-persistent
      "},{"location":"ja/docker-images/redis/#_1","title":"\u4f7f\u7528\u65b9\u6cd5","text":"

      Redis\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Ephemeral(\u4e00\u6642\u7684)\u3068Persistent(\u6c38\u7d9a\u7684)\u306e2\u7a2e\u985e\u306e\u30bf\u30a4\u30d7\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/docker-images/redis/#ephemeral","title":"Ephemeral(\u4e00\u6642\u7684)","text":"

      Ephemeral\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e00\u6642\u7684\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u304a\u308a\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u30c7\u30fc\u30bf\u306f\u4fdd\u6301\u3055\u308c\u307e\u305b\u3093\u3002

      \u30e1\u30e2\u30ea\u5185(RAM)\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u5927\u304d\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u6700\u521d\u306b\u8abf\u6574\u3057\u305f\u3044\u306e\u304cMAXMEMORY\u5909\u6570\u3067\u3059\u3002\u3053\u306e\u5909\u6570\u306f\u3001Redis\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30a2\u30a4\u30c6\u30e0\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u30e1\u30e2\u30ea(RAM)\u306e\u6700\u5927\u91cf\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002

      "},{"location":"ja/docker-images/redis/#persistent","title":"Persistent (\u6c38\u7d9a\u7684)","text":"

      Persistent\u306aRedis\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u30c7\u30fc\u30bf\u3092\u4fdd\u6301\u3057\u3001\u30ad\u30e5\u30fc\u3084\u6c38\u7d9a\u5316\u304c\u5fc5\u8981\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30fc\u30bf\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

      Redis\u30b3\u30f3\u30c6\u30ca\u304c\u518d\u8d77\u52d5\u3057\u3066\u30c7\u30a3\u30b9\u30af\u304b\u3089\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080\u9593\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u4e88\u671f\u3057\u306a\u3044\u526f\u4f5c\u7528\u304c\u751f\u3058\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u901a\u5e38\u306f\u30e1\u30e2\u30ea\u5185\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30b7\u30ca\u30ea\u30aa\u3067Persistent Redis\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306f\u304a\u52e7\u3081\u3057\u307e\u305b\u3093\u3002

      "},{"location":"ja/docker-images/redis/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • /etc/redis/*\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u901a\u3057\u3066envplate\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002
      "},{"location":"ja/docker-images/redis/#redisconf","title":"redis.conf \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Lagoon\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u305f \u30c7\u30d5\u30a9\u30eb\u30c8 \u306eRedis\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/redis/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 -1 \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u6570(-1\u306f\u7121\u5236\u9650) \u30ed\u30b0\u30ec\u30d9\u30eb \u901a\u77e5 \u30ed\u30b0\u306e\u30ec\u30d9\u30eb\u3092\u5b9a\u7fa9\u3057\u307e\u3059 \u6700\u5927\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf 100mb \u6700\u5927\u30e1\u30e2\u30ea\u5bb9\u91cf \u6700\u5927\u30e1\u30e2\u30ea\u30dd\u30ea\u30b7\u30fc allkeys-lru Redis\u304c\u6700\u5927\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306b\u9054\u3057\u305f\u3068\u304d\u306b\u30ad\u30fc\u3092\u8ffd\u3044\u51fa\u3059\u305f\u3081\u306e\u30dd\u30ea\u30b7\u30fc REDIS_PASSWORD \u7121\u52b9 \u8a8d\u8a3c\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002"},{"location":"ja/docker-images/redis/#_2","title":"\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a","text":"

      \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u57fa\u3065\u3044\u3066\u3001\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 Redis\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8a73\u7d30\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u3061\u3089\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/docker-images/redis/#redis_1","title":"Redis \u6c38\u7d9a\u5316","text":"

      Lagoon\u306e redis\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u305fLagoon\u306e redis-persistent Docker\u30a4\u30e1\u30fc\u30b8\u306f\u3001Redis\u30b5\u30fc\u30d3\u30b9\u3092persistent\u30e2\u30fc\u30c9\u3067\u4f7f\u7528\u3059\u308b\u5834\u5408(\u3064\u307e\u308a\u3001\u30ad\u30fc\u304c\u30c7\u30a3\u30b9\u30af\u306b\u4fdd\u5b58\u3055\u308c\u308b\u6c38\u7d9a\u5316\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408)\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      redis\u3068\u306e\u9055\u3044\u306f\u3001FLAVOR\u74b0\u5883\u5909\u6570\u306e\u307f\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u4f7f\u7528\u3055\u308c\u308bredis\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5fdc\u3058\u3066\u3001\u305d\u308c\u305e\u308c\u306eRedis\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

      "},{"location":"ja/docker-images/redis/#_3","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"

      Lagoon\u306eRedis\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3059\u3079\u3066redis-cli\u30b3\u30de\u30f3\u30c9\u304c\u4e8b\u524d\u306b\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3092\u4f7f\u7528\u3057\u3066\u3001Redis \u30b5\u30fc\u30d3\u30b9\u306b\u60c5\u5831\u3092\u554f\u3044\u5408\u308f\u305b\u305f\u308a\u3001\u8a2d\u5b9a\u5024\u3092\u52d5\u7684\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u3053\u3053\u306e\u624b\u9806\u3092\u4f7f\u7528\u3057\u3066\u3001pod\u5024\u3068\u3057\u3066redis\u3092\u6307\u5b9a\u3057\u3066Redis\u30dd\u30c3\u30c9\u306bSSH\u3067\u63a5\u7d9a\u3057\u3001\u63a5\u7d9a\u3057\u305f\u3089\u30bf\u30fc\u30df\u30ca\u30eb\u304b\u3089\u5b9f\u884c\u3059\u308b\u3060\u3051\u3067\u3059\u3002

      "},{"location":"ja/docker-images/redis/#_4","title":"\u6700\u5927\u30e1\u30e2\u30ea\u30dd\u30ea\u30b7\u30fc","text":"

      \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001Lagoonredis\u30a4\u30e1\u30fc\u30b8\u306fallkeys-lru\u30dd\u30ea\u30b7\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30dd\u30ea\u30b7\u30fc\u306f\u3001Redis\u30b5\u30fc\u30d3\u30b9\u304cmaxmemory\u5236\u9650\u306b\u9054\u3057\u305f\u5834\u5408\u3001\u6700\u5f8c\u306b\u4f7f\u7528\u3055\u308c\u305f\u30ad\u30fc\u304b\u3089\u9806\u306b\u3001Redis\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u4efb\u610f\u306e\u30ad\u30fc\u3092\u8ffd\u3044\u51fa\u3059\u3053\u3068\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002

      \u4e00\u822c\u7684\u306a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u3001Drupal\u304cRedis\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u5404\u30ad\u30fc\u306bTTL\u5024\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u5834\u5408\u304c\u3042\u308b\u305f\u3081\u3001\u3053\u308c\u304c\u7406\u60f3\u7684\u306a\u8a2d\u5b9a\u3067\u3059\u3002maxmemory-policy\u304cvolatile-lru\u306e\u3088\u3046\u306a\u3082\u306e\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u3066\u3001Drupal\u304c\u3053\u308c\u3089\u306eTTL\u30bf\u30b0\u3092\u63d0\u4f9b\u3057\u306a\u3044\u5834\u5408\u3001Redis\u30b3\u30f3\u30c6\u30ca\u304c\u3044\u3063\u3071\u3044\u306b\u306a\u308a\u3001\u4efb\u610f\u306e\u30ad\u30fc\u306e\u8ffd\u3044\u51fa\u3057\u304c\u5b8c\u5168\u306b\u3067\u304d\u306a\u304f\u306a\u308a\u3001\u65b0\u3057\u3044\u30ad\u30e3\u30c3\u30b7\u30e5\u30ad\u30fc\u306e\u53d7\u3051\u5165\u308c\u3082\u5b8c\u5168\u306b\u505c\u6b62\u3057\u3066\u3057\u307e\u3044\u307e\u3059\u3002

      Redis\u306emaxmemory\u30dd\u30ea\u30b7\u30fc\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u60c5\u5831\u306f\u3001Redis\u306e\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

      \u6ce8\u610f\u3057\u3066\u9032\u3081\u3066\u304f\u3060\u3055\u3044

      \u3053\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u3068\u3001Redis\u304c\u5b8c\u5168\u306b\u3044\u3063\u3071\u3044\u306b\u306a\u308a\u3001\u7d50\u679c\u3068\u3057\u3066\u969c\u5bb3\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/docker-images/redis/#redismaxmemory","title":"Redis\u306emaxmemory\u5024\u306e\u8abf\u6574","text":"

      Redis\u306b\u5272\u308a\u5f53\u3066\u308b\u6700\u9069\u306a\u30e1\u30e2\u30ea\u91cf\u3092\u898b\u3064\u3051\u308b\u306e\u306f\u3001\u306a\u304b\u306a\u304b\u96e3\u3057\u3044\u4f5c\u696d\u3067\u3059\u3002Redis\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30e1\u30e2\u30ea\u30b5\u30a4\u30ba\u3092\u8abf\u6574\u3059\u308b\u524d\u306b\u3001\u901a\u5e38\u901a\u308a\u306e\u4f7f\u7528\u3067\u3001\u5c11\u306a\u304f\u3068\u30821\u65e5\u9593\u306f\u901a\u5e38\u901a\u308a\u306b\u5b9f\u884c\u3055\u305b\u308b\u306e\u304c\u8ce2\u660e\u3067\u3059\u3002

      \u3053\u308c\u3089\u306e\u30e1\u30e2\u30ea\u5024\u3092\u8abf\u6574\u3059\u308b\u969b\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u9ad8\u30ec\u30d9\u30eb\u306a\u30dd\u30a4\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059\uff1a

      • \u6700\u521d\u306b\u78ba\u8a8d\u3059\u308b\u3079\u304d\u3053\u3068\u306f \u73fe\u5728Redis\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u30e1\u30e2\u30ea\u306e\u5272\u5408\u3067\u3059\u3002
        • \u3053\u306e\u5272\u5408\u304c50\uff05\u672a\u6e80\u306e\u5834\u5408\u306f\u3001maxmemory\u306e\u5024\u309225\uff05\u6e1b\u3089\u3059\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
        • \u3053\u306e\u5272\u5408\u304c50\uff05\u304b\u308975\uff05\u306e\u9593\u3067\u3042\u308c\u3070\u3001\u554f\u984c\u306a\u304f\u7a3c\u50cd\u3057\u3066\u3044\u307e\u3059\u3002
        • \u3053\u306e\u5024\u304c75\uff05\u3092\u8d85\u3048\u308b\u5834\u5408\u3001maxmemory\u3092\u5897\u3084\u3059\u5fc5\u8981\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3001\u4ed6\u306e\u5909\u6570\u3092\u78ba\u8a8d\u3059\u308b\u4fa1\u5024\u304c\u3042\u308a\u307e\u3059\u3002
      • Redis\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u304c\u9ad8\u3044\u3068\u5224\u65ad\u3057\u305f\u5834\u5408\u3001\u6b21\u306b\u30ad\u30fc\u306e\u8ffd\u3044\u51fa\u3057\u56de\u6570\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002
        • \u30ad\u30fc\u306e\u8ffd\u3044\u51fa\u3057\u56de\u6570\u304c\u591a\u304f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u304c95\uff05\u3092\u8d85\u3048\u3066\u3044\u308b\u5834\u5408\u306f\u3001Redis\u306emaxmemory\u8a2d\u5b9a\u3092\u9ad8\u304f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002
        • \u30ad\u30fc\u306e\u8ffd\u3044\u51fa\u3057\u56de\u6570\u304c\u591a\u304f\u306a\u3044\u3088\u3046\u3067\u3001\u5fdc\u7b54\u6642\u9593\u304c\u59a5\u5f53\u306a\u5834\u5408\u306f\u3001\u5358\u306b Redis \u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30e1\u30e2\u30ea\u3092\u60f3\u5b9a\u901a\u308a\u306b\u7ba1\u7406\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002
      "},{"location":"ja/docker-images/redis/#_5","title":"\u30b3\u30de\u30f3\u30c9\u4f8b","text":"

      \u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001Redis\u30b5\u30fc\u30d3\u30b9\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059:

      • Redis\u30b5\u30fc\u30d3\u30b9\u306b\u95a2\u3059\u308b\u3059\u3079\u3066\u306e\u60c5\u5831\u3092\u8868\u793a:redis-cli info
      • \u30b5\u30fc\u30d3\u30b9\u306e\u30e1\u30e2\u30ea\u60c5\u5831\u3092\u8868\u793a:redis-cli info memory
      • \u30b5\u30fc\u30d3\u30b9\u306e\u30ad\u30fc\u30b9\u30da\u30fc\u30b9\u60c5\u5831\u3092\u8868\u793a:redis-cli info keyspace
      • \u30b5\u30fc\u30d3\u30b9\u306e\u7d71\u8a08\u60c5\u5831\u3092\u8868\u793a:redis-cli info stats

      Redis\u30b5\u30fc\u30d3\u30b9\u306e\u5024\u3092\u3001Redis\u30b5\u30fc\u30d3\u30b9\u3092\u518d\u8d77\u52d5\u305b\u305a\u306b\u52d5\u7684\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 \u305f\u3060\u3057\u3001\u3053\u308c\u3089\u306e\u52d5\u7684\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u5024\u306f\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3057\u305f\u5834\u5408 (\u30c7\u30d7\u30ed\u30a4\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3001\u307e\u305f\u306f\u5358\u306b\u30ce\u30fc\u30c9\u9593\u3067\u30b7\u30e3\u30c3\u30d5\u30eb\u3055\u308c\u305f\u5834\u5408\u306b\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059) \u306b\u306f\u6c38\u7d9a\u5316\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      • maxmemory\u8a2d\u5b9a\u5024\u3092\u52d5\u7684\u306b500mb\u306b\u8a2d\u5b9a: config set maxmemory 500mb
      • maxmemory-policy\u8a2d\u5b9a\u5024\u3092\u52d5\u7684\u306bvolatile-lru\u306b\u8a2d\u5b9a: config set maxmemory-policy volatile-lru
      "},{"location":"ja/docker-images/ruby/","title":"Ruby","text":"

      Lagoon ruby Docker\u30a4\u30e1\u30fc\u30b8\u3002\u516c\u5f0f\u306ePython Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/ruby/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 3.0 (\u4e92\u63db\u6027\u306e\u305f\u3081\u3060\u3051\u306b\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u306b\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093) - uselagoon/ruby-3.0
      • 3.1 Dockerfile (2025\u5e743\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/ruby-3.1
      • 3.2 Dockerfile (2026\u5e743\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/ruby-3.2
      • 3.3 Dockerfile (2027\u5e743\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/ruby-3.3

      \u30d2\u30f3\u30c8

      Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fRuby\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://www.ruby-lang.org/en/downloads/releases/\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

      "},{"location":"ja/docker-images/ruby/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      ruby\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c83000\u3067\u3059\u3002

      Lagoon\u306b\u306fRuby\u30b5\u30fc\u30d3\u30b9\u5c02\u7528\u306e\u4e8b\u524d\u5b9a\u7fa9\u3055\u308c\u305f\u578b\u306f\u3042\u308a\u307e\u305b\u3093\u3002lagoon.type: generic\u3092\u4f7f\u7528\u3057\u3066\u69cb\u6210\u3057\u3001lagoon.port: 3000 \u3067\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/docker-images/ruby/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
      ruby:\nbuild:\n# \u30eb\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u306b\u3042\u308bDockerfile\u3092\u4f7f\u7528\u3057\u3066\u30d3\u30eb\u30c9\u3092\u884c\u3046\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# Lagoon\u306b\u3053\u308c\u304c\u4e00\u822c\u7684\u306a\u30b5\u30fc\u30d3\u30b9\u3067\u3001\u30dd\u30fc\u30c83000\u3092\u516c\u958b\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u4f1d\u3048\u307e\u3059\nlagoon.type: generic\nlagoon.port: 3000\nports:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# \u30dd\u30fc\u30c83000\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3057\u3001\n# `docker-compose port node 3000`\u3067\u30dd\u30fc\u30c8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n- \"3000\"\n
      "},{"location":"ja/docker-images/solr/","title":"Solr","text":"

      Lagoon Solr\u30a4\u30e1\u30fc\u30b8\u306eDockerfile\u3002\u516c\u5f0f\u306esolr:<version>-alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u3053\u306eDockerfile\u306f\u3001\u521d\u671f\u30b3\u30a2mycore\u3092\u6301\u3064\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eSolr\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

      "},{"location":"ja/docker-images/solr/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 5.5 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059)
      • 6.6 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059)
      • 7.7 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059)
      • 7 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/solr-7
      • 8 Dockerfile - uselagoon/solr-8
      • 9 Dockerfile - uselagoon/solr-9
      "},{"location":"ja/docker-images/solr/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      • 10-solr-port.sh\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001Solr\u30dd\u30fc\u30c8\u306e\u4fee\u6b63\u3068\u78ba\u8a8d\u3092\u884c\u3044\u307e\u3059\u3002
      • 20-solr-datadir.sh\u306f\u3001Solr\u306e\u8a2d\u5b9a\u304cLagoon\u306b\u9069\u5408\u3057\u3066\u3044\u308b\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9\u3092\u8a2d\u5b9a\u3057\u3001\u6b63\u3057\u3044\u30ed\u30c3\u30af\u30bf\u30a4\u30d7\u3092\u69cb\u6210\u3057\u307e\u3059\u3002
      "},{"location":"ja/docker-images/solr/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3092\u901a\u3058\u3066\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e SOLR_JAVA_MEM 512M \u30c7\u30d5\u30a9\u30eb\u30c8\u306eJava HEAP\u30b5\u30a4\u30ba(\u4f8b. SOLR_JAVA_MEM=\"-Xms10g -Xmx10g\") SOLR_DATA_DIR /var/solr Solr\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3002\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u3068\u30c7\u30fc\u30bf\u304c\u5931\u308f\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff01 SOLR_COPY_DATA_DIR_SOURCE (\u8a2d\u5b9a\u306a\u3057) \u8d77\u52d5\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u5b9a\u7fa9\u6e08\u307f\u306eSOLR_DATA_DIR\u306b\u30b3\u30d4\u30fc\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u3067\u3059\u3002\u65e2\u5b58\u306e\u30b3\u30a2\u3092\u4f7f\u3063\u3066 Solr \u3092\u4e8b\u524d\u306b\u8a2d\u5b9a\u3057\u3066\u304a\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30b9\u30af\u30ea\u30d7\u30c8\u306f\u5b9f\u969b\u306e Solr \u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u30b3\u30d4\u30fc\u306f\u3001\u5b9b\u5148\u306b Solr \u30b3\u30a2\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u307f\u884c\u308f\u308c\u307e\u3059\u3002"},{"location":"ja/docker-images/varnish/","title":"Varnish","text":"

      Lagoon\u306e Varnish\u30a4\u30e1\u30fc\u30b8Dockerfile\u3067\u3059\u3002 \u516c\u5f0f Varnish\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/docker-images/varnish/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
      • 5(\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059)- uselagoon/varnish-5
      • 6.0 LTS Dockerfile - uselagoon/varnish-6
      • 7 Dockerfile - uselagoon/varnish-7
      "},{"location":"ja/docker-images/varnish/#included-varnish-modules","title":"Varnish\u30e2\u30b8\u30e5\u30fc\u30eb","text":"
      • vbox-dynamic - DNS \u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u3068 SRV \u30ec\u30b3\u30fc\u30c9\u304b\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u691c\u51fa\u306b\u3088\u308b\u30c0\u30a4\u30ca\u30df\u30c3\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9
      • vbox-bodyaccess - \u30ea\u30af\u30a8\u30b9\u30c8\u30dc\u30c7\u30a3\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b Varnish vmod
      "},{"location":"ja/docker-images/varnish/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

      • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
      "},{"location":"ja/docker-images/varnish/#included-defaultvcl-configuration-file","title":"default.vcl \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

      \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Lagoon\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u305f\u30c7\u30d5\u30a9\u30eb\u30c8\u306evcl\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059(\u74b0\u5883\u5909\u6570\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044)\u3002

      "},{"location":"ja/docker-images/varnish/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

      \u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

      \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e VARNISH_BACKEND_HOST NGINX \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30db\u30b9\u30c8 VARNISH_BACKEND_PORT 8080 \u30c7\u30d5\u30a9\u30eb\u30c8\u306eVarnish\u30dd\u30fc\u30c8 VARNISH_SECRET lagoon_default_secret \u7ba1\u7406\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308bVarnish\u30b7\u30fc\u30af\u30ec\u30c3\u30c8 LIBVMOD_DYNAMIC_VERSION 5.2 vmod-dynamic\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3 LIBVMOD_BODYACCESS_VERSION 5.0 vmod-bodyaccess\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3 HTTP_RESP_HDR_LEN 8k \u4efb\u610f\u306eHTTP\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30ec\u30b9\u30dd\u30f3\u30b9\u30d8\u30c3\u30c0\u306e\u6700\u5927\u9577 HTTP_RESP_SIZE 32k \u51e6\u7406\u53ef\u80fd\u306aHTTP\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6700\u5927\u30d0\u30a4\u30c8\u6570 NUKE_LIMIT 150 \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30dc\u30c7\u30a3\u306e\u305f\u3081\u306e\u7a7a\u304d\u3092\u4f5c\u308b\u305f\u3081\u306b\u524a\u9664\u3092\u8a66\u307f\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u6700\u5927\u6570 CACHE_TYPE malloc varnish\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30bf\u30a4\u30d7 CACHE_SIZE 100M \u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30a4\u30ba LISTEN 8080 \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30b5\u30fc\u30d0\u30fc\u30dd\u30fc\u30c8 MANAGEMENT_LISTEN 6082 \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u7ba1\u7406\u30ea\u30b9\u30cb\u30f3\u30b0\u30dd\u30fc\u30c8"},{"location":"ja/installing-lagoon/add-group/","title":"\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0","text":"\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
        lagoon add group -N groupname\n
      "},{"location":"ja/installing-lagoon/add-project/","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8ffd\u52a0","text":""},{"location":"ja/installing-lagoon/add-project/#lagoon","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092Lagoon\u306b\u8ffd\u52a0\u3059\u308b","text":"
      1. \u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8ffd\u52a0
        lagoon add project \\\n--gitUrl <YOUR-GITHUB-REPO-URL> \\\n--openshift 1 \\\n--productionEnvironment <YOUR-PROD-ENV> \\\n--branches <THE-BRANCHES-YOU-WANT-TO-DEPLOY> \\\n--project <YOUR-PROJECT-NAME>\n
        • --openshift\u306e\u5024\u306f\u3001\u3042\u306a\u305f\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u306eID\u3067\u3059\u3002
        • \u672c\u756a\u74b0\u5883\u306f\u3001\u672c\u756a\u74b0\u5883\u3068\u3057\u3066\u4f7f\u7528\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002
        • \u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u306f\u3001\u6b21\u306e\u3088\u3046\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059:\u201c^(main|develop)$\u201d
        • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u306f\u4f55\u3067\u3082\u826f\u3044 - \u201c\u4f1a\u793e\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8,\u201d \u201c\u4f8b,\u201d \u306a\u3069\u3067\u3059\u3002
      2. Lagoon UI\u306b\u79fb\u52d5\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u30ea\u30b9\u30c8\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3059\uff01

      "},{"location":"ja/installing-lagoon/add-project/#git","title":"\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8ffd\u52a0\u3059\u308b","text":"

      Lagoon\u306f\u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3068\u3057\u3066\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001Lagoon\u304c\u30b3\u30fc\u30c9\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      1. \u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ad\u30fc\u306e\u53d6\u5f97
        lagoon get project-key --project <YOUR-PROJECT-NAME>\n
      2. \u30ad\u30fc\u3092\u30b3\u30d4\u30fc\u3057\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\u3002

      GitHub GitLab Bitbucket

      "},{"location":"ja/installing-lagoon/add-project/#gitwebhooks","title":"Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306bwebhooks\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u8ffd\u52a0\u3059\u308b","text":"

      Lagoon\u304c\u30b3\u30fc\u30c9\u306e\u66f4\u65b0\u6642\u306b\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u308b\u3088\u3046\u306b\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u63a5\u7d9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      1. Lagoon\u30af\u30e9\u30b9\u30bf\u306ewebhook\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002

        • \u30da\u30a4\u30ed\u30fc\u30c9URL: <LAGOON-WEBHOOK-INGRESS>
        • \u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30a4\u30d7: JSON
        • \u30a2\u30af\u30c6\u30a3\u30d6: \u30a2\u30af\u30c6\u30a3\u30d6(\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u6709\u52b9/\u7121\u52b9\u3092\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059)
        • \u30a4\u30d9\u30f3\u30c8: \u95a2\u9023\u3059\u308b\u30a4\u30d9\u30f3\u30c8\u3092\u9078\u629e\u3059\u308b\u304b\u3001\u5168\u3066\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u901a\u5e38\u306f\u30d7\u30c3\u30b7\u30e5\u3001\u30d6\u30e9\u30f3\u30c1\u306e\u4f5c\u6210/\u524a\u9664\u304c\u5fc5\u8981\u3067\u3059

      GitHub GitLab Bitbucket

      "},{"location":"ja/installing-lagoon/create-user/","title":"Lagoon\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210","text":"
      1. Lagoon CLI\u3092\u4f7f\u3063\u3066\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059:

        \u30e6\u30fc\u30b6\u30fc\u306e\u8ffd\u52a0
        lagoon add user --email user@example.com --firstName MyFirstName --lastName MyLastName\n
      2. \u3042\u306a\u305f\u306e\u30e1\u30fc\u30eb\u306b\u79fb\u52d5\u3057\u3001\u30e1\u30fc\u30eb\u5185\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002

      3. \u6307\u793a\u306b\u5f93\u3063\u3066\u4f5c\u6210\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3067Lagoon UI\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3059\u3002
      4. \u30e6\u30fc\u30b6\u30fc\u306eSSH\u516c\u958b\u9375\u3092\u8a2d\u5b9a\u304b\u3089\u8ffd\u52a0\u3057\u307e\u3059\u3002
      "},{"location":"ja/installing-lagoon/deploy-project/","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b","text":"
      1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

        \u30c7\u30d7\u30ed\u30a4
        lagoon deploy branch -p <\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d> -b <\u3042\u306a\u305f\u306e\u30d6\u30e9\u30f3\u30c1\u540d>\n
      2. Lagoon\u306eUI\u306b\u79fb\u52d5\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044 - \u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u74b0\u5883\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3059\uff01

      3. \u30af\u30e9\u30b9\u30bf\u5185\u306ePods\u30ea\u30b9\u30c8\u3092\u78ba\u8a8d\u3057\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u305f\u308a\u3001\u30b5\u30fc\u30d3\u30b9\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u305f\u308a\u3059\u308b\u30d3\u30eb\u30c9Pod\u304c\u898b\u3048\u308b\u306f\u305a\u3067\u3059\u3002\u5168\u3066\u306epods\u3092\u898b\u308b
        kubectl get pods --all-namespaces | grep lagoon-build\n
      "},{"location":"ja/installing-lagoon/gitlab/","title":"GitLab","text":"

      *\u307b\u3068\u3093\u3069\u306e*\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u3053\u308c\u306fLagoon\u3068GitLab\u3092\u30e6\u30fc\u30b6\u30fc\u304a\u3088\u3073\u30b0\u30eb\u30fc\u30d7\u8a8d\u8a3c\u306e\u305f\u3081\u306b\u7d71\u5408\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      1. \u7ba1\u7406\u8005\u6a29\u9650\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u306eGitLab\u3067\u30d1\u30fc\u30bd\u30ca\u30eb\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
      2. your-gitlab.com/admin/hooks \u306e\u4e0b\u306b\u30b7\u30b9\u30c6\u30e0\u30d5\u30c3\u30af\u3092\u4f5c\u6210\u3057\u3001webhookhandler.lagoon.example.com \u306b\u30dd\u30a4\u30f3\u30c8\u3057\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u79d8\u5bc6\u306e\u30c8\u30fc\u30af\u30f3\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002
        1. \u300c\u30ea\u30dd\u30b8\u30c8\u30ea\u66f4\u65b0\u30a4\u30d9\u30f3\u30c8\u300d\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002
      3. lagoon-core-values.yml\u3092\u66f4\u65b0\u3057\u307e\u3059:

        lagoon-core-values.yml
        api:\nadditionalEnvs:\nGITLAB_API_HOST: <<GitLab\u306eURL \u4f8b: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << API\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6301\u3064\u30d1\u30fc\u30bd\u30ca\u30eb\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3 >>\nGITLAB_SYSTEM_HOOK_TOKEN: << \u30b7\u30b9\u30c6\u30e0\u30d5\u30c3\u30af\u79d8\u5bc6\u30c8\u30fc\u30af\u30f3 >>\nwebhook-haondler:\nadditionalEnvs:\nGITLAB_API_HOST: <<GitLab\u306eURL \u4f8b: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << API\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6301\u3064\u30d1\u30fc\u30bd\u30ca\u30eb\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3 >>\nGITLAB_SYSTEM_HOOK_TOKEN: << \u30b7\u30b9\u30c6\u30e0\u30d5\u30c3\u30af\u79d8\u5bc6\u30c8\u30fc\u30af\u30f3 >>\nwebhooks2tasks:\nadditionalEnvs:\nGITLAB_API_HOST: <<GitLab\u306eURL \u4f8b: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << Personal API\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6301\u3064\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3 >>\nGITLAB_SYSTEM_HOOK_TOKEN: << \u30b7\u30b9\u30c6\u30e0\u30d5\u30c3\u30af\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30c8\u30fc\u30af\u30f3 >>\n
      4. lagoon-core helmchart\u3092Helm\u3067\u66f4\u65b0\u3057\u307e\u3059\u3002

      5. \u3059\u3067\u306bKeycloak\u306b\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u305d\u308c\u3089\u3092\u524a\u9664\u3057\u307e\u3059\u3002
      6. API\u30dd\u30c3\u30c9\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:GitLab\u3068\u540c\u671f
          yarn sync:gitlab:all\n
      "},{"location":"ja/installing-lagoon/install-harbor/","title":"Harbor\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"
      1. Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0\u3057\u307e\u3059:

        Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0
        helm repo add harbor https://helm.goharbor.io\n
      2. \u3042\u306a\u305f\u306e\u7279\u5b9a\u306e\u72b6\u6cc1\u306b\u6700\u9069\u306aHarbor\u306e\u8a2d\u5b9a\u3092\u8003\u616e\u3057\u3066\u304f\u3060\u3055\u3044 - \u8a73\u7d30\u306a\u63a8\u5968\u4e8b\u9805\u306b\u3064\u3044\u3066\u306f\u5f7c\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:

        1. \u753b\u50cf\u306eblob(imageChartStorage)\u306b\u306fS3\u4e92\u63db\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002
        2. Postgres\u30b5\u30fc\u30d3\u30b9(database.type)\u306b\u306f\u30de\u30cd\u30fc\u30b8\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002
        3. \u9ad8\u8ca0\u8377\u30b7\u30ca\u30ea\u30aa\u3067\u306f\u3001\u30de\u30cd\u30fc\u30b8\u30c9Redis\u30b5\u30fc\u30d3\u30b9(redis.type)\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002
      3. \u8a2d\u5b9a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306bharbor-values.yml\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30d7\u30ed\u30ad\u30b7\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u6ce8\u91c8\u306f\u5927\u304d\u306a\u753b\u50cf\u306e\u30d7\u30c3\u30b7\u30e5\u306b\u5f79\u7acb\u3061\u307e\u3059:

        harbor-values.yml
        expose:\ningress:\nannotations:\nkubernetes.io/tls-acme: \"true\"\nnginx.ingress.kubernetes.io/proxy-buffering: \"off\"\nnginx.ingress.kubernetes.io/proxy-request-buffering: \"off\"\nhosts:\ncore: harbor.lagoon.example.com\ntls:\nenabled: true\ncertSource: secret\nsecret:\nsecretName: harbor-harbor-ingress\nexternalURL: https://harbor.lagoon.example.com\nharborAdminPassword: <\u3042\u306a\u305f\u306eHarbor\u7ba1\u7406\u8005\u30d1\u30b9\u30ef\u30fc\u30c9>\nchartmuseum:\nenabled: false\nclair:\nenabled: false\nnotary:\nenabled: false\ntrivy:\nenabled: false\njobservice:\njobLogger: stdout\n
      4. \u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308bHarbor\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u8981\u4ef6\u3092\u78ba\u8a8d\u3057\u306a\u304c\u3089\u3001Harbor\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002

        Harbor\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
        helm upgrade --install --create-namespace \\\n--namespace harbor --wait \\\n-f harbor-values.yml \\\nharbor harbor/harbor\n
      5. harbor.yml\u3067\u8a2d\u5b9a\u3057\u305fURL\u3067Harbor\u3092\u8a2a\u308c\u307e\u3059\u3002

        1. \u30e6\u30fc\u30b6\u30fc\u540d:admin
        2. \u30d1\u30b9\u30ef\u30fc\u30c9:
        Harbor\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u53d6\u5f97
        kubectl -n harbor get secret harbor-core -o jsonpath=\"{.data.HARBOR_ADMIN_PASSWORD}\" | base64 --decode\n
      6. \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306eLagoon Remote values.yml\u3068harbor-values.yml\u306b\u4e0a\u8a18\u306eHarbor\u306e\u8cc7\u683c\u60c5\u5831\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      "},{"location":"ja/installing-lagoon/install-lagoon-remote/","title":"Lagoon Remote\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

      \u6b21\u306b\u3001Lagoon Remote\u3092Lagoon\u540d\u524d\u7a7a\u9593\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002RabbitMQ\u30b5\u30fc\u30d3\u30b9\u304c\u30d6\u30ed\u30fc\u30ab\u30fc\u3068\u306a\u308a\u307e\u3059\u3002

      1. \u524d\u306e\u4e8c\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u540c\u69d8\u306b\u3001\u8a2d\u5b9a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306blagoon-remote-values.yml\u3092\u4f5c\u6210\u3057\u3001\u5024\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002

        • rabbitMQPassword
        RabbitMQ password\u3092\u53d6\u5f97
        kubectl -n lagoon-core get secret lagoon-core-broker -o jsonpath=\"{.data.RABBITMQ_PASSWORD}\" | base64 --decode\n
        • rabbitMQHostname
        lagoon-remote-values.yml
        lagoon-core-broker.lagoon-core.svc.local\n
        • taskSSHHost
        SSH Host\u3092\u66f4\u65b0
        kubectl get service lagoon-core-broker-amqp-ext \\\n-o custom-columns=\"NAME:.metadata.name,IP ADDRESS:.status.loadBalancer.ingress[*].ip,HOSTNAME:.status.loadBalancer.ingress[*].hostname\"\n
        • harbor-password
        Harbor secret\u3092\u53d6\u5f97
        kubectl -n harbor get secret harbor-harbor-core -o jsonpath=\"{.data.HARBOR_ADMIN_PASSWORD}\" | base64 --decode\n
      2. Harbor\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30b9\u30c6\u30c3\u30d7\u304b\u3089Harbor\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

        lagoon-remote-values.yml
        lagoon-build-deploy:\nenabled: true\nextraArgs:\n- \"--enable-harbor=true\"\n- \"--harbor-url=https://harbor.lagoon.example.com\"\n- \"--harbor-api=https://harbor.lagoon.example.com/api/\"\n- \"--harbor-username=admin\"\n- \"--harbor-password=<from harbor-harbor-core secret>\"\nrabbitMQUsername: lagoon\nrabbitMQPassword: <from lagoon-core-broker secret>\nrabbitMQHostname: lagoon-core-broker.lagoon-core.svc.cluster.local\nlagoonTargetName: <name of lagoon remote, can be anything>\ntaskSSHHost: <IP of ssh service loadbalancer>\ntaskSSHPort: \"22\"\ntaskAPIHost: \"api.lagoon.example.com\"\ndbaas-operator:\nenabled: true\nmariadbProviders:\nproduction:\nenvironment: production\nhostname: 172.17.0.1.nip.io\nreadReplicaHostnames:\n- 172.17.0.1.nip.io\npassword: password\nport: '3306'\nuser: root\ndevelopment:\nenvironment: development\nhostname: 172.17.0.1.nip.io\nreadReplicaHostnames:\n- 172.17.0.1.nip.io\npassword: password\nport: '3306'\nuser: root\n
      3. ssh-core service account

      4. Lagoon Remote\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b:

        Lagoon remote\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
        helm upgrade --install --create-namespace \\\n--namespace lagoon \\\n-f lagoon-remote-values.yml \\\nlagoon-remote lagoon/lagoon-remote\n
      "},{"location":"ja/installing-lagoon/lagoon-backups/","title":"Lagoon\u30d0\u30c3\u30af\u30a2\u30c3\u30d7","text":"

      Lagoon\u306f\u3001K8up\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059:https://k8up.io\u3002Lagoon\u306fK8up\u3068\u5bc6\u63a5\u306b\u7d71\u5408\u3055\u308c\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3080\u3057\u308d\u3001Lagoon\u306f\u305d\u306e\u30ea\u30bd\u30fc\u30b9\u3092K8up\u304c\u81ea\u52d5\u7684\u306b\u767a\u898b\u3057\u3066\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3067\u304d\u308b\u3088\u3046\u306b\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002

      Lagoon\u306fK8up 1.x\u3068\u5e83\u7bc4\u306b\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u307e\u30602.x\u3068\u306f\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u30021.1.0\u30c1\u30e3\u30fc\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3(\u30a2\u30d7\u30ea\u30d0\u30fc\u30b8\u30e7\u30f3v1.2.0)\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002

      1. \u30dd\u30ea\u30b7\u30fc\u3092\u6301\u3064\u65b0\u3057\u3044AWS\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

        example K8up IAM user
        {\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Sid\":\"VisualEditor0\",\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:ListAllMyBuckets\",\n\"s3:CreateBucket\",\n\"s3:GetBucketLocation\"\n],\n\"Resource\":\"*\"\n},\n{\n\"Sid\":\"VisualEditor1\",\n\"Effect\":\"Allow\",\n\"Action\":\"s3:ListBucket\",\n\"Resource\":\"arn:aws:s3:::baas-*\"\n},\n{\n\"Sid\":\"VisualEditor2\",\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\"\n],\n\"Resource\":\"arn:aws:s3:::baas-*/*\"\n}\n]\n}\n
      2. \u3042\u306a\u305f\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306b\u5408\u308f\u305b\u3066k8up-values.yml\u3092\u4f5c\u6210\u3057\u307e\u3059:

        k8up-values.yml
        k8up:\nenvVars:\n- name: BACKUP_GLOBALS3ENDPOINT\nvalue: 'https://s3.eu-west-1.amazonaws.com'\n- name: BACKUP_GLOBALS3BUCKET\nvalue: ''\n- name: BACKUP_GLOBALKEEPJOBS\nvalue: '1'\n- name: BACKUP_GLOBALSTATSURL\nvalue: 'https://backup.lagoon.example.com'\n- name: BACKUP_GLOBALACCESSKEYID\nvalue: ''\n- name: BACKUP_GLOBALSECRETACCESSKEY\nvalue: ''\n- name: BACKUP_BACKOFFLIMIT\nvalue: '2'\n- name: BACKUP_GLOBALRESTORES3BUCKET\nvalue: ''\n- name: BACKUP_GLOBALRESTORES3ENDPOINT\nvalue: 'https://s3.eu-west-1.amazonaws.com'\n- name: BACKUP_GLOBALRESTORES3ACCESSKEYID\nvalue: ''\n- name: BACKUP_GLOBALRESTORES3SECRETACCESSKEY\nvalue: ''\ntimezone: Europe/Zurich\n
      3. K8up\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb:

        K8up\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u30b9\u30c6\u30c3\u30d71
        helm repo add appuio https://charts.appuio.ch\n
        K8up\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u30b9\u30c6\u30c3\u30d7 2
        kubectl apply -f https://github.com/vshn/k8up/releases/download/v1.2.0/k8up-crd.yaml\n
        K8up\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u30b9\u30c6\u30c3\u30d73
        helm upgrade --install --create-namespace \\\n--namespace k8up \\\n-f k8up-values.yaml \\\n--version 1.1.0 \\\nk8up appuio/k8up\n
      4. lagoon-core-values.yml\u3092\u66f4\u65b0\u3057\u307e\u3059:

        lagoon-core-values.yml
        s3BAASAccessKeyID: <<Access Key ID for restore bucket>>\ns3BAASSecretAccessKey: <<Access Key Secret for restore bucket>>\n
      5. lagoon-core\u3092\u518d\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002

      "},{"location":"ja/installing-lagoon/lagoon-cli/","title":"Lagoon CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"
      1. \u3042\u306a\u305f\u306e\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306b\u5bfe\u5fdc\u3059\u308b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001https://github.com/uselagoon/lagoon-cli#install\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002macOS\u3068Linux\u3067\u306f\u3001Homebrew\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
        1. brew tap uselagoon/lagoon-cli
        2. brew install lagoon
      2. CLI\u306fLagoon\u3068\u3069\u306e\u3088\u3046\u306b\u901a\u4fe1\u3059\u308b\u304b\u3092\u77e5\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

        Lagoon config
            lagoon config add \\\n--graphql https://YOUR-API-URL/graphql \\\n--ui https://YOUR-UI-URL \\\n--hostname YOUR.SSH.IP \\\n--lagoon YOUR-LAGOON-NAME \\\n--port 22\n
      3. SSH\u30ad\u30fc\u3067\u8a8d\u8a3c\u3057\u3066Lagoon\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002

        1. Lagoon UI(URL\u306fvalues.yml\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059)\u306b\u79fb\u52d5\u3057\u3001\u8a2d\u5b9a\u306b\u9032\u307f\u307e\u3059\u3002
        2. \u516c\u958bSSH\u30ad\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
        3. amazee.io\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u4f7f\u7528\u3057\u3088\u3046\u3068\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306eLagoon\u3092_\u3042\u306a\u305f\u306e_ Lagoon\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          Lagoon config
              lagoon config default --lagoon <YOUR-LAGOON-NAME>\n
      4. lagoon login\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002Lagoon\u306fSSH\u306b\u63a5\u7d9a\u3057\u3001\u516c\u958b/\u79d8\u5bc6\u30ad\u30fc\u30da\u30a2\u306b\u5bfe\u3057\u3066\u8a8d\u8a3c\u3092\u884c\u3044\u3001\u30e6\u30fc\u30b6\u30fc\u540d\u306e\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002

      5. lagoon whoami\u3092\u901a\u3058\u3066\u691c\u8a3c\u3057\u307e\u3059\u3002\u305d\u308c\u304c \u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u307e\u3059\u3002

      \u60c5\u5831

      \u4e00\u822c\u7684\u306b\u306fLagoon\u7ba1\u7406\u8005\u30ed\u30fc\u30eb\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u6700\u521d\u306b\u59cb\u3081\u308b\u305f\u3081\u306b\u306f\u7ba1\u7406\u8005\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u7406\u60f3\u7684\u306b\u306f\u3001\u7ba1\u7406\u8005\u3067\u306f_\u306a\u3044_\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u3059\u3050\u306b\u4f5c\u6210\u3057\u3066\u4f5c\u696d\u3092\u884c\u3044\u307e\u3059\u3002

      "},{"location":"ja/installing-lagoon/lagoon-core/","title":"Lagoon Core\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":""},{"location":"ja/installing-lagoon/lagoon-core/#install-the-helm-chart","title":"Helm\u30c1\u30e3\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"
      1. Lagoon Charts\u30ea\u30dd\u30b8\u30c8\u30ea\u3092Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8ffd\u52a0\u3057\u307e\u3059:

        Lagoon Charts\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8ffd\u52a0
        helm repo add lagoon https://uselagoon.github.io/lagoon-charts/\n
      2. \u4f5c\u6210\u3059\u308b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002values.yml\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3067\u3053\u306e\u30d1\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      3. \u4f5c\u6210\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306bvalues.yml\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u3092\u66f4\u65b0\u3057\u307e\u3059(\u305d\u308c\u3089\u3092api.lagoon.example.com\u304b\u3089\u3042\u306a\u305f\u306e\u5024\u306b\u5909\u66f4\u3057\u307e\u3059)\u3002 \u4f8b: https://github.com/uselagoon/lagoon-charts/blob/main/charts/lagoon-core/ci/linter-values.yaml
      4. \u6b21\u306b\u3001values.yml\u3092\u6307\u5b9a\u3057\u3066helm upgrade --install\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059:

        values.yml\u3092\u4f7f\u7528\u3057\u3066Helm\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9
        helm upgrade --install --create-namespace --namespace lagoon-core -f values.yml lagoon-core lagoon/lagoon-core`\n
      5. Lagoon Core\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3057\u305f\uff01

      \u8b66\u544a

      \u6642\u3005\u3001Docker Hub\u306e\u30d7\u30eb\u5236\u9650\u306b\u906d\u9047\u3057\u307e\u3059\u3002\u3053\u308c\u304c\u7d9a\u304f\u5834\u5408\u306f\u3001\u79c1\u305f\u3061\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4ed6\u306e\u5834\u6240\u306b\u79fb\u52d5\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u3044\u307e\u3059\u3002

      "},{"location":"ja/installing-lagoon/lagoon-core/#configure-keycloak","title":"Keycloak \u3092\u69cb\u6210\u3059\u308b","text":"

      Keycloak \u306e values.yml \u3067\u5b9a\u7fa9\u3057\u305f URL \u3067 Keycloak \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002

      1. \u300c\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
      2. \u30e6\u30fc\u30b6\u30fc\u540d: admin
      3. \u30d1\u30b9\u30ef\u30fc\u30c9: lagoon-core-keycloak \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3001\u30ad\u30fc\u5024 KEYCLOAK_ADMIN_PASSWORD \u3092\u4f7f\u7528\u3057\u307e\u3059
      4. \u6b21\u306e\u3088\u3046\u306b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u53d6\u5f97\u3057\u307e\u3059: \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u53d6\u5f97
        kubectl -n lagoon-core get secret lagoon-core-keycloak -o jsonpath=\"{.data.KEYCLOAK_ADMIN_PASSWORD}\" | base64 --decode\n
      5. \u53f3\u4e0a\u306e \u30e6\u30fc\u30b6\u30fc \u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002

        1. \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u7ba1\u7406 \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002

        2. \u4f5c\u6210\u3057\u305f\u7ba1\u7406\u8005\u30a2\u30ab\u30a6\u30f3\u30c8\u306e \u30e1\u30fc\u30eb \u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

        3. \u4fdd\u5b58\u3057\u307e\u3059\u3002

      6. Realm Lagoon -> Realm Settings -> Email \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002

        1. Keycloak \u306e\u30e1\u30fc\u30eb \u30b5\u30fc\u30d0\u30fc\u3092\u8a2d\u5b9a\u3057\u3001\u300cTest connection\u300d\u30dc\u30bf\u30f3\u3067\u63a5\u7d9a\u3092\u30c6\u30b9\u30c8\u3057\u307e\u3059\u3002

      7. Realm Lagoon -> Realm Settings -> Login \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002

        1. \u300cForgot Password\u300d\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002

        2. \u4fdd\u5b58\u3057\u307e\u3059\u3002

      "},{"location":"ja/installing-lagoon/lagoon-core/#log-in-to-the-ui","title":"UI \u306b\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3059\u3002","text":"

      \u3053\u308c\u3067\u3001UI \u306e values.yml \u3067\u5b9a\u7fa9\u3057\u305f URL \u3067 Lagoon UI \u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002

      1. \u30e6\u30fc\u30b6\u30fc\u540d: lagoonadmin
      2. \u30b7\u30fc\u30af\u30ec\u30c3\u30c8: lagoon-core-keycloak \u30b7\u30fc\u30af\u30ec\u30c3\u30c8 \u30ad\u30fc\u5024: LAGOON-CORE-KEYCLOAK \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
      3. \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002 \u79d8\u5bc6\u3092\u53d6\u5f97\u3059\u308b
            kubectl -n lagoon-core get secret lagoon-core-keycloak -o jsonpath=\"{.data.KEYCLOAK_LAGOON_ADMIN_PASSWORD}\" | base64 --decode\n
      "},{"location":"ja/installing-lagoon/lagoon-files/","title":"Lagoon\u30d5\u30a1\u30a4\u30eb","text":"

      Lagoon\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306a\u3069\u306e\u30bf\u30b9\u30af\u306e\u30d5\u30a1\u30a4\u30eb\u51fa\u529b\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u3001S3\u4e92\u63db\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u30db\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002

      1. \u30dd\u30ea\u30b7\u30fc\u3092\u6301\u3064\u65b0\u3057\u3044AWS\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059:

        \u4f8b:\u30d5\u30a1\u30a4\u30ebIAM\u30e6\u30fc\u30b6\u30fc
        {\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:ListBucket\",\n\"s3:GetBucketLocation\",\n\"s3:ListBucketMultipartUploads\"\n],\n\"Resource\":\"arn:aws:s3:::S3_BUCKET_NAME\"\n},\n{\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:AbortMultipartUpload\"\n],\n\"Resource\":\"arn:aws:s3:::S3_BUCKET_NAME/*\"\n}\n]\n}\n
      2. lagoon-core-values.yml\u3092\u66f4\u65b0\u3057\u307e\u3059:

        lagoon-core-values.yml
        s3FilesAccessKeyID: <<\u30a2\u30af\u30bb\u30b9\u30ad\u30fcID>>\ns3FilesBucket: <<Lagoon\u30d5\u30a1\u30a4\u30eb\u7528\u306e\u30d0\u30b1\u30c3\u30c8\u540d>>\ns3FilesHost: <<S3\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8(\u4f8b:\"https://s3.eu-west-1.amazonaws.com\")>>\ns3FilesSecretAccessKey: <<\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u30b7\u30fc\u30af\u30ec\u30c3\u30c8>>\ns3FilesRegion: <<S3\u30ea\u30fc\u30b8\u30e7\u30f3>>\n
      3. \u3082\u3057\u3082\u3042\u306a\u305f\u304c lagoon-core\u306e\u524d\u306bingress-nginx\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u63d0\u6848\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3088\u308a\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059:

        lagoon-core-values.yml
        controller:\nconfig:\nclient-body-timeout: '600' # \u6700\u5927600\u79d2\u306e\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\nproxy-send-timeout: '1800' # \u6700\u592730\u5206\u306e\u63a5\u7d9a - \u30a6\u30a7\u30d6\u30bd\u30b1\u30c3\u30c8\u306b\u5fc5\u8981\nproxy-read-timeout: '1800' # \u6700\u592730\u5206\u306e\u63a5\u7d9a - \u30a6\u30a7\u30d6\u30bd\u30b1\u30c3\u30c8\u306b\u5fc5\u8981\nproxy-body-size: 1024m # 1GB\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\nproxy-buffer-size: 64k # \u5927\u304d\u306a\u30d0\u30c3\u30d5\u30a1\n
      "},{"location":"ja/installing-lagoon/lagoon-logging/","title":"Lagoon\u30ed\u30ae\u30f3\u30b0","text":"

      Lagoon\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30b3\u30f3\u30c6\u30ca\u3001\u30eb\u30fc\u30bf\u30fc\u306e\u30ed\u30b0\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306bOpenSearch\u3068\u7d71\u5408\u3057\u307e\u3059\u3002Lagoon\u30ed\u30ae\u30f3\u30b0\u306f\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304b\u3089\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30eb\u30fc\u30bf\u30fc\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u30ed\u30b0\u3092\u53ce\u96c6\u3057\u3001\u305d\u308c\u3089\u3092\u30ed\u30b0\u96c6\u7d04\u5668\u306b\u9001\u4fe1\u3057\u307e\u3059\u3002\u305d\u308c\u306f\u5404lagoon-remote \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

      \u3055\u3089\u306b\u3001\u305d\u308c\u306flagoon-core\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u30ed\u30b0\u3092\u53ce\u96c6\u3059\u308b\u305f\u3081\u306blagoon-core\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3079\u304d\u3067\u3059\u3002\u3053\u308c\u306fLagoonLogs\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

      \u30ed\u30ae\u30f3\u30b0\u6982\u8981:Lucid Chart

      \u53c2\u7167:Logging\u3002

      Lagoon\u30ed\u30ae\u30f3\u30b0\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044:https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logging

      1. lagoon-logging-values.yaml\u3092\u4f5c\u6210\u3057\u307e\u3059:

        lagoon-logging-values.yaml
        tls:\ncaCert: |\n<< content of ca.pem from Logs-Concentrator>>\nclientCert: |\n<< content of client.pem from Logs-Concentrator>>\nclientKey: |\n<< content of client-key.pem from Logs-Concentrator>>\nforward:\nusername: <<Username for Lagoon Remote 1>>\npassword: <<Password for Lagoon Remote 1>>\nhost: <<ExternalIP of Logs-Concentrator Service LoadBalancer>>\nhostName: <<Hostname in Server Cert of Logs-Concentrator>>\nhostPort: '24224'\nselfHostname: <<Hostname in Client Cert of Logs-Concentrator>>\nsharedKey: <<Generated ForwardSharedKey of Logs-Concentrator>>\ntlsVerifyHostname: false\nclusterName: <<Short Cluster Identifier>>\nlogsDispatcher:\nserviceMonitor:\nenabled: false\nlogging-operator:\nmonitoring:\nserviceMonitor:\nenabled: false\nlagoonLogs:\nenabled: true\nrabbitMQHost: lagoon-core-broker.lagoon-core.svc.cluster.local\nrabbitMQUser: lagoon\nrabbitMQPassword: <<RabbitMQ Lagoon Password>>\nexcludeNamespaces: {}\n
      2. lagoon-logging\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059:

        Install lagoon-logging
        helm repo add banzaicloud-stable https://kubernetes-charts.banzaicloud.com\n\nhelm upgrade --install --create-namespace \\\n--namespace lagoon-logging \\\n-f lagoon-logging-values.yaml \\\nlagoon-logging lagoon/lagoon-logging\n
      "},{"location":"ja/installing-lagoon/lagoon-logging/#logging-nginx-in-gress","title":"Logging NGINX In gress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9","text":"

      lagoon-logging\u5185\u306eingress-nginx\u304b\u3089\u30ed\u30b0\u304c\u5fc5\u8981\u306a\u5834\u5408:

      1. ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306fingress-nginx\u3068\u3044\u3046\u540d\u524d\u7a7a\u9593\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
      2. \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092ingress-nginx\u306b\u8ffd\u52a0\u3057\u307e\u3059:

        ingress-nginx log-format-upstream
        controller:\nconfig:\nlog-format-upstream: >-\n{\n\"time\": \"$time_iso8601\",\n\"remote_addr\": \"$remote_addr\",\n\"x-forwarded-for\": \"$http_x_forwarded_for\",\n\"true-client-ip\": \"$http_true_client_ip\",\n\"req_id\": \"$req_id\",\n\"remote_user\": \"$remote_user\",\n\"bytes_sent\": $bytes_sent,\n\"request_time\": $request_time,\n\"status\": \"$status\",\n\"host\": \"$host\",\n\"request_proto\": \"$server_protocol\",\n\"request_uri\": \"$uri\",\n\"request_query\": \"$args\",\n\"request_length\": $request_length,\n\"request_time\": $request_time,\n\"request_method\": \"$request_method\",\n\"http_referer\": \"$http_referer\",\n\"http_user_agent\": \"$http_user_agent\",\n\"namespace\": \"$namespace\",\n\"ingress_name\": \"$ingress_name\",\n\"service_name\": \"$service_name\",\n\"service_port\": \"$service_port\"\n}\n
      3. \u3042\u306a\u305f\u306e\u30ed\u30b0\u304c\u6d41\u308c\u59cb\u3081\u308b\u306f\u305a\u3067\u3059\uff01

      "},{"location":"ja/installing-lagoon/logs-concentrator/","title":"\u30ed\u30b0\u96c6\u7d04\u5668","text":"

      \u30ed\u30b0\u96c6\u7d04\u5668\u306f\u3001Lagoon\u30af\u30e9\u30b9\u30bf\u304b\u3089\u9001\u4fe1\u3055\u308c\u308b\u30ed\u30b0\u3092\u53ce\u96c6\u3057\u3001\u305d\u308c\u3089\u306b\u8ffd\u52a0\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u4ed8\u52a0\u3057\u3066\u304b\u3089Elasticsearch\u306b\u633f\u5165\u3057\u307e\u3059\u3002

      1. ReadMe\u306b\u5f93\u3063\u3066\u8a3c\u660e\u66f8\u3092\u4f5c\u6210\u3057\u307e\u3059:https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logs-concentrator
      2. logs-concentrator-values.yml\u3092\u4f5c\u6210\u3057\u307e\u3059:

        logs-concentrator-values.yml
        tls:\ncaCert: |\n<<ca.pem\u306e\u5185\u5bb9>>\nserverCert: |\n<<server.pem\u306e\u5185\u5bb9\nserverKey: |\n<<server-key.pem\u306e\u5185\u5bb9>>\nelasticsearchHost: elasticsearch-opendistro-es-client-service.elasticsearch.svc.cluster.local\nelasticsearchAdminPassword: <<ElasticSearch\u7ba1\u7406\u8005\u30d1\u30b9\u30ef\u30fc\u30c9>>\nforwardSharedKey: <<\u30e9\u30f3\u30c0\u30e0\u306a32\u6587\u5b57\u306e\u30d1\u30b9\u30ef\u30fc\u30c9>>\nusers:\n- username: <<Lagoon\u30ea\u30e2\u30fc\u30c81\u306e\u30e6\u30fc\u30b6\u30fc\u540d>>\npassword: <<Lagoon\u30ea\u30e2\u30fc\u30c81\u306e\u30e9\u30f3\u30c0\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9>>\nservice:\ntype: LoadBalancer\nserviceMonitor:\nenabled: false\n
      3. \u30ed\u30b0\u96c6\u7d04\u5668\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059:

        Install logs-concentrator

        helm upgrade --install --create-namespace ```\n--namespace lagoon-logs-concentrator \\\n-f logs-concentrator-values.yaml \\\nlagoon-logs-concentrator lagoon/lagoon-logs-concentrator\n
        \u3053\u306e\u30c6\u30ad\u30b9\u30c8\u306f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b3\u30fc\u30c9\u3067\u3042\u308a\u3001\u7279\u5b9a\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u4f9d\u5b58\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u7ffb\u8a33\u306f\u9069\u7528\u3055\u308c\u307e\u305b\u3093\u3002

      "},{"location":"ja/installing-lagoon/opendistro/","title":"OpenDistro","text":"

      OpenDistro\u30af\u30e9\u30b9\u30bf\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u3001Lagoon\u304c\u305d\u308c\u3068\u5b89\u5168\u306b\u901a\u4fe1\u3067\u304d\u308b\u3088\u3046\u306bTLS\u3068\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u306eJSON\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - \u3053\u308c\u3089\u3092\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u30d7\u30ed\u30bb\u30b9\u5168\u4f53\u3092\u901a\u3058\u3066\u4f5c\u6210\u3057\u3066\u304d\u305f\u5024\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u540c\u3058\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u7f6e\u3044\u3066\u304f\u3060\u3055\u3044\u3002

      OpenDistro Helm\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://opendistro.github.io/for-elasticsearch-docs/docs/install/helm/\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

      "},{"location":"ja/installing-lagoon/opendistro/#_1","title":"\u30ad\u30fc\u3068\u8a3c\u660e\u66f8\u306e\u4f5c\u6210","text":"
      1. \u8a3c\u660e\u66f8\u306e\u751f\u6210

      \u6ce8\u610f:

      CFSSL\u306fCloudFlare\u306ePKI/TLS\u30b9\u30a4\u30b9\u30a2\u30fc\u30df\u30fc\u30ca\u30a4\u30d5\u3067\u3059\u3002\u3053\u308c\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u3067\u3042\u308a\u3001TLS\u8a3c\u660e\u66f8\u306e\u7f72\u540d\u3001\u691c\u8a3c\u3001\u30d0\u30f3\u30c9\u30eb\u5316\u3092\u884c\u3046HTTP API\u30b5\u30fc\u30d0\u3067\u3059\u3002\u30d3\u30eb\u30c9\u306b\u306fGo 1.12+\u304c\u5fc5\u8981\u3067\u3059\u3002

      1. CFSSL\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059: https://github.com/cloudflare/cfssl 2. CA\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059:

      ca-csr.json
      {\n\"CN\": \"ca.elasticsearch.svc.cluster.local\",\n\"hosts\": [\n\"ca.elasticsearch.svc.cluster.local\"\n],\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n},\n\"ca\": {\n\"expiry\": \"87600h\"\n}\n}\n
      1. \u6b21\u306e2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059 :

        \u8a3c\u660e\u66f8\u306e\u751f\u6210
        cfssl gencert -initca ca-csr.json | cfssljson -bare ca -\nrm ca.csr\n

        ca-key.pem\u3068ca.pem\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u304c\u3042\u306a\u305f\u306eCA\u30ad\u30fc\u3068\u81ea\u5df1\u7f72\u540d\u8a3c\u660e\u66f8\u3067\u3059\u3002

      2. \u6b21\u306b\u3001\u30ce\u30fc\u30c9\u306e\u30d4\u30fc\u30ea\u30f3\u30b0\u8a3c\u660e\u66f8\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u6b21\u306e2\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059:

        ca-config.json
        {\n\"signing\": {\n\"default\": {\n\"expiry\": \"87600h\"\n},\n\"profiles\": {\n\"peer\": {\n\"expiry\": \"87600h\",\n\"usages\": [\n\"signing\",\n\"key encipherment\",\n\"server auth\",\n\"client auth\"\n]\n},\n\"client\": {\n\"expiry\": \"87600h\",\n\"usages\": [\n\"signing\",\n\"key encipherment\",\n\"client auth\"\n]\n}\n}\n}\n}\n
        node.json
        {\n\"hosts\": [\n\"node.elasticsearch.svc.cluster.local\"\n],\n\"CN\": \"node.elasticsearch.svc.cluster.local\",\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n}\n}\n
      3. \u6b21\u306e2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

        \u8a3c\u660e\u66f8\u30ad\u30fc\u306e\u751f\u6210
        cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer node.json | cfssljson -bare node\nrm node.csr\n

        node.pem\u3068node-key.pem\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u304cES\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30ce\u30fc\u30c9\u3067\u4f7f\u7528\u3055\u308c\u308b\u30d4\u30a2\u8a3c\u660e\u66f8\u306b\u306a\u308a\u307e\u3059\u3002

      4. \u6b21\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30ad\u30fc\u3092Java\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u5f62\u5f0f\u306b\u5909\u63db\u3057\u307e\u3059:

        \u30ad\u30fc\u5f62\u5f0f\u306e\u5909\u63db
        openssl pkey -in node-key.pem -out node-key.pkcs8\n
      5. \u6b21\u306b\u3001\u7ba1\u7406\u8005\u8a3c\u660e\u66f8\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059:

        admin.json
        {\n\"CN\": \"admin.elasticsearch.svc.cluster.local\",\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n}\n}\n
      6. \u6b21\u306e2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

        \u7ba1\u7406\u8005\u8a3c\u660e\u66f8\u30ad\u30fc\u306e\u751f\u6210
        cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client admin.json | cfssljson -bare admin\nrm admin.csr\n

        admin.pem\u3068admin-key.pem\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u304copendistro-security\u30d7\u30e9\u30b0\u30a4\u30f3\u3067\u7ba1\u7406\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u8a3c\u660e\u66f8\u306b\u306a\u308a\u307e\u3059\u3002

      7. \u6b21\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30ad\u30fc\u3092Java\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u5f62\u5f0f\u306b\u5909\u63db\u3057\u307e\u3059:

        \u30ad\u30fc\u5f62\u5f0f\u306e\u5909\u63db
        openssl pkey -in admin-key.pem -out admin-key.pkcs8\n
      "},{"location":"ja/installing-lagoon/opendistro/#opendistro_1","title":"OpenDistro\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

      \u30ad\u30fc\u3068\u8a3c\u660e\u66f8\u3092\u624b\u306b\u5165\u308c\u305f\u306e\u3067\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u7d9a\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

      1. \u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u751f\u6210\u3057\u307e\u3059\u3002

        1. elasticsearch-secrets-values.yaml\u306b\u306f2\u3064\u306e\u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u5fc5\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u305d\u308c\u3089\u3092\u4f5c\u6210\u3057\u307e\u3059(2\u56de\u5b9f\u884c\u3057\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3001\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u4e21\u65b9\u3092\u4fdd\u5b58\u3057\u307e\u3059)\u3002
        \u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u751f\u6210
        docker run --rm -it docker.io/amazon/opendistro-for-elasticsearch:1.12.0 sh -c \"chmod +x /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh; /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh\"\n
      2. secrets\u3092\u4f5c\u6210\u3057\u307e\u3059:

        1. elasticsearch-secrets-values.yaml\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306egist\u3092\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044:https://gist.github.com/Schnitzel/43f483dfe0b23ca0dddd939b12bb4b0b
      3. \u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067secrets\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059:

        secrets\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
        helm repo add incubator https://charts.helm.sh/incubator`\nhelm upgrade --namespace elasticsearch --create-namespace --install elasticsearch-secrets incubator/raw --values elasticsearch-secrets-values.yaml `\n
      4. \u3042\u306a\u305f\u306f\u5fc5\u8981\u3068\u3059\u308b\u3067\u3057\u3087\u3046 elasticsearch-values.yaml\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u4f8b\u3068\u3057\u3066\u3053\u306egist\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:(\u3059\u3079\u3066\u306e<\\>\u306b\u5024\u3092\u57cb\u3081\u3066\u304f\u3060\u3055\u3044)https://gist.github.com/Schnitzel/1e386654b6abf75bf4d66a544db4aa6a

      5. Elasticsearch\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb:

        Elasticsearch\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
        helm upgrade --namespace elasticsearch --create-namespace --install elasticsearch opendistro-es-X.Y.Z.tgz --values elasticsearch-values.yaml\n
      6. Elasticsearch\u5185\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u6b21\u306e\u3088\u3046\u306b\u8a2d\u5b9a:

        \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8a2d\u5b9a
        kubectl exec -n elasticsearch -it elasticsearch-opendistro-es-master-0 -- bash\nchmod +x /usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh\n/usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh -nhnv -cacert /usr/share/elasticsearch/config/admin-root-ca.pem -cert /usr/share/elasticsearch/config/admin-crt.pem -key /usr/share/elasticsearch/config/admin-key.pem -cd /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/\n
      7. lagoon-core-values.yaml\u3092\u6b21\u306e\u3088\u3046\u306b\u66f4\u65b0:

        lagoon-core-values.yaml
        elasticsearchURL: http://elasticsearch-opendistro-es-client-service.elasticsearch.svc.cluster.local:9200\nkibanaURL: https://<<Kibana Public URL>>\nlogsDBAdminPassword: \"<<PlainText Elasticsearch Admin Password>>\"\n
      8. \u30ed\u30fc\u30eb\u30a2\u30a6\u30c8Lagoon Core:

        Rollout Lagoon Core
        helm upgrade --install --create-namespace --namespace lagoon-core -f values.yaml lagoon-core lagoon/lagoon-core\n
      9. \u3059\u3079\u3066\u306eLagoon\u30b0\u30eb\u30fc\u30d7\u3092Opendistro Elasticsearch\u3068\u540c\u671f\u3055\u305b\u308b

        Sync groups
        kubectl -n lagoon-core exec -it deploy/lagoon-core-api -- sh\nyarn run sync:opendistro-security\n
      10. "},{"location":"ja/installing-lagoon/querying-graphql/","title":"GraphQL\u3067\u306e\u30af\u30a8\u30ea","text":"
        1. GraphQL\u30af\u30a8\u30ea\u306e\u9001\u53d7\u4fe1\u306b\u306f\u30a2\u30d7\u30ea\u304c\u5fc5\u8981\u3067\u3059\u3002GraphiQL\u3092\u63a8\u5968\u3057\u307e\u3059\u3002

          1. Homebrew\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001brew install --cask graphiql\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002
        2. Lagoon Core\u306bKubernetes\u30af\u30e9\u30b9\u30bf\u306b\u3064\u3044\u3066\u901a\u77e5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002GraphQL\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059:https://<YOUR-API-URL>/graphql

        3. HTTP\u30d8\u30c3\u30c0\u30fc\u3092\u7de8\u96c6\u306b\u79fb\u52d5\u3057\u3001\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

          1. \u30d8\u30c3\u30c0\u30fc\u540d:Authorization
          2. \u5024:Bearer YOUR-TOKEN-HERE
          3. \u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306bLagoon CLI\u304c.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30c8\u30fc\u30af\u30f3\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3001\u3053\u3053\u3067\u306e\u5024\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
          4. \u4fdd\u5b58\u3002
        4. \u3053\u308c\u3067\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3059\u308b\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\u3002\u6b21\u306e\u30c6\u30b9\u30c8\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u3066\u3001\u3059\u3079\u3066\u304c\u6b63\u3057\u304f\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059:

          Get all projects
          query allProjects {allProjects {name } }\n
        5. \u3053\u308c\u306b\u3088\u308a\u3001\u6b21\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3059:

          API Response
            {\n    \"data\": {\n      \"allProjects\": []\n    }\n  }\n

          \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306eGraphQL\u306b\u3064\u3044\u3066\u306e\u30da\u30fc\u30b8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

        6. \u6b63\u3057\u3044\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5f97\u3089\u308c\u305f\u3089\u3001\u5909\u7570\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          1. \u6b21\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u307e\u3059:

            \u7a81\u7136\u5909\u7570\u3092\u8ffd\u52a0
            mutation addKubernetes {\naddKubernetes(input:\n{\nname: \"<TARGET-NAME-FROM-REMOTE-VALUES.yml>\",\nconsoleUrl: \"<URL-OF-K8S-CLUSTER>\",\ntoken: \"xxxxxx\u201d\nrouterPattern: \"${environment}.${project}.lagoon.example.com\"\n}){id}\n}\n
            1. name: lagoon-remote-values.yml\u304b\u3089\u53d6\u5f97
            2. consoleUrl: Kubernetes\u30af\u30e9\u30b9\u30bf\u306eAPI\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3002values.yml\u304b\u3089\u53d6\u5f97
            3. token: ssh-core\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u7528\u306e\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97

              \u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97
              kubectl -n lagoon get secret/lagoon-remote-ssh-core-token -o json | jq -r '.data.token | @base64d'\n

        \u60c5\u5831

        GraphQL\u306e\u8a8d\u8a3c\u30c8\u30fc\u30af\u30f3\u306e\u6709\u52b9\u671f\u9650\u306f\u975e\u5e38\u306b\u77ed\u3044\u305f\u3081\u3001\u65b0\u3057\u3044\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002lagoon login\u3092\u5b9f\u884c\u3057\u3001\u65b0\u3057\u3044\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3092cat\u30b3\u30de\u30f3\u30c9\u3067\u8868\u793a\u3057\u3001HTTP\u30d8\u30c3\u30c0\u30fc\u306e\u53e4\u3044\u30c8\u30fc\u30af\u30f3\u3092\u65b0\u3057\u3044\u3082\u306e\u306b\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/installing-lagoon/requirements/","title":"\u65e2\u5b58\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u3078\u306eLagoon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":""},{"location":"ja/installing-lagoon/requirements/#requirements","title":"\u5fc5\u8981\u6761\u4ef6","text":"
        • Kubernetes 1.23+(Kubernetes 1.21\u3082\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u30011.23\u3092\u63a8\u5968\u3057\u307e\u3059)
        • Helm\u3001Helm Charts\u3001kubectl\u306b\u7cbe\u901a\u3057\u3066\u3044\u308b\u3053\u3068\u3002
        • Ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001\u6211\u3005\u306fingress-nginx\u3092\u63a8\u5968\u3057\u3001ingress-nginx\u540d\u524d\u7a7a\u9593\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068
        • Cert manager(TLS\u7528) - letsencrypt\u306e\u4f7f\u7528\u3092\u5f37\u304f\u63a8\u5968\u3057\u307e\u3059
        • StorageClasses(\u30c7\u30d5\u30a9\u30eb\u30c8\u3068\u3057\u3066RWO\u3001\u6c38\u7d9a\u30bf\u30a4\u30d7\u7528\u306bRWM)

        \u6ce8\u610f:

        \u3053\u308c\u306f\u591a\u304f\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u5fc5\u8981\u3067\u3042\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3057\u3066\u304a\u308a\u3001\u4eca\u5f8c\u3059\u3050\u306b\u884c\u3046\u4e88\u5b9a\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7\u306b\u306f\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306e\u30b9\u30c6\u30c3\u30d7\u6570\u3092\u6e1b\u3089\u3059\u3053\u3068\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

        "},{"location":"ja/installing-lagoon/requirements/#specific-requirements-as-of-january-2023","title":"\u7279\u5b9a\u306e\u8981\u4ef6 (2023\u5e741\u6708\u73fe\u5728)","text":""},{"location":"ja/installing-lagoon/requirements/#kubernetes","title":"Kubernetes","text":"

        Lagoon\u306fKubernetes\u30d0\u30fc\u30b8\u30e7\u30f31.21\u4ee5\u964d\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u7a4d\u6975\u7684\u306bKubernetes 1.24\u306b\u5bfe\u3057\u3066\u30c6\u30b9\u30c8\u3068\u958b\u767a\u3092\u884c\u3063\u3066\u304a\u308a\u3001\u5b9a\u671f\u7684\u306b1.21\u30011.22\u30011.25\u306b\u5bfe\u3057\u3066\u3082\u30c6\u30b9\u30c8\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002

        \u6b21\u306e\u5927\u898f\u6a21\u306a\u7834\u58ca\u7684\u5909\u66f4\u306fKubernetes 1.25\u306b\u3042\u308a\u3001\u6211\u3005\u306f\u3053\u308c\u3089\u3092\u4e8b\u524d\u306b\u628a\u63e1\u3059\u308b\u52aa\u529b\u3092\u3057\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u6700\u4f4e\u30b5\u30dd\u30fc\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e0a\u6607\u3092\u5fc5\u8981\u3068\u3059\u308b\u3067\u3057\u3087\u3046\u3002 Lagoon\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3002

        "},{"location":"ja/installing-lagoon/requirements/#ingress-nginx","title":"ingress-nginx","text":"

        Lagoon\u306f\u73fe\u5728\u3001\u5358\u4e00\u306e ingress-nginx \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u307f\u306b\u5bfe\u5fdc\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u904e\u53bb\u306b\u306f IngressClass \u306e\u5b9a\u7fa9\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002

        \u6700\u8fd1\u306e ingress-nginx \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc(\u30d0\u30fc\u30b8\u30e7\u30f34\u4ee5\u964d\u3001Kubernetes 1.22\u304c\u5fc5\u8981)\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002ingress-nginx \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002

        • nginx-ingress \u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - Helm\u306e\u5024\u3067 .controller.ingressClassResource.default: true \u3092\u8a2d\u5b9a\u3057\u307e\u3059
        • nginx-ingress \u306f IngressClass \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044Ingress\u3092\u76e3\u8996\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - Helm\u306e\u5024\u3067 .controller.watchIngressWithoutClass: true \u3092\u8a2d\u5b9a\u3057\u307e\u3059

        \u3053\u308c\u306b\u3088\u308a\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306f\u65b0\u3057\u3044Ingress\u3092 IngressClass \u3068\u3057\u3066\u81ea\u8eab\u3067\u4f5c\u6210\u3057\u3001IngressClass \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u65e2\u5b58\u306eIngress\u3092\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

        \u4ed6\u306e\u8a2d\u5b9a\u3082\u53ef\u80fd\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u30c6\u30b9\u30c8\u306f\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093\u3002

        "},{"location":"ja/installing-lagoon/requirements/#harbor","title":"Harbor","text":"

        \u73fe\u5728\u3001Harbor \u306e\u30d0\u30fc\u30b8\u30e7\u30f3 2.1 \u304a\u3088\u3073 2.2+ \u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30ed\u30dc\u30c3\u30c8 \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u306f 2.2 \u3067\u5909\u66f4\u3055\u308c\u3001Lagoon \u30ea\u30e2\u30fc\u30c8 \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306f\u3053\u308c\u3089\u306e\u30c8\u30fc\u30af\u30f3\u3092\u51e6\u7406\u3067\u304d\u307e\u3059\u3002\u3064\u307e\u308a\u3001Harbor \u306f lagoon-core \u3067\u306f\u306a\u304f lagoon-build-deploy \u306e\u8cc7\u683c\u60c5\u5831\u3092\u4f7f\u7528\u3057\u3066\u69cb\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        2.6.0 \u4ee5\u964d\u306e Harbor \u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u3001Helm \u30c1\u30e3\u30fc\u30c8 1.10.0 \u4ee5\u4e0a\u3068\u3068\u3082\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

        "},{"location":"ja/installing-lagoon/requirements/#k8up-for-backups","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u7528\u306e k8up","text":"

        Lagoon \u306b\u306f\u3001K8up \u30d0\u30c3\u30af\u30a2\u30c3\u30d7 \u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306e\u69cb\u6210\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002 Lagoon \u3067\u306f\u3001\u4e8b\u524d\u30d0\u30c3\u30af\u30a2\u30c3\u30d7 \u30dd\u30c3\u30c9\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3001\u4fdd\u6301\u671f\u9593\u3092\u8a2d\u5b9a\u3057\u3001K8up \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u5fa9\u5143\u3092\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002\u73fe\u5728\u3001Lagoon \u306f\u3001v2 \u4ee5\u964d\u306e\u540d\u524d\u7a7a\u9593\u306e\u5909\u66f4\u306b\u3088\u308a\u3001K8up \u306e 1.x \u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u4fee\u6b63\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002

        \u30d0\u30b0 k8up v2

        Lagoon \u306f\u3001\u540d\u524d\u7a7a\u9593\u306e\u5909\u66f4\u306b\u3088\u308a\u3001\u73fe\u5728 K8up v2 \u4ee5\u964d\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093 (\u3053\u3061\u3089)\u3002

        K8up \u30d0\u30fc\u30b8\u30e7\u30f3 1.2.0 \u3092 Helm Chart 1.1.0 \u3068\u3068\u3082\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

        "},{"location":"ja/installing-lagoon/requirements/#storage-provisioners","title":"\u30b9\u30c8\u30ec\u30fc\u30b8\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc","text":"

        Lagoon \u306f\u3001\u307b\u3068\u3093\u3069\u306e\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u306b\u5bfe\u3057\u3066\u30c7\u30d5\u30a9\u30eb\u30c8\u306e standard StorageClass \u3092\u5229\u7528\u3057\u3001\u307b\u3068\u3093\u3069\u306e Kubernetes \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u5185\u90e8\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u3067\u5341\u5206\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u53ef\u80fd\u306a\u5834\u5408\u306f\u52d5\u7684\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3068\u62e1\u5f35\u304c\u53ef\u80fd\u306b\u306a\u308b\u3088\u3046\u306b\u69cb\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        \u307e\u305f\u3001Lagoon\u3067\u306f\u3001\u6c38\u7d9a\u7684\u306a\u30dd\u30c3\u30c9\u30ec\u30d7\u30ea\u30ab(\u30ce\u30fc\u30c9\u9593)\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u305f\u3081\u306b\u3001'bulk'\u3068\u547c\u3070\u308c\u308bStorageClass\u304c\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u306eStorageClass\u306fReadWriteMany(RWX)\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001\u53ef\u80fd\u306a\u9650\u308a\u52d5\u7684\u306a\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3068\u62e1\u5f35\u6027\u304c\u3042\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes \u3092\u53c2\u7167\u3057\u3001\u4e92\u63db\u6027\u306e\u3042\u308b\u30c9\u30e9\u30a4\u30d0\u306e\u5b8c\u5168\u306a\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306fproduction drivers list\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        \u73fe\u5728\u3001\u79c1\u305f\u3061\u306f(\u73fe\u5728\u306f\u5ec3\u6b62\u3055\u308c\u3066\u3044\u308b)EFS Provisioner\u306e\u6307\u793a\u3060\u3051\u3092\u542b\u3081\u3066\u3044\u307e\u3059\u3002\u672c\u756a\u306eEFS CSI driver\u306f\u3001120\u4ee5\u4e0a\u306ePVC\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3059\u308b\u969b\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u30a2\u30c3\u30d7\u30b9\u30c8\u30ea\u30fc\u30e0\u3067\u306e\u53ef\u80fd\u306a\u4fee\u6b63\u3092\u3053\u3053\u3068\u3053\u3053\u3067\u5f85\u3063\u3066\u3044\u307e\u3059 - \u3057\u304b\u3057\u3001\u4ed6\u306e\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u306eCSI\u30c9\u30e9\u30a4\u30d0\u3082\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3001NFS\u4e92\u63db\u306e\u30b5\u30fc\u30d0\u3068\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u3092\u5099\u3048\u305f\u8a2d\u5b9a\u3082\u540c\u69d8\u3067\u3059\u3002

        "},{"location":"ja/installing-lagoon/requirements/#kubernetes_1","title":"\u3069\u308c\u304f\u3089\u3044 Kubernetes\u306e\u7d4c\u9a13/\u77e5\u8b58\u306f\u5fc5\u8981\u3067\u3059\u304b\uff1f","text":"

        Lagoon\u306f\u3001\u975e\u5e38\u306b\u9ad8\u5ea6\u306aKubernetes\u3068\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u306e\u6982\u5ff5\u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001Lagoon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3084\u8a2d\u5b9a\u306b\u5b8c\u5168\u306a\u719f\u77e5\u304c\u5fc5\u8981\u306a\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u554f\u984c\u306e\u8a3a\u65ad\u3084\u8ca2\u732e\u306f\u3001\u5341\u5206\u306a\u77e5\u8b58\u304c\u306a\u3051\u308c\u3070\u96e3\u3057\u304f\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

        \u6307\u6a19\u3068\u3057\u3066\u3001Certified Kubernetes Administrator\u306e\u30ab\u30ea\u30ad\u30e5\u30e9\u30e0\u306b\u5bfe\u3059\u308b\u5feb\u9069\u3055\u3092\u6700\u4f4e\u9650\u3068\u3057\u3066\u63d0\u6848\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/installing-lagoon/update-lagoon/","title":"\u66f4\u65b0","text":"
        1. Helm\u3092\u4f7f\u7528\u3057\u3066\u6700\u65b0\u306e\u30c1\u30e3\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002

          \u6700\u65b0\u306e\u30c1\u30e3\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
          helm repo update\n
        2. helm diff\u3092\u4f7f\u3063\u3066\u5909\u66f4\u70b9\u3092\u78ba\u8a8d\u3057\u307e\u3059(https://github.com/databus23/helm-diff)\u3002

          \u5909\u66f4\u70b9\u3092\u78ba\u8a8d
          helm diff upgrade --install --create-namespace --namespace lagoon-core \\\n-f values.yml lagoon-core lagoon/lagoon-core\n
        3. \u4efb\u610f\u306eHelm\u64cd\u4f5c\u524d\u306b\u3001Lagoon\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u308a\u307e\u3059\u3002 \u307e\u305f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u79fb\u884c\u30b9\u30af\u30ea\u30d7\u30c8\u304cinitContainers\u3067\u5b9f\u884c\u3055\u308c\u308b\u306e\u3092\u652f\u63f4\u3059\u308b\u305f\u3081\u306b\u3001API\u3092\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u306b\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3082\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

        4. Helm\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

          \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u5b9f\u884c
          helm upgrade --install --create-namespace --namespace lagoon-core \\\n-f values.yaml lagoon-core lagoon/lagoon-core\n
        5. (Lagoon v2.11.0\u4ee5\u964d\u3001\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u4e0d\u8981\u306b\u306a\u308a\u307e\u3057\u305f) Lagoon Core\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u5834\u5408\u3001\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u5f8c\u306e\u79fb\u884c\u3092\u884c\u3046\u305f\u3081\u306brerun_initdb.sh\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c
          kubectl --namespace lagoon-core exec -it lagoon-core-api-db-0 -- \\\nsh -c /rerun_initdb.sh\n
        6. API\u30dd\u30c3\u30c9\u3092\u5143\u306e\u6570\u306b\u623b\u3057\u3066\u30b9\u30b1\u30fc\u30eb\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002 \u30ec\u30d9\u30eb\u3002

        7. Lagoon Core\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3001OpenSearch\u306e\u30b0\u30eb\u30fc\u30d7/\u30e6\u30fc\u30b6\u30fc\u540c\u671f\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u308b\u5834\u5408\u3001OpenSearch\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u66f4\u65b0\u3059\u308b\u305f\u3081\u306bsync:opendistro-security\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306f\u3001\u5168\u4f53\u306e\u30b0\u30eb\u30fc\u30d7\u69cb\u9020\u306e\u540c\u671f\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u5834\u5408\u3001\u4e00\u5ea6\u306b1\u3064\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u540c\u671f\u3059\u308b\u305f\u3081\u306bGROUP_REGEX=<group-to-sync\u3067\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u4ed8\u3051\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

          \u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5b9f\u884c
          kubectl --namespace lagoon-core exec -it deploy/lagoon-core-api -- \\\nsh -c yarn sync:opendistro-security\n

        \u8ffd\u52a0\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u306b\u3064\u3044\u3066\u306f\u3001https://github.com/uselagoon/lagoon/releases\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/installing-lagoon/update-lagoon/#database-backups","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7","text":"

        Lagoon Core\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u524d\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u624b\u9806\u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4f5c\u6210\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u305d\u308c\u3089\u3092\u4f7f\u7528\u3057\u3066\u5fa9\u5143\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5f8c\u3067\u305d\u308c\u3089\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/installing-lagoon/update-lagoon/#api-db","title":"API DB","text":"API DB\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7
        kubectl --namespace lagoon-core exec -it lagoon-core-api-db-0 -- \\\nsh -c 'mysqldump --max-allowed-packet=500M --events \\\n    --routines --quick --add-locks --no-autocommit \\\n    --single-transaction infrastructure | gzip -9 > \\\n    /var/lib/mysql/backup/$(date +%Y-%m-%d_%H%M%S).infrastructure.sql.gz'\n
        "},{"location":"ja/installing-lagoon/update-lagoon/#keycloak-db","title":"Keycloak DB","text":"Keycloak DB\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7
        kubectl --namespace lagoon-core exec -it lagoon-core-keycloak-db-0 -- \\\nsh -c 'mysqldump --max-allowed-packet=500M --events \\\n    --routines --quick --add-locks --no-autocommit \\\n    --single-transaction keycloak | gzip -9 > \\\n    /var/lib/mysql/backup/$(date +%Y-%m-%d_%H%M%S).keycloak.sql.gz'\n
        "},{"location":"ja/interacting/graphql-queries/#running-graphql-queries","title":"GraphQL\u30af\u30a8\u30ea\u306e\u5b9f\u884c","text":"

        Lagoon\u3067\u306e\u76f4\u63a5\u7684\u306aAPI\u306e\u76f8\u4e92\u4f5c\u7528\u306f\u3001GraphQL\u3092\u7d4c\u7531\u3057\u3066\u884c\u308f\u308c\u307e\u3059\u3002

        API\u3068\u306e\u8a8d\u8a3c\u3092\u884c\u3046\u305f\u3081\u306b\u306f\u3001\u79c1\u305f\u3061\u304c\u7ba1\u7406\u8005\u3068\u3057\u3066GraphQL API\u3092\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308bJWT(JSON Web Token)\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u306e\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001Kubernetes UI\u7d4c\u7531\u3001\u307e\u305f\u306fkubectl\u3092\u4f7f\u7528\u3057\u3066storage-calculator\u30dd\u30c3\u30c9\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u958b\u304d\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

        JWT\u30c8\u30fc\u30af\u30f3\u306e\u751f\u6210
        ./create_jwt.py\n

        \u3053\u308c\u306b\u3088\u308aJWT\u30c8\u30fc\u30af\u30f3\u3067\u3042\u308b\u9577\u3044\u6587\u5b57\u5217\u304c\u8fd4\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u30af\u30a8\u30ea\u3092\u9001\u4fe1\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u3068\u306a\u308b\u306e\u3067\u3001\u30e1\u30e2\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002

        \u307e\u305f\u3001API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306eURL\u3082\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306fKubernetes UI\u306e\"Ingresses\"\u306e\u4e0b\u3001\u307e\u305f\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306ekubectl\u3092\u7d4c\u7531\u3057\u3066\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u3082\u5fc5\u8981\u306b\u306a\u308b\u306e\u3067\u3001\u30e1\u30e2\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002

        GraphQL\u30af\u30a8\u30ea\u3092\u4f5c\u6210\u3057\u9001\u4fe1\u3059\u308b\u306b\u306f\u3001\u81ea\u52d5\u88dc\u5b8c\u6a5f\u80fd\u306a\u3069\u3092\u5099\u3048\u305f\u30c7\u30b9\u30af\u30c8\u30c3\u30d7GraphQL\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067\u3042\u308bGraphiQL.app\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u6b21\u306e\u624b\u9806\u306b\u9032\u3080\u306b\u306f\u3001\u3053\u306e\u30a2\u30d7\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u8d77\u52d5\u3057\u307e\u3059\u3002

        \"GraphQL Endpoint\"\u306e\u4e0b\u306b/graphql\u3092\u672b\u5c3e\u306b\u4ed8\u3051\u305fAPI\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u3092\u5165\u529b\u3057\u307e\u3059\u3002\u6b21\u306b\"Edit HTTP Headers\"\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u65b0\u3057\u3044\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059:

        • \"\u30d8\u30c3\u30c0\u30fc\u540d\":Authorization
        • \"\u30d8\u30c3\u30c0\u30fc\u5024\":Bearer [JWT\u30c8\u30fc\u30af\u30f3] (\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044 JWT\u30c8\u30fc\u30af\u30f3\u306b\u30b9\u30da\u30fc\u30b9\u304c\u306a\u3044\u3053\u3068(\u30b9\u30da\u30fc\u30b9\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u3068\u52d5\u4f5c\u3057\u307e\u305b\u3093)

        ESC\u30ad\u30fc\u3092\u62bc\u3057\u3066HTTP\u30d8\u30c3\u30c0\u30fc\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u3092\u9589\u3058\u3001\u6700\u521d\u306eGraphQL\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\uff01

        \u3053\u308c\u3092\u5de6\u30d1\u30cd\u30eb\u306b\u5165\u529b\u3057\u307e\u3059

        \u30af\u30a8\u30ea\u306e\u5b9f\u884c
        query allProjects{\nallProjects {\nname\n}\n}\n

        \u305d\u3057\u3066\u3001\u25b6\ufe0f\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u304b(\u307e\u305f\u306fCTRL+ENTER\u3092\u62bc\u3059)\u3002

        \u3059\u3079\u3066\u304c\u3046\u307e\u304f\u3044\u3051\u3070\u3001\u6700\u521d\u306eGraphQL\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u3059\u3050\u306b\u53f3\u306e\u30da\u30a4\u30f3\u306b\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002

        "},{"location":"ja/interacting/graphql-queries/#creating-the-first-project","title":"\u6700\u521d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210","text":"

        Lagoon\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u6700\u521d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\uff01\u3053\u308c\u306b\u306f\u3001create-project.gql\u306eGraphQL\u30af\u30a8\u30ea\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

        \u5404\u30af\u30a8\u30ea(mutation {\u3067\u59cb\u307e\u308b\u30d6\u30ed\u30c3\u30af)\u306b\u3064\u3044\u3066\u3001TODO\u30b3\u30e1\u30f3\u30c8\u3067\u30de\u30fc\u30af\u3055\u308c\u305f\u7a7a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u3059\u3079\u3066\u57cb\u3081\u3066\u3001GraphiQL.app\u3067\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e2\u3064\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u305d\u308c\u305e\u308c1\u3064\u305a\u3064\u4f5c\u6210\u3055\u308c\u307e\u3059:

        1. kubernetes : Lagoon\u304c\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304dKubernetes(\u307e\u305f\u306fOpenshift)\u30af\u30e9\u30b9\u30bf\u3002Lagoon\u306f\u81ea\u8eab\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u306b\u3060\u3051\u3067\u306a\u304f\u3001\u4efb\u610f\u306eKubernetes\u306b\u3082\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002 \u4e16\u754c\u4e2d\u306e\u3069\u3053\u3067\u3082\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002
        2. project : \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308bLagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3001\u30eb\u30fc\u30c8\u306b\u30b3\u30df\u30c3\u30c8\u3055\u308c\u305f .lagoon.yml \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u6301\u3064Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3059\u3002
        "},{"location":"ja/interacting/graphql-queries/#allowing-access-to-the-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u8a31\u53ef","text":"

        Lagoon\u3067\u306f\u3001\u5404\u958b\u767a\u8005\u306f\u81ea\u5206\u306eSSH\u30ad\u30fc\u3067\u8a8d\u8a3c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u3078\u306e\u30a2\u30af\u30bb\u30b9\u304c\u6c7a\u307e\u308a\u307e\u3059:

        1. \u81ea\u5206\u304c\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3064\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u898b\u3066\u7de8\u96c6\u3067\u304d\u308bLagoon API\u3002
        2. \u81ea\u5206\u304c\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3064\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u3078\u306e\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u30a2\u30af\u30bb\u30b9\u3002
        3. \u30ea\u30af\u30a8\u30b9\u30c8\u30ed\u30b0\u3001\u30b3\u30f3\u30c6\u30ca\u30ed\u30b0\u3001Lagoon\u30ed\u30b0\u306a\u3069\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308bLagoon\u306e\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u3002

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u307e\u305aAPI\u306b\u65b0\u3057\u3044\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

        API\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
        mutation {\naddGroup (\ninput: {\n# TODO: \u65b0\u3057\u3044\u30b0\u30eb\u30fc\u30d7\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n}\n)     {\nid\nname\n}\n}\n

        \u6b21\u306b\u3001API\u306b\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

        API\u306b\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0
        mutation {\naddUser(\ninput: {\nemail: \"michael.schmid@example.com\"\nfirstName: \"Michael\"\nlastName: \"Schmid\"\ncomment: \"CTO\"\n}\n) {\n# TODO: \u8fd4\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fcID\u3092\u30e1\u30e2\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002\nid\n}\n}\n

        \u305d\u308c\u304b\u3089\u3001\u305d\u306e API\u306b\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0:

        API\u306bSSH\u516c\u958b\u9375\u3092\u8ffd\u52a0\u3059\u308b
        mutation {\naddSshKey(\ninput: {\n# TODO: name\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u4e0b\u3055\u3044\u3002\n# \u3053\u308c\u306fSSH\u30ad\u30fc\u306e\u975e\u4e00\u610f\u306a\u8b58\u5225\u5b50\u3067\u3059\u3002\nname: \"\"\n# TODO: keyValue\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u4e0b\u3055\u3044\u3002\n# \u3053\u308c\u306f\u5b9f\u969b\u306eSSH\u516c\u958b\u9375\u3067\u3059(\u6700\u521d\u306e\u30bf\u30a4\u30d7\u3068\u6700\u5f8c\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u9664\u3044\u3066\u3001\u4f8b `AAAAB3NzaC1yc2EAAAADAQ...3QjzIOtdQERGZuMsi0p`)\u3002\nkeyValue: \"\"\n# TODO: keyType\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u4e0b\u3055\u3044\u3002\n# \u6709\u52b9\u306a\u5024\u306f\u3001SSH_RSA\u3001SSH_ED25519\u3001ECDSA_SHA2_NISTP256/384/521\u306e\u3044\u305a\u308c\u304b\u3067\u3059\u3002\nkeyType: SSH_RSA\nuser: {\n# TODO: userId\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u4e0b\u3055\u3044\u3002\n# \u3053\u308c\u306faddUser\u30af\u30a8\u30ea\u304b\u3089\u53d6\u5f97\u3057\u305f\u30e6\u30fc\u30b6\u30fcID\u3067\u3059\u3002\nid:\"0\",\nemail:\"michael.schmid@example.com\"\n}\n}\n) {\nid\n}\n}\n

        \u30ad\u30fc\u3092\u8ffd\u52a0\u3057\u305f\u5f8c\u3001\u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

        \u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b
        mutation {\naddUserToGroup (\ninput: {\nuser: {\n#TODO: \u30e6\u30fc\u30b6\u30fc\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nemail: \"\"\n}\ngroup: {\n#TODO: \u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u305f\u3044\u30b0\u30eb\u30fc\u30d7\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n}\n#TODO: \u30e6\u30fc\u30b6\u30fc\u306e\u5f79\u5272\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 .\nrole: OWNER\n}\n) {\nid\nname\n}\n}\n

        \u3053\u308c\u3089\u306e\u30af\u30a8\u30ea\u306e\u4e00\u90e8\u307e\u305f\u306f\u5168\u90e8\u3092\u5b9f\u884c\u3057\u305f\u5f8c\u3001\u30e6\u30fc\u30b6\u30fc\u306fSSH\u7d4c\u7531\u3067\u30c8\u30fc\u30af\u30f3\u3092\u4f5c\u6210\u3057\u305f\u308a\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u308a\u3059\u308b\u6a29\u9650\u304c\u4ed8\u4e0e\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/interacting/graphql-queries/#adding-notifications-to-the-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u901a\u77e5\u3092\u8ffd\u52a0\u3059\u308b","text":"

        \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u4e2d\u306b\u4f55\u304c\u8d77\u3053\u3063\u3066\u3044\u308b\u306e\u304b\u3092\u77e5\u308a\u305f\u3044\u5834\u5408\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u901a\u77e5\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u63d0\u4f9b\u3057\u307e\u3059:

        • \u30d7\u30c3\u30b7\u30e5\u901a\u77e5
        • \u30d3\u30eb\u30c9\u958b\u59cb\u60c5\u5831
        • \u30d3\u30eb\u30c9\u6210\u529f\u307e\u305f\u306f\u5931\u6557\u30e1\u30c3\u30bb\u30fc\u30b8
        • \u305d\u306e\u4ed6\u591a\u6570\uff01

        \u901a\u77e5\u306f\u3001\u5fc5\u8981\u306a\u60c5\u5831\u306e\u70b9\u3067\u304b\u306a\u308a\u7570\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u5404\u901a\u77e5\u30bf\u30a4\u30d7\u306b\u306f\u72ec\u81ea\u306e\u5909\u7570\u304c\u3042\u308a\u307e\u3059\u3002

        \u30e6\u30fc\u30b6\u30fc\u3068\u540c\u69d8\u306b\u3001\u307e\u305a\u901a\u77e5\u3092\u8ffd\u52a0\u3057\u307e\u3059:

        \u901a\u77e5\u3092\u8ffd\u52a0\u3059\u308b
        mutation {\naddNotificationSlack(\ninput: {\n# TODO: \u540d\u524d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u901a\u77e5\u306e\u305f\u3081\u306e\u81ea\u8eab\u306e\u8b58\u5225\u5b50\u3067\u3059\u3002\nname: \"\"\n# TODO: \u30c1\u30e3\u30f3\u30cd\u30eb\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u308b\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u3059\u3002\nchannel: \"\"\n# TODO: \u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u308b\u3079\u304d\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u306eURL\u3067\u3001\u901a\u5e38\u306f\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u304b\u3089\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\nwebhook: \"\"\n}\n) {\nid\n}\n}\n

        \u901a\u77e5\u304c\u4f5c\u6210\u3055\u308c\u305f\u5f8c\u3001 \u3053\u308c\u3067\u3001\u79c1\u305f\u3061\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u901a\u77e5\u3092\u5272\u308a\u5f53\u3066\u308b
        mutation {\naddNotificationToProject(\ninput: {\nnotificationType: SLACK\n# TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3067\u3059\u3002\nproject: \"\"\n# TODO: \u901a\u77e5\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u901a\u77e5\u306e\u540d\u524d\u3067\u3059\u3002\nnotificationName: \"\"\n# TODO: \u30aa\u30d7\u30b7\u30e7\u30f3\n# \u8208\u5473\u306e\u3042\u308b\u901a\u77e5\u30af\u30e9\u30b9\u306e\u7a2e\u985e\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067DEPLOYMENT\u306b\u306a\u308a\u307e\u3059\ncontentType: DEPLOYMENT/PROBLEM\n# TODO: \u30aa\u30d7\u30b7\u30e7\u30f3\n# contentType PROBLEM\u306b\u95a2\u9023\u3057\u3066\u3001\u6211\u3005\u304c\u901a\u77e5\u3092\u53d7\u3051\u305f\u3044\u554f\u984c\u306e\u7a2e\u985e\u306e\u95be\u5024\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\nnotificationSeverityThreshold: \"NONE/UNKNOWN/NEGLIGIBLE/LOW/MEDIUM/HIGH/CRITICAL\n}\n) {\nid\n}\n}\n

        \u3053\u308c\u3067\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3054\u3068\u306b\u3001\u5b9a\u7fa9\u3057\u305f\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d7\u3051\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/interacting/graphql-queries/#example-graphql-queries","title":"GraphQL\u30af\u30a8\u30ea\u306e\u4f8b","text":""},{"location":"ja/interacting/graphql-queries/#adding-a-new-kubernetes-target","title":"\u65b0\u3057\u3044Kubernetes\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u8ffd\u52a0","text":"

        \u6ce8\u610f:

        Lagoon\u3067\u306f\u3001addKubernetes\u3068addOpenshift\u306e\u3069\u3061\u3089\u3082Kubernetes\u3068OpenShift\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4e21\u65b9\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u3069\u3061\u3089\u3082\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u3059\u3002

        Lagoon\u304c\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u30af\u30e9\u30b9\u30bf\u3002

        Kubernetes\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u8ffd\u52a0
        mutation {\naddKubernetes(\ninput: {\n# TODO: \u540d\u524d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30af\u30e9\u30b9\u30bf\u306e\u4e00\u610f\u306e\u8b58\u5225\u5b50\u3067\u3059\u3002\nname: \"\"\n# TODO: consoleUrl\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306fKubernetes\u30af\u30e9\u30b9\u30bf\u306eURL\u3067\u3059\nconsoleUrl: \"\"\n# TODO: \u30c8\u30fc\u30af\u30f3\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u3001\u3053\u306e\u30af\u30e9\u30b9\u30bf\u3067\u4f5c\u6210\u3055\u308c\u305f`lagoon`\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30c8\u30fc\u30af\u30f3\u3067\u3059(\u3053\u308c\u306f\u3001Lagoon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b\u3082\u4f7f\u7528\u3057\u305f\u306e\u3068\u540c\u3058\u30c8\u30fc\u30af\u30f3\u3067\u3059)\u3002\ntoken: \"\"\n}\n){\nname\nid\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#adding-a-group-to-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b","text":"

        \u3053\u306e\u30af\u30a8\u30ea\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u5f7c\u3089\u306f\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u3067\u306e\u5f79\u5272\u306b\u57fa\u3065\u3044\u3066\u5909\u66f4\u3092\u52a0\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b
        mutation {\naddGroupsToProject (\ninput: {\nproject: {\n#TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n}\ngroups: {\n#TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n}\n}\n) {\nid\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#adding-a-new-project","title":"\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8ffd\u52a0\u3059\u308b","text":"

        \u3053\u306e\u30af\u30a8\u30ea\u306f\u3001\u65b0\u3057\u3044Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30eb\u30fc\u30c8\u306b\u30b3\u30df\u30c3\u30c8\u3055\u308c\u305f.lagoon.yml\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u6301\u3064Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3059\u3002

        \u3082\u3057 privateKey \u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u3042\u308b\u5834\u5408\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u65b0\u3057\u3044SSH\u30ad\u30fc\u304c\u81ea\u52d5\u7684\u306b\u751f\u6210\u3055\u308c\u307e\u3059\u3002

        \u5225\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304b\u3089\u30ad\u30fc\u3092\u518d\u5229\u7528\u3057\u305f\u3044\u5834\u5408\u306f\u3001addProject \u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u30ad\u30fc\u3092\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        \u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8ffd\u52a0
        mutation {\naddProject(\ninput: {\n# TODO: \u540d\u524d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3067\u3059\u3002\nname: \"\"\n# TODO: \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ad\u30fc\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044(\u6539\u884c\u306f '\\n' \u3067\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044)\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ad\u30fc\u3067\u3001Git\u306e\u30b3\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\nprivateKey: \"\"\n# TODO: Kubernetes\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u308bKubernetes\u307e\u305f\u306fOpenShift\u306eID\u3067\u3059\u3002\nkubernetes: 0\n# TODO: \u540d\u524d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3067\u3059\u3002\ngitUrl: \"\"\n# TODO: \u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nbranches: \"\"\n# TODO: \u672c\u756a\u74b0\u5883\u3092\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nproductionEnvironment: \"\"\n}\n) {\nname\nkubernetes {\nname\nid\n}\ngitUrl\nbranches\npullrequests\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#list-projects-and-groups","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30b0\u30eb\u30fc\u30d7\u306e\u30ea\u30b9\u30c8","text":"

        \u3053\u308c\u306f\u3001\u79c1\u305f\u3061\u306eLagoon\u5185\u306b\u5b58\u5728\u3059\u308b\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u3001\u30b0\u30eb\u30fc\u30d7\u306e\u6982\u8981\u3092\u898b\u308b\u305f\u3081\u306e\u826f\u3044\u30af\u30a8\u30ea\u3067\u3059\u3002

        \u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u3001\u304a\u3088\u3073\u30b0\u30eb\u30fc\u30d7\u306e\u6982\u8981\u3092\u53d6\u5f97
        query {\nallProjects {\nname\ngitUrl\n}\nallKubernetes {\nname\nid\n}\nallGroups{\nid\nname\nmembers {\n# \u3053\u308c\u306f\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u8868\u793a\u3057\u307e\u3059\u3002\nuser {\nid\nfirstName\nlastName\n}\nrole\n}\ngroups {\nid\nname\n}\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#single-project","title":"\u5358\u4e00\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8","text":"

        \u5358\u4e00\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a73\u3057\u304f\u898b\u308b\u5834\u5408\u3001\u3053\u306e\u30af\u30a8\u30ea\u304c\u975e\u5e38\u306b\u6709\u7528\u3067\u3042\u308b\u3053\u3068\u304c\u8a3c\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a73\u3057\u304f\u898b\u308b
        query {\nprojectByName(\n# TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n) {\nid\nbranches\ngitUrl\npullrequests\nproductionEnvironment\nnotifications(type: SLACK) {\n... on NotificationSlack {\nname\nchannel\nwebhook\nid\n}\n}\nenvironments {\nname\ndeployType\nenvironmentType\n}\nkubernetes {\nid\n}\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#querying-a-project-by-its-git-url","title":"Git URL\u306b\u3088\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30af\u30a8\u30ea","text":"

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3092\u899a\u3048\u3066\u3044\u306a\u3044\u304c\u3001Git URL\u306f\u77e5\u3063\u3066\u3044\u308b\u5834\u5408\uff1f\u3082\u3046\u63a2\u3059\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3001\u305d\u306e\u305f\u3081\u306eGraphQL\u30af\u30a8\u30ea\u304c\u3042\u308a\u307e\u3059:

        Git URL\u306b\u3088\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30af\u30a8\u30ea
        query {\nprojectByGitUrl(gitUrl: \"git@server.com:org/repo ```\n.git\") {\nname\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#updating-objects","title":"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u66f4\u65b0","text":"

        Lagoon GraphQL API\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8868\u793a\u3057\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u30d1\u30c3\u30c1\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 \u3092\u4f7f\u7528\u3057\u3066\u65e2\u5b58\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b\u80fd\u529b\u3082\u3042\u308a\u307e\u3059\u3002

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002

        \u30c7\u30d7\u30ed\u30a4\u30d6\u30e9\u30f3\u30c1\u306e\u66f4\u65b0\u3002
        mutation {\nupdateProject(\ninput: { id: 109, patch: { branches: \"^(prod|stage|dev|update)$\" } }\n) {\nid\n}\n}\n

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u672c\u756a\u74b0\u5883\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002

        \u8b66\u544a

        \u3053\u306e\u5909\u66f4\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u53cd\u6620\u3055\u305b\u308b\u306b\u306f\u3001\u518d\u30c7\u30d7\u30ed\u30a4\u304c\u5fc5\u8981\u3067\u3059\u3002

        \u672c\u756a\u74b0\u5883\u306e\u66f4\u65b0
         mutation {\nupdateProject(\ninput: { id: 109, patch: { productionEnvironment: \"main\" } }\n) {\nid\n}\n}\n

        \u307e\u305f\u3001\u4e00\u5ea6\u306b\u8907\u6570\u306e\u5909\u66f4\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

        \u672c\u756a\u74b0\u5883\u306e\u66f4\u65b0\u3068\u30c7\u30d7\u30ed\u30a4\u30d6\u30e9\u30f3\u30c1\u306e\u8a2d\u5b9a\u3002
        mutation {\nupdateProject(\ninput: {\nid: 109\npatch: {\nproductionEnvironment: \"main\"\nbranches: \"^(prod|stage|dev|update)$\"\n}\n}\n) {\nid\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#deleting-environments","title":"\u74b0\u5883\u306e\u524a\u9664","text":"

        Lagoon GraphQL API\u3092\u4f7f\u7528\u3057\u3066\u3001\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 \u74b0\u5883\u3002\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3068\u74b0\u5883\u540d\u3092\u77e5\u3063\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        \u74b0\u5883\u3092\u524a\u9664\u3059\u308b
        mutation {\ndeleteEnvironment(\ninput: {\n# TODO: name\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u74b0\u5883\u540d\u3067\u3059\u3002\nname: \"\"\n# TODO: project\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3067\u3059\u3002\nproject: \"\"\nexecute:true\n}\n)\n}\n
        "},{"location":"ja/interacting/graphql-queries/#querying-a-project-to-see-what-groups-and-users-are-assigned","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3068\u30e6\u30fc\u30b6\u30fc\u3092\u78ba\u8a8d\u3059\u308b","text":"

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3069\u306e\u30b0\u30eb\u30fc\u30d7\u3068\u30e6\u30fc\u30b6\u30fc\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u304b\u898b\u305f\u3044\u3067\u3059\u304b\uff1f\u5f7c\u3089\u306e\u5f79\u5272\u306f\u4f55\u304b\u77e5\u308a\u305f\u3044\u3067\u3059\u304b\uff1f\u305d\u306e\u305f\u3081\u306e\u30af\u30a8\u30ea\u304c\u3042\u308a\u307e\u3059\uff01\u4e0b\u8a18\u306e\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u691c\u7d22\u3057\u3001\u305d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u5f79\u5272\u3092\u8868\u793a\u3067\u304d\u307e\u3059\u3002

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u5f79\u5272\u3092\u30af\u30a8\u30ea\u3059\u308b
        query search{\nprojectByName(\n#TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n) {\nid,\nbranches,\nproductionEnvironment,\npullrequests,\ngitUrl,\nkubernetes {\nid\n},\ngroups{\nid\nname\ngroups {\nid\nname\n}\nmembers {\nrole\nuser {\nid\nemail\n}\n}\n}\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#maintaining-project-metadata","title":"\u7dad\u6301 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30e1\u30bf\u30c7\u30fc\u30bf","text":"

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30e1\u30bf\u30c7\u30fc\u30bf\u306f\u3001\u4efb\u610f\u306e\u30ad\u30fc/\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u3088\u3063\u3066\u554f\u3044\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u7a2e\u985e\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u3001\u307e\u305f\u306f\u5f8c\u3067\u554f\u3044\u5408\u308f\u305b\u308b\u305f\u3081\u306e\u4efb\u610f\u306e\u30ab\u30c6\u30b4\u30ea\u30fc\u306b\u3088\u3063\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5206\u985e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/interacting/graphql-queries/#addupdate-metadata-on-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0/\u66f4\u65b0\u3059\u308b","text":"

        \u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u66f4\u65b0\u306f\u30ad\u30fc/\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306fUPSERT\u3068\u3057\u3066\u52d5\u4f5c\u3057\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u65e2\u306b\u30ad\u30fc\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u5024\u304c\u66f4\u65b0\u3055\u308c\u3001\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f\u633f\u5165\u3055\u308c\u307e\u3059\u3002

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u4efb\u610f\u306e\u6570\u306ek/v\u30da\u30a2\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        \u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u30ad\u30fc/\u5024\u306e\u30da\u30a2\u3092\u8ffd\u52a0\u3059\u308b
        mutation {\nupdateProjectMetadata(\ninput: { id: 1,  patch: { key: \"type\", value: \"saas\" } }\n) {\nid\nmetadata\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#query-for-projects-by-metadata","title":"\u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u3088\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30af\u30a8\u30ea","text":"

        \u30af\u30a8\u30ea\u306fkey\u306e\u307f(\u4f8b:\u7279\u5b9a\u306e\u30ad\u30fc\u304c\u5b58\u5728\u3059\u308b\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8fd4\u3059)\u307e\u305f\u306fkey\u3068value\u306e\u4e21\u65b9(\u30ad\u30fc\u3068\u5024\u306e\u4e21\u65b9\u304c\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059)\u306b\u3088\u3063\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        version\u30bf\u30b0\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8:

        \u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u3088\u308b\u30af\u30a8\u30ea
        query projectsByMetadata {\nprojectsByMetadata(metadata: [{key: \"version\"] ) {\nid\nname\n}\n}\n

        \u7279\u306b\u30d0\u30fc\u30b8\u30e7\u30f38\u306eversion\u30bf\u30b0\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8:

        \u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u3088\u308b\u30af\u30a8\u30ea
        query projectsByMetadata {\nprojectsByMetadata(metadata: [{key: \"version\", value: \"8\"] ) {\nid\nname\n}\n}\n
        "},{"location":"ja/interacting/graphql-queries/#removing-metadata-on-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u524a\u9664\u3059\u308b","text":"

        \u30e1\u30bf\u30c7\u30fc\u30bf\u306f\u30ad\u30fc\u3054\u3068\u306b\u524a\u9664\u3067\u304d\u307e\u3059\u3002\u4ed6\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u30ad\u30fc/\u5024\u306e\u30da\u30a2\u306f\u6b8b\u308a\u307e\u3059\u3002

        \u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u524a\u9664\u3059\u308b
        mutation {\nremoveProjectMetadataByKey (\ninput: { id: 1,  key: \"version\" }\n) {\nid\nmetadata\n}\n}\n
        "},{"location":"ja/interacting/graphql/#graphql-api","title":"GraphQL API\u3078\u306e\u63a5\u7d9a","text":"

        Lagoon\u3067\u306eAPI\u3068\u306e\u3084\u308a\u3068\u308a\u306fGraphQL\u3092\u901a\u3058\u3066\u884c\u3044\u307e\u3059\u3002API\u306b\u8a8d\u8a3c\u3059\u308b\u305f\u3081\u306b\u306f\u3001JWT(JSON Web Token)\u304c\u5fc5\u8981\u3067\u3001\u3053\u308c\u306b\u3088\u308aSSH\u516c\u958b\u9375\u3092\u901a\u3058\u3066API\u306b\u5bfe\u3059\u308b\u8a8d\u8a3c\u304c\u884c\u308f\u308c\u307e\u3059\u3002

        \u3053\u306e\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001token\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059:

        \u30c8\u30fc\u30af\u30f3\u306e\u53d6\u5f97
        ssh -p [PORT] -t lagoon@[HOST] token\n

        amazee.io\u306e\u4f8b:

        amazee.io\u30c8\u30fc\u30af\u30f3\u306e\u53d6\u5f97
        ssh -p 32222 -t lagoon@ssh.lagoon.amazeeio.cloud token\n

        \u3053\u308c\u306b\u3088\u308a\u9577\u3044\u6587\u5b57\u5217\u304c\u8fd4\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u304cJWT\u30c8\u30fc\u30af\u30f3\u3067\u3059\u3002

        \u307e\u305f\u3001API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306eURL\u3082\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306b\u3064\u3044\u3066\u306fLagoon\u306e\u7ba1\u7406\u8005\u306b\u5c0b\u306d\u3066\u304f\u3060\u3055\u3044\u3002

        amazee.io\u3067\u306f\u3053\u308c\u306fhttps://api.lagoon.amazeeio.cloud/graphql\u3067\u3059\u3002

        \u3055\u3066\u3001GraphQL\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002\u6280\u8853\u7684\u306b\u306f\u3053\u308c\u306f\u5358\u306a\u308bHTTP\u3067\u3059\u304c\u3001\u6211\u3005\u306fGraphiQL\u3092\u63a8\u5968\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u7d20\u6575\u306aUI\u3092\u5099\u3048\u3066\u304a\u308a\u3001\u30aa\u30fc\u30c8\u30b3\u30f3\u30d7\u30ea\u30fc\u30c8\u3067GraphQL\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u8d77\u52d5\u3057\u307e\u3059\u3002 [GraphiQL App]

        API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u3092\u5165\u529b\u3057\u307e\u3059\u3002\u6b21\u306b\"Edit HTTP Headers\"\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u65b0\u3057\u3044\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059:

        • \"Header name\": Authorization
        • \"Header value\": Bearer [jwt token] ( JWT\u30c8\u30fc\u30af\u30f3\u306b\u30b9\u30da\u30fc\u30b9\u304c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u305d\u308c\u306f\u52d5\u4f5c\u3057\u307e\u305b\u3093)

        HTTP\u30d8\u30c3\u30c0\u30fc\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u3092\u9589\u3058\u307e\u3059(ESC\u30ad\u30fc\u3092\u62bc\u3057\u307e\u3059)\u3002\u3053\u308c\u3067\u3042\u306a\u305f\u306f\u521d\u3081\u3066\u306eGraphQL\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3046\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\uff01

        \u5de6\u5074\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u6b21\u306e\u5185\u5bb9\u3092\u5165\u529b\u3057\u307e\u3059:

        \u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\u3059\u308b
        query whatIsThere {\nallProjects {\nid\ngitUrl\nname\nbranches\npullrequests\nproductionEnvironment\nenvironments {\nname\nenvironmentType\n}\n}\n}\n

        \u305d\u3057\u3066\u3001\u25b6\ufe0f\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u304b(\u307e\u305f\u306fCTRL+ENTER\u3092\u62bc\u3059)\u3002

        \u3059\u3079\u3066\u3046\u307e\u304f\u3044\u3051\u3070\u3001\u521d\u3081\u3066\u306eGraphQL\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002

        "},{"location":"ja/interacting/graphql/#_1","title":"\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3","text":"

        Lagoon\u306eGraphQL API\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8868\u793a\u3057\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u65e2\u5b58\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b\u6a5f\u80fd\u3082\u6301\u3063\u3066\u3044\u307e\u3059\u3002Lagoon\u306e\u3059\u3079\u3066\u306eGraphQL\u306f\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

        \u60c5\u5831

        GraphQL\u306e\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u30af\u30a8\u30ea\u306f\u3001\u30c7\u30fc\u30bf\u30b9\u30c8\u30a2\u306e\u30c7\u30fc\u30bf\u3092\u5909\u66f4\u3057\u3001\u5024\u3092\u8fd4\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3001\u30c7\u30fc\u30bf\u306e\u633f\u5165\u3001\u66f4\u65b0\u3001\u524a\u9664\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u30b9\u30ad\u30fc\u30de\u306e\u4e00\u90e8\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u3092\u66f4\u65b0\u3057\u307e\u3059:

        \u30c7\u30d7\u30ed\u30a4\u30d6\u30e9\u30f3\u30c1\u3092\u66f4\u65b0
        mutation editProjectBranches {\nupdateProject(input:{id:109, patch:{branches:\"^(prod|stage|dev|update)$\"}}) {\nid\n}\n}\n

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u88fd\u54c1\u74b0\u5883\u3092\u66f4\u65b0\u3057\u307e\u3059:

        \u8b66\u544a

        \u3059\u3079\u3066\u306e\u5909\u66f4\u304c\u30b3\u30f3\u30c6\u30ca\u306b\u53cd\u6620\u3055\u308c\u308b\u3088\u3046\u306b\u3001\u518d\u30c7\u30d7\u30ed\u30a4\u304c\u5fc5\u8981\u3067\u3059\u3002

        \u88fd\u54c1\u74b0\u5883\u306e\u66f4\u65b0
        mutation editProjectProductionEnvironment {\nupdateProject(input:{id:109, patch:{productionEnvironment:\"prod\"}}) {\nid\n}\n}\n

        \u307e\u305f\u3001\u8907\u6570\u306e\u5909\u66f4\u3092\u4e00\u3064\u306e\u30af\u30a8\u30ea\u306b\u307e\u3068\u3081\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

        \u8907\u6570\u306e\u5909\u66f4
        mutation editProjectProductionEnvironmentAndBranches {\nupdateProject(input:{id:109, patch:{productionEnvironment:\"prod\", branches:\"^(prod|stage|dev|update)$\"}}) {\nid\n}\n}\n
        "},{"location":"ja/interacting/lagoon-ui/","title":"LagoonUI","text":"

        Lagoon UI\u306f\u3001Lagoon\u3068\u306e\u6700\u521d\u306e\u63a5\u70b9\u3067\u3059\u3002\u30a2\u30af\u30bb\u30b9\u306b\u95a2\u3059\u308b\u554f\u984c\u304c\u3042\u308b\u5834\u5408\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        UI\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u7d44\u7e54\u306b\u95a2\u3059\u308b\u3055\u307e\u3056\u307e\u306a\u30bf\u30b9\u30af\u3092\u5b8c\u4e86\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7d44\u7e54\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002\u3001UI\u3067\u7d44\u7e54\u3068\u4f55\u304c\u3067\u304d\u308b\u304b\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/interacting/organizations/","title":"UI\u3067\u7d44\u7e54\u3068\u5171\u540c\u4f5c\u696d\u3059\u308b","text":"

        \u4ee5\u4e0b\u306b\u3001Lagoon UI\u3067\u30b0\u30eb\u30fc\u30d7\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u304a\u3088\u3073\u5f79\u5272\u306b\u95a2\u9023\u3059\u308b\u6709\u7528\u306a\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9\u3092\u793a\u3057\u307e\u3059\u3002

        "},{"location":"ja/interacting/organizations/#log-in-and-find-organizations","title":"\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u7d44\u7e54\u3092\u63a2\u3059","text":""},{"location":"ja/interacting/organizations/#view-who-has-access-to-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3064\u4eba\u3092\u78ba\u8a8d\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#add-user-to-group-with-role","title":"\u30e6\u30fc\u30b6\u30fc\u3092\u30ed\u30fc\u30eb\u4ed8\u304d\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#remove-a-user-from-a-group","title":"\u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u524a\u9664\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#change-a-user-role","title":"\u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30fc\u30eb\u3092\u5909\u66f4\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#add-an-email-notification-to-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30e1\u30fc\u30eb\u901a\u77e5\u3092\u8ffd\u52a0\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#add-a-group-to-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#add-a-user-with-organization-owner-privileges","title":"\u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u6a29\u9650\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#create-a-new-project-add-a-group-and-create-a-production-environment","title":"\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3057\u3001\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u74b0\u5883\u3092\u4f5c\u6210\u3059\u308b","text":""},{"location":"ja/interacting/rbac/","title":"\u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1 (RBAC)","text":"

        Lagoon \u30d0\u30fc\u30b8\u30e7\u30f3 1.0 \u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u65b9\u6cd5\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u30b0\u30eb\u30fc\u30d7\u7d4c\u7531\u3067\u51e6\u7406\u3055\u308c\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f 1 \u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306f\u30ed\u30fc\u30eb\u3092\u6301\u3064\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\u30b0\u30eb\u30fc\u30d7\u306f\u30b5\u30d6\u30b0\u30eb\u30fc\u30d7\u5185\u306b\u30cd\u30b9\u30c8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u5909\u66f4\u306b\u3088\u308a\u3001\u67d4\u8edf\u6027\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3001Lagoon \u5185\u3067\u5b9f\u969b\u306e\u30c1\u30fc\u30e0\u3092\u518d\u73fe\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

        "},{"location":"ja/interacting/rbac/#roles","title":"\u5f79\u67c4","text":"

        \u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u308b\u3068\u304d\u306f\u3001\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u5185\u3067\u305d\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u30b0\u30eb\u30fc\u30d7 \u30ed\u30fc\u30eb\u3092\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u5b58\u5728\u3059\u308b 5 \u3064\u306e\u30b0\u30eb\u30fc\u30d7 \u30ed\u30fc\u30eb\u306e\u305d\u308c\u305e\u308c\u304c\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u7570\u306a\u308b\u6a29\u9650\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u4ed8\u4e0e\u3057\u307e\u3059\u3002\u73fe\u5728 Lagoon \u306b\u3042\u308b\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u30ed\u30fc\u30eb\u3068\u30b0\u30eb\u30fc\u30d7 \u30ed\u30fc\u30eb\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002

        "},{"location":"ja/interacting/rbac/#platform-wide-roles","title":"\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u30ed\u30fc\u30eb","text":""},{"location":"ja/interacting/rbac/#platform-wide-admin","title":"\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u7ba1\u7406\u8005","text":"

        \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u7ba1\u7406\u8005\u306f\u3001Lagoon \u5168\u4f53\u306e\u3059\u3079\u3066\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u524a\u9664\u3059\u308b\u306a\u3069\u306e\u5371\u967a\u306a\u5909\u66f4\u3082\u542b\u307e\u308c\u307e\u3059\u3002\u975e\u5e38\u306b\u614e\u91cd\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/interacting/rbac/#platform-wide-owner","title":"\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u6240\u6709\u8005","text":"

        \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u30aa\u30fc\u30ca\u30fc\u306f\u3001\u30b0\u30eb\u30fc\u30d7\u30aa\u30fc\u30ca\u30fc\u306e\u5f79\u5272\u3068\u540c\u69d8\u306b\u3059\u3079\u3066\u306eLagoon\u30b0\u30eb\u30fc\u30d7\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u3059\u3079\u3066\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304c\u3001\u5404\u30b0\u30eb\u30fc\u30d7\u306b\u30e6\u30fc\u30b6\u30fc\u3092\u5272\u308a\u5f53\u3066\u305f\u304f\u306a\u3044\u5834\u5408\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/interacting/rbac/#organization-roles","title":"\u7d44\u7e54\u306e\u5f79\u5272","text":""},{"location":"ja/interacting/rbac/#organization-owner","title":"\u7d44\u7e54\u306e\u6240\u6709\u8005","text":"

        \u7d44\u7e54\u306e\u6240\u6709\u8005\u306e\u30ed\u30fc\u30eb\u306b\u3088\u308a\u3001\u7d44\u7e54\u5185\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u901a\u77e5\u3092\u4f5c\u6210\u304a\u3088\u3073\u524a\u9664\u3067\u304d\u307e\u3059\u3002

        \u5f7c\u3089\u306f\u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3057\u3001\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u5185\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30fc\u30eb\u3092\u5909\u66f4\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u95a2\u9023\u4ed8\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u306f\u8ab0\u304c\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3063\u3066\u3044\u308b\u304b\u3092\u660e\u78ba\u306b\u628a\u63e1\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u3092\u8fc5\u901f\u306b\u8ffd\u52a0\u30fb\u524a\u9664\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        \u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u306f\u3001Slack\u3084\u305d\u306e\u4ed6\u306e\u901a\u77e5\u3092\u76f4\u63a5\u4f5c\u6210\u3057\u3001\u305d\u308c\u3089\u306e\u901a\u77e5\u3092Lagoon\u7ba1\u7406\u8005\u306e\u52a9\u3051\u3092\u501f\u308a\u305a\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u95a2\u9023\u4ed8\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002

        \u7d44\u7e54\u306e\u6240\u6709\u8005\u306f\u3001\u7d44\u7e54\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u4ed6\u306e\u6240\u6709\u8005\u3001\u7ba1\u7406\u8005\u3001\u307e\u305f\u306f\u95b2\u89a7\u8005\u3092\u8ffd\u52a0\u304a\u3088\u3073\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

        \u6ce8\u610f

        \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u3053\u306e\u30ed\u30fc\u30eb\u306f\u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u74b0\u5883\u3092\u4f5c\u6210\u3057\u305f\u308a\u3001\u30c7\u30d7\u30ed\u30a4\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u5f7c\u3089\u306f\u81ea\u5206\u81ea\u8eab\u3092\u3001\u305d\u306e\u6a29\u9650\u3092\u4ed8\u4e0e\u3059\u308b\u30ed\u30fc\u30eb\u3092\u6301\u3064\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3068\u304d\u3001\u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30b0\u30eb\u30fc\u30d7\u306e\u30aa\u30fc\u30ca\u30fc\u3068\u3057\u3066\u8ffd\u52a0\u3055\u308c\u308b\u3053\u3068\u3092\u9078\u629e\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/interacting/rbac/#organization-admin","title":"\u7d44\u7e54\u7ba1\u7406\u8005","text":"

        \u7d44\u7e54\u7ba1\u7406\u8005\u306e\u5f79\u5272\u306f\u7d44\u7e54\u6240\u6709\u8005\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u3053\u306e\u5f79\u5272\u3067\u306f\u7d44\u7e54\u306e\u6240\u6709\u8005\u3001\u7ba1\u7406\u8005\u3001\u307e\u305f\u306f\u95b2\u89a7\u8005\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002

        "},{"location":"ja/interacting/rbac/#organization-viewer","title":"\u7d44\u7e54\u306e\u30d3\u30e5\u30fc\u30a2","text":"

        \u7d44\u7e54\u306e\u30d3\u30e5\u30fc\u30ef\u30fc\u306f\u3001\u81ea\u7d44\u7e54\u5185\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u30e6\u30fc\u30b6\u30fc\u306e\u30a2\u30af\u30bb\u30b9\u3001\u901a\u77e5\u3092\u8868\u793a\u3059\u308b\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

        "},{"location":"ja/interacting/rbac/#group-roles","title":"\u30b0\u30eb\u30fc\u30d7\u306e\u30ed\u30fc\u30eb","text":""},{"location":"ja/interacting/rbac/#owner","title":"\u30aa\u30fc\u30ca\u30fc","text":"

        \u30aa\u30fc\u30ca\u30fc\u306e\u30ed\u30fc\u30eb\u306f\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u305d\u306e\u95a2\u9023\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u5168\u3066\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5f7c\u3089\u306f\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u3001\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u3053\u306e\u30ed\u30fc\u30eb\u306b\u306f\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3001\u306a\u305c\u306a\u3089\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u672c\u756a\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u3089\u3067\u3059\u3002

        "},{"location":"ja/interacting/rbac/#maintainer","title":"\u30e1\u30f3\u30c6\u30ca","text":"

        \u30e1\u30f3\u30c6\u30ca\u306e\u30ed\u30fc\u30eb\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u81ea\u4f53\u3084\u672c\u756a\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3092\u9664\u3044\u3066\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u305d\u306e\u95a2\u9023\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u4f55\u3067\u3082\u3067\u304d\u307e\u3059\u3002\u5f7c\u3089\u306f\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u3001\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/interacting/rbac/#developer","title":"\u958b\u767a\u8005","text":"

        \u958b\u767a\u8005\u30ed\u30fc\u30eb\u306f\u958b\u767a\u74b0\u5883\u3078\u306eSSH\u30a2\u30af\u30bb\u30b9\u306e\u307f\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30ed\u30fc\u30eb\u306f\u3001\u672c\u756a\u74b0\u5883\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3001\u66f4\u65b0\u3001\u524a\u9664\u3092\u884c\u3046\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u672c\u756a\u74b0\u5883\u3092\u30bd\u30fc\u30b9\u3068\u3057\u3066\u540c\u671f\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u3059\u304c\u3001\u5b9b\u5148\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u307e\u305f\u3001\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u3082\u884c\u3048\u307e\u305b\u3093\u3002

        \u91cd\u8981

        \u3053\u306e\u30ed\u30fc\u30eb\u306f\u3001Git\u30d7\u30c3\u30b7\u30e5\u306b\u3088\u3063\u3066\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u308b\u305f\u3081\u3001\u672c\u756a\u74b0\u5883\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u9632\u3050\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002Git\u30b5\u30fc\u30d0\u30fc\u304c\u3053\u308c\u3089\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u672c\u756a\u74b0\u5883\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u306e\u3092\u9632\u3050\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/interacting/rbac/#reporter","title":"\u30ec\u30dd\u30fc\u30bf\u30fc","text":"

        \u30ec\u30dd\u30fc\u30bf\u30fc\u306e\u30ed\u30fc\u30eb\u306f\u3001\u95b2\u89a7\u30a2\u30af\u30bb\u30b9\u306e\u307f\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u5f7c\u3089\u306fSSH\u7d4c\u7531\u3067\u74b0\u5883\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u308a\u3001\u305d\u308c\u3089\u3092\u5909\u66f4\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u5f7c\u3089\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30ea\u30a2\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30ed\u30fc\u30eb\u306f\u4e3b\u306b\u3001\u30b9\u30c6\u30fc\u30af\u30db\u30eb\u30c0\u30fc\u304cLagoon UI\u3068\u30ed\u30b0\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/interacting/rbac/#guest","title":"\u30b2\u30b9\u30c8","text":"

        \u30b2\u30b9\u30c8\u306e\u30ed\u30fc\u30eb\u306f\u3001\u4e0a\u8a18\u306e\u30ec\u30dd\u30fc\u30bf\u30fc\u306e\u30ed\u30fc\u30eb\u3068\u540c\u7b49\u306e\u6a29\u9650\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

        \u4ee5\u4e0b\u306f\u305d\u306e\u8868\u3067\u3059\u3002 \u5f7c\u3089\u304c\u6301\u3064\u30ed\u30fc\u30eb\u3068\u30a2\u30af\u30bb\u30b9\u3092\u30ea\u30b9\u30c8\u3057\u307e\u3059:

        "},{"location":"ja/interacting/rbac/#lagoon-100-rbac-permission-matrix","title":"Lagoon 1.0.0 RBAC \u6a29\u9650\u30de\u30c8\u30ea\u30c3\u30af\u30b9","text":"\u81ea\u5206\u81ea\u8eab\u30b2\u30b9\u30c8\u958b\u767a\u8005\u30e1\u30f3\u30c6\u30ca\u30fc\u30aa\u30fc\u30ca\u30fc\u7d44\u7e54\u30d3\u30e5\u30fc\u30a2\u7d44\u7e54\u30aa\u30fc\u30ca\u30fc\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u6240\u6709\u8005\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u7ba1\u7406\u8005 \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID userCanSshToEnvironment environment ssh:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID userCanSshToEnvironment environment ssh:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u7bc4\u56f2 \u5c5e\u6027 addOrUpdateEnvironmentStorage environment storage addNotificationSlack notification add updateNotificationSlack notification update deleteNotificationSlack notification delete addKubernetes kubernetes add updateKubernetes kubernetes update deleteKubernetes kubernetes delete getAllOpenshifts openshift viewAll getAllProjects project viewAll addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID allEnvironments environment viewAll getEnvironmentStorageMonthByEnvironmentId environment storage getEnvironmentHoursMonthByEnvironmentId environment storage getEnvironmentHitsMonthByEnvironmentId environment storage addOrUpdateEnvironmentStorage environment storage addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add getAllOrganizations organization viewAll addOrganization add viewAll updateOrganization update viewAll deleteOrganization delete viewAll getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 getEnvironmentStorageMonthByEnvironmentId environment storage getEnvironmentHoursMonthByEnvironmentId environment storage getEnvironmentHitsMonthByEnvironmentId environment storage getAllOpenshifts openshift viewAll addOrUpdateEnvironmentStorage environment storage addNotificationSlack notification add updateNotificationSlack notification update deleteNotificationSlack notification delete addKubernetes kubernetes add updateKubernetes kubernetes update deleteKubernetes kubernetes delete getAllProjects project viewAll addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add getAllOrganizations organization viewAll addOrganization add viewAll updateOrganization update viewAll deleteOrganization delete viewAll getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId"},{"location":"ja/interacting/ssh/","title":"SSH","text":"

        Lagoon\u3067\u306f\u3001SSH\u3092\u901a\u3058\u3066\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u81ea\u4f53\u306b\u306fSSH\u30b5\u30fc\u30d0\u30fc\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u4ee3\u308f\u308a\u306bSSH\u3092\u4f7f\u3063\u3066Lagoon\u306b\u63a5\u7d9a\u3057\u3001\u305d\u3053\u304b\u3089Kubernetes API\u3092\u901a\u3058\u3066\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u63a5\u7d9a\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

        "},{"location":"ja/interacting/ssh/#ssh_1","title":"SSH\u30a2\u30af\u30bb\u30b9\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3059\u308b","text":""},{"location":"ja/interacting/ssh/#ssh_2","title":"SSH\u30ad\u30fc\u306e\u751f\u6210","text":"

        \u540c\u3058\u30ad\u30fc\u3092\u8907\u6570\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u9593\u3067\u5171\u6709\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u5404\u30c7\u30d0\u30a4\u30b9\u3054\u3068\u306b\u5225\u3005\u306eSSH\u30ad\u30fc\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u5404\u30b7\u30b9\u30c6\u30e0\u3067\u306eSSH\u30ad\u30fc\u306e\u751f\u6210\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/interacting/ssh/#osxmac","title":"OSX(Mac)","text":"

        Mac

        "},{"location":"ja/interacting/ssh/#linuxubuntu","title":"Linux(Ubuntu)","text":"

        Linux

        "},{"location":"ja/interacting/ssh/#ssh_3","title":"SSH\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8","text":""},{"location":"ja/interacting/ssh/#osxmac_1","title":"OSX(Mac)","text":"

        OSX\u306f\u3001\u8d77\u52d5\u6642\u306b\u8a2d\u5b9a\u3055\u308c\u305fSSH\u30ad\u30fc\u3092\u30ed\u30fc\u30c9\u3059\u308b\u3088\u3046\u306bSSH\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u3053\u308c\u306b\u3088\u308a\u554f\u984c\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306e\u8a2d\u5b9a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u3061\u3089\u306e\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:https://www.backarapper.com/add-ssh-keys-to-ssh-agent-on-startup-in-macos/

        "},{"location":"ja/interacting/ssh/#linux","title":"Linux","text":"

        Linux\u30c7\u30a3\u30b9\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3\u306f\u3001ssh-agent\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3088\u308a\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u30ac\u30a4\u30c9\u306f\u3053\u3053\u306b\u3042\u308a\u307e\u3059:https://www.ssh.com/academy/ssh/agent

        "},{"location":"ja/interacting/ssh/#windows_1","title":"Windows","text":"

        \u6700\u8fd1\u3067\u306fWindows\u3067\u306eSSH\u30ad\u30fc\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3001\u73fe\u5728\u3067\u306f\u30cd\u30a4\u30c6\u30a3\u30d6\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002Windows 10\u306eSSH\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306e\u4fbf\u5229\u306a\u30ac\u30a4\u30c9\u306f\u3053\u3053\u306b\u3042\u308a\u307e\u3059:https://richardballard.co.uk/ssh-keys-on-windows-10/

        "},{"location":"ja/interacting/ssh/#ssh_4","title":"SSH\u30ad\u30fc\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9","text":""},{"location":"ja/interacting/ssh/#ui","title":"UI\u3092\u901a\u3058\u3066","text":"

        SSH\u30ad\u30fc\u3092UI\u3092\u901a\u3058\u3066\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002\u901a\u5e38\u901a\u308a\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        \u53f3\u4e0a\u306e\u89d2\u306b\u3042\u308b\u8a2d\u5b9a\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059:

        \u6b21\u306b\u3001SSH\u30ad\u30fc\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u3001\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30ad\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30ad\u30fc\u3092\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\u8cbc\u308a\u4ed8\u3051\u3001\u540d\u524d\u3092\u4ed8\u3051\u3066\u300c\u8ffd\u52a0\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u305d\u308c\u3060\u3051\u3067\u3059\uff01\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8ffd\u52a0\u306e\u30ad\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

        "},{"location":"ja/interacting/ssh/#_1","title":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u7d4c\u7531","text":"

        \u30e6\u30fc\u30b6\u30fc\u306bSSH\u30ad\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306eLagoon API\u3092GraphQL\u7d4c\u7531\u3067\u4f7f\u7528\u3059\u308b\u4e00\u822c\u7684\u306a\u4f8b\u306f\u3001\u3053\u3061\u3089\u306b\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/interacting/ssh/#ssh_5","title":"\u30dd\u30c3\u30c9\u3078\u306eSSH\u63a5\u7d9a","text":""},{"location":"ja/interacting/ssh/#_2","title":"\u63a5\u7d9a","text":"

        \u63a5\u7d9a\u306f\u76f4\u63a5\u7684\u3067\u3001\u6b21\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u5f93\u3044\u307e\u3059:

        SSH
        ssh -p [PORT] -t [PROJECT-ENVIRONMENT-NAME]@[HOST]\n
        • PORT - \u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u306eSSH\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30dd\u30fc\u30c8(amazee.io\u306e\u5834\u5408:22)\u3002
        • HOST - \u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u306eSSH\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30db\u30b9\u30c8(amazee.io\u306e\u5834\u5408ssh.example.com)\u3002
        • PROJECT-ENVIRONMENT-NAME - \u63a5\u7d9a\u3057\u305f\u3044\u74b0\u5883\u3002\u3053\u308c\u306f\u901a\u5e38PROJECTNAME-ENVIRONMENT\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

        \u4f8b\u3048\u3070:

        SSH example
        ssh -p 22 -t drupal-example-main@ssh.example.com\n

        \u3053\u308c\u306b\u3088\u308a\u3001main\u74b0\u5883\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8drupal-example\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002

        "},{"location":"ja/interacting/ssh/#_3","title":"\u30dd\u30c3\u30c9/\u30b5\u30fc\u30d3\u30b9\u3001\u30b3\u30f3\u30c6\u30ca\u5b9a\u7fa9","text":"

        \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u306f\u30bf\u30a4\u30d7cli\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u3088\u3046\u3068\u3057\u307e\u3059\u3002\u4ed6\u306e\u30dd\u30c3\u30c9/\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3067\u304d\u307e\u3059:

        SSH to another service
        ssh -p [PORT] -t [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8-\u74b0\u5883\u540d]@[\u30db\u30b9\u30c8] service=[\u30b5\u30fc\u30d3\u30b9\u540d]\n

        \u3042\u306a\u305f\u306e\u30dd\u30c3\u30c9/\u30b5\u30fc\u30d3\u30b9\u306b\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5834\u5408\u3001Lagoon\u306f\u3042\u306a\u305f\u3092\u6700\u521d\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u63a5\u7d9a\u3057\u305f\u3044\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

        \u30b3\u30f3\u30c6\u30ca\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002
        ssh -p [\u30dd\u30fc\u30c8] -t [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8-\u74b0\u5883\u540d]@[\u30db\u30b9\u30c8] service=[\u30b5\u30fc\u30d3\u30b9\u540d] container=[\u30b3\u30f3\u30c6\u30ca\u540d]\n

        \u4f8b\u3048\u3070\u3001nginx\u30dd\u30c3\u30c9\u5185\u306ephp\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3059\u308b\u306b\u306f:

        SSH to php container
        ssh -p 22 -t drupal-example-main@sssh.example.com service=nginx container=php\n
        "},{"location":"ja/interacting/ssh/#_4","title":"\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30d4\u30fc","text":"

        \u4e00\u822c\u7684\u306a\u30b1\u30fc\u30b9\u3067\u3001\u30d5\u30a1\u30a4\u30eb\u3092cli\u30dd\u30c3\u30c9\u306b\u30b3\u30d4\u30fc\u3059\u308b\u3053\u3068\u306f\u3001\u901a\u5e38\u306eSSH\u4e92\u63db\u30c4\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u9054\u6210\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/interacting/ssh/#scp","title":"scp","text":"Copy file with scp
        scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 22 [\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9] [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@ssh.example.com:[\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9]\n
        "},{"location":"ja/interacting/ssh/#rsync","title":"rsync","text":"Copy files with rsync
        rsync --rsh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22' [\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9] [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@ssh.example.com:[\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9]\n
        "},{"location":"ja/interacting/ssh/#tar","title":"tar","text":"Bash
        ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 22 [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@ssh.example.com tar -zcf - [\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9] | tar -zxf - -C /tmp/\n
        "},{"location":"ja/interacting/ssh/#cli","title":"\u975eCLI\u30dd\u30c3\u30c9/\u30b5\u30fc\u30d3\u30b9\u306e\u6307\u5b9a","text":"

        \u307e\u308c\u306a\u30b1\u30fc\u30b9\u3067\u3001\u975eCLI\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 service=...\u304a\u3088\u3073/\u307e\u305f\u306fcontainer=...\u5f15\u6570\u306f\u30b3\u30d4\u30fc\u30b3\u30de\u30f3\u30c9\u306b\u3042\u308a\u307e\u3059\u3002

        tar\u3092ssh\u63a5\u7d9a\u3092\u901a\u3057\u3066\u30d1\u30a4\u30d7\u3059\u308b\u3053\u3068\u306f\u6700\u3082\u5358\u7d14\u306a\u65b9\u6cd5\u3067\u3001\u901a\u5e38\u306etar\u30d5\u30e9\u30b0\u3092\u7528\u3044\u3066\u30d5\u30a1\u30a4\u30eb\u3084\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u30b3\u30d4\u30fc\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059:

        Bash
        ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 32222 [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@ssh.example.com service=solr tar -zcf - [\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9] | tar -zxf - -C /tmp/\n

        \u307e\u305f\u3001Lagoon\u306eSSH\u30b5\u30fc\u30d3\u30b9\u306b\u5fc5\u8981\u306a\u5f62\u3067ssh\u306e\u5f15\u6570\u3092\u4e26\u3079\u66ff\u3048\u308b\u30e9\u30c3\u30d1\u30fc\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u7528\u3044\u3066rsync\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

        Bash
        #!/usr/bin/env sh\nsvc=$1 user=$3 host=$4\nshift 4\nexec ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22 -l \"$user\" \"$host\" \"$svc\" \"$@\"\n

        \u305d\u308c\u3092\u5b9f\u884c\u53ef\u80fd\u306a\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8rsh.sh\u306b\u5165\u308c\u3066\u3001rsync\u30b3\u30de\u30f3\u30c9\u3067service=...\u3092\u6307\u5b9a\u3057\u307e\u3059:

        rsync to non-CLI pod
        rsync --rsh=\"/path/to/rsh.sh service=cli\" /tmp/foo [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@sssh.example.com:/tmp/foo\n

        \u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001container=...\u5f15\u6570\u3082\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u8abf\u6574\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/installing-lagoon/efs-provisioner/","title":"EFS\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc","text":"

        \u60c5\u5831

        \u3053\u308c\u306fAWS\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u306e\u307f\u9069\u7528\u3055\u308c\u307e\u3059\u3002

        1. Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0\u3057\u307e\u3059:

          Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0
          helm repo add stable https://charts.helm.sh/stable\n
        2. \u8a2d\u5b9a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306befs-provisioner-values.yml\u3092\u4f5c\u6210\u3057\u3001\u5024\u3092\u66f4\u65b0\u3057\u307e\u3059:

          efs-provisioner-values.yml
          efsProvisioner:\nefsFileSystemId: <efsFileSystemId>\nawsRegion: <awsRegion>\npath: /\nprovisionerName: example.com/aws-efs\nstorageClass:\nname: bulk\nisDefault: false\nreclaimPolicy: Delete\nmountOptions: []\nglobal:\ndeployEnv: prod\n
        3. EFS\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059:

          EFS\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
          helm upgrade --install --create-namespace \\\n--namespace efs-provisioner --wait \\\n-f efs-provisioner-values.yaml \\\nefs-provisioner stable/efs-provisioner\n
        "},{"location":"ja/lagoonizing/","title":"\u65e2\u5b58\u306e\u30b5\u30a4\u30c8\u3092Lagoonizing","text":"

        \u300cLagoonizing\u300d\u3068\u306f\u3001\u65e2\u5b58\u306e\u30b5\u30a4\u30c8\u3092Lagoon\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306b\u9069\u5fdc\u3055\u305b\u308b\u3053\u3068\u3067\u3001\u901a\u5e38\u306f\u96e3\u3057\u304f\u306a\u3044\u4f5c\u696d\u3067\u3059\uff08\u305f\u3060\u3057\u3001\u30b5\u30a4\u30c8\u3084\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u3088\u308a\u7570\u306a\u308a\u307e\u3059\uff09\u3002\u300cLagoonizing\u300d\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u624b\u9806\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u7c21\u5358\u306b\u3059\u308b\u305f\u3081\u306e\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u306e\u30ac\u30a4\u30c9\u3092\u307e\u3068\u3081\u3066\u3044\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#_1","title":"\u8981\u4ef6","text":"

        \u3042\u306a\u305f\u306e\u30b7\u30b9\u30c6\u30e0\u304c\u30ed\u30fc\u30ab\u30eb\u3067Lagoon\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/lagoonizing/#_2","title":"\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883","text":"

        \u30ed\u30fc\u30ab\u30eb\u3067\u306e\u958b\u767a\u74b0\u5883\u306e\u8a2d\u5b9a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002Pygmy\u307e\u305f\u306fLando\u306e\u3044\u305a\u308c\u304b\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#git","title":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3068Git","text":"

        Lagoon\u3068\u306e\u3084\u308a\u53d6\u308a\u306b\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304c\u5fc5\u8981\u3067\u3059\u3057\u3001Git\u3082\u4f7f\u7528\u3057\u307e\u3059\u306e\u3067\u3001\u3053\u308c\u3089\u304c\u6e96\u5099\u3067\u304d\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/lagoonizing/#_3","title":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3","text":"

        \u30bf\u30b9\u30af\u306e\u5b9f\u884c\u306b\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002OS\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30c4\u30fc\u30eb\u3092\u542b\u3081\u3001\u4f55\u3092\u4f7f\u7528\u3057\u3066\u3044\u305f\u3060\u3044\u3066\u3082\u69cb\u3044\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u306b\u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u793a\u3057\u307e\u3059:

        • iTerm2 (Mac)
        • PowerShell (Windows)
        • Fish (Mac, Windows, Linux)
        • Tabby (Mac, Windows, Linux)
        "},{"location":"ja/lagoonizing/#git_1","title":"Git\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

        \u307e\u3060Git\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001 \u4f55\u3089\u304b\u306e\u5f62\u3067Git\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3001GUI\u3001\u4f55\u3067\u3082\u69cb\u3044\u307e\u305b\u3093(\u79c1\u305f\u3061\u306e\u4f8b\u3067\u306f\u3001\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059)\u3002\u4ee5\u4e0b\u306b\u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u793a\u3057\u307e\u3059:

        • Git\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb (Mac\u3001Windows\u3001Linux)
        • SourceTree (Mac\u3001Windows)
        • GitHub Desktop (Mac\u3001Windows)
        • GitKraken (Mac\u3001Windows\u3001Linux - \u516c\u958b\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u7121\u6599)
        "},{"location":"ja/lagoonizing/#lagoon","title":"Lagoon\u7ba1\u7406\u8005\u304c\u5fc5\u8981\u3068\u3059\u308b\u3082\u306e","text":"

        Lagoon\u3092\u8a2d\u5b9a\u3059\u308bLagoon\u7ba1\u7406\u8005\u306f\u3001\u5404\u7a2e\u60c5\u5831\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u8a73\u7d30\u306f\u3053\u3061\u3089\u3002

        "},{"location":"ja/lagoonizing/#webhooks","title":"Webhooks\u306e\u8a2d\u5b9a","text":"

        \u6b21\u306b\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u305f\u3081\u306ewebhooks\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u624b\u9806\u306f\u3053\u3061\u3089\u304b\u3089\u3054\u78ba\u8a8d\u3044\u305f\u3060\u3051\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#docker-composeyml","title":"docker-compose.yml","text":"

        docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001Lagoon\u306b\u304a\u3044\u3066\u4ee5\u4e0b\u306e\u76ee\u7684\u3067\u4f7f\u7528\u3055\u308c\u307e\u3059:

        • \u3069\u306e\u30b5\u30fc\u30d3\u30b9/\u30b3\u30f3\u30c6\u30ca\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u304b\u3092\u5b66\u3076\u3002
        • \u30b3\u30f3\u30c6\u30ca\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u3069\u306e\u3088\u3046\u306b\u30d3\u30eb\u30c9\u3055\u308c\u308b\u304b\u3092\u5b9a\u7fa9\u3059\u308b\u3002
        • \u6c38\u7d9a\u30dc\u30ea\u30e5\u30fc\u30e0\u306a\u3069\u306e\u8ffd\u52a0\u8a2d\u5b9a\u3092\u5b9a\u7fa9\u3059\u308b\u3002

        \u3055\u3089\u306b\u8a73\u3057\u3044\u60c5\u5831\u306fdocker-compose.yml\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044.

        docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u3092Lagoon\u306b\u5bfe\u5fdc\u3055\u305b\u308b\u305f\u3081\u306b\u4f5c\u6210\u30fb\u8a2d\u5b9a\u3059\u308b2\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u3046\u3061\u306e1\u3064\u3067\u3059\u3002

        Docker-compose(\u30c4\u30fc\u30eb)\u306f\u3001YAML\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u53b3\u683c\u306b\u691c\u8a3c\u3059\u308b\u306e\u3067\u3001\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\u306e\u30e9\u30d9\u30eb\u5185\u3067\u306e\u307f\u8a2d\u5b9a\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        \u8b66\u544a

        Lagoon\u306fdocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30e9\u30d9\u30eb\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u3001\u30a4\u30e1\u30fc\u30b8\u540d\u3001\u30d3\u30eb\u30c9\u5b9a\u7fa9\u306e\u307f\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u30dd\u30fc\u30c8\u3001\u74b0\u5883\u5909\u6570\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u30ea\u30f3\u30af\u3001\u30e6\u30fc\u30b6\u30fc\u306a\u3069\u306e\u5b9a\u7fa9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u610f\u56f3\u7684\u306a\u3082\u306e\u3067\u3001docker-compose\u30d5\u30a1\u30a4\u30eb\u306f\u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u8a2d\u5b9a\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002Lagoon\u306flagoon.type\u304b\u3089\u3042\u306a\u305f\u304c\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u3044\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u5b66\u3073\u3001\u305d\u306e\u7d50\u679c\u3001\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u5fc5\u8981\u3068\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30dd\u30fc\u30c8\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u305d\u306e\u4ed6\u306e\u8ffd\u52a0\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u77e5\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        \u57fa\u672c\u7684\u306a\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u65b9\u6cd5\u3092\u3044\u304f\u3064\u304b\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u4f8b\u3067\u306f\u3001Drupal\u3001Laravel\u3001\u305d\u306e\u4ed6\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u306a\u3069\u3001\u591a\u304f\u306e\u30b7\u30b9\u30c6\u30e0\u306b\u5fc5\u8981\u306aNGINX\u3001PHP\u3001MariaDB\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002

        \u4ee5\u4e0b\u306f\u3001Drupal\u7528\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\u3067\u3059:

        docker-compose.yml
        version: '2.3'\nx-lagoon-project:\n# Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff08\u3053\u3053\u3092\u7de8\u96c6\u3059\u308b\u5834\u5408\u306f\u3001&lagoon-project\u3092\u4fdd\u6301\u3057\u3066\u304f\u3060\u3055\u3044\uff09\n&lagoon-project drupal-example\nx-volumes:\n&default-volumes\n# Docker\u30b3\u30f3\u30c6\u30ca\u306b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30de\u30a6\u30f3\u30c8\u3057\u305f\u3044\u3059\u3079\u3066\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u5b9a\u7fa9\u3057\u307e\u3059\nvolumes:\n- .:/app:delegated\nx-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# \u30ed\u30fc\u30ab\u30eb\u3067\u4f7f\u7528\u3059\u308b\u30eb\u30fc\u30c8\u3002pygmy\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u30eb\u30fc\u30c8\u306f *\u5fc5\u305a* .docker.amazee.io\u3067\u7d42\u308f\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n# \u30b7\u30b9\u30c6\u30e0\u3092\u672c\u756a\u74b0\u5883\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3055\u305b\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u884c\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\n#LAGOON_ENVIRONMENT_TYPE: production\n# xdebug\u3092\u6709\u52b9\u306b\u3057\u3001`docker-compose up -d`\u3067\u518d\u8d77\u52d5\u3057\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u884c\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\n#XDEBUG_ENABLE: \"true\"\nx-user:\n&default-user\n# \u30b3\u30f3\u30c6\u30ca\u304c\u5b9f\u884c\u3059\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u3002Linux\u4e0a\u3067id `1000`\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u5834\u5408\u306b\u306f\u3053\u308c\u3092\u5909\u66f4\u3057\u307e\u3059\u3002\nuser: '1000'\nservices:\nnginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.name: nginx\nlagoon.persistent: /app/web/sites/default/files/\nmariadb:\nimage: uselagoon/mariadb-10.11-drupal\nlabels:\nlagoon.type: mariadb\n

        \u305d\u308c\u305e\u308c\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u4f55\u3092\u610f\u5473\u3059\u308b\u304b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002

        "},{"location":"ja/lagoonizing/#_4","title":"\u57fa\u672c\u8a2d\u5b9a","text":"

        x-lagoon-project: \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30de\u30b7\u30f3\u540d\u3067\u3059\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002\"drupal-example\"\u3068\u3044\u3046\u4f8b\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

        x-volumes: \u3053\u308c\u306fLagoon\u306b\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3082\u306e\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f/app\u306b\u5b58\u5728\u3057\u307e\u3059\u304c\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u3053\u308c\u3092\u8ffd\u52a0\u307e\u305f\u306f\u5909\u66f4\u3067\u304d\u307e\u3059\u3002

        x-environment:

        • \u3053\u3053\u3067\u30ed\u30fc\u30ab\u30eb\u958b\u767aURL\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002Pygmy\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001.docker.amazee.io.\u3067\u7d42\u308f\u3089\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
        • \u672c\u756a\u74b0\u5883\u3068\u5168\u304f\u540c\u3058\u74b0\u5883\u3092\u518d\u73fe\u3057\u305f\u3044\u5834\u5408\u306f\u3001LAGOON_ENVIRONMENT_TYPE: production\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002
        • x-debug\u3092\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001DEBUG_ENABLE: \"true\"\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        x-user: \u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u307b\u3068\u3093\u3069\u3042\u308a\u307e\u305b\u3093\u304c\u3001Linux\u3092\u4f7f\u7528\u3057\u3066\u3044\u30661000\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u5909\u66f4\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#services","title":"services","text":"

        services\u306f\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002docker-compose\u306f\u305d\u308c\u3089\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059\u304c\u3001\u5b9f\u969b\u306b\u306f\u30b3\u30f3\u30c6\u30ca\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u3002\u4eca\u5f8c\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u3053\u308c\u3089\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059\u3002

        \u30b5\u30fc\u30d3\u30b9\u306e \u540d\u524d (\u4e0a\u8a18\u306e\u4f8b\u3067\u306f nginx\u3001php\u3001mariadb) \u306f\u3001\u751f\u6210\u3055\u308c\u308b Kubernetes \u30dd\u30c3\u30c9 (\u3053\u308c\u3082\u5225\u306e\u7528\u8a9e\u3067\u3059\u304c\u3001\u3053\u3053\u3067\u306f\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059) \u306e\u540d\u524d\u3068\u3057\u3066 Lagoon \u306b\u3088\u3063\u3066\u4f7f\u7528\u3055\u308c\u3001\u3055\u3089\u306b\u5b9a\u7fa9\u3055\u308c\u305f lagoon.type \u306b\u57fa\u3065\u3044\u3066\u4f5c\u6210\u3055\u308c\u308b\u8ffd\u52a0\u306e Kubernetes \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3068\u3057\u3066\u3082\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3001\u30eb\u30fc\u30c8\u3001\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#docker-images","title":"Docker \u30a4\u30e1\u30fc\u30b8","text":"

        \u30c7\u30d7\u30ed\u30a4\u6bce\u306b\u30b5\u30fc\u30d3\u30b9\u7528\u306eDockerfile\u3092Lagoon\u304c\u30d3\u30eb\u30c9\u3059\u308b\u3088\u3046\u8a2d\u5b9a\u3057\u305f\u3044\u5834\u5408\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3067\u304d\u307e\u3059:

        build - context : Docker \u306e build \u30b3\u30de\u30f3\u30c9\u306b\u6e21\u3059\u3079\u304d\u30d3\u30eb\u30c9\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306e\u30d1\u30b9\u3002 - dockerfile: \u30d3\u30eb\u30c9\u3059\u308b Dockerfile \u306e\u5834\u6240\u3068\u540d\u524d\u3002

        \u6ce8\u610f

        Lagoon \u306f build: <Dockerfile> \u306e\u77ed\u7e2e\u5f62\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u3089\u305a\u3001\u3053\u306e\u5f62\u5f0f\u306e\u5b9a\u7fa9\u304c\u898b\u3064\u304b\u308b\u3068\u30d3\u30eb\u30c9\u306b\u5931\u6557\u3057\u307e\u3059\u3002

        image - Dockerfile \u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u3001\u65e2\u5b58\u306e Dockerfile \u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001image \u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002

        \u3053\u306e\u4f8b\u3067\u306f\u3001\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002NGINX \u306f nginx.dockerfile \u3092\u30d3\u30eb\u30c9\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3001PHP \u306f php.dockerfile \u3092\u30d3\u30eb\u30c9\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002MariaDB \u306f uselagoon/mariadb-10.11-drupal \u306e\u65e2\u5b58\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002Docker \u30a4\u30e1\u30fc\u30b8\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089 \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/lagoonizing/#types","title":"\u30bf\u30a4\u30d7","text":"

        Lagoon\u306f\u3001\u6b63\u3057\u3044Kubernetes\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u77e5\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        \u3053\u308c\u306f lagoon.type \u30e9\u30d9\u30eb\u3092\u4ecb\u3057\u3066\u884c\u308f\u308c\u307e\u3059\u3002\u9078\u629e\u3067\u304d\u308b\u30bf\u30a4\u30d7\u306f\u591a\u5c90\u306b\u308f\u305f\u308a\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u30bf\u30a4\u30d7\u3068\u8ffd\u52a0\u7684\u306a\u8a2d\u5b9a\u53ef\u80fd\u6027\u3092\u898b\u308b\u305f\u3081\u306b\u3001\u516c\u958b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 Service Types \u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002

        \u4f8b\u3067\u306f\u3001PHP\u3068NGINX\u306e\u30b5\u30fc\u30d3\u30b9\u306f nginx-php-persistent \u3068\u3057\u3066\u30bf\u30a4\u30d7\u306e\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9\u3068\u547c\u3070\u308c\u308b\u3082\u306e\u3067\u3059\u3002

        "},{"location":"ja/lagoonizing/#_5","title":"\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9","text":"

        Kubernetes\u306f\u5358\u72ec\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001\u4e00\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u542b\u3080\u30dd\u30c3\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u901a\u5e38\u3001Lagoon\u306f\u5b9a\u7fa9\u3055\u308c\u305f docker-compose \u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u3001\u4e00\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u542b\u3080\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u4e00\u90e8\u306e\u30b1\u30fc\u30b9\u3067\u306f\u3001\u4e92\u3044\u306b\u4f9d\u5b58\u5ea6\u304c\u9ad8\u3044\u305f\u3081\u3001\u4e8c\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u5185\u306b\u914d\u7f6e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002Drupal\u306e\u3088\u3046\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306ePHP\u30b3\u30fc\u30c9\u3092\u542b\u3080PHP\u3068NGINX\u30b3\u30f3\u30c6\u30ca\u304c\u305d\u306e\u4f8b\u3067\u3059\u3002

        \u3053\u308c\u3089\u306e\u30b1\u30fc\u30b9\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3057\u3066Lagoon\u306b\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4e00\u7dd2\u306b\u914d\u7f6e\u3055\u308c\u308b\u3079\u304d\u304b\u3092\u6307\u793a\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059:

        1. \u4e8c\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u5fc5\u8981\u306alagoon.type\u3092\u6307\u5b9a\u3057\u3066\u3001\u305d\u308c\u305e\u308c\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\uff08\u3053\u306e\u4f8b\u3067\u306f\u3001NGINX\u3068PHP\u306e\u30b5\u30fc\u30d3\u30b9\u306bnginx-php-persistent\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\uff09\u3002
        2. \u4e8c\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u306elagoon.name\u30e9\u30d9\u30eb\u3092\u4e00\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u4e00\u81f4\u3055\u305b\u3066\u30ea\u30f3\u30af\u3057\u307e\u3059\uff08\u4f8b\u3067\u306flagoon.name: nginx\u306b\u3088\u308a\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\uff09\u3002

        \u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u306f nginx \u3068 php \u306e\u30b5\u30fc\u30d3\u30b9\u304c nginx \u3068\u547c\u3070\u308c\u308b\u30dd\u30c3\u30c9\u306b\u7d50\u5408\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3057\u307e\u3059\u3002

        Lagoon\u306f2\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u3046\u3061\u3069\u3061\u3089\u304c\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3067\u3042\u308b\u304b(\u3053\u306e\u5834\u5408\u306f nginx \u3068 php )\u3092\u7406\u89e3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u4e00\u81f4\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u306e\u30b5\u30fc\u30d3\u30b9\u540d\u3092\u691c\u7d22\u3059\u308b\u3053\u3068\u3067\u884c\u3044\u307e\u3059\u3002 nginx-php-persistent \u306f\u3001 docker-compose.yml \u306e\u4e2d\u3067 nginx \u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3068 php \u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u3002

        \u30b5\u30fc\u30d3\u30b9\u540d\u3092\u5909\u66f4\u3057\u305f\u3044\u5834\u5408\u3084\u3001nginx-php-persistent\u30bf\u30a4\u30d7\u306e\u8907\u6570\u306e\u30dd\u30c3\u30c9\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001lagoon.deployment.servicetype\u3068\u3044\u3046\u8ffd\u52a0\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3001\u5b9f\u969b\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002

        \u4ee5\u4e0b\u306b\u3001\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9\u3092\u3088\u308a\u8a73\u7d30\u306b\u8a2d\u5b9a\u3059\u308b\u4f8b\u3092\u793a\u3057\u307e\u3059:

        docker-compose.yml
        nginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # \u3053\u308c\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001Lagoon\u306f\u30b3\u30f3\u30c6\u30ca\u306e\u540d\u524d\u3001\u3053\u306e\u5834\u5408\u306fnginx\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\nlagoon.deployment.servicetype: nginx\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092Lagoon\u306enginx\u30dd\u30c3\u30c9\u306e\u4e00\u90e8\u306b\u3057\u305f\u3044\u3067\u3059\u3002\nlagoon.deployment.servicetype: php\n

        docker-compose.yml\u3067\u3067\u304d\u308b\u3053\u3068\u306f\u3082\u3063\u3068\u3042\u308a\u307e\u3059\u304c\u3001\u30b5\u30fc\u30d3\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u6700\u3082\u91cd\u8981\u306a\u90e8\u5206\u3067\u3059\u3002docker-compose.yml\u306b\u95a2\u3059\u308b\u6211\u3005\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u4ed6\u306b\u4f55\u304c\u3067\u304d\u308b\u304b\u3092\u5b66\u3093\u3067\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/lagoonizing/#lagoonyml","title":".lagoon.yml","text":"

        .lagoon.yml \u30d5\u30a1\u30a4\u30eb\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u306e\u4e2d\u5fc3\u3068\u306a\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3001\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u542b\u3093\u3067\u3044\u307e\u3059:

        • \u30b5\u30a4\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u30eb\u30fc\u30c8\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002
        • \u30d7\u30ec\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002
        • \u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u3002
        • SSL\u8a3c\u660e\u66f8\u3092\u8a2d\u5b9a\u3059\u308b\u3002
        • \u74b0\u5883\u306e\u305f\u3081\u306ecron\u30b8\u30e7\u30d6\u3092\u8ffd\u52a0\u3059\u308b\u3002

        .lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30eb\u30fc\u30c8\u306b\u914d\u7f6e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        \u4ee5\u4e0b\u306f\u3001Drupal\u30b5\u30a4\u30c8\u7528\u306e\u69d8\u3005\u306a\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u793a\u3059.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\u3067\u3059:

        .lagoon.yml
        docker-compose-yaml: docker-compose.yml\nenvironment_variables:\ngit_sha: 'true'\ntasks:\npre-rollout:\n- run:\nname: drush sql-dump\ncommand: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz\nservice: cli\npost-rollout:\n- run:\nname: drush cim\ncommand: drush -y cim\nservice: cli\nshell: bash\n- run:\nname: drush cr\ncommand: drush -y cr\nservice: cli\nroutes:\ninsecure: Redirect\nenvironments:\nmain:\nmonitoring_urls:\n- \"www.example.com\"\n- \"www.example.com/special_page\"\nroutes:\n- nginx:\n- example.com\n- example.net\n- \"www.example.com\":\ntls-acme: 'true'\ninsecure: Redirect\nhsts: max-age=31536000\n- \"example.ch\":\nAnnotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # 1\u6642\u9593\u306b1\u56decron\u3092\u5b9f\u884c\u3057\u307e\u3059\ncommand: drush cron\nservice: cli\nstaging:\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # 1\u6642\u9593\u306b1\u56decron\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\ncommand: drush cron\nservice: cli\n
        "},{"location":"ja/lagoonizing/#_6","title":"\u4e00\u822c\u8a2d\u5b9a","text":""},{"location":"ja/lagoonizing/#docker-compose-yaml","title":"docker-compose-yaml","text":"

        \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30d3\u30eb\u30c9\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u3069\u306edocker-compose YAML\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3079\u304d\u304b\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30b3\u30f3\u30c6\u30ca\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u304b\u3092\u5224\u65ad\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fdocker-compose.yml\u3067\u3059\u304c\u3001\u7279\u5b9a\u306eLagoon docker-compose YAML\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#environment_variablesgit_sha","title":"environment_variables.git_sha","text":"

        \u3053\u306e\u8a2d\u5b9a\u306b\u3088\u308a\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f Git SHA \u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u633f\u5165\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u5024\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001SHA \u304c\u74b0\u5883\u5909\u6570 LAGOON_GIT_SHA \u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#tasks","title":"\u30bf\u30b9\u30af","text":"

        \u30d3\u30eb\u30c9\u30d5\u30ed\u30fc\u306e\u4e2d\u3067\u5b9f\u884c\u3055\u308c\u308b\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u3088\u3063\u3066\u3001\u7570\u306a\u308b\u30bf\u30a4\u30d7\u306e\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\uff1a

        "},{"location":"ja/lagoonizing/#pre-rollout-tasks-pre_rolloutirun","title":"\u30d7\u30ec\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af - pre_rollout.[i].run","text":"

        pre_rollout \u30bf\u30b9\u30af\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u30bf\u30b9\u30af\u306f\u3001\u65b0\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f \u5f8c\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u4f55\u3089\u304b\u306e\u5f62\u3067\u5909\u66f4\u3055\u308c\u308b \u524d \u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306b\u3088\u308a\u3001\u305f\u3068\u3048\u3070\u3001\u4e0a\u8a18\u306e\u4f8b\u306e\u3088\u3046\u306b\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306e\u5b9f\u884c\u524d\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 \u30c0\u30f3\u30d7\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3067\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306b\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u3057\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#post-rollout-tasks-post_rolloutirun","title":"\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af - post_rollout.[i].run","text":"

        \u3053\u3053\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u6761\u4ef6\u304c\u6e80\u305f\u3055\u308c\u305f\u5f8c\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u306e\u3042\u308b\u30bf\u30b9\u30af\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\uff1a

        • \u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f
        • \u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u65b0\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u3067\u66f4\u65b0\u3055\u308c\u305f
        • \u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u6e96\u5099\u72b6\u614b\u30c1\u30a7\u30c3\u30af\u306b\u5408\u683c\u3057\u305f

        post_rollout \u30bf\u30b9\u30af\u306e\u4e00\u822c\u7684\u306a\u7528\u9014\u306b\u306f\u3001drush updb\u3001drush cim \u306e\u5b9f\u884c\u3001\u307e\u305f\u306f\u3055\u307e\u3056\u307e\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001drush cim \u3068 drush cr \u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

        name

        • name \u306f\u3001\u30ed\u30b0\u3067\u5404\u30bf\u30b9\u30af\u3092\u8b58\u5225\u3057\u3084\u3059\u304f\u3059\u308b\u305f\u3081\u306e\u4efb\u610f\u306e\u30e9\u30d9\u30eb\u3067\u3059\u3002

        command

        • \u3053\u3053\u3067\u306f\u3001\u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3001\u5404\u30b3\u30f3\u30c6\u30ca\u306e WORKDIR \u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002Lagoon \u30a4\u30e1\u30fc\u30b8\u306e\u5834\u5408\u3001\u3053\u308c\u306f /app \u3067\u3059\u3002\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u7279\u5b9a\u306e\u5834\u6240\u306b cd \u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u70b9\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        service

        • \u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u3002\u79c1\u305f\u3061\u306edrupal-example\u306b\u5f93\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u308c\u306fCLI\u30b3\u30f3\u30c6\u30ca\u306b\u306a\u308a\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u305d\u308c\u306f\u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u306e\u30b3\u30fc\u30c9\u3001\u30d5\u30a1\u30a4\u30eb\u3001\u305d\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u63a5\u7d9a\u3092\u5168\u3066\u6301\u3063\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002\u901a\u5e38\u3001\u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

        shell

        \u30bf\u30b9\u30af\u306e\u5b9f\u884c\u306b\u4f7f\u7528\u3059\u308b\u30b7\u30a7\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f sh \u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u304c\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u4ed6\u306e\u30b7\u30a7\u30eb(bash\u306a\u3069)\u304c\u3042\u308b\u5834\u5408\u3001\u3053\u3053\u3067\u305d\u308c\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u5185\u3067\u3044\u304f\u3064\u304b\u306e\u5c0f\u3055\u306aif/else bash\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002(\u4e0a\u8a18\u306e\u4f8b\u3067\u8907\u6570\u884c\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u66f8\u304f\u65b9\u6cd5\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)\u3002

        "},{"location":"ja/lagoonizing/#routes","title":"\u30eb\u30fc\u30c8","text":""},{"location":"ja/lagoonizing/#routesautogenerateenabled","title":"routes.autogenerate.enabled","text":"

        \u3053\u308c\u306b\u3088\u308a\u3001\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u3092\u5b8c\u5168\u306b\u7121\u52b9\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u74b0\u5883\u3054\u3068\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092\u7121\u52b9\u306b\u3059\u308b\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u8a73\u7d30\u306f\u4e0b\u8a18\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/lagoonizing/#routesautogenerateinsecure","title":"routes.autogenerate.insecure","text":"

        \u3053\u308c\u306b\u3088\u308a\u3001\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u306e\u52d5\u4f5c\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u74b0\u5883\u3054\u3068\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff08\u8a73\u7d30\u306f\u5f8c\u8ff0\uff09\u3002\u3053\u308c\u306f\u4e0a\u8a18\u306e\u4f8b\u3067\u4f7f\u7528\u3057\u3066\u3044\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3001insecure: Redirect\u3068\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

        \u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059:

        Allow

        • HTTP\u3068HTTPS\u306e\u4e21\u65b9\u306e\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059(\u3053\u308c\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3059)\u3002

        Redirect

        • \u3059\u3079\u3066\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092HTTPS\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002

        None

        • HTTP\u306e\u30eb\u30fc\u30c8\u306f\u4f5c\u6210\u3055\u308c\u305a\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u3042\u308a\u307e\u305b\u3093\u3002
        "},{"location":"ja/lagoonizing/#_7","title":"\u74b0\u5883","text":"

        \u74b0\u5883\u540d\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u307e\u305f\u306f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u4e00\u81f4\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5404\u74b0\u5883\u306f\u7570\u306a\u308b\u8a2d\u5b9a\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u4f8b\u3067\u306f\u3001main\u3068staging\u306e\u74b0\u5883\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#_8","title":"\u7279\u5b9a\u306e\u30d1\u30b9\u306e\u76e3\u8996","text":"

        UptimeRobot\u304c\u30af\u30e9\u30b9\u30bf\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001Lagoon\u306f\u5404\u30eb\u30fc\u30c8/\u30a4\u30f3\u30b0\u30ec\u30b9\u306bstakater/IngressControllerMonitor\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u6ce8\u5165\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u52d5\u4f5c\u306f\u30eb\u30fc\u30c8\u306e\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u3092\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u7279\u5b9a\u306e\u30eb\u30fc\u30c8\u3092\u76e3\u8996\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u30eb\u30fc\u30c8\u306e\u4ed5\u69d8\u306bmonitoring-path\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3053\u308c\u3092\u4e0a\u66f8\u304d\u3067\u304d\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u4f7f\u7528\u6cd5\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d0\u30a4\u30d1\u30b9\u3059\u308b\u76e3\u8996\u7528\u306e\u30d1\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30b5\u30a4\u30c8\u306e\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u76e3\u8996\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002

        .lagoon.yml\u306e\u4f8b
             - \"www.example.com\":\nmonitoring-path: \"/bypass-cache\"\n
        "},{"location":"ja/lagoonizing/#environmentsnameroutes","title":"environments.[name].routes","text":"

        \u30eb\u30fc\u30c8\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u74b0\u5883\u304c\u5fdc\u7b54\u3059\u308b\u30c9\u30e1\u30a4\u30f3\u540d\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u901a\u5e38\u3001\u672c\u756a\u74b0\u5883\u7528\u306e\u30eb\u30fc\u30c8\u306e\u307f\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u74b0\u5883\u306f\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u304c\u3001\u672c\u756a\u4ee5\u5916\u306e\u74b0\u5883\u304c\u72ec\u81ea\u306e\u30c9\u30e1\u30a4\u30f3\u540d\u3092\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u3053\u3067\u6307\u5b9a\u3057\u3001DNS\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3067\u305d\u306e\u30c9\u30e1\u30a4\u30f3\u3092\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u540d\u3078\u306eCNAME\u3068\u3057\u3066\u8ffd\u52a0\u3067\u304d\u307e\u3059\uff08\u3053\u308c\u3089\u306e\u30eb\u30fc\u30c8\u306f\u30c7\u30d7\u30ed\u30a4\u30e1\u30c3\u30bb\u30fc\u30b8\u3067\u516c\u958b\u3055\u308c\u307e\u3059\uff09\u3002

        \u74b0\u5883\u8a2d\u5b9a\u306e\u5f8c\u306b\u8a18\u8ff0\u3055\u308c\u308b\u6700\u521d\u306e\u8981\u7d20\u306f\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u4f8b\u3067\u306fNGINX\u304c\u30bf\u30fc\u30b2\u30c3\u30c8\u30b5\u30fc\u30d3\u30b9\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u53d7\u4fe1\u3057\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u8ee2\u9001\u3059\u308b\u304b\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

        \u6700\u3082\u30b7\u30f3\u30d7\u30eb\u306a\u30eb\u30fc\u30c8\u306f\u3001\u4e0a\u8a18\u306e\u30b5\u30f3\u30d7\u30eb.lagoon.yml\u306b\u3042\u308bexample.com\u306e\u4f8b\u3067\u3059\u3002\u8ffd\u52a0\u306e\u8a2d\u5b9a\u304c\u306a\u3044\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30eb\u30fc\u30c8\u306bLet's Encrypt\u8a3c\u660e\u66f8\u304c\u5fc5\u8981\u3067\u3001HTTPS\u304b\u3089HTTP\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u304c\u4e0d\u8981\u3067\u3042\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#_9","title":"\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3","text":"

        \u60c5\u5831

        \u30eb\u30fc\u30c8/\u30a4\u30f3\u30b0\u30ec\u30b9\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u3001nginx-ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u30af\u30e9\u30b9\u30bf\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u307f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        \u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u3001nginx-ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308bYAML\u30de\u30c3\u30d7\u5f62\u5f0f\u3067\u8a18\u8ff0\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u7c21\u5358\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306b\u4fbf\u5229\u3067\u3059:

        \u4f8b\u3048\u3070\u3001example.ch\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092https://www.example.ch\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u3001\u30d5\u30a9\u30eb\u30c0\u3084\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u7dad\u6301\u3057\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059:

        (example.com/folder?query -> https://www.example.ch/folder?query)

        .lagoon.yml \u306e\u4f8b
                - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\n

        \u3082\u3061\u308d\u3093\u3001Lagoon\u3067\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u4ed6\u306eURL\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u53ef\u80fd\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001example.de\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092https://www.google.com\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u5834\u5408:

        .lagoon.yml \u306e\u4f8b
                - \"example.de\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com\n
        "},{"location":"ja/lagoonizing/#ssl-tls-acme","title":"SSL\u8a2d\u5b9a - tls-acme","text":"

        tls-acme : \u2018true\u2019

        • Lagoon\u306b\u305d\u306e\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066Let's Encrypt\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\u3053\u308c\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3059\u3002
        • Let's Encrypt\u304c\u4e0d\u8981\u306a\u5834\u5408\u3001\u3053\u308c\u3092 tls-acme: \u2018false\u2019 \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002

        insecure

        • Allow\uff1aHTTP\u3068HTTPS\u4e21\u65b9\u306e\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\uff09\u3002
        • Redirect\uff1aHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092HTTPS\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002
        • None\uff1aHTTP\u30eb\u30fc\u30c8\u306f\u4f5c\u6210\u3055\u308c\u305a\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u884c\u308f\u308c\u307e\u305b\u3093\u3002

        None

        • HTTP\u306e\u30eb\u30fc\u30c8\u306f\u4f5c\u6210\u3055\u308c\u305a\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u884c\u308f\u308c\u307e\u305b\u3093\u3002

        Hsts

        • max-age=31536000;includeSubDomains;preload\u306e\u3088\u3046\u306a\u5024\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
        • \u30b9\u30da\u30fc\u30b9\u3084\u4ed6\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
        • max-age\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u307f\u304c\u5fc5\u9808\u3067\u3059\u3002\u3053\u308c\u306fHSTS\u30dd\u30ea\u30b7\u30fc\u306e\u6709\u52b9\u671f\u9593\u3092\u79d2\u5358\u4f4d\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002

        Info

        \u8a3c\u660e\u66f8\u8a8d\u8a3c\u5c40(CA)\u306b\u3088\u3063\u3066\u7f72\u540d\u3055\u308c\u305f SSL \u8a3c\u660e\u66f8\u304b\u3089 Let's Encrypt \u8a3c\u660e\u66f8\u306b\u5207\u308a\u66ff\u3048\u308b\u4e88\u5b9a\u304c\u3042\u308b\u5834\u5408\u306f\u3001Lagoon \u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u79fb\u884c\u3092\u76e3\u7763\u3057\u3066\u3082\u3089\u3046\u306e\u304c\u6700\u5584\u3067\u3059\u3002

        "},{"location":"ja/lagoonizing/#environmentsnametypes","title":"environments.[name].types","text":"

        Lagoon \u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u306e lagoon.type \u30e9\u30d9\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u3069\u306e\u30bf\u30a4\u30d7\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u304b\u3092\u5224\u65ad\u3057\u307e\u3059(docker-compose.yml \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u7d30\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

        \u7279\u5b9a\u306e\u74b0\u5883\u3067\u306e\u307f\u30bf\u30a4\u30d7\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#service-name-service-type","title":"`service-name: service-type","text":"
        • service-name\u306fdocker-compose.yml\u304b\u3089\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059\u3002
        • service-type \u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u4f7f\u7528\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002

        \u4f8b\u3048\u3070\u3001main\u3068\u3044\u3046\u540d\u524d\u306e\u672c\u756a\u74b0\u5883\u7528\u306bMariaDB-Galera\u306e\u9ad8\u53ef\u7528\u6027\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u305f\u3044\u5834\u5408:

        .lagoon.yml \u4f8b
        environments:\nmain:\ntypes:\nmariadb: mariadb-galera\n
        "},{"location":"ja/lagoonizing/#environmentsnametemplates","title":"environments.[name].templates","text":"

        Lagoon\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306elagoon.template\u30e9\u30d9\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u30b5\u30fc\u30d3\u30b9\u306b\u30ab\u30b9\u30bf\u30e0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

        \u7279\u5b9a\u306e\u74b0\u5883\u3067\u306e\u307f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u5834\u5408:

        "},{"location":"ja/lagoonizing/#service-name-template-file","title":"service-name: template-file","text":"
        • service-name\u306f\u3001docker-compose.yml\u304b\u3089\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059\u3002
        • template-file\u306f\u3001\u3053\u306e\u74b0\u5883\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u4f7f\u7528\u3059\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30d1\u30b9\u3068\u540d\u524d\u3067\u3059\u3002
        .lagoon.yml \u4f8b
        environments:\nmain:\ntemplates:\nmariadb: mariadb.main.deployment.yml\n
        "},{"location":"ja/lagoonizing/#environmentsnamerollouts","title":"environments.[name].rollouts","text":"

        Lagoon\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306elagoon.rollout\u30e9\u30d9\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u30b5\u30fc\u30d3\u30b9\u306b\u30ab\u30b9\u30bf\u30e0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

        \u3059\u3079\u3066\u306e\u74b0\u5883\u306b\u5bfe\u3057\u3066\u3067\u306f\u306a\u304f\u3001\u3072\u3068\u3064\u306e\u74b0\u5883\u306b\u5bfe\u3057\u3066\u3060\u3051\u30bf\u30a4\u30d7\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u5834\u5408\u3082\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#service-name-rollout-type","title":"service-name: rollout-type","text":"
        • service-name\u306f\u4e0a\u66f8\u304d\u3057\u305f\u3044docker-compose.yml\u306e\u30b5\u30fc\u30d3\u30b9\u540d\u3067\u3059\u3002
        • rollout-type\u306f\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002\u53ef\u80fd\u306a\u5024\u306b\u3064\u3044\u3066\u306fdocker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
        .lagoon.yml \u4f8b
        environments:\nmain:\nrollouts:\nmariadb: statefulset\n
        "},{"location":"ja/lagoonizing/#cron-environmentsnamecronjobs","title":"Cron\u30b8\u30e7\u30d6 - environments.[name].cronjobs","text":"

        \u901a\u5e38\u3001\u5168\u3066\u306e\u74b0\u5883\u3067\u540c\u3058Cron\u30b8\u30e7\u30d6\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u671b\u307e\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001\u5404\u74b0\u5883\u3067\u5b9f\u884c\u3057\u305f\u3044\u30b8\u30e7\u30d6\u3092\u660e\u793a\u7684\u306b\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3068\u3057\u3066\u30011\u6642\u9593\u306b1\u56de\u5b9f\u884c\u3059\u308bdrush cron\u30b8\u30e7\u30d6\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

        name

        • Cron\u30b8\u30e7\u30d6\u306e\u76ee\u7684\u3092\u8b58\u5225\u3059\u308b\u305f\u3081\u306e\u308f\u304b\u308a\u3084\u3059\u3044\u540d\u524d\u3002

        schedule

        • Cron\u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002\u6a19\u6e96\u7684\u306acron\u8a18\u6cd5\u306b\u5f93\u3044\u307e\u3059\u3002\u69cb\u6587\u304c\u4e0d\u660e\u306a\u5834\u5408\u306f\u3001Crontab Generator\u304c\u5f79\u7acb\u3061\u307e\u3059\u3002
        • \u5206M\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u6bce\u6642\u9593\u30e9\u30f3\u30c0\u30e0\u306a\u5206\uff08\u6bce\u6642\u540c\u3058\u5206\uff09\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002M/15\u3068\u3059\u308b\u306815\u5206\u3054\u3068\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059\u304c\u3001\u6642\u9593\u304b\u3089\u306e\u30aa\u30d5\u30bb\u30c3\u30c8\u306f\u30e9\u30f3\u30c0\u30e0\u3067\u3059\uff08\u4f8b\uff1a6, 21, 36, 51\uff09\u3002
        • \u6642H\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u6bce\u65e5\u30e9\u30f3\u30c0\u30e0\u306a\u6642\u9593\uff08\u6bce\u65e5\u540c\u3058\u6642\u9593\uff09\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002H(2-4)\u3068\u3059\u308b\u3068\u30012\u6642\u304b\u30894\u6642\u306e\u9593\u306b1\u56de\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002

        command

        • \u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3002\u30bf\u30b9\u30af\u3068\u540c\u69d8\u306b\u3001\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306f\u30b5\u30fc\u30d3\u30b9\u306e WORKDIR \u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002Lagoon\u306e\u30a4\u30e1\u30fc\u30b8\u3067\u306f\u3001\u3053\u308c\u306f /app \u3067\u3059\u3002

        service

        • \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b5\u30fc\u30d3\u30b9\u3002\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u3053\u308c\u306fCLI\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002

        .lagoon.yml \u3067\u3067\u304d\u308b\u3053\u3068\u306f\u307e\u3060\u305f\u304f\u3055\u3093\u3042\u308a\u307e\u3059\u3002\u8a73\u7d30\u306f .lagoon.yml \u306b\u3064\u3044\u3066\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/lagoonizing/#drupal","title":"Drupal\u7279\u6709\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7","text":"

        Drupal\u30b5\u30a4\u30c8\u3092Lagoon\u306b\u79fb\u884c\u3059\u308b\u5834\u5408\u3001\u5168\u3066\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u3044\u304f\u3064\u304bDrupal\u7279\u6709\u306e\u30bf\u30b9\u30af\u3092\u5b8c\u4e86\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#_10","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

        \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u66f4\u65b0\u3067\u3059\u3002Lagoon\u306f\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3059\u308b\u74b0\u5883\u56fa\u6709\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u6a5f\u5bc6\u60c5\u5831\u304c\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u308b\u3053\u3068\u306f\u306a\u304f\u3001\u3059\u3079\u3066\u5b89\u5168\u306b\u30b3\u30df\u30c3\u30c8\u3067\u304d\u307e\u3059\u3002\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u69d8\u3005\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b\u304c\u3042\u308a\u307e\u3059\u3002\u65b0\u898f\u306b\u59cb\u3081\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3089\u306e\u4f7f\u7528\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u305d\u3046\u3067\u306a\u3044\u5834\u5408\u306f\u3001\u985e\u4f3c\u306e\u3082\u306e\u3092\u9078\u3093\u3067\u95a2\u9023\u3059\u308b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u74b0\u5883\u5909\u6570\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001\u74b0\u5883\u5909\u6570\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

        \u30ea\u30dd\u30b8\u30c8\u30ea\u304b\u3089\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3057\u3001\u30b5\u30a4\u30c8\u3067\u4f7f\u7528\u3057\u3066\u3044\u306a\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u3092\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u4f8b\uff1a\u3059\u3079\u3066\u306e\u30b5\u30a4\u30c8\u304cSolr\u3084Redis\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff09\u3002\u7279\u5b9a\u306e\u74b0\u5883\u30bf\u30a4\u30d7\uff08\u958b\u767a\u74b0\u5883\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u7121\u52b9\u5316\u306a\u3069\uff09\u306e\u8a2d\u5b9a\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u8ffd\u52a0\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff08\u4f8b\u793a\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\uff09\u3002\u30d5\u30a1\u30a4\u30eb\u306f\u4ee5\u4e0b\u306e\u9806\u5e8f\u3067\u8aad\u307f\u8fbc\u307e\u308c\u307e\u3059\uff1a

        settings.php
         all.settings.php\n all.services.yml\n production.settings.php\n production.services.yml\n development.settings.php\n development.services.yml\n settings.local.php\n services.local.yml\n
        "},{"location":"ja/lagoonizing/#gitignore","title":".gitignore\u306e\u8a2d\u5b9a\u3092\u66f4\u65b0\u3059\u308b","text":"

        .gitignore\u304c\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30df\u30c3\u30c8\u3092\u8a31\u53ef\u3059\u308b\u3088\u3046\u306b\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002Drupal\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067sites/*/settings*.php\u3068sites/*/services*.yml\u3092.gitignore\u306b\u542b\u3081\u3066\u3044\u307e\u3059\u3002Lagoon\u3067\u306f\u6a5f\u5bc6\u60c5\u5831\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u306a\u3044\u306e\u3067\u3001\u3053\u308c\u3089\u3092\u524a\u9664\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#drupalwebroot","title":"Drupal\u306eWebroot\u306b\u3064\u3044\u3066\u306e\u6ce8\u610f\u70b9","text":"

        \u6b8b\u5ff5\u306a\u304c\u3089\u3001Drupal\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306f\u30a6\u30a7\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u540d\u3092\u6a19\u6e96\u5316\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3088\u3063\u3066\u306fDrupal\u3092/web\u5185\u306b\u3001\u4ed6\u306f/docroot\u3084\u4ed6\u306e\u5834\u6240\u306b\u914d\u7f6e\u3057\u3066\u3044\u307e\u3059\u3002Lagoon Drupal\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u3001Drupal\u304c/web\u5185\u306b\u3042\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u3082\u3057\u3042\u306a\u305f\u306eDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u7570\u306a\u308b\u5834\u5408\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u5b9c\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/lagoonizing/#_11","title":"\u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9\u3059\u308b","text":"

        \u307e\u305a\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

        build your images
        docker-compose build\n

        \u3053\u308c\u306b\u306f\u6570\u5206\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u3001\u9577\u3044\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u3063\u3066\u304d\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u3082\u306e\u306b\u306a\u308b\u306f\u305a\u3067\u3059\u3002

        \u3053\u308c\u306b\u3088\u308a\u3001docker-compose\u306fdocker-compose.yml\u5185\u3067build:\u5b9a\u7fa9\u304c\u3042\u308b\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3057\u307e\u3059\u3002\u901a\u5e38\u3001Drupal\u306e\u5834\u5408\u3001\u3053\u308c\u306b\u306fcli\u3001nginx\u3001php\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u7279\u5b9a\u306e\u30d3\u30eb\u30c9\u30b3\u30de\u30f3\u30c9\uff08composer install\u306a\u3069\uff09\u3092\u5b9f\u884c\u3057\u305f\u308a\u3001\u7279\u5b9a\u306e\u74b0\u5883\u5909\u6570\uff08WEBROOT\u306a\u3069\uff09\u3092\u30a4\u30e1\u30fc\u30b8\u306b\u6ce8\u5165\u3057\u305f\u308a\u3059\u308b\u305f\u3081\u306b\u884c\u3044\u307e\u3059\u3002

        \u901a\u5e38\u3001 Drupal\u306e\u30b3\u30fc\u30c9\u3092\u7de8\u96c6\u3059\u308b\u305f\u3073\u306b\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093(\u30b3\u30fc\u30c9\u306f\u30db\u30b9\u30c8\u304b\u3089\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u307e\u3059)\u3001\u3057\u304b\u3057\u518d\u30d3\u30eb\u30c9\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u3055\u3089\u306b\u3001Lagoon\u306f\u30c7\u30d7\u30ed\u30a4\u4e2d\u306b\u5168\u304f\u540c\u3058Docker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u306e\u3067\u3001docker-compose build \u3092\u518d\u5ea6\u5b9f\u884c\u3059\u308b\u3060\u3051\u3067\u3001\u30d3\u30eb\u30c9\u304c\u30c7\u30d7\u30ed\u30a4\u4e2d\u306b\u3082\u6a5f\u80fd\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#_12","title":"\u30b3\u30f3\u30c6\u30ca\u306e\u8d77\u52d5","text":"

        \u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u305f\u306e\u3067\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3067\u304d\u307e\u3059:

        start the containers
        docker-compose up -d\n

        \u6b21\u306e\u3088\u3046\u306a\u5fdc\u7b54\u304c\u8868\u793a\u3055\u308c\u307e\u3059:

        containers started
        \u279c  lagoon-test git:(main) docker compose up -d\nRecreating lagoon-test_cli_1   ... done\nStarting lagoon-test_redis_1   ... done\nStarting lagoon-test_solr_1    ... done\nStarting lagoon-test_mariadb_1 ... done\nRecreating lagoon-test_php_1   ... done\nRecreating lagoon-test_nginx_1 ... done\nRecreating lagoon-test_varnish_1 ... done\n

        \u3053\u308c\u306b\u3088\u308a\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002\u30b3\u30de\u30f3\u30c9\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u3001docker compose ps\u3067\u78ba\u8a8d\u3057\u3066\u3001\u3059\u3079\u3066\u5b8c\u5168\u306b\u8d77\u52d5\u3057\u3001\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u305d\u306e\u5fdc\u7b54\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308b\u306f\u305a\u3067\u3059:

        view running containers
        \u279c  lagoon-test git:(main) docker compose ps\nName                       Command               State            Ports\n----------------------------------------------------------------------------------------\nlagoon-test_cli_1       /sbin/tini -- /lagoon/entr ...   Up      9000/tcp\nlagoon-test_mariadb_1   /sbin/tini -- /lagoon/entr ...   Up      0.0.0.0:32768->3306/tcp\nlagoon-test_nginx_1     /sbin/tini -- /lagoon/entr ...   Up      8080/tcp\nlagoon-test_php_1       /sbin/tini -- /lagoon/entr ...   Up      9000/tcp\nlagoon-test_redis_1     /sbin/tini -- /lagoon/entr ...   Up      6379/tcp\nlagoon-test_solr_1      /sbin/tini -- /lagoon/entr ...   Up      0.0.0.0:32769->8983/tcp\n

        \u554f\u984c\u304c\u3042\u308b\u5834\u5408\u306f\u3001 docker-compose logs -f [servicename]\u3092\u4f7f\u7528\u3057\u3066\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#composer-installcomposer","title":"composer install\u306e\u518d\u5b9f\u884c\uff08Composer\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u307f\uff09","text":"

        Drupal 8\u4ee5\u964d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001Composer\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002\u5168\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002cli\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u3001composer install\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a

        re-run composer install
        docker-compose exec cli bash\n[drupal-example]cli-drupal:/app$ composer install\n

        \u3053\u308c\u306f\u5947\u5999\u306b\u805e\u3053\u3048\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u30d3\u30eb\u30c9\u6bb5\u968e\u3067\u3059\u3067\u306bcomposer install\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002\u518d\u5ea6\u5b9f\u884c\u3059\u308b\u7406\u7531\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

        • \u30db\u30b9\u30c8\u4e0a\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3001\u3059\u3050\u306b\u30b3\u30f3\u30c6\u30ca\u3067\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306edocker-composer.yml\u306f\u30d5\u30a9\u30eb\u30c0\u5168\u4f53\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059\uff08\u3053\u308c\u306fvolumes\u30bb\u30af\u30b7\u30e7\u30f3\u306e.:/app:delegated\u3067\u884c\u308f\u308c\u307e\u3059\uff09\u3002\u3053\u308c\u306f\u3001Docker\u30d3\u30eb\u30c9\u4e2d\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u5168\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u30db\u30b9\u30c8\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u4e0a\u66f8\u304d\u3055\u308c\u308b\u3053\u3068\u3082\u610f\u5473\u3057\u307e\u3059\u3002
        • \u30ed\u30fc\u30ab\u30eb\u3067\u306f\u3001\u304a\u305d\u3089\u304fcomposer.json\u306erequire-dev\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u3044\u3067\u3057\u3087\u3046\u304c\u3001\u672c\u756a\u30c7\u30d7\u30ed\u30a4\u3067\u306f\u305d\u308c\u3089\u306f\u4e0d\u8981\u306a\u30b9\u30da\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u3001Dockerfile\u3067\u306fcomposer install --no-dev\u3092\u5b9f\u884c\u3057\u3001\u624b\u52d5\u3067composer install\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

        \u5168\u3066\u304c\u4e0a\u624b\u304f\u3044\u3063\u305f\u5834\u5408\u3001docker-compose.yml\u3067\u5b9a\u7fa9\u3055\u308c\u305fLAGOON_ROUTE\uff08\u4f8b\uff1ahttp://drupal.docker.amazee.io\uff09\u3092\u958b\u304f\u3068\u3001Drupal\u306e\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044 - \u4eca\u306e\u3068\u3053\u308d\u3053\u308c\u3067\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u6700\u3082\u91cd\u8981\u306a\u306e\u306f\u3001Drupal\u30b5\u30a4\u30c8\u3092\u8aad\u307f\u8fbc\u3082\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u3002

        500\u307e\u305f\u306f\u540c\u69d8\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001Composer\u3067\u5168\u3066\u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/lagoonizing/#drupal_1","title":"\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u78ba\u8a8d\u3068Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

        \u6700\u5f8c\u306bDrupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u6642\u304c\u6765\u307e\u3057\u305f\u304c\u3001\u305d\u306e\u524d\u306b\u5168\u3066\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002\u305d\u306e\u305f\u3081\u306bDrush\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002drush status\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a

        run drush status
        docker-compose exec cli bash\n[drupal-example]cli-drupal:/app$ drush status\n

        \u4e0a\u8a18\u306e\u30b3\u30de\u30f3\u30c9\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7d50\u679c\u3092\u8fd4\u3059\u306f\u305a\u3067\u3059:

        drush status results
        [drupal-example]cli-drupal:/app$ drush status\n[notice] Missing database table: key_value\nDrupal version       :  8.6.1\nSite URI             :  http://drupal.docker.amazee.io\nDatabase driver      :  mysql\nDatabase hostname    :  mariadb\nDatabase port        :  3306\nDatabase username    :  drupal\nDatabase name        :  drupal\nPHP binary           :  /usr/local/bin/php\nPHP config           :  /usr/local/etc/php/php.ini\nPHP OS               :  Linux\nDrush script         :  /app/vendor/drush/drush/drush\nDrush version        :  9.4.0\nDrush temp           :  /tmp\nDrush configs        :  /home/.drush/drush.yml\n                        /app/vendor/drush/drush/drush.yml\nDrupal root          :  /app/web\nSite path            :  sites/default\n

        \u60c5\u5831

        \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u9032\u3080\u524d\u306b\u3001\u516c\u958b\u9375\u306b\u3064\u3044\u3066pygmy\u306b\u4f1d\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002Permission denied (publickey)\u3068\u3044\u3046\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u305f\u5834\u5408\u306f\u3001\u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:pygmy - ssh\u30ad\u30fc\u306e\u8ffd\u52a0\u3002

        \u3053\u308c\u3067Drupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u6642\u304c\u6765\u307e\u3057\u305f\uff08\u4ee3\u308f\u308a\u306b\u65e2\u5b58\u306eSQL\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u305f\u3060\u3057\u3001\u6700\u521d\u306f\u30af\u30ea\u30fc\u30f3\u306aDrupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3001\u5168\u3066\u304c\u52d5\u4f5c\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff09\u3002

        drush si\u306e\u5b9f\u884c

        [drupal-example]cli-drupal:/app$ drush site-install\n
        \u3053\u308c\u306b\u3088\u308a\u3001\u6b21\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

        drush si\u306e\u7d50\u679c
        [drupal-example]cli-drupal:/app$ drush site-install\nYou are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y\nStarting Drupal installation. This takes a while. Consider using the --notify global option.\nInstallation complete.  User name: admin  User password: arbZJekcqh\nCongratulations, you installed Drupal!\n

        \u3053\u308c\u3067LAGOON_ROUTE\u3067\u5b9a\u7fa9\u3055\u308c\u305fURL\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001\u65b0\u3057\u304f\u30af\u30ea\u30fc\u30f3\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fDrupal\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059 - \u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\uff01

        "},{"location":"ja/lagoonizing/#_13","title":"\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u306e\u30a4\u30f3\u30dd\u30fc\u30c8","text":"

        \u65e2\u5b58\u306eDrupal\u30b5\u30a4\u30c8\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30ed\u30fc\u30ab\u30eb\u30b5\u30a4\u30c8\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u3067\u3057\u3087\u3046\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u306f\u591a\u6570\u3042\u308a\u307e\u3059\u304c\u3001\u73fe\u5728\u306e\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30ed\u30d0\u30a4\u30c0\u306bDrush\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\uff1a

        drush sql-dump
        [your-existing-site]$ drush sql-dump --result-file=dump.sql\nDatabase dump saved to dump.sql                         [success]\n

        \u3053\u308c\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5168\u4f53\u3092\u542b\u3080dump.sql\u30d5\u30a1\u30a4\u30eb\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30fc\u30ab\u30eb\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u3001CLI\u306b\u63a5\u7d9a\u3059\u308b\u3068\u3001\u305d\u3053\u306b\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\uff1a

        dump file

        [drupal-example] docker compose exec cli bash\n[drupal-example]cli-drupal:/app$ ls -l dump.sql\n-rw-r--r--    1 root     root          5281 Dec 19 12:46 dump.sql\n
        \u3053\u308c\u3067\u3001\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u524a\u9664\u3057\u305f\u5f8c\u306b\u30c0\u30f3\u30d7\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u304d\u307e\u3059\uff08\u307e\u3060cli\u306b\u63a5\u7d9a\u3057\u305f\u307e\u307e\u3067\u3059\uff09\uff1a

        dump existing db and import dump file
        [drupal-example]cli-drupal:/app$ drush sql-drop\nDo you really want to drop all tables in the database drupal? (y/n): y\n[drupal-example]cli-drupal:/app$ drush sql-cli < dump.sql\n
        "},{"location":"ja/lagoonizing/#drupal_2","title":"Drupal\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea","text":"

        Drupal\u30b5\u30a4\u30c8\u306b\u306f\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3082\u542b\u307e\u308c\u307e\u3059\u3002\u65e2\u5b58\u306e\u30b5\u30a4\u30c8\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u884c\u3059\u308b\u306b\u306f\u3001\u6b63\u3057\u3044\u30d5\u30a9\u30eb\u30c0\uff08\u304a\u305d\u3089\u304fweb/sites/default/files\u3001sites/default/files\u3001\u307e\u305f\u306f\u985e\u4f3c\u306e\u3082\u306e\uff09\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u30a6\u30a7\u30d6\u30eb\u30fc\u30c8\u3068\u3057\u3066\u8a2d\u5b9a\u3057\u305f\u3082\u306e\u3092\u899a\u3048\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044 - \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/lagoonizing/#_14","title":"\u30c7\u30d7\u30ed\u30a4","text":"

        \u3053\u306e\u30ac\u30a4\u30c9\u306e\u5168\u3066\u306e\u624b\u9806\u3092\u5b8c\u4e86\u3057\u3001Lagoon\u7ba1\u7406\u8005\u304c\u5168\u3066\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308c\u3070\u3001\u30b5\u30a4\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\uff01

        Drupal\u30b5\u30a4\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30c7\u30d7\u30ed\u30a4\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        \u305d\u308c\u4ee5\u5916\u306e\u5168\u3066\u306e\u30c7\u30d7\u30ed\u30a4\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u306e\u30c7\u30d7\u30ed\u30a4\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/logging/kibana-examples/","title":"Kibana\u306e\u4f8b","text":"

        Kibana\u306e\u5165\u9580\u30d3\u30c7\u30aa\u3092\u898b\u3066\u3001\u30ed\u30b0\u3092\u6271\u3046\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\u304b\uff1f\u79c1\u305f\u3061\u304c\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\uff01\u3053\u306e\u30da\u30fc\u30b8\u3067\u306f\u3001\u4f7f\u7528\u3067\u304d\u308bKibana\u30af\u30a8\u30ea\u306e\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u308c\u306fKibana 101\u306e\u30af\u30e9\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001Kibana\u3067\u4f55\u304c\u3067\u304d\u308b\u306e\u304b\u3092\u7406\u89e3\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002

        \u59cb\u3081\u308b\u6e96\u5099\u306f\u3067\u304d\u307e\u3057\u305f\u304b\uff1f\u3000\u3067\u306f\u59cb\u3081\u307e\u3057\u3087\u3046\uff01

        \u6ce8\u610f:

        \u958b\u59cb\u3059\u308b\u524d\u306b\u30c6\u30ca\u30f3\u30c8\u3092\u9078\u629e\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff01 \u5de6\u5074\u306e\u30e1\u30cb\u30e5\u30fc\u306b\u3042\u308b Tenant \u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u305d\u308c\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30c6\u30ca\u30f3\u30c8\u3092\u9078\u629e\u3057\u305f\u3089\u3001\u518d\u5ea6 Discover \u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u59cb\u3081\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/logging/kibana-examples/#_1","title":"\u30eb\u30fc\u30bf\u30fc\u30ed\u30b0","text":"

        \u4ee5\u4e0b\u306b\u30012\u3064\u306e\u4e00\u822c\u7684\u306a\u30ed\u30b0\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059:

        • \u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u3078\u306e\u30d2\u30c3\u30c8/\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7dcf\u6570\u3092\u8868\u793a\u3057\u307e\u3059\u3002
        • \u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30d2\u30c3\u30c8/\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u6570\u3092\u8868\u793a\u3057\u307e\u3059\u3002
        "},{"location":"ja/logging/kibana-examples/#_2","title":"\u30b5\u30a4\u30c8\u3078\u306e\u30d2\u30c3\u30c8/\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7dcf\u6570","text":"
        • Kibana\u3092\u8d77\u52d5\u3057\u3001Discovery \u3092\u9078\u629e\u3057\u307e\u3057\u3087\u3046(\u4ee5\u4e0b\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306e\uff031)
        • \u6b21\u306b\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30bf\u30fc\u30ed\u30b0\u3067\u3059(\uff032)\u3002
        • \u305d\u3053\u304b\u3089\u3001\u3053\u306e\u60c5\u5831\u3092\u5c11\u3057\u7d5e\u308a\u8fbc\u307f\u307e\u3059\u3002\u79c1\u305f\u3061\u306e\u4e3b\u306a\u88fd\u54c1\u74b0\u5883\u306b\u7126\u70b9\u3092\u5f53\u3066\u307e\u3057\u3087\u3046\u3002
        • \u691c\u7d22\u30d0\u30fc(\uff033)\u306b\u5165\u529b\u3057\u307e\u3059:

          openshift_project: \"\u672c\u756a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\"

        • \u3053\u308c\u306b\u3088\u308a\u3001\u6307\u5b9a\u3055\u308c\u305f\u671f\u9593\u5185\u306e\u672c\u756a\u74b0\u5883\u3078\u306e\u3059\u3079\u3066\u306e\u30d2\u30c3\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059
        • \u53f3\u4e0a\u9685\u306e\u30e1\u30cb\u30e5\u30fc (#4) \u3067\u671f\u9593\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u3002
        • \u30a8\u30f3\u30c8\u30ea\u306e\u6a2a\u306b\u3042\u308b\u77e2\u5370\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068 (#5)\u3001\u30a8\u30f3\u30c8\u30ea\u304c\u5c55\u958b\u3055\u308c\u3001\u30ad\u30e3\u30d7\u30c1\u30e3\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u60c5\u5831\u304c\u8868\u793a\u3055\u308c\u307e\u3059
        • \u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30ab\u30fc\u30bd\u30eb\u3092\u5408\u308f\u305b\u3066\u5de6\u5074\u306e\u300c\u8ffd\u52a0\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068 (#6)\u3001\u305d\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8ffd\u52a0\u3067\u304d\u307e\u3059
        • \u691c\u7d22\u30d0\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3001\u7d50\u679c\u3092\u3055\u3089\u306b\u7d5e\u308a\u8fbc\u3080\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/logging/kibana-examples/#ip","title":"\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30d2\u30c3\u30c8\u6570/\u30ea\u30af\u30a8\u30b9\u30c8\u6570","text":"

        \u4e0a\u8a18\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30b5\u30a4\u30c8\u3078\u306e\u3059\u3079\u3066\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u6982\u8981\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u304c\u3001\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u306b\u7d5e\u308a\u8fbc\u307f\u305f\u3044\u5834\u5408\u306f\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f\u4f8b\u3048\u3070\u3001\u3042\u308bIP\u30a2\u30c9\u30ec\u30b9\u304c\u30b5\u30a4\u30c8\u306b\u4f55\u56de\u30a2\u30af\u30bb\u30b9\u3057\u305f\u304b\u3001\u305d\u306eIP\u30a2\u30c9\u30ec\u30b9\u304c\u3069\u306e\u30da\u30fc\u30b8\u3092\u898b\u3066\u3044\u305f\u304b\u3092\u78ba\u8a8d\u3057\u305f\u3044\u5834\u5408\u3067\u3059\u3002\u3053\u306e\u6b21\u306e\u30af\u30a8\u30ea\u304c\u5f79\u7acb\u3061\u307e\u3059\u3002

        \u307e\u305a\u3001\u524d\u56de\u3068\u540c\u3058\u30af\u30a8\u30ea\u304b\u3089\u59cb\u3081\u307e\u3059\u304c\u3001\u3044\u304f\u3064\u304b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

        • \u6700\u521d\u306b\u3001\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1aclient_ip\u304a\u3088\u3073http_request
        • \u3053\u308c\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306eIP\u30a2\u30c9\u30ec\u30b9\u3068\u305d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u305f\u30da\u30fc\u30b8\u306e\u30ea\u30b9\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u6b21\u306f\u3001Amazee.io\u30da\u30fc\u30b8\u306e\u5834\u5408\u306e\u8868\u793a\u5185\u5bb9\u3067\u3059:

        ![\u3059\u3079\u3066\u306eIP\u30a2\u30c9\u30ec\u30b9\u3068\u305d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u305f\u30da\u30fc\u30b8:]( \u8981\u6c42\u3055\u308c\u305f\u3002](../images/kibana_example2.png)

        \u3053\u308c\u306f\u826f\u3055\u305d\u3046\u3067\u3059\u304c\u3001\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3060\u3051\u3092\u8868\u793a\u3057\u305f\u3044\u5834\u5408\u306f\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f\u691c\u7d22\u6761\u4ef6\u306b\u30a2\u30c9\u30ec\u30b9\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002

        • \u6b21\u306e\u3088\u3046\u306b\u8ffd\u52a0\u3057\u307e\u3059:AND client_ip: \"IP\u30a2\u30c9\u30ec\u30b9\".
        • \u3053\u308c\u306b\u3088\u308a\u3001\u305d\u306e\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30d2\u30c3\u30c8\u3068\u3001\u305d\u306e\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u30da\u30fc\u30b8\u3060\u3051\u304c\u7d50\u679c\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306famazee.io\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u4f8b\u3067\u3059:

        "},{"location":"ja/logging/kibana-examples/#_3","title":"\u30b3\u30f3\u30c6\u30ca\u30ed\u30b0","text":"

        \u30b3\u30f3\u30c6\u30ca\u30ed\u30b0\u306f\u3001\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u3068\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u3059\u3079\u3066\u306e\u6a19\u6e96\u51fa\u529b\uff08stdout\uff09\u304a\u3088\u3073\u6a19\u6e96\u30a8\u30e9\u30fc\uff08stderr\uff09\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3057\u307e\u3059\u3002\u6b21\u306b\u3001\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u304b\u3089\u30ed\u30b0\u3092\u53d6\u5f97\u3057\u3001\u305d\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u306e\u7279\u5b9a\u306e\u30a8\u30e9\u30fc\u756a\u53f7\u3092\u898b\u3064\u3051\u308b\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

        "},{"location":"ja/logging/kibana-examples/#_4","title":"\u30b3\u30f3\u30c6\u30ca\u304b\u3089\u306e\u30ed\u30b0","text":"

        \u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\uff08php\u3001nginx\u306a\u3069\uff09\u306e\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3067\u3059\u304b\uff1f\u305d\u306e\u5834\u5408\u306f\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u5f79\u7acb\u3061\u307e\u3059\uff01\u3053\u3053\u3067\u306fNGINX\u30ed\u30b0\u3092\u78ba\u8a8d\u3059\u308b\u65b9\u6cd5\u306b\u7126\u70b9\u3092\u5f53\u3066\u307e\u3059\u3002

        • \u307e\u305a\u3001Kibana\u3092\u958b\u304d\u3001Discover\u3092\u9078\u629e\u3057\u307e\u3059(\u4e0b\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306e\uff031)\u3002
        • \u6b21\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b3\u30f3\u30c6\u30ca\u30ed\u30b0\u3092\u9078\u629e\u3057\u307e\u3059(\uff032)\u3002
        • \u691c\u7d22\u30d0\u30fc(\uff033)\u306b\u79fb\u52d5\u3057\u3001kubernetes.container_name: \"nginx\"\u3068\u5165\u529b\u3057\u307e\u3059\u3002
        • \u3053\u308c\u306b\u3088\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u3059\u3079\u3066\u306eNGINX\u30ed\u30b0\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002 \u30a8\u30f3\u30c8\u30ea\u306e\u96a3\u306e\u77e2\u5370\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b(\uff034)\u3068\u3001\u305d\u306e\u30a8\u30f3\u30c8\u30ea\u304c\u5c55\u958b\u3055\u308c\u3001\u53ce\u96c6\u3057\u305f\u3059\u3079\u3066\u306e\u60c5\u5831\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
        • \u30e1\u30c3\u30bb\u30fc\u30b8\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u30ec\u30d9\u30eb\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u30d3\u30e5\u30fc\u306b\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046\u3002\u5de6\u5074\u306e\u300cAdd\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8ffd\u52a0\u3067\u304d\u307e\u3059(\uff035)\u3002
        • \u753b\u9762\u306e\u53f3\u4e0a\u9685(\uff036)\u3067\u6642\u9593\u67a0\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u4f8b\u3067\u306f\u3001\u904e\u53bb4\u6642\u9593\u306e\u30ed\u30b0\u3092\u898b\u3066\u3044\u307e\u3059\u3002

        "},{"location":"ja/logging/kibana-examples/#_5","title":"\u30ed\u30b0\u306e\u7279\u5b9a\u306e\u30a8\u30e9\u30fc","text":"

        NGINX\u30b3\u30f3\u30c6\u30ca\u3067\u767a\u751f\u3057\u305f500 Internal Server\u30a8\u30e9\u30fc\u306e\u6570\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3067\u3059\u304b\uff1f\u691c\u7d22\u30af\u30a8\u30ea\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u3088\u3046\u306b\u691c\u7d22\u3057\u307e\u3059:

        kubernetes.container_name: \"nginx\" AND message: \"500\"

        \u3053\u308c\u306b\u3088\u308a\u3001NGINX\u30b3\u30f3\u30c6\u30ca\u5185\u306e500\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u307f\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u4efb\u610f\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u306e\u4efb\u610f\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u691c\u7d22\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/logging/kibana-examples/#_6","title":"\u53ef\u8996\u5316","text":"

        Kibana\u3067\u306f\u3001\u53ef\u8996\u5316\u3084\u30b0\u30e9\u30d5\u3092\u4f5c\u6210\u3059\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3082\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u4e0a\u8a18\u306e\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u3066\u3001\u6708\u9593\u306e\u30d2\u30c3\u30c8/\u30ea\u30af\u30a8\u30b9\u30c8\u6570\u3092\u8868\u793a\u3059\u308b\u30c1\u30e3\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

        1. Kibana\u306e\u5de6\u5074\u306b\u3042\u308b\u300cVisualize\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
        2. \u9752\u3044\u30d7\u30e9\u30b9\u8a18\u53f7\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
        3. \u3053\u306e\u4f8b\u3067\u306f\u3001\u300cVertical Bar\u300d\u30c1\u30e3\u30fc\u30c8\u3092\u9078\u629e\u3057\u307e\u3059
        4. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30bf\u30fc\u30ed\u30b0\u3092\u9078\u629e\u3057\u307e\u3059
        5. \u300cBuckets\u300d\u306e\u4e0b\u306b\u3042\u308b\u300cX-Axis\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u300cDate Histogram\u300d\u3092\u9078\u629e\u3057\u3001\u9593\u9694\u3092\u300cdaily\uff08\u6bce\u65e5\uff09\u300d\u306b\u8a2d\u5b9a\u3057\u307e\u3059
        6. \u6210\u529f\u3067\u3059\uff01\u3053\u308c\u3067\u3001\u65e5\u3005\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u8868\u793a\u3059\u308b\u30d0\u30fc\u30c1\u30e3\u30fc\u30c8\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002

        \u6ce8\u610f:

        \u53f3\u4e0a\u9685\u306e\u30c7\u30fc\u30bf\u306e\u9069\u5207\u306a\u6642\u9593\u67a0\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        \u4ee5\u4e0b\u306f\u3001\u65e5\u3005\u306e\u30d2\u30c3\u30c8\u6570\u3092\u53ef\u8996\u5316\u3057\u305f\u30c1\u30e3\u30fc\u30c8\u306e\u4f8b\u3067\u3059:

        \u307e\u305f\u3001\u53ef\u8996\u5316\uff08\u304a\u3088\u3073\u691c\u7d22\uff09\u3092\u4fdd\u5b58\u3067\u304d\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\uff01\u3053\u308c\u306b\u3088\u308a\u3001\u5c06\u6765\u7684\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306e\u304c\u3055\u3089\u306b\u901f\u304f\u306a\u308a\u307e\u3059\u3002\u5404\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u306f\u72ec\u81ea\u306eKibana\u30c6\u30ca\u30f3\u30c8\u304c\u3042\u308b\u305f\u3081\u3001\u691c\u7d22\u3084\u53ef\u8996\u5316\u304c\u4ed6\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u5171\u6709\u3055\u308c\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002

        "},{"location":"ja/logging/kibana-examples/#_7","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":""},{"location":"ja/logging/logging/","title":"\u30ed\u30ae\u30f3\u30b0","text":"

        Lagoon\u306fKibana\u3092\u4ecb\u3057\u3066\u4ee5\u4e0b\u306e\u30ed\u30b0\u306b\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059:

        • Kubernetes\u30eb\u30fc\u30bf\u30fc\u304b\u3089\u306e\u30ed\u30b0\u306b\u306f\u3001\u3059\u3079\u3066\u306eHTTP\u304a\u3088\u3073HTTPS\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002:
          • \u30bd\u30fc\u30b9IP
          • URL
          • \u30d1\u30b9
          • HTTP\u52d5\u8a5e
          • Cookies
          • \u30d8\u30c3\u30c0\u30fc
          • \u30e6\u30fc\u30b6\u30fc\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8
          • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8
          • \u30b3\u30f3\u30c6\u30ca\u540d
          • \u5fdc\u7b54\u30b5\u30a4\u30ba
          • \u5fdc\u7b54\u6642\u9593
        • \u30b3\u30f3\u30c6\u30ca\u306e\u30ed\u30b0:
          • stdout\u3068stderr\u30e1\u30c3\u30bb\u30fc\u30b8
          • \u30b3\u30f3\u30c6\u30ca\u540d
          • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8
        • Lagoon\u306e\u30ed\u30b0:
          • Webhooks\u306e\u89e3\u6790
          • \u30d3\u30eb\u30c9\u30ed\u30b0
          • \u30d3\u30eb\u30c9\u30a8\u30e9\u30fc
          • \u305d\u306e\u4ed6\u306eLagoon\u95a2\u9023\u30ed\u30b0
        • \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30b0:
          • Drupal\u306e\u5834\u5408: Drupal Watchdog\u304b\u3089\u306e\u30ed\u30b0\u3092\u53d7\u3051\u53d6\u308b\u305f\u3081\u306b\u3001Lagoon Logs\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
          • Laravel\u306e\u5834\u5408: Laravel\u7528Lagoon Logs\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
          • \u305d\u306e\u4ed6\u306e\u30ef\u30fc\u30af\u30ed\u30fc\u30c9:
            • \u30ed\u30b0\u3092udp://application-logs.lagoon.svc:5140\u306b\u9001\u4fe1\u3057\u307e\u3059\u3002
            • \u30ed\u30b0\u304cJSON\u30a8\u30f3\u30b3\u30fc\u30c9\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u69cb\u9020\u5316\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
            • type\u30d5\u30a3\u30fc\u30eb\u30c9\u306bKubernetes\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306e\u540d\u524d\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044($LAGOON_PROJECT-$LAGOON_ENVIRONMENT)\u3002

        \u30ed\u30b0\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066Kibana\u30eb\u30fc\u30c8\u306eURL\u3092\u53d6\u5f97\u3057\u3066\u304f\u3060\u3055\u3044\uff08amazee.io\u306e\u5834\u5408\u306fhttps://logs.amazeeio.cloud/\u3067\u3059)\u3002

        \u5404Lagoon\u30e6\u30fc\u30b6\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u306f\u500b\u5225\u306e\u30ed\u30b0\u30a4\u30f3\u304c\u3042\u308a\u3001\u30a2\u30af\u30bb\u30b9\u6a29\u306e\u3042\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30ed\u30b0\u306e\u307f\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

        \u5404Lagoon\u30e6\u30fc\u30b6\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u307e\u305f\u3001\u72ec\u81ea\u306eKibana Tenant\u3092\u6301\u3063\u3066\u304a\u308a\u3001\u3053\u308c\u306f\u4fdd\u5b58\u3055\u308c\u305f\u691c\u7d22\u3084\u30d3\u30b8\u30e5\u30a2\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u304c\u4ed6\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u5171\u6709\u3055\u308c\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

        Kibana\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u77e5\u308a\u305f\u3044\u5834\u5408\u306f\u3001\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044: https://www.elastic.co/webinars/getting-started-kibana

        "},{"location":"ja/other-tools/client-libraries/","title":"Lagoon\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea","text":"

        Lagoon\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u30c4\u30fc\u30eb\u958b\u767a\u306b\u8208\u5473\u304c\u3042\u308b\u5834\u5408\u3001\u3044\u304f\u3064\u304b\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u5f79\u7acb\u3064\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

        "},{"location":"ja/other-tools/client-libraries/#machinery","title":"Machinery","text":"

        Machinery\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3001Lagoon\u306e\u30c4\u30fc\u30eb\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4e2d\u3067\u6700\u3082\u7a4d\u6975\u7684\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3001\u958b\u767a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u3053\u308c\u306f\u3001\u4e3b\u306b(\u3057\u304b\u3057\u6392\u4ed6\u7684\u3067\u306f\u306a\u304f)API\u3068\u306e\u3084\u308a\u53d6\u308a\u306e\u305f\u3081\u306e\u3001\u79c1\u305f\u3061\u306e\u3059\u3079\u3066\u306egolang\u57fa\u76e4\u306e\u30c4\u30fc\u30eb\u30bf\u30a4\u30d7\u306b\u308f\u305f\u308b\u3059\u3079\u3066\u306e\u57fa\u672c\u64cd\u4f5c\u306e\u4e2d\u592e\u30b9\u30c8\u30a2\u3067\u3059\u3002

        https://github.com/uselagoon/machinery/

        "},{"location":"ja/other-tools/client-libraries/#php","title":"PHP","text":"

        PHP\u306e\u7d71\u5408\u3092\u63a2\u3057\u3066\u3044\u308b\u306a\u3089\u3001php-sdk\u304c\u3042\u306a\u305f\u306e\u4ed5\u4e8b\u306e\u51fa\u767a\u70b9\u3068\u3057\u3066\u826f\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

        https://github.com/uselagoon/lagoon-php-sdk

        "},{"location":"ja/other-tools/client-libraries/#_1","title":"\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30e9\u30a4\u30d6\u30e9\u30ea","text":""},{"location":"ja/other-tools/client-libraries/#ansible","title":"Ansible","text":"

        Lagoon\u3068\u306e\u3084\u308a\u53d6\u308a\u306e\u305f\u3081\u306e\u983b\u7e41\u306b\u66f4\u65b0\u3055\u308c\u3001\u62e1\u5f35\u3055\u308c\u3066\u3044\u308bAnsible\u30e9\u30a4\u30d6\u30e9\u30ea\u3002

        https://github.com/salsadigitalauorg/lagoon_ansible_collection

        "},{"location":"ja/resources/faq/","title":"\u3088\u304f\u3042\u308b\u8cea\u554f","text":""},{"location":"ja/resources/faq/#lagoon","title":"Lagoon\u306e\u7ba1\u7406\u8005\u306b\u3069\u306e\u3088\u3046\u306b\u9023\u7d61\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f","text":"

        \u5c02\u7528\u306eSlack\u30c1\u30e3\u30cd\u30eb\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u306a\u306e\u3067\u3001\u305d\u308c\u3092\u5229\u7528\u3057\u3066\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059 - \u3082\u3057\u306a\u3044\u5834\u5408\u3084\u3001\u3069\u306e\u3088\u3046\u306b\u9023\u7d61\u3059\u308c\u3070\u3088\u3044\u304b\u5fd8\u308c\u3066\u3057\u307e\u3063\u305f\u5834\u5408\u306f\u3001support@amazee.io\u306b\u9023\u7d61\u3057\u3066\u4e0b\u3055\u3044\u3002

        "},{"location":"ja/resources/faq/#_2","title":"\u30d0\u30b0\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff01\ud83d\udc1e","text":"

        \u30d0\u30b0\u3084\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u554f\u984c\u3092\u898b\u3064\u3051\u305f\u5834\u5408\u306f\u3001\u305d\u306e\u5185\u5bb9\u3092support@amazee.io\u306b\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002GitHub\u306e\u554f\u984c\u3068\u3057\u3066\u5831\u544a\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/resources/faq/#amazeeiolagoon","title":"amazee.io\u306eLagoon\u3092\u5229\u7528\u3057\u305f\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9\u306b\u8208\u5473\u304c\u3042\u308a\u307e\u3059","text":"

        \u305d\u308c\u306f\u7d20\u6674\u3089\u3057\u3044\u30cb\u30e5\u30fc\u30b9\u3067\u3059\uff01sales@amazee.io\u307e\u3067\u30e1\u30fc\u30eb\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u3044\u305f\u3060\u3051\u307e\u3059\u3002

        "},{"location":"ja/resources/faq/#_3","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u3069\u306e\u3088\u3046\u306b\u5fa9\u5143\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

        \u30d5\u30a1\u30a4\u30eb\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001\u901a\u5e38\u306f\u6700\u5927\u306724\u6642\u9593\u3054\u3068\u306b\u53d6\u5f97\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u30aa\u30d5\u30b5\u30a4\u30c8\u3067\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u3059\u3002

        \u65e5\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u6700\u59277\u3064\u3001\u9031\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u6700\u59274\u3064\u4fdd\u6301\u3057\u3066\u3044\u307e\u3059\u3002

        \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u5fa9\u5143\u3084\u56de\u5fa9\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u304a\u6c17\u8efd\u306b\u30c1\u30b1\u30c3\u30c8\u3092\u63d0\u51fa\u3059\u308b\u304b\u3001\u30c1\u30e3\u30c3\u30c8\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u559c\u3093\u3067\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\uff01

        "},{"location":"ja/resources/faq/#_4","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u3069\u306e\u3088\u3046\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304b\uff1f","text":""},{"location":"ja/resources/faq/#ssl","title":"\u79c1\u306f\u7121\u52b9\u306aSSL\u8a3c\u660e\u66f8\u30a8\u30e9\u30fc\u304c\u51fa\u3066\u3044\u307e\u3059","text":"

        \u307e\u305a\u6700\u521d\u306b\u8a66\u3059\u3079\u304d\u3053\u3068\u306f\u3001\u79c1\u305f\u3061\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u308bSSL\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u53c2\u7167\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002

        \u305d\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u3082\u307e\u3060\u30a8\u30e9\u30fc\u304c\u51fa\u308b\u5834\u5408\u306f\u3001\u30c1\u30b1\u30c3\u30c8\u3092\u9001\u4fe1\u3059\u308b\u304b\u3001\u30c1\u30e3\u30c3\u30c8\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u79c1\u305f\u3061\u306f\u3042\u306a\u305f\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u306e\u3092\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\u3002

        "},{"location":"ja/resources/faq/#drush-array","title":"Drush\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u304d\u306b \"Array\" \u30a8\u30e9\u30fc\u304c\u51fa\u3066\u3044\u307e\u3059","text":"

        \u3053\u308c\u306fDrush\u30d0\u30fc\u30b8\u30e7\u30f38.1.16\u30688.1.17\u3067\u591a\u304f\u898b\u3089\u308c\u305f\u30d0\u30b0\u3067\u3001\u30a8\u30e9\u30fc\u306f\u6b21\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3057\u305f:

        Bash
        \u30b3\u30de\u30f3\u30c9\u3092\u6b63\u5e38\u306b\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f(\u8fd4\u5374:Array [error]\n(\n[default] => Array\n(\n[default] => Array\n(\n[driver] => mysql\n[prefix] => Array\n(\n[default] =>\n)\n, code: 0)\nError: no database record could be found for source @main [error]\n

        Drush\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u3068\u3001\u3053\u306e\u554f\u984c\u306f\u89e3\u6d88\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002\u6211\u3005\u306f\u5f37\u304f\u3001\u30d0\u30fc\u30b8\u30e7\u30f38.3\u307e\u305f\u306f\u305d\u308c\u4ee5\u964d\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002Drush\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308c\u3070\u3001\u30b3\u30de\u30f3\u30c9\u306f\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3059\uff01

        "},{"location":"ja/resources/faq/#kibanainternal-server-error","title":"Kibana\u30ed\u30b0\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001Internal Server Error\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059","text":"
        1. Kibana\u306e\u5de6\u5074\u306e\u30e1\u30cb\u30e5\u30fc\u3067\u300c\u30c6\u30ca\u30f3\u30c8\u300d\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
        2. \u81ea\u5206\u306e\u30c6\u30ca\u30f3\u30c8\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
        3. \u300c\u30c6\u30ca\u30f3\u30c8\u306e\u5909\u66f4\u300d\u3068\u3042\u306a\u305f\u306e\u30c6\u30ca\u30f3\u30c8\u306e\u540d\u524d\u3068\u3044\u3046\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
        4. \u300c\u30c7\u30a3\u30b9\u30ab\u30d0\u30fc\u300d\u30bf\u30d6\u306b\u623b\u308a\u3001\u30af\u30a8\u30ea\u3092\u518d\u5ea6\u8a66\u307f\u307e\u3059\u3002

        \u3053\u308c\u3067\u30ed\u30b0\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002

        "},{"location":"ja/resources/faq/#ssh","title":"\u4efb\u610f\u306e\u74b0\u5883\u306bSSH\u3067\u63a5\u7d9a\u3067\u304d\u306a\u3044","text":"

        \u4efb\u610f\u306e\u74b0\u5883\u306bSSH\u3067\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3002\u6b21\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059: Permission denied (publickey)\u3002drush sa\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30a8\u30a4\u30ea\u30a2\u30b9\u304c\u8fd4\u3055\u308c\u307e\u305b\u3093\u3002

        \u3053\u308c\u306f\u901a\u5e38\u3001Pygmy\u306e\u554f\u984c\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002Pygmy\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3053\u3061\u3089\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:https://pygmystack.github.io/pygmy/troubleshooting/

        "},{"location":"ja/resources/faq/#_5","title":"\u30d3\u30eb\u30c9\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u78ba\u8a8d\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/faq/#_6","title":"\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u8ffd\u52a0\u3057\u307e\u3059\u304b \u30af\u30ed\u30f3\u30b8\u30e7\u30d6\u3068\u306f\uff1f","text":""},{"location":"ja/resources/faq/#_7","title":"\u65b0\u3057\u3044\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\uff1f","text":""},{"location":"ja/resources/faq/#_8","title":"\u30eb\u30fc\u30c8\u3092\u524a\u9664\u3059\u308b\u306b\u306f\uff1f","text":"

        Lagoon\u306f\u3001.lagoon.yml\u304b\u3089\u30eb\u30fc\u30c8\u304c\u524a\u9664\u3055\u308c\u305f\u3053\u3068\u3092\u30c7\u30d7\u30ed\u30a4\u6642\u306b\u691c\u51fa\u3057\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3001\u30eb\u30fc\u30c8\u304c\u81ea\u52d5\u7684\u306b\u524a\u9664\u3055\u308c\u305f\u304b\u3001\u305d\u308c\u3089\u3092\u524a\u9664\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/resources/faq/#pygmy-status","title":"pygmy status\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30ad\u30fc\u304c\u30ed\u30fc\u30c9\u3055\u308c\u307e\u305b\u3093","text":"

        SSH\u30ad\u30fc\u3092pygmy\u306b\u30ed\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u65b9\u6cd5\u306f\u3053\u3061\u3089:https://pygmystack.github.io/pygmy/ssh_agent

        "},{"location":"ja/resources/faq/#drush-sa","title":"drush sa\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30a8\u30a4\u30ea\u30a2\u30b9\u304c\u8fd4\u3055\u308c\u307e\u305b\u3093","text":"

        \u3053\u308c\u306f\u901a\u5e38\u3001Pygmy\u306b\u554f\u984c\u304c\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002Pygmy\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3053\u3061\u3089\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:https://pygmystack.github.io/pygmy/troubleshooting

        "},{"location":"ja/resources/faq/#drush","title":"\u300cdrush\u306f\u3088\u308a\u6a5f\u80fd\u7684\u306a\u74b0\u5883\u304c\u5fc5\u8981\u3067\u3059\u300d\u3068\u3044\u3046\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u3001\u30c7\u30d7\u30ed\u30a4\u304c\u5931\u6557\u3059\u308b","text":"

        \u3053\u308c\u306f\u901a\u5e38\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306e\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/resources/faq/#pygmy","title":"Pygmy\u3092\u8d77\u52d5\u3059\u308b\u3068\u300c\u30a2\u30c9\u30ec\u30b9\u306f\u3059\u3067\u306b\u4f7f\u7528\u4e2d\u300d\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u304b\uff1f","text":"

        \u30e6\u30fc\u30b6\u30fc\u30e9\u30f3\u30c9\u30d7\u30ed\u30ad\u30b7\u306e\u8d77\u52d5\u30a8\u30e9\u30fc: listen tcp 0.0.0.0:80: bind: address already in use Error: failed to start containers: amazeeio-haproxy

        \u3053\u308c\u306f\u65e2\u77e5\u306e\u30a8\u30e9\u30fc\u3067\u3059\uff01\u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001\u30dd\u30fc\u30c880\u3067\u3059\u3067\u306b\u4f55\u304b\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u6b21\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u72af\u4eba\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

        netstat -ltnp | grep -w ':80'\n

        \u3053\u308c\u306b\u3088\u308a\u3001\u30dd\u30fc\u30c880\u3067\u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002\u30dd\u30fc\u30c880\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308b\u30d7\u30ed\u30bb\u30b9\u3092\u7d42\u4e86\u3055\u305b\u307e\u3059\u3002\u30dd\u30fc\u30c880\u304c\u89e3\u653e\u3055\u308c\u308b\u3068\u3001Pygmy\u306f\u3053\u308c\u4ee5\u4e0a\u306e\u30a8\u30e9\u30fc\u306a\u304f\u8d77\u52d5\u3059\u308b\u306f\u305a\u3067\u3059\u3002

        "},{"location":"ja/resources/faq/#pr","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d6\u30e9\u30f3\u30c1/PR\u74b0\u5883/\u672c\u756a\u74b0\u5883\u3092\u3069\u306e\u3088\u3046\u306b\u5909\u66f4\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

        \u305d\u306e\u5909\u66f4\u306fLagoon API\u3092\u4f7f\u7528\u3057\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff01\u3053\u306e\u5909\u66f4\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306fGraphQL\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059.

        "},{"location":"ja/resources/faq/#_9","title":"\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/faq/#ssh_1","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/\u30b0\u30eb\u30fc\u30d7\u306b\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc(\u304a\u3088\u3073SSH\u30ad\u30fc)\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":"

        \u3053\u308c\u306fLagoon API\u3092\u4ecb\u3057\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u5909\u66f4\u306e\u30b9\u30c6\u30c3\u30d7\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u79c1\u305f\u3061\u306eGraphQL\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/resources/faq/#_10","title":"\u74b0\u5883\u306f\u5b8c\u5168\u306b\u524a\u9664\u3057\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5927\u304d\u306a\u30b3\u30fc\u30c9\u5909\u66f4\u3092\u5c55\u958b\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

        \u74b0\u5883\u306f\u5404\u30c7\u30d7\u30ed\u30a4\u3067\u5b8c\u5168\u306b\u30bc\u30ed\u304b\u3089\u69cb\u7bc9\u3055\u308c\u3001\u53e4\u3044\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3057\u3066\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3068\u3001\u65b0\u9bae\u306a\u30af\u30ea\u30fc\u30f3\u306a\u30d3\u30eb\u30c9\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u518d\u540c\u671f\u3092\u5fd8\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044\uff01

        GraphQL\u3092\u4ecb\u3057\u3066\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u6307\u793a\u306f\u79c1\u305f\u3061\u306eGraphQL\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/resources/faq/#_11","title":"\u65b0\u3057\u3044\u74b0\u5883\u5909\u6570\u3092\u8868\u793a\u3055\u305b\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":"

        GraphQL\u3092\u4ecb\u3057\u3066\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u74b0\u5883\u306b\u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u5909\u6570\u3092\u8ffd\u52a0\u3057\u305f\u3089\u3001\u30c7\u30d7\u30ed\u30a4\u3092\u884c\u3046\u3060\u3051\u3067\u65b0\u3057\u3044\u74b0\u5883\u5909\u6570\u3092\u8868\u793a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u3042\u306a\u305f\u306e\u74b0\u5883\u306b\u5909\u66f4\u304c\u53cd\u6620\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

        "},{"location":"ja/resources/faq/#lagoonsftp","title":"Lagoon\u74b0\u5883\u306bSFTP\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u9001\u4fe1/\u53d6\u5f97\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":"

        \u30af\u30e9\u30a6\u30c9\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u304a\u5ba2\u69d8\u306f\u3001\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u4f7f\u7528\u3057\u3066Lagoon\u74b0\u5883\u306bSFTP\u3067\u63a5\u7d9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

        • \u30b5\u30fc\u30d0\u30fc\u30db\u30b9\u30c8\u540d: ssh.lagoon.amazeeio.cloud
        • \u30dd\u30fc\u30c8: 32222
        • \u30e6\u30fc\u30b6\u30fc\u540d: <\u30d7\u30ed\u30b8\u30a7\u30af\u30c8-\u74b0\u5883-\u540d>

        \u30e6\u30fc\u30b6\u30fc\u540d\u306f\u3001\u63a5\u7d9a\u3059\u308b\u74b0\u5883\u306e\u540d\u524d\u306b\u306a\u308a\u307e\u3059\u3002\u6700\u3082\u4e00\u822c\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u306f_PROJECTNAME-ENVIRONMENT_\u3067\u3059\u3002

        \u307e\u305f\u3001\u65b0\u3057\u3044Lagoon Sync\u30c4\u30fc\u30eb\u306b\u3064\u3044\u3066\u3082\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u3053\u3067\u8a73\u7d30\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059: https://github.com/uselagoon/lagoon-sync

        \u8a8d\u8a3c\u306f\u3001SSH\u516c\u958b\u9375\u3068\u79d8\u5bc6\u9375\u306e\u8a8d\u8a3c\u3092\u901a\u3058\u3066\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u307e\u3059\u3002

        "},{"location":"ja/resources/faq/#lets-encryptssl","title":"Let's Encrypt\u3092\u4f7f\u7528\u3057\u305f\u304f\u306a\u3044\u3002\u79c1\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u3044SSL\u8a3c\u660e\u66f8\u304c\u3042\u308a\u307e\u3059","text":"

        \u305d\u308c\u306b\u3064\u3044\u3066\u306f\u78ba\u304b\u306b\u304a\u624b\u4f1d\u3044\u3067\u304d\u307e\u3059\u3002\u81ea\u5206\u306eSSL\u8a3c\u660e\u66f8\u3092\u624b\u306b\u5165\u308c\u305f\u3089\u3001\u9060\u616e\u306a\u304f\u30c1\u30b1\u30c3\u30c8\u3092\u63d0\u51fa\u3059\u308b\u304b\u3001\u30c1\u30e3\u30c3\u30c8\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u559c\u3093\u3067\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\uff01\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u9001\u4fe1\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

        • \u8a3c\u660e\u66f8\u30ad\u30fc (.key)
        • \u8a3c\u660e\u66f8\u30d5\u30a1\u30a4\u30eb (.crt)
        • \u4e2d\u9593\u8a3c\u660e\u66f8 (.crt)

        \u307e\u305f\u3001.lagoon.yml\u3067tls-acme\u30aa\u30d7\u30b7\u30e7\u30f3\u3092false\u306b\u8a2d\u5b9a\u3059\u308b\u3002

        "},{"location":"ja/resources/faq/#lagoonefsfusesmbetc","title":"Lagoon\u306b\u5916\u90e8\u30dc\u30ea\u30e5\u30fc\u30e0(EFS/Fuse/SMB/etc)\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3053\u3068\u306f\u53ef\u80fd\u3067\u3059\u304b\uff1f","text":"

        \u5916\u90e8\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30de\u30a6\u30f3\u30c8\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u5185\u90e8\u3067\u5b8c\u5168\u306b\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001Lagoon\u306f\u3053\u306e\u7a2e\u306e\u63a5\u7d9a\u3092\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u4e00\u90e8\u3068\u3057\u3066\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\u3002

        \u958b\u767a\u8005\u306f\u3001\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb(Dockerfile\u7d4c\u7531)\u3057\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u30de\u30a6\u30f3\u30c8\u304c\u4e8b\u524d\u307e\u305f\u306f\u4e8b\u5f8c\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u7d4c\u7531\u3067\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3067\u3053\u308c\u3092\u51e6\u7406\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/resources/faq/#lagoon_1","title":"Lagoon\u306e\u30d3\u30eb\u30c9\u3092\u505c\u6b62\u3059\u308b\u65b9\u6cd5\u306f\u3042\u308a\u307e\u3059\u304b\uff1f","text":"

        \u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u30d3\u30eb\u30c9\u3092\u505c\u6b62\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u30b5\u30dd\u30fc\u30c8\u306b\u9023\u7d61\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u3001\u30d3\u30eb\u30c9\u306f\u30af\u30e9\u30b9\u30bf\u3078\u306e\u7ba1\u7406\u8005\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u306e\u307f\u304c\u505c\u6b62\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/resources/faq/#elasticsearchsolrui92008983","title":"Elasticsearch\\Solr\u30b5\u30fc\u30d3\u30b9\u3092\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3057\u305f\u3002\u30d6\u30e9\u30a6\u30b6\u304b\u3089UI(\u30dd\u30fc\u30c89200/8983)\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u3069\u306e\u3088\u3046\u306b\u53d6\u5f97\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

        \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u74b0\u5883\u3067\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9(NGINX/Varnish/Node.js)\u306e\u307f\u3092\u516c\u958b\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30dd\u30fc\u30c8\u30de\u30c3\u30d4\u30f3\u30b0\u3092docker-compose ps\u3067\u78ba\u8a8d\u3057\u3066\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002 , \u305d\u3057\u3066 [http://localhost](http://localhost/):` \u3092\u30d6\u30e9\u30a6\u30b6\u3067\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002"},{"location":"ja/resources/faq/#_12","title":"\u3053\u3053\u3067\u306f\u7b54\u3048\u3089\u308c\u306a\u3044\u8cea\u554f\u304c\u3042\u308a\u307e\u3059","text":"

        Discord \u307e\u305f\u306f uselagoon@amazee.io \u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u30c1\u30fc\u30e0\u306b\u9023\u7d61\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/resources/glossary/","title":"\u7528\u8a9e\u96c6","text":"\u7528\u8a9e \u5b9a\u7fa9 Access Mode \u6c38\u7d9a\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u3069\u306e\u3088\u3046\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u304b\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002 Active/Standby Active/Standby deployments\u306f\u3001\u4e00\u822c\u306bblue/green deployments\u3068\u3082\u547c\u3070\u308c\u3001\u672c\u756a\u74b0\u5883\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u5207\u308a\u66ff\u3048\u308b\u65b9\u6cd5\u3067\u3059\u3002 Ansible \u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3092\u30b3\u30fc\u30c9\u5316\u53ef\u80fd\u306b\u3059\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30c4\u30fc\u30eb\u30b9\u30a4\u30fc\u30c8\u3002 AWS Amazon Web Services Amazon S3 Glacier \u9577\u671f\u4fdd\u5b58\u306e\u305f\u3081\u306e\u5b89\u5168\u304b\u3064\u4f4e\u30b3\u30b9\u30c8\u306aS3\u30b9\u30c8\u30ec\u30fc\u30b8\u3002 BitBucket Atlassian\u304c\u6240\u6709\u3059\u308bGit\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3067\u3001\u305d\u306e\u30c4\u30fc\u30eb\u3068\u7d71\u5408\u3057\u307e\u3059\u3002 Brew Homebrew\u306fOSX\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3067\u3059\u3002 CA \u4fe1\u983c\u3067\u304d\u308b\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3067\u3042\u308b\u8a3c\u660e\u66f8\u8a8d\u8a3c\u5c40(Certificate Authority)\u306f\u3001Secure Sockets Layer (SSL)\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3057\u307e\u3059\u3002 CDN \u30b3\u30f3\u30c6\u30f3\u30c4\u914d\u4fe1\u30cd\u30c3\u30c8\u30ef\u30fc\u30af - \u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u306b\u3088\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u914d\u4fe1 CI \u7d99\u7d9a\u7684\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3 CIDR \u30af\u30e9\u30b9\u30ec\u30b9\u30fb\u30a4\u30f3\u30bf\u30fc\u30c9\u30e1\u30a4\u30f3\u30fb\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0 - IP\u30a2\u30c9\u30ec\u30b9\u306e\u5272\u308a\u5f53\u3066\u65b9\u6cd5 CLI \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9 Cluster \u30b5\u30fc\u30d0\u30fc\u3084VM\u306e\u7d71\u4e00\u3055\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3067\u3001\u4e00\u7dd2\u306b\u5206\u6563\u7ba1\u7406\u3055\u308c\u3001\u9ad8\u3044\u53ef\u7528\u6027\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u4e00\u3064\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u30b5\u30fc\u30d3\u30b9\u3057\u307e\u3059\u3002 CMS \u30b3\u30f3\u30c6\u30f3\u30c4\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0 Cron job cron\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u306f\u3001Unix\u7cfb\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306e\u30b8\u30e7\u30d6\u30b9\u30b1\u30b8\u30e5\u30fc\u30e9\u3067\u3059\u3002\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u74b0\u5883\u306e\u8a2d\u5b9a\u3068\u7dad\u6301\u3092\u884c\u3046\u30e6\u30fc\u30b6\u30fc\u306f\u3001cron\u3092\u4f7f\u7528\u3057\u3066\u30b8\u30e7\u30d6(cron\u30b8\u30e7\u30d6\u3068\u3082\u547c\u3070\u308c\u308b)\u3092\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3057\u3001\u56fa\u5b9a\u306e\u6642\u9593\u3001\u65e5\u4ed8\u3001\u307e\u305f\u306f\u9593\u9694\u3067\u5b9a\u671f\u7684\u306b\u5b9f\u884c\u3057\u307e\u3059\u3002 Composer \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc DDEV Drupal\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u4eba\u6c17\u306e\u3042\u308bDocker\u30d9\u30fc\u30b9\u306ePHP\u958b\u767a\u74b0\u5883\u3002 DDoS \u5206\u6563\u578b\u30b5\u30fc\u30d3\u30b9\u62d2\u5426 DNS \u30c9\u30e1\u30a4\u30f3\u30cd\u30fc\u30e0\u30b7\u30b9\u30c6\u30e0 Docker Linux\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u81ea\u52d5\u5316\u3059\u308b\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30b8\u30f3\u3002 Docker Compose YAML\u30d5\u30a1\u30a4\u30eb\u3092\u4ecb\u3057\u3066Docker\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9a\u7fa9\u3057\u3001\u5b9f\u884c\u3059\u308b\u30c4\u30fc\u30eb\u3002 Drupal \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0 Drush Drupal\u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30b7\u30a7\u30eb\u3002 EC2 Amazon Elastic Compute Cloud Elasticsearch \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3002\u5206\u6563\u578b\u3001\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8\u5bfe\u5fdc\u306e\u5168\u6587\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3092\u63d0\u4f9b\u3057\u3001\u30b9\u30ad\u30fc\u30de\u30d5\u30ea\u30fc\u306eJSON\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30a6\u30a7\u30d6\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 Galera \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u305f\u3081\u306e\u6c4e\u7528\u7684\u306a\u540c\u671f\u30de\u30eb\u30c1\u30de\u30b9\u30bf\u30fc\u8907\u88fd\u30e9\u30a4\u30d6\u30e9\u30ea\u3002 Git \u7121\u6599\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u5206\u6563\u578b\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3002 Git Hash /SHA \u5404\u30b3\u30df\u30c3\u30c8\u3092\u8b58\u5225\u3059\u308b\u751f\u6210\u3055\u308c\u305f\u6587\u5b57\u5217\u3002SHA-1\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u307e\u3059 GitHub Git\u3092\u4f7f\u7528\u3057\u305f\u72ec\u81ea\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u4f1a\u793e\u3002\u30de\u30a4\u30af\u30ed\u30bd\u30d5\u30c8\u306e\u5b50\u4f1a\u793e\u3067\u3001Git\u306e\u5206\u6563\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3068\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u7ba1\u7406\u6a5f\u80fd\u3092\u5168\u3066\u63d0\u4f9b\u3057\u3001\u3055\u3089\u306b\u8ffd\u52a0\u6a5f\u80fd\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002 GitLab CI\u6a5f\u80fd\u3092\u5099\u3048\u305fWeb\u30d9\u30fc\u30b9\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3002 Grafana \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u5206\u6790\u304a\u3088\u3073\u76e3\u8996\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3002 GraphQL API\u306e\u305f\u3081\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u30af\u30a8\u30ea\u3068\u64cd\u4f5c\u8a00\u8a9e\u3001\u304a\u3088\u3073\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u3067\u30af\u30a8\u30ea\u3092\u6e80\u305f\u3059\u305f\u3081\u306e\u30e9\u30f3\u30bf\u30a4\u30e0\u3002 Harbor \u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3067\u30a4\u30e1\u30fc\u30b8\u3092\u4fdd\u8b77\u3057\u3001\u30a4\u30e1\u30fc\u30b8\u306e\u8106\u5f31\u6027\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3001\u4fe1\u983c\u3067\u304d\u308b\u30a4\u30e1\u30fc\u30b8\u3068\u3057\u3066\u7f72\u540d\u3059\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u3002 Helm Kubernetes\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3067\u3001Kubernetes\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u7ba1\u7406\u3059\u308b\u306e\u3092\u52a9\u3051\u307e\u3059\u3002 Helm Charts Helm Charts\u306f\u3001\u6700\u3082\u8907\u96d1\u306aKubernetes\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9a\u7fa9\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3001\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u306e\u3092\u52a9\u3051\u307e\u3059\u3002 HTTP \u30cf\u30a4\u30d1\u30fc\u30c6\u30ad\u30b9\u30c8\u8ee2\u9001\u30d7\u30ed\u30c8\u30b3\u30eb\u3002HTTP\u306fWorld Wide Web\u306b\u3088\u3063\u3066\u4f7f\u7528\u3055\u308c\u308b\u57fa\u790e\u7684\u306a\u30d7\u30ed\u30c8\u30b3\u30eb\u3067\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u3069\u306e\u3088\u3046\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u3001\u4f1d\u9001\u3055\u308c\u3001Web\u30b5\u30fc\u30d0\u30fc\u3068\u30d6\u30e9\u30a6\u30b6\u304c\u3055\u307e\u3056\u307e\u306a\u30b3\u30de\u30f3\u30c9\u306b\u5bfe\u3057\u3066\u3069\u306e\u3088\u3046\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3079\u304d\u304b\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002 IAM AWS Identity and Access Management(IAM)\u306f\u3001AWS\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u5b89\u5168\u306b\u5236\u5fa1\u3059\u308b\u306e\u306b\u5f79\u7acb\u3064\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002 IDE \u7d71\u5408\u958b\u767a\u74b0\u5883\u306f\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u305f\u3081\u306e\u5305\u62ec\u7684\u306a\u65bd\u8a2d\u3092\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u306b\u63d0\u4f9b\u3059\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3059\u3002IDE\u306b\u306f\u901a\u5e38\u3001\u5c11\u306a\u304f\u3068\u3082\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u30a8\u30c7\u30a3\u30bf\u3001\u30d3\u30eb\u30c9\u81ea\u52d5\u5316\u30c4\u30fc\u30eb\u3001\u30c7\u30d0\u30c3\u30ac\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 Ingress controller Ingress controller\u306f\u3001Kubernetes(\u304a\u3088\u3073\u4ed6\u306e\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f)\u74b0\u5883\u7528\u306e\u7279\u5316\u3057\u305f\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u30fc\u3067\u3059\u3002 IPTables Linux\u30ab\u30fc\u30cd\u30eb\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u3002 Jenkins \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u81ea\u52d5\u5316\u30b5\u30fc\u30d0\u30fc\u3002 JWT JSON Web Token\u3002 k3s \u9ad8\u53ef\u7528\u6027\u3001\u8a8d\u5b9a\u6e08\u307f\u306eKubernetes\u30c7\u30a3\u30b9\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3\u3002 k3d k3d\u306f\u3001Docker\u5185\u3067k3s\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u8efd\u91cf\u30e9\u30c3\u30d1\u30fc\u3067\u3059\u3002 k8s Kubernetes\u306e\u6570\u5b57\u8a18\u53f7(K + 8\u6587\u5b57 + s) k8up K8up\u306f\u3001k8s/OpenShift\u30af\u30e9\u30b9\u30bf\u30fc\u4e0a\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u30a2\u30d7\u30ea\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u51e6\u7406\u3059\u308b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u3067\u3059\u3002 Keycloak \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u304a\u3088\u3073\u30a2\u30af\u30bb\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3002 Kibana Elasticsearch\u7528\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u53ef\u8996\u5316\u30d7\u30e9\u30b0\u30a4\u30f3\u3002Elasticsearch\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u4e0a\u3067\u8996\u899a\u5316\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 KinD Docker\u5185\u306eKubernetes - Docker\u30b3\u30f3\u30c6\u30ca\u30fc\u300c\u30ce\u30fc\u30c9\u300d\u3092\u4f7f\u7528\u3057\u3066\u30ed\u30fc\u30ab\u30eb\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u5b9f\u884c\u3059\u308b\u30c4\u30fc\u30eb\u3002Kind\u306f\u4e3b\u306bKubernetes\u81ea\u4f53\u306e\u30c6\u30b9\u30c8\u7528\u306b\u8a2d\u8a08\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u30ed\u30fc\u30b1\u30eb\u958b\u767a\u3084CI\u306b\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 kubectl Kubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u5bfe\u3057\u3066\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306eKubernetes\u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u3002 Kubernetes \u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3001\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3001\u304a\u3088\u3073\u7ba1\u7406\u3092\u81ea\u52d5\u5316\u3059\u308b\u305f\u3081\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30b7\u30b9\u30c6\u30e0\u3002 Lagoon Kubernetes\u306e\u305f\u3081\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30ea\u30d0\u30ea\u30fc\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002 Lagoonize \u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u3092Lagoon\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u5909\u66f4\u3002 Lando Docker\u3092\u57fa\u76e4\u306b\u3057\u305f\u7121\u6599\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3001\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u304a\u3088\u3073DevOps\u30c4\u30fc\u30eb\u3002 Laravel \u30e2\u30c7\u30eb-\u30d3\u30e5\u30fc-\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc(MVC)\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30d1\u30bf\u30fc\u30f3\u306b\u5f93\u3044\u3001Symfony\u3092\u57fa\u306b\u3057\u305f\u7121\u6599\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9PHP\u30a6\u30a7\u30d6\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3002 Let's Encrypt \u7121\u6599\u306e\u81ea\u52d5\u5316\u3055\u308c\u305f\u30aa\u30fc\u30d7\u30f3\u306a\u8a8d\u8a3c\u5c40(CA)\u3002 MariaDB MySQL\u306e\u95a2\u4fc2\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u958b\u767a\u7248\u3067\u3001\u5546\u696d\u7684\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u304a\u308a\u3001GNU General Public License\u306e\u4e0b\u3067\u7121\u6599\u3067\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3067\u3042\u308b\u3053\u3068\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002 Master node \u96c6\u5408\u4f53\u306e\u4e2d\u306e\u5358\u4e00\u306e\u30ce\u30fc\u30c9\u3002 \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3088\u308a\u5c02\u9580\u7684\u306a\u90e8\u5206\u306b\u5206\u5272\u3059\u308b\u5b9f\u8df5\u3002\u5404\u90e8\u5206\u306fAPI\u3084HTTP\u306e\u3088\u3046\u306aREST\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4ecb\u3057\u3066\u4e92\u3044\u306b\u901a\u4fe1\u3057\u307e\u3059\u3002 MongoDB MongoDB\u306f\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6307\u5411\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u3057\u3066\u5206\u985e\u3055\u308c\u3001MongoDB\u306f\u30b9\u30ad\u30fc\u30de\u4ed8\u304d\u306eJSON\u98a8\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 \u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8 \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u5358\u4e00\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u30b5\u30fc\u30d0\u30fc\u4e0a\u3067\u52d5\u4f5c\u3057\u3001\u8907\u6570\u306e\u30c6\u30ca\u30f3\u30c8(\u5171\u901a\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u3092\u5171\u6709\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u30b0\u30eb\u30fc\u30d7)\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u5404\u30c6\u30ca\u30f3\u30c8\u306b\u30ea\u30bd\u30fc\u30b9\u306e\u4e00\u90e8\u3092\u63d0\u4f9b\u3059\u308b\u3088\u3046\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002 MVC \u30e2\u30c7\u30eb-\u30d3\u30e5\u30fc-\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9 - \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30923\u3064\u306e\u4e3b\u8981\u306a\u8ad6\u7406\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8:\u30e2\u30c7\u30eb\u3001\u30d3\u30e5\u30fc\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306b\u5206\u3051\u308b\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30d1\u30bf\u30fc\u30f3\u3002\u3053\u308c\u3089\u306e\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u5b9a\u306e\u958b\u767a\u5074\u9762\u3092\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 MySQL MySQL\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002 NGINX NGINX\u306f\u3001\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3001\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u3001\u30e1\u30fc\u30eb\u30d7\u30ed\u30ad\u30b7\u3001HTTP\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u3057\u3066\u3082\u4f7f\u7528\u3067\u304d\u308b\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u3067\u3059\u3002 \u30ce\u30fc\u30c9 \u5358\u4e00\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9( Node.js \u30d6\u30e9\u30a6\u30b6\u30fc\u306e\u5916\u90e8\u3067JavaScript\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306eJavaScript\u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u3002 Open source \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u4e0b\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u3001\u8457\u4f5c\u6a29\u8005\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u7814\u7a76\u3001\u5909\u66f4\u3001\u304a\u3088\u3073\u4efb\u610f\u306e\u76ee\u7684\u3067\u8ab0\u306b\u3067\u3082\u914d\u5e03\u3059\u308b\u6a29\u5229\u3092\u4ed8\u4e0e\u3059\u308b\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u4e00\u7a2e\u3002\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u3001\u5171\u540c\u306e\u516c\u958b\u65b9\u5f0f\u3067\u958b\u767a\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 OpenSearch \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4e3b\u5c0e\u306e\u3001Apache 2.0\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u304a\u3088\u3073\u5206\u6790\u30b9\u30a4\u30fc\u30c8\u3067\u3001\u30c7\u30fc\u30bf\u306e\u53d6\u308a\u8fbc\u307f\u3001\u691c\u7d22\u3001\u8996\u899a\u5316\u3001\u5206\u6790\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002 OpenShift Docker\u3068Kubernetes\u3092\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u306b\u3082\u305f\u3089\u3059\u30b3\u30f3\u30c6\u30ca\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002 PHP PHP(Personal Home Page)\u306f\u3001Web\u958b\u767a\u306e\u305f\u3081\u306b\u5143\u3005\u8a2d\u8a08\u3055\u308c\u305f\u6c4e\u7528\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u3059\u3002 PhpStorm PHP\u3068Web\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u305f\u3081\u306e\u958b\u767a\u30c4\u30fc\u30eb(IDE)\u3002 Pod \u540c\u3058\u30db\u30b9\u30c8\u4e0a\u306b\u4e00\u7dd2\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u30b3\u30f3\u30c6\u30ca\u306e\u30b0\u30eb\u30fc\u30d7\u3002 Kubernetes\u304c\u6271\u3046\u57fa\u672c\u5358\u4f4d\u3002 PostgreSQL \u62e1\u5f35\u6027\u3068\u6280\u8853\u6a19\u6e96\u306e\u6e96\u62e0\u3092\u5f37\u8abf\u3057\u305f\u7121\u6599\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3002 Public/Private Key \u516c\u958b\u9375/\u79d8\u5bc6\u9375 Puppet \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u8a2d\u5b9a\u7ba1\u7406\u304a\u3088\u3073\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30c4\u30fc\u30eb\u3002 PV PersistentVolume - \u7ba1\u7406\u8005\u304c\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3057\u305f\u3001\u307e\u305f\u306fStorage Classes\u3092\u4f7f\u7528\u3057\u3066\u52d5\u7684\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u305f\u30af\u30e9\u30b9\u30bf\u5185\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4e00\u90e8\u3002 PVC Persistent Volume Claim - \u30e6\u30fc\u30b6\u30fc\u306b\u3088\u308b\u30b9\u30c8\u30ec\u30fc\u30b8\u8981\u6c42\u3002 Pygmy amazee.io\u304c\u63d0\u4f9b\u3059\u308b\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u30b7\u30b9\u30c6\u30e0\u3002 Python Python\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u3001\u89e3\u91c8\u3055\u308c\u3001\u9ad8\u30ec\u30d9\u30eb\u3067\u3001\u4e00\u822c\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u3059\u3002 RabbitMQ \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u30d6\u30ed\u30fc\u30ab\u30fc\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3002 RBAC \u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1 RDS \u95a2\u4fc2\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9 Redis \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3001\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u30d6\u30ed\u30fc\u30ab\u30fc\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a4\u30f3\u30e1\u30e2\u30ea\u30c7\u30fc\u30bf\u30b9\u30c8\u30a2\u3002 Restic \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d7\u30ed\u30b0\u30e9\u30e0\u3002 ROX Kubernetes\u306e\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9ReadOnlyMany - \u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u591a\u304f\u306e\u30ce\u30fc\u30c9\u3067\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3068\u3057\u3066\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002 Ruby \u8907\u6570\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d1\u30e9\u30c0\u30a4\u30e0\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u89e3\u91c8\u578b\u306e\u9ad8\u30ec\u30d9\u30eb\u6c4e\u7528\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3002\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u5f37\u8abf\u70b9\u3068\u3057\u3066\u8a2d\u8a08\u3055\u308c\u307e\u3057\u305f\u3002 \u751f\u7523\u6027\u3068\u30b7\u30f3\u30d7\u30eb\u3055\u3002Ruby\u3067\u306f\u3001\u3059\u3079\u3066\u304c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308a\u3001\u30d7\u30ea\u30df\u30c6\u30a3\u30d6\u306a\u30c7\u30fc\u30bf\u578b\u3082\u4f8b\u5916\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 RWO Kubernetes\u306e\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9ReadWriteOnce - \u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u5358\u4e00\u306e\u30ce\u30fc\u30c9\u306b\u3088\u3063\u3066\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u3068\u3057\u3066\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002ReadWriteOnce\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9\u3067\u306f\u3001\u540c\u3058\u30ce\u30fc\u30c9\u4e0a\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u8907\u6570\u306e\u30dd\u30c3\u30c9\u304c\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002 RWOP Kubernetes\u306e\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9ReadWriteOncePod - \u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u5358\u4e00\u306ePod\u306b\u3088\u3063\u3066\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u3068\u3057\u3066\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002\u30af\u30e9\u30b9\u30bf\u5168\u4f53\u3067\u305f\u3060\u4e00\u3064\u306e\u30dd\u30c3\u30c9\u306e\u307f\u304c\u305d\u306ePVC\u3092\u8aad\u307f\u66f8\u304d\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001ReadWriteOncePod\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306fCSI\u30dc\u30ea\u30e5\u30fc\u30e0\u3068Kubernetes\u30d0\u30fc\u30b8\u30e7\u30f31.22+\u3067\u306e\u307f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002 RWX Kubernetes\u306e\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9ReadWriteMany - \u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u591a\u6570\u306e\u30ce\u30fc\u30c9\u306b\u3088\u3063\u3066\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u3068\u3057\u3066\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002 S3 Amazon Simple Storage Service\u3002 SBOM \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u90e8\u54c1\u8868\u3002 SHA-1 Secure Hash Algorithm 1\u3001\u5165\u529b\u3092\u53d6\u308a\u3001160\u30d3\u30c3\u30c8\u306e\u30cf\u30c3\u30b7\u30e5\u5024(\u901a\u5e38\u306f40\u6841\u306e16\u9032\u6570\u3067\u8868\u793a)\u3092\u751f\u6210\u3059\u308b\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u3002\u3053\u308c\u306f\u30a2\u30e1\u30ea\u30ab\u56fd\u5bb6\u5b89\u5168\u4fdd\u969c\u5c40\u306b\u3088\u3063\u3066\u8a2d\u8a08\u3055\u308c\u3001\u7c73\u56fd\u9023\u90a6\u60c5\u5831\u51e6\u7406\u6a19\u6e96\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002 Solr Java\u3067\u66f8\u304b\u308c\u305f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u691c\u7d22\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002 SSH \u30bb\u30ad\u30e5\u30a2 SSL \u30bb\u30ad\u30e5\u30a2\u30bd\u30b1\u30c3\u30c8\u30ec\u30a4\u30e4\u30fc \u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9 \u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u306f\u3001Kubernetes\u306e\u7ba1\u7406\u8005\u304c\u63d0\u4f9b\u3059\u308b\u300c\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u30af\u30e9\u30b9\u300d\u3092\u8a18\u8ff0\u3059\u308b\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u7570\u306a\u308b\u30af\u30e9\u30b9\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u54c1\u8cea\u30ec\u30d9\u30eb\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30dd\u30ea\u30b7\u30fc\u3001\u307e\u305f\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u7ba1\u7406\u8005\u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u308b\u4efb\u610f\u306e\u30dd\u30ea\u30b7\u30fc\u306b\u30de\u30c3\u30d7\u3055\u308c\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093 Symfony Symfony\u306fPHP\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308a\u3001\u518d\u5229\u7528\u53ef\u80fd\u306aPHP\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8/\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30bb\u30c3\u30c8\u3067\u3001Drupal 8\u4ee5\u964d\u306fSymfony\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002 TCP \u30c8\u30e9\u30f3\u30b9\u30df\u30c3\u30b7\u30e7\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d7\u30ed\u30c8\u30b3\u30eb\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u30c7\u30fc\u30bf\u3092\u4ea4\u63db\u3067\u304d\u308b\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u4f1a\u8a71\u3092\u78ba\u7acb\u3057\u7dad\u6301\u3059\u308b\u65b9\u6cd5\u3092\u5b9a\u7fa9\u3059\u308b\u6a19\u6e96\u3002 TLS \u30c8\u30e9\u30f3\u30b9\u30dd\u30fc\u30c8\u5c64\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 Trivy CI\u306b\u9069\u3057\u305f\u30b7\u30f3\u30d7\u30eb\u3067\u5305\u62ec\u7684\u306a\u30b3\u30f3\u30c6\u30ca\u306e\u8106\u5f31\u6027\u30b9\u30ad\u30e3\u30ca\u3002 TTL Time to live\u307e\u305f\u306fhop limit\u306f\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u307e\u305f\u306f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u30c7\u30fc\u30bf\u306e\u5bff\u547d\u307e\u305f\u306f\u751f\u5b58\u671f\u9593\u3092\u5236\u9650\u3059\u308b\u30e1\u30ab\u30cb\u30ba\u30e0\u3067\u3059\u3002 Uptime Robot \u30a2\u30c3\u30d7\u30bf\u30a4\u30e0\u76e3\u8996\u30b5\u30fc\u30d3\u30b9\u3002 Varnish \u5f37\u529b\u306a\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eHTTP\u30a8\u30f3\u30b8\u30f3/\u30ea\u30d0\u30fc\u30b9HTTP\u30d7\u30ed\u30ad\u30b7\u3067\u3001\u30e6\u30fc\u30b6\u304c\u521d\u3081\u3066Web\u30da\u30fc\u30b8\u306e\u30b3\u30d4\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5(\u307e\u305f\u306f\u4fdd\u5b58)\u3059\u308b\u3053\u3068\u3067Web\u30b5\u30a4\u30c8\u306e\u901f\u5ea6\u3092\u4e0a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 VM \u30d0\u30fc\u30c1\u30e3\u30eb\u30de\u30b7\u30f3 Webhook Webhook\u306f\u3001GitHub\u3001GitLab\u3001Bitbucket\u306a\u3069\u306e\u30a2\u30d7\u30ea\u304c\u4ed6\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5373\u6642\u30c7\u30fc\u30bf\u3092\u63d0\u4f9b\u3057\u3001\u4f55\u304b(\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306a\u3069)\u306b\u5bfe\u3057\u3066\u884c\u52d5\u3092\u8d77\u3053\u3059\u65b9\u6cd5\u3067\u3059\u3002 YAML YAML Ain't Markup Language - YAML\u306f\u4eba\u9593\u304c\u8aad\u307f\u3084\u3059\u3044\u30c7\u30fc\u30bf\u30b7\u30ea\u30a2\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u8a00\u8a9e\u3067\u3059\u3002\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3084\u3001\u30c7\u30fc\u30bf\u304c\u4fdd\u5b58\u307e\u305f\u306f\u9001\u4fe1\u3055\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002"},{"location":"ja/resources/tutorials-and-webinars/","title":"\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3001\u30a6\u30a7\u30d3\u30ca\u30fc\u3001\u30d3\u30c7\u30aa","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoon","title":"Lagoon\u30a6\u30a7\u30d3\u30ca\u30fc\u5165\u9580","text":"

        [\u30b9\u30e9\u30a4\u30c9]

        "},{"location":"ja/resources/tutorials-and-webinars/#lagoonlando","title":"Lagoon\u3068\u5171\u306b\u9032\u5316\u3059\u308bLando","text":""},{"location":"ja/resources/tutorials-and-webinars/#-lagoon","title":"\u30a6\u30a7\u30d3\u30ca\u30fc - Lagoon\u30a4\u30f3\u30b5\u30a4\u30c8","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoon_1","title":"Lagoon\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30c7\u30e2","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoondrupal","title":"Lagoon\u3092\u4f7f\u3063\u3066\u8907\u6570\u306eDrupal\u30b5\u30a4\u30c8\u3092\u7ba1\u7406\u3059\u308b\u65b9\u6cd5","text":"

        [\u30b9\u30e9\u30a4\u30c9]

        "},{"location":"ja/resources/tutorials-and-webinars/#kubernetes101","title":"Kubernetes\u30a6\u30a7\u30d3\u30ca\u30fc101","text":"

        [\u30b9\u30e9\u30a4\u30c9]

        "},{"location":"ja/resources/tutorials-and-webinars/#kubernetes102","title":"Kubernetes\u30a6\u30a7\u30d3\u30ca\u30fc102","text":"

        [\u30b9\u30e9\u30a4\u30c9]

        "},{"location":"ja/resources/tutorials-and-webinars/#11000","title":"\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9:\u79c1\u305f\u3061\u304c\u6708\u306b1\u51041000\u4e07\u56de\u30d2\u30c3\u30c8\u3059\u308b\u5206\u96e2\u578b\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3092\u904b\u55b6\u3059\u308b\u65b9\u6cd5","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoondrupaldocker","title":"Lagoon:\u30d5\u30ebDrupal\u30b5\u30dd\u30fc\u30c8\u4ed8\u304d\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9Docker\u30d3\u30eb\u30c9\uff06\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0","text":""},{"location":"ja/resources/tutorials-and-webinars/#kibana","title":"Kibana\u3067\u5185\u90e8\u30b5\u30fc\u30d0\u30fc\u30a8\u30e9\u30fc\u3092\u4fee\u6b63\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#_2","title":"\u65b0\u3057\u3044\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#_3","title":"\u30d3\u30eb\u30c9\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u306f\u3069\u306e\u3088\u3046\u306b\u78ba\u8a8d\u3057\u307e\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoon_2","title":"Lagoon\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#_4","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#_5","title":"\u30af\u30ed\u30f3\u30b8\u30e7\u30d6\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#kubernetesweb-toby-bellwood-techweek21","title":"Kubernetes\u306bWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b - Toby Bellwood | Techweek21\u30c8\u30fc\u30af","text":""},{"location":"ja/resources/tutorials-and-webinars/#covid-19-sean-hamlin-techweek21","title":"Covid-19\u4e2d\u306b\u524d\u4f8b\u306e\u306a\u3044\u898f\u6a21\u3067\u5bfe\u51e6\u3059\u308b - Sean Hamlin| Techweek21\u30c8\u30fc\u30af","text":""},{"location":"ja/resources/tutorials-and-webinars/#silverstripe-on-lagoon-thom-toogood-techweek21","title":"\u30ed\u30fc\u30ab\u30eb\u304b\u3089\u30e9\u30a4\u30d6\u3078\u306eSilverstripe on Lagoon -Thom Toogood | Techweek21\u30c8\u30fc\u30af","text":""},{"location":"ja/using-lagoon-advanced/","title":"Lagoon\u306e\u9ad8\u5ea6\u306a\u4f7f\u3044\u65b9","text":"

        \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Lagoon\u306e\u3088\u308a\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3084\u7279\u5fb4\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002Lagoon\u304c\u521d\u3081\u3066\u306e\u65b9\u306f\u3001\u307e\u305aLagoon\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u304b\u3089\u59cb\u3081\u3066\u304f\u3060\u3055\u3044\u3002

        \u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001\u79c1\u305f\u3061\u306eDiscord\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30e1\u30f3\u30d0\u30fc\u3084\u30e1\u30f3\u30c6\u30ca\u30fc\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-advanced/active-standby/#_1","title":"\u8a2d\u5b9a","text":"

        \u65e2\u5b58\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092Active/Standby\u306b\u5bfe\u5fdc\u3055\u305b\u308b\u305f\u3081\u306b\u306f\u3001Lagoon API\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u3092\u3044\u304f\u3064\u304b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        • productionEnviromment\u306f\u3001\u73fe\u5728\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u74b0\u5883\u306e\u30d6\u30e9\u30f3\u30c1\u540d\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
        • standbyProductionEnvironment\u306f\u3001\u73fe\u5728\u30b9\u30bf\u30f3\u30d0\u30a4\u4e2d\u306e\u74b0\u5883\u306e\u30d6\u30e9\u30f3\u30c1\u540d\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u306e\u66f4\u65b0
        mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionEnvironment:\"production-brancha\"\nstandbyProductionEnvironment:\"production-branchb\"\n}\n}){\nstandbyProductionEnvironment\nname\nproductionEnvironment\n}\n}\n
        "},{"location":"ja/using-lagoon-advanced/active-standby/#lagoonyml-production_routes","title":".lagoon.yml - production_routes","text":"

        .lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092Active/Standby\u306b\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u306f\u3001active\u74b0\u5883\u306b\u30a2\u30bf\u30c3\u30c1\u3057\u305f\u3044\u30eb\u30fc\u30c8\u3068standby\u74b0\u5883\u306b\u30a2\u30bf\u30c3\u30c1\u3057\u305f\u3044\u30eb\u30fc\u30c8\u3092production_routes\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002Active/Standby\u306e\u5207\u308a\u66ff\u3048\u6642\u306b\u306f\u3001\u3053\u308c\u3089\u306e\u30eb\u30fc\u30c8\u306f2\u3064\u306e\u74b0\u5883\u9593\u3067\u79fb\u884c\u3057\u307e\u3059\u3002

        production-brancha\u3068production-branchb\u306e2\u3064\u306eproduction\u74b0\u5883\u304c\u3042\u308a\u3001\u73fe\u5728\u30a2\u30af\u30c6\u30a3\u30d6\u306aproduction\u74b0\u5883\u304cproduction-brancha\u3067\u3042\u308b\u5834\u5408\uff1a

        • production_routes.active\u914d\u4e0b\u306e\u30eb\u30fc\u30c8\u306fproduction-brancha\u306b\u5411\u304b\u308f\u305b\u307e\u3059\u3002
        • production_routes.standby\u914d\u4e0b\u306e\u30eb\u30fc\u30c8production-branchb\u306b\u5411\u304b\u308f\u305b\u307e\u3059\u3002

        Active/Standby\u306e\u5207\u308a\u66ff\u3048\u6642\u306b\u306f\u3001\u30eb\u30fc\u30c8\u304c\u5165\u308c\u66ff\u308f\u308a\u307e\u3059:

        • production_routes.active\u914d\u4e0b\u306e\u30eb\u30fc\u30c8\u306fproduction-branchb\u306b\u5411\u304b\u308f\u305b\u307e\u3059\u3002
        • production_routes.standby\u914d\u4e0b\u306e\u30eb\u30fc\u30c8\u306fproduction-brancha\u306b\u5411\u304b\u308f\u305b\u307e\u3059\u3002
        .lagoon.yml
        production_routes:\nactive:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'false'\n- active.example.com:\ntls-acme: 'false'\nstandby:\nroutes:\n- nginx:\n- standby.example.com:\ntls-acme: 'false'\n

        \u60c5\u5831

        environments..routes\u30bb\u30af\u30b7\u30e7\u30f3\u914d\u4e0b\u306b\u3042\u308b\u30eb\u30fc\u30c8\u306f\u3001Active/Standby\u306e\u4e00\u90e8\u3068\u3057\u3066\u79fb\u52d5\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u3089\u306e\u30eb\u30fc\u30c8\u306f\u5e38\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u306b\u30a2\u30bf\u30c3\u30c1\u3055\u308c\u307e\u3059\u3002Active/Standby\u306e\u5207\u308a\u66ff\u3048\u4e2d\u306b\u7279\u5b9a\u306e\u30eb\u30fc\u30c8\u3092\u79fb\u884c\u3059\u308b\u5fc5\u7528\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u3092\u74b0\u5883\u30bb\u30af\u30b7\u30e7\u30f3\u304b\u3089\u524a\u9664\u3057\u3001Active\u307e\u305f\u306f\u3001Standby\u30eb\u30fc\u30c8\u56fa\u6709\u306eproduction_routes \u30bb\u30af\u30b7\u30e7\u30f3\u306b\u914d\u7f6e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 .lagoon.yml \u306e\u30eb\u30fc\u30c8\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u306f\u3053\u3061\u3089\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-advanced/active-standby/#_2","title":"\u5207\u308a\u66ff\u3048\u30a4\u30d9\u30f3\u30c8\u306e\u30c8\u30ea\u30ac\u30fc","text":""},{"location":"ja/using-lagoon-advanced/active-standby/#ui","title":"UI\u7d4c\u7531","text":"

        \u74b0\u5883\u30eb\u30fc\u30c8\u306e\u5207\u308a\u66ff\u3048\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u306b\u306f\u3001Lagoon UI\u3067Standby\u74b0\u5883\u3092\u8a2a\u308c\u3001Switch Active/Standby environments\u3068\u3044\u3046\u30e9\u30d9\u30eb\u306e\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u78ba\u8a8d\u3059\u308b\u3088\u3046\u306b\u6c42\u3081\u3089\u308c\u307e\u3059\u3002

        \u78ba\u8a8d\u3059\u308b\u3068\u3001\u30bf\u30b9\u30af\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u3001\u5207\u308a\u66ff\u3048\u306e\u9032\u6357\u72b6\u6cc1\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/active-standby/#api","title":"API\u7d4c\u7531","text":"

        \u74b0\u5883\u3092\u5207\u308a\u66ff\u3048\u308b\u30a4\u30d9\u30f3\u30c8\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u306b\u306f\u3001\u6b21\u306eGraphQL mutation\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u304c\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3057\u307e\u3059\u3002

        \u30a2\u30af\u30c6\u30a3\u30d6\u30b9\u30bf\u30f3\u30d0\u30a4\u30b9\u30a4\u30c3\u30c1
        mutation ActiveStandby {\nswitchActiveStandby(\ninput:{\nproject:{\nname:\"drupal-example\"\n}\n}\n){\nid\nremoteId\n}\n}\n

        \u5207\u308a\u66ff\u3048\u30a4\u30d9\u30f3\u30c8\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u308b\u3068\u3001\u73fe\u5728\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u74b0\u5883\u306e tasks \u30bf\u30d6\u306b\u30bf\u30b9\u30af\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u3053\u3067\u5207\u308a\u66ff\u3048\u306e\u72b6\u614b\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        remoteId \u3092\u4f7f\u7528\u3057\u3066\u3001switchActiveStandby mutation\u304b\u3089\u30bf\u30b9\u30af\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

        \u30bf\u30b9\u30af\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u78ba\u8a8d
        query getTask {\ntaskByRemoteId(id: \"<remoteId>\") {\nid\nname\ncreated\nstarted\ncompleted\nstatus\nlogs\n}\n}\n
        "},{"location":"ja/using-lagoon-advanced/active-standby/#drush","title":"drush\u30a8\u30a4\u30ea\u30a2\u30b9","text":"

        \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u4ee5\u4e0b\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u304c\u4f5c\u6210\u3055\u308c\u3001Active/Standby\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u5834\u5408\u306b\u5229\u7528\u3067\u304d\u307e\u3059\u3002

        • lagoon-production
        • lagoon-standby

        lagoon-production\u30a8\u30a4\u30ea\u30a2\u30b9\u306fproductionEnvironment\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30b5\u30a4\u30c8\u3092\u6307\u3057\u3001lagoon-standby\u306f\u5e38\u306bstandbyProductionEnvironment\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30b5\u30a4\u30c8\u3092\u6307\u3057\u307e\u3059\u3002

        \u3053\u308c\u3089\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u66f4\u65b0\u306b\u3088\u3063\u3066\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u305d\u308c\u3089\u3092\u5909\u66f4\u3059\u308b\u3068\u3001\u305d\u308c\u3089\u306b\u4f9d\u5b58\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        Drush\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u66f4\u65b0
        mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionAlias:\"custom-lagoon-production-alias\"\nstandbyAlias:\"custom-lagoon-standby-alias\"\n}\n}){\nproductionAlias\nname\nstandbyAlias\n}\n}\n
        "},{"location":"ja/using-lagoon-advanced/active-standby/#activestandby_1","title":"Active/Standby\u306e\u7121\u52b9\u5316","text":"

        \u3053\u308c\u30892\u3064\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u3046\u3061\u3001\u3069\u3061\u3089\u3092\u4e3b\u306a\u74b0\u5883\u3068\u3057\u3066\u9032\u3081\u3066\u3044\u304f\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001 \u305d\u308c\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d6\u30e9\u30f3\u30c1\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002(\u4f8b:production-branchb)

        1. \u3053\u306e\u73fe\u5728\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d6\u30e9\u30f3\u30c1\u306e.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u3001production_routes.active.routes\u30bb\u30af\u30b7\u30e7\u30f3\u304b\u3089\u30eb\u30fc\u30c8\u3092environments.production-branchb\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u305d\u306e\u30eb\u30fc\u30c8\u304cproduction-branchb environment\u306b\u306e\u307f\u95a2\u9023\u4ed8\u3051\u3089\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002
        2. \u3053\u308c\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u5b8c\u5168\u306bproduction_routes\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u524a\u9664\u3057\u3001production-branchb\u74b0\u5883\u3092\u518d\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u307e\u3059\u3002
        3. \u3082\u30461\u3064\u306e\u30d6\u30e9\u30f3\u30c1\u3067\u3042\u308bproduction-brancha\u304c\u5fc5\u8981\u306a\u3044\u5834\u5408\u306f\u524a\u9664\u3057\u3066\u3082\u304b\u307e\u3044\u307e\u305b\u3093\u3002
        4. Git\u306b\u30d6\u30e9\u30f3\u30c1\u3092\u4fdd\u6301\u3059\u308b\u5834\u5408\u3001\u6df7\u4e71\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u306e.lagoon.yml\u304b\u3089\u3082production_routes\u3092\u524a\u9664\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u30d6\u30e9\u30f3\u30c1\u306f\u524a\u9664\u3057\u3066\u518d\u30c7\u30d7\u30ed\u30a4(\u3059\u3079\u3066\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306a\u3069\u3092\u6d88\u53bb)\u3059\u308b\u307e\u3067production\u30bf\u30a4\u30d7\u3068\u3057\u3066\u6b8b\u308a\u307e\u3059\u3002
        5. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304cproduction-branchb\u306eproduction\u74b0\u5883\u306e\u307f\u3067\u3001\u4ed6\u306e\u3059\u3079\u3066\u306e\u74b0\u5883\u304cdevelopment\u74b0\u5883\u3067\u3042\u308b\u72b6\u614b\u306b\u306a\u3063\u305f\u3089\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3057\u3066standbyProductionEnvironment\u3092\u524a\u9664\u3057\u3001\u74b0\u5883\u306eActive/Standby\u30e9\u30d9\u30eb\u3092\u6d88\u53bb\u3057\u307e\u3059\u3002
        \u30a2\u30af\u30c6\u30a3\u30d6/\u30b9\u30bf\u30f3\u30d0\u30a4\u3092\u30aa\u30d5\u306b\u3059\u308b
        mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionEnvironment:\"production-branchb\"\nstandbyProductionEnvironment:\"\"\n}\n}){\nstandbyProductionEnvironment\nname\nproductionEnvironment\n}\n}\n
        "},{"location":"ja/using-lagoon-advanced/active-standby/#_3","title":"\u30ce\u30fc\u30c8","text":"

        Active/Standby\u30c8\u30ea\u30ac\u30fc\u304c\u5b9f\u884c\u3055\u308c\u305f\u3068\u304d\u3001productionEnvironment\u3068standbyProductionEnvironments\u306fLagoon API\u5185\u3067\u5207\u308a\u66ff\u308f\u308a\u307e\u3059\u3002\u4e21\u65b9\u306e\u74b0\u5883\u306f\u307e\u3060production\u74b0\u5883\u30bf\u30a4\u30d7\u3068\u3057\u3066\u5206\u985e\u3055\u308c\u3066\u3044\u307e\u3059\u3002productionEnvironment\u306f\u3069\u3061\u3089\u304cactive\u3068\u30e9\u30d9\u30eb\u4ed8\u3051\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002\u74b0\u5883\u30bf\u30a4\u30d7\u306e\u9055\u3044\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3001environment types\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

        GraphQL\u3092\u4f7f\u3063\u3066\u74b0\u5883\u3092\u53d6\u5f97\u3059\u308b
        query projectByName {\nprojectByName(name:\"drupal-example\"){\nproductionEnvironment\nstandbyProductionEnvironment\n}\n}\n

        \u74b0\u5883\u3092\u5207\u308a\u66ff\u3048\u308b\u524d

        \u74b0\u5883\u30af\u30a8\u30ea\u306e\u7d50\u679c
        {\n\"data\": {\n\"projectByName\": {\n\"productionEnvironment\": \"production-brancha\",\n\"standbyProductionEnvironment\": \"production-branchb\"\n}\n}\n}\n

        \u74b0\u5883\u3092\u5207\u308a\u66ff\u3048\u305f\u5f8c

        \u74b0\u5883\u30af\u30a8\u30ea\u306e\u7d50\u679c
        {\n\"data\": {\n\"projectByName\": {\n\"productionEnvironment\": \"production-branchb\",\n\"standbyProductionEnvironment\": \"production-brancha\"\n}\n}\n}\n
        "},{"location":"ja/using-lagoon-advanced/blackfire/","title":"\u30d6\u30e9\u30c3\u30af\u30d5\u30a1\u30a4\u30a2","text":""},{"location":"ja/using-lagoon-advanced/blackfire/#blackfire","title":"Blackfire\u306e\u5909\u6570","text":"

        Lagoon Base Images\u306b\u306f\u3001PHP Images\u306bBlackfire\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002(PHP images\u3092\u53c2\u7167)

        Lagoon\u3067Blackfire\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e3\u3064\u306e\u74b0\u5883\u5909\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e BLACKFIRE_ENABLED (\u8a2d\u5b9a\u306a\u3057) TRUE\u307e\u305f\u306ftrue\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067blackfire\u62e1\u5f35\u3092\u6709\u52b9\u306b\u3059\u308b\u3002 BLACKFIRE_SERVER_ID (\u8a2d\u5b9a\u306a\u3057) Blackfire.io\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308bBlackfire Server ID\u306b\u8a2d\u5b9a\u3059\u308b\u3002BLACKFIRE_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002 BLACKFIRE_SERVER_TOKEN (\u8a2d\u5b9a\u306a\u3057) Blackfire.io\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308bBlackfire Server Token\u306b\u8a2d\u5b9a\u3059\u308b\u3002BLACKFIRE_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002"},{"location":"ja/using-lagoon-advanced/blackfire/#blackfire_1","title":"Blackfire\u306e\u30ed\u30fc\u30ab\u30eb\u4f7f\u7528","text":"

        Lagoon Images\u3067Blackfire\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u4e0a\u8a18\u306e\u74b0\u5883\u5909\u6570\u3092PHP\u30b3\u30f3\u30c6\u30ca\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306fDrupal\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f8b\u3067\u3059\u3002

        docker-compose.yml
        services:\n[[snip]]\nphp:\n[[snip]]\nenvironment:\n<< : *default-environment # \u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u3092\u4e0a\u304b\u3089\u8aad\u307f\u8fbc\u3080\nBLACKFIRE_ENABLED: TRUE\nBLACKFIRE_SERVER_ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\nBLACKFIRE_SERVER_TOKEN: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n

        \u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3057\u305f\u5f8c\u3001Blackfire\u30d6\u30e9\u30a6\u30b6\u30d7\u30e9\u30b0\u30a4\u30f3\u307e\u305f\u306fBlackfire CLI\u3092\u901a\u3058\u3066\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/blackfire/#blackfire_2","title":"Blackfire\u306e\u30ea\u30e2\u30fc\u30c8\u4f7f\u7528","text":"

        \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305fLagoon\u74b0\u5883\u3067Blackfire\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u540c\u3058\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u6642\u3001Lagoon\u306b\u74b0\u5883\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u65b9\u6cd5\u3067\u8a2d\u5b9a\u3057\u307e\u3059\u3002

        \u91cd\u8981

        \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u7528\u306bdocker-compose.yml\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u306fLagoon\u306e\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\uff01

        "},{"location":"ja/using-lagoon-advanced/blackfire/#_2","title":"\u30c7\u30d0\u30c3\u30b0","text":"

        PHP\u30b3\u30f3\u30c6\u30ca\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308bBlackfire\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306f\u3001\u901a\u5e38\u306e\u30b3\u30f3\u30c6\u30ca\u30ed\u30b0\u3068\u3057\u3066\u30ed\u30b0\u3092\u51fa\u529b\u3057\u307e\u3059\u3002\u3053\u308c\u306fdocker-compose logs\u307e\u305f\u306f\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u306eLagoon Logging Infrastructure\u3092\u901a\u3058\u3066\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u30ed\u30b0\u306f\u30ec\u30d9\u30eb3(\u60c5\u5831)\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u74b0\u5883\u5909\u6570BLACKFIRE_LOG_LEVEL\u3092\u4f7f\u3063\u3066\u30ec\u30d9\u30eb\u30924(\u30c7\u30d0\u30c3\u30b0)\u306b\u4e0a\u3052\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u591a\u304f\u306e\u60c5\u5831\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/","title":"\u30ab\u30b9\u30bf\u30e0\u30bf\u30b9\u30af","text":"

        Lagoon\u3067\u306f\u3001\u74b0\u5883\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u30ec\u30d9\u30eb\u3067\u30ab\u30b9\u30bf\u30e0\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u73fe\u5728\u3001\u3053\u308c\u306fGraphQL API\u3092\u901a\u3058\u3066\u884c\u308f\u308c\u3001UI\u3067\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_2","title":"\u30ab\u30b9\u30bf\u30e0\u30bf\u30b9\u30af\u306e\u5b9a\u7fa9","text":"

        \u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u969b\u306b\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u3092\u6c7a\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_3","title":"\u3069\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3057\u307e\u3059\u304b\uff1f","text":"

        \u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001\u5b9f\u884c\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u30bf\u30b9\u30af\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30f3\u30c6\u30ca\u306e\u4e00\u3064\u3067\u30b7\u30a7\u30eb\u304b\u3089\u5b9f\u884c\u3055\u308c\u308b\u3082\u306e\u3067\u3059\u3002

        \u4f8b\u3048\u3070\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001node\u30b3\u30f3\u30c6\u30ca\u3067yarn audit\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306b\u8208\u5473\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u306e\u5834\u5408\u30b3\u30de\u30f3\u30c9\u306f\u5358\u7d14\u306byarn audit\u3068\u306a\u308a\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_4","title":"\u3053\u306e\u30bf\u30b9\u30af\u306f\u3069\u3053\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u304b\uff1f","text":"

        \u3053\u306e\u30bf\u30b9\u30af\u304c\u3069\u3053\u3067\u5b9f\u884c\u3055\u308c\u308b\u304b\u3092\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u4e8c\u3064\u306e\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u307e\u305a\u3001\u3069\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u74b0\u5883\u3067\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u304b\u3001\u305d\u3057\u3066\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u884c\u3046\u304b\u3067\u3059\u3002

        \u305f\u3068\u3048\u3070\u3001yarn audit\u30bf\u30b9\u30af\u3092\u7279\u5b9a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8(\u3053\u306e\u4f8b\u3067\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eID\u309242\u3068\u3057\u307e\u3057\u3087\u3046)\u306e\u4efb\u610f\u306e\u74b0\u5883\u3067\u5b9f\u884c\u53ef\u80fd\u306b\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u308b\u3068\u3057\u307e\u3057\u3087\u3046\u3002\u30bf\u30b9\u30af\u5b9a\u7fa9\u3092\u4f5c\u6210\u3059\u308b\u969b\u306b\u306f\u3001\u4e0b\u8a18\u3067\u8aac\u660e\u3059\u308b\u3088\u3046\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eID\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

        2\u3064\u76ee\u306e\u8cea\u554f\u306f\u3001\u3069\u306e\u74b0\u5883\u3092\u30bf\u30b9\u30af\u306e\u5bfe\u8c61\u3068\u3059\u308b\u304b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u969b\u306bdocker-compose.yml\u3067\u3044\u304f\u3064\u304b\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u540d\u3092\u4f7f\u7528\u3057\u3066\u30b3\u30de\u30f3\u30c9\u304c\u5b9f\u969b\u306b\u3069\u3053\u3067\u5b9f\u884c\u3055\u308c\u308b\u304b\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_5","title":"\u3053\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3067\u304d\u308b\u306e\u306f\u8ab0\u3067\u3059\u304b\uff1f","text":"

        \u30bf\u30b9\u30af\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ed\u30fc\u30eb\u306b\u5bfe\u5fdc\u3057\u305f3\u3064\u306e\u30ec\u30d9\u30eb\u304c\u3042\u308a\u307e\u3059\u3002\u30b2\u30b9\u30c8\u3001\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u3001\u30e1\u30f3\u30c6\u30ca\u30fc\u3067\u3059\u3002\u6700\u3082\u5236\u9650\u7684\u306a\u3082\u306e\u304b\u3089\u6700\u3082\u5236\u9650\u306e\u5c11\u306a\u3044\u3082\u306e\u307e\u3067\u3001\u5404\u30ed\u30fc\u30eb\u306f\u305d\u308c\u3088\u308a\u4e0b\u306e\u30ed\u30fc\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30bf\u30b9\u30af\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059(\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u306f\u30b2\u30b9\u30c8\u306e\u30bf\u30b9\u30af\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u30e1\u30f3\u30c6\u30ca\u30fc\u306f\u3059\u3079\u3066\u306e\u30bf\u30b9\u30af\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_6","title":"\u30bf\u30b9\u30af\u306e\u5b9a\u7fa9","text":"

        \u30bf\u30b9\u30af\u306faddAdvancedTaskDefinition\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u3067\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u91cd\u8981\u306a\u3053\u3068\u306f\u3001\u3053\u308c\u306f\u5358\u306b\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u3060\u3051\u3067\u547c\u3073\u51fa\u3059\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u5358\u306b\u305d\u308c\u3092\u74b0\u5883\u3067\u5b9f\u884c\u53ef\u80fd\u306b\u3059\u308b\u3060\u3051\u3067\u3059\u3002

        \u6982\u5ff5\u7684\u306b\u306f\u547c\u3073\u51fa\u3057\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

        \u65b0\u3057\u3044\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b
        mutation addAdvancedTask {\naddAdvancedTaskDefinition(input:{\nname: string,\nconfirmationText: string,\ntype: [COMMAND|IMAGE],\n[project|environment]: int,\ndescription: string,\nservice: string,\ncommand: string,\nadvancedTaskDefinitionArguments: [\n{\nname: \"ENVIROMENT_VARIABLE_NAME\",\ndisplayName: \"Friendly Name For Variable\",\ntype: [STRING | ENVIRONMENT_SOURCE_NAME | ENVIRONMENT_SOURCE_NAME_EXCLUDE_SELF]\n}\n]\n}) {\n... on AdvancedTaskDefinitionImage {\nid\nname\ndescription\nservice\nimage\nconfirmationText\nadvancedTaskDefinitionArguments {\ntype\nrange\nname\ndisplayName\n}\n...\n}\n... on AdvancedTaskDefinitionCommand {\nid\nname\ndescription\nservice\ncommand\nadvancedTaskDefinitionArguments {\ntype\nrange\nname\ndisplayName\n}\n...\n}\n}\n}\n

        \u30d5\u30a3\u30fc\u30eb\u30c9name\u3068description\u306f\u7c21\u5358\u3067\u3059\u3002\u3053\u308c\u3089\u306f\u4e3b\u306bUI\u3067\u4f7f\u7528\u3055\u308c\u308b\u30bf\u30b9\u30af\u306e\u540d\u524d\u3068\u8aac\u660e\u3067\u3059\u3002

        type\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u3064\u3044\u3066\u306f\u8aac\u660e\u304c\u5fc5\u8981\u3067\u3059\u3002\u73fe\u6642\u70b9\u3067\u306f\u3001\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u7ba1\u7406\u8005\u306e\u307f\u304cIMAGE\u30bf\u30a4\u30d7\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u65e2\u5b58\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5bfe\u8c61\u306b\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u7279\u5b9a\u306e\u30bf\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u3092\u30bf\u30b9\u30af\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u307b\u3068\u3093\u3069\u306e\u30bf\u30b9\u30af\u306fCOMMAND\u30bf\u30a4\u30d7\u3067\u3059\u3002

        [project|environment]\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30bb\u30c3\u30c8\u306f\u3001\u30bf\u30b9\u30af\u3092project\u307e\u305f\u306fenvironment\u306b\u95a2\u9023\u4ed8\u3051\u308b(\u4f7f\u7528\u3059\u308b\u30ad\u30fc\u306b\u3088\u308a\u307e\u3059)\u3053\u3068\u3067\u3001\u305d\u306e\u5024\u304cid\u306b\u306a\u308a\u307e\u3059\u3002 \u79c1\u305f\u3061\u304cyarn audit\u306e\u305f\u3081\u306b\u8003\u3048\u3066\u3044\u308b\u30b1\u30fc\u30b9\u3067\u306f\u3001ID\u304c42\u306eproject\u3092\u5bfe\u8c61\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u660e\u793a\u3057\u307e\u3059\u3002

        \u79c1\u305f\u3061\u304c\u30bf\u30b9\u30af\u3067\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u3092service\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u7f6e\u304d\u3001command\u306f\u79c1\u305f\u3061\u304c\u5b9f\u884c\u3057\u305f\u3044\u5b9f\u969b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_7","title":"\u30bf\u30b9\u30af\u306b\u6e21\u3055\u308c\u308b\u5f15\u6570","text":"

        Lagoon UI\u7d4c\u7531\u3067\u30bf\u30b9\u30af\u3092\u547c\u3073\u51fa\u3059\u30e6\u30fc\u30b6\u30fc\u306b\u67d4\u8edf\u6027\u3092\u4e0e\u3048\u308b\u305f\u3081\u306b\u3001\u30bf\u30b9\u30af\u5f15\u6570\u306e\u5b9a\u7fa9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5f15\u6570\u306f\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u307e\u305f\u306f\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u3001\u30bf\u30b9\u30af\u3092\u547c\u3073\u51fa\u3059\u305f\u3081\u306b\u5fc5\u8981\u3067\u3059\u3002

        \u4ee5\u4e0b\u306f\u30012\u3064\u306e\u5f15\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\u306e\u4f8b\u3067\u3059\u3002

        \u30bf\u30b9\u30af\u5f15\u6570\u306e\u5b9a\u7fa9
        advancedTaskDefinitionArguments: [\n{\nname: \"ENV_VAR_NAME_SOURCE\",\ndisplayName: \"Environment source\",\ntype: ENVIRONMENT_SOURCE_NAME\n},\n{\nname: \"ENV_VAR_NAME_STRING\",\ndisplayName: \"Echo value\",\ntype: STRING\n}\n]\n})\n

        \u3053\u306e\u30d5\u30e9\u30b0\u30e1\u30f3\u30c8\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u304c\u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u4e21\u65b9\u306e\u30bf\u30a4\u30d7\u306e\u5f15\u6570\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002 \u6700\u521d\u306eENV_VAR_NAME_SOURCE\u306fENVIRONMENT_SOURCE_NAME\u30bf\u30a4\u30d7\u306e\u4f8b\u3067\u3001UI\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u7570\u306a\u308b\u74b0\u5883\u306e\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u3092\u63d0\u793a\u3057\u307e\u3059\u3002\u30bf\u30b9\u30af\u304c\u8d77\u52d5\u3057\u305f\u74b0\u5883\u3067\u5b9f\u884c\u3055\u308c\u308b\u306e\u3092\u8a31\u53ef\u3057\u305f\u304f\u306a\u3044\u5834\u5408(\u4f8b\u3048\u3070\u3001\u4ed6\u306e\u74b0\u5883\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u5834\u5408\u306a\u3069)\u306fENVIRONMENT_SOURCE_NAME_EXCLUDE_SELF\u3092\u4f7f\u7528\u3057\u3066\u74b0\u5883\u30ea\u30b9\u30c8\u3092\u5236\u9650\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u4e8c\u3064\u76ee\u306eENV_VAR_NAME_STRING\u306fSTRING\u578b\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u3092\u8a18\u5165\u3059\u308b\u3088\u3046\u306b\u4fc3\u3057\u307e\u3059\u3002

        \u30e6\u30fc\u30b6\u30fc\u304c\u9078\u629e\u3057\u305f\u5024\u306f\u3001\u30bf\u30b9\u30af\u304c\u5b9f\u884c\u3055\u308c\u305f\u3068\u304d\u306bCOMMAND\u578b\u306e\u30bf\u30b9\u30af\u3067\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_8","title":"\u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u30bf\u30b9\u30af","text":"

        \u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u30bf\u30b9\u30af\u3092\u767b\u9332\u3067\u304d\u308b\u306e\u306fLagoon\u306e\u7ba1\u7406\u8005\u306e\u307f\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u30bf\u30b9\u30af\u306f\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u8868\u793a\u3055\u308c\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u6301\u3064\u6a29\u9650\u306b\u3088\u3063\u3066\u5236\u9650\u3055\u308c\u307e\u3059\u3002

        \u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u30bf\u30b9\u30af\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u306f\u3001\u4ed6\u306e\u30bf\u30b9\u30af\u30bf\u30a4\u30d7\u3068\u307b\u307c\u540c\u3058\u3067\u3059\u304c\u30012\u3064\u306e\u4f8b\u5916\u304c\u3042\u308a\u307e\u3059\u3002

        \u307e\u305a\u3001addAdvancedTaskDefinition\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u4e2d\u3067systemWide: true\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002

        \u6b21\u306b\u3001groupName\u3001project\u3001environment\u3092\u6307\u5b9a\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u305f\u3081\u3001\u6307\u5b9a\u3059\u308b\u3068\u76ee\u7684\u3092\u9038\u8131\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_9","title":"\u78ba\u8a8d","text":"

        confirmationText\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308b\u3068\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u524d\u306b\u3001UI\u306b\u78ba\u8a8d\u30e2\u30fc\u30c0\u30eb\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_10","title":"\u30bf\u30b9\u30af\u306e\u547c\u3073\u51fa\u3057","text":"

        \u30bf\u30b9\u30af\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3068\u3001\u30bf\u30b9\u30af\u306fLagoon UI\u306e\u30bf\u30b9\u30af\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u306b\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002

        \u307e\u305f\u3001invokeTask \u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066GraphQL api\u304b\u3089\u3082\u547c\u3073\u51fa\u3059\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

        \u30bf\u30b9\u30af\u306e\u547c\u3073\u51fa\u3057
        mutation invokeTask {\ninvokeRegisteredTask(advancedTaskDefinition: int, environment: int) {\nstatus\n}\n}\n

        invokeTask\u306f\u5e38\u306b\u7279\u5b9a\u306e\u74b0\u5883\u3067\u30bf\u30b9\u30af\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_11","title":"\u4f8b","text":"

        \u3067\u306f\u3001yarn audit\u306e\u4f8b\u3092\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002

        \u30bf\u30b9\u30af\u5b9a\u7fa9\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3
        mutation runYarnAudit {\naddAdvancedTaskDefinition(input:{\nname:\"Run yarn audit\",\nproject: 42,\ntype:COMMAND,\npermission:DEVELOPER,\ndescription: \"Runs a 'yarn audit'\",\nservice:\"node\",\ncommand: \"yarn audit\"})\n{\nid\n}\n}\n

        \u3053\u308c\u306b\u3088\u308a\u3001\u79c1\u305f\u3061\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8(42)\u306e\u30bf\u30b9\u30af\u304c\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30bf\u30b9\u30af\u5b9a\u7fa9\u306eID\u304c\u8fd4\u3055\u308c\u307e\u3059(\u4f8b\u3048\u3070\u30019\u3068\u3057\u307e\u3059)

        \u3053\u306e\u30bf\u30b9\u30af\u306f\u3001DEVELOPER\u307e\u305f\u306fMAINTAINER\u306e\u5f79\u5272\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u304cUI\u304b\u3089\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/deploytarget-configs/","title":"DeployTarget\u8a2d\u5b9a","text":"

        DeployTarget\u8a2d\u5b9a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u8907\u6570\u306e\u30af\u30e9\u30b9\u30bf\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u65b9\u6cd5\u3092\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306f\u3001\u672c\u756a\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5c02\u7528\u306e\u30af\u30e9\u30b9\u30bf\u3068\u3001\u958b\u767a\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u5225\u306e\u30af\u30e9\u30b9\u30bf\u304c\u3042\u308b\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002

        \u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306f\u3001\u5358\u306b\u672c\u756a/\u958b\u767a\u306e\u5206\u5272\u306b\u9650\u5b9a\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u306a\u3044\u305f\u3081\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u30bf\u3092\u8907\u6570\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3067\u304d\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

        DeployTarget\u8a2d\u5b9a\u306e\u57fa\u672c\u7684\u306a\u8003\u3048\u65b9\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u8907\u6570\u306e\u30af\u30e9\u30b9\u30bf\u9593\u3067\u3069\u306e\u3088\u3046\u306b\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u308b\u304b\u3092\u7c21\u5358\u306b\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u3067\u3042\u308a\u3001\u74b0\u5883\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3059\u308b\u65e2\u5b58\u306e\u65b9\u6cd5\u3092\u5229\u7528\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/deploytarget-configs/#_1","title":"\u91cd\u8981\u306a\u60c5\u5831","text":"

        DeployTarget\u8a2d\u5b9a\u3092\u5229\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3059\u308b\u524d\u306b\u3001\u77e5\u3063\u3066\u304a\u304f\u3079\u304d\u3053\u3068\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059\u3002

        1. \u74b0\u5883\u306b\u306f\u3069\u306eDeployTarget(Kubernetes\u307e\u305f\u306fOpenShift)\u3067\u4f5c\u6210\u3055\u308c\u305f\u304b\u3092\u8b58\u5225\u3059\u308b\u305f\u3081\u306e\u65b0\u305f\u306a2\u3064\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\u3002

          1. kubernetesNamespacePattern
          2. kubernetes
        2. \u7279\u5b9a\u306eDeployTarget\u306b\u4e00\u5ea6\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u74b0\u5883\u306f\u3001DeployTarget\u8a2d\u5b9a\u3084\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u3066\u3082\u3001\u5e38\u306b\u3053\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002

          1. \u3053\u308c\u306b\u3088\u308aDeployTarget\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u3066\u3082\u3001\u7570\u306a\u308b\u30af\u30e9\u30b9\u30bf\u3067\u65b0\u3057\u3044\u74b0\u5883\u304c\u4f5c\u6210\u3055\u308c\u308b\u3053\u3068\u304c\u306a\u304f\u306a\u308a\u3001\u65e2\u5b58\u306e\u74b0\u5883\u306b\u5bfe\u3057\u3066\u4e00\u5b9a\u306e\u5b89\u5168\u6027\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002
          2. \u3053\u308c\u306fLagoon\u306e\u65b0\u6a5f\u80fd\u3067\u3042\u308a\u3001DeployTarget\u8a2d\u5b9a\u306b\u7279\u5316\u3055\u308c\u305f\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
        3. \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bDeployTarget\u306e\u8a2d\u5b9a\u304c\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u305d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u65e2\u5b58\u306e\u65b9\u6cd5\u3092\u4f7f\u7528\u3057\u3066\u3069\u306e\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u304b\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          1. branches
          2. pullrequests
          3. kubernetesNamespacePattern
          4. kubernetes
        4. DeployTarget\u306e\u8a2d\u5b9a\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u308b\u3068\u3001\u4eca\u5f8c\u3059\u3079\u3066\u306e\u30c7\u30d7\u30ed\u30a4\u306f\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u306f\u7121\u8996\u3055\u308c\u3001DeployTarget\u306e\u8a2d\u5b9a\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u901a\u77e5\u3059\u308b\u305f\u3081\u306b\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002

        5. DeployTarget\u306e\u8a2d\u5b9a\u306f\u91cd\u307f\u4ed8\u3051\u3055\u308c\u3066\u304a\u308a\u3001\u3053\u308c\u306f\u5927\u304d\u3044\u91cd\u307f\u306eDeployTarget\u8a2d\u5b9a\u304c\u5c0f\u3055\u3044\u91cd\u307f\u306e\u3082\u306e\u3088\u308a\u512a\u5148\u3055\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

          1. \u30af\u30a8\u30ea\u3067\u8fd4\u3055\u308c\u308b\u9806\u5e8f\u304c\u3001\u74b0\u5883\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3079\u304d\u5834\u6240\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u9806\u5e8f\u3067\u3059\u3002
        6. Active/Standby\u74b0\u5883\u306f\u3001\u540c\u3058\u30af\u30e9\u30b9\u30bf\u306a\u306e\u3067\u3001DeployTarget\u8a2d\u5b9a\u306f\u305d\u308c\u3089\u306e\u74b0\u5883\u3092\u540c\u3058\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        7. Lagoon\u306epromote\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u3001DeployTarget\u8a2d\u5b9a\u304cdestination\u74b0\u5883\u3067\u306f\u7121\u8996\u3055\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          1. \u30c7\u30a3\u30b9\u30c6\u30a3\u30cd\u30fc\u30b7\u30e7\u30f3\u74b0\u5883\u306f\u5e38\u306bsource\u74b0\u5883\u304c\u3042\u308b\u540c\u3058\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u306e\u3067\u3001DeployTarget\u8a2d\u5b9a\u306f\u3053\u306esource\u74b0\u5883\u306b\u5bfe\u3057\u3066\u6b63\u3057\u304f\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
          2. \u5b89\u5168\u306e\u305f\u3081\u3001source\u3068destination\u306e\u74b0\u5883\u3092\u540c\u3058DeployTarget\u8a2d\u5b9a\u306e\u30d6\u30e9\u30f3\u30c1\u6b63\u898f\u8868\u73fe\u3067\u5b9a\u7fa9\u3059\u308b\u306e\u304c\u30d9\u30b9\u30c8\u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/deploytarget-configs/#_2","title":"\u8a2d\u5b9a","text":"

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067DeployTarget\u8a2d\u5b9a\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u69cb\u6210\u3059\u308b\u306b\u306f\u3001\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

        \u4ee5\u4e0b\u306eGraphQL\u306e\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u7279\u5b9a\u306e\u4f8b\u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8ID 1\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bDeployTarget\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002 \u3053\u308c\u306b\u3088\u308a\u3001\u540d\u524d\u304cmain\u3068\u4e00\u81f4\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u306e\u307f\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u3001pullrequests\u306ffalse\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002 \u3053\u308c\u306f\u3001\u4ed6\u306e\u30d6\u30e9\u30f3\u30c1\u304c\u3053\u306e\u7279\u5b9a\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u305a\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3082\u3053\u306e\u7279\u5b9a\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002 deployTarget\u306fID 1\u3067\u3001\u3053\u308c\u306fKubernetes\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 \u7279\u5b9a\u306e\u5730\u57df\u3084\u7279\u5b9a\u306e\u7a2e\u985e\u306e\u30ef\u30fc\u30af\u30ed\u30fc\u30c9(\u88fd\u54c1\u7248\u307e\u305f\u306f\u958b\u767a\u7248)\u5411\u3051\u306b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

        DeployTarget\u306e\u8a2d\u5b9a
        mutation addDeployTargetConfig{\naddDeployTargetConfig(input:{\nproject: 1\nbranches: \"main\"\npullrequests: \"false\"\ndeployTarget: 1\nweight: 1\n}){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n

        \u60c5\u5831

        deployTarget\u306fLagoon API\u5185\u306eKubernetes\u307e\u305f\u306fOpenShift ID\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u3067\u3059

        \u307e\u305f\u3001\u8907\u6570\u306eDeployTarget\u8a2d\u5b9a\u3092\u69cb\u6210\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002

        \u4ee5\u4e0b\u306eGraphQL\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u4f8b\u3067\u306f\u3001\u4e0a\u8a18\u3068\u540c\u3058\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bDeployTarget\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

        \u3053\u308c\u306b\u3088\u308a\u3001^feature/|^(dev|test|develop)$ \u3068\u6b63\u898f\u8868\u73fe\u304c\u30de\u30c3\u30c1\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u306e\u307f\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002\u305d\u3057\u3066\u3001pullrequests \u306f true \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3059\u3079\u3066\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u3053\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5230\u9054\u3057\u307e\u3059\u3002

        \u3053\u306e\u4f8b\u3067\u306f\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u3068\u306a\u308b\u30af\u30e9\u30b9\u30bf\u306fID2\u3067\u3001main\u30d6\u30e9\u30f3\u30c1\u4e0a\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u3082\u306e\u3068\u306f\u5168\u304f\u7570\u306a\u308bKubernetes\u30af\u30e9\u30b9\u30bf\u3067\u3059\u3002

        DeployTarget\u306e\u8a2d\u5b9a
        mutation addDeployTargetConfig{\naddDeployTargetConfig(input:{\nproject: 1\nbranches: \"^feature/|^(dev|test|develop)$\"\npullrequests: \"true\"\ndeployTarget: 2\nweight: 1\n}){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n

        \u3053\u308c\u3089\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u3059\u3079\u3066\u306eDeployTarget\u8a2d\u5b9a\u3092\u8fd4\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        \u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u53d6\u5f97\u3059\u308b
        query deployTargetConfigsByProjectId{\ndeployTargetConfigsByProjectId(project:1){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n# result:\n{\n\"data\": {\n\"deployTargetConfigsByProjectId\": [\n{\n\"id\": 1,\n\"weight\": 1,\n\"branches\": \"main\",\n\"pullrequests\": \"false\",\n\"deployTargetProjectPattern\": null,\n\"deployTarget\": {\n\"name\": \"production-cluster\",\n\"id\": 1\n},\n\"project\": {\n\"name\": \"my-project\"\n}\n},\n{\n\"id\": 2,\n\"weight\": 1,\n\"branches\": \"^feature/|^(dev|test|develop)$\",\n\"pullrequests\": \"true\",\n\"deployTargetProjectPattern\": null,\n\"deployTarget\": {\n\"name\": \"development-cluster\",\n\"id\": 2\n},\n\"project\": {\n\"name\": \"my-project\"\n}\n}\n]\n}\n}\n
        "},{"location":"ja/using-lagoon-advanced/nodejs/","title":"Node.js\u306e\u30b0\u30ec\u30fc\u30b9\u30d5\u30eb\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3","text":"

        Node.js\u306b\u306f\u7d71\u5408\u3055\u308c\u305fWeb\u30b5\u30fc\u30d0\u30fc\u306e\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002\u3055\u3089\u306bExpress\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u62e1\u5f35\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        \u6b8b\u5ff5\u306a\u304c\u3089\u3001Node.js\u306f\u81ea\u8eab\u306e\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3092\u3046\u307e\u304f\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30b7\u30b9\u30c6\u30e0\u3067\u591a\u304f\u306e\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3057\u307e\u3059\u3002\u6700\u5927\u306e\u554f\u984c\u306f\u3001Node.js\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3059\u308b\u3088\u3046\u306b\u6307\u793a\u3055\u308c\u308b\u3068\u3001\u3059\u3079\u3066\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u63a5\u7d9a\u3092\u5373\u5ea7\u306b\u3092\u5f37\u5236\u7d42\u4e86\u3057\u9069\u5207\u306b\u505c\u6b62\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u3053\u3068\u3067\u3059\u3002

        \u3053\u306e\u30d1\u30fc\u30c8\u3067\u306f\u3001\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3057\u7d42\u3048\u3066\u304b\u3089\u3001\u9069\u5207\u306b\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3059\u308b\u3088\u3046\u306bNode.js\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

        \u4f8b\u3068\u3057\u3066\u3001Express\u3092\u4f7f\u7528\u3057\u305f\u30b7\u30f3\u30d7\u30eb\u306aNode.js\u30b5\u30fc\u30d0\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059:

        app.js
        const express = require('express');\nconst app = express();\n// \u5168\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b5\u79d2\u306e\u30c7\u30a3\u30ec\u30a4\u3092\u8ffd\u52a0\u3002\napp.use((req, res, next) => setTimeout(next, 5000));\napp.get('/', function (req, res) {\nres.send(\"Hello World\");\n})\nconst server = app.listen(3000, function () {\nconsole.log('Example app listening on port 3000!');\n})\n

        \u3053\u308c\u306f\u3001Web\u30b5\u30fc\u30d0\u30fc\u304c localhost:3000 \u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u305f\u3068\u304d\u306b \"Hello World\" \u3092\u8868\u793a\u3057\u307e\u3059\u3002\u8a08\u7b97\u51e6\u7406\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3059\u308b\u305f\u3081\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u306b5\u79d2\u306e\u9045\u5ef6\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-advanced/nodejs/#a","title":"\u30d1\u30fc\u30c8A: \u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5b8c\u4e86\u3092\u8a31\u53ef\u3059\u308b","text":"

        \u4e0a\u8a18\u306e\u4f8b\u3092\u5b9f\u884c\u3057\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u51e6\u7406\u3055\u308c\u3066\u3044\u308b\u9593(5\u79d2\u4ee5\u5185)\u306bNode.js\u30d7\u30ed\u30bb\u30b9\u3092\u505c\u6b62\u3059\u308b\u3068\u3001Node.js\u30b5\u30fc\u30d0\u30fc\u306f\u3059\u3050\u306b\u63a5\u7d9a\u3092\u5207\u65ad\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306f\u30a8\u30e9\u30fc\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002

        Node.js\u30b5\u30fc\u30d0\u30fc\u306b\u3001\u5b9f\u969b\u306b\u81ea\u8eab\u3092\u505c\u6b62\u3059\u308b\u524d\u306b\u3059\u3079\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064\u3079\u304d\u3060\u3068\u4f1d\u3048\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059:

        Graceful Shutdown
        const startGracefulShutdown = () => {\nconsole.log('Starting shutdown of express...');\nserver.close(function () {\nconsole.log('Express shut down.');\n});\n}\nprocess.on('SIGTERM', startGracefulShutdown);\nprocess.on('SIGINT', startGracefulShutdown);\n

        \u3053\u308c\u306f\u57fa\u672c\u7684\u306b server.close() \u3092\u547c\u3073\u51fa\u3057\u3001\u3053\u308c\u306b\u3088\u308aNode.js HTTP\u30b5\u30fc\u30d0\u30fc\u306b\u5bfe\u3057\u3066\u4ee5\u4e0b\u306e\u6307\u793a\u304c\u51fa\u3055\u308c\u307e\u3059:

        1. \u3053\u308c\u4ee5\u4e0a\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u4ed8\u3051\u306a\u3044\u3002
        2. \u3059\u3079\u3066\u306e\u5b9f\u884c\u4e2d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u5b8c\u4e86\u3059\u308b\u3002

        \u3053\u308c\u306f SIGINT ( CTRL + C \u3092\u62bc\u3057\u305f\u3068\u304d)\u307e\u305f\u306f SIGTERM (\u30d7\u30ed\u30bb\u30b9\u3092\u7d42\u4e86\u3059\u308b\u305f\u3081\u306e\u6a19\u6e96\u4fe1\u53f7)\u3067\u884c\u3044\u307e\u3059\u3002

        \u3053\u306e\u5c0f\u3055\u306a\u8ffd\u52a0\u306b\u3088\u308a\u3001Node.js\u306f\u3059\u3079\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064\u3088\u3046\u306b\u306a\u308a\u3001\u305d\u306e\u5f8c\u81ea\u8eab\u3092\u505c\u6b62\u3057\u307e\u3059\u3002

        \u3082\u3057\u79c1\u305f\u3061\u304cNode.js\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u74b0\u5883\u3067\u5b9f\u884c\u3057\u3066\u3044\u306a\u3044\u306a\u3089\u3070\u3001\u304a\u305d\u3089\u304f \u6570\u79d2\u5f8c\u306b\u5b9f\u969b\u306bNode.js\u30b5\u30fc\u30d0\u30fc\u3092\u7d42\u4e86\u3059\u308b\u8ffd\u52a0\u306e\u30b3\u30fc\u30c9\u3092\u542b\u3081\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u4e00\u90e8\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u975e\u5e38\u306b\u9577\u304f\u304b\u304b\u308b\u304b\u3001\u3042\u308b\u3044\u306f\u5168\u304f\u505c\u6b62\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u304b\u3089\u3067\u3059\u3002\u3053\u308c\u306f\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30b7\u30b9\u30c6\u30e0\u5185\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30b3\u30f3\u30c6\u30ca\u304c\u505c\u6b62\u3057\u306a\u3044\u5834\u5408\u3001Docker\u3068Kubernetes\u306f\u6570\u79d2\u5f8c(\u901a\u5e38\u306f30\u79d2\u5f8c)\u306bSIGKILL\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30d7\u30ed\u30bb\u30b9\u81ea\u4f53\u3067\u306f\u51e6\u7406\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u79c1\u305f\u3061\u306f\u6c17\u306b\u3059\u308b\u5fc5\u7528\u304c\u3042\u308a\u307e\u305b\u3093\u3002

        "},{"location":"ja/using-lagoon-advanced/nodejs/#byarnnpm","title":"\u30d1\u30fc\u30c8B:Yarn\u3068NPM\u306e\u5b50\u751f\u6210\u554f\u984c","text":"

        \u3082\u3057\u79c1\u305f\u3061\u304c\u30d1\u30fc\u30c8A\u3060\u3051\u3092\u5b9f\u88c5\u3057\u305f\u5834\u5408\u3001\u826f\u3044\u7d4c\u9a13\u3092\u5f97\u3089\u308c\u308b\u3067\u3057\u3087\u3046\u3002\u73fe\u5b9f\u306e\u4e16\u754c\u3067\u306f\u3001\u591a\u304f\u306eNode.js\u30b7\u30b9\u30c6\u30e0\u304cYarn\u3084NPM\u3067\u69cb\u7bc9\u3055\u308c\u3066\u304a\u308a\u3001\u3053\u308c\u3089\u306fNode.js\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3060\u3051\u3067\u306a\u304f\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u7ba1\u7406\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002

        \u3053\u308c\u3089\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u6a5f\u80fd\u3092\u4f7f\u3046\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5\u3092\u7c21\u5358\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u591a\u304f\u306epackage.json\u30d5\u30a1\u30a4\u30eb\u304c\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002

        package.json
        {\n\"name\": \"node\",\n\"version\": \"1.0.0\",\n\"main\": \"index.js\",\n\"license\": \"MIT\",\n\"dependencies\": {\n\"express\": \"^4.15.3\"\n},\n\"scripts\": {\n\"start\": \"node index.js\"\n}\n}\n

        \u305d\u3057\u3066\u3001\u5b9a\u7fa9\u3055\u308c\u305fscripts\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8d77\u52d5\u3059\u308b\u3060\u3051\u3067\u6e08\u307f\u307e\u3059:

        \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5
        yarn start\n

        \u307e\u305f\u306f

        \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5
        npm start\n

        \u3053\u308c\u306f\u4fbf\u5229\u3067\u3001\u958b\u767a\u8005\u3092\u697d\u306b\u3057\u307e\u3059\u3002\u3060\u304b\u3089\u3001\u79c1\u305f\u3061\u306fDockerfiles\u306e\u4e2d\u3067\u3082\u540c\u3058\u3082\u306e\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

        .dockerfile
        CMD [\"yarn\", \"start\"]\n

        \u3057\u304b\u3057\u3001\u3053\u308c\u306b\u306f\u5927\u304d\u306a\u554f\u984c\u304c\u3042\u308a\u307e\u3059:

        yarn \u3084 npm \u304c SIGINT \u3084 SIGTERM \u30b7\u30b0\u30ca\u30eb\u3092\u53d7\u3051\u53d6\u308b\u3068\u3001\u305d\u308c\u3089\u306f\u6b63\u78ba\u306b\u30b7\u30b0\u30ca\u30eb\u3092\u751f\u6210\u3057\u305f\u5b50\u30d7\u30ed\u30bb\u30b9\u306b\u8ee2\u9001\u3057\u307e\u3059\u3002(\u3053\u306e\u5834\u5408\u306f node index.js)\u3057\u304b\u3057\u3001\u5b50\u30d7\u30ed\u30bb\u30b9\u304c\u505c\u6b62\u3059\u308b\u306e\u3092\u5f85\u3064\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001yarn/npm \u306f\u5373\u5ea7\u306b\u81ea\u5206\u81ea\u8eab\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Docker/Kubernetes\u306b\u5bfe\u3057\u3066\u30b3\u30f3\u30c6\u30ca\u304c\u5b8c\u4e86\u3057\u305f\u3068\u3044\u3046\u30b7\u30b0\u30ca\u30eb\u304c\u9001\u3089\u308c\u3001Docker/Kubernetes\u306f\u3059\u3050\u306b\u3059\u3079\u3066\u306e\u5b50\u30d7\u30ed\u30bb\u30b9\u3092\u5f37\u5236\u7d42\u4e86\u3057\u307e\u3059\u3002Yarn\u3068NPM\u306b\u306f\u30aa\u30fc\u30d7\u30f3\u306a\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u6b8b\u5ff5\u306a\u304c\u3089\u307e\u3060\u89e3\u6c7a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002

        \u3053\u306e\u554f\u984c\u306e\u89e3\u6c7a\u7b56\u306f\u3001Yarn\u3084NPM\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u76f4\u63a5 node \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3059\u3002

        .dockerfile
        CMD [\"node\", \"index.js\"]\n

        \u3053\u308c\u306b\u3088\u308a\u3001Node.js\u306f\u9069\u5207\u306b\u7d42\u4e86\u3057\u3001Docker/Kubernetes\u306fNode.js\u304c\u7d42\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/private-repositories/","title":"\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea","text":"
        1. \u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u306b\u3001\u3042\u306a\u305f\u306eGitHub/GitLab/BitBucket\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u4e0e\u3048\u307e\u3059\u3002
        2. dockerfile\u306bARG LAGOON_SSH_PRIVATE_KEY\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002(SSH\u30ad\u30fc\u304c\u5fc5\u8981\u306a\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306e\u30b9\u30c6\u30c3\u30d7\u306e\u524d\u306b)
        3. dockerfile\u306bRUN /lagoon/entrypoints/05-ssh-key.sh\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002(SSH\u30ad\u30fc\u304c\u5fc5\u8981\u306a\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306e\u30b9\u30c6\u30c3\u30d7\u306e\u524d\u306b)
        \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8a2d\u5b9a
        RUN /lagoon/entrypoints/05-ssh-key.sh && composer install && rm /home/.ssh/key\n
        "},{"location":"ja/using-lagoon-advanced/project-default-users-keys/","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u3068SSH\u30ad\u30fc","text":"

        Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u4f5c\u6210\u3055\u308c\u308b\u3068\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u95a2\u9023\u3059\u308bSSH \"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ad\u30fc\"\u304c\u751f\u6210\u3055\u308c\u3001\u305d\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eCLI\u30dd\u30c3\u30c9\u5185\u3067\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8default-user@project\u3082\u4f5c\u6210\u3055\u308c\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306eMAINTAINER\u30a2\u30af\u30bb\u30b9\u304c\u4ed8\u4e0e\u3055\u308c\u307e\u3059\u3002SSH \"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ad\u30fc\"\u306f\u3001\u305d\u306edefault-user@project\u306b\u6dfb\u4ed8\u3055\u308c\u307e\u3059\u3002

        \u3053\u308c\u306b\u3088\u308a\u3001\u4efb\u610f\u306e\u74b0\u5883\u306eCLI\u30dd\u30c3\u30c9\u5185\u304b\u3089\u540c\u3058\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u4ed6\u306e\u4efb\u610f\u306e\u74b0\u5883\u306bSSH\u3067\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u30a2\u30af\u30bb\u30b9\u306f\u3001\u74b0\u5883\u9593\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u540c\u671f\u5316\u3059\u308b\u306a\u3069\u3001\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002(\u4f8b:drush sql-sync)

        MAINTAINER\u30ed\u30fc\u30eb\u306b\u3064\u3044\u3066\u306e\u8a73\u3057\u3044\u60c5\u5831\u306f\u3001RBAC\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/project-default-users-keys/#_1","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ad\u30fc\u306e\u6307\u5b9a","text":"

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u969b\u306bSSH\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u306f\u53ef\u80fd\u3067\u3059\u304c\u3001\u3053\u308c\u306b\u306f\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u554f\u984c\u304c\u3042\u308b\u305f\u3081\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u3002

        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/","title":"Lagoon\u3067\u306eXdebug\u306e\u8a2d\u5b9a","text":""},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#xdebug","title":"\u30b3\u30f3\u30c6\u30ca\u3067Xdebug\u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b","text":"

        Lagoon\u306e\u57fa\u672c\u30a4\u30e1\u30fc\u30b8\u306fXdebug\u304c\u8a2d\u5b9a\u6e08\u307f\u3067\u3059\u304c\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4e0a\u306e\u7406\u7531\u304b\u3089\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u62e1\u5f35\u6a5f\u80fd\u306f\u30ed\u30fc\u30c9\u3055\u308c\u307e\u305b\u3093\u3002\u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001XDEBUG_ENABLE\u74b0\u5883\u5909\u6570\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

        • \u30ed\u30fc\u30ab\u30eb (Pygmy\u3068Lando)

          1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304clagoon-examples\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u74b0\u5883\u5909\u6570\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u884c\u3092\u30b3\u30e1\u30f3\u30c8\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          2. \u74b0\u5883\u5909\u6570\u3092\u5909\u66f4\u3057\u305f\u5f8c\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u69cb\u7bc9\u3057\u3066\u518d\u8d77\u52d5\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - \u30ea\u30e2\u30fc\u30c8 (dev/prod)
          3. Lagoon API\u3092\u4f7f\u7528\u3057\u3066\u3001\u5b9f\u884c\u4e2d\u306e\u74b0\u5883\u306b\u74b0\u5883\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
          4. \u74b0\u5883\u5909\u6570\u3092\u5909\u66f4\u3057\u305f\u5f8c\u306f\u3001\u74b0\u5883\u3092\u518d\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#xdebug_1","title":"Xdebug\u62e1\u5f35\u6a5f\u80fd\u306e\u6709\u52b9\u5316","text":"

        \u30c7\u30d5\u30a9\u30eb\u30c8\u306eXdebug\u8a2d\u5b9a\u3067\u306f\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3059\u308b\u305f\u3081\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u5316\u3059\u308b\"\u30c8\u30ea\u30ac\u30fc\"\u304c\u5fc5\u8981\u3067\u3059\u3002\uff08Xdebug\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\uff09 \u30c7\u30d0\u30c3\u30ac\u3092\u6709\u52b9\u5316\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u7c21\u5358\u306a\u624b\u9806\u3092\u53c2\u8003\u306b\u3057\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#cli","title":"CLI","text":"

        php-cli\u30a4\u30e1\u30fc\u30b8\u306fXdebug\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u3068\u304d\u306b\u306f\u5e38\u306bXdebug\u3092\u6709\u52b9\u5316\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u3057\u305f\u304c\u3063\u3066\u3001\u4ed6\u306b\u4f55\u3082\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4efb\u610f\u306ePHP\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3059\u308b\u3068\u30c7\u30d0\u30c3\u30b0\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u958b\u59cb\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#web","title":"Web","text":"

        Xdebug\u306e\u30d6\u30e9\u30a6\u30b6\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b \u3053\u3068\u3067\u3001\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u3092\u8a2d\u5b9a/\u89e3\u9664\u3057\u307e\u3059\u3002

        \u30c7\u30d0\u30c3\u30b0\u3092\u958b\u59cb\u3057\u305f\u3044\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#phpstorm","title":"PHPStorm\u306e\u8a2d\u5b9a","text":"
        1. PHPStorm\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
        2. \u30c4\u30fc\u30eb\u30d0\u30fc\u306e\u201cStart Listening for PHP Debug Connections\u201d\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
        3. \u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3092\u8aad\u307f\u8fbc\u3080\u304b\u3001Drush\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
        4. \u521d\u56de\u5b9f\u884c\u6642\u306b\u306f\u3001PHPStorm\u304c\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3057\u3001\u6b21\u306e\u64cd\u4f5c\u3092\u6c42\u3081\u307e\u3059\u3002
          1. \u30d1\u30b9\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
          2. \u30b5\u30fc\u30d0\u30fc\u4e0a\u3067\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u305f\u6b63\u3057\u3044\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#visual-studio-code","title":"Visual Studio Code\u306e\u8a2d\u5b9a","text":"
        1. Felix Becker\u306b\u3088\u308bPHP Debug\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
        2. \u8aac\u660e\u306b\u5f93\u3063\u3066PHP\u7528\u306e\u57fa\u672c\u7684\u306a launch.json\u4f5c\u6210\u3057\u307e\u3059\u3002
        3. \u6b63\u3057\u3044\u30d1\u30b9\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u5178\u578b\u7684\u306aDrupal\u30b5\u30a4\u30c8\u306e\u4f8b\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002

          launch.json
          \"pathMappings\": {\n\"/app\": \"${workspaceFolder}\",\n},\n
        4. Visual Studio Code\u306eRun\u30bf\u30d6\u3067\u3001 \u201cListen for Xdebug\u201d\u306e\u96a3\u306b\u3042\u308b\u7dd1\u8272\u306e\u77e2\u5370\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002

        5. Web\u30da\u30fc\u30b8\u3092\u30ed\u30fc\u30c9\u3059\u308b\u304b\u3001Drush\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#_1","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"
        • Xdebug\u62e1\u5f35\u304c\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002Drupal \u30b5\u30a4\u30c8\u3067\u3053\u308c\u3092\u884c\u3046\u6700\u5584\u306e\u65b9\u6cd5\u306f\u3001PHP\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u30da\u30fc\u30b8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3067\u3059\u3002Xdebug\u3068\u305d\u306e\u3059\u3079\u3066\u306e\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3059\u3002
        • \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
        \u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6 \u30ed\u30fc\u30ab\u30eb\u5024 xdebug.mode debug xdebug.client_host host.docker.internal \u307e\u305f\u306f \u3042\u306a\u305f\u306eIP\u30a2\u30c9\u30ec\u30b9 xdebug.client_port 9003
        • \u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u3067Xdebug\u306e\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306fXDEBUG_LOG\u3068\u3044\u3046\u540d\u524d\u306e\u74b0\u5883\u5909\u6570\u306b\u4f55\u3089\u304b\u306e\u5024\u3092\u8a2d\u5b9a\u3059\u308b\u3060\u3051\u3067\u3059\u3002 \u30ed\u30b0\u306f/tmp/xdebug.log\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u3082\u3057lagoon-examples\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u306a\u3089\u3001\u3042\u306a\u305f\u306f \u3044\u304f\u3064\u304b\u306e\u65e2\u5b58\u306e\u884c\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u5916\u3057\u307e\u3059\u3002
        • \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002Chrome\u307e\u305f\u306fFirefox\u306e\u30d6\u30e9\u30a6\u30b6\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3001XDEBUG_SESSION\u30af\u30c3\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002
        • Xdebug\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u5316\u3055\u308c\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u3068\u306e\u30c7\u30d0\u30c3\u30b0\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002nc -l 9003 \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066Xdebug\u30dd\u30fc\u30c8\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3059\u3079\u3066\u304cPHP\u3067\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308c\u3070\u3001\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3092\u30ed\u30fc\u30c9\u3059\u308b\u304b\u3001Drush\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068Xdebug init\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3059\u3002
        • xdebug.client_host\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002Docker for Mac\u3067\u306e\u30ed\u30fc\u30ab\u30eb\u30c7\u30d0\u30c3\u30b0\u306e\u5834\u5408\u3001\u3053\u306e\u5024\u306fhost.docker.internal\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002\u30ea\u30e2\u30fc\u30c8\u30c7\u30d0\u30c3\u30b0\u306e\u5834\u5408\u3001\u3053\u306e\u5024\u306f\u3042\u306a\u305f\u306eIP\u30a2\u30c9\u30ec\u30b9\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002\u3053\u306e\u5024\u304c\u6b63\u3057\u304f\u6c7a\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u3001DOCKERHOST\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u4e0a\u66f8\u304d\u3067\u304d\u307e\u3059\u3002
        • Lando\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001CLI\u304b\u3089\u5b9f\u884c\u3055\u308c\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u30c7\u30d0\u30c3\u30b0\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u307e\u305alando ssh\u3092\u4ecb\u3057\u3066CLI\u30b3\u30f3\u30c6\u30ca\u306bSSH\u3067\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002lando drush\u307e\u305f\u306flando php\u3092\u5b9f\u884c\u3057\u3066\u3082\u30c7\u30d0\u30c3\u30b0\u3067\u304d\u306a\u3044\u306e\u3067\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#mac","title":"Mac\u56fa\u6709\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"
        • Docker for Mac\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30ad\u30f3\u30b0\u304c\u58ca\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002 \u30db\u30b9\u30c8\u30de\u30b7\u30f3\u3067 nc -l 9003\u3092\u5b9f\u884c\u3057\u3001\u305d\u306e\u5f8c\u65b0\u3057\u3044\u30bf\u30fc\u30df\u30ca\u30eb\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u6b21\u306e\u3088\u3046\u306b\u5b9f\u884c\u3057\u307e\u3059\u3002

          Mac\u306eDocker\u30cd\u30c3\u30c8\u30ef\u30fc\u30ad\u30f3\u30b0\u3092\u78ba\u8a8d
          docker-compose run cli nc -zv host.docker.internal 9003\n

          \u6b21\u306e\u3088\u3046\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002 host.docker.internal (192.168.65.2:9003) open

        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#linux","title":"Linux \u7279\u6709\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"
        • \u30db\u30b9\u30c8host.docker.internal\u306b\u63a5\u7d9a\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002docker\u304c(Docker Desktop\u3092\u7d4c\u7531\u305b\u305a\u306b)\u624b\u52d5\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u30db\u30b9\u30c8\u306f\u89e3\u6c7a\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u3092\u5f37\u5236\u7684\u306b\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u306e\u30b9\u30cb\u30da\u30c3\u30c8\u3092\u633f\u5165\u3059\u308b\u3053\u3068\u3067\u3001\u3053\u306e\u30db\u30b9\u30c8\u3092\u5f37\u5236\u7684\u306b\u89e3\u6c7a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002(\u624b\u9806\u306f\u3053\u306e\u30d6\u30ed\u30b0\u6295\u7a3f\u304b\u3089\u5f15\u7528\u3057\u3066\u3044\u307e\u3059)

          Linux\u5411\u3051\u306edocker-compose.yml\u306e\u4fee\u6b63
            services:\ncli:\nextra_hosts:\nhost.docker.internal: host-gateway\nphp:\nextra_hosts:\nhost.docker.internal: host-gateway\n
        "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#xdebug-2","title":"Xdebug 2","text":"

        \u53e4\u3044\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u307e\u3060Xdebug\u30d0\u30fc\u30b8\u30e7\u30f32\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u306e\u30da\u30fc\u30b8\u306e\u60c5\u5831\u306f\u3059\u3079\u3066\u305d\u306e\u307e\u307e\u9069\u7528\u3055\u308c\u307e\u3059\u304c\u3001\u8a2d\u5b9a\u540d\u3068\u5024\u306e\u4e00\u90e8\u306f\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u3059\u3002

        v3 v2 xdebug.mode xdebug.remote_enabled On xdebug.client_host xdebug.remote_host host.docker.internal \u307e\u305f\u306f\u3042\u306a\u305f\u306eIP\u30a2\u30c9\u30ec\u30b9 xdebug.client_port xdebug.remote_port 9000"},{"location":"ja/using-lagoon-advanced/simplesaml/#simplesamlphp","title":"SimpleSAMLphp","text":"

        \u3053\u308c\u306f\u3001SimpleSAMLphp\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3057\u3001\u305d\u308c\u3092NGINX\u7d4c\u7531\u3067\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u65b9\u6cd5\u306e\u4f8b\u3067\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/simplesaml/#_1","title":"\u5fc5\u8981\u6761\u4ef6","text":"

        SimpleSAMLphp\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3057\u307e\u3059:

        Composer\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bSimpleSAMLphp\u3092\u8ffd\u52a0\u3059\u308b
        composer req simplesamlphp/simplesamlphp\n
        "},{"location":"ja/using-lagoon-advanced/simplesaml/#simplesamlphp_1","title":"SimpleSAMLphp\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b","text":"

        vendor/simplesamlphp/simplesamlphp/config-templates\u304b\u3089authsources.php\u3068config.php\u3092vendor\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5916\u306econf/simplesamlphp\u306e\u3088\u3046\u306a\u5834\u6240\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002\u307e\u305f\u3001vendor/simplesamlphp/simplesamlphp/metadata-templates\u304b\u3089saml20-idp-remote.php\u3082\u5fc5\u8981\u3067\u3059\u3002

        config.php\u3067Lagoon\u306b\u4ee5\u4e0b\u306e\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059:

        SimpleSAMLphp\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u57fa\u672cURL\u30d1\u30b9:

        config.php
          'baseurlpath' => 'https://YOUR_DOMAIN.TLD/simplesaml/',\n

        \u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002

        config.php
          'store.type'                    => 'sql',\n  'store.sql.dsn'                 => vsprintf('mysql:host=%s;port=%s;dbname=%s', [\n    getenv('MARIADB_HOST'),\n    getenv('MARIADB_PORT'),\n    getenv('MARIADB_DATABASE'),\n  ]),\n

        \u4ed6\u306e\u8a2d\u5b9a\u306f\u304a\u597d\u307f\u3067\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        • \u30ed\u30b0\u3068\u8a3c\u660e\u66f8\u306e\u30d1\u30b9\u3092\u78ba\u8a8d\u3057\u307e\u3059
        • SimpleSAMLphp\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3092\u4fdd\u8b77\u3057\u307e\u3059
        • \u30ed\u30ae\u30f3\u30b0\u306e\u30ec\u30d9\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3059
        • technicalcontact\u3068timezone\u3092\u8a2d\u5b9a\u3057\u307e\u3059

        \u4f8b\u3092\u53c2\u8003\u306bauthsources.php\u306bauthsources(IdPs)\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

        authsources.php
          'default-sp' => [\n    'saml:SP',\n    // The entity ID of this SP.\n    'entityID' => 'https://YOUR_DOMAIN.TLD',\n    // The entity ID of the IdP this should SP should contact.\n    // Can be NULL/unset, in which case the user will be shown a list of available IdPs.\n    'idp' => 'https://YOUR_IDP_DOMAIN.TLD',\n    // The URL to the discovery service.\n    // Can be NULL/unset, in which case a builtin discovery service will be used.\n    'discoURL' => null,\n    'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',\n    'certificate' => '/app/conf/simplesamlphp/certs/saml.crt',\n    'privatekey' => '/app/conf/simplesamlphp/certs/saml.pem',\n    'redirect.sign' => TRUE,\n    'redirect.validate' => TRUE,\n    'authproc' => [\n      50 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:1.3.6.1.4.1.5923.1.1.1.6' => 'eduPersonPrincipalName',\n      ],\n      51 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:2.5.4.42' => 'givenName',\n      ],\n      52 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:2.5.4.4' => 'sn',\n      ],\n      53 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:0.9.2342.19200300.100.1.3' => 'mail',\n      ],\n    ],\n  ],\n

        \u4f8b\u3092\u53c2\u8003\u306bsaml20-idp-remote.php\u306bIdP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

        saml20-idp-remote.php
        <?php\n/**\n * SAML 2.0 remote IdP metadata for SimpleSAMLphp.\n *\n * Remember to remove the IdPs you don't use from this file.\n *\n * See: https://simplesamlphp.org/docs/stable/simplesamlphp-reference-idp-remote\n */\n/**\n * Some IdP.\n */\n$metadata['https://YOUR_IDP_DOMAIN.TLD'] = [\n'entityid' => 'https://YOUR_IDP_DOMAIN.TLD',\n'name' => [\n'en' => 'Some IdP',\n],\n'description' => 'Some IdP',\n...\n];\n

        \u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u3067\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092SimpleSAMLphp\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059

        • vendor/simplesamlphp/simplesamlphp/config/authsources.php
        • vendor/simplesamlphp/simplesamlphp/config/config.php
        • vendor/simplesamlphp/simplesamlphp/metadata/saml20-idp-remote.php
        "},{"location":"ja/using-lagoon-advanced/simplesaml/#simplesamlphpnginx-conf","title":"SimpleSAMLphp\u306e\u305f\u3081\u306eNGINX conf\u3092\u4f5c\u6210\u3057\u307e\u3059","text":"

        lagoon/nginx/location_prepend_simplesamlphp.conf\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059:

        location_prepend_simplesamlphp.conf
        location ^~ /simplesaml {\nalias /app/vendor/simplesamlphp/simplesaml php/www;\nlocation ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\\.php)(?<pathinfo>/.*)?$ {\ninclude          fastcgi_params;\nfastcgi_pass     ${NGINX_FASTCGI_PASS:-php}:9000;\nfastcgi_param    SCRIPT_FILENAME $document_root$phpfile;\n# Must be prepended with the baseurlpath\nfastcgi_param    SCRIPT_NAME /simplesaml$phpfile;\nfastcgi_param    PATH_INFO $pathinfo if_not_empty;\n}\n}\n

        \u3053\u308c\u306b\u3088\u308a\u3001/simplesaml URL\u304cvendor\u306eSimpleSAMLphp\u306b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/simplesaml/#nginxnginx","title":"NGINX\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u306eNGINX\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3059\u308b","text":"

        nginx.dockerfile\u3092\u4fee\u6b63\u3057\u3001location_prepend_simplesamlphp.conf\u3092\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u3057\u307e\u3059:

        nginx.dockerfile
        ARG CLI_IMAGE\nFROM ${CLI_IMAGE} AS cli\n\nFROM uselagoon/nginx-drupal\n\nCOPY --from=cli /app /app\n\nCOPY lagoon/nginx/location_prepend_simplesamlphp.conf /etc/nginx/conf.d/drupal/location_prepend_simplesamlphp.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/location_prepend_simplesamlphp.conf\n\n# Define where the Drupal Root is located\nENV WEBROOT=public\n
        "},{"location":"ja/using-lagoon-advanced/triggering-deployments/","title":"\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u30c8\u30ea\u30ac\u30fc","text":""},{"location":"ja/using-lagoon-advanced/triggering-deployments/#azure-pipelines","title":"Azure Pipelines\u3092\u4f7f\u7528\u3057\u3066\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b","text":"

        Azure Pipelines\u3092\u4f7f\u7528\u3057\u3066\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u3092\u81ea\u52d5\u7684\u306b\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u3092\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002

        1. \u30c7\u30d7\u30ed\u30a4\u306eSSH\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ad\u30fc\u3092id_rsa_lagoon\u3068\u3057\u3066Azure\u306e\u30bb\u30ad\u30e5\u30a2\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u30bb\u30ad\u30e5\u30a2\u30d5\u30a1\u30a4\u30eb\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306fAzure\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002
        2. \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092azure-pipelines.yml\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002
        azure-pipelines.yml
        pool:\nvmImage: 'ubuntu-latest'\nstages:\n# .. \u4ed6\u306e\u30b9\u30c6\u30fc\u30b8\n- stage: Deploy\ncondition: and(succeeded(), in(variables['Build.SourceBranch'], 'refs/heads/staging', 'refs/heads/develop'))\njobs:\n- job: DeployLagoon\nsteps:\n- task: DownloadSecureFile@1\nname: lagoonSshKey\ndisplayName: 'Download Lagoon SSH key'\ninputs:\nsecureFile: id_rsa_lagoon\n- script: |\ncurl -L \"https://github.com/uselagoon/lagoon-cli/releases/download/v0.21.3/lagoon-cli-v0.21.3-linux-amd64\" -o ./lagoon\nchmod +x ./lagoon\ndisplayName: 'Download lagoon-cli'\n- script: ./lagoon login -i $(lagoonSshKey.secureFilePath)\ndisplayName: 'Log into Lagoon'\n- script: ./lagoon deploy branch -e $(Build.SourceBranchName) -p my-awesome-project -b $(Build.SourceBranchName) --force\ndisplayName: 'Trigger deployment using lagoon-cli'\n

        \u3053\u308c\u306b\u3088\u308a\u3001develop\u30d6\u30e9\u30f3\u30c1\u307e\u305f\u306fstaging\u30d6\u30e9\u30f3\u30c1\u3067\u5909\u66f4\u304c\u884c\u308f\u308c\u308b\u305f\u3073\u306b\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5024\u3092\u9069\u5207\u306b\u8abf\u6574\u3057\u3066\u3001\u30c7\u30d7\u30ed\u30a4\u6226\u7565\u3068\u8a2d\u5b9a\u306b\u9069\u5408\u3055\u305b\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-advanced/triggering-deployments/#_2","title":"\u30c7\u30d7\u30ed\u30a4\u305b\u305a\u306b\u30d7\u30c3\u30b7\u30e5","text":"

        \u30c7\u30d7\u30ed\u30a4\u305b\u305a\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u30b3\u30df\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u306b \"[skip deploy]\" \u307e\u305f\u306f \"[deploy skip]\" \u3092\u542b\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u305d\u3046\u3059\u308b\u3068\u3001Lagoon\u306f\u305d\u306e\u30b3\u30df\u30c3\u30c8\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u307e\u305b\u3093\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/","title":"\u30cf\u30fc\u30d0\u30fc","text":"

        Harbor\u306f\u3001Kubernetes\u30a4\u30f3\u30d5\u30e9\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u969b\u306eLagoon\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30ea\u30dd\u30b8\u30c8\u30ea\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002Harbor\u306fDocker\u30ec\u30b8\u30b9\u30c8\u30ea\u3068\u3001Trivy\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u308b\u30b3\u30f3\u30c6\u30ca\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30cb\u30f3\u30b0\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

        \u6ce8\u610f:

        Lagoon\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001Harbor\u306e\u8a2d\u5b9a\u306f\u3059\u3079\u3066\u81ea\u52d5\u7684\u306b\u51e6\u7406\u3055\u308c\u307e\u3059\u3002

        \u3082\u3057Lagoon\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u305d\u306eUI\u306blocalhost:8084\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u30e6\u30fc\u30b6\u540d\u306f admin\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u306f admin\u3067\u3059\u3002

        \u6ce8\u610f:

        \u30b5\u30a4\u30c8\u3092\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc(amazee.io\u306a\u3069)\u3067\u30db\u30b9\u30c8\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306f\u9867\u5ba2\u304cHarbor UI\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

        \u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3068\u3001\u6700\u521d\u306e\u753b\u9762\u306b\u306f\u30e6\u30fc\u30b6\u30fc\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3059\u3079\u3066\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30ea\u30b9\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002Harbor\u5185\u306e\u5404\u300c\u30ea\u30dd\u30b8\u30c8\u30ea\u300d\u306fLagoon\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002

        \u5404Harbor\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306b\u306f\u30011\u3064\u306eLagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u6301\u3064\u3059\u3079\u3066\u306e\u74b0\u5883\u306e\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u30ea\u30b9\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

        \u3053\u3053\u304b\u3089\u3001\u500b\u3005\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u6df1\u304f\u6398\u308a\u4e0b\u3052\u3066\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3\u7d50\u679c\u306e\u6982\u8981\u3092\u542b\u3080\u8a73\u7d30\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/security-scanning/","title":"\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3","text":"

        Harbor\u306b\u306f\u3001Trivy\u30b5\u30fc\u30d3\u30b9\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u308b\u7d44\u307f\u8fbc\u307f\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u304c\u642d\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u3092\u89e3\u6790\u3057\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u3092\u53ce\u96c6\u3057\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001Trivy\u30b5\u30fc\u30d3\u30b9\u306f\u56fd\u7acb\u8106\u5f31\u6027\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u691c\u7d22\u3057\u3001\u305d\u308c\u3089\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308bCVE(\u4e00\u822c\u7684\u306a\u8106\u5f31\u6027\u3068\u9732\u51fa)\u3092\u63a2\u3057\u307e\u3059\u3002Trivy\u306f\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u305f\u3081\u3001Composer\u30d5\u30a1\u30a4\u30eb\u3084\u305d\u306e\u4ed6\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30e9\u30a4\u30d6\u30e9\u30ea\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3001\u305d\u308c\u3089\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30d0\u30fc\u30b8\u30e7\u30f3\u5185\u306b\u898b\u3064\u304b\u3063\u305f\u8106\u5f31\u6027\u3092\u5831\u544a\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u8106\u5f31\u6027\u306f\u3001\u500b\u3005\u306e\u30b3\u30f3\u30c6\u30ca\u3054\u3068\u306bHarbor\u5185\u3067\u5831\u544a\u3055\u308c\u307e\u3059\u3002

        Harbor\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3\u306e\u4f8b\u3001\u30b9\u30ad\u30e3\u30f3\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u306b\u9069\u7528\u53ef\u80fd\u306a\u8106\u5f31\u6027\u3092\u793a\u3057\u3066\u3044\u307e\u3059:

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/","title":"\u30ed\u30fc\u30ab\u30eb\u3067\u306eHarbor\u306e\u5b9f\u884c","text":"

        Lagoon\u306f\u3001Harbor\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001AWS S3\u3068\u4e92\u63db\u6027\u306e\u3042\u308b\u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3067\u3042\u308bMinIO\u3092\u30b9\u30c8\u30ec\u30fc\u30b8\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066\u5229\u7528\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/#_1","title":"\u8a2d\u5b9a","text":"

        Harbor\u306f\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u3067\u69cb\u6210\u3055\u308c\u3066\u304a\u308a\u3001\u305d\u308c\u305e\u308c\u304c\u6210\u529f\u88cf\u306b\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u306f\u7570\u306a\u308b\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

        Harbor\u304c\u6b63\u3057\u304f\u958b\u59cb\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u74b0\u5883\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

        • HARBOR_REGISTRY_STORAGE_AMAZON_BUCKET
          • \u3053\u308c\u306f\u3001Harbor\u304c\u30a4\u30e1\u30fc\u30b8\u3092\u4fdd\u5b58\u3059\u308bAWS\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
          • Lagoon\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067harbor-images\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
        • HARBOR_REGISTRY_STORAGE_AMAZON_REGION
          • \u3053\u308c\u306f\u3001Harbor\u306e\u30d0\u30b1\u30c3\u30c8\u304c\u5b58\u5728\u3059\u308bAWS\u5730\u57df\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
          • Lagoon\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067us-east-1\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
        • REGISTRY_STORAGE_S3_ACCESSKEY
          • \u3053\u308c\u306f\u3001Harbor\u304cAWS\u30d0\u30b1\u30c3\u30c8\u306b\u8aad\u307f\u66f8\u304d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308bAWS\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
          • Lagoon\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f\u3001MinIO\u306f\u8a8d\u8a3c\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u7a7a\u6587\u5b57\u5217\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
        • REGISTRY_STORAGE_S3_SECRETKEY
          • \u3053\u308c\u306f\u3001Harbor\u304cAWS\u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308bAWS\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 AWS\u30d0\u30b1\u30c3\u30c8\u3078\u306e\u8aad\u307f\u66f8\u304d\u3002
          • Lagoon\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306e\u5834\u5408\u3001MinIO\u306f\u8a8d\u8a3c\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u305f\u3081\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u7a7a\u6587\u5b57\u5217\u306b\u306a\u308a\u307e\u3059\u3002

        \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u6b21\u306e\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059:

        • HARBOR_REGISTRY_STORAGE_AMAZON_ENDPOINT
          • \u3053\u306e\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001Harbor\u30ec\u30b8\u30b9\u30c8\u30ea\u306f\u305d\u306e\u5024\u3092s3\u30a8\u30f3\u30c8\u30ea\u30dd\u30a4\u30f3\u30c8\u306e\u30a2\u30c9\u30ec\u30b9\u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002
          • \u3053\u306e\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306f https://s3.amazonaws.com \u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/#_2","title":"\u30b3\u30f3\u30c6\u30ca\u56fa\u6709\u306e\u8a2d\u5b9a","text":"

        \u6b21\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059:

        • HarborRegistry
        • HarborRegistryCtl
        • Harbor-Core
        • Harbor-Database
        • Harbor-Jobservice
        • Harbor-Trivy

        \u6b21\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u305b\u305a\u306b\u5b9f\u884c\u3067\u304d\u307e\u3059:

        • Harbor-Nginx
        • Harbor-Portal
        • Harbor-Redis
        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/","title":"\u30cf\u30fc\u30d0\u30fc\u30b3\u30a2","text":"

        Harbor-Core\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u5185\u306e/etc/core/app.conf\u306b\u4f4d\u7f6e\u3059\u308b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3001\u8d77\u52d5\u3057\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u884c\u308f\u308c\u308b\u4efb\u610f\u306e\u5909\u66f4\u306f\u4e00\u6642\u7684\u306a\u3082\u306e\u3067\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3055\u308c\u308b\u3068\u6301\u7d9a\u3057\u307e\u305b\u3093\u3002

        \u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u308bConfigmap\u306f\u3001services/harbor-core/harbor-core.yml\u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u306eLagoon\u5185\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u3053\u306econfigmap\u306b\u884c\u308f\u308c\u308b\u4efb\u610f\u306e\u5909\u66f4\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u518d\u8d77\u52d5\u3092\u307e\u305f\u3044\u3067\u6301\u7d9a\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/#_2","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
        • _REDIS_URL
          • Redis\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u63a5\u7d9a\u60c5\u5831\u3092harbor-core\u3068Chartmuseum\u30b5\u30fc\u30d3\u30b9\u306b\u4f1d\u3048\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fharbor-redis:6379,100,\u3067\u3059\u3002
        • _REDIS_URL_REG
          • harborregistry\u304cRedis\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3079\u304dURL\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fredis://harbor-redis:6379/2\u3067\u3059\u3002
        • ADMIRAL_URL
          • admiral\u30b5\u30fc\u30d3\u30b9\u306e\u5834\u6240\u3092harbor-core\u306b\u4f1d\u3048\u307e\u3059\u3002
          • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306fLagoon\u306eHarbor\u5b9f\u88c5\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fNA\u3067\u3059\u3002
        • CFG_EXPIRATION
          • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f5\u3067\u3059\u3002
        • CHART_CACHE_DRIVER
          • harbor-core\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c1\u30e3\u30fc\u30c8\u3092\u3069\u3053\u306b\u4fdd\u5b58\u3059\u308b\u304b\u3092\u4f1d\u3048\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fredis\u3067\u3059\u3002
        • CLAIR_ADAPTER_URL
          • harbor-core\u304c\u4f7f\u7528\u3059\u3079\u304dURL\u3002 * Harbor-trivy\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f http://harbor-trivy:8080 \u3067\u3059\u3002
        • CLAIR_DB
          • harborclair\u304c\u4f7f\u7528\u3059\u3079\u304d\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30bf\u30a4\u30d7\u3002
          • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f postgres \u3067\u3059\u3002
        • CLAIR_DB_HOST
          • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
          • harbor-core\u306bharborclair\u30b5\u30fc\u30d3\u30b9\u306e\u5834\u6240\u3092\u4f1d\u3048\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f harbor-database \u3067\u3059\u3002
        • CLAIR_DB_PASSWORD
          • harborclair\u306epostgres\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u30ef\u30fc\u30c9\u3002
          • \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306e\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f test123 \u3067\u3059\u3002
          • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u521d\u3081\u3066\u7a3c\u50cd\u3059\u308bLagoon\u4e0a\u3067\u8a2d\u5b9a\u3055\u308c\u305f\u6642\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • CLAIR_DB_PORT
          • harborclair\u304charborclair\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30dd\u30fc\u30c8\u3002
          • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f 5432 \u3067\u3059\u3002
        • CLAIR_DB_SSLMODE
          • harborclair\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306bSSL\u3092\u4f7f\u7528\u3059\u3079\u304d\u304b\u3069\u3046\u304b\u3002
          • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f disable \u3067\u3059\u3002
        • CLAIR_DB *USERNAME`
          • \u30e6\u30fc\u30b6\u30fc\u540dharborclair\u306f\u3001postgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3079\u304d\u3067\u3059\u3002
          • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u30ec\u30ac\u30b7\u30fc\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fpostgres\u3067\u3059\u3002
        • CLAIR_HEALTH_CHECK_SERVER_URL
          • \u3053\u306e\u5024\u306f\u3001harbor-core\u304charbor-trivy\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u5065\u5eb7\u30c1\u30a7\u30c3\u30af\u3092\u767a\u884c\u3059\u308b\u5834\u6240\u3092\u6307\u793a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-trivy:8080\u3067\u3059\u3002
        • CLAIR_URL
          • harbor-core\u304charbor-trivy\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304dURL\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-trivy:6060\u3067\u3059\u3002
        • CONFIG_PATH
          • harbor-core\u304c\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u63a2\u3059\u3079\u304d\u5834\u6240\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f/etc/core/app.conf\u3067\u3059\u3002
        • CORE_SECRET
          • \u3053\u306e\u5024\u306f\u3001harbor-core\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306b\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u521d\u3081\u3066Lagoon\u3067\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • CORE_URL
          • harbor-core\u304c\u4ed6\u306eHarbor\u30b5\u30fc\u30d3\u30b9\u306b\u516c\u958b\u3057\u3001\u305d\u308c\u3089\u304charbor-core\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306eURL\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-core:8080\u3067\u3059\u3002
        • DATABASE_TYPE
          • Harbor\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7 \u4f7f\u7528\u3059\u308b\u3079\u304d\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f postgresql\u3067\u3059\u3002
        • HARBOR_ADMIN_PASSWORD
          • admin \u30e6\u30fc\u30b6\u30fc\u3092\u4f7f\u7528\u3057\u3066harbor\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3079\u304d\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f admin\u3067\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u6700\u521d\u306b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u305f\u969b\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • HARBOR_NGINX_ENDPOINT
          • \u3053\u306e\u74b0\u5883\u5909\u6570\u306f\u3001harborregistry\u306b\u3001\u305d\u306eNGINX\u30a4\u30f3\u30b0\u30ec\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001harbor-nginx\u304c\u3069\u3053\u3067\u7a3c\u50cd\u3057\u3066\u3044\u308b\u304b\u3092\u901a\u77e5\u3057\u3001UI\u5185\u306e\u9069\u5207\u306a\u30d7\u30c3\u30b7\u30e5\u3068\u30d7\u30eb\u306e\u6307\u793a\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306a\u3069\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f http://harbor-nginx:8080\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          • Lagoon\u306f\u3001\u672c\u756a\u74b0\u5883\u3067\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306b\u3053\u306e\u5909\u6570\u3092\u81ea\u52d5\u7684\u306b\u53d6\u5f97\u3057\u8a2d\u5b9a\u3057\u3088\u3046\u3068\u8a66\u307f\u307e\u3059\u3002\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u5931\u6557\u3059\u308b\u3068\u3001\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002
        • HTTP_PROXY
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
        • HTTPS_PROXY
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
        • JOBSERVICE_SECRET
          • \u3053\u306e\u5024\u306f\u3001harbor-jobservice\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306e\u5834\u5408\u3001secret123\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u6700\u521d\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u969b\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002 \u306f\u3001Lagoon\u304c\u52d5\u4f5c\u3057\u3066\u3044\u308b\u72b6\u614b\u3067\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
        • JOBSERVICE_URL
          • harbor-core\u304charbor-jobservice\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304dURL\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306fhttp://harbor-jobservice:8080\u3067\u3059\u3002
        • LOG_LEVEL
          • harbor-core\u30b5\u30fc\u30d3\u30b9\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30ed\u30b0\u30ec\u30d9\u30eb\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306ferror\u3067\u3059\u3002
        • NO_PROXY
          • \u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30d7\u30ed\u30ad\u30b7\u3055\u308c\u308b\u3079\u304d\u3067\u306f\u306a\u3044\u30db\u30b9\u30c8\u306e\u30ea\u30b9\u30c8\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306fharbor-core,harbor-jobservice,harbor-database,harbor-trivy,harborregistry,harbor-portal,127.0.0.1,localhost,.local,.internal\u3067\u3059\u3002
        • PORTAL_URL
          • \u3053\u306e\u5024\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u304charbor-portal\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u5834\u6240\u3092\u6307\u793a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306fhttp://harbor-portal:8080\u3067\u3059\u3002
        • POSTGRESQL_DATABASE
          • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u969b\u306b\u4f7f\u7528\u3059\u3079\u304dpostgres\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306fregistry\u3067\u3059\u3002
        • POSTGRESQL_HOST
          • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u3079\u304d\u5834\u6240\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306fharbor-database\u3067\u3059\u3002
        • POSTGRESQL_MAX_IDLE_CONNS
          • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u5bfe\u3057\u3066\u958b\u653e\u3057\u3066\u304a\u304f\u3079\u304d\u6700\u5927\u306e\u30a2\u30a4\u30c9\u30eb\u63a5\u7d9a\u6570\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f50\u3067\u3059\u3002
        • POSTGRESQL_MAX_OPEN_CONNS
          • harbor-core\u304c\u958b\u304f\u3079\u304d\u6700\u5927\u306e\u63a5\u7d9a\u6570\u3002 -\u30b3\u30a2\u306fpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f100\u3067\u3059\u3002
        • POSTGRESQL_PASSWORD
          • Harbor\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30d1\u30b9\u30ef\u30fc\u30c9\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u30e9\u30f3\u30c0\u30e0\u306b\u751f\u6210\u3055\u308c\u305f\u5024\u3067\u3059\u3002
        • POSTGRESQL_PORT
          • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30dd\u30fc\u30c8\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f5432\u3067\u3059\u3002
        • POSTGRESQL_USERNAME
          • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30e6\u30fc\u30b6\u30fc\u540d\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fpostgres\u3067\u3059\u3002
        • POSTGRESQL_SSLMODE
          • harbor-core\u304cSSL\u3092\u4f7f\u7528\u3057\u3066postgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u3079\u304d\u304b\u3069\u3046\u304b\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fdisable\u3067\u3059\u3002
        • REGISTRY_HTTP_SECRET
          • \u3053\u306e\u5024\u306f\u3001harborregistry\u306b\u63a5\u7d9a\u3059\u308b\u5404\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u521d\u3081\u3066\u7a3c\u50cd\u3057\u3066\u3044\u308bLagoon\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u751f\u6210\u3055\u308c\u308b\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • REGISTRY_STORAGE_PROVIDER_NAME
          • harborregistry\u304c\u4f7f\u7528\u3059\u3079\u304d\u30b9\u30c8\u30ec\u30fc\u30b8\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fs3\u3067\u3059\u3002
        • REGISTRY_URL
          • harbor-core\u304charborregistry\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304dURL\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f * \u5024\u306fhttp://harborregistry:5000\u3067\u3059\u3002
        • REGISTRYCTL_URL
          • \u3053\u306e\u5024\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u304charborregistryctl\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u5834\u6240\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harborregistryctl:8080\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
        • ROBOT_TOKEN_DURATION
          • \u3053\u306e\u5024\u306f\u3001\u5404\u554f\u984c\u306e\u30ed\u30dc\u30c3\u30c8\u30c8\u30fc\u30af\u30f3\u304c\u6709\u52b9\u3067\u3042\u308b\u3079\u304d\u65e5\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f999\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
        • SYNC_REGISTRY
          • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ffalse\u3067\u3059\u3002
        • TOKEN_SERVICE_URL
          • harbor-core\u30b5\u30fc\u30d3\u30b9\u304c\u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u516c\u958b\u3059\u308bURL\u3067\u3001\u3053\u308c\u306b\u3088\u308aJWT\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-core:8080/service/token\u3067\u3059\u3002
        • TRIVY_ADAPTER_URL
          • harbor-core\u30b5\u30fc\u30d3\u30b9\u304charbor-trivy\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308bURL\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-trivy:8080\u3067\u3059\u3002
        • WITH_CHARTMUSEUM
          • Chartmuseum\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092harbor-core\u306b\u4f1d\u3048\u307e\u3059\u3002
          • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306fLagoon\u306eHarbor\u5b9f\u88c5\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ffalse\u3067\u3059\u3002
        • WITH_CLAIR
          • harborclair\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092harbor-core\u306b\u4f1d\u3048\u307e\u3059\u3002
          • Lagoon\u306fHarbor\u306e\u5b9f\u88c5\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ftrue\u3067\u3059\u3002
        • WITH_NOTARY
          • harbor-core\u306b - \u30ce\u30fc\u30bf\u30ea\u30fc\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306ecore\u3002
          • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3001Lagoon\u304c\u5b9f\u88c5\u3057\u305fHarbor\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ffalse\u3067\u3059\u3002
        • WITH_TRIVY
          • Trivy\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092harbor-core\u306b\u4f1d\u3048\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ftrue\u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/","title":"Harbor-\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9","text":"

        Harbor-\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u8d77\u52d5\u3059\u308b\u305f\u3081\u306b\u7279\u5b9a\u306e\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u305d\u308c\u3089\u306fservices/harbor-database/harbor-core.yml\u30d5\u30a1\u30a4\u30eb\u3067\u8aac\u660e\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u5185\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/#_1","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
        • POSTGRES_DB
          • Postgres\u30b5\u30fc\u30d3\u30b9\u3092\u521d\u671f\u5316\u3059\u308b\u969b\u306b\u8a2d\u5b9a\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fpostgres\u3067\u3059\u3002
        • POSTGRES_PASSWORD
          • Postgres\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30eb\u30fc\u30c8\u30d1\u30b9\u30ef\u30fc\u30c9\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ftest123\u3067\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u52d5\u4f5c\u3057\u3066\u3044\u308bLagoon\u4e0a\u3067\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • POSTGRES_USER
          • Postgres\u30b5\u30fc\u30d3\u30b9\u3092\u521d\u671f\u5316\u3059\u308b\u969b\u306b\u8a2d\u5b9a\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fpostgres\u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/","title":"Harbor-Jobservice","text":"

        Harbor-Jobservice\u306f\u3001\u8d77\u52d5\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30b3\u30f3\u30c6\u30ca\u5185\u306e/etc/jobservice/config.yml\u306b\u4f4d\u7f6e\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u5909\u66f4\u306f\u4e00\u6642\u7684\u306a\u3082\u306e\u3067\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3055\u308c\u308b\u3068\u6301\u7d9a\u3057\u307e\u305b\u3093\u3002

        \u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u308b\u5143\u3068\u306a\u308bconfigmap\u306f\u3001Lagoon\u5185\u306eservices/harbor-jobservice/harbor-jobservice.yml\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306econfigmap\u3078\u306e\u5909\u66f4\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u518d\u8d77\u52d5\u3092\u8d8a\u3048\u3066\u6301\u7d9a\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/#_1","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
        • CORE_URL
          • \u3053\u306e\u5024\u306fharbor-jobservice\u306bharbor-core\u304c\u3069\u3053\u306b\u3042\u308b\u304b\u3092\u4f1d\u3048\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-core:8080\u3067\u3059\u3002
        • CORE_SECRET
          • \u3053\u306e\u5024\u306f\u3001harbor-core\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u307e\u305f\u306fCI\u30c6\u30b9\u30c8\u4e2d\u306b\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u5b9f\u884c\u4e2d\u306eLagoon\u4e0a\u3067\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • HTTP_PROXY
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
        • HTTPS_PROXY
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
        • JOBSERVICE_SECRET
          • \u3053\u306e\u5024\u306f\u3001\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002 harbor-jobservice\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3001CI\u30c6\u30b9\u30c8\u4e2d\u306e\u5834\u5408\u306fsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u5b9f\u884c\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • LOG_LEVEL
          • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30ec\u30d9\u30eb\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ferror\u3067\u3059\u3002
            • \u975e\u5e38\u306b\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001debug\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
        • NO_PROXY
          • \u305d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30d7\u30ed\u30ad\u30b7\u5316\u3055\u308c\u308b\u3079\u304d\u3067\u306f\u306a\u3044\u30db\u30b9\u30c8\u306e\u30ea\u30b9\u30c8\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306f harbor-core,harbor-jobservice,harbor-database,harbor-trivy,harborregistry,harbor-portal,127.0.0.1,localhost,.local,.internal\u3067\u3059\u3002
        • REGISTRY_CONTROLLER_URL
          • \u3053\u306e\u5024\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u304charborregistryctl\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u5834\u6240\u3092\u6307\u793a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f http://harborregistryctl:8080\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
        • SCANNER_LOG_LEVEL
          • \u30b9\u30ad\u30e3\u30cb\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30ec\u30d9\u30eb\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ferror\u3067\u3059\u3002
            • \u975e\u5e38\u306b\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001debug\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
        • SCANNER_STORE_REDIS_URL
          • \u3053\u306e\u5024\u306f\u3001harbor-trivy\u304cRedis\u30b9\u30c8\u30a2\u306b\u63a5\u7d9a\u3059\u308b\u65b9\u6cd5\u3092\u6307\u793a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f redis://harbor-redis:6379/4\u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/","title":"Harbor-Trivy","text":"

        Harbor-Trivy\u306f\u7279\u5b9a\u306e\u74b0\u5883\u5909\u6570\u3092\u4ecb\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u4f7f\u7528\u3057\u307e\u305b\u3093\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"
        • SCANNER_LOG_LEVEL
          • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30ec\u30d9\u30eb\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ferror\u3067\u3059\u3002
            • \u975e\u5e38\u306b\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u3053\u308c\u3092debug\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
        • SCANNER_STORE_REDIS_URL
          • \u3053\u306e\u5024\u306fharbor-trivy\u306b\u3001\u81ea\u8eab\u306eRedis\u30b9\u30c8\u30a2\u3078\u306e\u63a5\u7d9a\u65b9\u6cd5\u3092\u6307\u793a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fredis://harbor-redis:6379/4\u3067\u3059\u3002
        • SCANNER_JOB_QUEUE_REDIS_URL
          • \u3053\u306e\u5024\u306fharbor-trivy\u306b\u3001\u81ea\u8eab\u306eRedis\u30b9\u30c8\u30a2\u3078\u306e\u63a5\u7d9a\u65b9\u6cd5\u3092\u6307\u793a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fredis://harbor-redis:6379/4\u3067\u3059\u3002
        • SCANNER_TRIVY_VULN_TYPE
          • \u3053\u306e\u5024\u306fharbor-trivy\u306b\u3001\u4f55\u30bf\u30a4\u30d7\u306e\u8106\u5f31\u6027\u3092\u691c\u7d22\u3059\u3079\u304d\u304b\u3092\u6307\u793a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fos,library\u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/","title":"HarborRegistry","text":"

        HarborRegistry\u306f\u3001\u8d77\u52d5\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u3057\u3001\u305d\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u30b3\u30f3\u30c6\u30ca\u5185\u306e /etc/registry/config.yml \u306b\u4f4d\u7f6e\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u5909\u66f4\u306f\u4e00\u6642\u7684\u306a\u3082\u306e\u3067\u3042\u308a\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3055\u308c\u308b\u3068\u6301\u7d9a\u3057\u307e\u305b\u3093\u3002

        \u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f services/harborregistry/harborregistry.yml \u30d5\u30a1\u30a4\u30eb\u5185\u306b\u4fdd\u5b58\u3055\u308c\u3001 /etc/registry/pre-config.yml \u3068\u3057\u3066\u30b3\u30f3\u30c6\u30ca\u5185\u306b\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3059\u3002

        \u30ab\u30b9\u30bf\u30e0\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8 services/harborregistry/entrypoint.sh \u306f\u3001\u63d0\u4f9b\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u3092\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u8ee2\u9001\u3057\u3001\u7d50\u679c\u3092 /etc/registry/config.yml \u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/#_1","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
        • CORE_SECRET
          • \u3053\u306e\u5024\u306f\u3001harbor-core \u306b\u63a5\u7d9a\u3059\u308b\u69d8\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u305f\u308aCI\u30c6\u30b9\u30c8\u4e2d\u306b\u8a2d\u5b9a\u3055\u308c\u308b secret123 \u3067\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u5b9f\u884c\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u308b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • HARBOR_NGINX_ENDPOINT
          • \u3053\u306e\u74b0\u5883\u5909\u6570\u306f\u3001harborregistry\u306b\u3001\u305d\u306eNGINX\u30a4\u30f3\u30b0\u30ec\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc harbor-nginx\u304c\u3069\u3053\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u901a\u77e5\u3057\u3001UI\u5185\u3067\u9069\u5207\u306a\u30d7\u30c3\u30b7\u30e5\u3068\u30d7\u30eb\u306e\u6307\u793a\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u3001\u305d\u306e\u4ed6\u306e\u4e8b\u9805\u3092\u901a\u77e5\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059 \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u305f\u308aCI\u30c6\u30b9\u30c8\u4e2d\u306b\u306f\u3001http://harbor-nginx:8080\u306b\u306a\u308a\u307e\u3059\u3002
          • \u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u74b0\u5883\u3067Lagoon\u304c\u81ea\u52d5\u7684\u306b\u3053\u306e\u5909\u6570\u3092\u53d6\u5f97\u3057\u30bb\u30c3\u30c8\u3057\u3088\u3046\u3068\u3057\u307e\u3059\u3002\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u5931\u6557\u3059\u308b\u3068\u3001\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u5b9f\u884c\u306b\u5931\u6557\u3057\u307e\u3059\u3002
        • JOBSERVICE_SECRET
          • \u3053\u306e\u5024\u306f\u3001harbor-jobservice\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u6700\u521d\u306b\u7a3c\u50cd\u4e2d\u306eLagoon\u4e0a\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • REGISTRY_HTTP_SECRET
          • \u3053\u306e\u5024\u306f\u3001harborregistry\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u6700\u521d\u306b\u7a3c\u50cd\u4e2d\u306eLagoon\u4e0a\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • REGISTRY_REDIS_PASSWORD
          • \u3053\u306e\u74b0\u5883\u5909\u6570\u306f\u3001harborregistryctl\u304cRedis\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u6307\u793a\u3057\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/","title":"HarborRegistryCtl","text":"

        HarborRegistryCtl\u306f\u8d77\u52d5\u3059\u308b\u305f\u3081\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u3057\u3001\u305d\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u30b3\u30f3\u30c6\u30ca\u5185\u306e/etc/registryctl/config.yml\u306b\u4f4d\u7f6e\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u5909\u66f4\u306f\u4e00\u6642\u7684\u306a\u3082\u306e\u3067\u3042\u308a\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3055\u308c\u308b\u3068\u6301\u7d9a\u3057\u307e\u305b\u3093\u3002

        \u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u308b\u5143\u3068\u306a\u308bconfigmap\u306f\u3001Lagoon\u5185\u306eservices/harborregistryctl/harborregistry.yml\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306econfigmap\u3078\u306e\u5909\u66f4\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u304c\u518d\u8d77\u52d5\u3055\u308c\u3066\u3082\u4fdd\u6301\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/#_1","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
        • CORE_SECRET
          • \u3053\u306e\u5024\u306f\u3001harbor-core\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u305f\u308aCI\u30c6\u30b9\u30c8\u4e2d\u306b\u8a2d\u5b9a\u3055\u308c\u308bsecret123\u3067\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u7a3c\u50cd\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u969b\u306b\u4f5c\u6210\u3055\u308c\u308b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • JOBSERVICE_SECRET
          • \u3053\u306e\u5024\u306f\u3001harbor-jobservice\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u305f\u308aCI\u30c6\u30b9\u30c8\u4e2d\u306b\u8a2d\u5b9a\u3055\u308c\u308bsecret123\u3067\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u7a3c\u50cd\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u969b\u306b\u4f5c\u6210\u3055\u308c\u308b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • REGISTRY_HTTP_SECRET
          • \u3053\u306e\u5024\u306f\u3001 harborregistry\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u307e\u305f\u306fCI\u30c6\u30b9\u30c8\u4e2d\u306b\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
          • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u52d5\u4f5c\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
        • REGISTRY_REDIS_PASSWORD
          • \u3053\u306e\u74b0\u5883\u5909\u6570\u306f\u3001harborregistryctl\u306bRedis\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u4f1d\u3048\u307e\u3059\u3002
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u6587\u5b57\u5217\u3067\u3059\u3002
        "},{"location":"ja/using-lagoon-the-basics/","title":"Lagoon\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9 - \u6982\u8981","text":"

        \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Lagoon\u306e\u57fa\u672c\u7684\u306a\u7279\u5fb4\u3068\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306b\u6163\u308c\u3066\u3044\u308b\u65b9\u306f\u3001Lagoon\u306e\u9ad8\u5ea6\u306a\u4f7f\u3044\u65b9\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002

        \u30d8\u30eb\u30d7\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001\u79c1\u305f\u3061\u306eDiscord\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30e1\u30f3\u30d0\u30fc\u3068\u30e1\u30f3\u30c6\u30ca\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/#_1","title":"\u5fc5\u8981\u6761\u4ef6","text":""},{"location":"ja/using-lagoon-the-basics/#docker","title":"Docker","text":"

        Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u304cDocker\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30ef\u30fc\u30af\u30b9\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306eDocker\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002Docker\u306f\u3053\u3061\u3089\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001Docker\u306b\u306f\u6700\u4f4e\u3067\u30824CPUs\u30684GB RAM\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/#_2","title":"\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883","text":"

        pygmy\u3001Lando\u3001DDEV\u304b\u3089\u9078\u3076\u3053\u3068\u304c\u3067\u304d\u307e\u3059 - \u9078\u629e\u306f\u3042\u306a\u305f\u6b21\u7b2c\u3067\u3059\uff01

        Lagoon\u3068\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306b\u3064\u3044\u3066\u3082\u3063\u3068\u5b66\u3073\u307e\u3057\u3087\u3046\u3002

        "},{"location":"ja/using-lagoon-the-basics/#step-by-step-guides","title":"\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u306e\u30ac\u30a4\u30c9","text":"
        • \u4e00\u822c: Lagoon\u3067\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b
        • \u4e00\u822c: \u521d\u3081\u3066\u306e\u30c7\u30d7\u30ed\u30a4
        • Drupal: Drupal\u3067\u306e\u521d\u3081\u3066\u306e\u30c7\u30d7\u30ed\u30a4
        • Drupal: Drupal\u30b5\u30a4\u30c8\u3092Lagoon\u5bfe\u5fdc\u306b\u3059\u308b
        • \u3059\u3079\u3066: Lagoon\u306e\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d7\u30ed\u30bb\u30b9
        "},{"location":"ja/using-lagoon-the-basics/#lagoon","title":"Lagoon\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u6982\u8981","text":""},{"location":"ja/using-lagoon-the-basics/#lagoonyml","title":".lagoon.yml","text":"

        \u3053\u308c\u306fLagoon\u304c\u4f55\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u304b\u3001\u307e\u305f\u591a\u304f\u306e\u4ed6\u306e\u4e8b\u67c4\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u4e3b\u8981\u306a\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002.lagoon.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/#docker-composeyml","title":"docker-compose.yml","text":"

        \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306fDocker Compose\u306b\u3088\u3063\u3066\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3092\u958b\u59cb\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002Lagoon\u3082\u3053\u308c\u3092\u4f7f\u7528\u3057\u3066\u3001\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3079\u304d\u304b\u3001\u3069\u306e\u30bf\u30a4\u30d7\u3067\u3001\u3069\u306e\u3088\u3046\u306b\u30d3\u30eb\u30c9\u3059\u308b\u304b\u3092\u7406\u89e3\u3057\u307e\u3059\u3002\u3053\u308c\u306flabels\u3092\u901a\u3058\u3066\u884c\u308f\u308c\u307e\u3059\u3002docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/#dockerfiles","title":"Dockerfiles","text":"

        \u4e00\u90e8\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3068\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u63d0\u4f9b\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u901a\u5e38\u30012\u3064\u306e\u7406\u7531\u304c\u3042\u308a\u307e\u3059:

        1. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30fc\u30c9: NGINX\u3001PHP\u3001Node.js\u306a\u3069\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u305d\u306e\u30a4\u30e1\u30fc\u30b8\u5185\u306b\u5b9f\u969b\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b3\u30fc\u30c9\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306fDocker\u30d3\u30eb\u30c9\u30b9\u30c6\u30c3\u30d7\u4e2d\u306b\u884c\u308f\u308c\u3001Dockerfile\u3067\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002Lagoon\u306fDocker\u3092\u5b8c\u5168\u306b\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u305f\u3081Dockerfile\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3088\u3063\u3066\u51fa\u6765\u4e0a\u304c\u308b\u30a4\u30e1\u30fc\u30b8\u3092\u5b8c\u5168\u306b\u5236\u5fa1\u3067\u304d\u307e\u3059\u3002
        2. \u30a4\u30e1\u30fc\u30b8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba: Lagoon\u3067\u306f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u3042\u306a\u305f\u306e\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u8ffd\u52a0\u306e\u74b0\u5883\u5909\u6570\u3092\u633f\u5165\u3057\u305f\u308a\u3001\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u305f\u308a\u3001\u3055\u3089\u306b\u8ffd\u52a0\u306e\u30c4\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3082\u542b\u307e\u308c\u307e\u3059\u3002Docker\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u306e\u30c4\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u969b\u306b\u306f\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u5c06\u6765\u7684\u306b\u4efb\u610f\u306e\u9069\u5fdc\u3092\u7dad\u6301\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3089\u3067\u3059\uff01
        "},{"location":"ja/using-lagoon-the-basics/#lagoon_1","title":"Lagoon\u306b\u3088\u308b\u30b5\u30dd\u30fc\u30c8\u30b5\u30fc\u30d3\u30b9\u3068\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8","text":"\u30bf\u30a4\u30d7 \u30d0\u30fc\u30b8\u30e7\u30f3 Dockerfile MariaDB 10.4, 10.5, 10.6, 10.11 mariadb/Dockerfile PostgreSQL 11, 12, 13, 14, 15 postgres/Dockerfile MongoDB 4 mongo/Dockerfile NGINX openresty/1.25 nginx/Dockerfile Node.js 18, 20, 22 node/Dockerfile PHP FPM 8.1, 8.2, 8.3 php/fpm/Dockerfile PHP CLI 8.1, 8.2, 8.3 php/cli/Dockerfile Python 3.8, 3.9, 3.10, 3.11, 3.12 python/Dockerfile Redis 6, 7 redis/Dockerfile Solr 8, 9 solr/Dockerfile Varnish 6, 7 varnish/Dockerfile Opensearch 2 opensearch/Dockerfiles RabbitMQ 3.10 rabbitmq/Dockerfile Ruby 3.1, 3.2, 3.3 ruby/Dockerfile

        \u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u306fhttps://hub.docker.com/u/uselagoon\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002\u7279\u6027\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u89b3\u70b9\u304b\u3089\u5e38\u306b\u6700\u65b0\u306e\u30bf\u30b0(\u4f8b:uselagoon/nginx:latest)\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002

        \u7279\u5b9a\u306eLagoon\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30e1\u30fc\u30b8\u3001\u4f8b\u3048\u3070uselagoon/nginx:20.10.0\u3084uselagoon/node-10:20.10.0\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u65b0\u3057\u3044Lagoon\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u305f\u3089\u3059\u3050\u306b\u30a4\u30e1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5404\u81ea\u306e\u8cac\u4efb\u3067\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044\uff01

        "},{"location":"ja/using-lagoon-the-basics/configure-webhooks/","title":"Webhooks\u306e\u8a2d\u5b9a","text":"

        Lagoon\u306e\u7ba1\u7406\u8005\u306f\u3001webhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u3082\u3042\u306a\u305f\u306b\u6559\u3048\u3066\u304f\u308c\u308b\u3067\u3057\u3087\u3046\u3002\u3053\u306e\u30eb\u30fc\u30c8\u3092\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30a2\u30a6\u30c8\u30b4\u30fc\u30a4\u30f3\u30b0webhook\u306b\u8ffd\u52a0\u3057\u3001Lagoon\u306b\u9001\u4fe1\u3059\u308b\u30a4\u30d9\u30f3\u30c8\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u901a\u5e38\u306f\u5168\u3066\u306e\u30d7\u30c3\u30b7\u30e5\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002Lagoon\u3067\u306f\u3069\u306e\u30d6\u30e9\u30f3\u30c1\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b9f\u969b\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306e\u6b63\u898f\u8868\u73fe\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001Lagoon\u306e\u7ba1\u7406\u8005\u304c\u305d\u308c\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001feature-\u3067\u59cb\u307e\u308b\u5168\u3066\u306e\u30d6\u30e9\u30f3\u30c1\u3092Lagoon\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

        amazee.io\u306e\u304a\u5ba2\u69d8\u3078\u306e\u60c5\u5831

        amazee.io\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3067\u5834\u5408\u3001webhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002https://hooks.lagoon.amazeeio.cloud

        \u5371\u967a

        \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3059\u308b\u306b\u306f\u3001\u3053\u308c\u3089\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u9ad8\u3044\u30ec\u30d9\u30eb\u306e\u30a2\u30af\u30bb\u30b9\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3042\u306a\u305f\u306e\u7d44\u7e54\u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u307e\u305f\u306f\u3042\u306a\u305f\u306e\u7d44\u7e54\u5185\u306e\u9069\u5207\u306a\u8cac\u4efb\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/configure-webhooks/#github","title":"GitHub","text":"
        1. GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u8a2d\u5b9a -> Webhooks -> Add webhook\u306b\u9032\u307f\u307e\u3059\u3002
        2. Payload URL\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308b\u3001\u3042\u306a\u305f\u306eLagoon\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306ewebhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u3067\u3059\u3002
        3. Content type\u3092application/json\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
        4. \"Let me select individual events\"\u3092\u9078\u629e\u3057\u307e\u3059\u3002
        5. \u3069\u306e\u30a4\u30d9\u30f3\u30c8\u304cwebhook\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u304b\u3092\u9078\u629e\u3057\u307e\u3059\u3002Push\u3068Pull request\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u9001\u4fe1\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eLagoon\u8a2d\u5b9a\u3067\u3055\u3089\u306b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002
        6. webhook\u304cActive\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
        7. Add webhook\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002
        "},{"location":"ja/using-lagoon-the-basics/configure-webhooks/#gitlab","title":"GitLab","text":"
        1. GitLab\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u8a2d\u5b9a -> \u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
        2. URL\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308b\u3001Lagoon\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306ewebhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u3067\u3059\u3002
        3. Lagoon\u306b\u901a\u77e5\u3092\u9001\u4fe1\u3059\u308bTrigger\u30a4\u30d9\u30f3\u30c8\u3092\u9078\u629e\u3057\u307e\u3059\u3002Push events\u3068Merge request events\u3092\u9078\u629e\u3057\u3001\u305d\u306e\u5f8cLagoon\u306e\u8a2d\u5b9a\u3067\u3055\u3089\u306b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002
        4. Add webhook\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002
        "},{"location":"ja/using-lagoon-the-basics/configure-webhooks/#bitbucket","title":"Bitbucket","text":"
        1. \u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u8a2d\u5b9a -> \u30a6\u30a7\u30d6\u30d5\u30c3\u30af -> \u65b0\u3057\u3044\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u8ffd\u52a0\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
        2. Title\u306f\u53c2\u7167\u7528\u3067\u3059\u3002
        3. URL\u306f\u3042\u306a\u305f\u306eLagoon\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306ewebhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u3067\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002
        4. Choose from a full list of triggers\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u4ee5\u4e0b\u3092\u9078\u629e\u3057\u307e\u3059:

          • Repository
            • PUsh
          • Pull Request
            • Created
            • Updated
            • Approved
            • Approval removed
            • Merged
            • Declined

          5. Save\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066Bitbucket\u306e\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/first-deployment/","title":"\u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4","text":"

        \u6ce8\u610f:

        Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3001Drupal\u306e\u521d\u56de\u30c7\u30d7\u30ed\u30a4\u3092\u304a\u8aad\u307f\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/first-deployment/#1","title":"1. \u6e96\u5099\u304c\u6574\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059","text":"

        \u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u6210\u529f\u3055\u305b\u308b\u305f\u3081\u306b\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304cLagoon\u5316\u3055\u308c\u3066\u304a\u308a\u3001Lagoon\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3082\u3057\u305d\u3046\u3067\u306a\u3044\u5834\u5408\u3001\u307e\u305f\u306f\u78ba\u4fe1\u304c\u6301\u3066\u306a\u3044\u5834\u5408\u3001\u307e\u305f\u306f\u99b4\u67d3\u307f\u304c\u306a\u3044\u5834\u5408\u306f\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u306e\u30ac\u30a4\u30c9\u306b\u623b\u3063\u3066\u3069\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3059\u308b\u304b\u898b\u3066\u304b\u3089\u3001\u518d\u5ea6\u3053\u306e\u30da\u30fc\u30b8\u306b\u6765\u3066\u304f\u3060\u3055\u3044\uff01

        "},{"location":"ja/using-lagoon-the-basics/first-deployment/#2","title":"2. \u30d7\u30c3\u30b7\u30e5","text":"

        Lagoon\u3067\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

        \u65b0\u3057\u3044\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3082\u306e\u304c\u306a\u3044\u5834\u5408\u3067\u3082\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\uff01\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        Git push
        git commit --allow-empty -m \"go, go! Lagoon!\"\ngit push\n

        \u3053\u308c\u306b\u3088\u308a\u30d7\u30c3\u30b7\u30e5\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u3001Git\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u304c\u8a2d\u5b9a\u3055\u308c\u305fWebhook\u3092\u901a\u3058\u3066Lagoon\u306b\u3053\u306e\u30d7\u30c3\u30b7\u30e5\u3092\u901a\u77e5\u3057\u307e\u3059\u3002

        \u3059\u3079\u3066\u6b63\u3057\u3051\u308c\u3070\u8a2d\u5b9a\u3055\u308c\u305f\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u306e\u901a\u77e5\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002(\u3053\u308c\u306f\u89aa\u5207\u306aLagoon\u306e\u7ba1\u7406\u8005\u304c\u8a2d\u5b9a\u3057\u305f\u3082\u306e\u3067\u3059)

        \u3053\u308c\u306f\u3001Lagoon\u304c\u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u958b\u59cb\u3057\u305f\u3053\u3068\u3092\u901a\u77e5\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306e\u5927\u304d\u3055\u3084\u30b3\u30f3\u30c6\u30ca\u306e\u91cf\u306b\u3088\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u306b\u306f\u6570\u79d2\u304b\u304b\u308a\u307e\u3059\u3002\u30ea\u30e9\u30c3\u30af\u30b9\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4eca\u4f55\u304c\u8d77\u3053\u3063\u3066\u3044\u308b\u306e\u304b\u77e5\u308a\u305f\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30bb\u30b9\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        Lagoon UI \u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u5c55\u958b\u306e\u9032\u884c\u72b6\u6cc1\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059 (\u3053\u308c\u306b\u3064\u3044\u3066\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044)\u3002

        "},{"location":"ja/using-lagoon-the-basics/first-deployment/#3","title":"3. \u5b8c\u4e86\u3057\u307e\u3057\u305f","text":"

        Lagoon\u304c\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u3092\u5b8c\u4e86\u3059\u308b\u3068\u3001\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u306b2\u3064\u76ee\u306e\u901a\u77e5\u3092\u9001\u308a\u307e\u3059\u3002\u3053\u3053\u306b\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

        \u3053\u308c\u306b\u306f\u4ee5\u4e0b\u306e\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

        • \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8
        • \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u3068Git SHA
        • \u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u306e\u30ed\u30b0\u3078\u306e\u30ea\u30f3\u30af
        • \u74b0\u5883\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8(URL)\u3078\u306e\u30ea\u30f3\u30af

        \u307e\u305f\u3001\u3069\u306e\u3088\u3046\u306a\u901a\u77e5\u306a\u306e\u304b\u3092\u3059\u3050\u306b\u5224\u65ad\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 \u305d\u308c\u3089\u306f\u7d75\u6587\u5b57\u306b\u3088\u3063\u3066\u59cb\u307e\u308a\u307e\u3059\u3002\u30d3\u30eb\u30c9\u304c\u958b\u59cb\u3057\u305f\u3060\u3051\u306e\u60c5\u5831\u3067\u3042\u308b\u304b\u3001\u6210\u529f\u3067\u3042\u308b\u304b\u3001\u307e\u305f\u306f\u5931\u6557\u3067\u3042\u308b\u304b\u3002

        \u305d\u308c\u3060\u3051\u3067\u3059\uff01\u3042\u307e\u308a\u96e3\u3057\u304f\u306a\u304b\u3063\u305f\u3053\u3068\u3092\u9858\u3063\u3066\u3044\u307e\u3059\u3002devOps\u3092\u5229\u7528\u53ef\u80fd\u306b\u3059\u308b\u3053\u3068\u304c\u79c1\u305f\u3061\u306e\u76ee\u6a19\u3067\u3059\uff01

        "},{"location":"ja/using-lagoon-the-basics/first-deployment/#_2","title":"\u4ed6\u306e\u30d6\u30e9\u30f3\u30c1\u3084\u672c\u756a\u74b0\u5883\u306b\u3064\u3044\u3066\u306f\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f","text":"

        \u3053\u308c\u304cLagoon\u306e\u826f\u3044\u3068\u3053\u308d\u3067\u3059\u3002\u305d\u308c\u3089\u306f\u307e\u3063\u305f\u304f\u540c\u3058\u65b9\u6cd5\u3067\u3059\uff01\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3060\u3051\u3067\u3001\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/first-deployment/#_3","title":"\u5931\u6557\uff1f\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044","text":"

        \u30c7\u30d7\u30ed\u30a4\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u304b\uff1f\u79c1\u305f\u3061\u304c\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\u3002

        1. Drupal\u30b5\u30a4\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u5834\u5408\u3001Drupal\u306e\u521d\u56de\u30c7\u30d7\u30ed\u30a4\u3092\u8aad\u3080\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u306a\u305c\u3053\u308c\u304c\u8d77\u3053\u308b\u306e\u304b\u3092\u8aac\u660e\u3057\u307e\u3059\u3002
        2. \u30a8\u30e9\u30fc\u901a\u77e5\u306e Logs \u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d7\u30ed\u30bb\u30b9\u306e\u3069\u3053\u3067\u5931\u6557\u304c\u767a\u751f\u3057\u305f\u304b\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
        3. \u3082\u3057\u7406\u89e3\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u30b5\u30dd\u30fc\u30c8\u306b\u5c0b\u306d\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u79c1\u305f\u3061\u304c\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\uff01
        4. \u30b5\u30dd\u30fc\u30c8\u30c1\u30e3\u30f3\u30cd\u30eb\u307e\u305f\u306fDiscord\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u79c1\u305f\u3061\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002
        "},{"location":"ja/using-lagoon-the-basics/going-live/","title":"\u30e9\u30a4\u30d6\u914d\u4fe1\u958b\u59cb","text":"

        \u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3001\u3042\u306a\u305f\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u304cLagoon\u4e0a\u3067\u30e9\u30a4\u30d6\u914d\u4fe1\u3059\u308b\u4e00\u6b69\u624b\u524d\u306b\u6765\u307e\u3057\u305f\uff01\u3053\u308c\u3092\u3067\u304d\u308b\u3060\u3051\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u308b\u305f\u3081\u306b\u3001\u6700\u5f8c\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\u3092\u3054\u7528\u610f\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u3001\u30b5\u30a4\u30c8\u3092\u30e9\u30a4\u30d6\u914d\u4fe1\u3059\u308b\u524d\u306b\u6700\u5f8c\u306b\u78ba\u8a8d\u3059\u3079\u304d\u3053\u3068\u3092\u30ac\u30a4\u30c9\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/going-live/#lagoonyml","title":".lagoon.yml\u3092\u78ba\u8a8d\u3059\u308b","text":""},{"location":"ja/using-lagoon-the-basics/going-live/#ssl","title":"\u30eb\u30fc\u30c8 / SSL","text":"

        \u3042\u306a\u305f\u306e.lagoon.yml\u306b\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30c9\u30e1\u30a4\u30f3\u3092Lagoon\u306b\u5411\u3051\u306a\u3044\u5834\u5408\u3001Let's Encrypt(LE)\u306e\u8a3c\u660e\u66f8\u306e\u4f5c\u6210\u3092\u7121\u52b9\u306b\u3059\u3079\u304d\u3067\u3042\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u307e\u307e\u3067\u306f\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002Lagoon\u306b\u5411\u3051\u3066\u3044\u306a\u3044\u30c9\u30e1\u30a4\u30f3\u306f\u3001Let's Encrypt\u306e\u5236\u9650\u3092\u8d85\u3048\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3057\u3070\u3089\u304f\u3059\u308b\u3068\u7121\u52b9\u306b\u306a\u308a\u307e\u3059\u3002

        \u8a3c\u660e\u6a5f\u95a2(CA)\u306b\u3088\u308b\u7f72\u540d\u4ed8\u304d\u8a3c\u660e\u66f8\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001tls-acme\u3092false\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u304c\u3001insecure\u30d5\u30e9\u30b0\u306fAllow\u307e\u305f\u306fRedirect\u306b\u8a2d\u5b9a\u3057\u305f\u307e\u307e\u306b\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002CA\u8a3c\u660e\u66f8\u306e\u5834\u5408\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u30eb\u30fc\u30c8\u3068\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308bSSL\u8a3c\u660e\u66f8\u3092\u77e5\u3089\u305b\u3066\u304f\u3060\u3055\u3044\u3002

        .lagoon.yml
        environments:\nmain:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'false'\ninsecure: Allow\n- www.example.com:\ntls-acme: 'false'\ninsecure: Allow\n

        \u6b21\u306b DNS\u30a8\u30f3\u30c8\u30ea\u304c\u3042\u306a\u305f\u306eLagoon\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u6307\u3059\u3088\u3046\u306b\u306a\u308b\u3068\u3001\u30d5\u30e9\u30b0\u3092\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:tls-acme \u3092 true \u306b\u3001insecure \u3092 Redirect \u306b\u3057\u307e\u3059\u3002

        .lagoon.yml
        environments:\nmain:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'true'\ninsecure: Redirect\n- www.example.com:\ntls-acme: 'true'\ninsecure: Redirect\n

        \u6ce8\u610f

        \u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u3059\u3079\u3066\u306e\u30da\u30fc\u30b8\u3092\u78ba\u8a8d\u3059\u308b\u306e\u306f\u5c11\u3057\u624b\u9593\u304c\u304b\u304b\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306e\u3067\u3001mixed-content-scan\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30b5\u30a4\u30c8\u5168\u4f53\u3092\u30af\u30ed\u30fc\u30eb\u3057\u3001\u975eHTTPS\u30b5\u30a4\u30c8\u304b\u3089\u306e\u30a2\u30bb\u30c3\u30c8\u3092\u542b\u3080\u30da\u30fc\u30b8\u3092\u8fd4\u3057\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/going-live/#_2","title":"\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306b\u3064\u3044\u3066","text":"

        \u975ewww\u304b\u3089www\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u305d\u308c\u3089\u304c redirects-map.conf \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167

        "},{"location":"ja/using-lagoon-the-basics/going-live/#cron-jobs","title":"Cron jobs","text":"

        production\u74b0\u5883\u7528\u306eCron jobs\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002.lagoon.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/going-live/#dns","title":"DNS","text":"

        \u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u304camazee.io\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u3067\u304d\u308b\u3060\u3051\u30b9\u30e0\u30fc\u30ba\u306b\u63a5\u7d9a\u3067\u304d\u308b\u3088\u3046\u306b\u3001\u5c02\u7528\u306e\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u30fcDNS\u30ec\u30b3\u30fc\u30c9\u3092\u7528\u610f\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6280\u8853\u7684\u306aDNS\u30ea\u30bd\u30fc\u30b9\u30ec\u30b3\u30fc\u30c9\u306f\u3001\u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u3092amazee.io\u306e\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306b\u30ea\u30f3\u30af\u3055\u308c\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u4ed6\u306e\u76ee\u7684\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002CNAME\u30ec\u30b3\u30fc\u30c9\u306b\u7591\u554f\u304c\u3042\u308b\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u6b63\u78ba\u306aCNAME\u3092\u8a2d\u5b9a\u3057\u3066\u3082\u3089\u3063\u3066\u304f\u3060\u3055\u3044\u3002

        amazee.io\u306e\u4f8b: <region-identifier>.amazee.io

        \u30c9\u30e1\u30a4\u30f3\u3092Lagoon\u306b\u5207\u308a\u66ff\u3048\u308b\u524d\u306b\u3001\uff08\u30e9\u30a4\u30d6\u306b\u306a\u308b\u524d\u306b\uff09Time-to-Live (TTL)\u3092\u4e0b\u3052\u3066\u304a\u304f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u53e4\u3044\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u65b0\u3057\u3044\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u5207\u308a\u66ff\u3048\u304c\u8fc5\u901f\u306b\u884c\u308f\u308c\u307e\u3059\u3002\u901a\u5e38\u3001DNS\u306e\u5207\u308a\u66ff\u3048\u524d\u306b\u306fTTL\u3092300-600\u79d2\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002TTL\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u60c5\u5831

        \u60c5\u5831:

        \u3053\u306e\u60c5\u5831\u306famazee.io\u304c\u30db\u30b9\u30c8\u3057\u3066\u3044\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306e\u307f\u95a2\u9023\u3057\u3066\u304a\u308a\u3001\u307e\u3082\u306a\u304f\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304b\u3089\u524a\u9664\u3055\u308c\u3001amazee.io\u56fa\u6709\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059

        "},{"location":"ja/using-lagoon-the-basics/going-live/#fastly","title":"Fastly\u306e\u63a8\u5968\u8a2d\u5b9a","text":"

        \u30b5\u30d6\u30c9\u30e1\u30a4\u30f3 (CNAME)

        \u30b5\u30d6\u30c9\u30e1\u30a4\u30f3(\u4f8b: www.example.com.)\u306eDNS\u30ec\u30b3\u30fc\u30c9\u3092Lagoon\u306b\u5411\u3051\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306bCNAME\u30ec\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a

        CNAME: cdn.amazee.io

        \u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3(A/AAAA) \u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3(example.com.\u306a\u3069)\u306e\u8a2d\u5b9a\u306f\u3001DNS\u4ed5\u69d8\u3067\u306f\u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3\u304cCNAME\u3092\u6307\u3059\u3053\u3068\u3092\u8a31\u53ef\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u5384\u4ecb\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u4ee5\u4e0b\u306eA\u30ec\u30b3\u30fc\u30c9\u3068AAAA\u30ec\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u4e0b\u8a18\u306e\u5404IP\u306b\u500b\u5225\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\uff1a

        • A: 151.101.2.191
        • A: 151.101.66.191
        • A: 151.101.130.191
        • A: 151.101.194.191
        • AAAA: 2a04:4e42::703
        • AAAA: 2a04:4e42:200::703
        • AAAA: 2a04:4e42:400::703
        • AAAA: 2a04:4e42:600::703

        \u6ce8\u610f:

        \u9759\u7684IP\u306e\u8a2d\u5b9a\u306f\u63a8\u5968\u3057\u307e\u305b\u3093 DNS\u30be\u30fc\u30f3\u5185\u306eIP\u30a2\u30c9\u30ec\u30b9\u3002Lagoon\u306e\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u30a4\u30f3\u30d5\u30e9\u304c\u6642\u9593\u3068\u3068\u3082\u306b\u5909\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u9759\u7684IP\u30a2\u30c9\u30ec\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u30b5\u30a4\u30c8\u306e\u5229\u7528\u53ef\u80fd\u6027\u306b\u5f71\u97ff\u3092\u53ca\u307c\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/going-live/#_3","title":"\u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3","text":"

        \u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3(\u4f8b:example.com)\u306e\u8a2d\u5b9a\u306f\u3001DNS\u306e\u4ed5\u69d8\u304c\u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3\u3092CNAME\u30a8\u30f3\u30c8\u30ea\u306b\u30dd\u30a4\u30f3\u30c8\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u5c11\u3005\u30c8\u30ea\u30c3\u30ad\u30fc\u306b\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002DNS\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u3088\u3063\u3066\u306f\u3001\u30ec\u30b3\u30fc\u30c9\u540d\u304c\u7570\u306a\u308a\u307e\u3059:

        • ALIAS at DNSimple
        • ANAME at DNS Made Easy
        • ANAME at easyDNS
        • ALIAS at PointDNS
        • CNAME at CloudFlare
        • CNAME at NS1

        DNS\u30d7\u30ed\u30d0\u30a4\u30c0\u304c\u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3\u7528\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3082\u3089\u3044\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/going-live/#_4","title":"\u672c\u756a\u74b0\u5883","text":"

        Lagoon\u306f\u958b\u767a\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u306e\u6982\u5ff5\u3092\u7406\u89e3\u3057\u3066\u3044\u307e\u3059\u3002\u958b\u767a\u74b0\u5883\u306f\u81ea\u52d5\u7684\u306bnoindex\u3068nofollow\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u9001\u4fe1\u3057\u3001\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u306b\u3088\u308b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u5316\u3092\u7981\u6b62\u3057\u307e\u3059\u3002

        X-Robots-Tag: noindex, nofollow

        \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u4e2d\u306b\u3001\u672c\u756a\u74b0\u5883\u306f\u3059\u3067\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002\u3082\u3057\u307e\u3060\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001 \u7701\u7565\u3055\u308c\u305f\u5834\u5408\u3001\u3042\u306a\u305f\u306e\u74b0\u5883\u306f\u958b\u767a\u30e2\u30fc\u30c9\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002Lagoon\u306e\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u74b0\u5883\u304c\u672c\u756a\u74b0\u5883\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u672c\u756a\u74b0\u5883\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u77e5\u3089\u305b\u3066\u3001\u30b7\u30b9\u30c6\u30e0\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3089\u3063\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/lagoon-build-errors-and-warnings/","title":"Lagoon\u30d3\u30eb\u30c9\u306e\u30a8\u30e9\u30fc\u3068\u8b66\u544a","text":"

        \u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306eLagoon\u3067\u306f\u3001\u30d3\u30eb\u30c9\u306b\u6f5c\u5728\u7684\u306a\u554f\u984c\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u8b58\u5225\u3057\u3001\u5931\u6557\u305b\u305a\u306b\u305d\u308c\u3089\u3092\u8b66\u544a\u3068\u3057\u3066\u30cf\u30a4\u30e9\u30a4\u30c8\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u307e\u305fLagoon\u30c1\u30fc\u30e0\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u5bfe\u3057\u3066\u4e88\u5b9a\u3055\u308c\u3066\u3044\u308b\u975e\u63a8\u5968\u4e8b\u9805\u3084\u6a5f\u80fd\u306e\u5909\u66f4\u3092\u901a\u77e5\u3059\u308b\u65b9\u6cd5\u3067\u3082\u3042\u308a\u307e\u3059\u3002

        \u4f8b\u3048\u3070\u3001Lagoon\u30c1\u30fc\u30e0\u304c .lagoon.yml \u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u5909\u66f4\u3059\u3079\u304d\u3053\u3068\u304c\u3042\u308b\u5834\u5408\u3001\u8b66\u544a\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u305d\u308c\u3092\u7834\u58ca\u7684\u306a\u5909\u66f4\u306b\u306a\u308b\u524d\u306b\u4fee\u6b63\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u53ef\u80fd\u306a\u9650\u308a\u65e9\u671f\u306b\u89e3\u6c7a\u3059\u308b\u3079\u304d\u3067\u3042\u308a\u3001\u5c06\u6765\u306eLagoon\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u306f\u30a8\u30e9\u30fc\u3092\u51e6\u7406\u3067\u304d\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u30d3\u30eb\u30c9\u3092\u505c\u6b62\u3059\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002

        \u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\u65b9\u6cd5\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001Lagoon\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u8cea\u554f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/lagoon-build-errors-and-warnings/#docker-compose-errors","title":"Docker Compose\u306e\u30a8\u30e9\u30fc","text":"

        \u3088\u304f\u3042\u308bDocker Compose\u306e\u554f\u984c\u306b\u3064\u3044\u3066\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3082\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306e\u554f\u984c\u306e\u4e00\u90e8\u306f\u305d\u3053\u3067\u30ab\u30d0\u30fc\u3055\u308c\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

        env_file \u30a8\u30e9\u30fc\u3092\u793a\u3059 Lagoon \u30d3\u30eb\u30c9\u51fa\u529b
        > an env_file is defined in your docker-compose file, but no matching file found\n

        Docker Compose \u30d3\u30eb\u30c9\u6642\u306b\u53c2\u7167\u3055\u308c\u308benv\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u305d\u306eenv\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u306e\u307f\u5b58\u5728\u3059\u308b\u304b\u3001Dockerfile\u304b\u3089\u9664\u5916\u3055\u308c\u3066\u3044\u307e\u3059\u3002Lagoon\u30c1\u30fc\u30e0\u306f\u3001Docker Compose\u304c\u3053\u306e\u30a8\u30e9\u30fc\u3092\u7121\u8996\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u305f\u3081\u306e\u4f5c\u696d\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u89e3\u6c7a\u7b56\u304c\u898b\u3064\u304b\u308b\u307e\u3067\u3053\u306e\u8b66\u544a\u306f\u7d9a\u304d\u307e\u3059\u3002

        \u6587\u5b57\u5217\u30ad\u30fc\u30a8\u30e9\u30fc\u3092\u793a\u3059Lagoon\u30d3\u30eb\u30c9\u51fa\u529b
        > an invalid string key was detected in your docker-compose file\n

        \u3042\u306a\u305f\u306eDocker Compose\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3059\u3001\u304a\u305d\u3089\u304f\u5f62\u5f0f\u304c\u4e0d\u6b63\u307e\u305f\u306f\u30a8\u30a4\u30ea\u30a2\u30b9\u3084\u30a2\u30f3\u30ab\u30fc\u306e\u4e0d\u5099\u306b\u95a2\u9023\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u898b\u308c\u3070\u305d\u306e\u5834\u6240\u304c\u308f\u304b\u308b\u306f\u305a\u3067\u3059\u3002

        yaml\u691c\u8a3c\u30a8\u30e9\u30fc\u3092\u793a\u3059Lagoon\u30d3\u30eb\u30c9\u51fa\u529b
        > There are yaml validation errors in your docker-compose file that should be corrected\n

        \u3042\u306a\u305f\u306eDocker Compose\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3059\u3001\u304a\u305d\u3089\u304f\u5f62\u5f0f\u304c\u4e0d\u6b63\u307e\u305f\u306f\u30a8\u30a4\u30ea\u30a2\u30b9\u3084\u30a2\u30f3\u30ab\u30fc\u306e\u4e0d\u5099\u306b\u95a2\u9023\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u898b\u308c\u3070\u305d\u306e\u5834\u6240\u304c\u308f\u304b\u308b\u306f\u305a\u3067\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/local-development-environments/","title":"\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883","text":"

        Lagoon\u306b\u306fDocker\u3068Docker Compose(\u307b\u3068\u3093\u3069\u304cDocker\u3068\u4e00\u7dd2\u306b\u51fa\u8377\u3055\u308c\u3066\u3044\u307e\u3059)\u306b\u3057\u304b\u4f9d\u5b58\u3057\u307e\u305b\u3093\u304c\u3001Docker\u306b\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306b\u5f79\u7acb\u3064\u3082\u306e\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059:

        • \u30ca\u30a4\u30b9\u306aURL\u3068HTTPS\u30aa\u30d5\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u305f\u3081\u306eHTTP\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3002
        • IP\u30a2\u30c9\u30ec\u30b9\u3092\u899a\u3048\u3066\u304a\u304f\u5fc5\u8981\u304c\u306a\u3044DNS\u30b7\u30b9\u30c6\u30e0\u3002
        • \u30b3\u30f3\u30c6\u30ca\u5185\u3067SSH\u30ad\u30fc\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306eSSH\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3002
        • \u30e1\u30fc\u30eb\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u53d7\u4fe1\u3057\u3066\u8868\u793a\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3002
        Warning

        \u30ed\u30fc\u30ab\u30eb\u3067Lagoon\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\uff01\u3053\u308c\u306f\u6df7\u4e71\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002Lagoon\u306f\u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3092\u672c\u756a\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308a\u3001\u74b0\u5883\u305d\u306e\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

        "},{"location":"ja/using-lagoon-the-basics/local-development-environments/#pygmyddevlando-","title":"pygmy\u3001DDEV\u3001\u307e\u305f\u306fLando - \u9078\u629e\u306f\u3042\u306a\u305f\u6b21\u7b2c\u3067\u3059\u3002","text":""},{"location":"ja/using-lagoon-the-basics/local-development-environments/#pygmy","title":"pygmy","text":"

        Lagoon\u306f\u4f1d\u7d71\u7684\u306bpygmy\u3068\u6700\u3082\u826f\u597d\u306b\u52d5\u4f5c\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u4e0a\u8a18\u306e\u30c4\u30fc\u30eb\u306eamazee.io\u30d5\u30ec\u30fc\u30d0\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308a\u3001Lagoon\u3068\u305d\u306e\u307e\u307e\u52d5\u4f5c\u3057\u307e\u3059\u3002\u3053\u308c\u306fhttps://github.com/pygmystack/pygmy\u306b\u3042\u308a\u307e\u3059\u3002

        pygmy\u306fGolang\u3067\u66f8\u304b\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

        HomeBrew\u3067\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
        brew tap pygmystack/pygmy && brew install pygmy\n

        pygmy\u306e\u8a73\u7d30\u306a\u4f7f\u7528\u65b9\u6cd5\u3084\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u60c5\u5831\u306b\u3064\u3044\u3066\u306f\u3001\u305d\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/local-development-environments/#lando","title":"Lando","text":"

        Lagoon\u306fLando\u3068\u975e\u5e38\u306b\u3088\u304f\u7d44\u307f\u5408\u308f\u3055\u308c\u3066\u3044\u307e\u3059\uff01\u8a73\u7d30\u306a\u60c5\u5831\u306f\u3001https://docs.lando.dev/config/lagoon.html\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u4f7f\u7528\u3066\u304f\u3060\u3055\u3044\u3002

        Lando\u306eLagoon\u5411\u3051\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306fLando\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u3068\u3063\u3066\u306f\u99b4\u67d3\u307f\u6df1\u3044\u3082\u306e\u3067\u3042\u308a\u3001\u307e\u305fLagoon\u306e\u521d\u5fc3\u8005\u304c\u59cb\u3081\u308b\u306e\u306b\u3082\u6700\u3082\u7c21\u5358\u306a\u65b9\u6cd5\u306b\u306a\u308a\u307e\u3059\u3002\u4e00\u65b9\u3001Pygmy\u306fDocker\u3068\u3088\u308a\u5bc6\u63a5\u306b\u7d71\u5408\u3055\u308c\u3066\u304a\u308a\u3001\u3088\u308a\u8907\u96d1\u306a\u30b7\u30ca\u30ea\u30aa\u3084\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u304c\u3088\u308a\u6df1\u3044\u7406\u89e3\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/local-development-environments/#ddev","title":"DDEV","text":"

        Lagoon\u306fDDEV\u3067\u3082\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\uff01\u59cb\u3081\u308b\u305f\u3081\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002https://ddev.readthedocs.io/en/stable/users/providers/lagoon/\u3002

        \u4ee5\u524d\u306b\u306f\u3001Docksal\u3084Docker4Drupal\u306a\u3069\u306e\u4ed6\u306e\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u30b5\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u8a55\u4fa1\u3057\u305f\u3053\u3068\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u5c06\u6765\u7684\u306b\u3053\u308c\u3089\u306e\u30b5\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u53ef\u80fd\u6027\u306f\u3042\u308a\u307e\u3059\u304c\u3001\u73fe\u5728\u306e\u3068\u3053\u308d\u306f\u65e2\u5b58\u306e\u30c4\u30fc\u30eb\u3078\u306e\u30b5\u30dd\u30fc\u30c8\u306b\u7126\u70b9\u3092\u5f53\u3066\u3066\u3044\u307e\u3059\u3002

        "},{"location":"ja/using-lagoon-the-basics/setup-project/","title":"\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a","text":"

        \u6ce8\u610f:

        \u6211\u3005\u306f\u5168\u3066\u306e\u4eba\u304cLagoon\u3092\u4f7f\u3063\u3066\u81ea\u5206\u81ea\u8eab\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3057\u3001\u69cb\u6210\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u305f\u3081\u306eCLI\u3068GraphQL API\u306e\u8a2d\u5b9a\u306b\u71b1\u5fc3\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u73fe\u5728\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u30ea\u30ea\u30fc\u30b9\u3067\u304d\u308b\u524d\u306b\u66f4\u306a\u308b\u30c6\u30b9\u30c8\u304c\u5fc5\u8981\u306a\u306e\u3067\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\uff01

        \u305d\u308c\u307e\u3067\u306f\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u306fLagoon\u306e\u7ba1\u7406\u8005\u3068\u8a71\u3057\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u306b\u3064\u3044\u3066\u306f\u554f\u984c\u306a\u3044\u3067\u3059\u3001\u5f7c\u3089\u306fAPI\u3088\u308a\u3082\u305a\u3063\u3068\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u3067\u3059\u3002\ud83d\ude0a

        \u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306e\u305f\u3081\u306b\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u6e96\u5099\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044:

        • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d
          • \u3053\u306e\u540d\u524d\u306f\u5c0f\u6587\u5b57\u3001\u6570\u5b57\u3001\u30c0\u30c3\u30b7\u30e5\u306e\u307f\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059
          • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u5185\u306b\u30c0\u30d6\u30eb\u30c0\u30c3\u30b7\u30e5(--)\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093
        • \u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53d6\u308a\u7d44\u3080\u3059\u3079\u3066\u306e\u4eba\u306eSSH\u516c\u958b\u9375\u3001\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3001\u540d\u524d\u3002\u3053\u3053\u306b\u306f\u3001GitHub\u3001GitLab\u3001Bitbucket \u306eSSH\u30ad\u30fc\u306e\u751f\u6210\u3068\u30b3\u30d4\u30fc\u306b\u3064\u3044\u3066\u306e\u6307\u793a\u304c\u3042\u308a\u307e\u3059
        • \u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u304c\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u308bGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306eURL(git@example.com:test/test.git)
        • \u3042\u306a\u305f\u304c\u4f7f\u7528\u3059\u308bGit\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3042\u306a\u305f\u306e\u672c\u756a\u74b0\u5883\u3067\u4f7f\u7528\u3057\u305f\u3044\u74b0\u5883\u306b\u3064\u3044\u3066 (\u74b0\u5883\u306e\u7a2e\u985e \u3067\u74b0\u5883\u306e\u8a73\u7d30\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)
        • \u8ffd\u52a0\u306e\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3002Lagoon\u3067\u306f\u3001\u6b63\u898f\u8868\u73fe\u3067\u30d6\u30e9\u30f3\u30c1\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u540d\u524d\u3092\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

        \u7279\u5b9a\u306e\u91cd\u8981\u306a\u30d6\u30e9\u30f3\u30c1(\u4f8b\u3048\u3070develop\u3084main)\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u6700\u7d42\u7684\u306a\u5224\u65ad\u306f\u3042\u306a\u305f\u6b21\u7b2c\u3067\u3059\uff01(\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u8a73\u7d30\u60c5\u5831\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)

        "},{"location":"ja/using-lagoon-the-basics/setup-project/#1-lagoon","title":"1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304cLagoon\u5316\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b","text":"

        \u3053\u308c\u306f\u3001.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3068docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u306a\u305f\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u5b58\u5728\u3057\u3001\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

        \u3082\u3057\u3053\u308c\u304c\u5b9f\u73fe\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u5148\u306b\u9032\u3080\u524d\u306b\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9\u306e\u30ea\u30b9\u30c8\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        "},{"location":"ja/using-lagoon-the-basics/setup-project/#2","title":"2. \u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3059\u308b","text":"

        \u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306b\u3001Lagoon\u306f\u30b3\u30fc\u30c9\u3078\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u8a2d\u8a08\u4e0a\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u305f\u3081\u306bLagoon\u306f\u3042\u306a\u305f\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u8aad\u307f\u53d6\u308a\u30a2\u30af\u30bb\u30b9\u3057\u304b\u5fc5\u8981\u3068\u3057\u307e\u305b\u3093

        Lagoon\u306e\u7ba1\u7406\u8005\u304b\u3089\u3001\u8aad\u307f\u53d6\u308a\u30a2\u30af\u30bb\u30b9\u3092\u4e0e\u3048\u308b\u3079\u304dSSH\u516c\u958b\u9375\u3084Git\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6559\u3048\u3066\u3082\u3089\u3046\u5fc5\u7528\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

        "},{"location":"ja/using-lagoon-the-basics/setup-project/#3-webhooks","title":"3. Webhooks\u306e\u8a2d\u5b9a","text":"

        Lagoon\u306f\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u8d77\u3053\u3063\u3066\u3044\u308b\u3044\u304f\u3064\u304b\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u77e5\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u306f\u30d7\u30c3\u30b7\u30e5\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u3059\u304c\u3001\u5c06\u6765\u7684\u306b\u306f\u3082\u3063\u3068\u8ffd\u52a0\u3055\u308c\u308b\u4e88\u5b9a\u3067\u3059\u3002

        Lagoon\u306f\u591a\u304f\u306e\u7570\u306a\u308bGit\u30db\u30b9\u30c8\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u6307\u793a\u3092\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u5206\u5272\u3057\u307e\u3057\u305f:Webhooks\u306e\u8a2d\u5b9a\u3002

        "},{"location":"ja/using-lagoon-the-basics/setup-project/#4","title":"4. \u6b21\u306b:\u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8","text":"

        \u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3001\u3042\u306a\u305f\u306f\u4eca\u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\u3059\u308b\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002

        "}]} \ No newline at end of file +{"config":{"lang":["en","ja"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Lagoon","text":""},{"location":"#lagoon-the-open-source-application-delivery-platform-for-kubernetes","title":"Lagoon - the Open Source Application Delivery Platform for Kubernetes","text":"

        Lagoon gives developers what they dream about. It's a system that allows developers to run the exact same code in their local and production environment. The same Docker images, the same service configurations, and the same code.

        "},{"location":"#where-do-i-start","title":"Where do I start?","text":"

        If you want to use Lagoon to host your website or application, visit Using Lagoon - The Basics

        To get more in depth with Lagoon functionality, visit Using Lagoon - Advanced

        To understand how Lagoon works, check out Lagoon Concepts - The Basics

        and for a deeper understanding, Lagoon Concepts - Advanced

        If you want to develop Lagoon (add features, fix bugs), Developing Lagoon

        "},{"location":"#tldr-how-lagoon-works","title":"TL;DR: How Lagoon Works","text":"
        1. Developers define and configure needed services within YAML files.
        2. When they are happy, they push the code to Git.
        3. Lagoon parses the YAML files and adds in any additional needed configuration.
        4. Lagoon builds the needed Docker images.
        5. Lagoon pushes them to a Docker registry.
        6. Lagoon creates the needed resources in Kubernetes.
        7. Lagoon monitors the deployment of the containers.
        8. When all is done, Lagoon informs the developers in different ways (Slack, email, website, etc).
        "},{"location":"#help","title":"Help?","text":"

        Questions? Ideas? Meet the maintainers and contributors.

        Chat with us on the Lagoon Discord: https://discord.gg/te5hHe95JE

        "},{"location":"#a-couple-of-things-about-lagoon","title":"A couple of things about Lagoon","text":"
        1. Lagoon is based on microservices. The deployment and build workflow is very complex. We have multiple version control sources, multiple clusters, and multiple notification systems. Each deployment is unique and can take from seconds to hours. It's built with flexibility and robustness in mind. Microservices communicate through a messaging system, which allows us to scale individual services up and down. It allows us to survive down times of individual services. It also allows us to try out new parts of Lagoon in production without affecting others.
        2. Lagoon uses many programming languages. Each programming language has specific strengths. We try to decide which language makes the most sense for each service. Currently, a lot of Lagoon is built in Node.js. This is partly because we started with Node.js, but also because Node.js allows asynchronous processing of webhooks, tasks and more. We are likely going to change the programming language of some services. This is what is great about microservices! We can replace a single service with another language without worrying about other parts of the platform.
        3. Lagoon is not Drupal-specific. Everything has been built so that it can run any Docker image. There are existing Docker images for Drupal, and support for Drupal-specific tools like Drush. But that's it!
        4. Lagoon is DevOps. It allows developers to define the services they need and customize them as they need. You might think this is not the right way to do it, and gives too much power to developers. We believe that as system engineers, we need to empower developers. If we allow developers to define services locally, and test them locally, they will find bugs and mistakes themselves.
        5. Lagoon runs on Docker and Kubernetes. (That one should be obvious, right?)
        6. Lagoon can be completely locally developed and tested.
        7. Lagoon is completely integration tested. This means we can test the whole process. From receiving Git webhooks to deploying into a Docker container, the same Git hash is deployed in the cluster.
        8. Most important: It's a work in progress. It's not done yet. At amazee.io, we believe that as a hosting community, we need to work together and share code where we can.

        We want you to understand the Lagoon infrastructure and how the services work together. Here is a schema (it's a little out of date - it doesn't include some of the more recent services we've added, or cover Kubernetes, so we're working on an update!): Lucid Chart \u200c

        "},{"location":"#history-of-lagoon","title":"History of Lagoon","text":"

        As described, Lagoon is a dream come true. At amazee.io, we've been hosting Drupal for more than 8 years. This is the fourth major iteration of our hosting platform. The third iteration was built around Puppet and Ansible. Every single piece of the platform was done with configuration management. This allowed very fast setup of new servers, but at the same time was also lacking customizability for developers. We implemented some customizability, with some already with Docker in production. However, we were never completely happy with it. We realized that our existing platform wasn't enough. With the rise of decoupled Drupal, the need to run Node.js on the server side, the requests for Elasticsearch, and different Solr versions, we had to do more. \u200c

        At the same time, we've been using Docker for many years for local development. It was always an idea to use Docker for everything in production. The only problem was the connection between local development and production environments. There are other systems that allow you to run Drupal in Docker in production. But, nothing allowed you to test the exact same images and services locally and in production.

        Lagoon was born in 2017. It has since been developed into a system that runs Docker in production. Lagoon has replaced our third generation hosting platform with a cutting edge all Docker-based system.

        "},{"location":"#open-source","title":"Open Source","text":"

        At amazee.io, we believe in open source. It was always troubling for us that open source code like Drupal was hosted on proprietary hosting platforms. The strength and success of a hosting company is not just their deployment systems or service configurations. It's the the people and knowledge that run the platform. The processes, skills, ability to react to unforeseen situations, and last but not least, the support they provide their clients.

        "},{"location":"#license","title":"License","text":"

        Lagoon is available under an Apache 2.0 License.

        "},{"location":"code-of-conduct/","title":"Code of Conduct","text":""},{"location":"code-of-conduct/#our-pledge","title":"Our Pledge","text":"

        In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.

        "},{"location":"code-of-conduct/#our-standards","title":"Our Standards","text":"

        Examples of behavior that contributes to creating a positive environment include:

        • Using welcoming and inclusive language.
        • Being respectful of differing viewpoints and experiences.
        • Gracefully accepting constructive criticism.
        • Focusing on what is best for the community.
        • Showing empathy towards other community members.

        Examples of unacceptable behavior by participants include:

        • The use of sexualized language or imagery and unwelcome sexual attention or advances.
        • Trolling, insulting/derogatory comments, and personal or political attacks.
        • Public or private harassment.
        • Publishing others' private information, such as a physical or electronic address, without explicit permission.
        • Other conduct which could reasonably be considered inappropriate in a professional setting.
        "},{"location":"code-of-conduct/#our-responsibilities","title":"Our Responsibilities","text":"

        Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

        Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

        "},{"location":"code-of-conduct/#scope","title":"Scope","text":"

        This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

        "},{"location":"code-of-conduct/#enforcement","title":"Enforcement","text":"

        Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at uselagoon@amazee.io. You may also reach out directly to Brandon, a Lagoon team member who has completed CoC training. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

        Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

        "},{"location":"code-of-conduct/#attribution","title":"Attribution","text":"

        This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at http://contributor-covenant.org/version/1/4.

        "},{"location":"contributing/","title":"Contributing","text":"

        We gladly welcome any and all contributions to Lagoon!

        "},{"location":"contributing/#what-kind-of-contributions-do-we-need","title":"What kind of contributions do we need?","text":"

        Lagoon benefits from any kind of contribution - whether it's a bugfix, new feature, documentation update, or simply some queue maintenance - we're happy that you want to help

        "},{"location":"contributing/#developing-for-lagoon","title":"Developing for Lagoon","text":"

        There's a whole section on how to get Lagoon running on your local machine using KinD over at Developing Lagoon. This documentation is still very WIP - but there are a lot of Makefile routines to help you out.

        "},{"location":"contributing/#installing-lagoon","title":"Installing Lagoon","text":"

        We've got another section that outlines how to install Lagoon from Helm charts at Installing Lagoon Into Existing Kubernetes Cluster - we'd love to get this process as slick as possible!

        "},{"location":"contributing/#help-us-with-our-examples","title":"Help us with our examples","text":"

        Right now one of our biggest needs is putting together examples of Lagoon working with various content management systems, etc, other than Drupal.

        If you can spin up an open source CMS or framework that we don\u2019t currently have as a Docker Compose stack, send us a PR. Look at the existing examples at https://github.com/uselagoon/lagoon-examples for tips, pointers and starter issues.

        One small catch \u2013 wherever possible, we\u2019d like them to be built using our base Docker Hub images https://hub.docker.com/u/uselagoon \u2013 if we don\u2019t have a suitable image, or our images need modifying \u2013 throw us a PR (if you can) or create an issue (so someone else can) at https://github.com/uselagoon/lagoon-images.

        Help us improve our existing examples, if you can - are we following best practices, is there something we\u2019re doing that doesn\u2019t make sense?

        Bonus points for anyone that helps contribute to tests for any of these examples \u2013 we\u2019ve got some example tests in a couple of the projects you can use for guidance \u2013 https://github.com/amazeeio/drupal-example-simple/blob/8.x/TESTING_dockercompose.md. The testing framework we\u2019re using is Leia, from the excellent team behind Lando.

        Help us to document our other examples better \u2013 we\u2019re not expecting a full manuscript, but tidy-ups, links to helpful resources and clarifying statements are all super-awesome.

        If you have any questions, reach out to us on Discord!

        "},{"location":"contributing/#i-found-a-security-issue","title":"I found a security issue \ud83d\udd13","text":"

        We take security very seriously. If you discover a security issue or think you found one, please bring it to the maintainers' attention.

        Danger

        Please send your findings to security@amazee.io. Please DO NOT file a GitHub issue for them.

        Security reports are greatly appreciated and will receive public karma and swag! We're also working on a Bug Bounty system.

        "},{"location":"contributing/#i-found-an-issue","title":"I found an issue","text":"

        We're always interested in fixing issues, therefore issue reports are very welcome. Please make sure to check that your issue does not already exist in the issue queue.

        "},{"location":"contributing/#i-have-a-feature-request-or-idea","title":"I have a feature request or idea","text":"

        Cool! Create an issue and we're happy to look over it. We can't guarantee that it will be implemented. But we are always interested in hearing ideas of what we could bring to Lagoon.

        Another good way is also to talk to us via Discord about your idea. Join today!

        "},{"location":"contributing/#i-wrote-some-code","title":"I wrote some code","text":"

        Epic! Please send us a pull request for it, we will do our best to review it and merge it if possible.

        "},{"location":"applications/","title":"A wide range of Applications, Frameworks and Languages are supported by Lagoon","text":"

        Lagoon broadly classifies three levels in the application stack:

        "},{"location":"applications/#languages","title":"Languages","text":"

        The core building blocks of any Lagoon project, these are usually provided by Lagoon-specific images.

        "},{"location":"applications/#frameworks","title":"Frameworks","text":"

        These take those base images, and add in the necessary logic, tools and packages needed to serve a website, or drive an application.

        "},{"location":"applications/#applications","title":"Applications","text":"

        Usually built on top of Frameworks, this is the layer that content editors or developers will interact with to shape the finished product.

        When we reference any repositories for use on Lagoon, we usually refer to them in three ways:

        "},{"location":"applications/#templates","title":"Templates","text":"

        These are fully-functional, cloneable starter repositories, maintained and updated regularly, ready to be extended and used with little customization.

        "},{"location":"applications/#examples","title":"Examples","text":"

        These are fully functional repositories, maintained and updated regularly, but may require some effort to make work for your individual project.

        "},{"location":"applications/#demos","title":"Demos","text":"

        These are repositories that have been built as a demonstration, and are usable for some of the concepts within, but aren't routinely maintained or updated.

        For a more complete list, check out out our GitHub repository: https://www.github.com/lagoon-examples and our website https://lagoon.sh/application/

        "},{"location":"applications/laravel/","title":"Laravel on Lagoon","text":"

        There are multiple ways of running Laravel on Lagoon.

        • You may choose to \"lagoonize\" your existing application yourself (see the Lagoonizing documentation).
        • We have a Laravel example repo of a simple Lagoonized Laravel installation for you to have a look at.
        • (Recommended) We provide a tool called \"Sail:onLagoon\" that will take a standard Laravel Sail application and generate the appropriate Lagoon configuration files for you.
        "},{"location":"applications/laravel/#app-environment-key","title":"App environment key","text":"

        In order to set your app key, set the APP_KEY environment variable, either via the cli or the UI.

        This eliminates the need to store the key in code (in, for instance, a .env file).

        You can generate an app key by running the php artisan key:generate --show, which will output a valid key, rather than adjusting the project files.

        "},{"location":"applications/node/","title":"Node.js","text":""},{"location":"applications/node/#introduction","title":"Introduction","text":"

        Lagoon provides Node.js images that are based on the official Node Alpine images.

        More information on how to adapt your project to run on Lagoon can be found in our Node.js Docker Images section.

        "},{"location":"applications/options/","title":"Configuring Applications for use on Lagoon","text":""},{"location":"applications/options/#lagoonyml","title":"lagoon.yml","text":"

        Project- and environment-level configuration for Lagoon is provided in the .lagoon.yml file in your repository.

        See lagoon-yml.md.

        "},{"location":"applications/options/#docker-composeyml","title":"docker-compose.yml","text":"

        Service-level configuration for Lagoon in provided in the docker-compose.yml file in your repository. In particular, the lagoon.type and associated service labels are documented in the individual services.

        See docker-compose-yml.md

        "},{"location":"applications/options/#storage","title":"Storage","text":"

        Lagoon has the ability to provision storage for most services - the built-in Lagoon service types have a -persistent variant that can add in the necessary PVCs, volumes, etc. We have updated our examples to reflect this configuration locally.

        "},{"location":"applications/options/#databases","title":"Databases","text":"

        Lagoon has configurations available for:

        • Mariadb - all supported versions
        • PostgreSQL - all supported versions
        "},{"location":"applications/options/#database-as-a-service","title":"Database-as-a-service","text":"

        Lagoon also has the capability to utilize the dbaas-operator to automatically provision these databases using an underlying managed database service (i.e. RDS, Google Cloud Databases, Azure Database). This will happen automatically when these services are provisioned and configured for your cluster. If these are not available, a pod will be provisioned as a fallback.

        "},{"location":"applications/options/#cache","title":"Cache","text":"

        Lagoon supports Redis as a cache backend. In production, some users provision a managed Redis service for their production environments to help them scale.

        "},{"location":"applications/options/#search","title":"Search","text":"

        Lagoon supports Elasticsearch, Solr and OpenSearch as search providers. External search providers can also be configured if required.

        "},{"location":"applications/options/#ingressroutes","title":"Ingress/Routes","text":"

        Lagoon auto-generates routes for services that have ingress requirements. Custom routes can be provided in the .lagoon.yml on a per-service basis.

        "},{"location":"applications/options/#environment-variables","title":"Environment Variables","text":"

        Lagoon makes heavy use of environment variables, at build and runtime. Where these are used to provide critical configuration for your application (e.g. database config/credentials) - it is important that the local and Lagoon versions are named similarly.

        See environment-variables.md.

        "},{"location":"applications/other/","title":"Running other applications on Lagoon","text":"

        Even if Lagoon doesn't have a base image for your particular application, framework or language, Lagoon can still build it!

        Extending on, or inheriting from the commons image, Lagoon can run almost any workload.

        "},{"location":"applications/other/#hugo","title":"Hugo","text":"

        This brief example shows how to build a Hugo website and serve it as static files in an NGINX image. The commons image is used to add Hugo, copy the site in, and build it. The NGINX image is then used to serve the site, with the addition of a customized NGINX config.

        nginx.dockerfile
        FROM uselagoon/commons AS builder\n\nRUN apk add hugo git\nWORKDIR /app\nCOPY . /app\nRUN hugo\n\nFROM uselagoon/nginx\n\nCOPY --from=builder /app/public/ /app\nCOPY lagoon/static-files.conf /etc/nginx/conf.d/app.conf\n\nRUN fix-permissions /usr/local/openresty/nginx\n
        docker-compose.yml
        services:\nnginx:\nbuild:\ncontext: .\ndockerfile: lagoon/nginx.Dockerfile\nlabels:\nlagoon.type: nginx\n
        "},{"location":"applications/php/","title":"PHP","text":""},{"location":"applications/php/#introduction","title":"Introduction","text":"

        Lagoon supports a wide range of PHP-based applications, such as Drupal, Laravel, Wordpress, Magento and Symfony.

        More information on how to adapt your PHP project to run on Lagoon can be found in our PHP-cli Docker Images and PHP-FPM Docker Images sections.

        "},{"location":"applications/python/","title":"Python","text":""},{"location":"applications/python/#introduction","title":"Introduction","text":"

        Lagoon provides images for Python 3.7 and above that can be used to build web apps in a wide range of Python-based frameworks and applications.

        More information on how to adapt your Python project to run on Lagoon can be found in our Python Docker Images section.

        "},{"location":"applications/ruby/","title":"Ruby and Ruby on Rails","text":""},{"location":"applications/ruby/#introduction","title":"Introduction","text":"

        We provide images for Ruby 3.0 and above, built on the official Ruby alpine Docker images.

        Below we assume that you're attempting to get a Rails app deployed on Lagoon, although most of the details described are really framework-neutral.

        "},{"location":"applications/ruby/#getting-rails-running-on-lagoon","title":"Getting Rails running on Lagoon","text":""},{"location":"applications/ruby/#responding-to-requests","title":"Responding to requests","text":"

        The Ruby on Rails example in the Lagoon examples repository is instructive here.

        In the docker-compose.yml we set up a service named ruby, which is the primary service that will be processing any dynamic requests.

        If you look at the dockerfile specified for the ruby service, you'll see that we're exposing port 3000. The nginx service will direct any requests for non-static assets to the ruby service on this port (see the nginx configuration file for more details).

        "},{"location":"applications/ruby/#logging","title":"Logging","text":"

        The Lagoon logging infrastructure is described in the docs here. Essentially, in order to make use of the infrastructure, logs need to be sent via a UDP message to udp://application-logs.lagoon.svc:5140.

        In our Rails example, we're importing the logstash-logger gem, and then in our config/application.rb we're initializing it with the following:

        config/application.rb
            if ENV.has_key?('LAGOON_PROJECT') && ENV.has_key?('LAGOON_ENVIRONMENT') then\nlagoon_namespace = ENV['LAGOON_PROJECT'] + \"-\" + ENV['LAGOON_ENVIRONMENT']\nLogStashLogger.configure do |config|\nconfig.customize_event do |event|\nevent[\"type\"] = lagoon_namespace\nend\nend\nconfig.logstash.host = 'application-logs.lagoon.svc'\nconfig.logstash.type = :udp\nconfig.logstash.port = 5140\nend\n
        "},{"location":"applications/ruby/#database-configuration","title":"Database configuration","text":"

        The example uses our PostgreSQL image (see the docker-compose.yml file). Configuring database access in Rails for Lagoon is very straightforward. Since Lagoon injects the database host, name, and credentials as environment variables, we can change our config/database.yml to be aware of these env vars, and consume them if they exist.

        config/database.yml
        default: &default\nadapter: postgresql\nencoding: unicode\npool: <%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>\nusername: <%= ENV.fetch(\"POSTGRES_USERNAME\") { \"drupal\" } %>\npassword: <%= ENV.fetch(\"POSTGRES_PASSWORD\") { \"drupal\" } %>\nhost: <%= ENV.fetch(\"POSTGRES_HOST\") { \"postgres\" } %>\ndatabase: <%= ENV.fetch(\"('POSTGRES_DATABASE'\") { \"drupal\" } %>\n
        "},{"location":"applications/wordpress/","title":"WordPress on Lagoon","text":"

        The WordPress template is configured to use Composer to install WordPress, its dependencies, and themes.

        The WordPress template is based on the https://github.com/roots/bedrock boilerplate, but extended to match a standardized Lagoon deployment pattern.

        "},{"location":"applications/wordpress/#composer-install","title":"Composer Install","text":"

        The template uses Composer to install WordPress and its themes.

        "},{"location":"applications/wordpress/#database","title":"Database","text":"

        Lagoon can support MariaDB and PostgreSQL databases, but as support for PostgreSQL is limited in WordPress, it isn't recommended for use.

        "},{"location":"applications/wordpress/#nginx-configuration","title":"NGINX configuration","text":"

        Lagoon doesn't have a built-in configuration for WordPress - instead, the template comes with a starting nginx.conf - please contribute any improvements you may find!

        "},{"location":"applications/wordpress/#wp-cli","title":"WP-CLI","text":"

        The Lagoon template installs wp-cli into the cli image to manage your WordPress install.

        "},{"location":"applications/drupal/","title":"Drupal on Lagoon","text":"

        Lagoon was built to host Drupal sites (no, seriously, it was - at least initially!)

        In this section you'll find more information on the various services that have been customised for use with Drupal.

        "},{"location":"applications/drupal/#drupal_integrations-drupal-scaffolding-package","title":"drupal_integrations Drupal scaffolding package","text":"

        The drupal_integrations package, available on packagist extends Drupal's core-composer-scaffold for use on Lagoon. It also provides additional Drush command drush la to retreive the Drush aliases for your Lagoon project.

        "},{"location":"applications/drupal/#lagoon-logs-drupal-module","title":"lagoon-logs Drupal module","text":"

        The lagoon_logs module, availalble on drupal.org provides zero-configuration logging for Drupal on Lagoon.

        "},{"location":"applications/drupal/automatic-updates/","title":"Automatic Updates","text":"

        Lagoon deploys applications in a way that is not compatible with some methods of updating Drupal core and contrib. Lagoon expects to build immutable images and run immutable containers. When the code of the application is changed at runtime, it can cause any of the following problems:

        1. Containers are managed automatically by Kubernetes and may be moved, restarted, or scaled at any time. When this happens, the original built container image will be ran and any changes that happened at runtime are lost.
        2. Tasks and cronjobs may run with the orignal built container image and won't have access to any updated code.
        3. Updating requires write permissions to the filesystem, but it is possible to configure an environment that forces a read-only filesystem.
        4. Best practices is to deploy small containers that each do one thing. For a typical Drupal project this means there is a cli, php, and nginx container which each contain a copy of the code. Updating only one of these containers will cause issues with code mismatches.

        The following update methods been disabled by Lagoon.

        "},{"location":"applications/drupal/automatic-updates/#drupal-automatic-updates","title":"Drupal Automatic Updates","text":"

        The Automatic Updates contrib module is disabled by and it will also be disabled when it moves into Drupal core.

        "},{"location":"applications/drupal/automatic-updates/#drush","title":"Drush","text":"

        Using drush pm-install or drush pm-update is disabled by default as part of the amazeeio/drupal-integrations package.

        "},{"location":"applications/drupal/drush-9/","title":"Drush 9","text":""},{"location":"applications/drupal/drush-9/#aliases","title":"Aliases","text":"

        Unfortunately, Drush 9 does not provide the ability to inject dynamic site aliases like Drush 8 did. We are working with the Drush team to implement this again. In the meantime, we have a workaround that allows you to use Drush 9 with Lagoon.

        "},{"location":"applications/drupal/drush-9/#basic-idea","title":"Basic Idea","text":"

        Drush 9 provides a new command, drush site:alias-convert , which can convert Drush 8-style site aliases over to the Drush 9 YAML site alias style. This will create a on- time export of the site aliases currently existing in Lagoon, and save them in /app/drush/sites . These are then used when running a command like drush sa.

        "},{"location":"applications/drupal/drush-9/#preparation","title":"Preparation","text":"

        In order to be able to use drush site:alias-convert , you need to do the following:

        • Rename the aliases.drushrc.php inside the drush folder to lagoon.aliases.drushrc.php.
        "},{"location":"applications/drupal/drush-9/#generate-site-aliases","title":"Generate Site Aliases","text":"

        You can now convert your Drush aliases by running the following command in your project using the cli container:

        Generate Site Aliases
        docker compose exec cli drush site:alias-convert /app/drush/sites --yes\n

        It's good practice to commit the resulting YAML files into your Git repository, so that they are in place for your fellow developers.

        "},{"location":"applications/drupal/drush-9/#use-site-aliases","title":"Use Site Aliases","text":"

        In Drush 9, all site aliases are prefixed with a group. In our case, this is lagoon. You can show all site aliases with their prefix via:

        Show all site aliases
        drush sa --format=list\n

        and to use them:

        Using Drush site alias
        drush @lagoon.main ssh\n
        "},{"location":"applications/drupal/drush-9/#update-site-aliases","title":"Update Site Aliases","text":"

        If a new environment in Lagoon has been created, you can run drush site:alias-convert to update the site aliases file. If running this command does not update lagoon.site.yml, try deleting lagoon.site.yml first, and then re-run drush site:alias-convert.

        "},{"location":"applications/drupal/drush-9/#drush-rsync-from-local-to-remote-environments","title":"Drush rsync from local to remote environments","text":"

        If you would like to sync files from a local environment to a remote environment, you need to pass additional parameters:

        Drush rsync
        drush rsync @self:%files @lagoon.main:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n

        This also applies to syncing one remote environment to another, if you're not using the Lagoon tasks UI to copy files between environments.

        For example, if you wanted to sync the files from @lagoon.main to @lagoon.dev , and ran drush rsync @lagoon.main @lagoon.dev locally, without the extra parameters, you would probably run into a \"Cannot specify two remote aliases\" error.

        To resolve this, you would first need to SSH into your destination environment drush @lagoon.dev ssh, and then execute the rsync command with parameters similar to the above:

        Drush rsync
        drush rsync @lagoon.main:%files  @self:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n

        This is not necessary if you rsync from a remote to a local environment.

        Also, we're working with the Drush maintainers to find a way to inject this automatically.

        "},{"location":"applications/drupal/first-deployment-of-drupal/","title":"First Deployment of Drupal","text":""},{"location":"applications/drupal/first-deployment-of-drupal/#1-make-sure-you-are-all-set","title":"1. Make sure you are all set","text":"

        In order to make your first deployment a successful one, please make sure that your Drupal Project is Lagoonized and you have set up the project in Lagoon. If not, don't worry! Follow the Step-by-Step Guide which show you how this works.

        "},{"location":"applications/drupal/first-deployment-of-drupal/#2-push","title":"2. Push","text":"

        With Lagoon, you create a new deployment by pushing into a branch that is configured to be deployed.

        If you don't have any new code to push, don't worry, you can run

        Git push
        git commit --allow-empty -m \"go, go! Power Rangers!\"\ngit push\n

        This will trigger a push, and the Git hosting will inform Lagoon about this push via the configured webhook.

        If all is correct, you will see a notification in your configured chat system. (Contact your Lagoon administrator to configure this):

        This tells you that Lagoon has just started to deploy your code. Depending on the size of the codebase and amount of containers, this will take a couple of seconds. Just relax. If you'd like to know what's happening now, check out the Build and Deploy Process of Lagoon.

        You can also check your Lagoon UI to see the progress of any deployment. (Contact your Lagoon administrator for the URL if you don't have it).

        "},{"location":"applications/drupal/first-deployment-of-drupal/#3-a-fail","title":"3. A fail","text":"

        Depending on the post-rollout tasks defined in .lagoon.yml, you might have run some tasks like drush updb or drush cr. These Drush tasks depend on a database existing within the environment, which obviously does not exist yet. Let's fix that! Keep reading.

        "},{"location":"applications/drupal/first-deployment-of-drupal/#4-synchronize-local-database-to-the-remote-lagoon-environment","title":"4. Synchronize local database to the remote Lagoon environment","text":"

        With full Drush site alias support in Lagoon, you can synchronize a local database with the remote Lagoon environment.

        Warning

        You may have to tell pygmy about your public keys before the next step.

        If you get an error like Permission denied (publickey), check out the documentation here: pygmy - adding ssh keys.

        First let's make sure that you can see the Drush site aliases:

        Get site aliases
        drush sa\n

        This should return your just deployed environment (let's assume you just pushed into develop):

        Returned site aliases
        [drupal-example]cli-drupal:/app$ drush sa\n@develop\n@self\ndefault\n

        With this we can now synchronize the local database (which is represented in Drush via the site alias @self) with the remote one (@develop):

        Drush sql-sync
        drush sql-sync @self @develop\n

        You should see something like:

        Drush sql-sync results
        [drupal-example]cli-drupal:/app$ drush sql-sync @self @develop\nYou will destroy data in ssh.example.com/drupal and replace with data from drupal.\nDo you really want to continue? (y/n): y\nStarting to dump database on Source.                                                                              [ok]\nDatabase dump saved to /home/drush-backups/drupal/20180227075813/drupal_20180227_075815.sql.gz               [success]\nStarting to discover temporary files directory on Destination.                                                    [ok]\nYou will delete files in drupal-example-develop@ssh.example.com:/tmp/drupal_20180227_075815.sql.gz and replace with data from /home/drush-backups/drupal/20180227075813/drupal_20180227_075815.sql.gz\nDo you really want to continue? (y/n): y\nCopying dump file from Source to Destination.                                                                     [ok]\nStarting to import dump file onto Destination database.\n

        Now let's try another deployment, again an empty push:

        Git push
        git commit --allow-empty -m \"go, go! Power Rangers!\"\ngit push\n

        This time all should be green:

        Click on the links in the notification, and you should see your Drupal site loaded in all its beauty! It will probably not have images yet, which we will handle in Step 6.

        If it is still failing, check the logs link for more information.

        "},{"location":"applications/drupal/first-deployment-of-drupal/#5-synchronize-local-files-to-the-remote-lagoon-environment","title":"5. Synchronize local files to the remote Lagoon environment","text":"

        You probably guessed it: we can do it with Drush:

        Drush rsync
        drush rsync @self:%files @develop:%files\n

        It should show you something like:

        Drush rsync results
        [drupal-example]cli-drupal:/app$ drush rsync @self:%files @develop:%files\nYou will delete files in drupal-example-develop@ssh.example.com:/app/web/sites/default/files and replace with data from /app/web/sites/default/files/\nDo you really want to continue? (y/n): y\n

        In some cases, though, it might not look correct, like here:

        Drush rsync results
        [drupal-example]cli-drupal:/app$ drush rsync @self:%files @develop:%files\nYou will delete files in drupal-example-develop@ssh.example.com:'/app/web/%files' and replace with data from '/app/web/%files'/\nDo you really want to continue? (y/n):\n

        The reason for that is that the Drupal cannot resolve the path of the files directory. This most probably has to do with Drupal not being fully configured or having a missing database. For a workaround you can use drush rsync @self:sites/default/files @develop:sites/default/files, but we suggest that you actually check your local and remote Drupal (you can test with drush status to see if the files directory is correctly configured).

        "},{"location":"applications/drupal/first-deployment-of-drupal/#6-its-done","title":"6. It's done","text":"

        As soon as Lagoon is done building and deploying it will send a second notification to the chat system, like so:

        This tells you:

        • Which project has been deployed.
        • Which branch and Git SHA has been deployed.
        • A link to the full logs of the build and deployment.
        • Links to all routes (URLs) where the environment can be reached.

        That's it! We hope that wasn't too hard - making devOps accessible is what we are striving for.

        "},{"location":"applications/drupal/first-deployment-of-drupal/#but-wait-how-about-other-branches-or-the-production-environment","title":"But wait, how about other branches or the production environment?","text":"

        That's the beauty of Lagoon: it's exactly the same: Push the branch name you defined to be your production branch and that one will be deployed.

        "},{"location":"applications/drupal/first-deployment-of-drupal/#failure-dont-worry","title":"Failure? Don't worry","text":"

        Did the deployment fail? Oh no! But we're here to help:

        1. Click on the logs link in the error notification. It will tell you where in the deployment process the failure happened.
        2. If you can't figure it out, contact your Lagoon administrator, they are here to help!
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/","title":"Integrate Drupal & Fastly","text":""},{"location":"applications/drupal/integrate-drupal-and-fastly/#prerequisites","title":"Prerequisites","text":"
        • Drupal 7+
        • A Fastly service ID
        • A Fastly API token with the permission to purge
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#drupal-7-with-url-based-purging","title":"Drupal 7 with URL based purging","text":"
        1. Download and install the Fastly Drupal module.
        2. Configure the Fastly service ID and API token.
        3. Optionally configure the webhooks (so you can ping Slack for instance when a cache purge is sent)
        4. Only URL based purging can be done in Drupal 7 (simple purging).
        5. Alter Drupal's client IP in settings.php:
        settings.php changes for Drupal 7
        $conf['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP';\n
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#drupal-10-with-cache-tag-purging","title":"Drupal 10+ with cache tag purging","text":"

        Use Composer to get the latest version of the module:

        Download the Fastly Drupal module and dependencies
        composer require drupal/fastly drupal/http_cache_control drupal/purge\n

        You will need to enable the following modules:

        • fastly
        • fastlypurger
        • http_cache_control (2.x)
        • purge
        • purge_ui (technically optional, but this is really handy to have enabled on production)
        • purge_processor_lateruntime
        • purge_processor_cron
        • purge_queuer_coretags
        • purge_drush (useful for purge via Drush, here is a list of commands)
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#configure-the-fastly-module-in-drupal","title":"Configure the Fastly module in Drupal","text":"

        Configure the Fastly service ID and API token. A Site ID is generated for you automatically. You can use runtime environment variables, or you can edit the settings form found at /admin/config/services/fastly:

        • FASTLY_API_TOKEN
        • FASTLY_API_SERVICE
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#set-the-purge-options","title":"Set the purge options","text":"
        • Cache tag hash length: 4
        • Purge method: Use soft purge

        A 4 character cache tag is plenty for most sites, a 5 character cache tag is likely better for sites with millions of entities (to reduce cache tag collisions).

        Note

        Soft purging should be used, this means the object in Fastly is marked as stale, rather than being evicted entirely so that it can be used in the event the origin is down (with the feature serve while stale).

        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#set-the-stale-content-options","title":"Set the Stale Content Options","text":"

        Set the options to what makes sense for your site. Minimum 1 hour (3600), maximum 1 week (604800). Generally something like the following will be fine:

        1. Stale while revalidate - on, 14440 seconds
        2. Stale if error - on, 604800 seconds

        Optionally configure the webhooks (so you can ping Slack for instance when a cache purge is sent).

        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#configure-the-purge-module","title":"Configure the Purge module","text":"

        Visit the purge page /admin/config/development/performance/purge

        Set up the following options:

        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#cache-invalidation","title":"Cache Invalidation","text":"
        • Drupal Origin: Tag
        • Fastly: E, Tag, URL
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#queue","title":"Queue","text":"
        • Queuers: Core tags queuer, Purge block(s)
        • Queue: Database
        • Processors: Core processor, Late runtime processor, Purge block(s)

        What this means is that we will be using Drupal's built-in core tag queuer (add tags to the queue), the queue will be stored in the database (default), and the queue will be processed by

        • Cron processor
        • Late runtime processor

        In order for the cron processor to run, you need to ensure that cron is running on your site. Ideally every minute. You can manually run it in your cli pod, to ensure that purge_processor_cron_cron() is being executed without errors.

        start cron
        [drupal8]production@cli-drupal:/app$ drush cron -v\n...\n[notice] Starting execution of purge_processor_cron_cron(), execution of node_cron() took 21.16ms.\n

        The Late runtime processor will run in hook_exit() for every page load, this can be useful to process the purges nearly as quickly as they come into the queue.

        By having both, you guarantee that purges happen as soon as possible.

        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#optimal-cache-header-setup","title":"Optimal Cache Header Setup","text":"

        Out of the box, Drupal does not have the power to set different cache lifetimes in the browser vs in Fastly. So if you do set long cache lifetimes in Drupal, often end users will not see them if their browser has cached the page. If you install the 2.x version of the HTTP Cache Control module, this will give you a lot more flexibility on what caches and for how long.

        For most sites, a sensible default could be

        • Shared cache maximum age : 1 month
        • Browser cache maximum age : 10 minutes
        • 404 cache maximum age: 15 minutes
        • 302 cache maximum age: 1 hour
        • 301 cache maximum age: 1 hour
        • 5xx cache maximum age: no cache

        Note

        This relies on your site having accurate cache tags represented for all the content that exists on the page.

        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#true-client-ips","title":"True client IPs","text":"

        We configure Fastly to send the actual client IP back on the HTTP header True-Client-IP, you can make Drupal respect this header with the following changes in settings.php:

        settings.php changes for Drupal < 8.7.0
        $settings['reverse_proxy'] = TRUE;\n$settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP';\n

        However, with Drupal 8.7.0, there was a change to remove this functionality. You can achieve the same goal with the following snippet

        settings.php changes for Drupal >= 8.7.0
        /**\n * Tell Drupal to use the True-Client-IP HTTP header.\n */\nif (isset($_SERVER['HTTP_TRUE_CLIENT_IP'])) {\n  $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_TRUE_CLIENT_IP'];\n}\n
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#drush-integration","title":"Drush integration","text":"settings.php
         fastly:\n   fastly:purge:all (fpall)                                                    Purge whole service.\n   fastly:purge:key (fpkey)                                                    Purge cache by key.\n   fastly:purge:url (fpurl)                                                    Purge cache by Url.\n
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#viewing-fastly-caching-headers-using-curl","title":"Viewing Fastly caching headers using cURL","text":"

        Use this function: (works in Linux and Mac OSX)

        cURL function
        function curlf() { curl -sLIXGET -H 'Fastly-Debug:1' \"$@\" | grep -iE 'X-Cache|Cache-Control|Set-Cookie|X-Varnish|X-Hits|Vary|Fastly-Debug|X-Served|surrogate-control|surrogate-key' }\n
        Using cURL
        $ curlf https://www.example-site-fastly.com\ncache-control: max-age=601, public, s-maxage=2764800\nsurrogate-control: max-age=2764800, public, stale-while-revalidate=3600, stale-if-error=3600\nfastly-debug-path: (D cache-wlg10427-WLG 1612906144) (F cache-wlg10426-WLG 1612906141) (D cache-fra19179-FRA 1612906141) (F cache-fra19122-FRA 1612906141)\nfastly-debug-ttl: (H cache-wlg10427-WLG - - 3) (M cache-fra19179-FRA - - 0)\nfastly-debug-digest: 1118d9fefc8a514ca49d49cb6ece04649e1acf1663398212650bb462ba84c381\nx-served-by: cache-fra19179-FRA, cache-wlg10427-WLG\nx-cache: MISS, HIT\nx-cache-hits: 0, 1\nvary: Cookie, Accept-Encoding\n

        From the above headers we can see that:

        • The HTML page is cacheable
        • Browsers will cache the page for 601 seconds
        • Fastly will cache the page for 32 days (2764800 seconds)
        • Tiered caching is in effect (edge PoP in Wellington, and shield PoP in France)
        • The HTML page was a cache hit at the edge PoP
        "},{"location":"applications/drupal/integrate-drupal-and-fastly/#sending-manual-purge-requests-to-fastly","title":"Sending manual purge requests to Fastly","text":"

        If you ever want to remove a specific page from cache manually, there are ways to do this.

        Purge Fastly by single URL
        curl -Ssi -XPURGE -H 'Fastly-Soft-Purge:1' -H \"Fastly-Key:$FASTLY_API_TOKEN\" https://www.example.com/subpage\n

        You can also purge by cache tag:

        Purge Fastly by cache tag
        curl -XPOST -H 'Fastly-Soft-Purge:1' -H \"Fastly-Key:$FASTLY_API_TOKEN\" https://api.fastly.com/service/$FASTLY_API_SERVICE/purge/<surrogatekey>\n

        You can also use the Fastly CLI which helps to make this a little nicer.

        "},{"location":"applications/drupal/phpunit-and-phpstorm/","title":"PHPUnit and PhpStorm","text":"

        Note

        This document assumes the following:

        - You are using Docker.

        - You are using a standard Amazee/Lagoon project with a docker-compose.yml file.

        - You are on a Mac - it should work for other operating systems but folder structure and some configuration settings may be different.

        "},{"location":"applications/drupal/phpunit-and-phpstorm/#configuring-the-project","title":"Configuring the project","text":"
        1. Duplicate* the /core/phpunit.xml.dist file to /core/phpunit.xml
        2. Edit* /core/phpunit.xml and fill in the following variables:

          • SIMPLETEST_DB: mysql://drupal:drupal@mariadb:3306/drupal#db
          • SIMPLETEST_BASE_URL: <PROJECT_URL>
        "},{"location":"applications/drupal/phpunit-and-phpstorm/#configuring-phpstorm","title":"Configuring PhpStorm","text":""},{"location":"applications/drupal/phpunit-and-phpstorm/#set-up-docker","title":"Set Up Docker","text":"
        1. In PhpStorm, go to File > Settings > Build, Execution, Deployment > Docker
        2. Click: +
        3. Select: Docker for Mac
        "},{"location":"applications/drupal/phpunit-and-phpstorm/#set-up-cli-interpreter","title":"Set Up CLI interpreter","text":"

        Add a new CLI interpreter:

        1. In PhpStorm, go to File > Settings > Languages & Frameworks > PHP
        2. Click ... and then +
        3. Next select: Add a new CLI interpreter from Docker, vagrant...
        4. Use the following configurations:
          • Server: <DOCKER>
          • Configuration file(s): ./docker-compose.yml
          • Service: cli
          • Lifecycle: Connect to existing container ('docker compose exec')
        5. Path mappings:
          • Local path: <ROOT_PATH>
          • Remote path*: /app

        "},{"location":"applications/drupal/phpunit-and-phpstorm/#set-up-remote-interpreter","title":"Set Up Remote Interpreter","text":"

        Add Remote Interpreter:

        1. In PhpStorm, go to File > Settings > Languages & Frameworks > PHP > Test Frameworks
        2. Click + and select PHPUnit by Remote Interpreter
        3. Use the following configurations:
          • CLI Interpreter: <CLI_INTERPRETER>
          • Path mappings*: <PROJECT_ROOT> -> /app
          • PHPUnit: Use Composer autoloader
          • Path to script*: /app/vendor/autoload.php
          • Default configuration file*: /app/web/core/phpunit.xml

        "},{"location":"applications/drupal/phpunit-and-phpstorm/#setupconfigure-runner-template","title":"Setup/Configure Runner Template","text":"
        1. Configure runner:
          1. In PhpStorm, go to Run > Edit Configurations... > Templates > PHPUnit
          2. Use the following configurations:

            1. Test scope: Defined in the configuration file

            2. Interpreter: <CLI_INTERPRETER>

        Note

        If you are not on a Mac, this may vary.

        "},{"location":"applications/drupal/phpunit-and-phpstorm/#final-checks","title":"Final checks","text":""},{"location":"applications/drupal/phpunit-and-phpstorm/#some-final-checks-to-run-before-you-run-a-test","title":"Some final checks to run before you run a test","text":"
        1. You have the project up and running: $ docker compose up -d
        2. The project is working without any errors, visit the site just to make sure it all works as expected - this is not 100% necessary, but nice to know it is working normally.
        3. We should be ready to run some tests!
        "},{"location":"applications/drupal/phpunit-and-phpstorm/#ready-to-run","title":"Ready to Run","text":"

        Now you have the above configuration set up it should be as straightforward as going to the test you want to run and pressing the green arrow!

        Once you press this PhpStorm will use Docker to enter the CLI container, then start running PHPUnit based upon the config.

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/","title":"Step by Step: Getting Drupal ready to run on Lagoon","text":""},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#1-lagoon-drupal-setting-files","title":"1. Lagoon Drupal Setting Files","text":"

        In order for Drupal to work with Lagoon, we need to teach Drupal about Lagoon and Lagoon about Drupal. This happens by copying specific YAML and PHP files into your Git repository.

        If you're working on a Drupal project, you can check out one of the various Drupal example projects in our examples repository. We have Drupal 8 and 9 and some variants of each depending on your needs, such as database types. Clone the repository that best suits your needs to get started!

        Here is a summary of the Lagoon- and Drupal-specific files you will find:

        • .lagoon.yml - The main file that will be used by Lagoon to understand what should be deployed and many more things. This file has some sensible Drupal defaults. If you would like to edit or modify, please check the documentation for .lagoon.yml.
        • docker-compose.yml, .dockerignore, and *.dockerfile (or Dockerfile) - These files are used to run your local Drupal development environment, they tell Docker which services to start and how to build them. They contain sensible defaults and many commented lines. We hope that it's well-commented enough to be self-describing. If you would like to find out more, see documentation for docker-compose.yml.
        • sites/default/* - These .php and .yml files tell Drupal how to communicate with Lagoon containers both locally and in production. They also provide a straightforward system for specific overrides in development and production environments. Unlike other Drupal hosting systems, Lagoon never ever injects Drupal settings files into your Drupal. Therefore, you can edit them however you like. Like all other files, they contain sensible defaults and some commented parts.
        • drush/aliases.drushrc.php - These files are specific to Drush and tell Drush how to talk to the Lagoon GraphQL API in order to learn about all site aliases there are.
        • drush/drushrc.php - Some sensible defaults for Drush commands.
        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#update-your-gitignore-settings","title":"Update your .gitignore Settings","text":"

        Don't forget to make sure your .gitignore will allow you to commit the settings files.

        Drupal is shipped with sites/*/settings*.php and sites/*/services*.yml in .gitignore. Remove that, as with Lagoon we don't ever have sensitive information in the Git repository.

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#note-about-webroot-in-drupal-8","title":"Note about WEBROOT in Drupal 8","text":"

        Unfortunately the Drupal community has not decided on a standardized WEBROOT folder name. Some projects put Drupal within web, and others within docroot or somewhere else. The Lagoon Drupal settings files assume that your Drupal is within web, but if this is different for your Drupal, please adapt the files accordingly.

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#note-about-composerjson","title":"Note about composer.json","text":"

        If you installed Drupal via composer, please check your composer.json and make sure that the name is NOT drupal/drupal, as this could confuse Drush and other tools of the Drupal universe, just rename it to something like myproject/drupal

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#2-customize-docker-composeyml","title":"2. Customize docker-compose.yml","text":"

        Don't forget to customize the values in lagoon-project & LAGOON_ROUTE with your site-specific name & the URL you'd like to access the site with. Here's an example:

        docker-compose.yml
        x-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# Route that should be used locally. If you are using pygmy, this route *must* end with .docker.amazee.io.\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n
        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#3-build-images","title":"3. Build Images","text":"

        First, we need to build the defined images:

        Build images
        docker compose build\n

        This will tell docker-compose to build the Docker images for all containers that have a build: definition in the docker-compose.yml. Usually for Drupal this is the case for the cli, nginx and php images. We do this because we want to run specific build commands (like composer install) or inject specific environment variables (like WEBROOT) into the images.

        Usually, building is not necessary every time you edit your Drupal code (as the code is mounted into the containers from your host), but rebuilding does not hurt. Plus, Lagoon will build the exact same Docker images during a deploy, so you can check that your build will also work during a deployment by just running docker compose build again.

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#4-start-containers","title":"4. Start Containers","text":"

        Now that the images are built, we can start the containers:

        Start containers
        docker compose up -d\n

        This will bring up all containers. After the command is done, you can check with docker compose ps to ensure that they are all fully up and have not crashed. If there is a problem, check the logs with docker compose logs -f [servicename].

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#5-rerun-composer-install-for-composer-projects-only","title":"5. Rerun composer install (for Composer projects only)","text":"

        In a local development environment, you probably want all dependencies downloaded and installed, so connect to the cli container and run composer install:

        Run composer install in CLI
        docker compose exec cli bash\ncomposer install\n

        This might sound weird, as there was already a composer install executed during the build step, so let us explain:

        • In order to be able to edit files on the host and have them immediately available in the container, the default docker-composer.yml mounts the whole folder into the the containers (this happens with .:/app:delegated in the volumes section). This also means that all dependencies installed during the Docker build are overwritten with the files on the host.
        • Locally, you probably want dependencies defined as require-dev in composer.json to exist as well, while on a production deployment they would just use unnecessary space. So we run composer install --no-dev in the Dockerfile and composer install manually.

        If everything went well, open the LAGOON_ROUTE defined in docker-compose.yml (for example http://drupal.docker.amazee.io) and you should be greeted by a nice Drupal error. Don't worry - that's ok right now, most important is that it tries to load a Drupal site.

        If you get a 500 or similar error, make sure everything loaded properly with Composer.

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#6-check-status-and-install-drupal","title":"6. Check Status and Install Drupal","text":"

        Finally it's time to install Drupal, but just before that we want to make sure everything works. We suggest using Drush for that:

        Drush status
        docker compose exec cli bash\ndrush status\n

        This should return something like:

        Drush status result
        [drupal-example]cli-drupal:/app$ drush status\n[notice] Missing database table: key_value\nDrupal version       :  8.6.1\nSite URI             :  http://drupal.docker.amazee.io\nDatabase driver      :  mysql\nDatabase hostname    :  mariadb\nDatabase port        :  3306\nDatabase username    :  drupal\nDatabase name        :  drupal\nPHP binary           :  /usr/local/bin/php\nPHP config           :  /usr/local/etc/php/php.ini\nPHP OS               :  Linux\nDrush script         :  /app/vendor/drush/drush/drush\nDrush version        :  9.4.0\nDrush temp           :  /tmp\nDrush configs        :  /home/.drush/drush.yml\n                        /app/vendor/drush/drush/drush.yml\nDrupal root          :  /app/web\nSite path            :  sites/default\n

        Warning

        You may have to tell pygmy about your public key before the next step.

        If you get an error like Permission denied (publickey), check out the documentation here: pygmy - adding ssh keys

        Now it is time to install Drupal (if instead you would like to import an existing SQL file, please skip to step 7, but we suggest you start with a clean Drupal installation in the beginning to be sure everything works).

        Install Drupal
        drush site-install\n

        This should output something like:

        drush site-install
        [drupal-example]cli-drupal:/app$ drush site-install\nYou are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y\nStarting Drupal installation. This takes a while. Consider using the --notify global option.\nInstallation complete.  User name: admin  User password: a7kZJekcqh\nCongratulations, you installed Drupal!\n

        Now you can visit the URL defined in LAGOON_ROUTE and you should see a fresh and clean installed Drupal site - Congrats!

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#7-import-existing-database-dump","title":"7. Import existing Database Dump","text":"

        If you already have an existing Drupal site, you probably want to import its database over to your local site.

        There are many different ways to create a database dump. If your current hosting provider has Drush installed, you can use the following:

        Drush sql-dump
        drush sql-dump --result-file=dump.sql\n\nDatabase dump saved to dump.sql\n

        Now you have a dump.sql file that contains your whole database.

        Copy this file into your Git repository and connect to the cli, and you should see the file in there:

        Viewing dump.sql
        [drupal-example]cli-drupal:/app$ ls -l dump.sql\n-rw-r--r--    1 root     root          5281 Dec 19 12:46 dump.sql\n

        Now you can drop the current database, and then import the dump.

        Import dump.sql
        drush sql-drop\n\ndrush sql-cli < dump.sql\n

        Verify that everything works with visiting the URL of your project. You should have a functional copy of your Drupal site!

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#8-drupal-files-directory","title":"8. Drupal files directory","text":"

        A Drupal site also needs the files directory. As the whole folder is mounted into the Docker containers, add the files into the correct folder (probably web/sites/default/files, sites/default/files or something similar). Remember what you've set as your WEBROOT - it may not be the same for all projects.

        "},{"location":"applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#9-done","title":"9. Done","text":"

        You are done with your local setup. The Lagoon team wishes happy Drupaling!

        "},{"location":"applications/drupal/subfolders/","title":"Subfolders","text":"

        An example could be: www.example.com points to one Drupal site, while www.example.com/blog loads a blog built in another Drupal.

        It would be possible to run both Drupals in a single Git repository and deploy it as a whole, but this workflow might not fit every team, and having separate Git repositories fits some situations better.

        "},{"location":"applications/drupal/subfolders/#modifications-of-root-application","title":"Modifications of root application","text":"

        The root application (in this example, the Drupal site for www.example.com), needs a couple of NGINX configs that will configure NGINX to be a reverse proxy to the subfolder applications:

        "},{"location":"applications/drupal/subfolders/#location_prependconf","title":"location_prepend.conf","text":"

        Create a file called location_prepend.conf in the root of your Drupal installation:

        location_prepend.conf
        resolver 8.8.8.8 valid=30s;\n\nlocation ~ ^/subfolder {\n  # If $http_x_forwarded_proto is empty (If it is not set from an upstream reverseproxy).\n  # Aet it to the current scheme.\n  set_if_empty $http_x_forwarded_proto $scheme;\n\n  proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;\n  proxy_set_header      X-Forwarded-Proto $scheme;\n  proxy_set_header      X-Forwarded-Proto $http_x_forwarded_proto;\n  proxy_set_header      X-Lagoon-Forwarded-Host $host;\n  # Will be used by downstream to know the original host.\n  proxy_set_header      X-REVERSEPROXY $hostname;\n  proxy_set_header      FORWARDED \"\";\n  # Unset FORWARDED because drupal8 gives errors if it is set.\n  proxy_set_header      Proxy \"\";\n  # Unset Proxy because drupal8 gives errors if it is set.\n  proxy_ssl_server_name on;\n\n  # NGINX needs a variable set in order for the DNS resolution to work correctly.\n  set                   $subfolder_drupal_host \"https://nginx-lagoonproject-${LAGOON_GIT_SAFE_BRANCH}.clustername.com:443\";\n  # LAGOON_GIT_SAFE_BRANCH variable will be replaced during docker entrypoint.\n  proxy_pass            $subfolder_drupal_host;\n  proxy_set_header      Host $proxy_host;\n  # $proxy_host will be automatically generated by NGINX based on proxy_pass (it needs to be without scheme and port).\n\n  expires off; # make sure we honor cache headers from the proxy and not overwrite them\n

        Replace the following strings:

        • /subfolder with the name of the subfolder you want to use. For example, /blog.
        • nginx with the service that you want to point too in the subfolder project.
        • lagoonproject with the Lagoon projectname of the subfolder project.
        "},{"location":"applications/drupal/subfolders/#nginx-dockerfile","title":"NGINX Dockerfile","text":"

        Add the following to your NGINX Dockerfile (nginx.dockerfile or Dockerfile.nginx):

        nginx.dockerfile
        COPY location_prepend.conf /etc/nginx/conf.d/drupal/location_prepend.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/*\n
        "},{"location":"applications/drupal/subfolders/#modifications-of-subfolder-application","title":"Modifications of subfolder application","text":"

        Like the root application, we also need to teach the subfolder application (in this example, the Drupal installation for www.example.com/blog), that it is running under a subfolder. To do this, we create two files:

        "},{"location":"applications/drupal/subfolders/#location_drupal_append_subfolderconf","title":"location_drupal_append_subfolder.conf","text":"

        Create a file called location_drupal_append_subfolder.conf in the root of your subfolder Drupal installation:

        location_drupal_append_subfolder.conf
        # When injecting a script name that is prefixed with `subfolder`, Drupal will\n# render all URLs with `subfolder` prefixed\nfastcgi_param  SCRIPT_NAME        /subfolder/index.php;\n\n# If we are running via a reverse proxy, we inject the original HOST URL\n# into PHP. With this Drupal will render all URLs with the original HOST URL,\n# and not the current used HOST.\n\n# We first set the HOST to the regular host variable.\nfastcgi_param  HTTP_HOST          $http_host;\n# Then we overwrite it with `X-Lagoon-Forwarded-Host` if it exists.\nfastcgi_param  HTTP_HOST          $http_x_lagoon_forwarded_host if_not_empty;\n

        Replace /subfolder with the name of the subfolder you want to use. For example, /blog.

        "},{"location":"applications/drupal/subfolders/#server_prepend_subfolderconf","title":"server_prepend_subfolder.conf","text":"

        Create a file called server_prepend_subfolder.conf in the root of your subfolder Drupal installation:

        server_prepend_subfolder.conf
        # Check for redirects before we do the internal NGINX rewrites.\n# This is done because the internal NGINX rewrites uses `last`,\n# which instructs NGINX to not check for rewrites anymore (and\n# `if` is part of the redirect module).\ninclude /etc/nginx/helpers/010_redirects.conf;\n\n# This is an internal NGINX rewrite, it removes `/subfolder/`\n# from the requests so that NGINX handles the request as it would\n# have been `/` from the beginning.\n# The `last` flag is also important. It will cause NGINX not to\n# execute any more rewrites, because it would redirect forever\n# with the rewrites below.\nrewrite ^/subfolder/(.*)          /$1             last;\n\n# Make sure redirects are NOT absolute, to ensure NGINX does not\n# overwrite the host of the URL - which could be something other than\n# what NGINX currently thinks it is serving.\nabsolute_redirect off;\n\n# If a request just has `/subfolder` we 301 redirect to `/subfolder/`\n# (Drupal really likes a trailing slash)\nrewrite ^/subfolder               /subfolder/     permanent;\n\n# Any other request we prefix 301 redirect with `/subfolder/`\nrewrite ^\\/(.*)                   /subfolder/$1   permanent;\n

        Replace /subfolder with the name of the subfolder you want to use. For example, /blog.

        "},{"location":"applications/drupal/subfolders/#nginx-dockerfile_1","title":"NGINX Dockerfile","text":"

        We also need to modify the NGINX Dockerfile.

        Add the following to your NGINX Dockerfile (nginx.dockerfile or Dockerfile.nginx):

        nginx.dockerfile
        COPY location_drupal_append_subfolder.conf /etc/nginx/conf.d/drupal/location_drupal_append_subfolder.conf\nCOPY server_prepend_subfolder.conf /etc/nginx/conf.d/drupal/server_prepend_subfolder.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/*\n
        "},{"location":"applications/drupal/services/","title":"Services","text":""},{"location":"applications/drupal/services/#mariadb-is-the-open-source-successor-to-mysql","title":"MariaDB is the open-source successor to MySQL","text":"

        Learn about MariaDB with Drupal

        Documentation on the plain MariaDB image (the MariaDB-Drupal image is built on this).

        "},{"location":"applications/drupal/services/#redis-is-a-fast-open-source-in-memory-key-value-data-store-for-use-as-a-database-cache-message-broker-and-queue","title":"Redis is a fast, open-source, in-memory key-value data store for use as a database, cache, message broker, and queue","text":"

        Learn about Redis with Drupal.

        Documentation on the Redis-persistent image.

        "},{"location":"applications/drupal/services/#solr-is-an-open-source-search-platform","title":"Solr is an open-source search platform","text":"

        Learn about Solr with Drupal.

        Documentation on the plain Solr image (the Solr-Drupal image is built on this).

        "},{"location":"applications/drupal/services/#varnish-is-a-powerful-open-source-http-engine-and-reverse-http-proxy-that-helps-to-speed-up-your-website","title":"Varnish is a powerful, open-source HTTP engine and reverse HTTP proxy that helps to speed up your website","text":"

        Learn about Varnish with Drupal

        Documentation on the plain Varnish image (the Varnish-Drupal image is built on this).

        "},{"location":"applications/drupal/services/mariadb/","title":"MariaDB-Drupal","text":"

        The Lagoon mariadb-drupal Docker image Dockerfile is a customized mariadb image to use within Drupal projects in Lagoon. It differs from the mariadb image only for initial database setup, made by some environment variables:

        Environment Variable Default Description MARIADB_DATABASE drupal Drupal database created at startup. MARIADB_USER drupal Default user created at startup. MARIADB_PASSWORD drupal Password of default user created at startup.

        If the LAGOON_ENVIRONMENT_TYPE variable is set to production, performances are set accordingly by using MARIADB_INNODB_BUFFER_POOL_SIZE=1024 and MARIADB_INNODB_LOG_FILE_SIZE=256.

        "},{"location":"applications/drupal/services/mariadb/#additional-mariadb-logging","title":"Additional MariaDB Logging","text":"

        During the course of development, it may be necessary to enable either query logging or slow query logging. To do so, set the environment variables MARIADB_LOG_SLOW or MARIADB_LOG_QUERIES. This can be done in docker-compose.yml.

        "},{"location":"applications/drupal/services/mariadb/#connecting-to-mysql-container-from-the-host","title":"Connecting to MySQL container from the host","text":"

        If you would like to connect to your MySQL database inside the Docker container with an external tool like Sequel Pro, MySQL Workbench, HeidiSQL, DBeaver, plain old mysql-cli or anything else, here's how to get the IP and port info.

        "},{"location":"applications/drupal/services/mariadb/#get-published-mysql-port-from-the-container","title":"Get published MySQL port from the container","text":"

        By default, Docker assigns a randomly published port for MySQL during each container start. This is done to prevent port collisions.

        To get the published port via docker:

        Run: docker port [container_name].

        Get port
        $ docker port drupal_example_mariadb_1\n3306/tcp -> 0.0.0.0:32797\n

        Or via docker-compose inside a Drupal repository:

        Run: docker compose port [service_name] [interal_port].

        Set ports
        docker compose port mariab 3306\n0.0.0.0:32797\n
        "},{"location":"applications/drupal/services/mariadb/#setting-a-static-port-not-recommended","title":"Setting a static port (not recommended)","text":"

        During development, if you are using an external database tool, it may become cumbersome to continually check and set the MySQL connection port.

        To set a static port, edit your service definition in your docker-compose.yml.

        docker-compose.yml
          mariadb:\n...\nports:\n- \"33772:3306\" # Exposes port 3306 with a 33772 on the host port. Note by doing this you are responsible for managing port collisions`.\n

        Warning

        By setting a static port you become responsible for managing port collisions.

        "},{"location":"applications/drupal/services/mariadb/#connect-to-mysql","title":"Connect to MySQL","text":"

        Now you can use these details to connect to whatever database management tool you'd like.

        Linux OS X IP/Host IP from container docker.amazee.io Port Published port from container Published port from container Username drupal drupal Password drupal drupal Database drupal drupal"},{"location":"applications/drupal/services/nginx/","title":"NGINX-Drupal","text":"

        The Lagoon nginx-drupal Docker image. Optimized to work with Drupal. Based on Lagoon nginx image.

        "},{"location":"applications/drupal/services/nginx/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        • To keep drupal.conf 's configuration file as clean and customizable as possible, we added include directives in the main sections of the file:server, location /, location @drupal and location @php.
        • Further information in the section Drupal.conf customization.
        "},{"location":"applications/drupal/services/nginx/#included-drupal-configuration-drupalconf","title":"Included Drupal configuration (drupal.conf)","text":"

        The image includes a full NGINX working configuration for Drupal 7, 8 and 9. It includes some extra functionalities like:

        • Support for humanstxt Drupal module.
        • Support for robotstxt Drupal module.
        • Disallow access to vagrant directory for local development.
        "},{"location":"applications/drupal/services/nginx/#drupalconf-customization","title":"Drupal.conf customization","text":"

        The drupal.conf file is a customized version of the nginx configuration file, optimized for Drupal. Customers have different ways of customizing it:

        • Modifying it (hard to support in case of errors).
        • Using built-in customization through *.conf files.

        The drupal.conf file is divided into several sections. The sections we've included in our customizations are:

        • server
        • location /
        • location @drupal
        • location @php.

        For each of this section, there are two includes:

        • *_prepend.conf
        • *_append.conf

        Here what the location @drupal section looks like:

        drupal.conf
        location @drupal {\ninclude /etc/nginx/conf.d/drupal/location_drupal_prepend*.conf;\ninclude        /etc/nginx/fastcgi.conf;\nfastcgi_param  SCRIPT_NAME        /index.php;\nfastcgi_param  SCRIPT_FILENAME    $realpath_root/index.php;\nfastcgi_pass   ${NGINX_FASTCGI_PASS:-php}:9000;\ninclude /etc/nginx/conf.d/drupal/location_drupal_append*.conf;\n}\n

        This configuration allows customers to create files called location_drupal_prepend.conf and location_drupal_append.conf, where they can put all the configuration they want to insert before and after the other statements.

        Those files, once created, MUST exist in the nginx container, so add them to Dockerfile.nginx like so:

        dockerfile.nginx
        COPY location_drupal_prepend.conf /etc/nginx/conf.d/drupal/location_drupal_prepend.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/location_drupal_prepend.conf\n
        "},{"location":"applications/drupal/services/nginx/#drupal-core-statistics-module-configuration","title":"Drupal Core Statistics Module Configuration","text":"

        If you're using the core Statistics module, you may run into an issue that needs a quick configuration change.

        With the default NGINX configuration, the request to the tracking endpoint /core/modules/statistics/statistics.php is denied (404).

        This is related to the default NGINX configuration:

        drupal.conf
        location ~* ^.+\\.php$ {\n    try_files /dev/null @drupal;\n}\n

        To fix the issue, we instead define a specific location rule and inject this as a location prepend configuration:

        drupal.conf
        ## Allow access to to the statistics endpoint.\nlocation ~* ^(/core/modules/statistics/statistics.php) {\n      try_files /dev/null @php;\n}\n

        And copy this during the NGINX container build:

        dockerfile.nginx
        # Add specific Drupal statistics module NGINX configuration.\nCOPY .lagoon/nginx/location_prepend_allow_statistics.conf /etc/nginx/conf.d/drupal/location_prepend_allow_statistics.conf\n
        "},{"location":"applications/drupal/services/php-cli/","title":"PHP-CLI-Drupal","text":"

        The Lagoon php-cli-drupal Docker image is optimized to work with Drupal. It is based on the Lagoon php-cli image, and has all the command line tools needed for the daily maintenance of a Drupal website:

        • drush
        • drupal console
        • drush launcher (which will fallback to Drush 8 if there is no site installed Drush found)
        "},{"location":"applications/drupal/services/php-cli/#supported-versions","title":"Supported versions","text":"
        • 7.3 (available for compatibility only, no longer officially supported)
        • 7.4 (available for compatibility only, no longer officially supported) - uselagoon/php-7.4-cli-drupal
        • 8.0 (available for compatibility only, no longer officially supported) - uselagoon/php-8.0-cli-drupal
        • 8.1 Dockerfile - uselagoon/php-8.1-cli-drupal
        • 8.2 Dockerfile - uselagoon/php-8.2-cli-drupal
        • 8.3 Dockerfile - uselagoon/php-8.3-cli-drupal

        All PHP versions use their own Dockerfiles.

        "},{"location":"applications/drupal/services/php-cli/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        "},{"location":"applications/drupal/services/redis/","title":"Redis","text":"

        We recommend using Redis for internal caching. Add the Redis service to docker-compose.yaml.

        docker-compose.yml
          redis:\nimage: uselagoon/redis-5\nlabels:\nlagoon.type: redis\n<< : *default-user # Uses the defined user from top.\nenvironment:\n<< : *default-environment\n

        Also, to configure Redis, add the following to your settings.php.

        "},{"location":"applications/drupal/services/redis/#drupal-7","title":"Drupal 7","text":"settings.php
          if(getenv('LAGOON')){\n    $conf['redis_client_interface'] = 'PhpRedis';\n    $conf['redis_client_host'] = 'redis';\n    $conf['lock_inc'] = 'sites/all/modules/contrib/redis/redis.lock.inc';\n    $conf['path_inc'] = 'sites/all/modules/contrib/redis/redis.path.inc';\n    $conf['cache_backends'][] = 'sites/all/modules/contrib/redis/redis.autoload.inc';\n    $conf['cache_default_class'] = 'Redis_Cache';\n    $conf['cache_class_cache_form'] = 'DrupalDatabaseCache';\n    $conf['cache_class_cache_field'] = 'DrupalDatabaseCache';\n  }\n

        Depending on file system structure, the module paths may need to be updated.

        "},{"location":"applications/drupal/services/redis/#drupal-8","title":"Drupal 8","text":"

        The Drupal 8 config is largely stock. Notably, Redis is disabled while Drupal is being installed.

        settings.php
        if (getenv('LAGOON')){\n  $settings['redis.connection']['interface'] = 'PhpRedis';\n  $settings['redis.connection']['host'] = getenv('REDIS_HOST') ?: 'redis';\n  $settings['redis.connection']['port'] = getenv('REDIS_SERVICE_PORT') ?: '6379';\n  $settings['cache_prefix']['default'] = getenv('LAGOON_PROJECT') . '_' . getenv('LAGOON_GIT_SAFE_BRANCH');\n  // Do not set the cache during installations of Drupal.\n  if (!drupal_installation_attempted() && extension_loaded('redis')) {\n    $settings['cache']['default'] = 'cache.backend.redis';\n    // And allows to use it without the Redis module being enabled.\n    $class_loader->addPsr4('Drupal\\\\redis\\\\', 'modules/contrib/redis/src');\n    $settings['bootstrap_container_definition'] = [\n      'parameters' => [],\n      'services' => [\n        'redis.factory' => [\n          'class' => 'Drupal\\redis\\ClientFactory',\n        ],\n        'cache.backend.redis' => [\n          'class' => 'Drupal\\redis\\Cache\\CacheBackendFactory',\n          'arguments' => ['@redis.factory', '@cache_tags_provider.container', '@serialization.phpserialize'],\n        ],\n        'cache.container' => [\n          'class' => '\\Drupal\\redis\\Cache\\PhpRedis',\n          'factory' => ['@cache.backend.redis', 'get'],\n          'arguments' => ['container'],\n        ],\n        'cache_tags_provider.container' => [\n          'class' => 'Drupal\\redis\\Cache\\RedisCacheTagsChecksum',\n          'arguments' => ['@redis.factory'],\n        ],\n        'serialization.phpserialize' => [\n          'class' => 'Drupal\\Component\\Serialization\\PhpSerialize',\n        ],\n      ],\n    ];\n  }\n}\n
        "},{"location":"applications/drupal/services/redis/#persistent","title":"Persistent","text":"

        Redis can also be configured as a persistent backend.

        docker-compose.yml
        redis:\nimage: uselagoon/redis-5-persistent\nlabels:\nlagoon.type: redis-persistent\nenvironment:\n<< : *default-environment\n
        "},{"location":"applications/drupal/services/redis/#environment-variables","title":"Environment Variables","text":"

        Environment variables are meant to store some common information about Redis.

        Environment Variable Default Description LOGLEVEL notice Redis loglevel DATABASES 1 Number of databases MAXMEMORY 100mb Maximum memory usage of Redis"},{"location":"applications/drupal/services/redis/#redis-failover","title":"Redis Failover","text":"

        Here is a snippet to implement a Redis failover in case of the Redis container not being available (for example, during maintenance)

        The following is inserted into Drupal's active settings.php file.

        settings.php
        if (getenv('LAGOON')) {\n  $contrib_path = is_dir('sites/all/modules/contrib') ? 'sites/all/modules/contrib' : 'sites/all/modules';\n  $redis = DRUPAL_ROOT . '/sites/all/modules/contrib/redis';\n  if (file_exists(\"$redis/redis.module\")) {\n    require_once \"$redis/redis.module\";\n    $conf['redis_client_host'] = getenv('REDIS_HOST') ?: 'redis';\n    $conf['redis_client_port'] = getenv('REDIS_SERVICE_PORT') ?: 6379;\n    $conf['cache_prefix'] = getenv('REDIS_CACHE_PREFIX') ?: getenv('LAGOON_PROJECT') . '_' . getenv('LAGOON_GIT_SAFE_BRANCH');\n    try {\n      // Ensure that there is a connection to redis.\n      $client = Redis_Client::getClient();\n      $response = $client->ping();\n      if (!$response) {\n      throw new \\Exception('Redis could be reached but is not responding correctly.');\n      }\n      $conf['redis_client_interface'] = 'PhpRedis';\n      $conf['lock_inc'] = $contrib_path . '/redis/redis.lock.inc';\n      $conf['path_inc'] = $contrib_path . '/redis/redis.path.inc';\n      $conf['cache_backends'][] = $contrib_path . '/redis/redis.autoload.inc';\n      $conf['cache_default_class'] = 'Redis_Cache';\n    } catch (\\Exception $e) {\n      // Redis is not available for this request we should not configure the\n      // redis backend and ensure no cache is used. This will retry next\n      // request.\n      if (!class_exists('DrupalFakeCache')) {\n        $conf['cache_backends'][] = 'includes/cache-install.inc';\n      }\n      $conf['cache_default_class'] = 'DrupalFakeCache';\n    }\n  }\n}\n
        "},{"location":"applications/drupal/services/solr/","title":"Solr-Drupal","text":""},{"location":"applications/drupal/services/solr/#standard-use","title":"Standard use","text":"

        For Solr 8 and 9, we ship the default schema files provided by the search_api_solr Drupal module. Add the Solr version you would like to use in your docker-compose.yml file, following our example.

        "},{"location":"applications/drupal/services/solr/#custom-schema","title":"Custom schema","text":"

        To implement schema customizations for Solr in your project, look to how Lagoon creates our standard images.

        • In the solr section of your docker-compose.yml file, replace image: uselagoon/solr:8 with:
        docker-compose.yml
          build:\ncontext: .\ndockerfile: solr.dockerfile\n
        • Place your schema files in your code repository. We typically like to use .lagoon/solr.
        • Create a solr.dockerfile.
        solr.dockerfile
        FROM uselagoon/solr:8\n\nCOPY .lagoon/solr /solr-conf/conf\n\nCMD solr-recreate drupal /solr-conf && solr-foreground\n

        The goal is to have your Solr configuration files exist at /solr-conf/conf in the image you are building.

        "},{"location":"applications/drupal/services/solr/#multiple-cores","title":"Multiple cores","text":"

        To implement multiple cores, you will also need to ship your own Solr schema as above. The only change needed is to the CMD of the Dockerfile - repeat the pattern of precreate-core corename /solr-conf/ ; for each core you require.

        solr.dockerfile
        FROM uselagoon/solr:8-drupal\n\nCMD solr-recreate drupal /solr-conf && solr-recreate more-drupal /solr-conf && solr-foreground\n
        "},{"location":"applications/drupal/services/varnish/","title":"Varnish","text":"

        We suggest using Drupal with a Varnish reverse proxy. Lagoon provides a varnish-drupal Docker image that has Varnish already configured with a Drupal Varnish config.

        This Varnish config does the following:

        • It understands Drupal session cookies and automatically disables the Varnish caching for any authenticated request.
        • It automatically caches any assets (images, css, js, etc.) for one month, and also sends this header to the browser, so browser cache the assets as well. This happens for authenticated and non-authenticated requests.
        • It has support for BAN and URIBAN which is used by the Drupal 8 purge module.
        • It removes utm_ and gclid from the URL parameter to prevent Google Analytics links from creating multiple cache objects.
        • Many other good things - just check out the drupal.vcl.
        "},{"location":"applications/drupal/services/varnish/#usage-with-drupal-8","title":"Usage with Drupal 8","text":"

        TL;DR: Check out the drupal8-advanced example in our examples repo, it ships with the needed modules and needed Drupal configuration.

        Note: many of these examples are on the same drupal-example-simple repo, but different branches/hashes. Be sure to get the exact branch from the examples list!

        "},{"location":"applications/drupal/services/varnish/#install-purge-and-varnish-purge-modules","title":"Install Purge and Varnish Purge modules","text":"

        In order to fully use Varnish with Drupal 8 cache tags, you need to install the Purge and Varnish Purge modules. They ship with many submodules. We suggest installing at least the following:

        • purge
        • purge_drush
        • purge_tokens
        • purge_ui
        • purge_processor_cron
        • purge_processor_lateruntime
        • purge_queuer_coretags
        • varnish_purger
        • varnish_purge_tags

        Grab them all at once:

        Install Purge and Varnish Purge
        composer require drupal/purge drupal/varnish_purge\n\ndrush en purge purge_drush purge_tokens purge_ui purge_processor_cron purge_processor_lateruntime purge_queuer_coretags varnish_purger varnish_purge_tags\n
        "},{"location":"applications/drupal/services/varnish/#configure-varnish-purge","title":"Configure Varnish Purge","text":"
        1. Visit Configuration > Development > Performance > Purge.
        2. Add a purger via Add purger.
        3. Select Varnish Bundled Purger (not the Varnish Purger, see the #Behind the Scenes section, for more information.).
        4. Click the dropdown beside the just added purger and click Configure.
        5. Give it a nice name, Lagoon Varnish sounds good.
        6. Configure it with:

          Configure Varnish Purge
           TYPE: Tag\n\n REQUEST:\n Hostname: varnish\n (or whatever your Varnish is called in docker-compose.yml)\n Port: 8080\n Path: /\n Request Method: BAN\n Scheme: http\n\n HEADERS:\n Header: Cache-Tags\n Value: [invalidations:separated_pipe]\n
        7. Save configuration.

        That's it! If you'd like to test this locally, make sure you read the next section.

        "},{"location":"applications/drupal/services/varnish/#configure-drupal-for-varnish","title":"Configure Drupal for Varnish","text":"

        There are a few other configurations that can be done:

        1. Uninstall the Internal Page Cache Drupal module with drush pmu page_cache. It can cause some weird double caching situations where only the Varnish cache is cleared, but not the internal cache, and changes appear very slowly to the users. Also, it uses a lot of cache storage on big sites.
        2. Change $config['system.performance']['cache']['page']['max_age'] in production.settings.php to 2628000. This tells Varnish to cache sites for up 1 month, which sounds like a lot, but the Drupal 8 cache tag system is so awesome that it will basically make sure that the Varnish cache is purged whenever something changes.
        "},{"location":"applications/drupal/services/varnish/#test-varnish-locally","title":"Test Varnish Locally","text":"

        Drupal setups on Lagoon locally have Varnish and the Drupal caches disabled as it can be rather hard to develop with all them set. This is done via the following:

        • The VARNISH_BYPASS=true environment variable in docker-compose.yml which tells Varnish to basically disable itself.
        • Drupal is configured to not send any cache headers (via setting the Drupal config $config['system.performance']['cache']['page']['max_age'] = 0 in development.settings.php).

        To test Varnish locally, change the following in docker-compose.yml:

        • Set VARNISH_BYPASS to false in the Varnish service section.
        • Set LAGOON_ENVIRONMENT_TYPE to production in the x-environment section.
        • Run docker compose up -d , which restarts all services with the new environment variables.

        Now you should be able to test Varnish!

        Here is a short example assuming there is a node with the ID 1 and has the URL drupal-example.docker.amazee.io/node/1

        1. Run curl -I drupal-example.docker.amazee.io/node/1 and look for these headers:
          • X-LAGOON should include varnish which tells you that the request actually went through Varnish.
          • Age: will be still 0 as Varnish has probably never seen this site before, and the first request will warm the varnish cache.
          • X-Varnish-Cache will be MISS , also telling you that Varnish didn't find a previously cached version of this request.
        2. Now run curl -I drupal-example.docker.amazee.io/node/1 again, and the headers should be:
          • Age: will show you how many seconds ago the request has been cached. In our example it will probably something between 1-30, depending on how fast you are executing the command.
          • X-Varnish-Cache will be HIT, telling you that Varnish successfully found a cached version of the request and returned that one to you.
        3. Change some content at node/1 in Drupal.
        4. Run curl -I drupal-example.docker.amazee.io/node/1 , and the headers should the same as very first request:
          • Age:0
          • X-Varnish-Cache: MISS
        "},{"location":"applications/drupal/services/varnish/#varnish-on-drupal-behind-the-scenes","title":"Varnish on Drupal behind the scenes","text":"

        If you come from other Drupal hosts or have done a Drupal 8 & Varnish tutorial before, you might have realized that there are a couple of changes in the Lagoon Drupal Varnish tutorial. Let's address them:

        "},{"location":"applications/drupal/services/varnish/#usage-of-varnish-bundled-purger-instead-of-varnish-purger","title":"Usage of Varnish Bundled Purger instead of Varnish Purger","text":"

        The Varnish Purger purger sends a BAN request for each cache-tag that should be invalidated. Drupal has a lot of cache-tags, and this could lead to quite a large amount of requests sent to Varnish. Varnish Bundled Purger instead sends just one BAN request for multiple invalidations, separated nicely by pipe (|), which fits perfectly with the Varnish regular expression system of bans. This causes less requests and a smaller ban list table inside Varnish.

        "},{"location":"applications/drupal/services/varnish/#usage-of-purge-late-runtime-processor","title":"Usage of Purge Late runtime processor","text":"

        Contradictory to the Varnish module in Drupal 7, the Drupal 8 Purge module has a slightly different approach to purging caches: It adds them to a queue which is then processed by different processors. Purge suggests using the Cron processor , which means that the Varnish cache is only purged during a cron run. This can lead to old data being cached by Varnish, as your cron is probably not configured to run every minute or so, and can result in confused editors and clients.

        Instead, we suggest using the Purge Late runtime processor, which processes the queue at the end of each Drupal request. This has the advantage that if a cache-tag is added to the purge queue (because an editor edited a Drupal node, for example) the cache-tags for this node are directly purged. Together with the Varnish Bundled Purger, this means just a single additional request to Varnish at the very end of a Drupal request, which causes no noticeable processing time on the request.

        "},{"location":"applications/drupal/services/varnish/#full-support-for-varnish-ban-lurker","title":"Full support for Varnish Ban Lurker","text":"

        Our Varnish configurations have full support for Ban Lurker. Ban Lurker helps you to maintain a clean cache and keep Varnish running smoothly. It is basically a small tool that runs through the Varnish ban list and compares them to the cached requests in the Varnish cache. Varnish bans are used to mark an object in the cache for purging. If Ban Lurker finds an item that should be \"banned,\" it removes them from the cache and also removes the ban itself. Now any seldom-accessed objects with very long TTLs which would normally never be banned and just keep taking up cache space are removed and can be refreshed. This keeps the list of bans small and with that, less processing time for Varnish on each request. Check out the official Varnish post on Ban Lurker and some other helpful reading for more information.

        "},{"location":"applications/drupal/services/varnish/#troubleshooting","title":"Troubleshooting","text":"

        Varnish doesn't cache? Or something else not working? Here a couple of ways to debug:

        • Run drush p-debug-en to enable debug logging of the purge module. This should show you debugging in the Drupal log under admin/reports/dblog.
        • Make sure that Drupal sends proper cache headers. To best test this, use the URL that Lagoon generates for bypassing the Varnish cache, (locally in our Drupal example this is http://nginx-drupal-example.docker.amazee.io). Check for the Cache-Control: max-age=900, public header, where the 900 is what you configured in $config['system.performance']['cache']['page']['max_age'].
        • Make sure that the environment variable VARNISH_BYPASS is not set to true (see docker-compose.yml and run docker compose up -d varnish to make sure the environment variable is configured correctly).
        • If all fails, and before you flip your table (\u256f\u00b0\u25a1\u00b0\uff09\u256f\ufe35 \u253b\u2501\u253b, talk to the Lagoon team, we're happy to help.
        "},{"location":"community/discord/","title":"Lagoon Community on Discord","text":"

        Our official community meeting space is the Lagoon Discord.

        We\u2019re starting this community as a place for all Lagoon users to collaborate, solve problems, share ideas, and contribute back to the Lagoon project. We\u2019re working to consolidate our community as it\u2019s currently spread out over Slack and various other places. We also wanted to invite all of our users and customers to join so that everyone can benefit from the community, no matter how they\u2019re using Lagoon.

        Please remember that this is not to replace your current support channels - those will remain the same. This is a place to connect with other users as well as the Lagoon maintainers.

        We ask that all community members review our Participation and Moderation Guidelines, as well as the Code of Conduct.

        "},{"location":"community/discord/#community-hours","title":"Community Hours","text":"

        Our Community hours are currently on hold as we survey the community to better determine the community's needs. Please fill our the survey here.

        If you need a hand with Lagoon, please reach out on Discord or shoot us an email at uselagoon@amazee.io.

        "},{"location":"community/moderation/","title":"Lagoon Moderation Guidelines","text":"

        These guidelines have been adapted from Drupal Diversity & Inclusion\u2019s Moderation Guidelines.

        In Lagoon spaces, strive to promote understanding, empathy, and increase personal awareness of all people. This includes people from across the Drupal Community and the greater Technical Community, even those you may personally disagree with.

        If kicked from the Discord, the kicked user can send a private message (PM) to the kicker or another Moderator, if desired, for re-admittance. If a disruptive person is engaging in what appears to be intentionally inflammatory, bullying, or harassing behavior provoking hostile responses (or acting in a hostile manner), kicking is faster and easier than trying to placate a disruptive person whose behavior is causing distress to other channel members.

        The kick is not a ban. There are times when disruptive or triggering comments and statements are genuine and break the lines of communication between two parties. By speaking with a Moderator, the (potentially) disruptive person can be coached on using more sensitive, inclusive, and diverse-aware language, and on engaging in a more constructive manner.

        "},{"location":"community/moderation/#tiered-responses","title":"Tiered Responses","text":"
        1. Tier One Response

          User is welcomed in the channel, asked to read some scroll back, and given a link to participation guidelines.

        2. Tier Two Response

          User is gently reminded in channel to keep posts on topic, and/or of participation guidelines.

        3. Tier Three Response

          User is PM\u2019d by available Moderator to explain the problem(s) with their posts and given suggestions of what to do differently.

        4. Tier Four Response

          If behavior continues, User is kicked for no less than 24 hours from the Discord.

        "},{"location":"community/moderation/#non-tiered-response-banning","title":"Non-Tiered Response Banning","text":"

        Intentionally disruptive individuals get kicked, not tiered. Repeated offenses will result in a ban.

        "},{"location":"community/participation/","title":"Lagoon Participation Guidelines","text":"

        We ask that all members of our community, in any spaces, virtual or physical, adhere to our Code of Conduct.

        These guidelines have been adapted from Drupal Diversity & Inclusion\u2019s Participation Guidelines.

        1. Listen actively, read carefully, and be understanding.
          • If joining a conversation, read the backlog. Give other Participants the opportunity to communicate effectively.
          • Assume good intent behind other Participants\u2019 statements. The open-source software community is very diverse, with Participants from all over the globe. Be aware of cultural and linguistic quirks.
          • There are also many Participants who are new to this space. Assume that they have good intent but have not yet mastered the language or ideas. We want to help them!
        2. Speak from your own experience, instead of generalizing. Recognize the worth of others\u2019 experience. Try not to speak for others.
          • Use \u201cI\u201d instead of \u201cthey,\u201d \u201cwe,\u201d and \u201cyou\u201d.
          • All Participants should recognize that other Participants have their own unique experiences.
          • Don\u2019t invalidate another Participant\u2019s story with your own spin on their experience. Instead, share your own story and experience.
        3. Challenge ideas, feelings, concerns, or one another by asking questions. Refrain from personal attacks. Focus on ideas first.
          • Avoid verbal challenges, backhanded insults, gender/race/region stereotyping, etc.
        4. Take part to the fullest of your ability and availability.
          • Community growth depends on the inclusion of individual voices. The channel wants you to speak up and speak out. Everyone has a different amount of time to contribute. We value participation here if you can give 5 minutes or 5 hours.
          • We do welcome those who quietly come to lurk and learn, or \u201clurk,\u201d but please introduce yourself and say hello!
        5. Accept that it is not always the goal to agree.
          • There are often many different \u201cright\u201d answers to technical issues, even though they may not work for your setup.
        6. Be conscious of language differences and unintended connotations.
          • \u201cText is hard\u201d - be aware that it is difficult to communicate effectively via text.
        7. Acknowledge individuals\u2019 identities.
          • Use stated names and pronouns. Do not challenge a person\u2019s race, sexuality, disability, etc.
          • f you are unsure how to address someone, ask them discreetly and respectfully. For example, if you are unsure what pronouns to use, send a private message and ask. Using the correct pronouns will help others.
        8. Some off-topic conversation is okay.
          • Some cross posting of announcements is okay. The following is not permitted:
            • Thread hijacking
            • Spamming
            • Commercial advertising
            • Overt self-promotion
            • Excessive going off-topic, especially during official meeting times or focused conversations
          • Consider announcing more appropriate places or times for in-depth off-topic conversations.
          • If you are not sure what\u2019s appropriate, please contact an admin.
        9. Sharing content from inside Lagoon spaces must only be done with explicit consent. Any sharing must also be carefully considered, and without harassment or intent to harm any Participants.
          • This forum should be considered public. Assume that anyone can and may read anything posted here.
          • When sharing any Lagoon content, permission from all Participants must be obtained first. This applies whether content is quoted, summarized, or screenshotted. This includes sharing in any public medium: on Twitter, in a blog post, in an article, on a podcast, etc. These spaces are where the discussion and work in progress is taking place. Removing snippets of a conversation takes away context. This can distort and discourage discussion, especially when this is done without the goal of driving the Lagoon project forward.
          • As stated above, if you take screenshots and post them to social media or other forums, you must get permission from the person that posted it. When getting permission, include the option of removing identifying information. Permission is still needed even if identifying information is removed. This includes any content from Discord, Github, or any other Lagoon medium.
          • If you want to share something, just ask! \u201cHey, is it ok to share this on Twitter? I\u2019m happy to credit you!\u201d
          • If it is necessary for a participant to take a screenshot to report harassing behavior to Lagoon moderators, this may be done without obtaining permission. It is not, however, acceptable to take screenshots to publicly or privately shame an individual. Again, this applies only to reporting harassing behavior.
        10. Address complaints between one another in the space when safe and appropriate.
          • When safe, try to clarify and engage in the space where the conflict happened. For example, in the Discord channel.
          • Ping admins or Community Manager (Alanna) when conflict is escalating.
          • Ask for help.
          • If the topic of conflict is off-topic for Lagoon, move the conversation to a more appropriate channel.

        Additional considerations for in-person Lagoon spaces

        1. Follow the event\u2019s Code of Conduct, if there is one. If not, our Code of Conduct applies.
        2. Do not touch people, their mobility devices, or other assistive equipment without their consent. If someone asks you to stop a certain behavior, stop immediately.
        3. Report any issues to the event\u2019s staff. If an issue involves Lagoon team members, report to uselagoon@amazee.io.

        The Lagoon team reserves the right to terminate anyone\u2019s access to the Lagoon spaces.

        "},{"location":"concepts-advanced/","title":"Advanced Lagoon Concepts","text":"

        This section covers some of the more advanced concepts in Lagoon. If you're new to Lagoon, start with Basic Lagoon Concepts.

        If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our Discord.

        "},{"location":"concepts-advanced/backups/","title":"Backups","text":"

        Lagoon provides multiple methods for backing up environment data. Automated backups are done without user interaction and manual backups are done on-demand, as requested by users.

        "},{"location":"concepts-advanced/backups/#automated-backups","title":"Automated Backups","text":"

        By default, Lagoon will run nightly backups for each database and persistent volume. Daily backups are kept for seven days, and weekly backups are kept for six weeks.

        Lagoon keeps an up to date list of available backups. To view them, check the Backups tab of an environment in the Lagoon UI or use the Lagoon CLI (lagoon list backups --help).

        Lagoon administrators

        Automated backups are reliant on the installation of K8up. Default settings can be configured per Lagoon remote.

        "},{"location":"concepts-advanced/backups/#downloading","title":"Downloading","text":"

        In order to download the contents of a backup, it must first be retrieved. Click the Retrieve button in the UI or run lagoon retrieve --help. After some time (how long depends on how large the backup is), it will be available to download. Click the Download button in the UI or run lagoon get backup --help.

        "},{"location":"concepts-advanced/backups/#configuring","title":"Configuring","text":"

        Automated backups can be disabled by setting the LAGOON_BACKUPS_DISABLED=true environment variable.

        The storage bucket name can be changed by setting the LAGOON_BAAS_BUCKET_NAME environment variable. Do not change this unless asked by your Lagoon administrator.

        "},{"location":"concepts-advanced/backups/#backup-schedules","title":"Backup Schedules","text":"

        Schedules use a cron-compatible syntax with the default being to run nightly backups (M H(22-2) * * *). The M is special to Lagoon to allow for load balancing, and must be set, any other value will cause build failures.

        Timezones:

        Backup schedules use the cluster's local timezone.

        Each environment type can be configured to have it's own schedule:

        Production

        • The schedule can be set in code by changing the backup-schedule in the .lagoon.yml file.
        • The schedule can be set using environment variables: Name Value LAGOON_FEATURE_FLAG_CUSTOM_BACKUP_CONFIG enabled LAGOON_BACKUP_PROD_SCHEDULE Cron schedule

        Development

        The schedule can be set using environment variables:

        Name Value LAGOON_FEATURE_FLAG_CUSTOM_BACKUP_CONFIG enabled LAGOON_BACKUP_DEV_SCHEDULE Cron schedule

        Pull Request

        The schedule can be set using environment variables:

        Name Value LAGOON_FEATURE_FLAG_CUSTOM_BACKUP_CONFIG enabled LAGOON_BACKUP_PR_SCHEDULE Cron schedule"},{"location":"concepts-advanced/backups/#backup-retention","title":"Backup Retention","text":"

        Backups will be held according to the following retention policy by default:

        • Daily: 7
        • Weekly: 6

        Production environments can set a different retention policy by changing backup-retention in the .lagoon.yml file.

        Warning

        Retention policies are evaluated by Restic, a 3rd party open source software. Make sure you are familiar with the policy options as they can be unintuitive.

        Other environment types cannot set a different retention policy.

        "},{"location":"concepts-advanced/backups/#storage-location","title":"Storage Location","text":"

        Lagoon supports custom backup locations and credentials for any project when all four of the following variables are set as BUILD type variables. The environment variables need to be set at the project level (not per environment), and requires a Lagoon deployment after setting them (for every environment).

        Danger

        Using custom settings will override cluster default. Any misconfiguration or invalid/expired credentials may cause automated backups to fail or be inaccessible.

        Environment variable name Purpose LAGOON_BAAS_CUSTOM_BACKUP_ENDPOINT Specify the S3 compatible endpoint where any Lagoon initiated backups should be stored. An example for S3 Sydney would be: https://s3.ap-southeast-2.amazonaws.com. LAGOON_BAAS_CUSTOM_BACKUP_BUCKET Specify the bucket name where any Lagoon initiated backups should be stored.An example custom setting would be: example-restore-bucket. LAGOON_BAAS_CUSTOM_BACKUP_ACCESS_KEY Specify the access key Lagoon should use to access the custom backup bucket. An example custom setting would be: AKIAIOSFODNN7EXAMPLE. LAGOON_BAAS_CUSTOM_BACKUP_SECRET_KEY Specify the secret key Lagoon should use to access the custom backup bucket. An example custom setting would be: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

        No public access is needed on the S3 bucket and can be made entirely private.

        Lagoon will automatically prune the files in these S3 buckets, so no object retention policy is needed at the bucket level.

        "},{"location":"concepts-advanced/backups/#retrieval-location","title":"Retrieval Location","text":"

        Lagoon supports custom retrieval locations and credentials for any project when all four of the following variables are set as BUILD type environment variables. The environment variables need to be set at the project level (not per environment), and requires a Lagoon deployment after setting them (for every environment).

        Danger

        Using custom settings will override cluster default. Any misconfiguration or invalid/expired credentials may cause retrieval of backups to fail or be inaccessible.

        Environment variable name Purpose LAGOON_BAAS_CUSTOM_RESTORE_ENDPOINT Specify the S3 compatible endpoint where any Lagoon initiated restores should be stored. An example for S3 Sydney would be: https://s3.ap-southeast-2.amazonaws.com. LAGOON_BAAS_CUSTOM_RESTORE_BUCKET Specify the bucket name where any Lagoon initiated restores should be stored.An example custom setting would be: example-restore-bucket. LAGOON_BAAS_CUSTOM_RESTORE_ACCESS_KEY Specify the access key Lagoon should use to access the custom restore bucket. An example custom setting would be: AKIAIOSFODNN7EXAMPLE. LAGOON_BAAS_CUSTOM_RESTORE_SECRET_KEY Specify the secret key Lagoon should use to access the custom restore bucket. An example custom setting would be: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

        The S3 bucket must have public access enabled, as Lagoon will create presigned URLs for the objects inside the bucket as needed.

        An example AWS IAM policy that you can create to allow access to just the S3 bucket example-restore-bucket is:

        aws_iam_restore_policy.json
        {\n\"Version\": \"2012-10-17\",\n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"s3:GetBucketLocation\",\n\"s3:ListBucket\"\n],\n\"Resource\": [\n\"arn:aws:s3:::example-restore-bucket\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:GetObjectVersion\",\n\"s3:GetBucketLocation\",\n\"s3:PutObjectAcl\"\n],\n\"Resource\": [\n\"arn:aws:s3:::example-restore-bucket/*\"\n]\n}\n]\n}\n

        For increased security and reduced storage costs you can opt into removing restored backups after a set lifetime (e.g. 7 days). Lagoon caters for this scenario gracefully and will re-create any restored snapshots as needed.

        "},{"location":"concepts-advanced/backups/#manual-backups","title":"Manual Backups","text":"

        Users can manually backup databases and files by running a task, syncing data from one environment to another, or by running custom commands in containers.

        "},{"location":"concepts-advanced/backups/#tasks","title":"Tasks","text":"

        For Drupal projects, there are tasks available that will run drush backups. For non-Drupal projects, a custom task can be created to take a backup.

        "},{"location":"concepts-advanced/backups/#sync","title":"Sync","text":"

        For Drupal projects, the use of drush to sync the database and files is recommneded. For non-Drupal projects, lagoon-sync can be added to the project and used to sync the database and files.

        "},{"location":"concepts-advanced/backups/#manual","title":"Manual","text":"

        The Lagoon cli base images contain all the tools needed to backup databases and transfer files. A user familiar with mysqldump and rsync can make manual backups.

        "},{"location":"concepts-advanced/backups/#restoring-backups","title":"Restoring Backups","text":"

        Lagoon cannot automatically restore backups. After downloading the backups, users can restore them manually by copying them to the desired environment.

        "},{"location":"concepts-advanced/base-images/","title":"Base Images","text":""},{"location":"concepts-advanced/base-images/#what-is-a-base-image","title":"What is a base image?","text":"

        A base image is a Docker image that can be and is used by a project deployed on Lagoon. A base image provides a way to ensure that nothing is brought into the codebase/project from upstream that has not been audited. It also allows us to ensure that anything we might need on the deployed environment is available - from lower-level libraries to application-level themes and modules.

        Base images save time and resources when you know what system is being deployed to - if shared packages are included in the base image, they don\u2019t have to be deployed to hundreds of sites individually.

        "},{"location":"concepts-advanced/base-images/#derived-images","title":"Derived images","text":"

        A derived image is one that extends a base image. For example, you might need to make several blog sites. You take our Drupal image, customize it to include all of the modules and themes you need for your blog sites, and deploy them all with that blog image. Templates are derived from base images.

        All derived images should pull in the composer.json file (via repositories like Packagist, Satis, or GitHub) so that they are using the most recent versions of the base packages.

        Further, the derived image includes a call to the script /build/pre_composer, which can be used by the base image to run scripts, updates, etc., downstream in the derived images. For instance, it should run by default when any package is updated or installed at the derived image, and the pre_composer script will then update the base image package.

        "},{"location":"concepts-advanced/base-images/#anatomy-of-a-base-image","title":"Anatomy of a base image","text":"

        Info

        This document will talk about Drupal and Laravel base images as examples, as it was originally written for a client who uses those technologies in their Lagoon projects. It will be expanded to cover the contents of other base images, but none of the processes differ, no matter what the content of your base image.

        Base images are managed with Composer and hosted in BitBucket, GitHub, or GitLab (whatever your team is using). Each base image has its own repository.

        "},{"location":"concepts-advanced/base-images/#metapackages","title":"Metapackages","text":"

        The metapackage is a Composer package that wraps several other components. These include, for example, the core files for Laravel or Drupal, along with any needed modules or themes. This way, you do not need to include Laravel or Drupal, etc., as a dependency in your project.

        Here\u2019s an example from the composer.json in a Laravel base image:

        composer.json
        \"require\": {\n    \"amazeelabs/algm_laravel_baseimage\": \"*\"\n},\n

        We only require this metapackage, which points to a GitHub repository.

        "},{"location":"concepts-advanced/base-images/#docker-composeyml","title":"docker-compose.yml","text":"

        Other pieces of your project are defined in docker-compose.yml. For example, if you have a Drupal project, you need the Drupal image, but you also need MariaDB, Solr, Redis, and Varnish. We have versions of these services optimized for Drupal, all of which are included in docker-compose.yml.

        "},{"location":"concepts-advanced/base-images/#drupal","title":"Drupal","text":"

        The Drupal base image contains the following contributed tools and modules, in addition to Drupal core:

        • Drupal Console
        • Drush
        • Configuration Installer
        • Redis
        • Poll
        • Search API
        • Search API Solr
        • Varnish Purge
        • Purge
        • Admin Toolbar
        • CDN
        • Password Policy
        • Pathauto
        • Ultimate Cron
        "},{"location":"concepts-advanced/base-images/#laravel","title":"Laravel","text":""},{"location":"concepts-advanced/base-images/#configuration","title":"Configuration","text":"

        The base images have provided the default values for the environment variables used by Laravel.

        These are values for:

        • DB_CONNECTION
        • DB_HOST
        • DB_PORT
        • DB_DATABASE
        • DB_USERNAME
        • DB_PASSWORD
        • REDIS_HOST
        • REDIS_PASSWORD
        • REDIS_PORT

        Ensure that your config files (typically located in /config) make use of these by default.

        "},{"location":"concepts-advanced/base-images/#queues","title":"Queues","text":"

        If your project makes use of queues, you can make use of the artisan-worker service. It is a worker container, used for executing artisan queue:work. This is disabled by default - look at the comments in docker-compose.yml.

        "},{"location":"concepts-advanced/base-images/#understanding-the-process-of-building-a-base-image","title":"Understanding the process of building a base image","text":"

        There are several parts to the process of building a base image. All of the major steps are represented in the Makefile. The Jenkinsfile contains a more stripped-down view. Taking a look at both files will give you a good understanding of what happens during this process. Most steps can be tested locally (this is important when building new versions of the base image). After you\u2019ve created and tested everything locally and pushed it up, the actual base image is built by Jenkins and pushed to Harbor.

        "},{"location":"concepts-advanced/base-images/#makefile-and-build-assumptions","title":"Makefile and build assumptions","text":"

        If you're planning on running locally, there are some minimum environment variables that need to be present to build at all.

        "},{"location":"concepts-advanced/base-images/#base-image-build-variables","title":"Base image build variables","text":"

        Variables injected into the base image build process and where to find them.

        • BUILD_NUMBER - This is injected by Jenkins automatically.
        • GIT_BRANCH - This is provided by the Jenkins build process itself. Depends on the branch being built at the time (develop, main, etc.).
        • DOCKER_REPO/DOCKER_HUB - This is defined inside the Jenkinsfile itself. It points to the Docker project and hub into which the resulting images will be pushed.
        • DOCKER_USERNAME/DOCKER_PASSWORD - These are used to actually log into the Docker repository early in the build. These variables are stored inside of the Jenkins credentials. These are used in the Jenkinsfile itself and are not part of the Makefile. This means that if you\u2019re building base images outside of Jenkins (i.e. locally, to test, etc.) you have to run a docker login manually before running any of the make steps.

        In practice, this means that if you're running any of the make targets on your local machine, you'll want to ensure that these are available in the environment - even if this is just setting them when running make from the command line, as an example:

        Setting make targets locally
        GIT_BRANCH=example_branch_name DOCKER_HUB=the_docker_hub_the_images_are_pushed_to DOCKER_REPO=your_docker_repo_here BUILD_NUMBER=<some_integer> make images_remove\n
        "},{"location":"concepts-advanced/base-images/#makefile-targets","title":"Makefile targets","text":"

        The most important targets are the following:

        • images_build : Given the environment variables, this will build and tag the images for publication.
        • images_publish : Pushes built images to a Docker repository.
        • images_start : Will start the images for testing, etc.
        • images_test: Runs basic tests against images.
        • images_remove: Removes previously built images, given the build environment variables.
        "},{"location":"concepts-advanced/base-images/#example-workflow-for-building-a-new-release-of-a-base-image","title":"Example workflow for building a new release of a base image","text":"

        There are several steps to the build process. Most of these are shared among the various base images. These mostly correspond to the Makefile target described above.

        1. Docker Login - The Docker username, password, and URL for Harbor are passed to the Docker client.
        2. Docker Build - The make images_build step is run now, which will:
          1. Ensure that all environment variables are prepared for the build.
          2. Run a docker compose build. This will produce several new Docker images from the current Git branch.
        3. Images Test - This will run the make images_test target, which will differ depending on the images being tested. In most cases this is a very straightforward test to ensure that the images can be started and interacted with in some way (installing Drupal, listing files, etc.)
        4. Docker Push - This step runs the logic (contained in the make target images_publish) that will tag the images resulting from the Docker Build in Step 2 and push them to Harbor. This is described in more detail elsewhere in this guide.
        5. Docker Clean Images - Runs the make target images_remove, which simply deletes the newly built images from the Docker host now that they are in Harbor.
        "},{"location":"concepts-advanced/base-images/#releasing-a-new-version-of-a-base-image","title":"Releasing a new version of a base image","text":"

        There are many reasons to release a new version of a base image. On Drupal or Laravel, Node.js, etc. images, it may be in order to upgrade or install a module/package for features or security. It may be about the underlying software that comes bundled in the container, such as updating the version of PHP or Node.js. It may be about updating the actual underlying images on which the base images are built.

        The images that your project's base images are built on are the managed images maintained by the Lagoon team. We release updates to these underlying images on a monthly (or more fequent) basus. When these are updated, you need to build new versions of your own base images in order to incorporate the changes and upgrades bundled in the upstream images.

        In this section we will demonstrate the process of updating and tagging a new release of the Drupal 8 base image. We will add a new module (ClamAV) to the base. We\u2019re demonstrating on Drupal because it has the most complex setup of the base images. The steps that are common to every base image are noted below.

        "},{"location":"concepts-advanced/base-images/#step-1-pull-down-the-base-image-locally","title":"Step 1 - Pull down the base image locally","text":"

        This is just pulling down the Git repository locally. In the case of the Drupal 8 base image. In this example, we're using Bitbucket, so we will run:

        Clone Git repo.
        git clone ssh://git@bitbucket.biscrum.com:7999/webpro/drupal8_base_image.git\n

        "},{"location":"concepts-advanced/base-images/#step-2-make-the-changes-to-the-repository","title":"Step 2 - Make the changes to the repository","text":"

        Info

        What is demonstrated here is specific to the Drupal 8 base image. However, any changes (adding files, changing base Docker images, etc.) will be done in this step for all of the base images.

        In our example, we are adding the ClamAV module to the Drupal 8 base image. This involves a few steps. The first is requiring the package so that it gets added to our composer.json file. This is done by running a composer require.

        Here we run:

        Install package with Composer require.
        composer require drupal/clamav\n

        When the Composer require process completes, the package should then appear in the composer.json file.

        Here we open the composer.json file and take a look at the list of required packages, and check that the ClamAV package is listed, and see that it is there:

        "},{"location":"concepts-advanced/base-images/#step-22-ensure-that-the-required-drupal-module-is-enabled-in-template-based-derived-images","title":"Step 2.2 - Ensure that the required Drupal module is enabled in template-based derived images","text":"

        For any modules now added to the base image, we need to ensure that they\u2019re enabled on the template-based derived images. This is done by adding the module to the Lagoon Bundle module located at ./web/modules/lagoon/lagoon_bundle. Specifically, it requires you to add it as a dependency to the dependencies section of the lagoon_bundle.info.yml file. The Lagoon Bundle module is a utility module that exists only to help enforce dependencies across derived images.

        Here we open web/modules/contrib/lagoon/lagoon_bundle/lagoon_bundle.info.yml and add clamav:clamav as a dependency:

        Adding a dependency to this will ensure that whenever the Lagoon Bundle module is enabled on the derived image, its dependencies (in this case, the just-added ClamAV module) will also be enabled. This is enforced by a post-rollout script which enables lagoon_bundle on the derived images when they are rolled out.

        "},{"location":"concepts-advanced/base-images/#step-23-test","title":"Step 2.3 - Test","text":"

        This will depend on what you\u2019re testing. In the case of adding the ClamAV module, we want to ensure that in the base image, the module is downloaded, and that the Lagoon Bundle module enables ClamAV when it is enabled.

        Here we check that the module is downloaded to /app/web/modules/contrib:

        And then we check that when we enable the lagoon_bundle module, it enables clamav by running:

        Enable module with Drush.
        drush pm-enable lagoon_bundle -y\n

        Warning

        You\u2019ll see that there is a JWT error in the container above. You can safely ignore this in the demonstration above - but, for background, you will see this error when there is no Lagoon environment for the site you\u2019re working on.

        With our testing done, we can now tag and build the images.

        "},{"location":"concepts-advanced/base-images/#step-3-tagging-images","title":"Step 3 - Tagging images","text":"

        Images are versioned based on their Git tags - these should follow standard semantic versioning (semver) practices. All tags should have the structure vX.Y.Z where X, Y, and Z are integers (to be precise the X.Y.Z are themselves the semantic version - the vX.Y.Z is a tag). This is an assumption that is used to determine the image tags, so it must be adhered to.

        In this example we will be tagging a new version of the Drupal 8 base image indicating that we have added ClamAV.

        "},{"location":"concepts-advanced/base-images/#here-we-demonstrate-how-to-tag-an-image","title":"Here we demonstrate how to tag an image","text":"

        We check that we have committed (but not pushed) our changes, just as you would do for any regular commit and push, using git log.

        1. Commit your changes if you haven\u2019t yet.
        2. We then check to see what tag we are on using git tag.
        3. Then, tag them using git tag -a v0.0.9 -m \u201cAdds clamAV to base.\u201d
          1. git -a, --annotate: Make an unsigned, annotated tag object
        4. Next, we push our tags with git push --tags.
        5. And finally, push all of our changes with git push.

        Danger

        The tags must be pushed explicitly in their own step!

        "},{"location":"concepts-advanced/base-images/#how-git-tags-map-to-image-tags","title":"How Git tags map to image tags","text":"

        Danger

        Depending on the build workflow, you will almost certainly push the changes via the develop branch before merging it into the main branch.

        An important point to remember here is that the Jenkins base image build process will tag images based on the most recent commit\u2019s tag.

        Images are tagged using the following rules, and images will be built for each of these that apply:

        1. When the main branch is built, it is tagged as latest.
        2. When the develop branch is built, it is tagged as development.
        3. If the commit being built is tagged then that branch will be built with that commit\u2019s tag.
          1. This is how we release a new version as we demonstrated above. It can also be used to make ad hoc builds with fairly arbitrary tags - be reasonable with the tag names, it has only been tested with semver tags.
        "},{"location":"concepts-advanced/base-images/#step-4-building-the-new-base-images","title":"Step 4 - Building the new base images","text":"

        Info

        Generally you will have a trigger strategy set up here for automatic builds, but as that will differ based on your needs and setup, this explains how to build manually.

        1. Visit your Lagoon Jenkins instance.
        2. Select the project you are working on (in this case, AIOBI Drupal 8 Base).
        3. Click the branch you would like to build.
        4. Click \u201cBuild Now.\u201d

        This will kick off the build process which, if successful, will push up the new images to Harbor.

        If the build is not successful, you can click into the build itself and read the logs to understand where it failed.

        As shown in the screenshot below from Harbor, the image we\u2019ve just built in Jenkins has been uploaded and tagged in Harbor, where it will now be scanned for any vulnerabilities. Since it was tagged as v0.0.9, an image with that tag is present, and because we built the main branch, the \u201clatest\u201d image has also been built. At this stage, the v0.0.9 and \u201clatest\u201d images are identical.

        "},{"location":"concepts-advanced/base-images/#acknowledgement","title":"Acknowledgement","text":"

        The base image structure draws heavily (and, in fact, is a fork of) Denpal. It is based on the original Drupal Composer Template, but includes everything necessary to run on Lagoon (either the local development environment or on hosted Lagoon).

        "},{"location":"concepts-advanced/environment-idling/","title":"Environment Idling (optional)","text":""},{"location":"concepts-advanced/environment-idling/#what-is-the-environment-idler","title":"What is the Environment Idler?","text":"

        Lagoon can utilize the Aergia controller, (installed in the lagoon-remote) to automatically idle environments if they have been unused for a defined period of time. This is done in order to reduce the load on the Kubernetes clusters and improve the overall performance of production environments and development environments that are actually in use.

        "},{"location":"concepts-advanced/environment-idling/#how-does-an-environment-get-idled","title":"How does an environment get idled?","text":"

        The environment idler has many different configuration capabilities. Here are the defaults of a standard Lagoon installation (these could be quite different in your Lagoon, contact your Lagoon administrator!)

        • Idling is tried every 4 hours.
        • Production environments are never idled.
        • CLI pods are idled if they don't include a cron job and if there is no remote shell connection active.
        • All other services and pods are idled if there was no traffic on the environment in the last 4 hours.
        • If there is an active build happening, there will be no idling.
        "},{"location":"concepts-advanced/environment-idling/#how-does-an-environment-get-un-idled","title":"How does an environment get un-idled?","text":"

        Aergia will automatically un-idle an environment as soon as it is visited, therefore just visiting any URL of the environment will start the environment. Likewise, initiating an SSH session to the environment will also restart the services.

        The un-idling will take a couple of seconds, as the Kubernetes cluster needs to start all containers again. During this time there will be waiting screen shown to the visitor that their environment is currently started.

        "},{"location":"concepts-advanced/environment-idling/#can-i-disable-prevent-the-idler-from-idling-my-environment","title":"Can I disable / prevent the Idler from idling my environment?","text":"

        The field autoIdle can be set at the project level (impacts all environments) or for a single environment (target just one environment), as to whether idling is allowed to take place. A value of 1 indicates the project/environment is eligible for idling. If the project is set to 0, then all environments will never be idled. The default value is 1 (idling is enabled).

        Contact your Lagoon administrator if you are unsure how to set these project/environment fields.

        "},{"location":"concepts-advanced/environment-types/","title":"Environment Types","text":"

        Lagoon currently differentiates between two different environment types: production and development.

        When setting up your project via the Lagoon GraphQL API, you can define a productionEnvironment. On every deployment Lagoon executes, it checks if the current environment name matches what is defined in productionEnvironment. If it does, Lagoon will mark this environment as the production environment. This happens in two locations:

        1. Within the GraphQL API itself.
        2. As an environment variable named LAGOON_ENVIRONMENT_TYPE in every container.

        But that's it. Lagoon itself handles development and production environments in exactly the same way (in the end we want as few differences of the environments as possible - that's the beauty of Lagoon).

        There are a couple of things that will use this information:

        • By default, development environments are idled after 4 hours with no hits (don't worry, they wake up automatically). It is also possible for your Lagoon administrator to disable auto-idling on a per-environment basis, just ask!
        • Our default Drupal settings.php files load additional settings files for development.settings.php and production.settings.php so you can define settings and configurations different per environment type.
        • If you try to delete an environment that is defined as the production environment (either via webhooks or REST), Lagoon will politely refuse to delete the production environment, as it tries to prevent you from making a mistake. In order to delete a production environment, you can either change the productionEnvironment in the API or use the secret forceDeleteProductionEnvironment: true POST payload for the REST API.
        • Sometimes your Lagoon administrator might use the production environment information for some additional things, such as calculating only the hits of the production environments to calculate the price of the hosting.
        "},{"location":"concepts-advanced/environment-variables/","title":"Environment Variables","text":"

        It is common to store API tokens or credentials for applications in environment variables.

        Following best practices, those credentials are different per environment. We allow each environment to use a separate set of environment variables defined in environment variables or environment files.

        As there can be environment variables defined in either the Dockerfile or during runtime (via API environment variables), we have a hierarchy of environment variables: environment variables defined in lower numbers are stronger.

        1. Environment variables (defined via Lagoon API) - environment specific.
        2. Environment variables (defined via Lagoon API) - project-wide.
        3. Environment variables defined in Dockerfile (ENV command).
        4. Environment variables defined in .lagoon.env.$LAGOON_GIT_BRANCH or .lagoon.env.$LAGOON_GIT_SAFE_BRANCH (if the file exists and where $LAGOON_GIT_BRANCH $LAGOON_GIT_SAFE_BRANCH are the name and safe name of the branch this Docker image has been built for), use this for overwriting variables for only specific branches.
        5. Environment variables defined in .lagoon.env (if it exists), use this for overwriting variables for all branches.
        6. Environment variables defined in .env.
        7. Environment variables defined in .env.defaults.

        .lagoon.env.$LAGOON_GIT_BRANCH, .lagoon.env.$LAGOON_GIT_SAFE_BRANCH, .env, and .env.defaults are all sourced by the individual containers themselves as part of running their entrypoint scripts. They are not read by Lagoon, but by the containers ENTRYPOINT scripts, which look for them in the containers working directory. If environment variables don't appear as expected, check if your container has a WORKDIR setting that points to somewhere else.

        "},{"location":"concepts-advanced/environment-variables/#environment-variables-lagoon-api","title":"Environment Variables (Lagoon API)","text":"

        We suggest using the Lagoon API environment variable system for variables that you don't want to keep in your Git repository (like secrets or API keys), as they could be compromised by somebody having them on their local development environment or on the internet, etc.

        The Lagoon API allows you to define project-wide or environment-specific variables. Additionally, they can be defined for a scope-only build-time or runtime. They are all created via the Lagoon GraphQL API. Read more on how to use the GraphQL API in our GraphQL API documentation.

        "},{"location":"concepts-advanced/environment-variables/#runtime-environment-variables-lagoon-api","title":"Runtime Environment Variables (Lagoon API)","text":"

        Runtime environment variables are automatically made available in all containers, but they are only added or updated after an environment has been re-deployed.

        This defines a project wide runtime variable (available in all environments) for the project with ID 463:

        Add runtime variable
        mutation addRuntimeEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:RUNTIME,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"\n}\n) {\nid\n}\n}\n

        This defines a environment ID 546 specific runtime variable (available only in that specific environment):

        Define environment ID
        mutation addRuntimeEnv {\naddEnvVariable(\ninput:{\ntype:ENVIRONMENT,\ntypeId:546,\nscope:RUNTIME,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"\n}\n) {\nid\n}\n}\n
        "},{"location":"concepts-advanced/environment-variables/#build-time-environment-variables-lagoon-api","title":"Build-time Environment Variables (Lagoon API)","text":"

        Build-time environment variables are only available during a build and need to be consumed in Dockerfiles via:

        Using build-time environment variables
        ARG MYVARIABLENAME\n

        Typically the ARG will go after the FROM. Read the docker documentation about ARG and FROM.

        This defines a project-wide build-time variable (available in all environments) for the project with ID 463:

        Define a project-wide build-time variable
        mutation addBuildtimeEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:BUILD,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"}\n) {\nid\n}\n}\n

        This defines an environment ID 546specific build-time variable (available only in that specific environment):

        Define environment ID
        mutation addBuildtimeEnv {\naddEnvVariable(input:{type:ENVIRONMENT, typeId:546, scope:BUILD, name:\"MYVARIABLENAME\", value:\"MyVariableValue\"}) {\nid\n}\n}\n

        Container registry environment variables are only available during a build and are used when attempting to log in to a private registry. They are used to store the password for the user defined in Specials \u00bb container-registries. They can be applied at the project or environment level.

        This defines a project-wide container registry variable (available in all environments) for the project with ID 463:

        Define project-wide container registry variable
        mutation addContainerRegistryEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:CONTAINER_REGISTRY,\nname:\"MY_OWN_REGISTRY_PASSWORD\",\nvalue:\"MySecretPassword\"})\n) {\nid\n}\n}\n

        This defines a environment ID 546 specific container registry variable (available only in that specific environment):

        Define environment ID
        mutation addContainerRegistryEnv {\naddEnvVariable(\ninput:{\ntype:ENVIRONMENT,\ntypeId:546,\nscope:CONTAINER_REGISTRY,\nname:\"MY_OWN_REGISTRY_PASSWORD\",\nvalue:\"MySecretPassword\"}\n) {\nid\n}\n}\n
        "},{"location":"concepts-advanced/environment-variables/#global-environment-variables-lagoon-api","title":"Global Environment Variables (Lagoon API)","text":"

        Global environment variables are available as both a build-time environment variable so that it may be consumed by builds, and also a runtime variable so that it is available within running containers.

        "},{"location":"concepts-advanced/environment-variables/#environment-files-existing-directly-in-the-git-repo","title":"Environment Files (existing directly in the Git Repo)","text":"

        If you have environment variables that can safely be saved within a Git repository, we suggest adding them directly into the Git repository in an environment file. These variables will also be available within local development environments and are therefore more portable.

        The syntax in the environment files is as following:

        myenvironment.env
        MYVARIABLENAME=\"MyVariableValue\"\nMVARIABLENUMBER=4242\nDB_USER=$DB_USERNAME # Redefine DB_USER with the value of DB_USERNAME e.g. if your application expects another variable name for the Lagoon-provided variables.\n
        "},{"location":"concepts-advanced/environment-variables/#lagoonenvbranchname","title":".lagoon.env.$BRANCHNAME","text":"

        If you want to define environment variables different per environment you can create a .lagoon.env.$BRANCHNAME e.g. for the main branch .lagoon.env.main. This helps you keep environment variables apart between environments.

        "},{"location":"concepts-advanced/environment-variables/#env-and-envdefaults","title":".env and .env.defaults","text":"

        .env and .env.defaults will act as the default values for environment variables if none other is defined. For example, as default environment variables for pull request environments (see Workflows).

        "},{"location":"concepts-advanced/environment-variables/#special-environment-variables","title":"Special Environment Variables","text":""},{"location":"concepts-advanced/environment-variables/#php_error_reporting","title":"PHP_ERROR_REPORTING","text":"

        This variable, if set, will define the logging level you would like PHP to use. If not supplied, it will be set dynamically based on whether this is a production or development environment.

        On production environments, this value defaults to E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE.

        On development environments, this value defaults to E_ALL & ~E_DEPRECATED & ~E_STRICT.

        "},{"location":"concepts-advanced/feature-flags/","title":"Feature flags","text":"

        Some Lagoon features can be controlled by setting feature flags. This is designed to assist users and administrators to roll out new platform features in a controlled manner.

        "},{"location":"concepts-advanced/feature-flags/#environment-variables","title":"Environment variables","text":"

        The following environment variables can be set on an environment or project to toggle feature flags.

        Environment Variable Name Active scope Version introduced Version removed Default Value Description LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD global 2.2.0 - disabled Set to enabled to set a non-root pod security context on the pods in this environment or project.This flag will eventually be deprecated, at which point non-root workloads will be enforced. LAGOON_FEATURE_FLAG_ISOLATION_NETWORK_POLICY global 2.2.0 - disabled Set to enabled to add a default namespace isolation network policy to each environment on deployment.This flag will eventually be deprecated, at which point the namespace isolation network policy will be enforced.NOTE: enabling and then disabling this feature will not remove any existing network policy from previous deployments. Those must be removed manually."},{"location":"concepts-advanced/feature-flags/#cluster-level-controls","title":"Cluster-level controls","text":"

        Feature flags may also be controlled at the cluster level. There is support for this in the lagoon-build-deploy chart. For each feature flag there are two flavours of values which can be set: default and force.

        • default controls the default policy for environments deployed to the cluster, but can be overridden at the project or environment level by the environment variables documented above.
        • force also controls the policy for environments deployed to the cluster, but cannot be overridden by the environment variables documented above.
        "},{"location":"concepts-advanced/service-types/","title":"Service Types","text":"

        The below lists all service types that can be defined via lagoon.type within a docker-compose.yml file.

        Warning

        Once a lagoon.type is defined and the environment is deployed, changing it to a different type is not supported and could result in a broken environment.

        "},{"location":"concepts-advanced/service-types/#additional-volumes","title":"Additional Volumes","text":"

        Some service types allow for additional volumes to be added, for more information on the lagoon.volumes.X.path label, please see Additional Volumes

        If you're provisioning a new project, we recommend avoiding the usage of -persistent service types, and use additional volumes as required for any persistent data.

        "},{"location":"concepts-advanced/service-types/#additional-service-ports","title":"Additional Service Ports","text":"

        Most services provide a default port, in cases where you want to use the services already defined in your docker-compose.yml file, you can configure a service to use those ports instead.

        To use this feature, you set the lagoon.service.usecomposeports: true label on the service in your docker-compose.yml file. For more information on how to use this feature, see Additional Service Ports

        "},{"location":"concepts-advanced/service-types/#basic","title":"basic","text":"

        Basic container, good to use for most applications that don't have an existing template. No persistent storage. The port can be changed using a label. If an autogenerated route is not required (e.g. for an internal-facing service, set lagoon.autogeneratedroute: false in the docker-compose.yml)

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes No lagoon.service.port, lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#basic-persistent","title":"basic-persistent","text":"

        Like basic. Will also generate persistent storage, defines mount location via lagoon.persistent.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes Yes lagoon.service.port, lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#basic-single","title":"basic-single","text":"

        Like basic-persistent. This will also generate persistent storage, defines mount location via lagoon.persistent.

        Where this differs from basic-persistent is that the volume is a ReadWriteOnce volume type. The downsides to this service type are that it can't be scaled.

        This service type does not support additional volumes.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes Yes lagoon.service.port, lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#cli","title":"cli","text":"

        Use for any kind of CLI container (like PHP, Node.js, etc). Automatically gets the customer SSH private key that is mounted in /var/run/secrets/lagoon/sshkey/ssh-privatekey.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - No No No lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#cli-persistent","title":"cli-persistent","text":"

        Like cli, expects lagoon.persistent.name to be given the name of a service that has persistent storage, which will be mounted under defined lagoon.persistent label. Does NOT generate its own persistent storage, only used to mount another service's persistent storage.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - No No Yes lagoon.persistent.name, lagoon.persistent, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#elasticsearch","title":"elasticsearch","text":"

        Elasticsearch container, will auto-generate persistent storage under /usr/share/elasticsearch/data.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP on localhost:9200/_cluster/health?local=true 9200 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#mariadb","title":"mariadb","text":"

        A meta-service which will tell Lagoon to automatically decide between mariadb-single and mariadb-dbaas.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - - - - -"},{"location":"concepts-advanced/service-types/#mariadb-single","title":"mariadb-single","text":"

        MariaDB container. Creates cron job for backups running every 24h executing /lagoon/mysql-backup.sh 127.0.0.1.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3306 3306 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#mariadb-dbaas","title":"mariadb-dbaas","text":"

        Uses a shared MariaDB server via the DBaaS Operator.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter Not Needed 3306 No - -"},{"location":"concepts-advanced/service-types/#mongo","title":"mongo","text":"

        A meta-service which will tell Lagoon to automatically decide between mongo-single and mongo-dbaas.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - - - - -"},{"location":"concepts-advanced/service-types/#mongo-single","title":"mongo-single","text":"

        MongoDB container, will generate persistent storage of min 1GB mounted at /data/db.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 27017 27017 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#mongo-dbaas","title":"mongo-dbaas","text":"

        Uses a shared MongoDB server via the DBaaS Operator.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter Not Needed 27017 No - -"},{"location":"concepts-advanced/service-types/#nginx","title":"nginx","text":"

        NGINX container. No persistent storage.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter localhost:50000/nginx_status 8080 Yes No lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#nginx-php","title":"nginx-php","text":"

        Like nginx, but additionally a php container.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter NGINX: localhost:50000/nginx_status, PHP: /usr/sbin/check_fcgi 8080 Yes No lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#nginx-php-persistent","title":"nginx-php-persistent","text":"

        Like nginx-php. Will generate persistent storage, defines mount location via lagoon.persistent.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter NGINX: localhost:50000/nginx_status, PHP: /usr/sbin/check_fcgi http on 8080 Yes Yes lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#node","title":"node","text":"

        Node.js container. No persistent storage.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes No lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#node-persistent","title":"node-persistent","text":"

        Like node. Will generate persistent storage, defines mount location via lagoon.persistent.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 3000 3000 Yes Yes lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#none","title":"none","text":"

        Instructs Lagoon to completely ignore this service.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - - - - -"},{"location":"concepts-advanced/service-types/#opensearch","title":"opensearch","text":"

        OpenSearch container, will auto-generate persistent storage under /usr/share/opensearch/data.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP on localhost:9200/_cluster/health?local=true 9200 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#postgres","title":"postgres","text":"

        A meta-service which will tell Lagoon to automatically decide between postgres-single and postgres-dbaas.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - - - - -"},{"location":"concepts-advanced/service-types/#postgres-single","title":"postgres-single","text":"

        Postgres container. Creates cron job for backups running every 24h executing /lagoon/postgres-backup.sh localhost.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 5432 5432 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#postgres-dbaas","title":"postgres-dbaas","text":"

        Uses a shared PostgreSQL server via the DBaaS Operator.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter Not Needed 5432 No - -"},{"location":"concepts-advanced/service-types/#python","title":"python","text":"

        Python container. No persistent storage.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP connection on 8800 8800 Yes No lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#python-persistent","title":"python-persistent","text":"

        Python container. With persistent storage.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP connection on 8800 8800 Yes Yes lagoon.autogeneratedroute, lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#redis","title":"redis","text":"

        Redis container.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 6379 6379 No No -"},{"location":"concepts-advanced/service-types/#redis-persistent","title":"redis-persistent","text":"

        Redis container with auto-generated persistent storage mounted under /data.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 6379 6379 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#solr","title":"solr","text":"

        Solr container with auto-generated persistent storage mounted under /var/solr.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter TCP connection on 8983 8983 No Yes lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#varnish","title":"varnish","text":"

        Varnish container.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP request localhost:8080/varnish_status 8080 Yes No lagoon.autogeneratedroute"},{"location":"concepts-advanced/service-types/#varnish-persistent","title":"varnish-persistent","text":"

        Varnish container with auto-generated persistent storage mounted under /var/cache/varnish.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter HTTP request localhost:8080/varnish_status 8080 Yes Yes lagoon.autogeneratedroute, lagoon.persistent.size"},{"location":"concepts-advanced/service-types/#worker","title":"worker","text":"

        Use for any kind of worker container (like queue workers, etc.) where there is no exposed service port.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - No No No lagoon.volumes.X.path"},{"location":"concepts-advanced/service-types/#worker-persistent","title":"worker-persistent","text":"

        Like worker, expects lagoon.persistent.name to be given the name of a service that has persistent storage, which will be mounted under defined lagoon.persistent label. Does NOT generate its own persistent storage, only used to mount another service's persistent storage.

        Healthcheck Exposed Ports Auto Generated Routes Storage Additional customization parameter - No No Yes lagoon.persistent.name, lagoon.persistent, lagoon.volumes.X.path"},{"location":"concepts-advanced/workflows/","title":"Workflows","text":"

        Lagoon tries to support any development workflow possible. It specifically does not enforce any workflows onto teams, so that each development team can define how they would like to develop and deploy their code.

        "},{"location":"concepts-advanced/workflows/#fixed-branches","title":"Fixed Branches","text":"

        The most straightforward workflows are deployment-based on some fixed branches:

        You define which branches (like develop, staging and main, which would be ^(develop|staging|main)$ as regular expressions) that Lagoon should deploy and it will do so. Done!

        If you would like to test a new feature, merge them into a branch that you have set up locally and push, and Lagoon will deploy the feature and you can test. When all is good, merge the branch into your production branch and push.

        "},{"location":"concepts-advanced/workflows/#feature-branches","title":"Feature Branches","text":"

        A bit more advanced are feature branches. Since Lagoon supports the ability to define the branches you would like to deploy via regular expressions, you can also extend the above regular expression to this: ^feature\\/|^(staging|main)$. This will instruct Lagoon to deploy all branches that start with feature/, plus the branches called staging and main. Our development workflow could be as following:

        • Create a new branch from main called feature/myfeature and push feature/myfeature.
        • Lagoon will deploy the branch feature/myfeature as a new environment, where you can test your feature independently of any other features.
        • Merge feature/myfeature into the main branch and it will deploy to your production environment.

        If you like, you can also merge feature/myfeature and any other feature branches into staging first, in order to test the functionality of multiple features together. After you have tested the features together on staging, you can merge the features into main.

        This workflow needs a high level of branch pruning and cleanliness in your Git repository. Since each feature branch will create its own Lagoon environment, you can have very quickly generate a LOT of environments, which all of them will use resources. Be sure to merge or delete unused branches.

        Because of this, it could make sense to think about a pull request based workflow.

        "},{"location":"concepts-advanced/workflows/#pull-requests","title":"Pull requests","text":"

        Even more advanced are workflows via pull requests. Such workflows need the support of a Git hosting which supports pull requests (also called merge requests). The idea of pull request-based workflows lies behind that idea that you can test a feature together with a target branch, without actually needing to merge yet, as Lagoon will do the merging for you during the build.

        In our example we would configure Lagoon to deploy the branches ^(staging|main)$ and the pull requests to .* (to deploy all pull requests). Now our workflow would be:

        1. Create a new branch from main called feature/myfeature and push feature/myfeature (no deployment will happen now because we have only specific staging and main as our branches to be deployed).
        2. Create a pull request in your Git hosting from feature/myfeature into main.
        3. Lagoon will now merge the feature/myfeature branch on top of the main branch and deploy that resulting code for you.
        4. Now you can test the functionality of the feature/myfeature branch just as if it had been merged into main, so all changes that have happened in main since you created the feature/myfeature branch from it will be there, and you don't need to worry that you might have an older version of the main branch.
          1. If there is a merge conflict, the build will fail, Lagoon will stop and notify you.
        5. After you have tested your pull request branch, you can go back to your Git hosting and actually merge the code into main. This will now trigger a deployment of main.
        6. When the pull request is merged, it is automatically closed and Lagoon will remove the environment for the pull request automatically.

        Some teams might opt to create the pull request against a shared staging branch and then merge the staging branch into the main branch via another pull request. This depends on the kind of Git workflow you're using.

        Additionally, in Lagoon you can define that only pull requests with a specific text in the title are deployed. [BUILD] defined as regular expression will only deploy pull requests that have a title like [BUILD] My Pull Request, while a pull request with that title My other Pull Request is not automatically deployed. This helps to keep the amount of environments small and allows for pull requests that don't need an environment yet.

        "},{"location":"concepts-advanced/workflows/#automatic-database-sync-for-pull-requests","title":"Automatic Database Sync for Pull requests","text":"

        Automatic pull request environments are a fantastic thing. But it would also be handy to have the database synced from another environment when those environments are created. Lagoon can handle that!

        The following example will sync the staging database on the first rollout of the pull request environment:

        .lagoon.yml
        tasks:\npost-rollout:\n- run:\nname: IF no Drupal installed & Pullrequest = Sync database from staging\ncommand: |\nif [[ -n ${LAGOON_PR_BASE_BRANCH} ]] && tables=$(drush sqlq 'show tables;') && [ -z \"$tables\" ]; then\ndrush -y sql-sync @staging default\nfi\nservice: cli\nshell: bash\n
        "},{"location":"concepts-advanced/workflows/#promotion","title":"Promotion","text":"

        Another way of deploying your code into an environment is the promotion workflow.

        The idea behind the promotion workflow comes from this (as an example):

        If you merge the branch staging into the main branch, and if there are no changes to main , so main and staging have the exact same code in Git, it could still technically be possible that the resulting Docker images are slightly different. This is because it's possible that between the last staging deployment and the current main deployment, some upstream Docker images may have changed, or dependencies loaded from the various package managers may have changed. This is a very small chance, but it's there.

        For this situation, Lagoon understands the concept of promoting Lagoon images from one environment to another. This basically means that it will take the already built and deployed Docker images from one environment, and will use those exact same Docker images for another environment.

        In our example, we want to promote the Docker images from the main environment to the production environment:

        • First, we need a regular deployed environment with the name main. Make sure that the environment has deployed successfully.
        • Also, make sure that you don't have a branch called production in your Git repository. This could lead to weird confusions (like people pushing into this branch, etc).
        • Now trigger a promotion deployment using the lagoon cli:
        Trigger a promotion deployment
        lagoon deploy promote --project=\"myproject\" --source=\"main\" --destination=\"production\"\n

        This tells Lagoon that you want to promote from the source main to the destination production.

        Lagoon will now do the following:

        • Check out the Git branch main in order to load the .lagoon.yml and docker-compose.yml files (Lagoon still needs these in order to fully work).
        • Create all Kubernetes/OpenShift objects for the defined services in docker-compose.yml , but with LAGOON_GIT_BRANCH=production as environment variable.
        • Copy the newest images from the main environment and use them (instead of building Images or tagging them from upstream).
        • Run all post-rollout tasks like a normal deployment.

        You will receive the same notifications of success or failures like any other deployment.

        "},{"location":"concepts-basics/","title":"Basic Lagoon Concepts","text":"

        This section covers some of the basic concepts in Lagoon. If you're already familiar with these, move on to Advanced Lagoon Concepts.

        If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our Discord.

        "},{"location":"concepts-basics/build-and-deploy-process/","title":"Build and Deploy Process","text":"

        This document describes what actually happens during a Lagoon build and deployment. It is heavily simplified from what actually happens, but it will help you to understand what is happening under the hood every time that Lagoon deploys new code for you.

        Watch the video below for a walk-through of the deployment process.

        "},{"location":"concepts-basics/build-and-deploy-process/#1-set-up-openshift-projectkubernetes-namespace-for-environment","title":"1. Set up OpenShift Project/Kubernetes Namespace for Environment","text":"

        First, Lagoon checks if the OpenShift project/Kubernetes namespace for the given environment exists and is correctly set up. It will make sure that we have the needed service accounts, create secrets, and will configure environment variables into a ConfigMap lagoon-env which is filled with information like the environment type and name, the Lagoon project name, and so on.

        "},{"location":"concepts-basics/build-and-deploy-process/#2-git-checkout-merge","title":"2. Git Checkout & Merge","text":"

        Next, Lagoon will check out your code from Git. It needs that to be able to read the .lagoon.yml, docker-compose.yml and any .env files, but also to build the Docker images.

        Note that Lagoon will only process these actions if the branch/PR matches the branch regex set in Lagoon. Based on how the deployment has been triggered, different things will happen:

        "},{"location":"concepts-basics/build-and-deploy-process/#branch-webhook-push","title":"Branch Webhook Push","text":"

        If the deployment is triggered automatically via a Git webhook and is for a single branch, Lagoon will check out the Git SHA which is included in the webhook payload. This will trigger a deployment for every Git SHA pushed.

        "},{"location":"concepts-basics/build-and-deploy-process/#branch-rest-trigger","title":"Branch REST trigger","text":"

        If you trigger a branch deployment manually via the REST API (via the UI, or GraphQL) and do NOT define a SHA in the POST payload, Lagoon will just check out the latest commit in that branch and deploy it.

        "},{"location":"concepts-basics/build-and-deploy-process/#pull-requests","title":"Pull Requests","text":"

        If the deployment is a pull request (PR) deployment, Lagoon will load the base and the HEAD branch and SHAs for the pull request and will:

        • Check out the base branch (the branch the PR points to).
        • Merge the HEAD branch (the branch that the PR originates from) on top of the base branch.
        • More specifically:
          • Lagoon will check out and merge particular SHAs which were sent in the webhook. Those SHAs may or may not point to the branch heads. For example, if you make a new push to a GitHub pull request, it can happen that SHA of the base branch will not point to the current base branch HEAD.

        If the merge fails, Lagoon will also stop and inform you about this.

        "},{"location":"concepts-basics/build-and-deploy-process/#3-build-image","title":"3. Build Image","text":"

        For each service defined in the docker-compose.yml Lagoon will check if images need to be built or not. If they need to be built, this will happen now. The order of building is based on the order they are configured in docker-compose.yml , and some build arguments are injected:

        • LAGOON_GIT_SHA
        • LAGOON_GIT_BRANCH
        • LAGOON_PROJECT
        • LAGOON_BUILD_TYPE (either pullrequest, branch or promote)
        • LAGOON_SSH_PRIVATE_KEY - The SSH private key that is used to clone the source repository. Use RUN /lagoon/entrypoints/05-ssh-key.sh to convert the build argument into an actual key at /home/.ssh/key which will be used by SSH and Git automatically. For safety, remove the key again via RUN rm /home/.ssh/key.
        • LAGOON_GIT_SOURCE_REPOSITORY - The full Git URL of the source repository.

        Also, if this is a pull request build:

        • LAGOON_PR_HEAD_BRANCH
        • LAGOON_PR_HEAD_SHA
        • LAGOON_PR_BASE_BRANCH
        • LAGOON_PR_BASE_SHA
        • LAGOON_PR_TITLE

        Additionally, for each already built image, its name is also injected. If your docker-compose.yml is configured to first build the cli image and then the nginx image, the name of the nginx image is injected as NGINX_IMAGE.

        "},{"location":"concepts-basics/build-and-deploy-process/#4-configure-kubernetes-or-openshift-services-and-routes","title":"4. Configure Kubernetes or OpenShift Services and Routes","text":"

        Next, Lagoon will configure Kubernetes or OpenShift with all services and routes that are defined from the service types, plus possible additional custom routes that you have defined in .lagoon.yml.

        In this step it will expose all defined routes in the LAGOON_ROUTES as comma separated URLs. It will also define one route as the \"main\" route, in this order:

        1. If custom routes defined: the first defined custom route in .lagoon.yml.
        2. The first auto-generated route from a service defined in docker-compose.yml.
        3. None.

        The \"main\" route is injected via the LAGOON_ROUTE environment variable.

        "},{"location":"concepts-basics/build-and-deploy-process/#5-push-and-tag-images","title":"5. Push and Tag Images","text":"

        Now it is time to push the previously built Docker images into the internal Docker image registry.

        For services that didn't specify a Dockerfile to be built in docker-compose.yml and only gave an image, they are also tagged and will cause the internal Docker image registry to know about the images, so that they can be used in containers.

        "},{"location":"concepts-basics/build-and-deploy-process/#6-persistent-storage","title":"6. Persistent Storage","text":"

        Lagoon will now create persistent storage (PVC) for each service that needs and requested persistent storage.

        "},{"location":"concepts-basics/build-and-deploy-process/#7-cron-jobs","title":"7. Cron jobs","text":"

        For each service that requests a cron job (like MariaDB), plus for each custom cron job defined in .lagoon.yml, Lagoon will now generate the cron job environment variables which are later injected into the Deployment.

        "},{"location":"concepts-basics/build-and-deploy-process/#8-run-defined-pre-rollout-tasks","title":"8. Run defined pre-rollout tasks","text":"

        Now Lagoon will check the .lagoon.yml file for defined tasks in pre-rollout and will run them one by one in the defined services. Note that these tasks are executed on the pods currently running (so cannot utilize features or scripts that only exist in the latest commit) and therefore they are also not run on first deployments.

        If any of them fail, Lagoon will immediately stop and notify you, and the rollout will not proceed.

        "},{"location":"concepts-basics/build-and-deploy-process/#9-deploymentconfigs-statefulsets-daemonsets","title":"9. DeploymentConfigs, Statefulsets, Daemonsets","text":"

        This is probably the most important step. Based on the defined service type, Lagoon will create the Deployment, Statefulset or Daemonsets for the service. (Note that Deployments are analogous to DeploymentConfigs in OpenShift)

        It will include all previously gathered information like the cron jobs, the location of persistent storage, the pushed images and so on.

        Creation of these objects will also automatically cause Kubernetes or OpenShift to trigger new deployments of the pods if necessary, like when an environment variable has changed or an image has changed. But if there is no change, there will be no deployment! This means if you only update the PHP code in your application, the Varnish, Solr, MariaDB, Redis and any other service that is defined but does not include your code will not be deployed. This makes everything much much faster.

        "},{"location":"concepts-basics/build-and-deploy-process/#10-wait-for-all-rollouts-to-be-done","title":"10. Wait for all rollouts to be done","text":"

        Now Lagoon waits! It waits for all of the just-triggered deployments of the new pods to be finished, as well as for their health checks to be successful.

        If any of the deployments or health checks fail, the deployment will be stopped here, and you will be informed via the defined notification systems (like Slack) that the deployment has failed.

        "},{"location":"concepts-basics/build-and-deploy-process/#11-run-defined-post-rollout-tasks","title":"11. Run defined post-rollout tasks","text":"

        Now Lagoon will check the .lagoon.yml file for defined tasks in post-rollout and will run them one by one in the defined services.

        If any of them fail, Lagoon will immediately stop and notify you.

        "},{"location":"concepts-basics/build-and-deploy-process/#12-success","title":"12. Success","text":"

        If all went well and nothing threw any errors, Lagoon will mark this build as successful and inform you via defined notifications. \u2705

        "},{"location":"concepts-basics/docker-compose-yml/","title":"docker-compose.yml","text":"

        The docker-compose.yml file is used by Lagoon to:

        • Learn which services/containers should be deployed.
        • Define how the images for the containers are built.
        • Define additional configurations like persistent volumes.

        Docker Compose (the tool) is very strict in validating the content of the YAML file, so we can only do configuration within labels of a service definition.

        Warning

        Lagoon only reads the labels, service names, image names and build definitions from a docker-compose.yml file. Definitions like: ports, environment variables, volumes, networks, links, users, etc. are IGNORED.

        This is intentional, as the docker-compose file is there to define your local environment configuration. Lagoon learns from the lagoon.type the type of service you are deploying and from that knows about ports, networks and any additional configuration that this service might need.

        Here a straightforward example of a docker-compose.yml file for Drupal:

        docker-compose.yml
        x-lagoon-project:\n# Lagoon project name (leave `&lagoon-project` when you edit this)\n&lagoon-project drupal-example\nx-volumes:\n&default-volumes\n# Define all volumes you would like to have real-time mounted into the docker containers\nvolumes:\n- .:/app:delegated\nx-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# Route that should be used locally, if you are using pygmy, this route *must* end with .docker.amazee.io\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n# Uncomment if you want to have the system behave as it will in production\n#LAGOON_ENVIRONMENT_TYPE: production\n# Uncomment to enable Xdebug and then restart via `docker compose up -d`\n#XDEBUG_ENABLE: \"true\"\nx-user:\n&default-user\n# The default user under which the containers should run. Change this if you are on linux and run with another user than ID `1000`\nuser: '1000'\nservices:\nnginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent # (1)\nlagoon.persistent: /app/web/sites/default/files/\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent # (2)\nlagoon.name: nginx\nlagoon.persistent: /app/web/sites/default/files/\nmariadb:\nimage: uselagoon/mariadb-10.11-drupal\nlabels:\nlagoon.type: mariadb\n
        1. Note the multi-container pods here.
        2. Note the multi-container pods here.
        "},{"location":"concepts-basics/docker-compose-yml/#basic-settings","title":"Basic settings","text":"

        x-lagoon-project:

        This is the machine name of your project, define it here. We\u2019ll use \u201cdrupal-example.\u201d

        x-volumes:

        This tells Lagoon what to mount into the container. Your web application lives in /app, but you can add or change this if needed.

        x-environment:

        1. Here you can set your local development URL. If you are using pygmy, it must end with .docker.amazee.io.
        2. If you want to exactly mimic the production environment, uncomment LAGOON_ENVIRONMENT_TYPE: production.
        3. If you want to enable Xdebug, uncomment DEBUG_ENABLE: \"true\".

        x-user:

        You are unlikely to need to change this, unless you are on Linux and would like to run with a user other than 1000.

        "},{"location":"concepts-basics/docker-compose-yml/#services","title":"services","text":"

        This defines all the services you want to deploy. Unfortunately, Docker Compose calls them services, even though they are actually containers. Going forward we'll be calling them services, and throughout this documentation.

        The name of the service (nginx, php, and mariadb in the example above) is used by Lagoon as the name of the Kubernetes pod (yet another term - again, we'll be calling them services) that is generated, plus also any additional Kubernetes objects that are created based on the defined lagoon.type, which could be things like services, routes, persistent storage, etc.

        Please note that service names adhere to the RFC 1035 DNS label standard. Service names must:

        • contain at most 63 characters
        • contain only lowercase alphanumeric characters or '-'
        • start with an alphabetic character
        • end with an alphanumeric character

        Warning

        Once you have set the name of a service, do NOT rename it. This will cause all kind of havoc in your containers and break things.

        "},{"location":"concepts-basics/docker-compose-yml/#docker-images","title":"Docker Images","text":""},{"location":"concepts-basics/docker-compose-yml/#build","title":"build","text":"

        If you want Lagoon to build a Dockerfile for your service during every deployment, you can define it here:

        build

        • context
          • The build context path that should be passed on into the docker build command.
        • dockerfile:
          • Location and name of the Dockerfile that should be built.

        Warning

        Lagoon does NOT support the short version of build: <Dockerfile> and will fail if it finds such a definition.

        "},{"location":"concepts-basics/docker-compose-yml/#image","title":"image","text":"

        If you don't need to build a Dockerfile and just want to use an existing Dockerfile, define it via image.

        "},{"location":"concepts-basics/docker-compose-yml/#types","title":"Types","text":"

        Lagoon needs to know what type of service you are deploying in order to configure the correct Kubernetes or OpenShift objects.

        This is done via the lagoon.type label. There are many different types to choose from. Check Service Types to see all of them and their additional configuration possibilities.

        "},{"location":"concepts-basics/docker-compose-yml/#skipignore-containers","title":"Skip/Ignore containers","text":"

        If you'd like Lagoon to ignore a service completely - for example, you need a container only during local development - give it the type none.

        "},{"location":"concepts-basics/docker-compose-yml/#persistent-storage","title":"Persistent Storage","text":"

        Some containers need persistent storage. Lagoon allows for each container to have a maximum of one persistent storage volume attached to the container. You can configure the container to request its own persistent storage volume (which can then be mounted by other container), or you can tell the container to mount the persistent storage created by another container.

        In many cases, Lagoon knows where that persistent storage needs to go. For example, for a MariaDB container, Lagoon knows that the persistent storage should be put into /var/lib/mysql , and puts it there automatically without any extra configuration to define that. For some situations, though, Lagoon needs your help to know where to put the persistent storage:

        • lagoon.persistent - The absolute path where the persistent storage should be mounted (the above example uses /app/web/sites/default/files/ which is where Drupal expects its persistent storage).
        • lagoon.persistent.name - Tells Lagoon to not create a new persistent storage for that service, but instead mounts the persistent storage of another defined service into this service.
        • lagoon.persistent.size - The size of persistent storage you require (Lagoon usually gives you minimum 5G of persistent storage, if you need more, define it here).
        • lagoon.persistent.class - By default Lagoon automatically assigns the right storage class for your service (like SSDs for MySQL, bulk storage for Nginx, etc.). If you need to overwrite this, you can do so here. This is highly dependent on the underlying Kubernetes/OpenShift that Lagoon runs on. Contact your Lagoon administrator for this.

        See the Additional Volumes section on how to add more volumes

        "},{"location":"concepts-basics/docker-compose-yml/#auto-generated-routes","title":"Auto-generated Routes","text":"

        The docker-compose.yml file also supports per-service enabling and disabling of autogenerated routes

        • lagoon.autogeneratedroute: false label will stop a route from being automatically created for that service. It can be applied to all services with autogenerated routes, but is mostly useful for the basic and basic-persistent service types when used to create an additional internal-facing service for a database service or similar. The inverse is also true - it will enable an auto-generated route for a service when the .lagoon.yml file disables them.
        "},{"location":"concepts-basics/docker-compose-yml/#additional-volumes","title":"Additional Volumes","text":"

        In situations where more than one persistent volume is required by a service (or services), Lagoon can support the creation of multiple additional volumes.

        To do this, the volume should be created in the docker-compose.yml with a lagoon.type label - currently only \"persistent\" is supported.

        docker-compose.yml volumes snippet
        volumes:\nextravol:\nlabels:\nlagoon.type: persistent\n

        This volume can then be referenced in each service that requires it, along with the path.

        "},{"location":"concepts-basics/docker-compose-yml/#add-additional-volumes-to-an-existing-non-persistent-service-type","title":"Add additional volumes to an existing non -persistent service type","text":"

        If you have a basic or other supported standalone service type and you want to add volumes, you can use the additional volumes to do this without chaning the service type to a -persistent type.

        docker-compose.yml volume usage snippet
        services:\nbasic:\nbuild:\ncontext: .\ndockerfile: basic.dockerfile\nlabels:\nlagoon.type: basic\nlagoon.volumes.data.path: /data # basic-persistent provides a default volume, this needs to be defined\nlagoon.volumes.extravol.path: /extra\nvolumes: # these volumes are ignored by lagoon, only the labels above are consumed to handle volume mapping\n- data:/data:delegated\n- extravol:/extra\nvolumes:\ndata:\nlabels:\nlagoon.type: persistent\nextravol:\nlabels:\nlagoon.type: persistent\nlagoon.backup: false\n
        "},{"location":"concepts-basics/docker-compose-yml/#add-additional-volume-to-an-existing-persistent-service-type","title":"Add additional volume to an existing -persistent service type","text":"

        docker-compose.yml volume usage snippet

        services:\nbasic:\nbuild:\ncontext: .\ndockerfile: basic.dockerfile\nlabels:\nlagoon.type: basic-persistent\nlagoon.persistent: /data # basic-persistent provides a default volume, this needs to be defined\nlagoon.volumes.extravol.path: /extra\nvolumes: # these volumes are ignored by lagoon, only the labels above are consumed to handle volume mapping\n- ./data:/data:delegated\n- extravol:/extra\nvolumes:\nextravol:\nlabels:\nlagoon.type: persistent\nlagoon.backup: false\n
        Note that the original volume created for this service still exists.

        "},{"location":"concepts-basics/docker-compose-yml/#supported-persistent-volume-flags","title":"Supported persistent volume flags","text":"
        • The default size is 5Gi - but can be modified with a lagoon.persistent.size: XXGi label on the volume.
        • By default, Lagoon will back up all persistent volumes, but this can be disabled with a lagoon.backup: false label on the volume.
        docker-compose.yml volumes snippet
        volumes:\nextravol:\nlabels:\nlagoon.type: persistent\nlagoon.persistent.size: 10Gi\nlagoon.backup: false\n
        "},{"location":"concepts-basics/docker-compose-yml/#default-persistent-volumes","title":"Default persistent volumes","text":"
        • If a service type provides a default persistent volume (nginx-php-persistent, basic-persistent, node-persistent, python-persistent), it will be created and named as the name of the service (unless the lagoon.persistent.name label is assigned).
        • If a volume defined in the volumes block is also named the same as a default volume would be, it will be ignored and only the default volume will be created.
        • If a lagoon.volumes.${volume_name}.path is also defined on a service that has a default volume (or a volume linked to it using the lagoon.persistent.name label, it will also be ignored and the value of the lagoon.persistent path will be used.
        "},{"location":"concepts-basics/docker-compose-yml/#ignored-volume","title":"Ignored volume","text":"
        • If a volume defined in the volumes block has a label lagoon.type: none it will not be created.
        • If a volume defined in the volumes block has a label lagoon.type of a type (currently only persistent), but it is not consumed by any service using a lagoon.volumes.${volume_name}.path, then the volume will not be created.
        "},{"location":"concepts-basics/docker-compose-yml/#maximum-number-of-volumes","title":"Maximum number of volumes","text":"
        • Currently a hard-coded limit of 6 volumes is in place, this may be made configurable in the future.
        "},{"location":"concepts-basics/docker-compose-yml/#supported-service-types","title":"Supported service types","text":"

        Currently, the only service types that support additional volumes are the following

        • basic / basic-persistent
        • worker / worker-persistent
        • node / node-persistent
        • python / python-persistent
        • nginx / nginx-php / nginx-php-persistent
        • cli / cli-persistent

        Adding a volume to any other type will result in an error during a build.

        "},{"location":"concepts-basics/docker-compose-yml/#additional-service-ports","title":"Additional Service Ports","text":"

        If you have a service that has many ports, you can use the lagoon.service.usecomposeports: true label to inform Lagoon to use the ports defined on the service.

        Info

        Only TCP based ports will be allowed to have a route attached, but UDP ports can be used for internal communications.

        For example, if you have a basic service that requires ports 8080 and 10009.

        • port 8080 could be a HTTP based port and you want to route to this using a route in .lagoon.yml
        • port 10009 could be used by other services within the environment for internal communications

        You would define your service to consume the ports like so:

        docker-compose.yml service port snippet
        version: '2'\nservices:\ncustom:\nbuild:\ncontext: internal/testdata/basic/docker\ndockerfile: Dockerfile\nlabels:\nlagoon.type: basic\nlagoon.service.usecomposeports: true\nports:\n- \"8080\"\n- \"10009\"\n

        The first port in the list of ports will be the \"default\" port for the service, so standard routes like so will route to the default port. An example .lagoon.yml is show how this looks the same as any other standard service route.

        .lagoon.yml default port route
        environments:\nmain:\nroutes:\n- custom:\n- example.com\n

        Alternatively, if you wanted to also have a route specifically for port 10009, you could define the route like so in your .lagoon.yml.

        .lagoon.yml default and alternative port route
        environments:\nmain:\nroutes:\n- custom-10009:\n- otherport.example.com\n

        Info

        You can define both the \"default\" route and a custom port route together, as long as they have different domains used.

        "},{"location":"concepts-basics/docker-compose-yml/#multi-container-pods","title":"Multi-Container Pods","text":"

        Kubernetes and OpenShift don't deploy plain containers. Instead, they deploy pods, with each one or more containers. Usually Lagoon creates a single pod with a container inside for each defined docker-compose service. For some cases, we need to put two containers inside a single pod, as these containers are so dependent on each other that they should always stay together. An example for such a situation is the PHP and NGINX containers that both contain PHP code of a web application like Drupal.

        For these cases, it is possible to tell Lagoon which services should stay together, which is done in the following way (remember that we are calling containers services because of docker-compose:

        1. Define both services with a lagoon.type that expects two services (in the example this is nginx-php-persistent defined on the nginx and php services).
        2. Link the second service with the first one, defining the label lagoon.name of the second one with the first one. (in the example this is done with defining lagoon.name: nginx).

        This will cause Lagoon to realize that the nginx and php containers are combined in a pod that will be called nginx.

        Warning

        Once you have set the lagooon.name of a service, do NOT rename it. This will cause all kind of havoc in your containers and break things.

        Lagoon still needs to understand which of the two services is the actual individual service type (nginx and php in this case). It does this by searching for service names with the same name that are given by the type, so nginx-php-persistent expects one service with the name nginx and one with php in the docker-compose.yml. If for any reason you want to use different names for the services, or you need for than one pod with the type nginx-php-persistent there is an additional label lagoon.deployment.servicetype which can be used to define the actual service type.

        An example:

        docker-compose.yml
        nginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # If this isn't present, Lagoon will use the container name, which in this case is nginx.\nlagoon.deployment.servicetype: nginx\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # We want this service to be part of the NGINX pod in Lagoon.\nlagoon.deployment.servicetype: php\n

        In the example above, the services are named nginx and php (but you can call them whatever you want). The lagoon.name tells Lagoon which services go together - all of the services with the same name go together.

        In order for Lagoon to realize which one is the nginx and which one is the php service, we define it via lagoon.deployment.servicetype: nginx and lagoon.deployment.servicetype: php.

        "},{"location":"concepts-basics/docker-compose-yml/#helm-templates-kubernetes-only","title":"Helm Templates (Kubernetes only)","text":"

        Lagoon uses Helm for templating on Kubernetes. To do this, a series of Charts are included with the build-deploy-tool image.

        "},{"location":"concepts-basics/docker-compose-yml/#custom-rollout-monitor-types","title":"Custom Rollout Monitor Types","text":"

        By default, Lagoon expects that services from custom templates are rolled out via a DeploymentConfig object within Kubernetes or Openshift. It monitors the rollout based on this object. In some cases, the services that are defined via custom deployment need a different way of monitoring. This can be defined via lagoon.rollout:

        • deploymentconfig - This is the default. Expects a DeploymentConfig object in the template for the service.
        • statefulset - Expects a Statefulset object in the template for the service.
        • daemonset - Expects a Daemonset object in the template for the service.
        • false - Will not monitor any rollouts, and will just be happy if the template applies and does not throw any errors.

        You can also overwrite the rollout for just one specific environment. This is done in .lagoon.yml.

        "},{"location":"concepts-basics/docker-compose-yml/#docker-compose-v2-compatibility","title":"Docker Compose v2 compatibility","text":"

        Bug

        Note that while using older versions of Docker Compose V2 locally, you may experience some known issues - these have been resolved in later releases (v2.17.3 onwards).

        The resolution for these errors is usually to update (or install a later version of) the version of Docker Compose you are using, either standalone or by upgrading the version of Docker Desktop you're using. See the Docker Desktop release notes for more information

        Docker Compose output indicating depends_on error
        Failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization\n\nor\n\nFailed to solve: drupal9-base-cli: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed`\n
        • These are resolved in Docker Compose v2.13.0.
        • This message means that your build has tried to access a Docker image that hasn't been built yet. As BuildKit builds in parallel, if you have a Docker image that inherits another one (as we do in Drupal with the CLI).
        • You can also use the target field inside the build to reconfigure as a multi-stage build.
        • If you are already running a newer Docker Compose version, this error may be because you're defaulting to using a docker-container build context with buildx. You should make sure that docker buildx ls shows the docker builder as default, not a docker-container based one. Check the docs on Docker buildx here.
        Docker Compose output indicating volumes_from error
        no such service: container:amazeeio-ssh-agent\n
        • This is resolved in Docker Compose v2.17.3.
        • This message means that the service that provides SSH access into locally running containers runs outside of your Docker Compose stack and is inaccessible.
        • The section can also be removed from your docker-compose.yml file if you don't require SSH access from inside your local environment.
        "},{"location":"concepts-basics/docker-compose-yml/#buildkit-and-lagoon","title":"BuildKit and Lagoon","text":"

        BuildKit is a toolkit for converting source code to build artifacts in an efficient, expressive and repeatable manner.

        With the release of Lagoon v2.11.0, Lagoon now provides support for more advanced BuildKit-based docker compose builds, and in Lagoon v2.21.0, BuildKit is now enabled by default for all builds. To specifically disable BuildKit for your Project or Environment, add DOCKER_BUILDKIT=0 as a build-time variable to your Lagoon project or environment.

        "},{"location":"concepts-basics/docker-compose-yml/#docker-compose-errors-in-lagoon-builds","title":"Docker Compose Errors in Lagoon Builds","text":"

        See the Lagoon Build Errors page for how to resolve common build errors with Docker Compose.

        "},{"location":"concepts-basics/docker-compose-yml/#common-docker-compose-issues","title":"Common Docker Compose Issues","text":"

        This section outlines some of the more common Docker Compose errors, and how to remedy them. These may present in local development, or as Lagoon Build Errors and Warnings.

        "},{"location":"concepts-basics/docker-compose-yml/#dual-mapping-keys","title":"Dual Mapping keys","text":"Docker Compose output indicating mapping key error
        ERR: yaml: unmarshal errors: line 22: mapping key \"<<\" already defined at line 21\n

        Early releases of the Lagoon examples contained a pair of YAML aliases attached to services to provide volumes and user code. Newer releases of Docker Compose will report this as an error. While all examples have now been updated, there may be some older codebases around that need updating.

        This error arises from Docker Compose not knowing what it is inserting into the array, so just assuming it may be duplicate.

        If your docker-compose.yml contains one or more of this (or similar) code blocks, you will be affected.

        Docker Compose error with dual mapping keys
        ...\n<< : [*default-volumes]\n<< : [*default-user]\n...\n

        The corrected version combines both aliases into a single mapping key - you'll need to remedy all occurrances.

        Docker Compose correct insertion of multiple alias mapping keys
        ...\n<< : [*default-volumes, *default-user]\n...\n
        "},{"location":"concepts-basics/lagoon-yml/","title":".lagoon.yml","text":"

        The .lagoon.yml file is the central file to set up your project. It contains configuration in order to do the following:

        • Define routes for accessing your sites.
        • Define pre-rollout tasks.
        • Define post-rollout tasks.
        • Set up SSL certificates.
        • Add cron jobs for environments.

        The .lagoon.yml file must be placed at the root of your Git repository.

        "},{"location":"concepts-basics/lagoon-yml/#general-settings","title":"General Settings","text":""},{"location":"concepts-basics/lagoon-yml/#docker-compose-yaml","title":"docker-compose-yaml","text":"

        Tells the build script which Docker Compose YAML file should be used, in order to learn which services and containers should be deployed. This defaults to docker-compose.yml, but could be used for a specific Lagoon Docker Compose YAML file if needed.

        "},{"location":"concepts-basics/lagoon-yml/#environment_variablesgit_sha","title":"environment_variables.git_sha","text":"

        This setting allows you to enable injecting the deployed Git SHA into your project as an environment variable. By default this is disabled. Setting the value to true sets the SHA as the environment variable LAGOON_GIT_SHA.

        "},{"location":"concepts-basics/lagoon-yml/#routes","title":"Routes","text":"

        Routes are used to direct traffic to services. Each service in an environnment can have routes, in which the domain names are defined manually or automatically. The top level routes section applies to all routes in all environments.

        "},{"location":"concepts-basics/lagoon-yml/#routesautogenerate","title":"routes.autogenerate","text":"

        This allows you to configure automatically created routes. Manual routes are defined per environment.

        • enabled: Set to false to disable autogenerated routes. Default is true.
        • allowPullrequests: Set to true to override enabled: false for pull requests..lagoon.yml
          routes:\nautogenerate:\nenabled: false\nallowPullrequests: true\n
        • insecure: Configures HTTP connections. Default is Allow.
          • Allow: Route will respond to HTTP and HTTPS.
          • Redirect: Route will redirect any HTTP request to HTTPS.
        • prefixes: Configure prefixes for the autogenerated routes of each environment. This is useful for things like language prefix domains, or a multi-domain site using the Drupal domain module.

          .lagoon.yml
            routes:\nautogenerate:\nprefixes:\n- www\n- de\n- fr\n- it\n
        "},{"location":"concepts-basics/lagoon-yml/#path-based-routes","title":"Path Based Routes","text":"

        Path based routes allows you to define paths on a route to a different backend. This can be used if you have a separate backend within the environment that you want to route traffic to on the same domain as another service within your environment.

        Warning

        Path based routes can get quite complex and should only be used if you have a need to use them.

        Here is an example .lagoon.yml file that shows how path based routes can be defined. There is support for global autogenerated routes, per environment autogenerated routes, and custom routes.

        .lagoon.yml path based routes
        docker-compose-yaml: docker-compose.yml\n# if an environment has `autogeneratePathRoutes` defined like `environments.main.autogeneratePathRoutes`\n# then thes global lagoon yaml `routes.autogenerate.pathRoutes` are ignored\nroutes:\nautogenerate:\npathRoutes:\n- fromService: nginx\ntoService: node\npath: /api/v1\nenvironments:\nmain:\n# path routes for autogenerated routes for this environment only\nautogeneratePathRoutes:\n- fromService: nginx\ntoService: node\npath: /api/v1\nroutes:\n- nginx:\n- a.example.com:\npathRoutes:\n- toService: node\npath: /api/v1\n
        "},{"location":"concepts-basics/lagoon-yml/#autogenerated-routes","title":"Autogenerated Routes","text":"

        It is possible to configure global autogenerated routes, these would apply to ALL environments that this .lagoon.yml file would cover.

        Additionally, per environment autogenerated route configurations are supported, the fields are the same, just where they are defined is different.

        .lagoon.yml autogenerated path based routes
        routes:\nautogenerate:\npathRoutes:\n- fromService: nginx\ntoService: node\npath: /api/v1\nenvironments:\nmain:\n# path routes for autogenerated routes for this environment only\nautogeneratePathRoutes:\n- fromService: nginx\ntoService: node\npath: /api/v1\n

        Info

        If the per environment path routes are defined on an environment, any global defined ones are ignored.

        The supported fields for autogenerated path routes are:

        • fromService - the autogenerated route for the service you want to add the path based route to
        • toService - the backend service you want to route to
        • path - the path to send to the toService
        "},{"location":"concepts-basics/lagoon-yml/#custom-routes","title":"Custom Routes","text":"

        It is possible to turn on path based routes for a specific route too, the following .lagoon.yml example shows how.

        .lagoon.yml custom route path based routes

        environments:\nmain:\nroutes:\n- nginx:\n- a.example.com:\npathRoutes:\n- toService: node\npath: /api/v1\n
        The fields are the same, except that you can omit fromService due to the way that custom routes are defined already associated to a fromService in their normal configuration.

        "},{"location":"concepts-basics/lagoon-yml/#conditions","title":"Conditions","text":""},{"location":"concepts-basics/lagoon-yml/#autogenerated-route-configurations","title":"Autogenerated Route configurations","text":"

        If the global path routes for autogenerated routes are defined, but an environment has overrides, the global defined path routes are ignored by that environment.

        "},{"location":"concepts-basics/lagoon-yml/#additional-service-ports","title":"Additional Service Ports","text":"

        If the docker compose label lagoon.service.usecomposeports=true has been defined on a service, then the service name with the port number as a suffix to any ports beyond the default (first defined port) must be used as the toService. See Additional Service Ports for more information on this label.

        The following docker-compose.yml has an example of this label and the ports. This would create the default service port named node referencing port 1234, but also another service node-4321. If you need to create a path based route to port 4321, you would need to define the toService as node-4321.

        docker-compose.yml path based routes

        services:\nnginx:\nbuild:\ncontext: .\ndockerfile: basic.dockerfile\nlabels:\nlagoon.type: nginx\nlagoon.service.usecomposeports: true\nports:\n- '8080'\nnode:\nbuild:\ncontext: .\ndockerfile: basic.dockerfile\nlabels:\nlagoon.type: basic\nlagoon.service.usecomposeports: true\nports:\n- '1234'\n- '4321'\n
        Then you could create a route that would route a.example.com traffic to the nginx service. But any traffic destined for a.example.com/api/v1 would go to the node service on port 4321

        .lagoon.yml custom route path based routes
        environments:\nmain:\nroutes:\n- nginx:\n- a.example.com:\npathRoutes:\n- toService: node-4321\npath: /api/v1\n
        "},{"location":"concepts-basics/lagoon-yml/#urls","title":"URLs","text":"

        The path defined in the pathRoute will be passed to whichever toService is defined in all URL queries. This means if you're using the path defined as /api/v1 for example, then you may need to cater for this in your backend depending on how your backend is built.

        "},{"location":"concepts-basics/lagoon-yml/#path-types","title":"Path Types","text":"

        In Lagoon, currently only Prefix type is supported on ingress (see Ingress path types).

        "},{"location":"concepts-basics/lagoon-yml/#tasks","title":"Tasks","text":"

        There are different type of tasks you can define, and they differ in when exactly they are executed in a build flow:

        "},{"location":"concepts-basics/lagoon-yml/#pre-rollout-tasks-pre_rolloutirun","title":"Pre-Rollout Tasks - pre_rollout.[i].run","text":"

        Here you can specify tasks which will run against your project after all images have been successfully built, but before:

        • Any running containers are updated with the newly built images.
        • Any other changes are made to your existing environment.

        This feature enables you to, for example, create a database dump before updating your application. This can make it easier to roll back in case of a problem with the deploy.

        Info

        The pre-rollout tasks run in the existing pods before they are updated, which means:

        • Changes made to your Dockerfile since the last deploy will not be visible when pre-rollout tasks run.
        • If there are no existing containers (e.g. on the initial deployment of a new environment), pre-rollout tasks are skipped.
        "},{"location":"concepts-basics/lagoon-yml/#post-rollout-tasks-post_rolloutirun","title":"Post-Rollout Tasks - post_rollout.[i].run","text":"

        Here you can specify tasks which need to run against your project, after:

        • All images have been successfully built.
        • All containers are updated with the new images.
        • All containers are running have passed their readiness checks.

        Common uses for post-rollout tasks include running drush updb, drush cim, or clearing various caches.

        • name
          • The name is an arbitrary label for making it easier to identify each task in the logs.
        • command
          • Here you specify what command should run. These are run in the WORKDIR of each container, for Lagoon images this is /app. Keep this in mind if you need to cd into a specific location to run your task.
        • service
          • The service in which to run the task. If following our Drupal example, this will be the CLI container, as it has all your site code, files, and a connection to the database. Typically you do not need to change this.
        • container
          • If the service has multiple containers (e.g. nginx-php), you will need to specify which container in the pod to connect to (e.g. the php container within the nginx pod).
        • shell
          • In which shell the task should be run. By default sh is used, but if the container also has other shells (like bash, you can define it here). This is useful if you want to run some small if/else bash scripts within the post-rollouts. See the example below to learn how to write a script with multiple lines.
        • when
          • The \"when\" clause allows for the conditional running of tasks. It expects an expression that will evaluate to a true/false value which determines whether the task should be run.

        Note: If you would like to temporarily disable pre/post-rollout tasks during a deployment, you can set either of the following environment variables in the API at the project or environment level (see how on Environment Variables).

        • LAGOON_PREROLLOUT_DISABLED=true
        • LAGOON_POSTROLLOUT_DISABLED=true
        "},{"location":"concepts-basics/lagoon-yml/#example-post-rollout-tasks","title":"Example post-rollout tasks","text":"

        Here are some useful examples of post-rollout tasks that you may want to use or adapt for your projects.

        Run only if Drupal not installed:

        .lagoon.yml
        - run:\n  name: IF no Drupal installed\n  command: | # (1)\nif tables=$(drush sqlq \"show tables like 'node';\") && [ -z \"$tables\" ]; then\n#### whatever you like\nfi\nservice: cli\n  shell: bash\n
        1. This shows how to create a multi-line command.

        Different tasks based on branch name:

        .lagoon.yml
        - run:\nname: Different tasks based on branch name\ncommand: |\n### Runs if current branch is not 'production'\nservice: cli\nwhen: LAGOON_GIT_BRANCH != \"production\"\n

        Run shell script:

        .lagoon.yml
        - run:\nname: Run Script\ncommand: './scripts/script.sh'\nservice: cli\n

        Target specific container in pod:

        .lagoon.yml
        - run:\nname: show php env variables\ncommand: env\nservice: nginx\ncontainer: php\n

        Drupal & Drush 9: Sync database & files from master environment:

        .lagoon.yml
        - run:\n    name: Sync DB and Files from master if we are not on master\n    command: |\n# Only if we don't have a database yet\nif tables=$(drush sqlq 'show tables;') && [ -z \"$tables\" ]; then\ndrush sql-sync @lagoon.master @self # (1)\ndrush rsync @lagoon.master:%files @self:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n      fi\nservice: cli\n    when: LAGOON_ENVIRONMENT_TYPE != \"production\"\n
        1. Make sure to use the correct aliases for your project here.
        "},{"location":"concepts-basics/lagoon-yml/#backup-retention","title":"Backup Retention","text":""},{"location":"concepts-basics/lagoon-yml/#backup-retentionproductionmonthly","title":"backup-retention.production.monthly","text":"

        Specify the number of monthly backups Lagoon should retain for your project's production environment(s).

        The global default is 0 if this value is not specified.

        "},{"location":"concepts-basics/lagoon-yml/#backup-retentionproductionweekly","title":"backup-retention.production.weekly","text":"

        Specify the number of weekly backups Lagoon should retain for your project's production environment(s).

        The global default is 6 if this value is not specified.

        "},{"location":"concepts-basics/lagoon-yml/#backup-retentionproductiondaily","title":"backup-retention.production.daily","text":"

        Specify the number of daily backups Lagoon should retain for your project's production environment(s).

        The global default is 7 if this value is not specified.

        "},{"location":"concepts-basics/lagoon-yml/#backup-retentionproductionhourly","title":"backup-retention.production.hourly","text":"

        Specify the number of hourly backups Lagoon should retain for your project's production environment(s).

        The global default is 0 if this value is not specified.

        "},{"location":"concepts-basics/lagoon-yml/#backup-schedule","title":"Backup Schedule","text":""},{"location":"concepts-basics/lagoon-yml/#backup-scheduleproduction","title":"backup-schedule.production","text":"

        Specify the backup schedule for this project. Accepts cron-compatible syntax with the notable exception that the Minute block must be the letter M. Any other value in the Minute block will cause the Lagoon build to fail. This allows Lagoon to randomly choose a specific minute for these backups to happen, while users can specify the remainder of the schedule down to the hour.

        The global default is M H(22-2) * * * if this value is not specified.

        Timezones:

        Backup schedules use the cluster's local timezone.

        "},{"location":"concepts-basics/lagoon-yml/#environments","title":"Environments","text":"

        Environment names match your deployed branches or pull requests. This allows for each environment to have a different config. In our example it will apply to the main and staging environment.

        "},{"location":"concepts-basics/lagoon-yml/#environmentsnameroutes","title":"environments.[name].routes","text":"

        Manual routes are domain names that are configured per environment to direct traffic to a service. Since all environments get automatically created routes by default, it is typical that manual routes are only setup for the production environment, using the main domain of the project's website like www.example.com.

        Tip

        Since Lagoon has no control over the manual routes, you'll need to ensure the DNS records are configured properly at your DNS provider. You can likely set a CNAME record to point to the automatic route.

        The first element after the environment is the target service, nginx in our example. This is how we identify which service incoming requests will be sent to.

        The simplest route is example.com, as seen in our example .lagoon.yml - you can see it has no additional configuration. This will assume that you want a Let's Encrypt certificate for your route and no redirect from HTTPS to HTTP.

        In the \"www.example.com\" example below, we see three more options (also notice the : at the end of the route and that the route is wrapped in \", that's important!):

        .lagoon.yml
        - \"www.example.com\":\ntls-acme: true\ninsecure: Redirect\nhstsEnabled: true\n
        "},{"location":"concepts-basics/lagoon-yml/#ssl-configuration-tls-acme","title":"SSL Configuration tls-acme","text":"

        Warning

        If you switch from tls-acme: true to tls-acme: false this will remove any previously generated certificates for this route. This could result in unexpected behaviour if you're using an external CDN and do any certificate pinning.

        • tls-acme: Configures automatic TLS certificate generation via Let's Encrypt. Default is true, set to false to disable automatic certificates.
        • insecure: Configures HTTP connections. Default is Allow.
          • Allow: Route will respond to HTTP and HTTPS.
          • Redirect: Route will redirect any HTTP request to HTTPS.
        • hstsEnabled: Adds the Strict-Transport-Security header. Default is false.
        • hstsMaxAge: Configures the max-age directive. Default is 31536000 (1 year).
        • hstsPreload: Sets the preload directive. Default is false.
        • hstsIncludeSubdomains: Sets the includeSubDomains directive. Default is false.

        Info

        If you plan to switch from a SSL certificate signed by a Certificate Authority (CA) to a Let's Encrypt certificate, it's best to get in touch with your Lagoon administrator to oversee the transition.

        "},{"location":"concepts-basics/lagoon-yml/#monitoring-a-specific-path","title":"Monitoring a specific path","text":"

        Info

        Lagoon does not provide any monitoring capabilties out of the box, only labels and annotations. Check with your Lagoon administrator if monitoring is supported.

        Lagoon will add the label lagoon.sh/primaryIngress=true to the first route defined in the .lagoon.yml file for an environment.

        If a specific path on a route requires monitoring, define monitoring-path with the path to use. Lagoon will add this path to the annotation monitor.stakater.com/overridePath to the route.

        .lagoon.yml
        - \"www.example.com\":\nmonitoring-path: \"/bypass-cache\"\n

        Info

        The annotation monitor.stakater.com/overridePath used by monitoring-path references the stakater monitoring controller, this is not used by Lagoon. This annotation will eventually be replaced with a lagoon.sh scoped annotation in the future.

        "},{"location":"concepts-basics/lagoon-yml/#ingress-annotations","title":"Ingress annotations","text":"

        Warning

        Route/Ingress annotations are only supported by projects that deploy into clusters that run nginx-ingress controllers! Check with your Lagoon administrator if this is supported.

        • annotations can be a YAML map of annotations supported by the nginx-ingress controller. This is specifically useful for easy redirects and other configurations.
        "},{"location":"concepts-basics/lagoon-yml/#restrictions","title":"Restrictions","text":"

        Some annotations are disallowed or partially restricted in Lagoon. The table below describes these rules.

        If your .lagoon.yml contains one of these annotations it will cause a build failure.

        Annotation Notes nginx.ingress.kubernetes.io/auth-snippet Disallowed nginx.ingress.kubernetes.io/configuration-snippet Restricted to rewrite, add_header, set_real_ip, and more_set_headers directives. nginx.ingress.kubernetes.io/modsecurity-snippet Disallowed nginx.ingress.kubernetes.io/server-snippet Restricted to rewrite, add_header, set_real_ip, and more_set_headers directives. nginx.ingress.kubernetes.io/stream-snippet Disallowed nginx.ingress.kubernetes.io/use-regex Disallowed"},{"location":"concepts-basics/lagoon-yml/#ingress-annotations-redirects","title":"Ingress annotations redirects","text":"

        In this example any requests to example.ch will be redirected to https://www.example.ch while keeping folders or query parameters intact (example.com/folder?query -> https://www.example.ch/folder?query).

        .lagoon.yml
        - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\n

        You can of course also redirect to any other URL not hosted on Lagoon, this will direct requests to example.de to https://www.google.com

        .lagoon.yml
        - \"example.de\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com\n
        "},{"location":"concepts-basics/lagoon-yml/#trusted-reverse-proxies","title":"Trusted Reverse Proxies","text":"

        Warning

        Kubernetes will only process a single nginx.ingress.kubernetes.io/server-snippet annotation. Please ensure that if you use this annotation on a non-production environment route that you also include the add_header X-Robots-Tag \"noindex, nofollow\"; annotation as part of your server-snippet. This is needed to stop robots from crawling development environments as the default server-snippet set to prevent this in development environments in the ingress templates will get overwritten with any server-snippets set in .lagoon.yml.

        Some configurations involve a reverse proxy (like a CDN) in front of the Kubernetes clusters. In these configurations, the IP of the reverse proxy will appear as the REMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR headers field in your applications. The original IP of the requester can be found in the HTTP_X_ORIGINAL_FORWARDED_FOR header.

        If you want the original IP to appear in the REMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR headers, you need to tell the ingress which reverse proxy IPs you want to trust:

        .lagoon.yml
        - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/server-snippet: |\nset_real_ip_from 1.2.3.4/32;\n

        This example would trust the CIDR 1.2.3.4/32 (the IP 1.2.3.4 in this case). Therefore if there is a request sent to the Kubernetes cluster from the IP 1.2.3.4 the X-Forwarded-For Header is analyzed and its contents injected into REMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR headers.

        "},{"location":"concepts-basics/lagoon-yml/#environmentsnametypes","title":"Environments.[name].types","text":"

        The Lagoon build process checks the lagoon.type label from the docker-compose.yml file in order to learn what type of service should be deployed (read more about them in the documentation of docker-compose.yml).

        Sometimes you might want to override the type just for a single environment, and not for all of them. For example, if you want a standalone MariaDB database (instead of letting the Service Broker/operator provision a shared one) for your non-production environment called develop:

        service-name: service-type

        • service-name is the name of the service from docker-compose.yml you would like to override.
        • service-type the type of the service you would like to use in your override.

        Example for setting up MariaDB_Galera:

        .lagoon.yml
        environments:\ndevelop:\ntypes:\nmariadb: mariadb-single\n
        "},{"location":"concepts-basics/lagoon-yml/#environmentsnametemplates","title":"environments.[name].templates","text":"

        The Lagoon build process checks the lagoon.template label from the docker-compose.yml file in order to check if the service needs a custom template file (read more about them in the documentation of docker-compose.yml).

        Sometimes you might want to override the template just for a single environment, and not for all of them:

        service-name: template-file

        • service-name is the name of the service from docker-compose.yml you would like to override.
        • template-file is the path and name of the template to use for this service in this environment.
        "},{"location":"concepts-basics/lagoon-yml/#example-template-override","title":"Example Template Override","text":".lagoon.yml
        environments:\nmain:\ntemplates:\nmariadb: mariadb.main.deployment.yml\n
        "},{"location":"concepts-basics/lagoon-yml/#environmentsnamerollouts","title":"environments.[name].rollouts","text":"

        The Lagoon build process checks the lagoon.rollout label from the docker-compose.yml file in order to check if the service needs a special rollout type (read more about them in the documentation of docker-compose.yml)

        Sometimes you might want to override the rollout type just for a single environment, especially if you also overwrote the template type for the environment:

        service-name: rollout-type

        • service-name is the name of the service from docker-compose.yml you would like to override.
        • rollout-type is the type of rollout. See documentation of docker-compose.yml) for possible values.
        "},{"location":"concepts-basics/lagoon-yml/#custom-rollout-type-example","title":"Custom Rollout Type Example","text":".lagoon.yml
        environments:\nmain:\nrollouts:\nmariadb: statefulset\n
        "},{"location":"concepts-basics/lagoon-yml/#environmentsnameautogenerateroutes","title":"environments.[name].autogenerateRoutes","text":"

        This allows for any environments to get autogenerated routes when route autogeneration is disabled.

        .lagoon.yml
        routes:\nautogenerate:\nenabled: false\nenvironments:\ndevelop:\nautogenerateRoutes: true\n
        "},{"location":"concepts-basics/lagoon-yml/#environmentsnamecronjobs","title":"environments.[name].cronjobs","text":"

        Cron jobs must be defined explicitly for each environment, since it is typically not desirable to run the same ones for all environments. Depending on the defined schedule, cron jobs may run as a Kubernetes native CronJob or as an in-pod cron job via the crontab of the defined service.

        "},{"location":"concepts-basics/lagoon-yml/#cron-job-example","title":"Cron Job Example","text":".lagoon.yml
        cronjobs:\n- name: Hourly Drupal Cron\nschedule: \"M * * * *\" # Once per hour, at a random minute.\ncommand: drush cron\nservice: cli\n- name: Nightly Drupal Cron\nschedule: \"M 0 * * *\" # Once per day, at a random minute from 00:00 to 00:59.\ncommand: drush cron\nservice: cli\n
        • name: Any name that will identify the purpose and distinguish it from other cron jobs.
        • schedule: The schedule for executing the cron job. Lagoon uses an extended version of the crontab format. If you're not sure about the syntax, use a crontab generator.

          • You can specify M for the minute, and your cron job will run once per hour at a random minute (the same minute each hour), or M/15 to run it every 15 mins, but with a random offset from the hour (like 6,21,36,51). It is a good idea to spread out your cron jobs using this feature, rather than have them all fire off on minute 0.
          • You can specify H for the hour, and your cron job will run once per day at a random hour (the same hour every day), or H(2-4) to run it once per day within the hours of 2-4.

        Timezones:

        • The default timezone for cron jobs is UTC.
        • Native cron jobs use the timezone of the node, which is UTC.
        • In-pod cron jobs use the timezone of the defined service, which can be configured to something other than UTC.
        • command: The command to execute. This executes in the WORKDIR of the service. For Lagoon images, this is /app.

        Warning

        Cronjobs may run in-pod, via crontab, which doesn't support multiline commands. If you need a complex or multiline cron command, you must put it in a script that can be used as the command. Consider whether a pre- or post-rollout task would work.

        Danger

        Cronjobs run in Kubernetes pods, which means they can be interrupted due to pod rescheduling. Therefore when creating a cronjob you must ensure that the command can be safely interrupted and re-run at the next cron interval.

        • service: Which service of your project to run the command in. For most projects, this should be the cli service.
        "},{"location":"concepts-basics/lagoon-yml/#polysite","title":"Polysite","text":"

        In Lagoon, the same Git repository can be added to multiple projects, creating what is called a polysite. This allows you to run the same codebase, but allow for different, isolated, databases and persistent files. In .lagoon.yml , we currently only support specifying custom routes for a polysite project. The key difference from a standard project is that the environments becomes the second-level element, and the project name the top level.

        To utilize this, you will need to:

        1. Create two (or more) projects in Lagoon, each configured with the same Git URL and production branch, named per your .lagoon.yml (i.e poly-project1 and poly-project2 below)
        2. Add the deploy keys from each project to the Git repository.
        3. Configure the webhook for the repository (if required) - you can then push/deploy. Note that a push to the repository will simultaneously deploy all projects/branches for that Git URL.
        "},{"location":"concepts-basics/lagoon-yml/#polysite-example","title":"Polysite Example","text":".lagoon.yml
        poly-project1:\nenvironments:\nmain:\nroutes:\n- nginx:\n- project1.com\npoly-project2:\nenvironments:\nmain:\nroutes:\n- nginx:\n- project2.com\n
        "},{"location":"concepts-basics/lagoon-yml/#specials","title":"Specials","text":""},{"location":"concepts-basics/lagoon-yml/#api","title":"api","text":"Info

        If you run directly on amazee.io hosted Lagoon you will not need this key set.

        With the key api you can define another URL that should be used by the Lagoon CLI and drush to connect to the Lagoon GraphQL API. This needs to be a full URL with a scheme, like: http://localhost:3000 This usually does not need to be changed, but there might be situations where your Lagoon administrator tells you to do so.

        "},{"location":"concepts-basics/lagoon-yml/#ssh","title":"ssh","text":"Info

        If you run directly on amazee.io hosted Lagoon you will not need this key set.

        With the key ssh you can define another SSH endpoint that should be used by the Lagoon CLI and drush to connect to the Lagoon remote shell service. This needs to be a hostname and a port separated by a colon, like: localhost:2020 This usually does not need to be changed, but there might be situations where your Lagoon administrator tells you to do so.

        "},{"location":"concepts-basics/lagoon-yml/#container-registries","title":"container-registries","text":"

        The container-registries block allows you to define your own private container registries to pull custom or private images.

        To use a private container registry, you will need a username, password, and optionally the url for your registry. If you don't specify a url in your YAML, it will default to using Docker Hub. We also recommend adding a description to your container-registry entries to provide a bit of information about them, some examples are provided.

        There are 2 ways to define the username and password used for your registry user.

        • Define them as environment variables in the API
        • Hardcode them in the .lagoon.yml file (we don't recommend this though)
        "},{"location":"concepts-basics/lagoon-yml/#environment-variables-method","title":"Environment variables method","text":"

        Firstly, define the container-registries in your .lagoon.yml, you don't need to define the username or password here. If you do use a custom registry, you will still need to provide the url, for example:

        .lagoon.yml
        container-registries:\ndocker-hub:\ndescription: \"username and password consumed from environment variables for the default docker.io registry\"\nmy-custom-registry:\ndescription: \"username and password consumed from environment variables for my custom registry\"\nurl: my.own.registry.com\nanother-custom-registry:\ndescription: \"password consumed from environment variables for my other registry\"\nusername: myotheruser\nurl: my.other.registry.com\n

        If you do define a username in the .lagoon.yml you don't need to add the associated variable, but if you do add the variable, the value of the variable will be prefered.

        Next, create environment variables in the Lagoon API with the type container_registry:

        • lagoon add variable -p <project_name> -N <registry_username_variable_name> -V <username_goes_here> -S container_registry
        • lagoon add variable -p <project_name> -N <registry_password_variable_name> -V <password_goes_here> -S container_registry
        • (see more on Environment Variables)

        The name of the variables should be the name of the registry defined in the .lagoon.yml file, it should be:

        • uppercase
        • replace - with _
        • have the prefix REGISTRY_
        • have the suffix of _USERNAME or _PASSWORD.

        Some examples of this are:

        • dockerhub would become REGISTRY_DOCKERHUB_USERNAME and REGISTRY_DOCKERHUB_PASSWORD
        • docker-hub would become REGISTRY_DOCKER_HUB_USERNAME and REGISTRY_DOCKER_HUB_PASSWORD
        • my-custom-registry would become REGISTRY_MY_CUSTOM_REGISTRY_USERNAME and REGISTRY_MY_CUSTOM_REGISTRY_PASSWORD
        • lowercased versions may still work if there are no - in them, for example REGISTRY_dockerhub_USERNAME, but the uppercased version will always be chosen above others.
        Legacy method of defining registry password

        A previous method that allowed for the password to be defined using an environment variable, with the name of the variable to be defined in the .lagoon.yml file like so: .lagoon.yml

        container-registries:\ndocker-hub:\nusername: dockerhubuser\npassword: MY_DOCKER_HUB_PASSWORD\n

        the username needs to be provided in this file too, unless the supported variable for defining the username is provided.

        The variable can then ba added to the API like so

        • lagoon add variable -p <project_name> -N MY_DOCKER_HUB_PASSWORD -V <password_goes_here> -S container_registry

        While we will continue to support this method, it may be deprecated in the future, we will ensure that warnings are presented within builds to give time for users to change to the supported method.

        If a supported variable password is provided, it will be used instead of the custom named variable.

        "},{"location":"concepts-basics/lagoon-yml/#hardcoded-values-method","title":"Hardcoded values method","text":"

        You can also define the password directly in the .lagoon.yml file in plain text, however we do not recommend this.

        .lagoon.yml
        container-registries:\ndocker-hub:\ndescription: \"the default docker.io registry credentials\"\nusername: dockerhubuser\npassword: MySecretPassword\nmy-custom-registry:\ndescription: \"the credentials for my own registry\"\nurl: my.own.registry.com\nusername: mycustomuser\npassword: MyCustomSecretPassword\n
        "},{"location":"concepts-basics/lagoon-yml/#consuming-a-custom-or-private-container-registry-image","title":"Consuming a custom or private container registry image","text":"

        To consume a custom or private container registry image, you need to update the service inside your docker-compose.yml file to use a build context instead of defining an image:

        .docker-compose.yml
        services:\nmariadb:\nbuild:\ncontext: .\ndockerfile: Dockerfile.mariadb\n

        Once the docker-compose.yml file has been updated to use a build, you need to create the Dockerfile.<service> and then set your private image as the FROM <repo>/<name>:<tag>

        .lagoon.yml
        FROM dockerhubuser/my-private-database:tag\n
        "},{"location":"concepts-basics/lagoon-yml/#example-lagoonyml","title":"Example .lagoon.yml","text":"

        This is an example .lagoon.yml which showcases all possible settings. You will need to adapt it to your project.

        .lagoon.yml
        docker-compose-yaml: docker-compose.yml\nenvironment_variables:\ngit_sha: 'true'\ntasks:\npre-rollout:\n- run:\nname: drush sql-dump\ncommand: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz\nservice: cli\npost-rollout:\n- run:\nname: drush cim\ncommand: drush -y cim\nservice: cli\nshell: bash\n- run:\nname: drush cr\ncommand: drush -y cr\nservice: cli\nroutes:\nautogenerate:\ninsecure: Redirect\nenvironments:\nmain:\nroutes:\n- nginx:\n- example.com\n- example.net\n- \"www.example.com\":\ntls-acme: true\ninsecure: Redirect\nhstsEnabled: true\n- \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\ntypes:\nmariadb: mariadb\ntemplates:\nmariadb: mariadb.main.deployment.yml\nrollouts:\nmariadb: statefulset\ncronjobs:\n- name: drush cron\nschedule: \"M * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nstaging:\ncronjobs:\n- name: drush cron\nschedule: \"M * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nfeature/feature-branch:\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\n
        "},{"location":"concepts-basics/lagoon-yml/#deprecated","title":"Deprecated","text":"

        These settings have been deprecated and should be removed from use in your .lagoon.yml.

        • routes.autogenerate.insecure

          The None option is equivalent to Redirect.

        • environments.[name].monitoring_urls
        • environments.[name].routes.[service].[route].hsts
        • environments.[name].routes.[service].[route].insecure

          The None option is equivalent to Redirect.

        "},{"location":"concepts-basics/building-blocks/deploy-targets/","title":"Deploy Targets","text":"

        A deploy target tells Lagoon where to deploy your project - into which cluster. A project may have one or more deploy targets, for example, one for production and one for testing. Deploy targets have options that allow for automatic deployment of defined branches, as well as pull requests.

        Read more about deploy targets.

        "},{"location":"concepts-basics/building-blocks/groups/","title":"Groups","text":"

        Groups are made up of users who have roles. An organization can have one or more groups. Each project can be assigned one or more groups. Groups can be assigned to multiple projects. Groups are created independently of projects, and then assigned to them.

        Organizations have a quota to limit the number of groups assigned to it. If you need to change the quota, please contact your Lagoon administrator.

        "},{"location":"concepts-basics/building-blocks/notifications/","title":"Notifications","text":"

        Notifications are how Lagoon informs users about what's going on with their projects. There are several types of notifications:

        • Slack
        • RocketChat
        • Email
        • Webhook
        • Microsoft Teams

        A project can have one or more notifications. Organizations have a notification quota for all of their projects. Notifications are created independently of projects, and can then be assigned to one or more projects.

        Learn how to add notifications step-by-step in the Lagoon UI.

        Learn how to add notifications notifications via the API.

        "},{"location":"concepts-basics/building-blocks/organizations/","title":"Organizations","text":"

        An organization is an entity which can contain one or more projects, groups, users, and notifications. Organizations help control access to projects, making it easy to create groups, add and remove users, and assign groups to projects.

        Organizations add a layer of structure to help imitate life - for example, you may be a project manager who creates an organization to reflect the team working on a specific site. So that organization would contain the project or projects that make up that site, all of the people who need access to work on the site as users in a group called developers, and maybe another group of people who just need access to Lagoon to view the site and any issues, called viewers, each with the appropriate roles.

        Organizations have a quota to limit the number of projects, groups, notifications, and environments that can be assigned to it. If you need to change this quota, please contact your Lagoon administrator.

        Learn more about how to interact with Organizations.

        "},{"location":"concepts-basics/building-blocks/projects/","title":"Projects","text":"

        A project is an application that lives on Lagoon. An organization may have one or more projects. A project may have one or more users, notifications, and at least one deploy target. Organizations have a quota to limit the amount of projects that can be created.

        "},{"location":"concepts-basics/building-blocks/roles/","title":"Roles","text":"

        Roles determine a user's access to projects. Users are given roles in groups and organizations.

        Members of groups can be given the following roles:

        • Guest
        • Reporter
        • Developer
        • Maintainer
        • Owner

        These roles and their permissions are described in more depth here: Role-Based Access Control.

        Members of organizations can be given the following roles:

        • Org Owner
        • Org Viewer

        Changing Quotas

        If you need to change quotas, please contact your Lagoon administrator.

        An organization owner can do everything to do with administering an organization aside from changing quotas. They can add and delete users, groups, projects, deploy targets, and notifcations

        An organization viewer is a read-only role that can only view the organization, but cannot make any changes or additions. They can view the projects, groups, users, and notifications within an organization but cannot modify them.

        A user who has not been assigned as an owner or viewer cannot see the organization.

        "},{"location":"concepts-basics/building-blocks/users/","title":"Users","text":"

        A user is a Lagoon account that allows you to interact with the Lagoon system. A user may belong to one or more organizations and groups, and each group may have a different role granting various permissions. Organizations, groups, and roles grant users access to projects.

        Read more about user roles.

        "},{"location":"contributing-to-lagoon/api-debugging/","title":"API Debugging","text":"

        1 . Ensure the dev script at services/api/package.json includes the following:

        services/api/package.json
        node --inspect=0.0.0.0:9229\n

        2 . Update docker-compose.yml to map the dist folder and expose the 9229 port:

        docker-compose.yml
          api:\nimage: ${IMAGE_REPO:-lagoon}/api\ncommand: yarn run dev\nvolumes:\n- ./services/api/src:/app/services/api/src\n- ./services/api/dist:/app/services/api/dist\ndepends_on:\n- api-db\n- local-api-data-watcher-pusher\n- keycloak\nports:\n- '3000:3000'\n- '9229:9229'\n

        3 . Add the following to .vscode/launch.json:

        .vscode/launch.json
        {\n// Use IntelliSense to learn about possible attributes.\n// Hover to view descriptions of existing attributes.\n// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387.\n\"version\": \"0.2.0\",\n\"configurations\": [\n{\n\"name\": \"Docker: Attach to Node\",\n\"type\": \"node\",\n\"request\": \"attach\",\n\"port\": 9229,\n\"address\": \"localhost\",\n\"outFiles\": [\"${workspaceRoot}/app/services/api/dist/**/*.js\"],\n\"localRoot\": \"${workspaceFolder}/services/api\",\n\"remoteRoot\": \"/app/services/api\",\n\"sourceMaps\": true,\n\"protocol\": \"inspector\"\n}\n]\n}\n

        4 . Rebuild/restart the containers:

        Restart containers
        rm build/api && make build/api && docker compose restart api\n

        5 . Restart VScode.

        "},{"location":"contributing-to-lagoon/developing-lagoon/","title":"Developing Lagoon","text":"

        Development of Lagoon locally can now be performed on a local Kubernetes cluster, or via Docker Compose (as a fallback).

        Note

        The full Lagoon stack relies on a range of upstream projects which are currently incompatible with ARM-based architectures, such as the the M1/M2 Apple Silicon-based machines. For this reason, running or developing lagoon-core or lagoon-remote locally on these architectures is not currently supported. See https://github.com/uselagoon/lagoon/issues/3189 for more information.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#required-command-line-tools","title":"Required command line tools","text":"

        Some tools are required that are not downloaded/linked by the makefile, some systems may have these installed already.

        • envsubst
        • wget

        Mac users can install these via brew:

        Text Only
        brew install wget gettext\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#docker","title":"Docker","text":"

        Docker must be installed to build and run Lagoon locally.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#install-docker-and-docker-compose","title":"Install Docker and Docker Compose","text":"

        Please check the official docs for how to install Docker.

        Docker Compose is included in Docker for Mac installations. For Linux installations see the directions here.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#configure-docker","title":"Configure Docker","text":"

        You will need to update your insecure registries in Docker. Read the instructions here on how to do that. We suggest adding the entire local IPv4 Private Address Spaces to avoid unnecessary reconfiguration between Kubernetes and Docker Compose. e.g. \"insecure-registries\" : [\"172.16.0.0/12\",\"192.168.0.0/16\"],

        "},{"location":"contributing-to-lagoon/developing-lagoon/#allocate-enough-docker-resources","title":"Allocate Enough Docker Resources","text":"

        Running a Lagoon, Kubernetes, or Docker cluster on your local machine consumes a lot of resources. We recommend that you give your Docker host a minimum of 8 CPU cores and 12GB RAM.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#macos-docker-networking","title":"MacOS Docker Networking","text":"

        Unfortunately Docker for Mac runs Docker inside a lightweight VM. This makes some of the functionality that Linux users enjoy, unusable in MacOS. That functionality is the ability to route to container IP addresses within the docker networks directly. On MacOS this is not possible out of the box.

        You can install the following package https://github.com/chipmk/docker-mac-net-connect. What this software does is create a tunnel between the Docker VM and the host and creates routes for the internal docker networks to the host. This allows you to access the Lagoon services in the docker network that is exposed inside of k3d the same way users developing on Linux would.

        Text Only
        # Install via Homebrew\n$ brew install chipmk/tap/docker-mac-net-connect\n# Run the service and register it to launch at boot\n$ sudo brew services start chipmk/tap/docker-mac-net-connect\n# Stop the service\n$ sudo brew services stop chipmk/tap/docker-mac-net-connect\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#build-lagoon-locally","title":"Build Lagoon Locally","text":"

        Warning

        Only consider building Lagoon this way if you intend to develop features or functionality for it, or want to debug internal processes. We will also be providing instruction to install Lagoon without building it (i.e. by using the published releases).

        We're using make (see the Makefile) in order to build the needed Docker images, configure Kubernetes and run tests.

        We have provided a number of routines in the Makefile to cover most local development scenarios. Here we will run through a complete process.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#build-images","title":"Build images","text":"
        1. Here -j8 tells make to run 8 tasks in parallel to speed the build up. Adjust as necessary.
        2. We have set SCAN_IMAGES=false as a default to not scan the built images for vulnerabilities. If set to true, a scan.txt file will be created in the project root with the scan output.
        Build images
        make -j8 build\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#deploy-a-local-lagoon-development-stack-without-test-suites","title":"Deploy a local Lagoon development stack without test suites","text":"

        The make file offers a command that allows you to spin up Lagoon inside of a k3d cluster locally and explore its functionality.

        Using the following make command will create a k3d cluster, install Lagoon and all of the necessary components to get you up and running and ready to explore.

        Deploy local stack
        make k3d/local-stack\n

        Warning

        This can take some time to complete as it will install a lot of components necessary to make Lagoon work. This includes things like ingress-nginx, harbor, and all the additional services to make exploring Lagoon easy.

        At the end of the process, the command will provide some useful information that will get you up and running and able to log in to the UI or using the API with tools like the Lagoon CLI.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#run-the-lagoon-test-suite","title":"Run the Lagoon test-suite","text":"

        If you're developing new functionality in Lagoon and want to make sure the tests complete, you can run the entire test suite using the following options

        1. Start Lagoon test routine using the defaults in the Makefile (all tests).
        Start tests
        make k3d/test\n# or use retest if you already have a local stack running\nmake k3d/retest\n

        Warning

        There are a lot of tests configured to run by default - please consider only testing locally the minimum that you need to ensure functionality. This can be done by specifying or removing tests from the TESTS variable in the Makefile.

        This process will:

        1. Download the correct versions of the local development tools if not installed - k3d, kubectl, helm, jq.
        2. Update the necessary Helm repositories for Lagoon to function.
        3. Ensure all of the correct images have been built in the previous step.
        4. Create a local K3D cluster, which provisions an entire running Kubernetes cluster in a local Docker container. This cluster has been configured to talk to a provisioned image registry that we will be pushing the built Lagoon images to. It has also been configured to allow access to the host filesystem for local development.
        5. Clone Lagoon from https://github.com/uselagoon/lagoon-charts (use the CHARTS_TREEISH variable in the Makefile to control which branch if needed).
        6. Install the Harbor Image registry into the K3D cluster and configure its ingress and access properly.
        7. Docker will push the built images for Lagoon into the Harbor image registry.
        8. It then uses the Makefile from lagoon-charts to perform the rest of the setup steps.
        9. A suitable ingress controller is installed - we use the NGINX Ingress Controller.
        10. A local NFS server provisioner is installed to handle specific volume requests - we use one that handles Read-Write-Many operations (RWX).
        11. Lagoon Core is then installed, using the locally built images pushed to the cluster-local Image Registry, and using the default configuration, which may exclude some services not needed for local testing. The installation will wait for the API and Keycloak to come online.
        12. The DBaaS providers are installed - MariaDB, PostgreSQL and MongoDB. This step provisions standalone databases to be used by projects running locally, and emulates the managed services available via cloud providers (e.g. Cloud SQL, RDS or Azure Database).
        13. Lagoon Remote is then installed, and configured to talk to the Lagoon Core, databases and local storage. The installation will wait for this to complete before continuing.
        14. To provision the tests, the Lagoon Test chart is then installed, which provisions a local Git server to host the test repositories, and pre-configures the Lagoon API database with the default test users, accounts and configuration. It then performs readiness checks before starting tests.
        15. Lagoon will run all the tests specified in the TESTS variable in the Makefile. Each test creates its own project & environments, performs the tests, and then removes the environments & projects. The test runs are output to the console log in the lagoon-test-suite-* pod, and can be accessed one test per container.

        Ideally, all of the tests pass and it's all done!

        "},{"location":"contributing-to-lagoon/developing-lagoon/#view-the-test-progress-and-your-local-cluster","title":"View the test progress and your local cluster","text":"

        The test routine creates a local Kubeconfig file (called kubeconfig.k3d.lagoon in the root of the project, that can be used with a Kubernetes dashboard, viewer or CLI tool to access the local cluster. We use tools like Lens, Octant, kubectl or Portainer in our workflows. Lagoon Core and the tests build in the lagoon-core namespace, Remote is installed in the Lagoon namespace. Each lagoon test environment creates its own namespace to run, so make sure to use the correct context when inspecting.

        In order to use kubectl with the local cluster, you will need to use the correct Kubeconfig. This can be done for every command or it can be added to your preferred tool:

        kubeconfig.k3d.lagoon
        KUBECONFIG=./kubeconfig.k3d.lagoon kubectl get pods -n lagoon\n

        The Helm charts used to build the local Lagoon are cloned into a local folder and symlinked to lagoon-charts.k3d.lagoon where you can see the configuration. We'll cover how to make easy modifications later in this documentation.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#interact-with-your-local-lagoon-cluster","title":"Interact with your local Lagoon cluster","text":"

        The Makefile includes a few simple routines that will make interacting with the installed Lagoon simpler:

        "},{"location":"contributing-to-lagoon/developing-lagoon/#port-forwarding","title":"Port forwarding","text":"

        Clusters deployed by this makefile will provide loadbalancers and individual IPs, but if you choose to you can port-forward some services using the following

        Create local ports
        make k3d/port-forwards\n

        This will create local ports to expose the UI (6060), API (7070) and Keycloak (8080). Note that this logs to stdout, so it should be performed in a secondary terminal/window.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#lagoon-credentialsinformation","title":"Lagoon credentials/information","text":"

        This will retrieve the necessary credentials to interact with the Lagoon.

        Retrieve admin creds
        make k3d/get-lagoon-details\n
        • The JWT is an admin-scoped token for use as a bearer token with your local GraphQL client. See more in our GraphQL documentation.
        • There is a token for use with the \"admin\" user in Keycloak, who can access all users, groups, roles, etc.

        It is also possible to get the command snippet to add the configuration for the local-stack to your lagoon-cli.

        Retrieve admin creds
        make k3d/get-lagoon-cli-details\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#rebuild-lagoon-core-and-push-images","title":"Rebuild Lagoon core and push images","text":"

        This will re-push the images listed in KIND_SERVICES with the correct tag, and redeploy the lagoon-core chart. This is useful for testing small changes to Lagoon services, but does not support \"live\" development. You will need to rebuild these images locally first, e.g rm build/api && make build/api.

        Re-push images
        make k3d/dev\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#patch-with-local-nodejs","title":"Patch with local node.js","text":"

        This will build the typescript services, using your locally installed Node.js (it should be >16.0). It will then:

        Build typescript services
        make k3d/local-dev-patch\n
        • Mount the \"dist\" folders from the Lagoon services into the correct lagoon-core pods in Kubernetes
        • Redeploy the lagoon-core chart with the services running with nodemonwatching the code for changes
        • This will facilitate \"live\" development on Lagoon.
        • Note that occasionally the pod in Kubernetes may require redeployment for a change to show. Clean any build artifacts from those services if you're rebuilding different branches with git clean -dfx as the dist folders are ignored by Git.
        "},{"location":"contributing-to-lagoon/developing-lagoon/#install-simple-logging-support","title":"Install simple Logging support","text":"

        This will create a standalone OpenDistro for Elasticsearch cluster in your local Docker, and configure Lagoon to dispatch all logs (Lagoon and project) to it, using the configuration in lagoon-logging.

        Initiate logging
        make k3d/local-dev-logging\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#re-run-specific-tests","title":"Re run specific tests","text":"

        This will re-run a suite of tests (defined in the TESTS variable) against the existing cluster. It will re-push the images needed for tests (tests, local-git, and the data-watcher-pusher). You can specify tests to run by passing the TESTS variable inline.

        Re-run tests.
        make k3d/retest\n# OR\nmake k3d/retest TESTS='[features-kubernetes]'\n

        If updating a test configuration, the tests image will need to be rebuilt and pushed, e.g rm build/tests && make build/tests && make k3d/push-images IMAGES='tests' && make k3d/retest TESTS='[api]'

        "},{"location":"contributing-to-lagoon/developing-lagoon/#push-images","title":"Push images","text":"

        This will push all the images up to the image registry. Specifying IMAGES will tag and push specific images.

        Push all images
        make k3d/push-images\n# OR\nmake k3d/push-images IMAGES='tests local-git'\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#tear-down","title":"Tear down","text":"

        This will remove the K3D Lagoon cluster from your local Docker.

        Remove cluster
        make k3d/clean\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#ansible","title":"Ansible","text":"

        The Lagoon test uses Ansible to run the test suite. Each range of tests for a specific function has been split into its own routine. If you are performing development work locally, select which tests to run, and update the $TESTS variable in the Makefile to reduce the concurrent tests running.

        The configuration for these tests is held in three services:

        • tests is the Ansible test services themselves. The local testing routine runs each individual test as a separate container within a test-suite pod. These are listed below.
        • local-git is a Git server hosted in the cluster that holds the source files for the tests. Ansible pulls and pushes to this repository throughout the tests
        • api-data-watcher-pusher is a set of GraphQL mutations that pre-populates local Lagoon with the necessary Kubernetes configuration, test user accounts and SSH keys, and the necessary groups and notifications. Note that this will wipe local projects and environments on each run.

        The individual routines relevant to Kubernetes are:

        • active-standby-kubernetes runs tests to check active/standby in Kubernetes.
        • api runs tests for the API - branch/PR deployment, promotion.
        • bitbucket, gitlab and github run tests for the specific SCM providers.
        • drupal-php74 runs a single-pod MariaDB, MariaDB DBaaS and a Drush-specific test for a Drupal 8/9 project (drupal-php73 doesn't do the Drush test).
        • drupal-postgres runs a single-pod PostgreSQL and a PostgreSQL DBaaS test for a Drupal 8 project.
        • elasticsearch runs a simple NGINX proxy to an Elasticsearch single-pod.
        • features-variables runs tests that utilize variables in Lagoon.
        • features-kubernetes runs a range of standard Lagoon tests, specific to Kubernetes.
        • features-kubernetes-2 runs more advanced kubernetes-specific tests - covering multi-project and subfolder configurations.
        • nginx, node and python run basic tests against those project types.
        • node-mongodb runs a single-pod MongoDB test and a MongoDB DBaaS test against a Node.js app.
        "},{"location":"contributing-to-lagoon/developing-lagoon/#local-development","title":"Local Development","text":"

        Most services are written in Node.js. As many of these services share similar Node.js code and Node.js packages, we're using a feature of Yarn, called Yarn workspaces. Yarn workspaces need a package.json in the project's root directory that defines the workspaces.

        The development of the services can happen directly within Docker. Each container for each service is set up in a way that its source code is mounted into the running container (see docker-compose.yml). Node.js itself is watching the code via nodemon , and restarts the Node.js process automatically on a change.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#lagoon-commons","title":"lagoon-commons","text":"

        The services not only share many Node.js packages, but also share actual custom code. This code is within node-packages/lagoon-commons. It will be automatically symlinked by Yarn workspaces. Additionally, the nodemon of the services is set up in a way that it checks for changes in node-packages and will restart the node process automatically.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#troubleshooting","title":"Troubleshooting","text":""},{"location":"contributing-to-lagoon/developing-lagoon/#i-cant-build-a-docker-image-for-any-nodejs-based-service","title":"I can't build a Docker image for any Node.js based service","text":"

        Rebuild the images via:

        Rebuild images
            make clean\n    make build\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#i-get-errors-about-missing-node_modules-content-when-i-try-to-build-run-a-nodejs-based-image","title":"I get errors about missing node_modules content when I try to build / run a Node.js based image","text":"

        Make sure to run yarn in Lagoon's root directory, since some services have common dependencies managed by yarn workspaces.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#i-get-an-error-resolving-the-nipio-domains","title":"I get an error resolving the nip.io domains","text":"Error
        Error response from daemon: Get https://registry.172.18.0.2.nip.io/v2/: dial tcp: lookup registry.172.18.0.2.nip.io: no such host\n

        This can happen if your local resolver filters private IPs from results. You can work around this by editing /etc/resolv.conf and adding a line like nameserver 8.8.8.8 at the top to use a public resolver that doesn't filter results.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#i-want-to-be-able-to-test-email-in-a-demo-environment-using-the-lagoon-built-in-ssmtp-configuration-entrypoints","title":"I want to be able to test email in a demo environment using the lagoon built in ssmtp configuration entrypoints","text":"

        This k3d cluster installs a mail catching service that is available at mxout.lagoon.svc:25 within the cluster (it also has a web interface make k3d/get-lagoon-details for details). Some images in lagoon support SSMTP_MAILHUB variable, which can be added to a project using the lagoon-cli, or the following graphql via the API.

        Text Only
        addOrUpdateEnvVariableByName(\n    input: {\n        project: \"lagoon-demo\"\n        scope: RUNTIME\n        name: \"SSMTP_MAILHUB\"\n        value: \"mxout.lagoon.svc:25\"\n    }\n) {\n    id\n}\n
        "},{"location":"contributing-to-lagoon/developing-lagoon/#example-workflows","title":"Example workflows","text":"

        Here are some development scenarios and useful workflows for getting things done.

        "},{"location":"contributing-to-lagoon/developing-lagoon/#add-tests","title":"Add tests","text":"

        An example

        1. Deploy the lagoon and run the test you're modifying.
        Deploy Lagoon
        make k3d/test TESTS=[features-variables]\n
        1. Edit tests/tests/features-variables.yaml and add a test case.
        2. Rebuild the tests image.
        Build tests
        rm build/tests\nmake -j8 build/tests\n
        1. Push the new tests image into the cluster registry.
        Push test image
        make k3d/push-images IMAGES=tests\n
        1. Rerun the tests.
        Re-run tests
        make k3d/retest TESTS=[features-variables]\n
        "},{"location":"contributing-to-lagoon/documentation/","title":"Contributing to Lagoon documentation","text":"

        We really value anything that you can offer us!

        We've made building and viewing the documentation really straightforward, and the team is always ready to help out with reviews or pointers.

        We use mkdocs with the excellent Material theme.

        "},{"location":"contributing-to-lagoon/documentation/#viewing-and-updating-docs-locally","title":"Viewing and updating docs locally","text":"

        From the root of the Lagoon repository (you'll need Docker), run:

        Get local docs up and running.
        docker run --rm -it -p 127.0.0.1:8000:8000 -v ${PWD}:/docs ghcr.io/amazeeio/mkdocs-material\n

        This will start a development server on http://127.0.0.1:8000, configured to live-reload on any updates.

        The customized Docker image contains all the necessary extensions.

        Alternatively, to run the mkdocs package locally, you'll need to install mkdocs, and then install all of the necessary plugins.

        Install mkdocs
        pip3 install -r docs/requirements.txt\nmkdocs serve\n
        "},{"location":"contributing-to-lagoon/documentation/#editing-in-the-cloud","title":"Editing in the Cloud","text":"

        Each documentation page also has an \"edit\" pencil in the top right, that will take you to the correct page in the Git repository.

        Feel free to contribute here, too - you can always use the built-in github.dev web-based editor. It's got basic Markdown previews, but none of the mkdocs loveliness.

        "},{"location":"contributing-to-lagoon/documentation/#how-we-deploy-documentation","title":"How we deploy documentation","text":"

        We use the Deploy MkDocs GitHub Action to build all main branch pushes, and trigger a deployment of the gh-pages branch.

        "},{"location":"contributing-to-lagoon/releasing/","title":"Releasing Lagoon","text":"

        Lagoon has a number of moving parts, making releases quite complicated!

        "},{"location":"contributing-to-lagoon/releasing/#lagoon-core-tags-and-testing","title":"Lagoon-core - tags and testing","text":"
        1. Ensure all the identified pull requests have been merged into main branch for:
          • uselagoon/lagoon
          • uselagoon/build-deploy-tool
          • uselagoon/lagoon-ui
        2. Once you are confident, push the next tag in sequence (minor or patch) to the main branch in the format v2.MINOR.PATCH as per semver. This will trigger a Jenkins build, visible at https://ci.lagoon.sh/blue/organizations/jenkins/lagoon/branches
        3. Whilst this is building, push lightweight tags to the correct commits on lagoon-ui and build-deploy-tool in the format core-v2.MINOR.PATCH. Note that there are no other tags or releases on build-deploy-tool, but lagoon-ui also has it's own semver releases that are based on it's features.
        4. Once the build has completed successfully in Jenkins, head to https://github.com/uselagoon/lagoon-charts to prepare the charts release
        5. In the chart.yaml for the lagoon-core and lagoon-test charts, update the following fields:

          • version: This is the next \"minor\" release of the chart - we usually use minor for a corresponding lagoon-core release
          • appVersion: This is the actual tag of the released lagoon-core
          • artifacthub.io/changes: All that's needed are the two lines in the below snippet, modified for the actual appVersion being released.

          sample chart.yml snippets

          # This is the chart version. This version number should be incremented each\n# time you make changes to the chart and its templates, including the app\n# version.\n# Versions are expected to follow Semantic Versioning (https://semver.org/)\nversion: 1.28.0\n# This is the version number of the application being deployed. This version\n# number should be incremented each time you make changes to the application.\n# Versions are not expected to follow Semantic Versioning. They should reflect\n# the version the application is using.\nappVersion: v2.14.2\n# This section is used to collect a changelog for artifacthub.io\n# It should be started afresh for each release\n# Valid supported kinds are added, changed, deprecated, removed, fixed and security\nannotations:\nartifacthub.io/changes: |\n- kind: changed\ndescription: update Lagoon appVersion to v2.14.2\n
          Only lagoon-core and lagoon-test charts are updated as a result of a lagoon-core release. Follow the lagoon-remote process if there are any other changes.

        6. Create a PR for this chart release, and the Github Actions suite will undertake a full suite of tests:

          • Lint and test charts - matrix: performs a lint and chart install against the current tested version of Kubernetes
          • Lint and test charts - current: performs a lint and chart install against previous/future versions of Kubernetes
          • Lagoon tests: runs the full series of ansible tests against the release.

          Usually, failures in the lint and test charts are well explained (missing/misconfigured chart settings). If a single Lagoon test failes, it may just need re-running. If multiple failures occur, they will need investigating.

        Once those tests have all passed successfully, you can proceed with creating the releases:

        "},{"location":"contributing-to-lagoon/releasing/#lagoon-core-releases-and-release-notes","title":"Lagoon-core - releases and release notes","text":"
        1. In uselagoon/lagoon create a release from the tag pushed earlier. Use the \"Generate release notes\" button to create the changelog. Look at previous releases for what we include in the release - and the lagoon-images link will always be the most recent released version. Note that the links to the charts, lagoon-ui and build-deploy-tool can all be filled in now, but the links won't work until the future steps. Mark this as the latest release and Publish the release.
        2. In uselagoon/build-deploy-tool create a release from the tag pushed earlier. Use the \"Generate release notes\" button to create the changelog - ensuring that the last core-v2.X tag is used, not any other tag. Look at previous releases for what we include in the release - Mark this as the latest release and Publish the release.
        3. In uselagoon/lagoon-ui create a release from the tag pushed earlier. Use the \"Generate release notes\" button to create the changelog - ensuring that the last core-v2.X tag is used, not any other tag. Look at previous releases for what we include in the release - Mark this as the latest release and Publish the release.
        4. In uselagoon/lagoon-charts merge the successful PR, this will create the lagoon-core and lagoon-test releases for you. Edit the resulting lagoon-core chart release to note the corresponding lagoon release in the title and text box, as per previous releases.
        "},{"location":"contributing-to-lagoon/releasing/#lagoon-remote-releases-and-release-notes","title":"Lagoon-remote - releases and release notes","text":"

        Lagoon remote has a release cycle separate to Lagoon Core, and as such, can be released anytime that a dependency sub-chart or service is updated.

        "},{"location":"contributing-to-lagoon/tests/","title":"Tests","text":"

        All of our tests are written with Ansible and mostly follow this approach:

        1. They create a new Git repository.
        2. Add and commit some files from a list of files (in tests/files) into this Git repository.
        3. Push this Git repository to a Git server (either locally or on GitHub).
        4. Send a trigger to a trigger service (for example a webhook to the webhook handler, which is the same as a real webhook that would be sent).
        5. Starts to monitor the URL at which the test would expect something to happen (like deploying a Node.js app that has the Git branch as an HTML text).
        6. Compares the result on the URL with the expected result.

        Lagoon is mostly tested in 3 different ways:

        "},{"location":"contributing-to-lagoon/tests/#1-locally","title":"1. Locally","text":"

        During local development, the best way to test is locally. All tests are started via make. Make will download and build all the required dependencies.

        Make tests
        make tests\n

        This will run all defined tests. If you only want to run a subset of the tests, run make tests-list to see all existing tests and run them individually.

        For example, make tests/node will run the Node.js Docker images tests.

        In order to actually see what is happening inside the microservices, we can use make logs:

        Make logs
        make logs\n

        Or only for a specific service:

        Make logs
        make logs service=webhook-handler\n
        "},{"location":"contributing-to-lagoon/tests/#2-automated-integration-testing","title":"2. Automated integration testing","text":"

        In order to test pull requests that are created against Lagoon, we have a fully automatic integration test running on a dedicated Jenkins instance: https://ci.lagoon.sh. It is defined inside the .Jenkinsfile, and runs automatically for every pull request that is opened.

        This will build all images, start a Kubernetes cluster and run a series of tests.

        The tests can be found here:

        • https://ci.lagoon.sh/blue/organizations/jenkins/lagoon/activity
        "},{"location":"docker-images/commons/","title":"Commons","text":"

        The Lagoon commons Docker image. Based on the official Alpine images.

        This image has no functionality itself, but is instead a base image, intended to be extended and utilized to build other images. All the alpine-based images in Lagoon inherit components from commons.

        "},{"location":"docker-images/commons/#included-tooling","title":"Included tooling","text":"
        • docker-sleep - standardized one-hour sleep
        • fix-permissions - automatically fixes permissions on a given directory to all group read-write
        • wait-for - a small script to ensure that services are up and running in the correct order - based off https://github.com/eficode/wait-for
        • entrypoint-readiness - checks to make sure that long-running entrypoints have completed
        • entrypoints - a script to source all entrypoints under /lagoon/entrypoints/* in an alphabetical/numerical order
        "},{"location":"docker-images/commons/#included-entrypoints","title":"Included entrypoints","text":"

        The list of default entrypoints in this image is found at https://github.com/uselagoon/lagoon-images/tree/main/images/commons/lagoon/entrypoints. Subsequent downstream images will also contribute entrypoints under /lagoon that are run in the eventual image.

        "},{"location":"docker-images/deprecated-images/","title":"Deprecated Images","text":"

        From time to time, the Lagoon team may need to mark images as deprecated.

        This is conveyed in a \"sh.lagoon.image.deprecated\" . It can be viewed in Docker Desktop, via a docker inspect command, or in future releases of Lagoon, highlighted in a build.

        If the image has a suggested replacement, it will be conveyed in a \"sh.lagoon.image.deprecated.suggested\" label attached the deprecated image.

        docker inspect output showing deprecated image
        $ docker inspect amazeeio/mongo:latest\n...\n{\n...\n  \"sh.lagoon.image.deprecated.status\": \"replaced\",\n  \"sh.lagoon.image.deprecated.suggested\": \"docker.io/uselagoon/mongo-4\"\n}\n
        "},{"location":"docker-images/deprecated-images/#changing-the-image","title":"Changing the image","text":"

        In all cases, changing to a suggested or updated image will require a change in your codebase. Any reference to the image in a Dockerfile, or in your docker-compose.yml will need to be updated.

        "},{"location":"docker-images/deprecated-images/#reasons-for-deprecating","title":"Reasons for deprecating","text":"

        We have three main reasons for deprecating an image:

        "},{"location":"docker-images/deprecated-images/#replaced","title":"Replaced","text":"

        An image will be marked as \"replaced\" when the image reference needs to be changed. This could be because of a naming change, a repository change, or a versioning change. In these cases a new image will usually be recommended for use instead, and using it should be a fairly easy switch.

        Some examples of this are:

        • the migration from amazeeio/{image} to uselagoon/{image} - these images should be identical
        • the versioning of an image from uselagoon/mongo to uselagoon/mongo-4 - these images should be identical
        "},{"location":"docker-images/deprecated-images/#end-of-life","title":"End of Life","text":"

        An image will be marked as \"endoflife\" when the version published is no longer actively supported or maintained upstream. In these cases a new image will usually be recommended for use instead, but upgrading to it may require updating some of your application code, so should always be tested thoroughly. Also note that any suggested image may also be marked as endoflife (especially if the upstream moves quickly)

        Some examples of this are:

        • PHP 8.0 reached EOL in November 2023, and any uselagoon/php-8.0-{variant} image will suggest uselagoon/php-8.3-{variant} as it is the current latest release of PHP. Upgrades here may be straightforward as it's within a major version.
        • Python 2.7 reached EOL in January 2020, and the uselagoon/php-2.7 images will suggest uselagoon/python-3.12 as it is the current latest release of Python. Upgrades here will be complex, owing to it being a major version change.
        "},{"location":"docker-images/deprecated-images/#discontinued","title":"Discontinued","text":"

        An image will be marked as \"discontinued when the variant is no longer being published by the Lagoon team (although the upstream may still be supported). In these cases a replacement image may be suggested, but any migration will be involved, and require updating of application code, client libraries, data directories etc, or removal of functionality completely.

        • A CKAN variant of Python 2.7 image uselagoon/python-2.7-ckan stopped being published in August 2021 and no replacement is suggested.
        • An AthenaPDF image uselagoon/athenapdf-service stopped being published in October 2022 and no replacement image is suggested.
        • An Elasticsearch 7 image uselagoon/elasticsearch-7 stopped being published in April 2023 due to licensing concerns, and although images may suggest uselagoon/opensearch-2 - any upgrade here will be extremely involved.
        "},{"location":"docker-images/deprecated-images/#amazeeio-image-variants","title":"\"amazeeio/\" image variants","text":"

        Historically, all Lagoon images were dual published to the uselagoon and amazeeio Docker Hub organizations.

        In August 2024, we ceased this dual-publishing model, and have used the deprecated image tooling to suggest the correct replacements.

        We encourage anyone still using the amazeeio variants to switch to the uselagoon variants as soon as possible.

        As well as being easier for us to maintain, the uselagoon versions:

        • Are routinely published and updated. No amazeeio image will be updated beyond July 2024.
        • Are published as multi-architecture images by default, so will work natively on Linux, Windows or MacOS machines.
        • Are free from any rate-limit restrictions, as the uselagoon organization is Docker Sponsored Open Source
        "},{"location":"docker-images/mariadb/","title":"MariaDB","text":"

        MariaDB is the open source successor to MySQL.

        The Lagoon MariaDB image Dockerfile. Based on the official packages mariadb and mariadb-client provided by the the upstream Alpine image.

        This Dockerfile is intended to be used to set up a standalone MariaDB database server.

        • 10.4 (available for compatibility only, no longer officially supported) - uselagoon/mariadb-10.4
        • 10.5 Dockerfile (Alpine 3.14 Support until May 2023) - uselagoon/mariadb-10.5
        • 10.6 Dockerfile (Alpine 3.16 Support until May 2024) - uselagoon/mariadb-10.6
        • 10.11 Dockerfile (Alpine 3.18 Support until May 2025) - uselagoon/mariadb-10.11

        Info

        As these images are not built from the upstream MariaDB images, their support follows a different cycle - and will only receive updates as long as the underlying Alpine images receive support - see https://alpinelinux.org/releases/ for more information. In practice, most MariaDB users will only be running these containers locally - the production instances will use the Managed Cloud Databases provided by the DBaaS Operator

        "},{"location":"docker-images/mariadb/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        The default exposed port of MariaDB containers is port 3306.

        To allow Lagoon to select the best way to run the MariaDB container, use lagoon.type: mariadb - this allows the DBaaS operator to provision a cloud database if available in the cluster. Use lagoon.type: mariadb-single to specifically request MariaDB in a container. Persistent storage is always provisioned for MariaDB containers at /var/lib/mysql.

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        • readiness-probe.sh script to check when MariaDB container is ready.
        "},{"location":"docker-images/mariadb/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
            mariadb:\nimage: uselagoon/mariadb-10.6-drupal:latest\nlabels:\n# tells Lagoon this is a MariaDB database\nlagoon.type: mariadb\nports:\n# exposes the port 3306 with a random local port, find it with `docker compose port mariadb 3306`\n- \"3306\"\nvolumes:\n# mounts a named volume at the default path for MariaDB\n- db:/var/lib/mysql\n
        "},{"location":"docker-images/mariadb/#included-tools","title":"Included tools","text":"
        • mysqltuner.pl - Perl script useful for database parameter tuning.
        • mysql-backup.sh - Script for automating the daily MySQL backups on development environment.
        • pwgen - Utility to generate random and complex passwords.
        "},{"location":"docker-images/mariadb/#included-mycnf-configuration-file","title":"Included my.cnf configuration file","text":"

        The image ships a default MariaDB configuration file, optimized to work on Lagoon. Some options are configurable via environment variables.

        "},{"location":"docker-images/mariadb/#environment-variables","title":"Environment Variables","text":"Environment Variable Default Description MARIADB_DATABASE lagoon Database name created at startup. MARIADB_USER lagoon Default user created at startup. MARIADB_PASSWORD lagoon Password of default user created at startup. MARIADB_ROOT_PASSWORD Lag00n MariaDB root user's password. MARIADB_CHARSET utf8mb4 Set the server charset. MARIADB_COLLATION utf8mb4_bin Set server collation. MARIADB_MAX_ALLOWED_PACKET 64M Set the max_allowed_packet size. MARIADB_INNODB_BUFFER_POOL_SIZE 256M Set the MariaDB InnoDB buffer pool size. MARIADB_INNODB_BUFFER_POOL_INSTANCES 1 Number of InnoDB buffer pool instances. MARIADB_INNODB_LOG_FILE_SIZE 64M Size of InnoDB log file. MARIADB_LOG_SLOW (not set) Variable to control the save of slow queries. MARIADB_LOG_QUERIES (not set) Variable to control the save of ALL queries. BACKUPS_DIR /var/lib/mysql/backup Default path for databases backups. MARIADB_DATA_DIR /var/lib/mysql Path of the MariaDB data dir, be careful, changing this can occur data loss! MARIADB_COPY_DATA_DIR_SOURCE (not set) Path which the entrypoint script of mariadb will use to copy into the defined MARIADB_DATA_DIR, this can be used for prepopulating the MariaDB with a database. The scripts expects actual MariaDB data files and not a sql file! Plus it only copies data if the destination does not already have a mysql datadir in it.

        If the LAGOON_ENVIRONMENT_TYPE variable is set to production, performances are set accordingly by using MARIADB_INNODB_BUFFER_POOL_SIZE=1024 and MARIADB_INNODB_LOG_FILE_SIZE=256.

        "},{"location":"docker-images/mongodb/","title":"MongoDB","text":"

        MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB is a document database, which means it stores data in JSON-like documents.

        • from mongodb.com
        "},{"location":"docker-images/mongodb/#supported-versions","title":"Supported Versions","text":"

        4.0 Dockerfile - uselagoon/mongo-4

        This Dockerfile is intended to be used to set up a standalone MongoDB database server.

        "},{"location":"docker-images/mongodb/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user, and therefore also on Kubernetes or OpenShift.
        "},{"location":"docker-images/mysql/","title":"MySQL","text":"

        MySQL is a widely used, open-source relational database management system (RDBMS).

        The Lagoon MySQL image Dockerfile. Based on the official upstream docker image mysql (Oracle Linux variant).

        This Dockerfile is intended to be used to set up a standalone MySQL database server, intended for use in Local Development

        • 8.0 Dockerfile (Extended Support until April 2026) - uselagoon/mysql-8.0
        • 8.4 Dockerfile (Extended Support until April 2032) - uselagoon/mysql-8.4

        Info

        These images are not intended as drop-in alernatives to MariaDB images, and as such, may require customization to run in local development environments

        "},{"location":"docker-images/mysql/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        The default exposed port of MySQL containers is port 3306.

        To allow Lagoon to select the best way to run the MySQL container, use lagoon.type: mariadb - this allows the DBaaS operator to provision a cloud database if available in the cluster. Use lagoon.type: mariadb-single to specifically request MySQL in a container. Persistent storage is always provisioned for MySQL containers at /var/lib/mysql.

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        • readiness-probe.sh script to check when MySQL container is ready.
        "},{"location":"docker-images/mysql/#docker-composeyml-snippet-for-non-drupal-projects","title":"docker-compose.yml snippet for non-Drupal projects","text":"docker-compose.yml
            mysql:\nimage: uselagoon/mysql-8.4:latest\nlabels:\n# tells Lagoon this is a MariaDB-compatible database\nlagoon.type: mariadb\nports:\n# exposes the port 3306 with a random local port, find it with `docker compose port mysql 3306`\n- \"3306\"\nvolumes:\n# mounts a named volume at the default path for MySQL\n- db:/var/lib/mysql\n
        "},{"location":"docker-images/mysql/#docker-composeyml-snippet-for-drupal-projects","title":"docker-compose.yml snippet for Drupal projects","text":"docker-compose.yml
            mariadb:\nimage: uselagoon/mysql-8.4:latest\nlabels:\n# tells Lagoon this is a MariaDB-compatible database\nlagoon.type: mariadb\nports:\n# exposes the port 3306 with a random local port, find it with `docker compose port mariadb 3306`\n- \"3306\"\nenvironment:\n# These override the default credentials to match what Drupal is hardwired to expect in Lagoon\n- MYSQL_DATABASE=drupal\n- MYSQL_USER=drupal\n- MYSQL_PASSWORD=drupal\nvolumes:\n# mounts a named volume at the default path for MariaDB\n- db:/var/lib/mysql\n
        "},{"location":"docker-images/mysql/#included-tools","title":"Included tools","text":"
        • mysqltuner.pl - Perl script useful for database parameter tuning.
        • mysql-backup.sh - Script for automating the daily MySQL backups on development environment.
        • pwgen - Utility to generate random and complex passwords.
        "},{"location":"docker-images/mysql/#included-mycnf-configuration-file","title":"Included my.cnf configuration file","text":"

        The image ships a default MySQL configuration file, optimized to work on Lagoon. Some options are configurable via environment variables.

        "},{"location":"docker-images/mysql/#environment-variables","title":"Environment Variables","text":"Environment Variable Default Description MYSQL_DATABASE lagoon Database name created at startup. MYSQL_USER lagoon Default user created at startup. MYSQL_PASSWORD lagoon Password of default user created at startup. MYSQL_ROOT_PASSWORD Lag00n MySQL root user's password. MYSQL_CHARSET utf8mb4 Set the server charset. MYSQL_COLLATION utf8mb4_bin Set server collation. MYSQL_MAX_ALLOWED_PACKET 64M Set the max_allowed_packet size. MYSQL_INNODB_BUFFER_POOL_SIZE 256M Set the MySQL InnoDB buffer pool size. MYSQL_INNODB_BUFFER_POOL_INSTANCES 1 Number of InnoDB buffer pool instances. MYSQL_INNODB_LOG_FILE_SIZE 64M Size of InnoDB log file. MYSQL_LOG_SLOW (not set) Variable to control the save of slow queries. MYSQL_LOG_QUERIES (not set) Variable to control the save of ALL queries. BACKUPS_DIR /var/lib/mysql/backup Default path for databases backups. MYSQL_DATA_DIR /var/lib/mysql Path of the MySQL data dir, be careful, changing this can occur data loss! MYSQL_COPY_DATA_DIR_SOURCE (not set) Path which the entrypoint script of MySQL will use to copy into the defined MYSQL_DATA_DIR, this can be used for prepopulating the MySQL with a database. The scripts expects actual MySQL data files and not a sql file! Plus it only copies data if the destination does not already have a MySQL datadir in it.

        If the LAGOON_ENVIRONMENT_TYPE variable is set to production, performances are set accordingly by using MYSQL_INNODB_BUFFER_POOL_SIZE=1024 and MYSQL_INNODB_LOG_FILE_SIZE=256.

        "},{"location":"docker-images/nginx/","title":"NGINX","text":"

        The Lagoon nginx image Dockerfile. Based on the official openresty/openresty images.

        This Dockerfile is intended to be used as a base for any web servers within Lagoon.

        "},{"location":"docker-images/nginx/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        The default exposed port of NGINX containers is port 8080.

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        • The files within /etc/nginx/* are parsed through envplate with a container-entrypoint.
        "},{"location":"docker-images/nginx/#included-nginx-configuration-static-filesconf","title":"Included NGINX configuration (static-files.conf)","text":"

        Warning

        By default NGINX only serves static files - this can be used for static sites that don't require a database or PHP components: for example, static site generators like Hugo, Jekyll or Gatsby.

        If you need PHP, have a look at the php-fpm image and use nginx and php-fpm in tandem.

        Build the content during the build process and inject it into the nginx container.

        "},{"location":"docker-images/nginx/#helpers","title":"Helpers","text":""},{"location":"docker-images/nginx/#redirects-mapconf","title":"redirects-map.conf","text":"

        In order to create redirects, we have redirects-map.conf in place. This helps you to redirect marketing domains to sub-sites or do non-www to www redirects. If you have a lot of redirects, we suggest having redirects-map.conf stored next to your code for easier maintainability.

        Note

        If you only have a few redirects, there's a handy trick to create the redirects with a RUN command in your nginx.dockerfile.

        Here's an example showing how to redirect www.example.com to example.com and preserve the request:

        Redirect
        RUN echo \"~^www.example.com http://example.com\\$request_uri;\" >> /etc/nginx/redirects-map.conf\n

        To get more details about the various types of redirects that can be achieved, see the documentation within the redirects-map.conf directly.

        After you put the redirects-map.conf in place, you also need to include it in your nginx.dockerfile in order to get the configuration file into your build.

        nginx.dockerfile
        COPY redirects-map.conf /etc/nginx/redirects-map.conf\n
        "},{"location":"docker-images/nginx/#basic-authentication","title":"Basic Authentication","text":"

        Basic authentication is enabled automatically when the BASIC_AUTH_USERNAME and BASIC_AUTH_PASSWORD environment variables are set.

        Warning

        Automatic basic auth configuration is provided for convenience. It should not be considered a secure method of protecting your website or private data.

        "},{"location":"docker-images/nginx/#environment-variables","title":"Environment Variables","text":"

        Some options are configurable via environment variables.

        Environment Variable Default Description BASIC_AUTH restricted Set to off to disable basic authentication. BASIC_AUTH_USERNAME (not set) Username for basic authentication. BASIC_AUTH_PASSWORD (not set) Password for basic authentication (unencrypted). FAST_HEALTH_CHECK (not set) Set to true to redirect GET requests from certain user agents (StatusCake, Pingdom, Site25x7, Uptime, nagios) to the lightweight Lagoon service healthcheck."},{"location":"docker-images/nodejs/","title":"Node.js","text":"

        The Lagoon Node.js Docker image. Based on the official Node Alpine images.

        "},{"location":"docker-images/nodejs/#supported-versions","title":"Supported Versions","text":"

        We ship 2 versions of Node.js images: the normal node:version image and the node:version-builder.

        The builder variant of those images comes with additional tooling that is needed when you build Node.js apps (such as the build libraries, npm and Yarn). For a full list check out their Dockerfile.

        • 12 (available for compatibility only, no longer officially supported) - uselagoon/node-12
        • 14 (available for compatibility only, no longer officially supported) - uselagoon/node-14
        • 16 (available for compatibility only, no longer officially supported) - uselagoon/node-16
        • 18 Dockerfile (Security Support until April 2025) - uselagoon/node-18
        • 20 Dockerfile (Security Support until April 2026) - uselagoon/node-20
        • 22 Dockerfile (Security Support until April 2027) - uselagoon/node-22

        Tip

        We stop updating EOL Node.js images usually with the Lagoon release that comes after the officially communicated EOL date: https://nodejs.org/en/about/releases/.

        "},{"location":"docker-images/nodejs/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        The default exposed port of Node.js containers is port 3000.

        Persistent storage is configurable in Lagoon, using the lagoon.type: node-persistent. See the docs for more info

        Use the following labels in your docker-compose.yml file to configure it:

        • lagoon.persistent = use this to define the path in the container to use as persistent storage - e.g. /app/files.
        • lagoon.persistent.size = this to tell Lagoon how much storage to assign this path.
        • If you have multiple services that share the same storage, use this lagoon.persistent.name = (optional) use this to tell Lagoon to use the storage defined in another named service.
        "},{"location":"docker-images/nodejs/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
            node:\nbuild:\n# this configures a build from a Dockerfile in the root folder\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# tells Lagoon this is a node service, configured with 500MB of persistent storage at /app/files\nlagoon.type: node-persistent\nlagoon.persistent: /app/files\nlagoon.persistent.size: 500Mi\nports:\n# local development only\n# this exposes the port 3000 with a random local port\n# find it with `docker compose port node 3000`\n- \"3000\"\nvolumes:\n# local development only\n# mounts a named volume (files) at the defined path for this service to replicate production\n- files:/app/files\n
        "},{"location":"docker-images/opensearch/","title":"OpenSearch","text":"

        OpenSearch is a community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data.

        • from https://opensearch.org/
        "},{"location":"docker-images/opensearch/#supported-versions","title":"Supported versions","text":"
        • 2 Dockerfile - uselagoon/opensearch-2
        "},{"location":"docker-images/opensearch/#environment-variables","title":"Environment Variables","text":"

        Some options are configurable via environment variables.

        Environment Variable Default Description OPENSEARCH_JAVA_OPTS -Xms512m -Xmx512m Sets the memory usage of the OpenSearch container. Both values need be the same value or OpenSearch will not start cleanly."},{"location":"docker-images/opensearch/#known-issues","title":"Known issues","text":"

        On Linux-based systems, the start of the OpenSearch container may fail due to a low vm.max_map_count setting.

        Error
        opensearch_1  | ERROR: [1] bootstrap checks failed\nopensearch_1  | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]\n

        Solution to this issue can be found here.

        "},{"location":"docker-images/php-cli/","title":"PHP-CLI","text":"

        The Lagoon php-cli Docker image. Based on Lagoon php-fpm image, it has all the needed command line tools for daily operations.

        Containers (or pods) started from cli images are responsible for building code for Composer or Node.js based projects.

        The image also contains database clis for both MariaDB and PostgreSQL.

        Info

        This Dockerfile is intended to be used as a base for any cli needs within Lagoon.

        "},{"location":"docker-images/php-cli/#supported-versions","title":"Supported versions","text":"
        • 7.3 (available for compatibility only, no longer officially supported) - uselagoon/php-7.3-cli
        • 7.4 (available for compatibility only, no longer officially supported) - uselagoon/php-7.4-cli
        • 8.0 (available for compatibility only, no longer officially supported) - uselagoon/php-8.0-cli
        • 8.1 Dockerfile (Security Support until November 2024) - uselagoon/php-8.1-cli
        • 8.2 Dockerfile (Security Support until December 2025) - uselagoon/php-8.2-cli
        • 8.3 Dockerfile (Security Support until December 2026) - uselagoon/php-8.3-cli

        All PHP versions use their own Dockerfiles.

        "},{"location":"docker-images/php-cli/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        • COMPOSER_ALLOW_SUPERUSER=1 removes warning about use of Composer as root.
        • 80-shell-timeout.sh script checks if containers are running in a Kubernetes environment and then set a 10 minutes timeout to idle cli pods.
        • cli containers use an SSH key injected by Lagoon or defined into SSH_PRIVATE_KEYenvironment variable.
        "},{"location":"docker-images/php-cli/#included-cli-tools","title":"Included CLI tools","text":"

        The included CLI tools are:

        • composer version 1.9.0 (changeable via COMPOSER_VERSION and COMPOSER_HASH_SHA256)
        • node.js verison 17 (as of Mar 2022)
        • npm
        • yarn
        • mariadb-client
        • postgresql-client
        "},{"location":"docker-images/php-cli/#change-nodejs-version","title":"Change Node.js Version","text":"

        By default this image ships with the nodejs-current package (v17 as of Mar 2022). If you need another version you can remove the current version and install the one of your choice. For example, to install Node.js 16, modify your dockerfile to include:

        Update Node.js version
        RUN apk del nodejs-current \\\n&& apk add --no-cache nodejs=~16\n
        "},{"location":"docker-images/php-cli/#environment-variables","title":"Environment variables","text":"

        Some options are configurable via environment variables. The php-fpm environment variables also apply.

        Name Default Description MARIADB_MAX_ALLOWED_PACKET 64M Controls the max allowed packet for the MySql client."},{"location":"docker-images/php-fpm/","title":"PHP-FPM","text":"

        The Lagoon php-fpm Docker image. Based on the official PHP Alpine images.

        PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.

        • from https://php-fpm.org/

        FastCGI is a way of having server scripts execute time-consuming code just once instead of every time the script is loaded, reducing overhead.

        Info

        This Dockerfile is intended to be used as a base for any PHP needs within Lagoon. This image itself does not create a web server, rather a php-fpm fastcgi listener. You may need to adapt the php-fpm pool config.

        "},{"location":"docker-images/php-fpm/#supported-versions","title":"Supported versions","text":"
        • 7.3 (available for compatibility only, no longer officially supported) - uselagoon/php-7.3-fpm
        • 7.4 (available for compatibility only, no longer officially supported) - uselagoon/php-7.4-fpm
        • 8.0 (available for compatibility only, no longer officially supported) - uselagoon/php-8.0-fpm
        • 8.1 Dockerfile (Security Support until November 2024) - uselagoon/php-8.1-fpm
        • 8.2 Dockerfile (Security Support until December 2025) - uselagoon/php-8.2-fpm
        • 8.3 Dockerfile (Security Support until December 2026) - uselagoon/php-8.3-fpm

        All PHP versions use their own Dockerfiles.

        Tip

        We stop updating End of Life (EOL) PHP images usually with the Lagoon release that comes after the officially communicated EOL date: https://www.php.net/supported-versions.php. Previous published versions will remain available.

        "},{"location":"docker-images/php-fpm/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things are already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        • The /usr/local/etc/php/php.ini and /usr/local/etc/php-fpm.conf, plus all files within /usr/local/etc/php-fpm.d/ , are parsed through envplate with a container-entrypoint.
        • See the Dockerfile for installed PHP extensions.
        • To install further extensions, extend your Dockerfile from this image. Install extensions according to the docs, under the heading How to install more PHP extensions.
        "},{"location":"docker-images/php-fpm/#included-php-config","title":"Included PHP config","text":"

        The included PHP config contains sensible values that will make the creation of PHP pools config easier. Here is a list of some of these. Check /usr/local/etc/php.ini, /usr/local/etc/php-fpm.conf for all of them:

        Value Details max_execution_time = 900 Changeable via PHP_MAX_EXECUTION_TIME. realpath_cache_size = 256k For handling big PHP projects. memory_limit = 400M For big PHP projects (changeable via PHP_MEMORY_LIMIT). opcache.memory_consumption = 265 For big PHP projects. opcache.enable_file_override = 1 and opcache.huge_code_pages = 1 For faster PHP. display_errors = Off and display_startup_errors = Off For sensible production values (changeable via PHP_DISPLAY_ERRORS and PHP_DISPLAY_STARTUP_ERRORS). upload_max_filesize = 2048M For big file uploads. apc.shm_size = 32m and apc.enabled = 1 Changeable via PHP_APC_SHM_SIZE and PHP_APC_ENABLED.

        Also, php-fpm error logging happens in stderr.

        \ud83d\udca1 If you don't like any of these configs, you have three possibilities:

        1. If they are changeable via environment variables, use environment variables (this is the preferred method, see table of environment variables below).
        2. Create your own fpm-pool config and set via php_admin_value and php_admin_flag.
          1. Learn more about them in this documentation for Running PHP as an Apache module. This documentation refers to Apache, but it is also the case for php-fpm).

            Important:

            1. If you want to provide your own php-fpm pool, overwrite the file /usr/local/etc/php-fpm.d/www.conf with your own config, or rename this file if you want it to have another name. If you don't do that, the provided pool will be started! 2. PHP values with the PHP_INI_SYSTEM changeable mode cannot be changed via an fpm-pool config. They need to be changed either via already provided environment variables or: 3. Provide your own php.ini or php-fpm.conf file (this is the least preferred method).

        "},{"location":"docker-images/php-fpm/#default-fpm-pool","title":"Default fpm-pool","text":"

        This image is shipped with an fpm-pool config (php-fpm.d/www.conf) that creates an fpm-pool and listens on port 9000. This is because we try to provide an image which already covers most needs for PHP, so you don't need to create your own. You are welcome to do so if you like, though!

        Here a short description of what this file does:

        • Listens on port 9000 via IPv4 and IPv6.
        • Uses the pm dynamic and creates between 2-50 children.
        • Re-spawns php-fpm pool children after 500 requests to prevent memory leaks.
        • Replies with pong when making a fastcgi request to /ping (good for automated testing to check if the pool started).
        • catch_workers_output = yes to see PHP errors.
        • clear_env = no to be able to inject PHP environment variables via regular Docker environment variables.
        "},{"location":"docker-images/php-fpm/#environment-variables","title":"Environment Variables","text":"

        Some options are configurable via environment variables.

        Environment Variable Default Description NEWRELIC_ENABLED false Enable NewRelic performance monitoring, needs NEWRELIC_LICENSE be configured. NEWRELIC_LICENSE (not set) NewRelic license to be used. Important: NEWRELIC_ENABLED needs to be set totrue in order for NewRelic to be enabled. NEWRELIC_BROWSER_MONITORING_ENABLED true This enables auto-insertion of the JavaScript fragments for NewRelic browser monitoring. Important: NEWRELIC_ENABLED needs to be set totrue in order for NewRelic to be enabled. NEWRELIC_DISTRIBUTED_TRACING_ENABLED false This enables distributed tracing. Important: NEWRELIC_ENABLED needs to be set totrue in order for NewRelic to be enabled. PHP_APC_ENABLED 1 Can be set to 0 to disable APC. PHP_APC_SHM_SIZE 32m The size of each shared memory segment given. PHP_DISPLAY_ERRORS Off Configures whether errors are printed or hidden. See php.net. PHP_DISPLAY_STARTUP_ERRORS Off Configures whether startup errors are printed or hidden. See php.net. PHP_ERROR_REPORTING Production E_ALL & ~E_DEPRECATED & ~E_STRICT Development: E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE The desired logging level you'd like PHP to use. See php.net. PHP_FPM_PM_MAX_CHILDREN 50 The the maximum number of child processes. See php.net. PHP_FPM_PM_MAX_REQUESTS 500 The number of requests each child process should execute before re-spawning. See php.net. PHP_FPM_PM_MAX_SPARE_SERVERS 2 The desired maximum number of idle server processes. See php.net. PHP_FPM_PM_MIN_SPARE_SERVERS 2 The desired minimum number of idle server processes. See php.net. PHP_FPM_PM_PROCESS_IDLE_TIMEOUT 60s The number of seconds after which an idle process will be killed. See php.net. PHP_FPM_PM_START_SERVERS 2 The number of child processes created on startup. See php.net. PHP_MAX_EXECUTION_TIME 900 Maximum execution time of each script, in seconds. See php.net. PHP_MAX_FILE_UPLOADS 20 The maximum number of files allowed to be uploaded simultaneously. See php.net. PHP_MAX_INPUT_VARS 2000 How many input variables will be accepted. See php.net. PHP_MEMORY_LIMIT 400M Maximum amount of memory a script may consume. See php.net. XDEBUG_ENABLE (not set) Set to true to enable xdebug extension. BLACKFIRE_ENABLED (not set) Set to true to enable blackfire extension. BLACKFIRE_SERVER_ID (not set) Set to Blackfire Server ID provided by Blackfire.io. Needs BLACKFIRE_ENABLED set to true. BLACKFIRE_SERVER_TOKEN (not set) Set to Blackfire Server Token provided by Blackfire.io. Needs BLACKFIRE_ENABLED set to true. BLACKFIRE_LOG_LEVEL 3 Change the log level of the blackfire agent. Available values: log verbosity level (4: debug, 3: info, 2: warning, 1: error) See blackfire.io."},{"location":"docker-images/postgres/","title":"PostgreSQL","text":"

        The Lagoon PostgreSQL Docker image. Based on the official PostgreSQL Alpine images.

        "},{"location":"docker-images/postgres/#supported-versions","title":"Supported versions","text":"
        • 11 (available for compatibility only, no longer officially supported) - uselagoon/postgres-11
        • 12 Dockerfile (Security Support until November 2024) - uselagoon/postgres-12
        • 13 Dockerfile (Security Support until November 2025) - uselagoon/postgres-13
        • 14 Dockerfile (Security Support until November 2026) - uselagoon/postgres-14
        • 15 Dockerfile (Security Support until November 2027) - uselagoon/postgres-15
        • 16 Dockerfile (Security Support until November 2028) - uselagoon/postgres-16

        Tip

        We stop updating EOL PostgreSQL images usually with the Lagoon release that comes after the officially communicated EOL date: https://www.postgresql.org/support/versioning

        "},{"location":"docker-images/postgres/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        The default exposed port of Postgres containers is port 5432.

        To allow Lagoon to select the best way to run the Postgres container, use lagoon.type: postgres - this allows DBaaS operator to provision a cloud database if available in the cluster. Use lagoon.type: postgres-single to specifically request Postgres in a container. Persistent storage is always provisioned for postgres containers at /var/lib/postgresql/data.

        "},{"location":"docker-images/postgres/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
        postgres:\nimage: uselagoon/postgres-14-drupal:latest\nlabels:\n# tells Lagoon this is a Postgres database\nlagoon.type: postgres\nports:\n# exposes the port 5432 with a random local port\n# find it with `docker compose port postgres 5432`\n- \"5432\"\nvolumes:\n# mounts a named volume at the default path for Postgres\n- db:/var/lib/postgresql/data\n
        "},{"location":"docker-images/postgres/#tips-tricks","title":"Tips & Tricks","text":"

        If you have SQL statements that need to be run immediately after container startup to initialize the database, you can place those .sql files in the container's docker-entrypoint-initdb.d directory. Any .sql files contained in that directory are run automatically at startup, as part of bringing the PostgreSQL container up.

        Warning

        These scripts are only run if the container is started with an empty database.

        "},{"location":"docker-images/python/","title":"Python","text":"

        The Lagoon python Docker image. Based on the official Python Alpine images.

        "},{"location":"docker-images/python/#supported-versions","title":"Supported Versions","text":"
        • 2.7 (available for compatibility only, no longer officially supported) - uselagoon/python-2.7
        • 3.7 (available for compatibility only, no longer officially supported) - uselagoon/python-3.7
        • 3.8 Dockerfile (Security Support until October 2024) - uselagoon/python-3.8
        • 3.9 Dockerfile (Security Support until October 2025) - uselagoon/python-3.9
        • 3.10 Dockerfile (Security Support until October 2026) - uselagoon/python-3.10
        • 3.11 Dockerfile (Security Support until October 2027) - uselagoon/python-3.11
        • 3.12 Dockerfile (Security Support until October 2028) - uselagoon/python-3.12

        Tip

        We stop updating and publishing EOL Python images usually with the Lagoon release that comes after the officially communicated EOL date: https://devguide.python.org/versions/#versions. Previous published versions will remain available.

        "},{"location":"docker-images/python/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        The default exposed port of Python containers is port 8800.

        Persistent storage is configurable in Lagoon, using the lagoon.type: python-persistent. See the docs for more info

        Use the following labels in your docker-compose.yml file to configure it: lagoon.persistent = use this to define the path in the container to use as persistent storage - e.g. /app/files lagoon.persistent.size = this to tell Lagoon how much storage to assign this path

        If you have multiple services that share the same storage, use this lagoon.persistent.name = (optional) use this to tell Lagoon to use the storage defined in another named service

        "},{"location":"docker-images/python/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
        python:\nbuild:\n# this configures a build from a Dockerfile in the root folder\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# tells Lagoon this is a python service, configured with 500MB of persistent storage at /app/files\nlagoon.type: python-persistent\nlagoon.persistent: /app/files\nlagoon.persistent.size: 500Mi\nports:\n# local development only\n# this exposes the port 8800 with a random local port\n# find it with `docker compose port python 8800`\n- \"8800\"\nvolumes:\n# local development only\n# mounts a named volume (files) at the defined path for this service to replicate production\n- files:/app/files\n
        "},{"location":"docker-images/rabbitmq/","title":"RabbitMQ","text":"

        The Lagoon RabbitMQ Dockerfile with management plugin installed. Based on the official rabbitmq:3-management image at docker-hub.

        This Dockerfile is intended to be used to set up a standalone RabbitMQ queue broker, as well as a base image to set up a cluster with high availability queue support by default (Mirrored queues).

        By default, the RabbitMQ broker is started as single node. If you want to start a cluster, you need to use the rabbitmq-cluster Docker image, based on rabbitmq image plus the rabbitmq_peer_discovery_k8s plugin.

        "},{"location":"docker-images/rabbitmq/#supported-versions","title":"Supported versions","text":"
        • 3.10 Dockerfile (Security Support until July 2023) - uselagoon/rabbitmq
        "},{"location":"docker-images/rabbitmq/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        • The file /etc/rabbitmq/definitions.json is parsed through envplate with a container-entrypoint.
        "},{"location":"docker-images/rabbitmq/#included-rabbitmq-default-schema-definitionsjson","title":"Included RabbitMQ default schema (definitions.json)","text":"
        • To enable the support for Mirrored Queues, at least one policymust exist.
        • In the definitions.json schema file, minimal entities are defined to make the

          container run: virtualhost (vhost), username , and password to access management

          UI, permissions , and policies.

        By default, a policy called lagoon-ha is created at startup, but it is not active because it doesn't match any queue's name pattern (see default Environment Variables).

        definitions.json
        \"policies\":[\n{\"vhost\":\"${RABBITMQ_DEFAULT_VHOST}\",\"name\":\"lagoon-ha\",\"pattern\":\"${RABBITMQ_DEFAULT_HA_PATTERN}\", \"definition\":{\"ha-mode\":\"exactly\",\"ha-params\":2,\"ha-sync-mode\":\"automatic\",\"ha-sync-batch-size\":5}}\n]\n

        By default, the ha-mode is set to exactly which controls the exact number of mirroring nodes for a queue (mirrors). The number of nodes is controller by ha-params.

        For further information and custom configuration, please refer to official RabbitMQ documentation.

        "},{"location":"docker-images/rabbitmq/#environment-variables","title":"Environment Variables","text":"

        Some options are configurable via environment variables.

        Environment Variable Default Description RABBITMQ_DEFAULT_USER guest Username for management UI access. RABBITMQ_DEFAULT_PASS guest Password for management UI access. RABBITMQ_DEFAULT_VHOST / RabbitMQ main virtualhost. RABBITMQ_DEFAULT_HA_PATTERN ^$ Regular expression to match for mirrored queues."},{"location":"docker-images/redis/","title":"Redis","text":"

        Lagoon Redis image Dockerfile, based on official redis:alpine image.

        This Dockerfile is intended to be used to set up a standalone Redis ephemeral server by default.

        "},{"location":"docker-images/redis/#supported-versions","title":"Supported versions","text":"
        • 5 (available for compatibility only, no longer officially supported) - uselagoon/redis-5 or uselagoon/redis-5-persistent
        • 6 Dockerfile - uselagoon/redis-6 or uselagoon/redis-6-persistent
        • 7 Dockerfile - uselagoon/redis-7 or uselagoon/redis-7-persistent
        "},{"location":"docker-images/redis/#usage","title":"Usage","text":"

        There are 2 different flavors of Redis Images: Ephemeral and Persistent.

        "},{"location":"docker-images/redis/#ephemeral","title":"Ephemeral","text":"

        The ephemeral image is intended to be used as an in-memory cache for applications and will not retain data across container restarts.

        When being used as an in-memory (RAM) cache, the first thing you might want to tune if you have large caches is to adapt the MAXMEMORY variable. This variable controls the maximum amount of memory (RAM) which redis will use to store cached items.

        "},{"location":"docker-images/redis/#persistent","title":"Persistent","text":"

        The persistent Redis image will persist data across container restarts and can be used for queues or application data that will need persistence.

        We don't typically suggest using a persistent Redis for in-memory cache scenarios as this might have unintended side-effects on your application while a Redis container is restarting and loading data from disk.

        "},{"location":"docker-images/redis/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissionsso this image will work with a random user.
        • The files within /etc/redis/* are templated using envplate via a container-entrypoint.
        "},{"location":"docker-images/redis/#included-redisconf-configuration-file","title":"Included redis.conf configuration file","text":"

        The image ships a default Redis configuration file, optimized to work on Lagoon.

        "},{"location":"docker-images/redis/#environment-variables","title":"Environment Variables","text":"

        Some options are configurable via environment variables.

        Environment Variable Default Description DATABASES -1 Default number of databases created at startup. LOGLEVEL notice Define the level of logs. MAXMEMORY 100mb Maximum amount of memory. MAXMEMORYPOLICY allkeys-lru The policy to use when evicting keys if Redis reaches its maximum memory usage. REDIS_PASSWORD disabled Enables authentication feature."},{"location":"docker-images/redis/#custom-configuration","title":"Custom configuration","text":"

        By building on the base image you can include custom configuration. See https://github.com/redis/redis/blob/7.2.5/redis.conf for full documentation of the Redis configuration file.

        "},{"location":"docker-images/redis/#redis-persistent","title":"Redis-persistent","text":"

        Based on the Lagoon redis image, the Lagoon redis-persistent Docker image is intended for use when the Redis service must be utilized in persistent mode (ie. with a persistent volume where keys will be saved to disk).

        It differs from redis only with the FLAVOR environment variable, which will use the respective Redis configuration according to the version of redis in use.

        "},{"location":"docker-images/redis/#troubleshooting","title":"Troubleshooting","text":"

        The Lagoon Redis images all come pre-loaded with the redis-cli command, which allows for querying the Redis service for information and setting config values dynamically. To use this utility, you can simply SSH into your Redis pod by using the instructions here with redis as the pod value then run it from the terminal once you've connected.

        "},{"location":"docker-images/redis/#maximum-memory-policy","title":"Maximum Memory Policy","text":"

        By default, the Lagoon redis images are set to use the allkeys-lru policy. This policy will alow ANY keys stored in Redis to be evicted if/when the Redis service hits its maxmemory limit according to when the key was least recently used.

        For typical installations, this is the ideal configuration, as Drupal may not set a TTL value for each key cached in Redis. If the maxmemory-policy is set to something like volatile-lru and Drupal doesn't provide these TTL tags, this would result in the Redis container filling up, being totally unable to evict ANY keys, and ceasing to accept new cache keys at all.

        More information on Redis' maxmemory policies can be found in Redis' official documentation.

        Proceed with Caution

        Changing this setting can lead to Redis becoming completely full and cause outages as a result.

        "},{"location":"docker-images/redis/#tuning-redis-maxmemory-value","title":"Tuning Redis' maxmemory value","text":"

        Finding the optimal amount of memory to give Redis can be quite the difficult task. Before attempting to tune your Redis cache's memory size, it is prudent to let it run normally for as long as practical, with at least a day of typical usage being the ideal minimum timeframe.

        There are a few high level things you can look at when tuning these memory values:

        • The first thing to check is the percentage of memory in use by Redis currently.
          • If this percentage is less than 50%, you might consider lowering the maxmemory value by 25%.
          • If this percentage is between 50% and 75%, things are running just fine.
          • If this value is greater than 75%, then it's worth looking at other variables to see if maxmemory needs to be increased.
        • If you find that your Redis' memory usage percentage is high, the next thing to look at is the number of key evictions.
          • A large number of key evictions and a memory usage greater than 95% is a fairly good indicator that your redis needs a higher maxmemory setting.
          • If the number of key evictions doesn't seem high and typical response times are reasonable, this is simply indicative of Redis doing its job and managing its allocated memory as expected.
        "},{"location":"docker-images/redis/#example-commands","title":"Example commands","text":"

        The following commands can be used to view information about the Redis service:

        • View all info about the Redis service: redis-cli info
        • View service memory information: redis-cli info memory
        • View service keyspace information: redis-cli info keyspace
        • View service statistics: redis-cli info stats

        It is also possible to set values for the Redis service dynamically without a restart of the Redis service. It is important to note that these dynamically set values will not persist if the pod is restarted (which can happen as a result of a deployment, maintenance, or even just being shuffled from one node to another).

        • Set maxmemory config value dynamically to 500mb: config set maxmemory 500mb
        • Set maxmemory-policy config value dynamically to volatile-lru: config set maxmemory-policy volatile-lru
        "},{"location":"docker-images/ruby/","title":"Ruby","text":"

        The Lagoon ruby Docker image. Based on the official Python Alpine images.

        "},{"location":"docker-images/ruby/#supported-versions","title":"Supported Versions","text":"
        • 3.0 (available for compatibility only, no longer officially supported) - uselagoon/ruby-3.0
        • 3.1 Dockerfile (Security Support until March 2025) - uselagoon/ruby-3.1
        • 3.2 Dockerfile (Security Support until March 2026) - uselagoon/ruby-3.2
        • 3.3 Dockerfile (Security Support until March 2027) - uselagoon/ruby-3.3

        Tip

        We stop updating and publishing EOL Ruby images usually with the Lagoon release that comes after the officially communicated EOL date: https://www.ruby-lang.org/en/downloads/releases/. Previous versions will remain available.

        "},{"location":"docker-images/ruby/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        The default exposed port of ruby containers is port 3000.

        Lagoon has no \"pre-defined\" type for Ruby services, they should be configured with the lagoon.type: generic and a port set with lagoon.port: 3000

        "},{"location":"docker-images/ruby/#docker-composeyml-snippet","title":"docker-compose.yml snippet","text":"docker-compose.yml
        ruby:\nbuild:\n# this configures a build from a Dockerfile in the root folder\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# tells Lagoon this is a generic service, configured to expose port 3000\nlagoon.type: generic\nlagoon.port: 3000\nports:\n# local development only\n# this exposes the port 3000 with a random local port\n# find it with `docker compose port ruby 3000`\n- \"3000\"\n
        "},{"location":"docker-images/solr/","title":"Solr","text":"

        The Lagoon Solr image Dockerfile. Based on the official solr:<version>-alpine images.

        This Dockerfile is intended to be used to set up a standalone Solr server with an initial core mycore.

        "},{"location":"docker-images/solr/#supported-versions","title":"Supported Versions","text":"
        • 5.5 (available for compatibility only, no longer officially supported)
        • 6.6 (available for compatibility only, no longer officially supported)
        • 7.7 (available for compatibility only, no longer officially supported)
        • 7 (available for compatibility only, no longer officially supported) - uselagoon/solr-7
        • 8 Dockerfile - uselagoon/solr-8
        • 9 Dockerfile - uselagoon/solr-9
        "},{"location":"docker-images/solr/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        • 10-solr-port.sh script to fix and check Solr port.
        • 20-solr-datadir.sh script to check if Solr config is compliant for Lagoon. This sets directory paths, and configures the correct lock type.
        "},{"location":"docker-images/solr/#environment-variables","title":"Environment Variables","text":"

        Some options are configurable via environment variables.

        Environment Variable Default Description SOLR_JAVA_MEM 512M Default Java HEAP size (ie. SOLR_JAVA_MEM=\"-Xms10g -Xmx10g\"). SOLR_DATA_DIR /var/solr Path of the solr data dir. Be careful, changing this can cause data loss! SOLR_COPY_DATA_DIR_SOURCE (not set) Path which the entrypoint script of solr will use to copy into the defined SOLR_DATA_DIR, this can be used for prepopulating the Solr with a core. The scripts expects actual Solr data files! Plus it only copies data if the destination does not already have a solr core in it."},{"location":"docker-images/varnish/","title":"Varnish","text":"

        The Lagoon Varnish Docker images. Based on the official Varnish package

        "},{"location":"docker-images/varnish/#supported-versions","title":"Supported versions","text":"
        • 5 (available for compatibility only, no longer officially supported) - uselagoon/varnish-5
        • 6.0 LTS Dockerfile - uselagoon/varnish-6
        • 7 Dockerfile - uselagoon/varnish-7
        "},{"location":"docker-images/varnish/#included-varnish-modules","title":"Included varnish modules","text":"
        • vbox-dynamic - Dynamic backends from DNS lookups and service discovery from SRV records.
        • vbox-bodyaccess - Varnish vmod that lets you access the request body.
        "},{"location":"docker-images/varnish/#lagoon-adaptions","title":"Lagoon adaptions","text":"

        This image is prepared to be used on Lagoon. There are therefore some things already done:

        • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
        "},{"location":"docker-images/varnish/#included-defaultvcl-configuration-file","title":"Included default.vcl configuration file","text":"

        The image ships a default vcl configuration file, optimized to work on Lagoon. Some options are configurable via environments variables (see Environment Variables).

        "},{"location":"docker-images/varnish/#environment-variables","title":"Environment Variables","text":"

        Some options are configurable via environment variables.

        Environment Variable Default Description VARNISH_BACKEND_HOST NGINX Default backend host. VARNISH_BACKEND_PORT 8080 Default listening Varnish port. VARNISH_SECRET lagoon_default_secret Varnish secret used to connect to management. LIBVMOD_DYNAMIC_VERSION 5.2 Default version of vmod-dynamic module. LIBVMOD_BODYACCESS_VERSION 5.0 Default version of vmod-bodyaccess module. HTTP_RESP_HDR_LEN 8k Maximum length of any HTTP backend response header. HTTP_RESP_SIZE 32k Maximum number of bytes of HTTP backend response we will deal with. NUKE_LIMIT 150 Maximum number of objects we attempt to nuke in order to make space for an object body. CACHE_TYPE malloc Type of varnish cache. CACHE_SIZE 500M Cache size. LISTEN 8080 Default backend server port. MANAGEMENT_LISTEN 6082 Default management listening port."},{"location":"installing-lagoon/add-group/","title":"Add Group","text":"Add group
          lagoon add group -N groupname\n
        "},{"location":"installing-lagoon/add-project/","title":"Adding a Project","text":""},{"location":"installing-lagoon/add-project/#add-the-project-to-lagoon","title":"Add the project to Lagoon","text":"
        1. Run this command:

          Add project
          lagoon add project \\\n--git-url <YOUR-GITHUB-REPO-URL> \\\n--deploytarget 1 \\\n--production-environment <YOUR-PROD-ENV> \\\n--branches <THE-BRANCHES-YOU-WANT-TO-DEPLOY> \\\n--project <YOUR-PROJECT-NAME>\n
          • The value for --deploytarget is the ID of your Kubernetes cluster.
          • Your production environment should be the name of the branch you want to have as your production environment.
          • The branches you want to deploy might look like this: \u201c^(main|develop)$\u201d
          • The name of your project is anything you want - \u201cCompany Website,\u201d \u201cexample,\u201d etc.
        2. Go to the Lagoon UI, and you should see your project listed!

        "},{"location":"installing-lagoon/add-project/#add-the-deploy-key-to-your-git-repository","title":"Add the deploy key to your Git repository","text":"

        Lagoon creates a deploy key for each project. You now need to add it as a deploy key in your Git repository to allow Lagoon to download the code.

        1. Run the following command to get the deploy key:

          Get project-key
          lagoon get project-key --project <YOUR-PROJECT-NAME>\n
        2. Copy the key and save it as a deploy key in your Git repository.

        GitHub GitLab Bitbucket

        "},{"location":"installing-lagoon/add-project/#add-the-webhooks-endpoint-to-your-git-repository","title":"Add the webhooks endpoint to your Git repository","text":"

        In order for Lagoon to be able to deploy on code updates, it needs to be connected to your Git repository

        1. Add your Lagoon cluster's webhook endpoint to your Git repository

          • Payload URL: <LAGOON-WEBHOOK-INGRESS>
          • Content Type: JSON
          • Active: Active (allows you to enable/disable as required)
          • Events: Select the relevant events, or choose All. Usually push, branch create/delete are required

        GitHub GitLab Bitbucket

        "},{"location":"installing-lagoon/bulk-storage-provisioner/","title":"Bulk Storage Provisioner","text":""},{"location":"installing-lagoon/bulk-storage-provisioner/#aws-specific-instructions","title":"AWS-specific instructions","text":"

        Info

        The EFS info here is only applicable to AWS installations, but the basic process should be similar for all NFS volumes.

        In order to create the necessary Bulk StorageClass, you will need to have an RWX-capable storage backend.

        In this example, we will provide documentation to configure EFS as a NFS server, and configure that for use with Lagoon

        "},{"location":"installing-lagoon/bulk-storage-provisioner/#requirements","title":"Requirements","text":"
        1. Provision and configure an EFS, taking note of any security group requirements (https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-mount-cmd-dns-name.html)
        2. The DNS name for the mount target of the EFS volume - usually file-system-id.efs.aws-region.amazonaws.com
        3. Familiarity with the NFS CSI driver for Kubernetes - https://github.com/kubernetes-csi/csi-driver-nfs
        "},{"location":"installing-lagoon/bulk-storage-provisioner/#steps","title":"Steps","text":"
        1. Add Helm repository for the NFS CSI driver Add Helm repo
          helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts\n
        2. Configure the bulk StorageClass EFS NFS mount target in a values file. Note that this step also installs a secret into the namespace to handle deleting volumes, as per here

          csi-driver-nfs-storageclass.yaml

          apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\nname: bulk\nprovisioner: nfs.csi.k8s.io\nparameters:\nserver: file-system-id.efs.aws-region.amazonaws.com\nshare: /\ncsi.storage.k8s.io/provisioner-secret-name: \"mount-options\"\ncsi.storage.k8s.io/provisioner-secret-namespace: \"csi-driver-nfs\"\nreclaimPolicy: Delete\nvolumeBindingMode: Immediate\nmountOptions:\n- nfsvers=4.1\n- rsize=1048576\n- wsize=1048576\n- hard\n- timeo=600\n- retrans=2\n- noresvport\n---\napiVersion: v1\nkind: Secret\nmetadata:\nname: mount-options\nnamespace: csi-driver-nfs\nstringData:\nmountOptions: \"nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport\"\n
          3. Install the NFS CSI driver Install NFS CSI Driver
          helm upgrade --install --create-namespace \\\n--namespace csi-driver-nfs --wait \\\ncsi-driver-nfs csi-driver-nfs/csi-driver-nfs\n
          4. Install the StorageClass and secret Install bulk StorageClass and Secret
          kubectl apply -f csi-driver-nfs-storageclass.yaml\n

        "},{"location":"installing-lagoon/create-user/","title":"Create Lagoon user","text":"
        1. Add user via Lagoon CLI:

          Add user
          lagoon add user --email user@example.com --firstName MyFirstName --lastName MyLastName\n
        2. Go to your email and click the password reset link in the email.

        3. Follow the instructions and log in to Lagoon UI with created password.
        4. Add the SSH public key of the user via Settings.
        "},{"location":"installing-lagoon/deploy-project/","title":"Deploy Your Project","text":"
        1. Run the following command to deploy your project:

          Deploy
          lagoon deploy branch -p <YOUR-PROJECT-NAME> -b <YOUR-BRANCH-NAME>\n
        2. Go to the Lagoon UI and take a look at your project - you should now see the environment for this project!

        3. Look in your cluster at your pods list, and you should see the build pod as it begins to clone Git repositories, set up services, etc.See all pods
          kubectl get pods --all-namespaces | grep lagoon-build\n
        "},{"location":"installing-lagoon/gitlab/","title":"GitLab","text":"

        Not needed for *most* installs, but this is configured to integrate Lagoon with GitLab for user and group authentication.

        1. Create Personal Access token in GitLab for a user with admin access.
        2. Create system hooks under your-gitlab.com/admin/hooks pointing to: webhookhandler.lagoon.example.com and define a random secret token.
          1. Enable \u201crepository update events\u201d
        3. Update lagoon-core-values.yml:

          lagoon-core-values.yml
          api:\nadditionalEnvs:\nGITLAB_API_HOST: <<URL of GitLab example: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << Personal Access token with Access to API >>\nGITLAB_SYSTEM_HOOK_TOKEN: << System Hook Secret Token >>\nwebhook-haondler:\nadditionalEnvs:\nGITLAB_API_HOST: <<URL of GitLab example: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << Personal Access token with Access to API >>\nGITLAB_SYSTEM_HOOK_TOKEN: << System Hook Secret Token >>\nwebhooks2tasks:\nadditionalEnvs:\nGITLAB_API_HOST: <<URL of GitLab example: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << Personal Access token with Access to API >>\nGITLAB_SYSTEM_HOOK_TOKEN: << System Hook Secret Token >>\n
        4. Helm update the lagoon-core helmchart.

        5. If you've already created users in Keycloak, delete them.
        6. Run the following command in an API pod:Sync with GitLab
            yarn sync:gitlab:all\n
        "},{"location":"installing-lagoon/install-harbor/","title":"Install Harbor","text":"
        1. Add Helm repository:

          Add Helm repository
          helm repo add harbor https://helm.goharbor.io\n
        2. Consider the optimal configuration of Harbor for your particular circumstances - see their docs for more recommendations:

          1. We recommend using S3-compatible storage for image blobs (imageChartStorage).
          2. We recommend using a managed database service for the Postgres service (database.type).
          3. In high-usage scenarios we recommend using a managed Redis service. (redis.type)
        3. Create the file harbor-values.yml inside of your config directory. The proxy-buffering annotations help with large image pushes:

          harbor-values.yml
          expose:\ningress:\nannotations:\nkubernetes.io/tls-acme: \"true\"\nnginx.ingress.kubernetes.io/proxy-buffering: \"off\"\nnginx.ingress.kubernetes.io/proxy-request-buffering: \"off\"\nhosts:\ncore: harbor.lagoon.example.com\ntls:\nenabled: true\ncertSource: secret\nsecret:\nsecretName: harbor-harbor-ingress\nexternalURL: https://harbor.lagoon.example.com\nharborAdminPassword: <your Harbor Admin Password>\nchartmuseum:\nenabled: false\nclair:\nenabled: false\nnotary:\nenabled: false\ntrivy:\nenabled: false\njobservice:\njobLogger: stdout\n
        4. Install Harbor, checking the requirements for the currently supported Harbor versions:

          Install Harbor
          helm upgrade --install --create-namespace \\\n--namespace harbor --wait \\\n-f harbor-values.yml \\\nharbor harbor/harbor\n
        5. Visit Harbor at the URL you set in harbor.yml.

          1. Username: admin
          2. Password:
          Get Harbor secret
          kubectl -n harbor get secret harbor-core -o jsonpath=\"{.data.HARBOR_ADMIN_PASSWORD}\" | base64 --decode\n
        6. You will need to add the above Harbor credentials to the Lagoon Remote values.yml in the next step, as well as harbor-values.yml.

        "},{"location":"installing-lagoon/install-lagoon-remote/","title":"Install Lagoon Remote","text":"

        Now we will install Lagoon Remote into the Lagoon namespace. The RabbitMQ service is the broker.

        1. Create lagoon-remote-values.yml in your config directory as you did the previous two files, and update the values.

          • rabbitMQPassword
          Get RabbitMQ password
          kubectl -n lagoon-core get secret lagoon-core-broker -o jsonpath=\"{.data.RABBITMQ_PASSWORD}\" | base64 --decode\n
          • rabbitMQHostname
          lagoon-remote-values.yml
          lagoon-core-broker.lagoon-core.svc.local\n
          • taskSSHHost
          Update SSH Host
          kubectl get service lagoon-core-broker-amqp-ext \\\n-o custom-columns=\"NAME:.metadata.name,IP ADDRESS:.status.loadBalancer.ingress[*].ip,HOSTNAME:.status.loadBalancer.ingress[*].hostname\"\n
          • harbor-password
          Get Harbor secret
          kubectl -n harbor get secret harbor-harbor-core -o jsonpath=\"{.data.HARBOR_ADMIN_PASSWORD}\" | base64 --decode\n
        2. Add the Harbor configuration from the Install Harbor step.

          lagoon-remote-values.yml
          lagoon-build-deploy:\nenabled: true\nextraArgs:\n- \"--enable-harbor=true\"\n- \"--harbor-url=https://harbor.lagoon.example.com\"\n- \"--harbor-api=https://harbor.lagoon.example.com/api/\"\n- \"--harbor-username=admin\"\n- \"--harbor-password=<from harbor-harbor-core secret>\"\nrabbitMQUsername: lagoon\nrabbitMQPassword: <from lagoon-core-broker secret>\nrabbitMQHostname: lagoon-core-broker.lagoon-core.svc.cluster.local\nlagoonTargetName: <name of lagoon remote, can be anything>\ntaskSSHHost: <IP of ssh service loadbalancer>\ntaskSSHPort: \"22\"\ntaskAPIHost: \"api.lagoon.example.com\"\ndbaas-operator:\nenabled: true\nmariadbProviders:\nproduction:\nenvironment: production\nhostname: 172.17.0.1.nip.io\nreadReplicaHostnames:\n- 172.17.0.1.nip.io\npassword: password\nport: '3306'\nuser: root\ndevelopment:\nenvironment: development\nhostname: 172.17.0.1.nip.io\nreadReplicaHostnames:\n- 172.17.0.1.nip.io\npassword: password\nport: '3306'\nuser: root\n
        3. Enable ssh-core service account

        4. Install Lagoon Remote:

          Install Lagoon remote
          helm upgrade --install --create-namespace \\\n--namespace lagoon \\\n-f lagoon-remote-values.yml \\\nlagoon-remote lagoon/lagoon-remote\n
        "},{"location":"installing-lagoon/lagoon-backups/","title":"Lagoon Backups","text":"

        Lagoon uses the K8up backup operator: https://k8up.io. Lagoon isn\u2019t tightly integrated with K8up, it\u2019s more that Lagoon can create its resources in a way that K8up can automatically discover and backup.

        Lagoon has been extensively tested with K8up 1.x, but is not compatible with 2.x yet. We recommend using the 1.1.0 chart version (App version v1.2.0).

        1. Create new AWS User with policies:

          example K8up IAM user
          {\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Sid\":\"VisualEditor0\",\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:ListAllMyBuckets\",\n\"s3:CreateBucket\",\n\"s3:GetBucketLocation\"\n],\n\"Resource\":\"*\"\n},\n{\n\"Sid\":\"VisualEditor1\",\n\"Effect\":\"Allow\",\n\"Action\":\"s3:ListBucket\",\n\"Resource\":\"arn:aws:s3:::baas-*\"\n},\n{\n\"Sid\":\"VisualEditor2\",\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\"\n],\n\"Resource\":\"arn:aws:s3:::baas-*/*\"\n}\n]\n}\n
        2. Create k8up-values.yml (customize for your provider):

          k8up-values.yml
          k8up:\nenvVars:\n- name: BACKUP_GLOBALS3ENDPOINT\nvalue: 'https://s3.eu-west-1.amazonaws.com'\n- name: BACKUP_GLOBALS3BUCKET\nvalue: ''\n- name: BACKUP_GLOBALKEEPJOBS\nvalue: '1'\n- name: BACKUP_GLOBALSTATSURL\nvalue: 'https://backup.lagoon.example.com'\n- name: BACKUP_GLOBALACCESSKEYID\nvalue: ''\n- name: BACKUP_GLOBALSECRETACCESSKEY\nvalue: ''\n- name: BACKUP_BACKOFFLIMIT\nvalue: '2'\n- name: BACKUP_GLOBALRESTORES3BUCKET\nvalue: ''\n- name: BACKUP_GLOBALRESTORES3ENDPOINT\nvalue: 'https://s3.eu-west-1.amazonaws.com'\n- name: BACKUP_GLOBALRESTORES3ACCESSKEYID\nvalue: ''\n- name: BACKUP_GLOBALRESTORES3SECRETACCESSKEY\nvalue: ''\ntimezone: Europe/Zurich\n
        3. Install K8up:

          Install K8up Step 1
          helm repo add appuio https://charts.appuio.ch\n
          Install K8up Step 2
          kubectl apply -f https://github.com/vshn/k8up/releases/download/v1.2.0/k8up-crd.yaml\n
          Install K8up Step 3
          helm upgrade --install --create-namespace \\\n--namespace k8up \\\n-f k8up-values.yaml \\\n--version 1.1.0 \\\nk8up appuio/k8up\n
        4. Update lagoon-core-values.yml:

          lagoon-core-values.yml
          s3BAASAccessKeyID: <<Access Key ID for restore bucket>>\ns3BAASSecretAccessKey: <<Access Key Secret for restore bucket>>\n
        5. Redeploy lagoon-core.

        "},{"location":"installing-lagoon/lagoon-cli/","title":"Install the Lagoon CLI","text":"
        1. Check https://github.com/uselagoon/lagoon-cli#install on how to install for your operating system. For macOS and Linux, you can use Homebrew:
          1. brew tap uselagoon/lagoon-cli
          2. brew install lagoon
        2. The CLI needs to know how to communicate with Lagoon, so run the following command:

          Lagoon config
              lagoon config add \\\n--graphql https://YOUR-API-URL/graphql \\\n--ui https://YOUR-UI-URL \\\n--hostname YOUR.SSH.IP \\\n--lagoon YOUR-LAGOON-NAME \\\n--port 22\n
        3. Access Lagoon by authenticating with your SSH key.

          1. In the Lagoon UI (the URL is in values.yml if you forget), go to Settings.
          2. Add your public SSH key.
          3. You need to set the default Lagoon to your Lagoon so that it doesn\u2019t try to use the amazee.io defaults:

            Lagoon config
                lagoon config default --lagoon <YOUR-LAGOON-NAME>\n
        4. Now run lagoon login. Lagoon talks to SSH and authenticates against your public/private key pair, and gets a token for your username.

        5. Verify via lagoon whoami that you are logged in.

        Info

        We don\u2019t generally recommend using the Lagoon Admin role, but you\u2019ll need to create an admin account at first to get started. Ideally, you\u2019ll immediately create another account to work from which is not an admin.

        "},{"location":"installing-lagoon/lagoon-core/","title":"Install Lagoon Core","text":""},{"location":"installing-lagoon/lagoon-core/#install-the-helm-chart","title":"Install the Helm chart","text":"
        1. Add Lagoon Charts repository to your Helm Repositories:

          Add Lagoon Charts repository
          helm repo add lagoon https://uselagoon.github.io/lagoon-charts/\n
        2. Create a directory for the configuration files we will create, and make sure that it\u2019s version controlled. Ensure that you reference this path in commands referencing your values.yml files.

        3. Create values.yml in the directory you\u2019ve just created. Update the endpoint URLs (change them from api.lagoon.example.com to your values). Example: https://github.com/uselagoon/lagoon-charts/blob/main/charts/lagoon-core/ci/linter-values.yaml
        4. Now run helm upgrade --install command, pointing to values.yml, like so:

          Upgrade Helm with values.yml
          helm upgrade --install --create-namespace --namespace lagoon-core -f values.yml lagoon-core lagoon/lagoon-core`\n
        5. Lagoon Core is now installed!

        Warning

        Sometimes we run into Docker Hub pull limits. We are considering moving our images elsewhere if this continues to be a problem.

        "},{"location":"installing-lagoon/lagoon-core/#configure-keycloak","title":"Configure Keycloak","text":"

        Visit the Keycloak dashboard at the URL you defined in the values.yml for Keycloak.

        1. Click \"Administration Console\"
        2. Username: admin
        3. Password: use lagoon-core-keycloak secret, key-value KEYCLOAK_ADMIN_PASSWORD
        4. Retrieve the secret like so:

          Retrieve secret
          kubectl -n lagoon-core get secret lagoon-core-keycloak -o jsonpath=\"{.data.KEYCLOAK_ADMIN_PASSWORD}\" | base64 --decode\n
        5. Click on User on top right.

          1. Go to Manage Account.
          2. Add an Email for the admin account you created.
          3. Save.
        6. Go to Realm Lagoon -> Realm Settings -> Email
          1. Configure email server for Keycloak, test connection via \u201cTest connection\u201d button.
        7. Go to Realm Lagoon -> Realm Settings -> Login
          1. Enable \u201cForgot Password\u201d
          2. Save.
        "},{"location":"installing-lagoon/lagoon-core/#log-in-to-the-ui","title":"Log in to the UI","text":"

        You should now be able to visit the Lagoon UI at the URL you defined in the values.yml for the UI.

        1. Username: lagoonadmin
        2. Secret: use lagoon-core-keycloak secret key-value: LAGOON-CORE-KEYCLOAK
        3. Retrieve the secret:Retrieve secret
              kubectl -n lagoon-core get secret lagoon-core-keycloak -o jsonpath=\"{.data.KEYCLOAK_LAGOON_ADMIN_PASSWORD}\" | base64 --decode\n
        "},{"location":"installing-lagoon/lagoon-files/","title":"Lagoon Files","text":"

        Lagoon files are used to store the file output of tasks, such as backups, and can be hosted on any S3-compatible storage.

        1. Create new AWS User with policies:

          Example files IAM user
          {\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:ListBucket\",\n\"s3:GetBucketLocation\",\n\"s3:ListBucketMultipartUploads\"\n],\n\"Resource\":\"arn:aws:s3:::S3_BUCKET_NAME\"\n},\n{\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:AbortMultipartUpload\"\n],\n\"Resource\":\"arn:aws:s3:::S3_BUCKET_NAME/*\"\n}\n]\n}\n
        2. Update lagoon-core-values.yml:

          lagoon-core-values.yml
          s3FilesAccessKeyID: <<Access Key ID>>\ns3FilesBucket: <<Bucket Name for Lagoon Files>>\ns3FilesHost: <<S3 endpoint like \"https://s3.eu-west-1.amazonaws.com\" >>\ns3FilesSecretAccessKey: <<Access Key Secret>>\ns3FilesRegion: <<S3 Region >>\n
        3. If you use ingress-nginx in front of lagoon-core, we suggest setting this configuration which will allow for bigger file uploads:

          lagoon-core-values.yml
          controller:\nconfig:\nclient-body-timeout: '600' # max 600 secs fileuploads\nproxy-send-timeout: '1800' # max 30min connections - needed for websockets\nproxy-read-timeout: '1800' # max 30min connections - needed for websockets\nproxy-body-size: 1024m # 1GB file size\nproxy-buffer-size: 64k # bigger buffer\n
        "},{"location":"installing-lagoon/lagoon-logging/","title":"Lagoon Logging","text":"

        Lagoon integrates with OpenSearch to store application, container and router logs. Lagoon Logging collects the application, router and container logs from Lagoon projects, and sends them to the logs concentrator. It needs to be installed onto each lagoon-remote instance.

        In addition, it should be installed in the lagoon-core cluster to collect logs from the lagoon-core service. This is configured in the LagoonLogs section.

        Logging Overview: Lucid Chart

        See also: Logging.

        Read more about Lagoon logging here: https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logging

        1. Create lagoon-logging-values.yaml:

          lagoon-logging-values.yaml
          tls:\ncaCert: |\n<< content of ca.pem from Logs-Concentrator>>\nclientCert: |\n<< content of client.pem from Logs-Concentrator>>\nclientKey: |\n<< content of client-key.pem from Logs-Concentrator>>\nforward:\nusername: <<Username for Lagoon Remote 1>>\npassword: <<Password for Lagoon Remote 1>>\nhost: <<ExternalIP of Logs-Concentrator Service LoadBalancer>>\nhostName: <<Hostname in Server Cert of Logs-Concentrator>>\nhostPort: '24224'\nselfHostname: <<Hostname in Client Cert of Logs-Concentrator>>\nsharedKey: <<Generated ForwardSharedKey of Logs-Concentrator>>\ntlsVerifyHostname: false\nclusterName: <<Short Cluster Identifier>>\nlogsDispatcher:\nserviceMonitor:\nenabled: false\nlogging-operator:\nmonitoring:\nserviceMonitor:\nenabled: false\nlagoonLogs:\nenabled: true\nrabbitMQHost: lagoon-core-broker.lagoon-core.svc.cluster.local\nrabbitMQUser: lagoon\nrabbitMQPassword: <<RabbitMQ Lagoon Password>>\nexcludeNamespaces: {}\n
        2. Install lagoon-logging:

          Install lagoon-logging
          helm repo add banzaicloud-stable https://kubernetes-charts.banzaicloud.com\n\nhelm upgrade --install --create-namespace \\\n--namespace lagoon-logging \\\n-f lagoon-logging-values.yaml \\\nlagoon-logging lagoon/lagoon-logging\n
        "},{"location":"installing-lagoon/lagoon-logging/#logging-nginx-ingress-controller","title":"Logging NGINX Ingress Controller","text":"

        If you'd like logs from ingress-nginx inside lagoon-logging:

        1. The ingress controller must be installed in the namespace ingress-nginx
        2. Add the content of this file to ingress-nginx:

          ingress-nginx log-format-upstream
          controller:\nconfig:\nlog-format-upstream: >-\n{\n\"time\": \"$time_iso8601\",\n\"remote_addr\": \"$remote_addr\",\n\"x-forwarded-for\": \"$http_x_forwarded_for\",\n\"true-client-ip\": \"$http_true_client_ip\",\n\"req_id\": \"$req_id\",\n\"remote_user\": \"$remote_user\",\n\"bytes_sent\": $bytes_sent,\n\"request_time\": $request_time,\n\"status\": \"$status\",\n\"host\": \"$host\",\n\"request_proto\": \"$server_protocol\",\n\"request_uri\": \"$uri\",\n\"request_query\": \"$args\",\n\"request_length\": $request_length,\n\"request_time\": $request_time,\n\"request_method\": \"$request_method\",\n\"http_referer\": \"$http_referer\",\n\"http_user_agent\": \"$http_user_agent\",\n\"namespace\": \"$namespace\",\n\"ingress_name\": \"$ingress_name\",\n\"service_name\": \"$service_name\",\n\"service_port\": \"$service_port\"\n}\n
        3. Your logs should start flowing!

        "},{"location":"installing-lagoon/logs-concentrator/","title":"Logs-Concentrator","text":"

        Logs-concentrator collects the logs being sent by Lagoon clusters and augments them with additional metadata before inserting them into Elasticsearch.

        1. Create certificates according to ReadMe: https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logs-concentrator
        2. Create logs-concentrator-values.yml:

          logs-concentrator-values.yml
          tls:\ncaCert: |\n<<contents of ca.pem>>\nserverCert: |\n<<contents of server.pem\nserverKey: |\n<<contents of server-key.pem>>\nelasticsearchHost: elasticsearch-opendistro-es-client-service.elasticsearch.svc.cluster.local\nelasticsearchAdminPassword: <<ElasticSearch Admin Password>>\nforwardSharedKey: <<Random 32 Character Password>>\nusers:\n- username: <<Username for Lagoon Remote 1>>\npassword: <<Random Password for Lagoon Remote 1>>\nservice:\ntype: LoadBalancer\nserviceMonitor:\nenabled: false\n
        3. Install logs-concentrator:

          Install logs-concentrator
          helm upgrade --install --create-namespace \\\n--namespace lagoon-logs-concentrator \\\n-f logs-concentrator-values.yaml \\\nlagoon-logs-concentrator lagoon/lagoon-logs-concentrator\n
        "},{"location":"installing-lagoon/opendistro/","title":"OpenDistro","text":"

        To install an OpenDistro cluster, you will need to configure TLS and secrets so that Lagoon can talk to it securely. You're going to have to create a handful of JSON files - put these in the same directory as the values files you've been creating throughout this installation process.

        Install OpenDistro Helm, according to https://opendistro.github.io/for-elasticsearch-docs/docs/install/helm/

        "},{"location":"installing-lagoon/opendistro/#create-keys-and-certificates","title":"Create Keys and Certificates","text":"
        1. Generate certificates

          Note:

          CFSSL is CloudFlare's PKI/TLS swiss army knife. It is both a command line tool and an HTTP API server for signing, verifying, and bundling TLS certificates. It requires Go 1.12+ to build.

          1. Install CFSSL: https://github.com/cloudflare/cfssl
          2. Generate CA. You'll need the following file:
          ca-csr.json
          {\n\"CN\": \"ca.elasticsearch.svc.cluster.local\",\n\"hosts\": [\n\"ca.elasticsearch.svc.cluster.local\"\n],\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n},\n\"ca\": {\n\"expiry\": \"87600h\"\n}\n}\n
        2. Run the following two commands:

          Generate certificate
          cfssl gencert -initca ca-csr.json | cfssljson -bare ca -\nrm ca.csr\n

          You'll get ca-key.pem, and ca.pem. This is your CA key and self-signed certificate.

        3. Next, we'll generate the node peering certificate. You'll need the following two files:

          ca-config.json
          {\n\"signing\": {\n\"default\": {\n\"expiry\": \"87600h\"\n},\n\"profiles\": {\n\"peer\": {\n\"expiry\": \"87600h\",\n\"usages\": [\n\"signing\",\n\"key encipherment\",\n\"server auth\",\n\"client auth\"\n]\n},\n\"client\": {\n\"expiry\": \"87600h\",\n\"usages\": [\n\"signing\",\n\"key encipherment\",\n\"client auth\"\n]\n}\n}\n}\n}\n
          node.json
          {\n\"hosts\": [\n\"node.elasticsearch.svc.cluster.local\"\n],\n\"CN\": \"node.elasticsearch.svc.cluster.local\",\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n}\n}\n
        4. Run the following two commands:

          Generate certificate keys
          cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer node.json | cfssljson -bare node\nrm node.csr\n

          You'll get node.pem and node-key.pem. This is the peer certificate that will be used by nodes in the ES cluster.

        5. Next, we'll convert the key to the format supported by Java with the following command:

          Convert key format
          openssl pkey -in node-key.pem -out node-key.pkcs8\n
        6. Now we'll generate the admin certificate. You'll need the following file:

          admin.json
          {\n\"CN\": \"admin.elasticsearch.svc.cluster.local\",\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n}\n}\n
        7. Run the following two commands:

          Generate admin certificate keys
          cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client admin.json | cfssljson -bare admin\nrm admin.csr\n

          You'll get admin.pem and admin-key.pem. This is the certificate that will be used to perform admin commands on the opendistro-security plugin.

        8. Next, we'll convert the key to the format supported by Java with the following command:

          Convert key format
          openssl pkey -in admin-key.pem -out admin-key.pkcs8\n
        "},{"location":"installing-lagoon/opendistro/#installing-opendistro","title":"Installing OpenDistro","text":"

        Now that we have our keys and certificates, we can continue with the installation.

        1. Generate hashed passwords.

          1. The elasticsearch-secrets-values.yaml needs two hashed passwords. Create them with this command (run it twice, enter a random password, store both the plaintext and hashed passwords).
          Generate hashed passwords
          docker run --rm -it docker.io/amazon/opendistro-for-elasticsearch:1.12.0 sh -c \"chmod +x /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh; /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh\"\n
        2. Create secrets:

          1. You'll need to create elasticsearch-secrets-values.yaml. See this gist as an example: https://gist.github.com/Schnitzel/43f483dfe0b23ca0dddd939b12bb4b0b
        3. Install secrets with the following commands:

          Install secrets
          helm repo add incubator https://charts.helm.sh/incubator`\nhelm upgrade --namespace elasticsearch --create-namespace --install elasticsearch-secrets incubator/raw --values elasticsearch-secrets-values.yaml `\n
        4. You'll need to create elasticsearch-values.yaml. See this gist as an example: (fill all <\\> with values) https://gist.github.com/Schnitzel/1e386654b6abf75bf4d66a544db4aa6a

        5. Install Elasticsearch:

          Install Elasticsearch
          helm upgrade --namespace elasticsearch --create-namespace --install elasticsearch opendistro-es-X.Y.Z.tgz --values elasticsearch-values.yaml\n
        6. Configure security inside Elasticsearch with the following:

          Configure security
          kubectl exec -n elasticsearch -it elasticsearch-opendistro-es-master-0 -- bash\nchmod +x /usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh\n/usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh -nhnv -cacert /usr/share/elasticsearch/config/admin-root-ca.pem -cert /usr/share/elasticsearch/config/admin-crt.pem -key /usr/share/elasticsearch/config/admin-key.pem -cd /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/\n
        7. Update lagoon-core-values.yaml with:

          lagoon-core-values.yaml
          elasticsearchURL: http://elasticsearch-opendistro-es-client-service.elasticsearch.svc.cluster.local:9200\nkibanaURL: https://<<Kibana Public URL>>\nlogsDBAdminPassword: \"<<PlainText Elasticsearch Admin Password>>\"\n
        8. Rollout Lagoon Core:

          Rollout Lagoon Core
          helm upgrade --install --create-namespace --namespace lagoon-core -f values.yaml lagoon-core lagoon/lagoon-core\n
        9. Sync all Lagoon Groups with Opendistro Elasticsearch

          Sync groups
          kubectl -n lagoon-core exec -it deploy/lagoon-core-api -- sh\nyarn run sync:opendistro-security\n
        10. "},{"location":"installing-lagoon/querying-graphql/","title":"Querying with GraphQL","text":"
          1. You\u2019ll need an app for sending and receiving GraphQL queries. We recommend GraphiQL.

            1. If you\u2019re using Homebrew, you can install it with brew install --cask graphiql.
          2. We need to tell Lagoon Core about the Kubernetes cluster. The GraphQL endpoint is: https://<YOUR-API-URL>/graphql

          3. Go to Edit HTTP Headers, and Add Header.

            1. Header Name: Authorization
            2. Value: Bearer YOUR-TOKEN-HERE
            3. In your home directory, the Lagoon CLI has created a .lagoon.yml file. Copy the token from that file and use it for the value here.
            4. Save.
          4. Now you\u2019re ready to run some queries. Run the following test query to ensure everything is working correctly:

            Get all projects
            query allProjects {allProjects {name } }\n
          5. This should give you the following response:

            API Response
              {\n    \"data\": {\n      \"allProjects\": []\n    }\n  }\n

            Read more about GraphQL here in our documentation.

          6. Once you get the correct response, we need to add a mutation.

            1. Run the following query:

              Add mutation
              mutation addKubernetes {\naddKubernetes(input:\n{\nname: \"<TARGET-NAME-FROM-REMOTE-VALUES.yml>\",\nconsoleUrl: \"<URL-OF-K8S-CLUSTER>\",\ntoken: \"xxxxxx\u201d\nrouterPattern: \"${environment}.${project}.lagoon.example.com\"\n}){id}\n}\n
              1. name: get from lagoon-remote-values.yml
              2. consoleUrl: API Endpoint of Kubernetes cluster. Get from values.yml
              3. token: get a token for the ssh-core service account

                Get token
                kubectl -n lagoon get secret/lagoon-remote-ssh-core-token -o json | jq -r '.data.token | @base64d'\n

          Info

          Authorization tokens for GraphQL are very short term so you may need to generate a new one. Run lagoon login and then cat the .lagoon.yml file to get the new token, and replace the old token in the HTTP header with the new one.

          "},{"location":"installing-lagoon/requirements/","title":"Installing Lagoon Into Existing Kubernetes Cluster","text":""},{"location":"installing-lagoon/requirements/#requirements","title":"Requirements","text":"
          • Kubernetes 1.23+ (Kubernetes 1.21 is supported, but 1.23 is recommended)
          • Familiarity with Helm and Helm Charts, and kubectl.
          • Ingress controller, we recommend ingress-nginx, installed into ingress-nginx namespace
          • Cert manager (for TLS) - We highly recommend using letsencrypt
          • StorageClasses (RWO as default, RWM for persistent types)

          Note

          We acknowledge that this is a lot of steps, and our roadmap for the immediate future includes reducing the number of steps in this process.

          "},{"location":"installing-lagoon/requirements/#specific-requirements-as-of-january-2023","title":"Specific requirements (as of January 2023)","text":""},{"location":"installing-lagoon/requirements/#kubernetes","title":"Kubernetes","text":"

          Lagoon supports Kubernetes versions 1.21 onwards. We actively test and develop against Kubernetes 1.24, also regularly testing against 1.21,1.22 and 1.25.

          The next large round of breaking changes is in Kubernetes 1.25, and we will endeavour to be across these in advance, although this will require a bump in the minimum supported version of Lagoon.

          "},{"location":"installing-lagoon/requirements/#ingress-nginx","title":"ingress-nginx","text":"

          Lagoon is currently configured only for a single ingress-nginx controller, and therefore defining an IngressClass was not necessary in the past.

          In order to use the recent ingress-nginx controllers (v4 onwards, required for Kubernetes 1.22), the following configuration should be used, as per the ingress-nginx docs.

          • nginx-ingress should be configured as the default controller - set .controller.ingressClassResource.default: true in Helm values
          • nginx-ingress should be configured to watch ingresses without IngressClass set - set .controller.watchIngressWithoutClass: true in Helm values

          This will configure the controller to create any new ingresses with itself as the IngressClass, and also to handle any existing ingresses without an IngressClass set.

          Other configurations may be possible, but have not been tested.

          "},{"location":"installing-lagoon/requirements/#harbor","title":"Harbor","text":"

          Versions 2.1 and 2.2+ of Harbor are currently supported. The method of retrieving robot accounts was changed in 2.2, and the Lagoon remote-controller is able to handle these tokens. This means that Harbor has to be configured with the credentials in lagoon-build-deploy - not lagoon-core.

          We recommend installing a Harbor version greater than 2.6.0 with Helm chart 1.10.0 or greater.

          "},{"location":"installing-lagoon/requirements/#k8up-for-backups","title":"k8up for backups","text":"

          Lagoon has built in configuration for the K8up backup operator. Lagoon can configure prebackup pods, schedules and retentions, and manage backups and restores for K8up. Lagoon currently only supports the 1.x versions of K8up, owing to a namespace change in v2 onwards, but we are working on a fix.

          K8up v2:

          Lagoon does not currently support K8up v2 onwards due to a namespace change here.

          We recommend installing K8up version 1.2.0 with Helm Chart 1.1.0

          "},{"location":"installing-lagoon/requirements/#storage-provisioners","title":"Storage provisioners","text":"

          Lagoon utilizes a default 'standard' StorageClass for most workloads, and the internal provisioner for most Kubernetes platforms will suffice. This should be configured to be dynamic provisioning and expandable where possible.

          Lagoon also requires a StorageClass called 'bulk' to be available to support persistant pod replicas (across nodes). This StorageClass should support ReadWriteMany (RWX) access mode and should be configured to be dynamic provisioning and expandable where possible. See https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes for more information, and the production drivers list for a complete list of compatible drivers.

          We have curently only included the instructions a generic Bulk Storage provisioner using NFS Bulk Storage Provisioner. In AWS the production EFS CSI driver is limited to provisioning no more than 1000 PVCs. We are awaiting an upstream possible fix here - but most other providers CSI drivers should also work, as will configurations with an NFS-compatible server and provisioner.

          "},{"location":"installing-lagoon/requirements/#how-much-kubernetes-experienceknowledge-is-required","title":"How much Kubernetes experience/knowledge is required?","text":"

          Lagoon uses some very involved Kubernetes and cloud-native concepts, and while full familiarity may not be necessary to install and configure Lagoon, diagnosing issues and contributing may prove difficult without a good level of familiarity.

          As an indicator, comfort with the curriculum for the Certified Kubernetes Administrator would be suggested as a minimum.

          "},{"location":"installing-lagoon/update-lagoon/","title":"Updating","text":"
          1. Download newest charts using Helm.

            Download newest charts
            helm repo update\n
          2. Check with helm diff for changes (https://github.com/databus23/helm-diff).

            Check for changes
            helm diff upgrade --install --create-namespace --namespace lagoon-core \\\n-f values.yml lagoon-core lagoon/lagoon-core\n
          3. Back up the Lagoon databases prior to any Helm actions. We also suggest scaling the API to a single pod, to aid the database migration scripts running in the initContainers.

          4. Run the upgrade using Helm.

            Run upgrade
            helm upgrade --install --create-namespace --namespace lagoon-core \\\n-f values.yaml lagoon-core lagoon/lagoon-core\n
          5. (Note that as of Lagoon v2.11.0, this step is no longer required.) If upgrading Lagoon Core, ensure you run the rerun_initdb.sh script to perform post upgrade migrations.

            Run script
            kubectl --namespace lagoon-core exec -it lagoon-core-api-db-0 -- \\\nsh -c /rerun_initdb.sh\n
          6. Re-scale the API pods back to their original level.

          7. If upgrading Lagoon Core, and you have enabled groups/user syncing for OpenSearch, you may additionally need to run the sync:opendistro-security script to update the groups in OpenSearch. This command can also be prefixed with a GROUP_REGEX=<group-to-sync to sync a single group at a time, as syncing the entire group structure may take a long time.

            Run script
            kubectl --namespace lagoon-core exec -it deploy/lagoon-core-api -- \\\nsh -c yarn sync:opendistro-security\n

          Check https://github.com/uselagoon/lagoon/releases for additional upgrades.

          "},{"location":"installing-lagoon/update-lagoon/#database-backups","title":"Database Backups","text":"

          You may want to back up the databases before upgrading Lagoon Core, the following will create backups you can use to restore from if required. You can delete them afterwards.

          "},{"location":"installing-lagoon/update-lagoon/#api-db","title":"API DB","text":"Back up API DB
          kubectl --namespace lagoon-core exec -it lagoon-core-api-db-0 -- \\\nsh -c 'mysqldump --max-allowed-packet=500M --events \\\n    --routines --quick --add-locks --no-autocommit \\\n    --single-transaction infrastructure | gzip -9 > \\\n    /var/lib/mysql/backup/$(date +%Y-%m-%d_%H%M%S).infrastructure.sql.gz'\n
          "},{"location":"installing-lagoon/update-lagoon/#keycloak-db","title":"Keycloak DB","text":"Back up Keycloak DB
          kubectl --namespace lagoon-core exec -it lagoon-core-keycloak-db-0 -- \\\nsh -c 'mysqldump --max-allowed-packet=500M --events \\\n    --routines --quick --add-locks --no-autocommit \\\n    --single-transaction keycloak | gzip -9 > \\\n    /var/lib/mysql/backup/$(date +%Y-%m-%d_%H%M%S).keycloak.sql.gz'\n
          "},{"location":"interacting/graphql-queries/","title":"GraphQL API","text":""},{"location":"interacting/graphql-queries/#running-graphql-queries","title":"Running GraphQL queries","text":"

          Direct API interactions in Lagoon are done via GraphQL.

          In order to authenticate with the API, we need a JWT (JSON Web Token) that allows us to use the GraphQL API as admin. To generate this token, open the terminal of the storage-calculator pod via your Kubernetes UI, or via kubectl and run the following command:

          Generate JWT token.
          ./create_jwt.py\n

          This will return a long string which is the JWT token. Make a note of this, as we will need it to send queries.

          We also need the URL of the API endpoint, which can be found under \"Ingresses\" in your Kubernetes UI or via kubectl on the command line. Make a note of this endpoint URL, which we will also need.

          To compose and send GraphQL queries, we recommend GraphiQL.app, a desktop GraphQL client with features such as autocomplete. To continue with the next steps, install and start the app.

          Under \"GraphQL Endpoint\", enter the API endpoint URL with /graphql on the end. Then click on \"Edit HTTP Headers\" and add a new header:

          • \"Header name\": Authorization
          • \"Header value\": Bearer [JWT token] (make sure that the JWT token has no spaces, as this would not work)

          Press ESC to close the HTTP header overlay and now we are ready to send the first GraphQL request!

          Enter this in the left panel

          Running a query
          query allProjects{\nallProjects {\nname\n}\n}\n

          And press the \u25b6\ufe0f button (or press CTRL+ENTER).

          If all went well, your first GraphQL response should appear shortly afterwards in the right pane.

          "},{"location":"interacting/graphql-queries/#creating-the-first-project","title":"Creating the first project","text":"

          Let's create the first project for Lagoon to deploy! For this we'll use the queries from the GraphQL query template in create-project.gql.

          For each of the queries (the blocks starting with mutation {), fill in all of the empty fields marked by TODO comments and run the queries in GraphiQL.app. This will create one of each of the following two objects:

          1. kubernetes : The Kubernetes (or Openshift) cluster to which Lagoon should deploy. Lagoon is not only capable of deploying to its own Kubernetes cluster, but also to any Kubernetes cluster anywhere in the world.
          2. project : The Lagoon project to be deployed, which is a Git repository with a .lagoon.yml configuration file committed in the root.
          "},{"location":"interacting/graphql-queries/#allowing-access-to-the-project","title":"Allowing access to the project","text":"

          In Lagoon, each developer authenticates via their SSH key(s). This determines their access to:

          1. The Lagoon API, where they can see and edit projects they have access to.
          2. Remote shell access to containers that are running in projects they have access to.
          3. The Lagoon logging system, where a developer can find request logs, container logs, Lagoon logs and more.

          To allow access to the project, we first need to add a new group to the API:

          Add group to API
          mutation {\naddGroup (\ninput: {\n# TODO: Enter the name for your new group.\nname: \"\"\n}\n)     {\nid\nname\n}\n}\n

          Then we need to add a new user to the API:

          Add new user to API
          mutation {\naddUser(\ninput: {\nemail: \"michael.schmid@example.com\"\nfirstName: \"Michael\"\nlastName: \"Schmid\"\ncomment: \"CTO\"\n}\n) {\n# TODO: Make a note of the user ID that is returned.\nid\n}\n}\n

          Then we can add an SSH public key for the user to the API:

          Add SSH public key for the user to API
          mutation {\naddSshKey(\ninput: {\n# TODO: Fill in the name field.\n# This is a non-unique identifier for the SSH key.\nname: \"\"\n# TODO: Fill in the keyValue field.\n# This is the actual SSH public key (without the type at the beginning and without the comment at the end, ex. `AAAAB3NzaC1yc2EAAAADAQ...3QjzIOtdQERGZuMsi0p`).\nkeyValue: \"\"\n# TODO: Fill in the keyType field.\n# Valid values are either SSH_RSA, SSH_ED25519, ECDSA_SHA2_NISTP256/384/521\nkeyType: SSH_RSA\nuser: {\n# TODO: Fill in the userId field.\n# This is the user ID that we noted from the addUser query.\nid:\"0\",\nemail:\"michael.schmid@example.com\"\n}\n}\n) {\nid\n}\n}\n

          After we add the key, we need to add the user to a group:

          Add user to group
          mutation {\naddUserToGroup (\ninput: {\nuser: {\n#TODO: Enter the email address of the user.\nemail: \"\"\n}\ngroup: {\n#TODO: Enter the name of the group you want to add the user to.\nname: \"\"\n}\n#TODO: Enter the role of the user.\nrole: OWNER\n}\n) {\nid\nname\n}\n}\n

          After running one or more of these kinds of queries, the user will be granted access to create tokens via SSH, access containers and more.

          "},{"location":"interacting/graphql-queries/#adding-notifications-to-the-project","title":"Adding notifications to the project","text":"

          If you want to know what is going on during a deployment, we suggest configuring notifications for your project, which provide:

          • Push notifications
          • Build start information
          • Build success or failure messages
          • And many more!

          As notifications can be quite different in terms of the information they need, each notification type has its own mutation.

          As with users, we first add the notification:

          Add notification
          mutation {\naddNotificationSlack(\ninput: {\n# TODO: Fill in the name field.\n# This is your own identifier for the notification.\nname: \"\"\n# TODO: Fill in the channel field.\n# This is the channel for the message to be sent to.\nchannel: \"\"\n# TODO: Fill in the webhook field.\n# This is the URL of the webhook where messages should be sent, this is usually provided by the chat system to you.\nwebhook: \"\"\n}\n) {\nid\n}\n}\n

          After the notification is created, we can now assign it to our project:

          Assign notification to project
          mutation {\naddNotificationToProject(\ninput: {\nnotificationType: SLACK\n# TODO: Fill in the project field.\n# This is the project name.\nproject: \"\"\n# TODO: Fill in the notification field.\n# This is the notification name.\nnotificationName: \"\"\n# TODO: OPTIONAL\n# The kind notification class you're interested in defaults to DEPLOYMENT\ncontentType: DEPLOYMENT/PROBLEM\n# TODO: OPTIONAL\n# Related to contentType PROBLEM, we can set the threshold for the kinds of problems\n# we'd like to be notified about\nnotificationSeverityThreshold \"NONE/UNKNOWN/NEGLIGIBLE/LOW/MEDIUM/HIGH/CRITICAL\n}\n) {\nid\n}\n}\n

          Now for every deployment you will receive messages in your defined channel.

          "},{"location":"interacting/graphql-queries/#example-graphql-queries","title":"Example GraphQL queries","text":""},{"location":"interacting/graphql-queries/#adding-a-new-kubernetes-target","title":"Adding a new Kubernetes target","text":"

          Note

          In Lagoon, both addKubernetes and addOpenshift can be used for both Kubernetes and OpenShift targets - either will work interchangeably.

          The cluster to which Lagoon should deploy.

          Add Kubernetes target
          mutation {\naddKubernetes(\ninput: {\n# TODO: Fill in the name field.\n# This is the unique identifier of the cluster.\nname: \"\"\n# TODO: Fill in consoleUrl field.\n# This is the URL of the Kubernetes cluster\nconsoleUrl: \"\"\n# TODO: Fill in the token field.\n# This is the token of the `lagoon` service account created in this cluster (this is the same token that we also used during installation of Lagoon).\ntoken: \"\"\n}\n) {\nname\nid\n}\n}\n
          "},{"location":"interacting/graphql-queries/#adding-a-group-to-a-project","title":"Adding a group to a project","text":"

          This query will add a group to a project. Users of that group will be able to access the project. They will be able to make changes, based on their role in that group.

          Add a group to a project
          mutation {\naddGroupsToProject (\ninput: {\nproject: {\n#TODO: Enter the name of the project.\nname: \"\"\n}\ngroups: {\n#TODO: Enter the name of the group that will be added to the project.\nname: \"\"\n}\n}\n) {\nid\n}\n}\n
          "},{"location":"interacting/graphql-queries/#adding-a-new-project","title":"Adding a new project","text":"

          This query adds a new Lagoon project to be deployed, which is a Git repository with a .lagoon.yml configuration file committed in the root.

          If you omit the privateKey field, a new SSH key for the project will be generated automatically.

          If you would like to reuse a key from another project. you will need to supply the key in the addProject mutation.

          Add a new project
          mutation {\naddProject(\ninput: {\n# TODO: Fill in the name field.\n# This is the project name.\nname: \"\"\n# TODO: Fill in the private key field (replace newlines with '\\n').\n# This is the private key for a project, which is used to access the Git code.\nprivateKey: \"\"\n# TODO: Fill in the Kubernetes field.\n# This is the ID of the Kubernetes or OpenShift to assign to the project.\nkubernetes: 0\n# TODO: Fill in the name field.\n# This is the project name.\ngitUrl: \"\"\n# TODO: Fill in the branches to be deployed.\nbranches: \"\"\n# TODO: Define the production environment.\nproductionEnvironment: \"\"\n}\n) {\nname\nkubernetes {\nname\nid\n}\ngitUrl\nbranches\npullrequests\n}\n}\n
          "},{"location":"interacting/graphql-queries/#list-projects-and-groups","title":"List projects and groups","text":"

          This is a good query to see an overview of all projects, clusters and groups that exist within our Lagoon.

          Get an overview of all projects, clusters, and groups
          query {\nallProjects {\nname\ngitUrl\n}\nallKubernetes {\nname\nid\n}\nallGroups{\nid\nname\nmembers {\n# This will display the users in this group.\nuser {\nid\nfirstName\nlastName\n}\nrole\n}\ngroups {\nid\nname\n}\n}\n}\n
          "},{"location":"interacting/graphql-queries/#single-project","title":"Single project","text":"

          If you want a detailed look at a single project, this query has been proven quite good:

          Take a detailed look at one project
          query {\nprojectByName(\n# TODO: Fill in the project name.\nname: \"\"\n) {\nid\nbranches\ngitUrl\npullrequests\nproductionEnvironment\nnotifications(type: SLACK) {\n... on NotificationSlack {\nname\nchannel\nwebhook\nid\n}\n}\nenvironments {\nname\ndeployType\nenvironmentType\n}\nkubernetes {\nid\n}\n}\n}\n
          "},{"location":"interacting/graphql-queries/#querying-a-project-by-its-git-url","title":"Querying a project by its Git URL","text":"

          Don't remember the name of a project, but know the Git URL? Search no longer, there is a GraphQL query for that:

          Query project by Git URL
          query {\nprojectByGitUrl(gitUrl: \"git@server.com:org/repo.git\") {\nname\n}\n}\n
          "},{"location":"interacting/graphql-queries/#updating-objects","title":"Updating objects","text":"

          The Lagoon GraphQL API can not only display objects and create objects, it also has the capability to update existing objects, using a patch object.

          Update the branches to deploy within a project:

          Update deploy branches.
          mutation {\nupdateProject(\ninput: { id: 109, patch: { branches: \"^(prod|stage|dev|update)$\" } }\n) {\nid\n}\n}\n

          Update the production environment within a project:

          Warning

          This requires a redeploy in order for the changes to be reflected in the containers.

          Update prod environment
           mutation {\nupdateProject(\ninput: { id: 109, patch: { productionEnvironment: \"main\" } }\n) {\nid\n}\n}\n

          You can also combine multiple changes at once:

          Update prod environment and set deploy branches.
          mutation {\nupdateProject(\ninput: {\nid: 109\npatch: {\nproductionEnvironment: \"main\"\nbranches: \"^(prod|stage|dev|update)$\"\n}\n}\n) {\nid\n}\n}\n
          "},{"location":"interacting/graphql-queries/#deleting-environments","title":"Deleting Environments","text":"

          You can also use the Lagoon GraphQL API to delete an environment. You'll need to know the project name and the environment name in order to run the command.

          Delete environment.
          mutation {\ndeleteEnvironment(\ninput: {\n# TODO: Fill in the name field.\n# This is the environment name.\nname:\"\"\n# TODO: Fill in the project field.\n# This is the project name.\nproject:\"\"\nexecute:true\n}\n)\n}\n
          "},{"location":"interacting/graphql-queries/#querying-a-project-to-see-what-groups-and-users-are-assigned","title":"Querying a project to see what groups and users are assigned","text":"

          Want to see what groups and users have access to a project? Want to know what their roles are? Do I have a query for you! Using the query below you can search for a project and display the groups, users, and roles that are assigned to that project.

          Query groups, users, and roles assigned to project
          query search{\nprojectByName(\n#TODO: Enter the name of the project.\nname: \"\"\n) {\nid,\nbranches,\nproductionEnvironment,\npullrequests,\ngitUrl,\nkubernetes {\nid\n},\ngroups{\nid\nname\ngroups {\nid\nname\n}\nmembers {\nrole\nuser {\nid\nemail\n}\n}\n}\n}\n}\n
          "},{"location":"interacting/graphql-queries/#maintaining-project-metadata","title":"Maintaining project metadata","text":"

          Project metadata can be assigned using arbitrary key/value pairs. Projects can then be queried by the associated metadata; for example you may categorize projects by type of software, version number, or any other categorization you may wish to query on later.

          "},{"location":"interacting/graphql-queries/#addupdate-metadata-on-a-project","title":"Add/update metadata on a project","text":"

          Updates to metadata expect a key/value pair. It operates as an UPSERT, meaning if a key already exists the value will be updated, otherwise inserted.

          You may have any number of k/v pairs stored against a project.

          Add a key/value pair to metadata
          mutation {\nupdateProjectMetadata(\ninput: { id: 1,  patch: { key: \"type\", value: \"saas\" } }\n) {\nid\nmetadata\n}\n}\n
          "},{"location":"interacting/graphql-queries/#query-for-projects-by-metadata","title":"Query for projects by metadata","text":"

          Queries may be by key only (e.g return all projects where a specific key exists) or both key and value where both key and value must match.

          All projects that have the version tag:

          Query by metadata
          query projectsByMetadata {\nprojectsByMetadata(metadata: [{key: \"version\"] ) {\nid\nname\n}\n}\n

          All projects that have the version tag, specifically version 8:

          Query by metadata
          query projectsByMetadata {\nprojectsByMetadata(metadata: [{key: \"version\", value: \"8\"] ) {\nid\nname\n}\n}\n
          "},{"location":"interacting/graphql-queries/#removing-metadata-on-a-project","title":"Removing metadata on a project","text":"

          Metadata can be removed on a per-key basis. Other metadata key/value pairs will persist.

          Remove metadata
          mutation {\nremoveProjectMetadataByKey (\ninput: { id: 1,  key: \"version\" }\n) {\nid\nmetadata\n}\n}\n
          "},{"location":"interacting/graphql/","title":"GraphQL","text":""},{"location":"interacting/graphql/#connect-to-graphql-api","title":"Connect to GraphQL API","text":"

          API interactions in Lagoon are done via GraphQL. In order to authenticate to the API, you need a JWT (JSON Web Token), which will authenticate you against the API via your SSH public key.

          To generate this token, use the remote shell via the token command:

          Get token
          ssh -p [PORT] -t lagoon@[HOST] token\n

          example.com connection string:

          Get example.com token
          ssh -p 22 -t lagoon@ssh.example.com token\n

          This will return a long string, which is the JWT token.

          We also need the URL of the API endpoint. Contact your Lagoon administrator for this.

          For example.com this is https://api.example.com/graphql.

          Now we need a GraphQL client! Technically this is just HTTP, but we suggest GraphiQL. It has a nice UI that allows you to write GraphQL requests with autocomplete. Download, install and start it. [GraphiQL App]

          Enter the API endpoint URL. Then click on \"Edit HTTP Headers\" and add a new Header:

          • \"Header name\": Authorization
          • \"Header value\": Bearer [jwt token] (make sure that the JWT token has no spaces, that won't work)

          Close the HTTP Header overlay (press ESC) and now you are ready to make your first GraphQL Request!

          Enter this on the left window:

          Get all projects
          query whatIsThere {\nallProjects {\nid\ngitUrl\nname\nbranches\npullrequests\nproductionEnvironment\nenvironments {\nname\nenvironmentType\n}\n}\n}\n

          And press the \u25b6\ufe0f button (or press CTRL+ENTER).

          If all went well, you should see your first GraphQL response.

          "},{"location":"interacting/graphql/#mutations","title":"Mutations","text":"

          The Lagoon GraphQL API can not only display objects and create objects, but it also has the capability to update existing objects. All of Lagoon's GraphQL uses best practices.

          Info

          Mutation queries in GraphQL modify the data in the data store, and return a value. They can be used to insert, update, and delete data. Mutations are defined as a part of the schema._

          Update the branches to deploy within a project:

          Update deploy branches
          mutation editProjectBranches {\nupdateProject(input:{id:109, patch:{branches:\"^(prod|stage|dev|update)$\"}}) {\nid\n}\n}\n

          Update the production environment within a project:

          Warning

          This requires a redeploy in order for all changes to be reflected in the containers.

          Update production environment
          mutation editProjectProductionEnvironment {\nupdateProject(input:{id:109, patch:{productionEnvironment:\"prod\"}}) {\nid\n}\n}\n

          You can also combine multiple changes into a single query:

          Multiple changes
          mutation editProjectProductionEnvironmentAndBranches {\nupdateProject(input:{id:109, patch:{productionEnvironment:\"prod\", branches:\"^(prod|stage|dev|update)$\"}}) {\nid\n}\n}\n
          "},{"location":"interacting/lagoon-ui/","title":"The Lagoon UI","text":"

          The Lagoon UI is your first point of call with Lagoon. If you have any issues with access, please contact your Lagoon administrator.

          The UI allows you to complete a variety of tasks with your projects and organizations. Learn more about organizations here. and what you can do with organizations in the UI here.

          "},{"location":"interacting/organizations/","title":"Working with Organizations in the UI","text":"

          Here are some step-by-step guides to help walk you through useful organization-related tasks in the Lagoon UI, working with groups, projects, users, and roles.

          "},{"location":"interacting/organizations/#log-in-and-find-organizations","title":"Log in and find organizations","text":""},{"location":"interacting/organizations/#view-who-has-access-to-a-project","title":"View who has access to a project","text":""},{"location":"interacting/organizations/#add-user-to-group-with-role","title":"Add User to Group with Role","text":""},{"location":"interacting/organizations/#remove-a-user-from-a-group","title":"Remove a User from a Group","text":""},{"location":"interacting/organizations/#change-a-user-role","title":"Change a User Role","text":""},{"location":"interacting/organizations/#add-an-email-notification-to-a-project","title":"Add an Email Notification to a Project","text":""},{"location":"interacting/organizations/#add-a-group-to-a-project","title":"Add a Group to a Project","text":""},{"location":"interacting/organizations/#add-a-user-with-organization-owner-privileges","title":"Add a User with Organization Owner Privileges","text":""},{"location":"interacting/organizations/#create-a-new-project-add-a-group-and-create-a-production-environment","title":"Create a new Project, add a Group, and create a Production Environment","text":""},{"location":"interacting/rbac/","title":"Role-Based Access Control (RBAC)","text":"

          Version 1.0 of Lagoon changed how you access your projects! Access to your project is handled via groups, with projects assigned to one or multiple groups. Users are added to groups with a role. Groups can also be nested within sub-groups. This change provides a lot more flexibility and the possibility to recreate real world teams within Lagoon.

          "},{"location":"interacting/rbac/#roles","title":"Roles","text":"

          When assigning a user to a group, you need to provide a group role for that user inside this group. Each one of the 5 current existing group roles gives the user different permissions to the group and projects assigned to the group. Here are the platform-wide roles and the group roles that are currently found in Lagoon:

          "},{"location":"interacting/rbac/#platform-wide-roles","title":"Platform-Wide Roles","text":"

          Platform-wide roles are typically assigned to people that manage Lagoon.

          "},{"location":"interacting/rbac/#platform-wide-owner","title":"Platform-Wide Owner","text":"

          The platform-wide owner has access to everything across all of Lagoon.

          "},{"location":"interacting/rbac/#platform-wide-viewer","title":"Platform-Wide Viewer","text":"

          Similar to the platform-wide owner, except this role can only view.

          "},{"location":"interacting/rbac/#platform-wide-organization-owner","title":"Platform-Wide Organization Owner","text":"

          The platform-wide organization owner role provides permission to create, update, delete, and all other permissions related to changes withing an organization, including existing organizations. It does not grant full platform-wide owner access, this means the ability to access and deploy projects still needs to be granted via a group within an organization.

          This role also has the ability to view all the deploytargets (kubernetes clusters) assigned to Lagoon so that they can be assigned to an organization when it is being created.

          NOTE

          By default this role does not allow the creation of environments or the ability to trigger deployments within a project within an organization. They can add themselves to a group with a role that does grant them this permission.

          "},{"location":"interacting/rbac/#organization-roles","title":"Organization Roles","text":""},{"location":"interacting/rbac/#organization-owner","title":"Organization Owner","text":"

          The organization owner role allows for the creation and deletion of projects, groups, and notifications within their organization.

          They can add users to groups, change the roles of users within those groups, and associate projects with groups. This gives the organization owner the ability to clearly see who has access, and quickly add and remove users.

          Organization owners now also have the ability to create Slack or other notifications directly, and associate those notifications with a project without requiring help from your Lagoon administrator.

          Organization owners also have the ability to add and remove other owners, admins, or viewers to manage their organization.

          NOTE

          By default this role does not allow organization owners to create environments or trigger deployments within a project. They can add themselves to a group with a role that does grant them this permission. When creating a project, an organization owner can opt to be added as an owner of the project default group.

          "},{"location":"interacting/rbac/#organization-admin","title":"Organization Admin","text":"

          The organization admin role is the same as organization owner, except that this role cannot make changes to the owners, admins, or viewers of the organization.

          "},{"location":"interacting/rbac/#organization-viewer","title":"Organization Viewer","text":"

          The organization view has access to view the projects, group and user access, and notifications within their organization.

          "},{"location":"interacting/rbac/#group-roles","title":"Group Roles","text":""},{"location":"interacting/rbac/#owner","title":"Owner","text":"

          The owner role can do everything within a group and its associated projects. They can add and manage users of a group. Be careful with this role, as it can delete projects and production environments!

          IMPORTANT

          If a user has this role in a group that is within the scope of an organization, this role's ability to manage that group's users is removed. Only organization owners or admins can manage groups and their users.

          "},{"location":"interacting/rbac/#maintainer","title":"Maintainer","text":"

          The maintainer role can do everything within a group and its associated projects except deleting the project itself or the production environment. They can add and manage users of a group.

          "},{"location":"interacting/rbac/#developer","title":"Developer","text":"

          The developer role has SSH access only to development environments. This role cannot access, update or delete the production environment. They can run a sync task with the production environment as a source, but not as the destination. Cannot manage users of a group.

          IMPORTANT

          This role does not prevent the deployment of the production environment as a deployment is triggered via a Git push! You need to make sure that your Git server prevents these users from pushing into the branch defined as production environment.

          "},{"location":"interacting/rbac/#reporter","title":"Reporter","text":"

          The reporter role has view access only. They cannot access any environments via SSH or make modifications to them. They can run cache-clear tasks. This role is mostly used for stakeholders to have access to Lagoon UI and logging.

          "},{"location":"interacting/rbac/#guest","title":"Guest","text":"

          The guest role has the same privileges as the reporter role listed above.

          Here is a table that lists the roles and the access they have:

          "},{"location":"interacting/rbac/#lagoon-100-rbac-permission-matrix","title":"Lagoon 1.0.0 RBAC Permission Matrix","text":"SelfGuestDeveloperMaintainerOwnerOrganization ViewerOrganization OwnerPlatform-Wide OwnerPlatform-Wide Admin Name Resource Scope Attributes addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID Name Resource Scope Attributes getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add Name Resource Scope Attributes addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID userCanSshToEnvironment environment ssh:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add Name Resource Scope Attributes deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID userCanSshToEnvironment environment ssh:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add Name Resource Scope Attributes deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add Name Resource Scope Attributes getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId Name Resource Scope Attributes getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId Name Resource Scope Attributes addOrUpdateEnvironmentStorage environment storage addNotificationSlack notification add updateNotificationSlack notification update deleteNotificationSlack notification delete addKubernetes kubernetes add updateKubernetes kubernetes update deleteKubernetes kubernetes delete getAllOpenshifts openshift viewAll getAllProjects project viewAll addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID allEnvironments environment viewAll getEnvironmentStorageMonthByEnvironmentId environment storage getEnvironmentHoursMonthByEnvironmentId environment storage getEnvironmentHitsMonthByEnvironmentId environment storage addOrUpdateEnvironmentStorage environment storage addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add getAllOrganizations organization viewAll addOrganization add viewAll updateOrganization update viewAll deleteOrganization delete viewAll getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId Name Resource Scope Attributes getEnvironmentStorageMonthByEnvironmentId environment storage getEnvironmentHoursMonthByEnvironmentId environment storage getEnvironmentHitsMonthByEnvironmentId environment storage getAllOpenshifts openshift viewAll addOrUpdateEnvironmentStorage environment storage addNotificationSlack notification add updateNotificationSlack notification update deleteNotificationSlack notification delete addKubernetes kubernetes add updateKubernetes kubernetes update deleteKubernetes kubernetes delete getAllProjects project viewAll addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add getAllOrganizations organization viewAll addOrganization add viewAll updateOrganization update viewAll deleteOrganization delete viewAll getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId"},{"location":"interacting/ssh/","title":"SSH","text":"

          Lagoon allows you to connect to your running containers via SSH. The containers themselves don't actually have an SSH server installed, but instead you connect via SSH to Lagoon, which then itself creates a remote shell connection via the Kubernetes API for you.

          "},{"location":"interacting/ssh/#ensure-you-are-set-up-for-ssh-access","title":"Ensure you are set up for SSH access","text":""},{"location":"interacting/ssh/#generating-an-ssh-key","title":"Generating an SSH Key","text":"

          It is recommended to generate a separate SSH key for each device as opposed to sharing the same key between multiple computers. Instructions for generating an SSH key on various systems can be found below:

          "},{"location":"interacting/ssh/#osx-mac","title":"OSX (Mac)","text":"

          Mac

          "},{"location":"interacting/ssh/#linux-ubuntu","title":"Linux (Ubuntu)","text":"

          Linux

          "},{"location":"interacting/ssh/#windows","title":"Windows","text":"

          Windows

          "},{"location":"interacting/ssh/#ssh-agent","title":"SSH Agent","text":""},{"location":"interacting/ssh/#osx-mac_1","title":"OSX (Mac)","text":"

          OSX does not have its SSH agent configured to load configured SSH keys at startup, which can cause some headaches. You can find a handy guide to configuring this capability here: https://www.backarapper.com/add-ssh-keys-to-ssh-agent-on-startup-in-macos/

          "},{"location":"interacting/ssh/#linux","title":"Linux","text":"

          Linux distributions vary in how they use the ssh-agent . You can find a general guide here: https://www.ssh.com/academy/ssh/agent

          "},{"location":"interacting/ssh/#windows_1","title":"Windows","text":"

          SSH key support in Windows has improved markedly as of recently, and is now supported natively. A handy guide to configuring the Windows 10 SSH agent can be found here: https://richardballard.co.uk/ssh-keys-on-windows-10/

          "},{"location":"interacting/ssh/#uploading-ssh-keys","title":"Uploading SSH Keys","text":""},{"location":"interacting/ssh/#via-the-ui","title":"Via the UI","text":"

          You can upload your SSH key(s) through the UI. Log in as you normally would.

          In the upper right hand corner, click on Settings:

          You will then see a page where you can upload your SSH key(s), and it will show any uploaded keys. Paste your key into the text box, give it a name, and click \"Add.\" That's it! Add additional keys as needed.

          "},{"location":"interacting/ssh/#via-command-line","title":"Via Command Line","text":"

          A general example of using the Lagoon API via GraphQL to add an SSH key to a user can be found here

          "},{"location":"interacting/ssh/#ssh-into-a-pod","title":"SSH into a pod","text":"

          Note

          The easiest way to SSH into a pod is to use the Lagoon CLI.

          The instructions below only apply if you want to use the regular ssh client, or other advanced use cases.

          "},{"location":"interacting/ssh/#connection","title":"Connection","text":"

          Connecting is straightforward and follows the following pattern:

          SSH
          ssh [PROJECT-ENVIRONMENT-NAME]@[HOST]\n
          • HOST - The remote shell SSH endpoint host (for example ssh.example.com).
          • PROJECT-ENVIRONMENT-NAME - The environment you want to connect to. This is most commonly in the pattern PROJECTNAME-ENVIRONMENT.

          As an example:

          SSH example
          ssh drupal-example-main@ssh.example.com\n

          This will connect you to a cli pod in the environment main of the project drupal-example.

          "},{"location":"interacting/ssh/#podservice-container-definition","title":"Pod/Service, Container Definition","text":"

          By default the remote shell will try to connect you to the first container in the pod of the service type cli. If you would like to connect to another service you can specify it using a service=[SERVICE-NAME] argument to the SSH command.

          Note

          When you run the ssh client command with just a USER@HOST argument, it will assume that you want an interactive session and allocate a pty. This give you a regular shell environment where you can enter commands at a prompt, send interrupts using ^C etc.

          However, when you provide an argument to the ssh client command, it assumes that you want a non-interactive session (e.g. just run a command and return) and will not allocate a pty.

          So when providing an argument such as service=[SERVICE-NAME], if you want an interactive shell session you need to tell the ssh client to not \"auto-detect\" if it needs a pty and just allocate one anyway using the -t flag.

          SSH to another service example
          ssh -t [PROJECT-ENVIRONMENT-NAME]@[HOST] service=[SERVICE-NAME]\n

          If your pod/service contains multiple containers, Lagoon will connect you to the first defined container. You can also define the specific container to connect to via:

          Define container
          ssh -t [PROJECT-ENVIRONMENT-NAME]@[HOST] service=[SERVICE-NAME] container=[CONTAINER-NAME]\n

          For example, to connect to the php container within the nginx pod:

          SSH to php container
          ssh -t drupal-example-main@ssh.example.com service=nginx container=php\n
          "},{"location":"interacting/ssh/#copying-files","title":"Copying files","text":"

          The common case of copying a file into your cli pod can be achieved with the usual SSH-compatible tools.

          "},{"location":"interacting/ssh/#scp","title":"scp","text":"Copy file with scp
          scp [local_path] [project_name]-[environment_name]@ssh.example.com:[remote_path]\n
          "},{"location":"interacting/ssh/#rsync","title":"rsync","text":"Copy files with rsync
          rsync --rsh=ssh [local_path] [project_name]-[environment_name]@ssh.example.com:[remote_path]\n
          "},{"location":"interacting/ssh/#tar","title":"tar","text":"Bash
          ssh [project_name]-[environment_name]@ssh.example.com tar -zcf - [remote_path] | tar -zxf - -C /tmp/\n
          "},{"location":"interacting/ssh/#specifying-non-cli-podservice","title":"Specifying non-CLI pod/service","text":"

          In the rare case that you need to specify a non-CLI service you can specify the service=... and/or container=... arguments in the copy command.

          Piping tar through the ssh connection is the simplest method, and can be used to copy a file or directory using the usual tar flags:

          Bash
          ssh [project_name]-[environment_name]@ssh.example.com service=solr tar -zcf - [remote_path] | tar -zxf - -C /tmp/\n

          You can also use rsync with a wrapper script to reorder the arguments to ssh in the manner required by Lagoon's SSH service:

          Bash
          #!/usr/bin/env sh\nsvc=$1 user=$3 host=$4\nshift 4\nexec ssh -l \"$user\" \"$host\" \"$svc\" \"$@\"\n

          Put that in an executable shell script rsh.sh and specify the service=... in the rsync command:

          rsync to non-CLI pod
          rsync --rsh=\"/path/to/rsh.sh service=cli\" /tmp/foo [project_name]-[environment_name]@ssh.example.com:/tmp/foo\n

          The script could also be adjusted to also handle a container=... argument.

          "},{"location":"lagoonizing/","title":"Lagoonizing Your Existing Site","text":"

          Lagoonizing, or getting your existing site ready for the Lagoon platform, isn't generally difficult (depending on your site and setup), but does have a handful of steps. We've put together a stepo-by-step guide to make this process easier for you.

          "},{"location":"lagoonizing/#requirements","title":"Requirements","text":"

          Make sure your system meets the requirements for working with Lagoon locally.

          "},{"location":"lagoonizing/#local-development-environment","title":"Local Development Environment","text":"

          Set up your local development environment. You can choose between Pygmy and Lando.

          "},{"location":"lagoonizing/#command-line-and-git","title":"Command Line and Git","text":"

          You'll need to interact with Lagoon via the command line, and you'll need Git as well, so make sure they're ready to go.

          "},{"location":"lagoonizing/#command-line","title":"Command line","text":"

          You\u2019ll need to use a command line terminal for some tasks. Whatever you want to use is fine, including your operating system default tool. Here are a few options:

          • iTerm2 (Mac)
          • PowerShell (Windows)
          • Fish (Mac, Windows, Linux)
          • Tabby (Mac, Windows, Linux)
          "},{"location":"lagoonizing/#install-git","title":"Install Git","text":"

          If you don\u2019t have one already, you\u2019ll need a Git client of some kind. Command line, GUI, whatever works for you (our examples will use the command line, FYI). Here are a few options:

          • Installing Git (Mac, Windows, Linux)
          • SourceTree (Mac, Windows)
          • GitHub Desktop (Mac, Windows)
          • GitKraken (Mac, Windows, Linux - free for public repositories)
          "},{"location":"lagoonizing/#what-your-lagoon-administrator-needs","title":"What your Lagoon administrator Needs","text":"

          The person setting up your Lagoon, usually your Lagoon administrator will need some information, which is detailed here.

          "},{"location":"lagoonizing/#configure-webhooks","title":"Configure Webhooks","text":"

          Next, you'll need to configure webhooks for your Git respository. You can find those instructions here.

          "},{"location":"lagoonizing/#docker-composeyml","title":"docker-compose.yml","text":"

          The docker-compose.yml file is used by Lagoon to:

          • Learn which services/containers should be deployed.
          • Define how the images for the containers are built.
          • Define additional configurations like persistent volumes.

          You can read more about it in our docker-compose.yml documentation.

          This is the first of two files we\u2019ll create and set up to get your site ready for Lagoon.

          Docker-compose (the tool) is very strict in validating the content of the YAML file, so we can only do configuration within labels of a service definition.

          Warning

          Lagoon only reads the labels, service names, image names and build definitions from a docker-compose.yml file. Definitions like: ports, environment variables, volumes, networks, links, users, etc. are IGNORED. This is intentional, as the docker-compose file is there to define your local environment configuration. Lagoon learns from the lagoon.type the type of service you are deploying and from that knows about ports, networks and any additional configuration that this service might need.

          Let\u2019s walk through setting up some basic services. In this example, we\u2019ll set up NGINX, PHP, and MariaDB, which you\u2019ll need for many systems like Drupal, Laravel, and other content management systems.

          Here is a straightforward example of a docker-compose.yml file for Drupal:

          docker-compose.yml
          version: '2.3'\nx-lagoon-project:\n# Lagoon project name (leave `&lagoon-project` when you edit this)\n&lagoon-project drupal-example\nx-volumes:\n&default-volumes\n# Define all volumes you would like to have real-time mounted into the docker containers\nvolumes:\n- .:/app:delegated\nx-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# Route that should be used locally, if you are using pygmy, this route *must* end with .docker.amazee.io\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n# Uncomment if you would like to have the system behave like in production\n#LAGOON_ENVIRONMENT_TYPE: production\n# Uncomment to enable xdebug and then restart via `docker compose up -d`\n#XDEBUG_ENABLE: \"true\"\nx-user:\n&default-user\n# The default user under which the containers should run. Change this if you are on linux and run with a user other than id `1000`.\nuser: '1000'\nservices:\nnginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.name: nginx\nlagoon.persistent: /app/web/sites/default/files/\nmariadb:\nimage: uselagoon/mariadb-10.11-drupal\nlabels:\nlagoon.type: mariadb\n

          Now let\u2019s break down what each of these options mean.

          "},{"location":"lagoonizing/#basic-settings","title":"Basic Settings","text":"

          x-lagoon-project: This is the machine name of your project, define it here. We\u2019ll use \u201cdrupal-example.\u201d

          x-volumes: This tells Lagoon what to mount into the container. Your web application lives in /app, but you can add or change this if needed.

          x-environment:

          • Here you can set your local development URL. If you are using Pygmy, it must end with .docker.amazee.io.
          • If you want to exactly mimic the production environment, uncomment LAGOON_ENVIRONMENT_TYPE: production.
          • If you want to enable x-debug, uncomment DEBUG_ENABLE: \"true\".

          x-user: You are unlikely to need to change this, unless you are on Linux and would like to run with a user other than 1000.

          "},{"location":"lagoonizing/#services","title":"services","text":"

          This defines all the services you want to deploy. Unfortunately, docker-compose calls them services, even though they are actually defining the containers. Going forward we'll be calling them services, and throughout this documentation.

          The name of the service (nginx, php, and mariadb in the example above) is used by Lagoon as the name of the Kubernetes pod (yet another term - again, we'll be calling them services) that is generated, plus any additional Kubernetes objects that are created based on the defined lagoon.type. This could be things like services, routes, persistent storage, etc.

          "},{"location":"lagoonizing/#docker-images","title":"Docker Images","text":"

          If you want Lagoon to build a Dockerfile for your service during every deployment, you can define it here:

          build

          • context
            • The build context path that should be passed on into the Docker build command.
          • dockerfile:
            • Location and name of the Dockerfile that should be built.

          Warning

          Lagoon does NOT support the short version of build: <Dockerfile> and will fail if it finds such a definition.

          image

          • If you don't need to build a Dockerfile and just want to use an existing Dockerfile, define it via image.

          In our example, we\u2019re giving the path of the current directory. NGINX is set to build nginx.dockerfile, and PHP, php.dockerfile. MariaDB is using an existing image at uselagoon/mariadb-10.11-drupal. You can learn more about our Docker images here.

          "},{"location":"lagoonizing/#types","title":"Types","text":"

          Lagoon needs to know what type of service you are deploying in order to configure the correct Kubernetes objects.

          This is done via the lagoon.type label. There are many different types to choose from. Read our public documentation about Service Types to see all of them and their additional configuration possibilities.

          You might have noticed that in our example, both the PHP and NGINX services have their type defined as nginx-php-persistent. That\u2019s because they are what\u2019s called multi-container pods.

          "},{"location":"lagoonizing/#multi-container-pods","title":"Multi-Container Pods","text":"

          Kubernetes doesn\u2019t deploy plain containers. Instead, it deploys pods, with each one or more containers. Usually Lagoon creates a single pod with a container inside for each defined docker-compose service. For some cases, we need to put two containers inside a single pod, as these containers are so dependent on each other that they should always stay together. An example for such a situation is the PHP and NGINX containers that both contain PHP code of a web application like Drupal, as we\u2019ve done above.

          For these cases, it is possible to tell Lagoon which services should stay together. This is done in the following way (remember that we are calling containers services):

          1. Define both services with a lagoon.type that expects two services (in the example this is nginx-php-persistent defined on the NGINX and PHP services).
          2. Link the second service with the first one, setting the label lagoon.name of the second one to match the first one. (in the example this is done by setting lagoon.name: nginx).

          This will cause Lagoon to realize that the nginx and php services are combined in a pod that will be called nginx.

          Lagoon still needs to understand which of the two services is the actual individual service type (nginx and php in this case). It does this by searching for the service names of the matching service types. nginx-php-persistent expects one service with the name nginx and one with php in the docker-compose.yml.

          If for any reason you want to use different names for the services, or you need more than one pod with the type nginx-php-persistent, there is an additional label lagoon.deployment.servicetype, which can be used to define the actual service type.

          Here\u2019s an example showing how multi-container pods can be set up in more detail:

          docker-compose.yml
          nginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # If this isn't present, Lagoon will use the container name, which in this case is nginx.\nlagoon.deployment.servicetype: nginx\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # We want this service to be part of the nginx pod in Lagoon.\nlagoon.deployment.servicetype: php\n

          There is quite a bit more you can do in docker-compose.yml, but setting up your services is the most important part. Check out our documentation on docker-compose.yml to learn what else you can do.

          "},{"location":"lagoonizing/#lagoonyml","title":".lagoon.yml","text":"

          The .lagoon.yml file is the central file for setting up your project. It contains configuration in order to do the following:

          • Define routes for accessing your sites.
          • Define pre-rollout tasks.
          • Define post-rollout tasks.
          • Set up SSL certificates.
          • Add cron jobs for environments.

          The .lagoon.yml file must be created and placed at the root of your Git repository.

          Here is an example .lagoon.yml file showing a variety of configuration options for a Drupal site that we\u2019ll go over:

          .lagoon.yml
          docker-compose-yaml: docker-compose.yml\nenvironment_variables:\ngit_sha: 'true'\ntasks:\npre-rollout:\n- run:\nname: drush sql-dump\ncommand: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz\nservice: cli\npost-rollout:\n- run:\nname: drush cim\ncommand: drush -y cim\nservice: cli\nshell: bash\n- run:\nname: drush cr\ncommand: drush -y cr\nservice: cli\nroutes:\ninsecure: Redirect\nenvironments:\nmain:\nroutes:\n- nginx:\n- example.com\n- example.net\n- \"www.example.com\":\ntls-acme: 'true'\ninsecure: Redirect\nhsts: max-age=31536000\n- \"example.ch\":\nAnnotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nstaging:\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\n
          "},{"location":"lagoonizing/#general-settings","title":"General Settings","text":""},{"location":"lagoonizing/#docker-compose-yaml","title":"docker-compose-yaml","text":"

          This file tells the build script which docker-compose YAML file should be used, in order to learn which services and containers should be deployed. This defaults to docker-compose.yml, but could be used for a specific Lagoon docker-compose YAML file if you need something like that.

          "},{"location":"lagoonizing/#environment_variablesgit_sha","title":"environment_variables.git_sha","text":"

          This setting allows you to enable injecting the deployed Git SHA into your project as an environment variable. By default this is disabled. Setting the value to true sets the SHA as the environment variable LAGOON_GIT_SHA.

          "},{"location":"lagoonizing/#tasks","title":"Tasks","text":"

          There are different type of tasks you can define, and they differ when exactly they are executed in a build flow:

          "},{"location":"lagoonizing/#pre-rollout-tasks-pre_rolloutirun","title":"Pre-Rollout Tasks - pre_rollout.[i].run","text":"

          The tasks defined as pre_rollout tasks will run against your project after the new images have been built successfully, and before the project gets altered in any way. This feature enables you, for example, to create a database dump before the rollout is running, as in our example above. This will make it easier to roll back in case of an issue with the rollout.

          "},{"location":"lagoonizing/#post-rollout-tasks-post_rolloutirun","title":"Post-Rollout Tasks - post_rollout.[i].run","text":"

          Here you can specify tasks which need to run against your project, after:

          • All images have been successfully built.
          • All containers are updated with the new images.
          • All running containers have passed their readiness checks.

          Common uses for post_rollout tasks include running drush updb, drush cim, or clearing various caches. In the above example, we run drush cim and drush cr.

          name

          • The name is an arbitrary label for making it easier to identify each task in the logs.

          command

          • Here you specify what command should run. These are run in the WORKDIR of each container. For Lagoon images this is /app, keep this in mind if you need to cd into a specific location to run your task.

          service

          • The service in which to run the task. If following our drupal-example, this will be the CLI container, as it has all your site code, files, and a connection to the database. Typically you do not need to change this.

          shell

          Which shell should be used to run the task. By default sh is used, but if the container also has other shells (like bash), you can define it here. This is useful if you want to run some small if/else bash scripts within the post-rollouts. (see the example above for how to write a script with multiple lines).

          "},{"location":"lagoonizing/#routes","title":"Routes","text":""},{"location":"lagoonizing/#routesautogenerateenabled","title":"routes.autogenerate.enabled","text":"

          This allows for the disabling of the automatically created routes altogether. This does NOT disable the custom routes per environment, see below for more on that.

          "},{"location":"lagoonizing/#routesautogenerateinsecure","title":"routes.autogenerate.insecure","text":"

          This allows you to define the behavior of the automatically created routes. This does NOT configure the custom routes per environment, see below for more on that. This is the option we\u2019re using in the example above, with insecure: Redirect.

          The following options are allowed:

          Allow

          • Sets up routes for both HTTP and HTTPS (this is the default).

          Redirect

          • Will redirect any HTTP requests to HTTPS.

          None

          • A route for HTTP will not be created, and no redirect.
          "},{"location":"lagoonizing/#environments","title":"Environments","text":"

          Environment names match your deployed branches or pull requests. This allows each environment to have a different configuration. In this example, we have the environments main and staging.

          "},{"location":"lagoonizing/#environmentsnameroutes","title":"environments.[name].routes","text":"

          In the route section, we identify the domain names to which the environment will respond. It is typical to only have an environment with routes specified for your production environment. All environments receive a generated route, but sometimes there is a need for a non-production environment to have its own domain name. You can specify it here, and then add that domain with your DNS provider as a CNAME to the generated route name (these routes publish in deploy messages).

          The first element after the environment is the target service, NGINX in our example. This is how we identify which service incoming requests will be sent to.

          The simplest route is the example.com example in our sample .lagoon.yml above - you can see it has no additional configuration. This will assume that you want a Let's Encrypt certificate for your route and no redirect from HTTPS to HTTP.

          "},{"location":"lagoonizing/#annotations","title":"Annotations","text":"

          Info

          Route/Ingress annotations are only supported by projects that deploy into clusters that run nginx-ingress controllers! Check with your Lagoon administrator if this is supported.

          Annotations can be a YAML map of annotations supported by the nginx-ingress controller, this is specifically useful for easy redirects:

          In this example any requests to example.ch will be redirected to https://www.example.ch with keeping folders or query parameters intact:

          (example.com/folder?query -> https://www.example.ch/folder?query)

          .lagoon.yml example
                  - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\n

          You can of course also redirect to any other URL not hosted on Lagoon. This will direct requests to example.de to https://www.google.com:

          .lagoon.yml example
                  - \"example.de\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com\n
          "},{"location":"lagoonizing/#ssl-configuration-tls-acme","title":"SSL Configuration - tls-acme","text":"

          tls-acme : \u2018true\u2019

          • Tells Lagoon to issue a Let's Encrypt certificate for that route. This is the default.
          • If you don't want a Let's Encrypt, set this to tls-acme: \u2018false\u2019.

          insecure

          • Can be set to None, Allow or Redirect.
          • Allow simply sets up both routes for HTTP and HTTPS (this is the default).
          • Redirect will redirect any HTTP requests to HTTPS.

          None

          • Will mean a route for HTTP will not be created, and no redirect will take place.

          Hsts

          • Can be set to a value of max-age=31536000;includeSubDomains;preload.
          • Ensure there are no spaces and no other parameters included.
          • Only the max-age parameter is required. The required max-age parameter indicates the length of time, in seconds, the HSTS policy is in effect for.

          Info

          If you plan to switch from a SSL certificate signed by a Certificate Authority (CA) to a Let's Encrypt certificate, it's best to get in touch with your Lagoon administrator to oversee the transition.

          "},{"location":"lagoonizing/#environmentsnametypes","title":"environments.[name].types","text":"

          The Lagoon build process checks the lagoon.type label from the docker-compose.yml file in order to learn what type of service should be deployed (read more about them in the documentation of docker-compose.yml).

          Sometimes you might want to override the type just for a single environment, and not for all of them.

          "},{"location":"lagoonizing/#service-name-service-type","title":"`service-name: service-type","text":"
          • service-name`` is the name of the service fromdocker-compose.yml` you would like to override.
          • service-type the type of the service you would like to use in your override.

          For example, if you want a MariaDB-Galera high availability database for your production environment called main - this is what we\u2019re doing in our example file:

          .lagoon.yml example
          environments:\nmain:\ntypes:\nmariadb: mariadb-galera\n
          "},{"location":"lagoonizing/#environmentsnametemplates","title":"environments.[name].templates","text":"

          The Lagoon build process checks the lagoon.template label from the docker-compose.yml file in order to check if the service needs a custom template file (read more about them in the documentation of docker-compose.yml).

          Sometimes you might want to override the template just for a single environment, and not for all of them:

          "},{"location":"lagoonizing/#service-name-template-file","title":"service-name: template-file","text":"
          • service-name is the name of the service from docker-compose.yml you would like to override.
          • template-file is the path and name of the template to use for this service in this environment.
          .lagoon.yml example
          environments:\nmain:\ntemplates:\nmariadb: mariadb.main.deployment.yml\n
          "},{"location":"lagoonizing/#environmentsnamerollouts","title":"environments.[name].rollouts","text":"

          The Lagoon build process checks the lagoon.rollout label from the docker-compose.yml file in order to check if the service needs a special rollout type (read more about them in the documentation of docker-compose.yml).

          Sometimes you might want to override the rollout type just for a single environment, especially if you also overwrote the template type for the environment:

          "},{"location":"lagoonizing/#service-name-rollout-type","title":"service-name: rollout-type","text":"
          • service-name is the name of the service from docker-compose.yml you would like to override.
          • rollout-type is the type of rollout. See the documentation of docker-compose.yml for possible values.
          .lagoon.yml example
          environments:\nmain:\nrollouts:\nmariadb: statefulset\n
          "},{"location":"lagoonizing/#cron-jobs-environmentsnamecronjobs","title":"Cron jobs - environments.[name].cronjobs","text":"

          As most of the time it is not desirable to run the same cron jobs across all environments, you must explicitly define which jobs you want to run for each environment. In our example, we\u2019re creating a drush cron job that will run once per hour.

          name

          • Just a friendly name for identifying what the cron job will do.

          schedule

          • The schedule for executing the cron job. This follows the standard convention of cron. If you're not sure about the syntax, Crontab Generator can help.
          • You can specify M for the minute, and your cron job will run once per hour at a random minute (the same minute each hour), or M/15 to run it every 15 mins, but with a random offset from the hour (like 6, 21, 36, 51).
          • You can specify H for the hour, and your cron job will run once per day at a random hour (the same hour every day), or H(2-4) to run it once per day within the hours of 2-4.

          command

          • The command to execute. Like the tasks, this executes in the WORKDIR of the service. For Lagoon images, this is /app.

          service

          • Which service of your project to run the command in. For most projects, this is the CLI service.

          There is quite a bit more you can do in .lagoon.yml. Check out our documentation on .lagoon.yml to find out.

          "},{"location":"lagoonizing/#drupal-specific-setup","title":"Drupal-specific Setup","text":"

          If you\u2019re moving a Drupal site to Lagoon, there are a few Drupal-specific tasks to complete in order to get everything all set up.

          "},{"location":"lagoonizing/#settings-files","title":"Settings Files","text":"

          The next step is to update your settings files. Lagoon uses a set of environment-specific settings files which use environment variables, so no sensitive information is stored in these files, and they are all safe to commit. We have a variety of different example projects in our example repository - if you\u2019re starting from scratch, we encourage using one of them. If you\u2019re not, just pick a similar one and copy the relevant settings files. Check out the documentation on environment variables for more information on how to use them.

          Copy in the settings files from the example repository, and then review it to remove configuration for services that your site isn\u2019t using (for example, not all sites use Solr or Redis). If you need to override configuration for a specific environment type (things like disabling caching on development environments), additional settings files can be set up (there\u2019s even some in the example repository already), and are loaded in the following order:

          settings.php
           all.settings.php\n all.services.yml\n production.settings.php\n production.services.yml\n development.settings.php\n development.services.yml\n settings.local.php\n services.local.yml\n
          "},{"location":"lagoonizing/#update-your-gitignore-settings","title":"Update Your .gitignore Settings","text":"

          Make sure your .gitignore will allow you to commit the settings files. Drupal is shipped with sites/*/settings*.php and sites/*/services*.yml in .gitignore. You can remove that, as with Lagoon we don't ever keep sensitive information in the Git repository.

          "},{"location":"lagoonizing/#note-about-webroot-in-drupal","title":"Note About Webroot in Drupal","text":"

          Unfortunately the Drupal community has not decided on a standardized webroot folder name. Some projects put Drupal within /web, and others within /docroot or somewhere else. The Lagoon Drupal settings files assume that your Drupal is within /web, if this is different for your Drupal installation, please adapt the files accordingly.

          "},{"location":"lagoonizing/#build-your-images","title":"Build Your Images","text":"

          First, we need to build the defined images:

          build your images
          docker compose build\n

          This may take several minutes and you\u2019ll get a long response, which should look something like this.

          This will tell docker-compose to build the Docker images for all containers that have a build: definition in docker-compose.yml. Usually for Drupal this includes cli, nginx and php. We do this because we want to run specific build commands (like composer install) or inject specific environment variables (like WEBROOT) into the images.

          Usually building is not needed every time you edit your Drupal code (as the code is mounted into the containers from your host), but rebuilding does not hurt. Plus Lagoon will build the exact same Docker images during a deployment, so you check that your build will also work during a deployment by just running docker compose build again.

          "},{"location":"lagoonizing/#start-containers","title":"Start Containers","text":"

          Now that the images are built, we can start the containers:

          start the containers
          docker compose up -d\n

          You will get a response something like this:

          containers started
          \u279c  lagoon-test git:(main) docker compose up -d\nRecreating lagoon-test_cli_1   ... done\nStarting lagoon-test_redis_1   ... done\nStarting lagoon-test_solr_1    ... done\nStarting lagoon-test_mariadb_1 ... done\nRecreating lagoon-test_php_1   ... done\nRecreating lagoon-test_nginx_1 ... done\nRecreating lagoon-test_varnish_1 ... done\n

          This will bring up all containers. After the command is done, you can check with docker compose ps to ensure that they are all fully up and have not crashed. That response should look something like this:

          view running containers
          \u279c  lagoon-test git:(main) docker compose ps\nName                       Command               State            Ports\n----------------------------------------------------------------------------------------\nlagoon-test_cli_1       /sbin/tini -- /lagoon/entr ...   Up      9000/tcp\nlagoon-test_mariadb_1   /sbin/tini -- /lagoon/entr ...   Up      0.0.0.0:32768->3306/tcp\nlagoon-test_nginx_1     /sbin/tini -- /lagoon/entr ...   Up      8080/tcp\nlagoon-test_php_1       /sbin/tini -- /lagoon/entr ...   Up      9000/tcp\nlagoon-test_redis_1     /sbin/tini -- /lagoon/entr ...   Up      6379/tcp\nlagoon-test_solr_1      /sbin/tini -- /lagoon/entr ...   Up      0.0.0.0:32769->8983/tcp\n

          If there is a problem, check the logs with docker compose logs -f [servicename].

          "},{"location":"lagoonizing/#re-run-composer-install-for-composer-projects-only","title":"Re-Run `composer install`` (for Composer projects only)","text":"

          If you\u2019re running a Drupal 8+ project, you should be using Composer, and you\u2019ll need to get all dependencies downloaded and installed. Connect into the cli container and run composer install:

          re-run composer install
          docker compose exec cli bash\n[drupal-example]cli-drupal:/app$ composer install\n

          This might sound weird, as there was already a composer install executed during the build step, so here\u2019s why we do this again:

          • In order to be able to edit files on the host and have them immediately available in the container, the default docker-composer.yml mounts the whole folder into the containers (this happens with .:/app:delegated in the volumes section). This also means that all dependencies installed during the Docker build are overwritten with the files on the host.
          • Locally, you probably want access to dependencies defined as require-dev in composer.json, while on a production deployment they would just use unnecessary space. So we run composer install --no-dev in the Dockerfile and composer install manually.

          If everything went well, open the LAGOON_ROUTE defined in docker-compose.yml (for example http://drupal.docker.amazee.io) and you should be greeted by a nice Drupal error. Don't worry - that's okay right now, the most important thing is that it tries to load a Drupal site.

          If you get a 500 or similar error, make sure that everything is loaded properly with Composer.

          "},{"location":"lagoonizing/#check-status-and-install-drupal","title":"Check Status and Install Drupal","text":"

          Finally it's time to install Drupal, but just before that we want to make sure everything works. We suggest using Drush for that with drush status:

          run drush status
          docker compose exec cli bash\n[drupal-example]cli-drupal:/app$ drush status\n

          The above command should return something like the following:

          drush status results
          [drupal-example]cli-drupal:/app$ drush status\n[notice] Missing database table: key_value\nDrupal version       :  8.6.1\nSite URI             :  http://drupal.docker.amazee.io\nDatabase driver      :  mysql\nDatabase hostname    :  mariadb\nDatabase port        :  3306\nDatabase username    :  drupal\nDatabase name        :  drupal\nPHP binary           :  /usr/local/bin/php\nPHP config           :  /usr/local/etc/php/php.ini\nPHP OS               :  Linux\nDrush script         :  /app/vendor/drush/drush/drush\nDrush version        :  9.4.0\nDrush temp           :  /tmp\nDrush configs        :  /home/.drush/drush.yml\n                        /app/vendor/drush/drush/drush.yml\nDrupal root          :  /app/web\nSite path            :  sites/default\n

          You may have to tell pygmy about your public key before the next step. If you get an error like Permission denied (publickey), check out the documentation here: pygmy - adding ssh keys.

          Now it\u2019s time to install Drupal (if instead you would like to import an existing SQL File, please skip to the next step, but we suggest you install a clean Drupal in the beginning to be sure everything works.)

          run drush si

          [drupal-example]cli-drupal:/app$ drush site-install\n
          This should output something like:

          drush si results
          [drupal-example]cli-drupal:/app$ drush site-install\nYou are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y\nStarting Drupal installation. This takes a while. Consider using the --notify global option.\nInstallation complete.  User name: admin  User password: arbZJekcqh\nCongratulations, you installed Drupal!\n

          Now you can visit the URL defined in LAGOON_ROUTE and you should see a fresh and cleanly installed Drupal - Congrats!

          "},{"location":"lagoonizing/#import-existing-database-dump","title":"Import existing Database Dump","text":"

          If you have an already existing Drupal site you probably want to import its database over to your local site. There are many different ways on how to create a database dump, if your current hosting provider has Drush installed, you can use the following:

          drush sql-dump
          [your-existing-site]$ drush sql-dump --result-file=dump.sql\nDatabase dump saved to dump.sql                         [success]\n

          Now you have a dump.sql file that contains your whole database. Copy this file into your local Git repository and connect to the CLI, you should see the file in there:

          here's our dump file

          [drupal-example] docker compose exec cli bash\n[drupal-example]cli-drupal:/app$ ls -l dump.sql\n-rw-r--r--    1 root     root          5281 Dec 19 12:46 dump.sql\n
          Now you can import the dump after dropping the current database (still connected to the cli):

          dump existing db and import dump file
          [drupal-example]cli-drupal:/app$ drush sql-drop\nDo you really want to drop all tables in the database drupal? (y/n): y\n[drupal-example]cli-drupal:/app$ drush sql-cli < dump.sql\n
          "},{"location":"lagoonizing/#drupal-files-directory","title":"Drupal files directory","text":"

          A Drupal site also consists of the files directory. To migrate your files from your existing site, just add the files into the correct folder (probably web/sites/default/files, sites/default/files or something similar). Remember what you've set as your webroot - it may not be the same for all projects.

          "},{"location":"lagoonizing/#deploy","title":"Deploy","text":"

          If you\u2019ve done everything in this guide, and your Lagoon administrator has everything set up, you are now ready to deploy your site!

          If you are deploying a Drupal site, follow this deployment guide.

          For all other deployments, follow this deployment guide.

          "},{"location":"logging/kibana-examples/","title":"Kibana Examples","text":"

          Have you seen the Kibana getting started video and are now ready to work with logs? We are here to help! This page will give you examples of Kibana queries you can use. This is not a Kibana 101 class, but it can help you understand some of what you can do in Kibana.

          Ready to get started? Good!

          Note

          Make sure that you have selected your tenant before starting! You can do that by on the Tenant icon on the left-hand menu. Once you have selected your tenant, click on the Discover icon again to get started.

          "},{"location":"logging/kibana-examples/#router-logs","title":"Router Logs","text":"

          Below you'll find examples for two common log requests:

          • Viewing the total number of hits/requests to your site.
          • Viewing the number of hits/requests from a specific IP address.
          "},{"location":"logging/kibana-examples/#total-number-of-hitsrequests-to-your-site","title":"Total Number of hits/requests to your site","text":"
          • Let's start Kibana up and select Discovery (#1 in screen shot below)
          • Then the router logs for your project(#2).
          • From there, we will filter some of this information down a bit. Let's focus on our main production environment.
          • In the search bar (#3), enter:

            openshift_project: \"name of your production project\"

          • This will show you all the hits to your production environment in the given time frame.
          • You can change the time frame in the upper right hand corner (#4).
          • Clicking on the arrow next to the entry (#5) will expand it and show you all the information that was captured.
          • You can add any of those fields to the window by hovering over them and clicking add on the left hand side (#6).
          • You can also further filter your results by using the search bar.

          "},{"location":"logging/kibana-examples/#number-of-hitsrequests-from-a-specific-ip-address","title":"Number of hits/requests from a specific IP address","text":"

          Running the query above will give you a general look at all the traffic to your site, but what if you want to narrow in on a specific IP address? Perhaps you want to see how many times an IP has hit your site and what specific pages they were looking at. This next query should help.

          We are going to start off with the same query as above, but we are going to add a couple of things.

          • First, add the following fields: client_ip and http_request.
          • This will show you a list of all IP addresses and the page they requested. Here is what we see for the amazee.io website:

          That looks good, but what if we wanted to just show requests from a specific IP address? You can filter for the address by adding it to your search criteria.

          • We are going to add: AND client_ip: \"IP address\".
          • That will filter the results to just show you hits from that specific IP address, and the page they were requesting. Here is what it looks like for our amazee.io website:

          "},{"location":"logging/kibana-examples/#container-logs","title":"Container Logs","text":"

          Container logs will show you all stout and sterr messages for your specific container and project. We are going to show an example for getting logs from a specific container and finding specific error numbers in that container.

          "},{"location":"logging/kibana-examples/#logs-from-a-container","title":"Logs from a container","text":"

          Want to see the logs for a specific container (php, nginx, etc)? This section will help! Let's focus on looking at NGINX logs.

          • We start by opening up Kibana and selecting Discover (#1 in the screen shot below).
          • From there, we select the container logs for our project (#2).
          • Let's go to the search bar (#3) and enter: kubernetes.container_name: \"nginx\"
          • This will display all NGINX logs for our project.
          • Clicking on the arrow next to an entry (#4) will expand that entry and show you all of the information it gathered.
          • Let's add the message field and the level field to the view. You can do that by clicking on \"Add\" on the left hand side (#5).
          • You can change the time frame in the upper right hand corner of the screen (#6), in the example below I'm looking at logs for the last 4 hours.

          "},{"location":"logging/kibana-examples/#specific-errors-in-logs","title":"Specific errors in logs","text":"

          Want to see how many 500 Internal Server errors you've had in your NGINX container? You can do that by changing the search query. If you search:

          kubernetes.container_name: \"nginx\" AND message: \"500\"

          That will only display 500 error messages in the NGINX container. You can search for any error message in any container that you would like!

          "},{"location":"logging/kibana-examples/#visualization","title":"Visualization","text":"

          Kibana will also give you the option to create visualizations or graphs. We are going to create a chart to show number of hits/requests in a month using the same query we used above.

          1. Click on Visualize on the left hand side of Kibana.
          2. Click on the blue plus sign.
          3. For this example, we are going to select a Vertical Bar chart.
          4. Select the router logs for your project.
          5. Click on X-Axis under Buckets and select Date Histogram, with the interval set to daily
          6. Success!! You should now see a nice bar graph showing your daily traffic.

          Note

          Make sure that you select an appropriate time frame for the data in the upper right hand corner.

          Here is an example of a daily hits visualization chart:

          Also note that you can save your visualizations (and searches)! That will make it even faster to access them in the future. And because each account has their own Kibana Tenant, no searches or visualizations are shared with another account.

          "},{"location":"logging/kibana-examples/#troubleshooting","title":"Troubleshooting","text":""},{"location":"logging/logging/","title":"Logging","text":"

          Lagoon provides access to the following logs via Kibana:

          • Logs from the Kubernetes Routers, including every single HTTP and HTTPS request with:
            • Source IP
            • URL
            • Path
            • HTTP verb
            • Cookies
            • Headers
            • User agent
            • Project
            • Container name
            • Response size
            • Response time
          • Logs from containers:
            • stdout and stderr messages
            • Container name
            • Project
          • Lagoon logs:
            • Webhooks parsing
            • Build logs
            • Build errors
            • Any other Lagoon related logs
          • Application logs:
            • For Drupal: install the Lagoon Logs module in order to receive logs from Drupal Watchdog.
            • For Laravel: install the Lagoon Logs for Laravel package.
            • For other workloads:
              • Send logs to udp://application-logs.lagoon.svc:5140
              • Ensure logs are structured as JSON encoded objects.
              • Ensure the type field contains the name of the Kubernetes namespace ($LAGOON_PROJECT-$LAGOON_ENVIRONMENT).

          To access the logs, please contact your Lagoon administrator to get the URL for the Kibana route.

          Each Lagoon user account has their own login and will see the logs only for the projects to which they have access.

          Each Lagoon user account also has their own Kibana Tenant, which means no saved searches or visualizations are shared with another account.

          If you would like to know more about how to use Kibana: https://www.elastic.co/webinars/getting-started-kibana.

          "},{"location":"other-tools/client-libraries/","title":"Lagoon client libraries","text":"

          If you're interested in developing tooling for the Lagoon ecosystem, there are a few libraries that you may find helpful.

          "},{"location":"other-tools/client-libraries/#golang","title":"Golang","text":""},{"location":"other-tools/client-libraries/#machinery","title":"Machinery","text":"

          The Machinery library is the most actively supported and developed of the tooling libraries for Lagoon. It is a central store of all the basic operations used across all our golang based tool types, primarily -- but not exclusively -- for API interaction.

          https://github.com/uselagoon/machinery/

          "},{"location":"other-tools/client-libraries/#php","title":"PHP","text":"

          If you're looking for PHP integration, the php-sdk may give you a good jumping off point for your work.

          https://github.com/uselagoon/lagoon-php-sdk

          "},{"location":"other-tools/client-libraries/#third-party-libraries","title":"Third Party Libraries","text":""},{"location":"other-tools/client-libraries/#ansible","title":"Ansible","text":"

          A frequently updated and expanding Ansible library for interacting with Lagoon.

          https://github.com/salsadigitalauorg/lagoon_ansible_collection

          "},{"location":"other-tools/sail/","title":"Sail:onLagoon","text":"

          Sail:onLagoon is a Laravel extension that simplifies the process of Lagoonizing Laravel sites that are already using Laravel Sail to generate their docker-compose setup. This extension provides additional features and configurations tailored for Lagoon environments.

          Check out Sail:onLagoon on GitHub: https://github.com/uselagoon/sailonlagoon

          Here's a quickstart step by step to get you started:

          Watch a short video demonstrating how quickly you can get a Laravel site ready for Lagoon:

          "},{"location":"releases/2.10.0/","title":"2.10.0","text":""},{"location":"releases/2.10.0/#release-links","title":"Release Links","text":"
          • lagoon v2.10.0
          • lagoon-ui core-v2.10.0
          • lagoon-build-deploy core-v2.10.0
          • lagoon-core chart 1.12.0
          "},{"location":"releases/2.10.0/#upgrades","title":"Upgrades","text":""},{"location":"releases/2.10.0/#upgrade-to-v29x-first","title":"Upgrade to v2.9.x first","text":"

          You must upgrade to Lagoon v2.9.x before upgrading to v2.10.0. Ensure you read all the linked release notes.

          "},{"location":"releases/2.10.0/#deprecations","title":"Deprecations","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.11.0/","title":"2.11.0","text":""},{"location":"releases/2.11.0/#release-links","title":"Release Links","text":"
          • lagoon v2.11.0
          • lagoon-ui core-v2.11.0
          • lagoon-build-deploy core-v2.11.0
          • lagoon-core chart 1.16.0
          "},{"location":"releases/2.11.0/#upgrades","title":"Upgrades","text":""},{"location":"releases/2.11.0/#upgrade-to-v210x-first","title":"Upgrade to v2.10.x first","text":"

          You must upgrade to Lagoon v2.10.x before upgrading to v2.11.0. Ensure you read all the linked release notes.

          "},{"location":"releases/2.11.0/#essential-database-backups","title":"Essential database backups","text":"

          Ensure you have a local backup of the api-db and keycloak-db before you commence this update, as there are complex migrations taking place in preparation for the v2.12.0 release.

          "},{"location":"releases/2.11.0/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.11.0/#storage-calculator-removed-from-core","title":"Storage Calculator removed from core","text":"

          The storage-calculator service was removed from core in this release, and the service is now included in lagoon-remote.

          "},{"location":"releases/2.12.0/","title":"2.12.0","text":""},{"location":"releases/2.12.0/#release-links","title":"Release Links","text":"
          • lagoon v2.12.0
          • lagoon-ui core-v2.12.0
          • lagoon-build-deploy core-v2.12.0
          • lagoon-core chart 1.23.0
          "},{"location":"releases/2.12.0/#upgrades","title":"Upgrades","text":""},{"location":"releases/2.12.0/#essential-database-backups","title":"Essential database backups","text":"

          Ensure you have a local backup of the api-db and keycloak-db before you commence this update. The update of these databases from MariaDB 10.4 to 10.6 should update seamlessly. In the event it does not go smoothly, the image cannot be rolled back owing to incompatible storage engines. You will need to drop the db and restore the backup to get running again.

          "},{"location":"releases/2.12.0/#kubernetes-121-minimum-requirement","title":"Kubernetes 1.21 minimum requirement","text":"

          The minimum supported version of Kubernetes is 1.21 as of this release.

          "},{"location":"releases/2.12.0/#deprecations","title":"Deprecations","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.13.0/","title":"2.13.0","text":""},{"location":"releases/2.13.0/#release-links","title":"Release Links","text":"
          • lagoon v2.13.0
          • lagoon-ui core-v2.13.0
          • lagoon-build-deploy core-v2.13.0
          • lagoon-core chart 1.25.0
          "},{"location":"releases/2.13.0/#upgrades","title":"Upgrades","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.13.0/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.13.0/#monitoring-urls","title":"monitoring-urls","text":"

          The storage and use of monitoring-urls provided in lagoon.yml has been removed from the API.

          "},{"location":"releases/2.14.0/","title":"2.14.0","text":""},{"location":"releases/2.14.0/#upgrades","title":"Upgrades","text":"

          This tag was never released, and the 2.14.2 release should be installed instead.

          "},{"location":"releases/2.14.0/#deprecations","title":"Deprecations","text":"

          This tag was never released, and the 2.14.2 release should be installed instead.

          "},{"location":"releases/2.14.1/","title":"2.14.1","text":""},{"location":"releases/2.14.1/#release-links","title":"Release Links","text":"
          • lagoon v2.14.2
          • lagoon-ui core-v2.14.2
          • lagoon-build-deploy core-v2.14.2
          • lagoon-core chart 1.28.0
          • lagoon-remote chart 0.76.0
          "},{"location":"releases/2.14.1/#release-notes","title":"Release Notes","text":"

          This release was superseded, and the 2.14.2 release is recommended to be installed instead.

          "},{"location":"releases/2.14.1/#upgrades","title":"Upgrades","text":"

          This release was superseded, and the 2.14.2 release is recommended to be installed instead.

          "},{"location":"releases/2.14.1/#deprecations","title":"Deprecations","text":"

          This release was superseded, and the 2.14.2 release is recommended to be installed instead.

          "},{"location":"releases/2.14.2/","title":"2.14.2","text":""},{"location":"releases/2.14.2/#release-links","title":"Release Links","text":"
          • lagoon v2.14.2
          • lagoon-ui core-v2.14.2
          • lagoon-build-deploy core-v2.14.2
          • lagoon-core chart 1.28.0
          • lagoon-remote chart 0.76.0
          "},{"location":"releases/2.14.2/#release-notes","title":"Release Notes","text":"

          This release resolved a couple of minor issues discovered after releasing the 2.14.0 and 2.14.1 releases.

          "},{"location":"releases/2.14.2/#upgrades","title":"Upgrades","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.14.2/#deprecations","title":"Deprecations","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.15.0/","title":"2.15.0","text":""},{"location":"releases/2.15.0/#release-links","title":"Release Links","text":"
          • lagoon v2.15.0
          • lagoon-ui core-v2.15.0
          • lagoon-build-deploy core-v2.15.0
          • lagoon-core chart 1.29.0
          "},{"location":"releases/2.15.0/#release-notes","title":"Release Notes","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.0/#upgrades","title":"Upgrades","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.0/#deprecations","title":"Deprecations","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.1/","title":"2.15.1","text":""},{"location":"releases/2.15.1/#release-links","title":"Release Links","text":"
          • lagoon v2.15.1
          • lagoon-ui core-v2.15.1
          • lagoon-build-deploy core-v2.15.1
          • lagoon-core chart 1.31.0
          "},{"location":"releases/2.15.1/#release-notes","title":"Release Notes","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.1/#upgrades","title":"Upgrades","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.1/#deprecations","title":"Deprecations","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.2/","title":"2.15.2","text":""},{"location":"releases/2.15.2/#release-links","title":"Release Links","text":"
          • lagoon v2.15.2
          • lagoon-ui core-v2.15.2
          • lagoon-build-deploy core-v2.15.2
          • lagoon-core chart 1.34.0
          "},{"location":"releases/2.15.2/#release-notes","title":"Release Notes","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.2/#upgrades","title":"Upgrades","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.2/#deprecations","title":"Deprecations","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.3/","title":"2.15.3","text":""},{"location":"releases/2.15.3/#release-links","title":"Release Links","text":"
          • lagoon v2.15.3
          • lagoon-ui core-v2.15.3
          • lagoon-build-deploy core-v2.15.3
          • lagoon-core chart 1.35.0
          "},{"location":"releases/2.15.3/#release-notes","title":"Release Notes","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.3/#upgrades","title":"Upgrades","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.3/#deprecations","title":"Deprecations","text":"

          This release was superseded, and the 2.15.4 release is recommended to be installed instead.

          "},{"location":"releases/2.15.4/","title":"2.15.4","text":""},{"location":"releases/2.15.4/#release-links","title":"Release Links","text":"
          • lagoon v2.15.4
          • lagoon-ui core-v2.15.4
          • lagoon-build-deploy core-v2.15.4
          • lagoon-core chart 1.36.0
          "},{"location":"releases/2.15.4/#release-notes","title":"Release Notes","text":"

          This release resolved a couple of minor issues discovered after releasing the 2.15.0, 2.15.1, 2.15.2, and 2.15.3 releases.

          "},{"location":"releases/2.15.4/#upgrades","title":"Upgrades","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.15.4/#deprecations","title":"Deprecations","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.16.0/","title":"2.16.0","text":""},{"location":"releases/2.16.0/#release-links","title":"Release Links","text":"
          • lagoon v2.16.0
          • lagoon-ui core-v2.16.0
          • lagoon-build-deploy core-v2.16.0
          • lagoon-core chart 1.37.0
          "},{"location":"releases/2.16.0/#upgrades","title":"Upgrades","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.16.0/#deprecations","title":"Deprecations","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.17.0/","title":"2.17.0","text":""},{"location":"releases/2.17.0/#release-links","title":"Release Links","text":"
          • lagoon v2.17.0
          • lagoon-ui core-v2.17.0
          • lagoon-build-deploy core-v2.17.0
          • lagoon-core chart 1.41.0
          • lagoon-remote chart 0.87.0
          "},{"location":"releases/2.17.0/#upgrades","title":"Upgrades","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.17.0/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.17.0/#activestandby-task-image","title":"activestandby task image","text":"
          • This release introduces a new active/standby task image that does not require the use of the dioscuri controller. Dioscuri is deprecated and will eventually be removed from the lagoon-remote helm chart. If you use active/standby functionality in your clusters, you should upgrade to lagoon v2.17.0 and update your remote clusters to the version of the lagoon-remote helm chart the in the 2.17.0 release.
          "},{"location":"releases/2.17.0/#api-harbor-support","title":"API Harbor support","text":"
          • Support for Harbor in the API will be removed in a future release. If you currently have your core installation with Harbor support, you should move to using the integration within lagoon-remote instead. See the documentation here and read the section about Harbor.
          • Removed in 2.20.1
          "},{"location":"releases/2.17.0/#harbor-21-and-earlier-support","title":"Harbor 2.1 and earlier support","text":"
          • Support for Harbor 2.1.x (chart version 1.5.x) and older in lagoon-remote will be removed in a future release. You should consider upgrading Harbor to a newer version (currently Lagoon supports up to v2.9.x (chart version 1.13.x)), following any recommended upgrade paths from Harbor.
          "},{"location":"releases/2.18.0/","title":"2.18.0","text":""},{"location":"releases/2.18.0/#release-links","title":"Release Links","text":"
          • lagoon v2.18.0
          • lagoon-ui core-v2.18.0
          • lagoon-build-deploy core-v2.18.0
          • lagoon-core chart 1.42.0
          • lagoon-remote chart 0.88.0
          "},{"location":"releases/2.18.0/#release-notes","title":"Release Notes","text":"

          This release was superseded, and the 2.18.2 release is recommended to be installed instead.

          "},{"location":"releases/2.18.0/#upgrades","title":"Upgrades","text":"

          This release was superseded, and the 2.18.2 release is recommended to be installed instead.

          "},{"location":"releases/2.18.0/#deprecations","title":"Deprecations","text":"

          This release was superseded, and the 2.18.2 release is recommended to be installed instead.

          "},{"location":"releases/2.18.1/","title":"2.18.1","text":""},{"location":"releases/2.18.1/#release-links","title":"Release Links","text":"
          • lagoon v2.18.1
          • lagoon-core chart 1.43.0
          "},{"location":"releases/2.18.1/#release-notes","title":"Release Notes","text":"

          This release was superseded, and the 2.18.2 release is recommended to be installed instead.

          "},{"location":"releases/2.18.1/#upgrades","title":"Upgrades","text":"

          This release was superseded, and the 2.18.2 release is recommended to be installed instead.

          "},{"location":"releases/2.18.1/#deprecations","title":"Deprecations","text":"

          This release was superseded, and the 2.18.2 release is recommended to be installed instead.

          "},{"location":"releases/2.18.2/","title":"2.18.2","text":""},{"location":"releases/2.18.2/#release-links","title":"Release Links","text":"
          • lagoon v2.18.2
          • lagoon-core chart 1.44.0
          "},{"location":"releases/2.18.2/#release-notes","title":"Release Notes","text":"

          This release resolved a couple of minor issues discovered after releasing the 2.18.0 and 2.18.1 release.

          "},{"location":"releases/2.18.2/#upgrades","title":"Upgrades","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.18.2/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.18.2/#in-built-drupal-tasks","title":"In-built Drupal Tasks","text":"
          • The standard drupal based tasks that Lagoon ships with (Drush ....) have been flagged as deprecated and should not be used anymore. These will need to be replaced with custom tasks. Example replacement tasks will be provided prior to their removal.
          "},{"location":"releases/2.18.2/#setenvironmentservices","title":"setEnvironmentServices","text":"
          • This release introduces a deprecation of the setEnvironmentServices mutation to updated services for an environment, it is being replaced with addOrUpdateEnvironmentService and deleteEnvironmentService. This is because the type is being refactored to support additional information, and eventually additional functionality. For now, the actions-handler service will still support the older setEnvironmentServices for backwards compatibility for a short period to allow older versions of lagoon-remote to still work, but a new version of lagoon-remote will be available that will no longer provides the payload that the actions-handler uses.
          "},{"location":"releases/2.18.2/#core-registry-variable","title":"Core Registry variable","text":"
          • The value for registry which was previously required by the lagoon-core chart is no longer required. If you are using this, you will need to add it under the new unauthenticatedRegistry setting when installing lagoon-remote in the lagoon-build-deploy section of your values file. If you aren't using an actual registry and have the example disabled-only-use-harbor-via-deploy-controller.invalid value, then you do not need to do anything except you can now remove the registry setting from your core values file.
          "},{"location":"releases/2.18.2/#bytesused","title":"bytesUsed","text":"
          • The environment storage return field named bytesUsed is deprecated. The actual value stored is kibibytes. A new return field called kibUsed exists and should be used, the returned data is the same and both fields are still returned. bytesUsed will be removed in a future release, make any adjustments now to use kibUsed. This will be a breaking change in a future release.
          "},{"location":"releases/2.18.2/#addorupdateenvironmentstorage","title":"addOrUpdateEnvironmentStorage","text":"
          • addOrUpdateEnvironmentStorage is deprecated, addOrUpdateStorageOnEnvironment is the replacement to use as it supports the updated input value for kibUsed. addOrUpdateEnvironmentStorage will be completely removed in a future release.
          "},{"location":"releases/2.18.2/#activesystems","title":"activesystems","text":"
          • The ability to configure projects to use different subsystems for managing deployments/tasks has been removed. Setting any values for the activeSystems* fields on the project will have no effect and the fields will be removed in a future release.
          "},{"location":"releases/2.19.0/","title":"2.19.0","text":""},{"location":"releases/2.19.0/#release-links","title":"Release Links","text":"
          • lagoon v2.19.0
          • lagoon-ui core-v2.19.0
          • lagoon-build-deploy core-v2.19.0
          • lagoon-core chart 1.45.0
          • lagoon-remote chart 0.89.0
          "},{"location":"releases/2.19.0/#upgrades","title":"Upgrades","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.19.0/#deprecations","title":"Deprecations","text":"

          There are no required actions or considerations with this release. As always, we suggest upgrading all minor versions.

          "},{"location":"releases/2.20.0/","title":"2.20.0","text":""},{"location":"releases/2.20.0/#release-links","title":"Release Links","text":"
          • lagoon v2.20.0
          • lagoon-ui core-v2.20.0
          • lagoon-build-deploy core-v2.20.0
          • lagoon-core chart 1.46.0
          • lagoon-remote chart 0.92.0
          "},{"location":"releases/2.20.0/#release-notes","title":"Release Notes","text":"

          This release was superseded, and the 2.20.1 release is recommended to be installed instead.

          "},{"location":"releases/2.20.0/#upgrades","title":"Upgrades","text":"

          This release was superseded, and the 2.20.1 release is recommended to be installed instead.

          "},{"location":"releases/2.20.0/#deprecations","title":"Deprecations","text":"

          This release was superseded, and the 2.20.1 release is recommended to be installed instead.

          "},{"location":"releases/2.20.1/","title":"2.20.1","text":""},{"location":"releases/2.20.1/#release-links","title":"Release Links","text":"
          • lagoon v2.20.1
          • lagoon-ui core-v2.20.1
          • lagoon-build-deploy core-v2.20.1
          • lagoon-core chart 1.47.0
          "},{"location":"releases/2.20.1/#release-notes","title":"Release Notes","text":"

          This release resolved a couple of minor issues discovered after releasing the 2.20.0 release.

          "},{"location":"releases/2.20.1/#upgrades","title":"Upgrades","text":"

          This release contains changes that you may need to be aware of. Read carefully before you upgrade.

          "},{"location":"releases/2.20.1/#harbor-21x-and-earlier","title":"Harbor 2.1.x and earlier","text":"
          • This release removes the support for Harbor from the Lagoon API. If you're still using the Harbor support in the API, you should NOT upgrade until you have configured your lagoon-remote installations to use Harbor instead. See the documentation here and read the section about Harbor.
          • We also recommend that if you're using Harbor version 2.1.x and earlier, that you upgrade this as soon as possible. Follow any instructions that Harbor recommend for upgrading. As of this release, lagoon-remote has been tested up to Harbor version 2.10.0 (helm chart version 1.14.0). Lagoon will stop supporting Harbor 2.1.x and earlier in a future release.
          "},{"location":"releases/2.20.1/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.20.1/#kubernetes-minimum-supported-version-is-now-125-tested-up-to-130","title":"Kubernetes minimum supported version is now 1.25, tested up to 1.30","text":"
          • The minimum supported version of Kubernetes is now 1.25, owing to deprecations in some core API functions, and the availability of upstream charts. The v2.20.0 release will not install into an earlier version of Kubernetes, so any Kubernetes upgrades will need to be performed prior to the Lagoon update.
          "},{"location":"releases/2.20.1/#deleted-backups","title":"Deleted Backups","text":"
          • When a backup is deleted via the webhook, it will now actually be removed from the API rather than being flagged as deleted. The Backup type field deleted is deprecated, and will be removed in a future release. Additionally, includeDeleted if requested when querying backups will not change the result as there will be no deleted backups to include.
          "},{"location":"releases/2.20.1/#api-harbor-support","title":"API Harbor support","text":"
          • In 2.17.0 we announced that Harbor support in the API was deprecated. This release of Lagoon removes all support for Harbor from the API. See upgrade notes above.
          "},{"location":"releases/2.20.1/#deleteallremoveall-mutations-removed","title":"DeleteAll/RemoveAll mutations removed","text":"
          • This release removes all DeleteAllX and RemoveAllX from the API. These were only ever meant for local development and are no longer relevant.
          "},{"location":"releases/2.20.1/#error-handling-on-deployment-triggers","title":"Error handling on deployment triggers","text":"
          • In the past, if triggering a deployment using any of the DeployEnvironmentX mutations and an error was encountered, the API would not return an actual error, just a string that contained the error. This was changed in this release to actually return an error now. As this is a change in behaviour, it may impact any users that may have previously been capturing the string error text and parsing it to check for errors.
          "},{"location":"releases/2.21.0/","title":"2.21.0","text":""},{"location":"releases/2.21.0/#release-links","title":"Release Links","text":"
          • lagoon v2.21.0
          • lagoon-ui core-v2.21.0
          • lagoon-build-deploy core-v2.21.0
          • lagoon-core chart 1.48.0
          • lagoon-remote chart 0.94.0
          "},{"location":"releases/2.21.0/#release-notes","title":"Release Notes","text":"

          This release is a standard Lagoon release.

          "},{"location":"releases/2.21.0/#upgrades","title":"Upgrades","text":""},{"location":"releases/2.21.0/#upgrade-to-v220x-first","title":"Upgrade to v2.20.x first","text":"

          You must upgrade to Lagoon v2.20.x before upgrading to v2.21.0. Ensure you read all the linked release notes. The upgrade to v2.20.x is to ensure that the functionality used to enable the feature flags in the broker service is present prior to being called as a pre-upgrade job in v2.22.x

          "},{"location":"releases/2.21.0/#keycloak-24","title":"Keycloak 24","text":"

          This release includes an update to Keycloak 24. This should be a seamless experience for all users.

          "},{"location":"releases/2.21.0/#deprecations","title":"Deprecations","text":""},{"location":"releases/2.21.0/#organization-notification-graphql-commands","title":"Organization & Notification GraphQL commands","text":"

          Some of the GraphQL commands used to modify organization user roles have changed. The API schema documents them. Some of the GRaphQL command inputs used to interact with Notifications may have changed. The API schema documents them.

          "},{"location":"releases/2.22.0/","title":"2.22.0","text":""},{"location":"releases/2.22.0/#release-links","title":"Release Links","text":"
          • lagoon v2.22.0
          • lagoon-ui core-v2.22.0
          • lagoon-build-deploy core-v2.22.0
          • lagoon-core chart 1.49.0
          • lagoon-remote chart 0.95.0
          "},{"location":"releases/2.22.0/#release-notes","title":"Release Notes","text":"

          This release is a standard Lagoon release. There are changes required for teams managing their own Lagoon installations (core and remote).

          "},{"location":"releases/2.22.0/#upgrades","title":"Upgrades","text":"

          Self-managed Lagoon installs will need to be aware of three changes in lagoon-core and lagoon-remote. Please read the following sections carefully to ensure you update components that apply to your installation correctly.

          "},{"location":"releases/2.22.0/#lagoon-custom-resource-definitions-crds","title":"Lagoon Custom Resource Definitions (CRDs)","text":"

          We introduced a new API version of the Lagoon Build and Task CRDs in https://github.com/uselagoon/lagoon-charts/pull/688. You must upgrade these after installing the latest version of lagoon-remote. Failure to update the CRDs will result in the remote controller failing to start, or builds and tasks failing.

          If you're installing the version defined in the top of these release notes, you can use the following to upgrade the CRDs to the version required.

          Text Only
          helm show crds lagoon/lagoon-build-deploy --version 0.30.2 | kubectl apply -f -\n

          Alternatively, see the README in the lagoon-build-deploy chart for further examples on how to update the Lagoon Build and Task CRDs.

          "},{"location":"releases/2.22.0/#dockerhost-statefulset","title":"DockerHost StatefulSet","text":"

          To help with improving or distributing build loads, we converted the docker-host from a Deployment to a StatefulSet in https://github.com/uselagoon/lagoon-charts/pull/687. This allows the docker-host to be scaled.

          This will provide the ability to load-balance docker build workloads. It will result in a new docker-host cache being created the first time any replica starts up (including on the first deployment), this may result in the first few builds being less-optimized whilst the cache rebuilds. This StatefulSet must only be scaled up or down via helm, and not directly in kubernetes otherwise the load-balancing of the workloads will not be able to be fully utilised.

          "},{"location":"releases/2.22.0/#nats-ssh-portal","title":"NATS / SSH Portal","text":"

          The version of NATS used by Lagoon was updated in https://github.com/uselagoon/lagoon-charts/pull/602. If your installation of Lagoon utilises SSH portals and NATS, you need to be aware of changes to the structure of the NATS values. This upgrade requires minimal config structure changes in your lagoon-core and lagoon-remote values files. There are no changes to the certs or keys, just the naming of the YAML items. See the pullrequest description for more information.

          "},{"location":"releases/2.22.0/#deprecations","title":"Deprecations","text":"

          tbc

          "},{"location":"releases/policy/","title":"Policy","text":""},{"location":"releases/policy/#upgrade-policy","title":"Upgrade Policy","text":"

          Our general policy is that you should upgrade to the latest version of each minor version before you upgrade to the latest version.

          You should check all upgrade requirements and deprecation notices for all versions as you upgrade.

          An example of this policy is as follows

          • Currently installed v2.13.0, planning to upgrade to v2.16.0
            1. Upgrade to v2.14.2 (the latest 2.14.x release)
            2. Upgrade to v2.15.4 (the latest 2.15.x release)
            3. Upgrade to v2.16.0

          We may, from time to time, provide additional context to the upgrades listed in these pages.

          "},{"location":"releases/policy/#deprecation-policy","title":"Deprecation Policy","text":"

          As Lagoon continues to evolve, we occasionally need to replace, rename or retire existing processes, tools or configuration. Where this may impact a user's processes or procedures, we intend to outline a timeframe to allow any necessary changes to be made.

          Deprecations will be tracked by the release they are announced in, and then updated when the actual deprecation occurs. All deprecations should provide a rough timeline (in months or releases).

          We may, from time to time, provide additional context to the deprecations listed in these pages.

          "},{"location":"resources/faq/","title":"FAQ","text":""},{"location":"resources/faq/#i-found-a-bug","title":"I found a bug! \ud83d\udc1e","text":"

          If you've found a bug, please raise a GitHub issue for it, or contact your Lagoon administrator.

          "},{"location":"resources/faq/#i-found-a-security-issue","title":"I found a security issue! \ud83d\udc1e","text":"

          If you've found a security issue, please send your findings to security@amazee.io. Please DO NOT file a GitHub issue for it.

          "},{"location":"resources/faq/#im-interested-in-amazeeios-hosting-services-with-lagoon","title":"I'm interested in amazee.io's hosting services with Lagoon","text":"

          That's great news! You can contact them via email at sales@amazee.io.

          "},{"location":"resources/faq/#im-getting-an-invalid-ssl-certificate-error","title":"I'm getting an invalid SSL certificate error","text":"

          The first thing to try is what is listed in our documentation about SSL.

          If you follow those steps, and you are still seeing an error, please submit a ticket or send us a message on chat and we can help resolve this for you.

          "},{"location":"resources/faq/#im-getting-an-array-error-when-running-a-drush-command","title":"I'm getting an \"Array\" error when running a Drush command","text":"

          This was a bug that was prevalent in Drush versions 8.1.16 and 8.1.17. There error would look something like this:

          Bash
          The command could not be executed successfully (returned: Array [error]\n(\n[default] => Array\n(\n[default] => Array\n(\n[driver] => mysql\n[prefix] => Array\n(\n[default] =>\n)\n, code: 0)\nError: no database record could be found for source @main [error]\n

          Upgrading Drush should fix that for you. We strongly suggest that you use version 8.3 or newer. Once Drush is upgraded the command should work!

          "},{"location":"resources/faq/#im-seeing-an-internal-server-error-when-trying-to-access-my-kibana-logs","title":"I'm seeing an Internal Server Error when trying to access my Kibana logs","text":"

          No need to panic! This usually happens when a tenant has not been selected. To fix this, follow these steps:

          1. Go to \"Tenants\" on the left-hand menu of Kibana.
          2. Click on your tenant name.
          3. You'll see a pop-up window that says: \"Tenant Change\" and the name of your tenant.
          4. Go back to the \"Discover\" tab and attempt your query again.

          You should now be able to see your logs.

          "},{"location":"resources/faq/#im-unable-to-ssh-into-any-environment","title":"I'm unable to SSH into any environment","text":"

          I'm unable to SSH into any environment. I'm getting the following message: Permission denied (publickey). When I run drush sa no aliases are returned.

          This typically indicates an issue with Pygmy. You can find our troubleshooting docs for Pygmy here: https://pygmystack.github.io/pygmy/troubleshooting/

          "},{"location":"resources/faq/#how-can-i-check-the-status-of-a-build","title":"How can I check the status of a build?","text":""},{"location":"resources/faq/#how-do-i-add-a-cron-job","title":"How do I add a cron job?","text":""},{"location":"resources/faq/#how-do-i-add-a-new-route","title":"How do I add a new route?","text":""},{"location":"resources/faq/#how-do-i-remove-a-route","title":"How do I remove a route?","text":"

          Lagoon will detect the removal of routes from your .lagoon.yml during a deployment. Check the deployment logs to confirm that the routes were removed automatically or for instructions on how to remove them.

          "},{"location":"resources/faq/#when-i-run-pygmy-status-no-keys-are-loaded","title":"When I run pygmy status, no keys are loaded","text":"

          You'll need to load your SSH key into pygmy. Here's how: https://pygmystack.github.io/pygmy/ssh_agent

          "},{"location":"resources/faq/#when-i-run-drush-sa-no-aliases-are-returned","title":"When I run drush sa no aliases are returned","text":"

          This typically indicates an issue with Pygmy. You can find our troubleshooting docs for Pygmy here: https://pygmystack.github.io/pygmy/troubleshooting

          "},{"location":"resources/faq/#my-deployments-fail-with-a-message-saying-drush-needs-a-more-functional-environment","title":"My deployments fail with a message saying: \"drush needs a more functional environment\"","text":"

          This usually means that there is no database uploaded to the project. Follow our step-by-step guide to add a database to your project.

          "},{"location":"resources/faq/#when-i-start-pygmy-i-see-an-address-already-in-use-error","title":"When I start Pygmy I see an \"address already in use\" error?","text":"

          Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use Error: failed to start containers: amazeeio-haproxy

          This is a known error! Most of the time it means that there is already something running on port 80. You can find the culprit by running the following query:

          netstat -ltnp | grep -w ':80'\n

          That should list everything running on port 80. Kill the process running on port 80. Once port 80 is freed up, Pygmy should start up with no further errors.

          "},{"location":"resources/faq/#how-can-i-change-branchespr-environmentsproduction-on-my-project","title":"How can I change branches/PR environments/production on my project?","text":"

          You can make that change using the Lagoon API! You can find the documentation for this change in our GraphQL documentation.

          "},{"location":"resources/faq/#how-do-i-add-a-redirect","title":"How do I add a redirect?","text":""},{"location":"resources/faq/#how-can-i-add-new-users-and-ssh-keys-to-my-projectgroup","title":"How can I add new users (and SSH keys) to my project/group?","text":"

          This can be done via the Lagoon API. You can find the steps documentation for this change in our GraphQL documentation.

          "},{"location":"resources/faq/#can-an-environment-be-completely-deleted-to-roll-out-large-code-changes-to-my-project","title":"Can an environment be completely deleted to roll out large code changes to my project?","text":"

          Environments are fully built from scratch at each deploy, dropping the old database and files and pushing your code would result in a fresh clean build, Don\u2019t forget to re-sync!

          It is possible to delete an environment via GraphQL. You can find the instructions in our GraphQL documentation.

          "},{"location":"resources/faq/#how-do-i-get-my-new-environment-variable-to-show-up","title":"How do I get my new environment variable to show up?","text":"

          Once you've added a runtime environment variable to your production environment via GraphQL, then all you need to do a deploy in order to get your change to show up on your environment.

          "},{"location":"resources/faq/#how-do-i-sftp-files-tofrom-my-lagoon-environment","title":"How do I SFTP files to/from my Lagoon environment?","text":"

          For cloud hosting customers, you can SFTP to your Lagoon environment by using the following information:

          • Server Hostname: ssh.example.com
          • Port: 22
          • Username: <Project-Environment-Name>

          Your username is going to be the name of the environment you are connecting to, most commonly in the pattern PROJECTNAME-ENVIRONMENT.

          You may also be interested in checking out our new Lagoon Sync tool, which you can read about here: https://github.com/uselagoon/lagoon-sync

          Authentication also happens automatically via SSH Public & Private Key Authentication.

          "},{"location":"resources/faq/#i-dont-want-to-use-lets-encrypt-i-have-an-ssl-certificate-i-would-like-to-install","title":"I don't want to use Let's Encrypt. I have an SSL certificate I would like to install","text":"

          We can definitely help with that. Once you have your own SSL certificate, feel free to submit a ticket or send us a message via chat and we will be more than happy to help! You will need to send us the following files:

          • Certificate key (.key)
          • Certificate file (.crt)
          • Intermediate certificates (.crt)

          Also, you will need to set the tls-acme option in .lagoon.yml to false.

          "},{"location":"resources/faq/#is-it-possible-to-mount-an-external-volume-efsfusesmbetc-into-lagoon","title":"Is it possible to mount an external volume (EFS/Fuse/SMB/etc) into Lagoon?","text":"

          Mounting an external volume would need to be handled completely inside of your containers, Lagoon does not provide a provision for this type of connection as part of the platform.

          A developer can handle this by installing the necessary packages into the container (via the Dockerfile), and ensuring the volume mount is connected via a pre- or post-rollout task.

          "},{"location":"resources/faq/#is-there-a-way-to-stop-a-lagoon-build","title":"Is there a way to stop a Lagoon build?","text":"

          If you have a build that has been running for a long time, and want to stop it, you will need to reach out to support. Currently, builds can only be stopped by users with admin access to the cluster.

          "},{"location":"resources/faq/#we-installed-the-elasticsearchsolr-service-on-our-website-how-can-we-get-access-to-the-ui-port-92008983-from-a-browser","title":"We installed the Elasticsearch\\Solr service on our website. How can we get access to the UI (port 9200/8983) from a browser?","text":"

          We suggest only exposing web services (NGINX/Varnish/Node.js) in your deployed environments. Locally, you can get the ports mapped for these services by checking docker compose ps, and then load http://localhost:<port> in your browser.

          "},{"location":"resources/faq/#i-have-a-question-that-isnt-answered-here","title":"I have a question that isn't answered here","text":"

          You should contact your Lagoon administrator for any hosting-related enquiries, but you can also reach out to the Lagoon team via Discord or email at uselagoon@amazee.io.

          "},{"location":"resources/glossary/","title":"Glossary","text":"Term Definition Access Mode Controls how a persistent volume can be accessed. Active/Standby Active/Standby deployments, also known as blue/green deployments, are a way to seamlessly switch over your production content. Ansible An open-source suite of software tools that enables infrastructure as code. AWS Amazon Web Services Amazon S3 Glacier A secure and inexpensive S3 storage for long-term backup. BitBucket Git hosting owned by Atlassian, which integrates with their tools. Brew Homebrew is a package manager for OSX. CA A Certificate Authority is a trusted entity that issues Secure Sockets Layer (SSL) certificates. CDN Content Delivery Network - distributes content via caching CI Continuous Integration CIDR Classess Inter-Domain Routing - a method of assigning IP addresses CLI Command Line Interface Cluster A unified group of servers or VMs, distributed and managed together, which serves one entity to ensure high availability, load balancing, and scalability. CMS Content Management System Cron job The cron command-line utility is a job scheduler on Unix-like operating systems. Users who set up and maintain software environments use cron to schedule jobs, also known as cron jobs, to run periodically at fixed times, dates, or intervals. Composer A package manager DDEV A Docker-based PHP development environment popular in the Drupal community. DDoS Distributed Denial of Service DNS Domain Name System Docker A container engine using Linux features and automating application deployment. Docker Compose A tool for defining and running Docker applications via YAML files. Drupal Open-source Content Management System Drush A command line shell for Drupal. EC2 Amazon Elastic Compute Cloud Elasticsearch An open-source search engine. It provides a distributed, multi-tenant-capable full-text search engine with a web interface and schema-free JSON documents. Galera A generic synchronous multi-master replication library for transactional databases. Git A free and open-source distributed version control system. Git Hash/SHA A generated string that identifies each commit. Uses the SHA-1 algorithm GitHub A proprietary version control hosting company using Git. A subsidiary of Microsoft, it offers all of the distributed version control and source code management functionality of Git as well as additional features. GitLab A web-based Git repository manager with CI capabilities. Grafana An open-source analytics and monitoring solution. GraphQL An open-source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data. Harbor An open source container image registry that secures images with role-based access control, scans images for vulnerabilities, and signs images as trusted. Helm A package manager for Kubernetes, it helps you manage Kubernetes applications. Helm Charts Helm Charts help you define, install, and upgrade even the most complex Kubernetes application. HTTP HyperText Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. IAM AWS Identity and Access Management (IAM) is a web service that helps you securely control access to AWS resources. IDE An integrated development environment is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools, and a debugger. Ingress controller An Ingress controller is a specialized load balancer for Kubernetes (and other containerized) environments. IPTables A command line utility for configuring Linux kernel firewall. Jenkins An open-source automation server. JWT JSON Web Token. k3s A highly available, certified Kubernetes distribution. k3d k3d is a lightweight wrapper to run k3s in Docker. k8s Numeronym for Kubernetes (K + 8 letters + s) k8up K8up is a backup operator that will handle storage and app backups on a k8s/OpenShift cluster. Keycloak An open-source identity and access management system. Kibana An open-source data visualization plugin for Elasticsearch. It provides visualization capabilities on top of the content indexed on an Elasticsearch cluster. KinD Kubernetes in Docker - a tool for running local Kubernetes clusters using Docker container \u201cnodes\u201d. Kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI. kubectl The Kubernetes command-line tool which allows you to run commands against Kubernetes clusters. Kubernetes An open-source system for automating deployment, scaling, and management of containerized applications. Lagoon An open-source application delivery platform for Kubernetes. Lagoonize Configuration changes to allow your app to run on Lagoon. Lando A free, open source, cross-platform, local development environment and DevOps tool built on Docker. Laravel A free, open-source PHP web framework, following the model\u2013view\u2013controller (MVC) architectural pattern and based on Symfony. Let's Encrypt Aa free, automated, and open certificate authority (CA). MariaDB A community-developed, commercially supported fork of the MySQL relational database management system, intended to remain free and open-source software under the GNU General Public License. Master node A single node in the cluster on which a collection of processes which manage the cluster state are running. Microservice The practice of breaking up an application into a series of smaller, more specialized parts, each of which communicate with one another across common interfaces such as APIs and REST interfaces like HTTP MongoDB MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with schema. Multi-Tenant A single instance of software runs on a server and serves multiple tenants - a tenant is a group of users who share common access with privileges to access the software instance. The software is designed to provide each tenant a share of the resources. MVC Model-view-controller - an architectural pattern that separates an application into three main logical components: the model, the view, and the controller. Each of these components are built to handle specific development aspects of an application. MySQL MySQL is an open-source relational database management system. NGINX NGINX is a web server which can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. Node Single EC2 instance (AWS virtual machine) Node.js An open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside of a browser. Open source A type of computer software in which source code is released under a license in which the copyright holder grants users the rights to study, change, and distribute the software to anyone and for any purpose. Open-source software may be developed in a collaborative public manner. OpenSearch A community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data. OpenShift Container application platform that brings Docker and Kubernetes to the enterprise. PHP PHP (Personal Home Page) is a general-purpose programming language originally designed for web development. PhpStorm A development tool (IDE) for PHP and web projects. Pod A group of containers that are deployed together on the same host. The basic unit that Kubernetes works with. PostgreSQL A free and open-source relational database management system emphasizing extensibility and technical standards compliance. Public/Private Key Public-key encryption is a cryptographic system that uses two keys -- a public key known to everyone and a private or secret key known only to the recipient of the message. Puppet An open-source software configuration management and deployment tool. PV PersistentVolume - a piece of storage in the cluster that has been provisioned by an administrator or dynamically provisioned using Storage Classes. PVC Persistent Volume Claim - a request for storage by a user. Pygmy A Lagoon flavored local development system. Python Python is an open-source, interpreted, high-level, general-purpose programming language. RabbitMQ An open-source message-broker software. RBAC Role-Based Access Control RDS Relational Database Service Redis An open source, in-memory data store used as a database, cache, streaming engine, and message broker. Restic An open-source backup program. ROX Kubernetes access mode ReadOnlyMany - the volume can be mounted as read-only by many nodes. Ruby An interpreted, high-level, general-purpose programming language which supports multiple programming paradigms. It was designed with an emphasis on programming productivity and simplicity. In Ruby, everything is an object, including primitive data types. RWO Kubernetes access mode ReadWriteOnce - the volume can be mounted as read-write by a single node. ReadWriteOnce access mode still can allow multiple pods to access the volume when the pods are running on the same node. RWOP Kubernetes access mode ReadWriteOncePod - the volume can be mounted as read-write by a single Pod. Use ReadWriteOncePod access mode if you want to ensure that only one pod across whole cluster can read that PVC or write to it. This is only supported for CSI volumes and Kubernetes version 1.22+. RWX Kubernetes access mode ReadWriteMany - the volume can be mounted as read-write by many nodes. S3 Amazon Simple Storage Service. SBOM Software Bill of Materials. SHA-1 Secure Hash Algorithm 1, a hash function which takes an input and produces a 160-bit hash value known as a message digest \u2013 typically rendered as 40 hexadecimal digits. It was designed by the United States National Security Agency, and is a U.S. Federal Information Processing Standard. Solr An open-source enterprise-search platform, written in Java. SSH Secure Socket Shell, a network protocol that provides administrators with a secure way to access a remote computer. SSL Secure Socket Layer Storage Classes A StorageClass provides a way for Kubernetes administrators to describe the \"classes\" of storage they offer. Different classes might map to quality-of-service levels, or to backup policies, or to arbitrary policies determined by the cluster administrators Symfony Symfony is a PHP web application framework and a set of reusable PHP components/libraries, Drupal 8 and up are based on Symfony. TCP Transmission Control Protocol, a standard that defines how to establish and maintain a network conversation through which application programs can exchange data. TLS Transport Layer Security Trivy A simple and comprehensive vulnerability scanner for containers, suitable for CI. TTL Time to live or hop limit is a mechanism that limits the lifespan or lifetime of data in a computer or network. Varnish A powerful, open-source HTTP engine/reverse HTTP proxy that can speed up a website by caching (or storing) a copy of a webpage the first time a user visits. VM Virtual Machine Webhook A webhook is a way for an app like GitHub, GitLab, Bitbucket, etc, to provide other applications with immediate data and act upon something, like a pull request. YAML YAML Ain't Markup Language - YAML is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted."},{"location":"resources/tutorials-and-webinars/","title":"Tutorials, Webinars, and Videos","text":""},{"location":"resources/tutorials-and-webinars/#intro-to-lagoon-webinar","title":"Intro to Lagoon Webinar","text":"

          [Slides]

          "},{"location":"resources/tutorials-and-webinars/#advance-lando-ing-with-lagoon","title":"Advance Lando-ing with Lagoon","text":""},{"location":"resources/tutorials-and-webinars/#webinar-lagoon-insights","title":"Webinar - Lagoon Insights","text":""},{"location":"resources/tutorials-and-webinars/#lagoon-deployment-demo","title":"Lagoon Deployment Demo","text":""},{"location":"resources/tutorials-and-webinars/#how-to-manage-multiple-drupal-sites-with-lagoon","title":"How to Manage Multiple Drupal Sites with Lagoon","text":"

          [Slides]

          "},{"location":"resources/tutorials-and-webinars/#kubernetes-webinar-101","title":"Kubernetes Webinar 101","text":"

          [Slides]

          "},{"location":"resources/tutorials-and-webinars/#kubernetes-webinar-102","title":"Kubernetes Webinar 102","text":"

          [Slides]

          "},{"location":"resources/tutorials-and-webinars/#server-side-rendering-best-practices-how-we-run-decoupled-websites-with-110-million-hits-per-month","title":"Server-side Rendering Best Practices: How We Run Decoupled Websites with 110 Million Hits per Month","text":""},{"location":"resources/tutorials-and-webinars/#lagoon-opensource-docker-build-deployment-system-with-full-drupal-support","title":"Lagoon: OpenSource Docker Build & Deployment System with Full Drupal Support","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-fix-an-internal-server-error-in-kibana","title":"How do I fix an internal server error in Kibana?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-add-a-new-route","title":"How do I add a new route?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-check-the-status-of-a-build","title":"How do I check the status of a build?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-add-a-redirect-in-lagoon","title":"How do I add a redirect in Lagoon?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-download-a-database-dump","title":"How do I download a database dump?","text":""},{"location":"resources/tutorials-and-webinars/#how-do-i-add-a-cron-job","title":"How do I add a cron job?","text":""},{"location":"resources/tutorials-and-webinars/#deploying-web-applications-on-kubernetes-toby-bellwood-techweek21-talk","title":"Deploying web applications on Kubernetes - Toby Bellwood | Techweek21 Talk","text":""},{"location":"resources/tutorials-and-webinars/#dealing-with-unprecedented-scale-during-covid-19-sean-hamlin-techweek21-talk","title":"Dealing with unprecedented scale during Covid-19 - Sean Hamlin| Techweek21 Talk","text":""},{"location":"resources/tutorials-and-webinars/#silverstripe-from-local-to-live-on-lagoon-thom-toogood-techweek21-talk","title":"Silverstripe from local to live on Lagoon -Thom Toogood | Techweek21 Talk","text":""},{"location":"using-lagoon-advanced/","title":"Using Lagoon - Advanced","text":"

          This section covers some of the more advanced features and functionality of Lagoon. If you're new to Lagoon, start with Using Lagoon - the Basics.

          If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our Discord.

          "},{"location":"using-lagoon-advanced/active-standby/","title":"Active/Standby","text":""},{"location":"using-lagoon-advanced/active-standby/#configuration","title":"Configuration","text":"

          To change an existing project to support active/standby you'll need to configure some project settings with the Lagoon API.

          • productionEnviromment should be set to the branch name of the current active environment.
          • standbyProductionEnvironment should be set to the branch name of the current environment that is in standby.
          Update project settings
          mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionEnvironment:\"production-brancha\"\nstandbyProductionEnvironment:\"production-branchb\"\n}\n}){\nstandbyProductionEnvironment\nname\nproductionEnvironment\n}\n}\n
          "},{"location":"using-lagoon-advanced/active-standby/#lagoonyml-production_routes","title":".lagoon.yml - production_routes","text":"

          To configure a project for active/standby in the .lagoon.yml file, you'll need to configure the production_routes section with any routes you want to attach to the active environment, and any routes to the standby environment. During an active/standby switch, these routes will migrate between the two environments.

          If you have two production environments, production-brancha and production-branchb, with the current active production environment as production-brancha then:

          • Routes under production_routes.active will direct you to production-brancha.
          • Routes under production_routes.standby will direct you to production-branchb.

          During an active/standby switch, the routes will swap:

          • Routes under production_routes.active will direct you to production-branchb.
          • Routes under production_routes.standby will direct you to production-brancha.
          .lagoon.yml
          production_routes:\nactive:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'false'\n- active.example.com:\ntls-acme: 'false'\nstandby:\nroutes:\n- nginx:\n- standby.example.com:\ntls-acme: 'false'\n

          Info

          Any routes that are under the section environments..routes will not be moved as part of active/standby. These routes will always be attached to the environment as defined. Ensure that if you do need a specific route to be migrated during an active/standby switch, that you remove them from the environments section and place them under the production_routes section specific to if it should be an active or standby route. See more about routes in .lagoon.yml.

          "},{"location":"using-lagoon-advanced/active-standby/#triggering-a-switch-event","title":"Triggering a switch event","text":""},{"location":"using-lagoon-advanced/active-standby/#via-the-ui","title":"via the UI","text":"

          To trigger the switching of environment routes, you can visit the standby environment in the Lagoon UI and click on the button labeled Switch Active/Standby environments. You will be prompted to confirm your action.

          Once confirmed, it will take you to the tasks page where you can view the progress of the switch.

          "},{"location":"using-lagoon-advanced/active-standby/#via-the-api","title":"via the API","text":"

          To trigger an event to switch the environments, run the following GraphQL mutation. This will tell Lagoon to begin the process.

          Active Standby Switch
          mutation ActiveStandby {\nswitchActiveStandby(\ninput:{\nproject:{\nname:\"drupal-example\"\n}\n}\n){\nid\nremoteId\n}\n}\n

          A task is created in the current active environment tasks tab when a switch event is triggered. You can check the status of the switch here.

          Using the remoteId from the switchActiveStandby mutation, we can also check the status of the task.

          Check task status
          query getTask {\ntaskByRemoteId(id: \"<remoteId>\") {\nid\nname\ncreated\nstarted\ncompleted\nstatus\nlogs\n}\n}\n
          "},{"location":"using-lagoon-advanced/active-standby/#drush-aliases","title":"drush aliases","text":"

          By default, projects will be created with the following aliases that will be available when active/standby is enabled on a project.

          • lagoon-production
          • lagoon-standby

          The lagoon-production alias will point to whichever site is defined as productionEnvironment, and lagoon-standby will always point to the site that is defined as standbyProductionEnvironment.

          These aliases are configurable by updating the project. Be aware that changing them may require you to update any scripts that rely on them.

          Update Drush Aliases
          mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionAlias:\"custom-lagoon-production-alias\"\nstandbyAlias:\"custom-lagoon-standby-alias\"\n}\n}){\nproductionAlias\nname\nstandbyAlias\n}\n}\n
          "},{"location":"using-lagoon-advanced/active-standby/#disabling-activestandby","title":"Disabling Active/Standby","text":"

          You need to decide which of these 2 branches are the one you want to go forward with as being the main environment and then ensure it is set as the active branch (e.g production-branchb).

          1. In your .lagoon.yml file in this (now active) branch, move the routes from the production_routes.active.routes section into the environments.production-branchb section. This will mean that they are then attached to the production-branchb environment only.
          2. Once you've done this, you can delete the entire production_routes section from the .lagoon.yml file and re-deploy the production-branchb environment.
          3. If you no longer need the other branch production-brancha, you can delete it.
          4. If you keep the branch in Git, you should also remove the production_routes from that branch .lagoon.yml too, just to prevent any confusion. The branch will remain as production type unless you delete and redeploy it (wiping all storage and databases, etc).
          5. Once you've got the project in a state where there is only the production-branchb production environment, and all the other environments are development, update the project to remove the standbyProductionEnvironment from the project so that the active/standby labels on the environments go away.
          Turn off Active/Standby
          mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionEnvironment:\"production-branchb\"\nstandbyProductionEnvironment:\"\"\n}\n}){\nstandbyProductionEnvironment\nname\nproductionEnvironment\n}\n}\n
          "},{"location":"using-lagoon-advanced/active-standby/#notes","title":"Notes","text":"

          When the active/standby trigger has been executed, the productionEnvironment and standbyProductionEnvironments will switch within the Lagoon API. Both environments are still classed as production environment types. We use the productionEnvironment to determine which one is labelled as active. For more information on the differences between environment types, read the documentation for environment types

          Get environments via GraphQL
          query projectByName {\nprojectByName(name:\"drupal-example\"){\nproductionEnvironment\nstandbyProductionEnvironment\n}\n}\n

          Before switching environments:

          Results of environment query
          {\n\"data\": {\n\"projectByName\": {\n\"productionEnvironment\": \"production-brancha\",\n\"standbyProductionEnvironment\": \"production-branchb\"\n}\n}\n}\n

          After switching environments:

          Results of environment query
          {\n\"data\": {\n\"projectByName\": {\n\"productionEnvironment\": \"production-branchb\",\n\"standbyProductionEnvironment\": \"production-brancha\"\n}\n}\n}\n
          "},{"location":"using-lagoon-advanced/blackfire/","title":"Blackfire","text":""},{"location":"using-lagoon-advanced/blackfire/#blackfire-variables","title":"Blackfire variables","text":"

          The Lagoon Base Images have support for Blackfire included in the PHP Images (see the PHP images).

          In order to use Blackfire in Lagoon, these three environment variables need to be defined:

          Environment Variable Default Description BLACKFIRE_ENABLED (not set) Used to enable blackfire extension with setting variable to TRUE or true BLACKFIRE_SERVER_ID (not set) Set to Blackfire Server ID provided by Blackfire.io. Needs BLACKFIRE_ENABLED set to true BLACKFIRE_SERVER_TOKEN (not set) Set to Blackfire Server Token provided by Blackfire.io. Needs BLACKFIRE_ENABLED set to true"},{"location":"using-lagoon-advanced/blackfire/#local-usage-of-blackfire","title":"Local Usage of Blackfire","text":"

          For local usage of Blackfire with Lagoon Images, set the above environment variables for the PHP container. Here is an example for a Drupal application:

          docker-compose.yml
          services:\n[[snip]]\nphp:\n[[snip]]\nenvironment:\n<< : *default-environment # loads the defined environment variables from the top\nBLACKFIRE_ENABLED: TRUE\nBLACKFIRE_SERVER_ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\nBLACKFIRE_SERVER_TOKEN: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n

          After restarting the containers, you should be able to profile via the Blackfire Browser Plugin or the Blackfire CLI.

          "},{"location":"using-lagoon-advanced/blackfire/#remote-usage-of-blackfire","title":"Remote Usage of Blackfire","text":"

          In order to use Blackfire in deployed Lagoon environments the same enviornment variables need to be set, this time via one of the possibilities of adding environment variables to Lagoon. Important: Environment variables set in the docker-compose.yml for local development are not used by Lagoon in remote environments!

          "},{"location":"using-lagoon-advanced/blackfire/#debugging","title":"Debugging","text":"

          The Blackfire Agent running in the PHP containers outputs logs as normal container logs, which can be seen via docker compose logs or via the Lagoon Logging Infrastructure for remote environments.

          By default the Logs are set to Level 3 (info), via the environment variable BLACKFIRE_LOG_LEVEL the level can be increased to 4 (debug) to generate more debugging ouput.

          "},{"location":"using-lagoon-advanced/custom-tasks/","title":"Custom Tasks","text":"

          Lagoon allows for the definition of custom tasks at environment, project, and group levels. This is presently accomplished through the GraphQL API and exposed in the UI.

          "},{"location":"using-lagoon-advanced/custom-tasks/#defining-a-custom-task","title":"Defining a custom task","text":"

          When defining a task you need to determine a number of things.

          "},{"location":"using-lagoon-advanced/custom-tasks/#which-task-do-you-want-to-run","title":"Which task do you want to run?","text":"

          In most cases, the custom task you will be running will be something that will be run in a shell on one of the containers in your application.

          For instance, in a Node.js application, you may be interested in running a yarn audit in your node container. The command, in this case, would simply be yarn audit.

          "},{"location":"using-lagoon-advanced/custom-tasks/#where-will-this-task-be-run","title":"Where will this task be run?","text":"

          We have to define where this task will be run -- this means two things, first, which project or environment we'll be running the task in, and, second, which service.

          Let's say that we'd like for our yarn audit task to be available to run in any environment in a specific project (let's say the project's ID is 42 for this example). We will therefore specify the project's ID when we create our task definition, as we will describe below.

          The second question regards which environment we want to target with our task. When you set up your project, you specify several services in your docker-compose.yml. We use this service name to determine where the command is actually executed.

          "},{"location":"using-lagoon-advanced/custom-tasks/#who-can-run-this-task","title":"Who can run this task?","text":"

          There are three levels of permissions to the task system corresponding to project roles. Guest, Developer, and Maintainer -- from most restrictive to least restrictive, with each role being able to invoke the tasks defined for the lower role (Developer can see Guest tasks, Maintainers can see all tasks).

          "},{"location":"using-lagoon-advanced/custom-tasks/#defining-a-task","title":"Defining a task","text":"

          Tasks are defined by calling the addAdvancedTaskDefinition mutation. Importantly, this simply defines the task, it does not invoke it. It simply makes it avaliable to be run in an environment.

          Schematically, the call looks like this

          Define a new task
          mutation addAdvancedTask {\naddAdvancedTaskDefinition(input:{\nname: string,\nconfirmationText: string,\ntype: [COMMAND|IMAGE],\n[project|environment]: int,\ndescription: string,\nservice: string,\ncommand: string,\nadvancedTaskDefinitionArguments: [\n{\nname: \"ENVIROMENT_VARIABLE_NAME\",\ndisplayName: \"Friendly Name For Variable\",\ntype: [STRING | ENVIRONMENT_SOURCE_NAME | ENVIRONMENT_SOURCE_NAME_EXCLUDE_SELF]\n}\n]\n}) {\n... on AdvancedTaskDefinitionImage {\nid\nname\ndescription\nservice\nimage\nconfirmationText\nadvancedTaskDefinitionArguments {\ntype\nrange\nname\ndisplayName\n}\n...\n}\n... on AdvancedTaskDefinitionCommand {\nid\nname\ndescription\nservice\ncommand\nadvancedTaskDefinitionArguments {\ntype\nrange\nname\ndisplayName\n}\n...\n}\n}\n}\n

          Fields name and description are straightforward. They're simply the name and description of the task - these are used primarily in the UI.

          The type field needs some explanation - for now, only platform admins are able to define IMAGE type commands - these allow for the running of specifically created task images as tasks, rather than targeting existing services. Most tasks, though, will be COMMAND types.

          The [project|environment] set of fields will attach the task to either the project or environment (depending on the key you use), with the value being the id. In the case we're considering for our yarn audit we will specify we're targeting a project with an ID of 42.

          We put the service we'd like to target with our task in the service field, and command is the actual command that we'd like to run.

          "},{"location":"using-lagoon-advanced/custom-tasks/#arguments-passed-to-tasks","title":"Arguments passed to tasks","text":"

          In order to give more flexibility to the users invoking the tasks via the Lagoon UI, we support defining task arguments. These arguments are displayed as text boxes or drop downs and are required for the task to be invoked.

          Here is an example of how we might set up two arguments.

          Define task arguments
          advancedTaskDefinitionArguments: [\n{\nname: \"ENV_VAR_NAME_SOURCE\",\ndisplayName: \"Environment source\",\ntype: ENVIRONMENT_SOURCE_NAME\n},\n{\nname: \"ENV_VAR_NAME_STRING\",\ndisplayName: \"Echo value\",\ntype: STRING\n}\n]\n})\n

          This fragment shows both types of arguments the system currently supports. The first, ENV_VAR_NAME_SOURCE is an example of type ENVIRONMENT_SOURCE_NAME, which will present the user of the UI a dropdown of the different environments inside of a project. If we don't want to allow the task to be run on the invoking environment (say, if we want to import a database from another environment), we can restrict the environment list by using ENVIRONMENT_SOURCE_NAME_EXCLUDE_SELF. The second ENV_VAR_NAME_STRING is of type STRING and will present the user with a textbox to fill in.

          The values that the user selects will be available as environment variables in the COMMAND type tasks when the task is run.

          "},{"location":"using-lagoon-advanced/custom-tasks/#system-wide-tasks","title":"System wide tasks","text":"

          Only your Lagoon administrator is able to register system wide tasks. These tasks will appear for all environments, subject to the user's permission to invoke them.

          Creating a system wide task is almost exactly the same as other task types, with two exceptions.

          First, you set the systemWide: true field in your addAdvancedTaskDefinition mutation.

          Second, you make sure you have not specified groupName, project, or environment - which would defeat the purpose, since these fields are used to target specific contexts.

          "},{"location":"using-lagoon-advanced/custom-tasks/#confirmation","title":"Confirmation","text":"

          When the confirmationText field has text, it will be displayed with a confirmation modal in the UI before the user is able to run the task.

          "},{"location":"using-lagoon-advanced/custom-tasks/#invoking-the-task","title":"Invoking the task","text":"

          With the task now defined, the task should now show up in the tasks dropdown in the Lagoon UI.

          We are also able to invoke it via the GraphQL api by using the invokeTask mutation.

          Invoke task
          mutation invokeTask {\ninvokeRegisteredTask(advancedTaskDefinition: int, environment: int) {\nstatus\n}\n}\n

          Note that invokeTask will always invoke a task on a specific environment.

          "},{"location":"using-lagoon-advanced/custom-tasks/#example","title":"Example","text":"

          Let's now setup our yarn audit example.

          Define task mutation
          mutation runYarnAudit {\naddAdvancedTaskDefinition(input:{\nname:\"Run yarn audit\",\nproject: 42,\ntype:COMMAND,\npermission:DEVELOPER,\ndescription: \"Runs a 'yarn audit'\",\nservice:\"node\",\ncommand: \"yarn audit\"})\n{\nid\n}\n}\n

          This, then, will define our task for our project (42). When we run this, we will get the ID of the task definition back (for argument's sake, let's say it's 9)

          This task will now be available to run from the UI for anyone with the DEVELOPER or MAINTAINER role.

          "},{"location":"using-lagoon-advanced/deploytarget-configs/","title":"DeployTarget Configurations","text":"

          DeployTarget configurations are a way to define how a project can deploy to multiple clusters. This feature is useful when you have two clusters, one which could be dedicated for running production workloads, and another that is used for running development workloads.

          The configuration for these is not limited to just a production/development split though, so projects could perceivably target more than one specific cluster.

          The basic idea of a DeployTarget configuration is that it is a way to easily define how a project can deploy across multiple clusters. It uses the existing methods of checking if a environment is valid

          "},{"location":"using-lagoon-advanced/deploytarget-configs/#important-information","title":"Important Information","text":"

          Before going in to how to configure a project to leverage DeployTarget configurations, there are some things you need to know.

          1. Environments now have two new fields available to them to identify which DeployTarget(Kubernetes or OpenShift) they have been created on.

            1. kubernetesNamespacePattern
            2. kubernetes
          2. Once an environment has been deployed to a specific DeployTarget, it will always deploy to this target, even if the DeployTarget configuration, or project configuration is modified.

            1. This offers some safety to existing environments by preventing changes to DeployTarget configurations from creating new environments on different clusters.
            2. This is a new feature that is part of Lagoon, not specifically for DeployTarget configurations.
          3. By default, if no DeployTarget configurations are associated to a project, that project will continue to use the existing methods to determine which environments to deploy. These are the following fields used for this.

            1. branches
            2. pullrequests
            3. kubernetesNamespacePattern
            4. kubernetes
          4. As soon as any DeployTarget configurations are added to a project, then all future deployments for this project will use these configurations. What is defined in the project is ignored, and overwritten to inform users that DeployTarget configurations are in use.

          5. DeployTarget configurations are weighted, which means that a DeployTarget configuration with a larger weight is prioritized over one with lower weight.

            1. The order in which they are returned by the query is the order they are used to determine where an environment should be deployed.

          6. Active/Standby environments can only be deployed to the same cluster, so your DeployTarget configuration must be able to deploy both those environments to the same target.

          7. Projects that leverage the promote feature of Lagoon must be aware that DeployTarget configurations are ignored for the destination environment.

            1. The destination environment will always be deployed to the same target that the source environment is on, your DeployTarget configuration MUST be configured correctly for this source environment.
            2. For safety, it is best to define both the source and destination environment in the same DeployTarget configuration branch regex.
          "},{"location":"using-lagoon-advanced/deploytarget-configs/#configuration","title":"Configuration","text":"

          To configure a project to use DeployTarget configurations, the first step is to add a configuration to a project.

          The following GraphQL mutation can be used, this particular example will add a DeployTarget configuration to the project with the project ID 1. It will allow only the branches that match the name main to be deployed, and pullrequests is set to false. This means no other branches will be able to deploy to this particular target, and no pull requests will be deployed to this particular target. The deployTarget is ID 1, this could be a Kubernetes cluster in a specific region, or designated for a specific type of workload (production or development).

          Configure DeployTarget
          mutation addDeployTargetConfig{\naddDeployTargetConfig(input:{\nproject: 1\nbranches: \"main\"\npullrequests: \"false\"\ndeployTarget: 1\nweight: 1\n}){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n

          Info

          deployTarget is an alias the Kubernetes or OpenShift ID in the Lagoon API

          It is also possible to configure multiple DeployTarget configurations.

          The following GraphQL mutation can be used, this particular example will add a DeployTarget configuration to the same project as above.

          It will allow only the branches that regex match with ^feature/|^(dev|test|develop)$ to be deployed, and pullrequests is set to true so all pull requests will reach this target.

          The targeted cluster in this example is ID 2, which is a completely different Kubernetes cluster to what was defined above for the main branch.

          Configure DeployTarget
          mutation addDeployTargetConfig{\naddDeployTargetConfig(input:{\nproject: 1\nbranches: \"^feature/|^(dev|test|develop)$\"\npullrequests: \"true\"\ndeployTarget: 2\nweight: 1\n}){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n

          Once these have been added to a project, you can return all the DeployTarget configurations for a project using the following query

          Get DeployTargets
          query deployTargetConfigsByProjectId{\ndeployTargetConfigsByProjectId(project:1){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n# result:\n{\n\"data\": {\n\"deployTargetConfigsByProjectId\": [\n{\n\"id\": 1,\n\"weight\": 1,\n\"branches\": \"main\",\n\"pullrequests\": \"false\",\n\"deployTargetProjectPattern\": null,\n\"deployTarget\": {\n\"name\": \"production-cluster\",\n\"id\": 1\n},\n\"project\": {\n\"name\": \"my-project\"\n}\n},\n{\n\"id\": 2,\n\"weight\": 1,\n\"branches\": \"^feature/|^(dev|test|develop)$\",\n\"pullrequests\": \"true\",\n\"deployTargetProjectPattern\": null,\n\"deployTarget\": {\n\"name\": \"development-cluster\",\n\"id\": 2\n},\n\"project\": {\n\"name\": \"my-project\"\n}\n}\n]\n}\n}\n
          "},{"location":"using-lagoon-advanced/nodejs/","title":"Node.js Graceful Shutdown","text":"

          Node.js has integrated web server capabilities. Plus, with Express, these can be extended even more.

          Unfortunately, Node.js does not handle shutting itself down very nicely out of the box. This causes many issues with containerized systems. The biggest issue is that when a Node.js container is told to shut down, it will immediately kill all active connections, and does not allow them to stop gracefully.

          This part explains how you can teach Node.js to behave like a real web server: finishing active requests and then gracefully shutting down.

          As an example we use a no-frills Node.js server with Express:

          app.js
          const express = require('express');\nconst app = express();\n// Adds a 5 second delay for all requests.\napp.use((req, res, next) => setTimeout(next, 5000));\napp.get('/', function (req, res) {\nres.send(\"Hello World\");\n})\nconst server = app.listen(3000, function () {\nconsole.log('Example app listening on port 3000!');\n})\n

          This will just show \"Hello World\" in when the web server is visited at localhost:3000. Note the 5 second delay in the response in order to simulate a request that takes some computing time.

          "},{"location":"using-lagoon-advanced/nodejs/#part-a-allow-requests-to-be-finished","title":"Part A: Allow requests to be finished","text":"

          If we run the above example and stop the Node.js process while the request is handled (within the 5 seconds), we will see that the Node.js server immediately kills the connection, and our browser will show an error.

          To explain to our Node.js server that it should wait for all the requests to be finished before actually stopping itself, we add the following code:

          Graceful Shutdown
          const startGracefulShutdown = () => {\nconsole.log('Starting shutdown of express...');\nserver.close(function () {\nconsole.log('Express shut down.');\n});\n}\nprocess.on('SIGTERM', startGracefulShutdown);\nprocess.on('SIGINT', startGracefulShutdown);\n

          This basically calls server.close(), which will instruct the Node.js HTTP server to:

          1. Not accept any more requests.
          2. Finish all running requests.

          It will do this on SIGINT (when you press CTRL + C) or on SIGTERM (the standard signal for a process to terminate).

          With this small addition, our Node.js will wait until all requests are finished, and then stop itself.

          If we were not running Node.js in a containerized environment, we would probably want to include some additional code that actually kills the Node.js server after a couple of seconds, as it is technically possible that some requests are either taking very long or are never stopped. Because it is running in a containerized system, if the container is not stopped, Docker and Kubernetes will run a SIGKILL after a couple of seconds (usually 30) which cannot be handled by the process itself, so this is not a concern for us.

          "},{"location":"using-lagoon-advanced/nodejs/#part-b-yarn-and-npm-children-spawning-issues","title":"Part B: Yarn and NPM children spawning issues","text":"

          If we only implemented Part A, we would have a good experience. In the real world, many Node.js systems are built with Yarn or NPM, which provide not only package management systems to Node.js, but also script management.

          With these script functionalities, we simplify the start of our application. We can see many package.json files that look like:

          package.json
          {\n\"name\": \"node\",\n\"version\": \"1.0.0\",\n\"main\": \"index.js\",\n\"license\": \"MIT\",\n\"dependencies\": {\n\"express\": \"^4.15.3\"\n},\n\"scripts\": {\n\"start\": \"node index.js\"\n}\n}\n

          and with the defined scripts section we can run our application just with:

          Start application
          yarn start\n

          or

          Start application
          npm start\n

          This is nice and makes the life of developers easier. So we also end up using the same within Dockerfiles:

          .dockerfile
          CMD [\"yarn\", \"start\"]\n

          Unfortunately there is a big problem with this:

          If yarn or npm get a SIGINT or SIGTERM signal, they correctly forward the signal to spawned child process (in this case node index.js). However, it does not wait for the child processes to stop. Instead, yarn/npm immediately stop themselves. This signals to Docker/Kubernetes that the container is finished and Docker/Kubernetes will kill all children processes immediately. There are issues open for Yarn and NPM but unfortunately they are not solved yet.

          The solution for the problem is to not use Yarn or NPM to start your application and instead use node directly:

          .dockerfile
          CMD [\"node\", \"index.js\"]\n

          This allows Node.js to properly terminate and Docker/Kubernetes will wait for Node.js to be finished.

          "},{"location":"using-lagoon-advanced/private-repositories/","title":"Private Repositories","text":"
          1. Give the deploy key access to the Git repositories in your GitHub/GitLab/BitBucket.
          2. Add ARG LAGOON_SSH_PRIVATE_KEY to your dockerfile (before the step of the build process that needs the SSH key).
          3. Add RUN /lagoon/entrypoints/05-ssh-key.sh to your dockerfile (before the step of the build process that needs the SSH key).
          Set up your private respository
          RUN /lagoon/entrypoints/05-ssh-key.sh && composer install && rm /home/.ssh/key\n
          "},{"location":"using-lagoon-advanced/project-default-users-keys/","title":"Project Default Users and SSH Keys","text":"

          When a Lagoon project is created, by default an associated SSH \"project key\" is generated and the private key made available inside the CLI pods of the project. A service account default-user@project is also created and given MAINTAINER access to the project. The SSH \"project key\" is attached to that default-user@project.

          The result of this is that from inside the CLI pod of any environment it is possible to SSH to any other environment within the same project. This access is used for running tasks from the command line such as synchronizing databases between environments (e.g. drush sql-sync).

          There is more information on the MAINTAINER role available in the RBAC documentation.

          "},{"location":"using-lagoon-advanced/project-default-users-keys/#specifying-the-project-key","title":"Specifying the project key","text":"

          It is possible to specify an SSH private key when creating a project, but this is not recommended as it has security implications.

          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/","title":"Setting up Xdebug with Lagoon","text":""},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#enable-xdebug-extension-in-the-containers","title":"Enable Xdebug extension in the containers","text":"

          The Lagoon base images are pre-configured with Xdebug but, for performance reasons, the extension is not loaded by default. To enable the extension, the XDEBUG_ENABLE environment variable must be set to true:

          • Locally (Pygmy and Lando)

            1. If your project is based off the lagoon-examples docker-compose.yml file, the environment variable already exists. Uncomment these lines.
            2. Make sure to rebuild and restart the containers after changing any environment variables. - Remotely (dev/prod)
            3. You can use the Lagoon API to add the environment variable to a running environment.
            4. Make sure to redeploy the environment after changing this any environment variables.
          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#activate-xdebug-extension","title":"Activate Xdebug Extension","text":"

          The default Xdebug configuration requires a \"trigger\" to activate the extension and start a session. You can view the complete documentation for activating the debugger but the most straightforward instructions are below.

          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#cli","title":"CLI","text":"

          The php-cli image is configured to always activate Xdebug when it\u2019s enabled, so there is nothing else that needs to be done. Running any PHP script will start a debugging session.

          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#web","title":"Web","text":"

          Install a browser extension to set/unset an activation cookie.

          Make sure the activation cookie is set for the website you want to start debugging.

          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#configure-phpstorm","title":"Configure PHPStorm","text":"
          1. PHPStorm is configured correctly by default.
          2. Click the \u201cStart Listening for PHP Debug Connections\u201d icon in the toolbar.
          3. Load a webpage or run a Drush command.
          4. On first run, PHPStorm should pop up a window asking you to:
            1. Confirm path mappings.
            2. Select the correct file locally that was triggered on the server.
          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#configure-visual-studio-code","title":"Configure Visual Studio Code","text":"
          1. Install the PHP Debug extension by Felix Becker.
          2. Follow the instructions to create a basic launch.json for PHP.
          3. Add correct path mappings. For a typical Drupal site, an example would be:

            launch.json
            \"pathMappings\": {\n\"/app\": \"${workspaceFolder}\",\n},\n
          4. In the Run tab of Visual Studio Code, click the green arrow next to \u201cListen for Xdebug\u201d

          5. Load a webpage or run a Drush command.
          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#troubleshooting","title":"Troubleshooting","text":"
          • Verify that Xdebug extension is loaded. The best way to do this on a Drupal site is to check the PHP status page. You should find a section about Xdebug and all its settings.
          • Verify the following settings:
          Directive Local Value xdebug.mode debug xdebug.client_host host.docker.internal or your IP address xdebug.client_port 9003
          • Enable Xdebug logging within the running containers. All you need is an environment variable named XDEBUG_LOG set to anything to enable logging. Logs will be saved to /tmp/xdebug.log. If you are using the lagoon-examples then you can uncomment some existing lines.
          • Verify you have the activation cookie set. You can use the browser tools in Chrome or Firefox to check that a XDEBUG_SESSION cookie is set.
          • Verify that Xdebug is activated and attempting to start a debug session with your computer. You can use the nc -l 9003 command line tool to open the Xdebug port. If everything is configured in PHP correctly, you should get a Xdebug init response when you load a webpage or run a Drush command.
          • Verify that the xdebug.client_host has been set correctly. For local debugging with Docker for Mac, this value should be host.docker.internal. For remote debugging this value should be your IP address. If this value was not correctly determined, you can override it by setting the DOCKERHOST environment variable.
          • When using Lando locally, in order to debug scripts run from the CLI you must first SSH into the CLI container via lando ssh. You won\u2019t be able to debug things by running lando drush or lando php.
          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#mac-specific-troubleshooting","title":"Mac specific troubleshooting","text":"
          • Verify that Docker for Mac networking is not broken. On your host machine, run nc -l 9003, then in a new terminal window, run:

            Verify Docker for Mac networking
            docker compose run cli nc -zv host.docker.internal 9003\n

            You should see a message like: host.docker.internal (192.168.65.2:9003) open.

          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#linux-specific-troubleshooting","title":"Linux specific troubleshooting","text":"
          • Ensure the host host.docker.internal can be reached. If docker has been installed manually (and not through Docker Desktop), this host will not resolve. You can force this to resolve with an additional snippet in your docker-compose.yml file (instructions taken from this blog post):

            docker-compose.yml alterations for Linux
              services:\ncli:\nextra_hosts:\nhost.docker.internal: host-gateway\nphp:\nextra_hosts:\nhost.docker.internal: host-gateway\n
          "},{"location":"using-lagoon-advanced/setting-up-xdebug-with-lagoon/#xdebug-2","title":"Xdebug 2","text":"

          If you're running older images you may still be using Xdebug version 2. All the information on this page still applies, but some of the configuration names and values have changes:

          v3 v2 xdebug.mode xdebug.remote_enabled On xdebug.client_host xdebug.remote_host host.docker.internal or your IP address xdebug.client_port xdebug.remote_port 9000"},{"location":"using-lagoon-advanced/simplesaml/","title":"SimpleSAML","text":""},{"location":"using-lagoon-advanced/simplesaml/#simplesamlphp","title":"SimpleSAMLphp","text":"

          This is an example of how to add SimpleSAMLphp to your project and then modify configuration to serve it via NGINX.

          "},{"location":"using-lagoon-advanced/simplesaml/#requirements","title":"Requirements","text":"

          Add SimpleSAMLphp to your project:

          Add SimpleSAMLphp to your project via Composer
          composer req simplesamlphp/simplesamlphp\n
          "},{"location":"using-lagoon-advanced/simplesaml/#modify-configuration-for-simplesamlphp","title":"Modify configuration for SimpleSAMLphp","text":"

          Copy authsources.php and config.php from vendor/simplesamlphp/simplesamlphp/config-templates to somewhere outside vendor directory, such as conf/simplesamlphp. You also need saml20-idp-remote.php from vendor/simplesamlphp/simplesamlphp/metadata-templates.

          In config.php set following values for Lagoon:

          Base URL path where SimpleSAMLphp is accessed:

          config.php
            'baseurlpath' => 'https://YOUR_DOMAIN.TLD/simplesaml/',\n

          Store sessions to database:

          config.php
            'store.type'                    => 'sql',\n  'store.sql.dsn'                 => vsprintf('mysql:host=%s;port=%s;dbname=%s', [\n    getenv('MARIADB_HOST'),\n    getenv('MARIADB_PORT'),\n    getenv('MARIADB_DATABASE'),\n  ]),\n

          Alter other settings to your liking:

          • Check the paths for logs and certs.
          • Secure SimpleSAMLphp dashboard.
          • Set up level of logging.
          • Set technicalcontact and timezone.

          Add authsources (IdPs) to authsources.php, see example:

          authsources.php
            'default-sp' => [\n    'saml:SP',\n    // The entity ID of this SP.\n    'entityID' => 'https://YOUR_DOMAIN.TLD',\n    // The entity ID of the IdP this should SP should contact.\n    // Can be NULL/unset, in which case the user will be shown a list of available IdPs.\n    'idp' => 'https://YOUR_IDP_DOMAIN.TLD',\n    // The URL to the discovery service.\n    // Can be NULL/unset, in which case a builtin discovery service will be used.\n    'discoURL' => null,\n    'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',\n    'certificate' => '/app/conf/simplesamlphp/certs/saml.crt',\n    'privatekey' => '/app/conf/simplesamlphp/certs/saml.pem',\n    'redirect.sign' => TRUE,\n    'redirect.validate' => TRUE,\n    'authproc' => [\n      50 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:1.3.6.1.4.1.5923.1.1.1.6' => 'eduPersonPrincipalName',\n      ],\n      51 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:2.5.4.42' => 'givenName',\n      ],\n      52 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:2.5.4.4' => 'sn',\n      ],\n      53 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:0.9.2342.19200300.100.1.3' => 'mail',\n      ],\n    ],\n  ],\n

          Add IdP metadata to saml20-idp-remote.php, see example:

          saml20-idp-remote.php
          <?php\n/**\n * SAML 2.0 remote IdP metadata for SimpleSAMLphp.\n *\n * Remember to remove the IdPs you don't use from this file.\n *\n * See: https://simplesamlphp.org/docs/stable/simplesamlphp-reference-idp-remote\n */\n/**\n * Some IdP.\n */\n$metadata['https://YOUR_IDP_DOMAIN.TLD'] = [\n'entityid' => 'https://YOUR_IDP_DOMAIN.TLD',\n'name' => [\n'en' => 'Some IdP',\n],\n'description' => 'Some IdP',\n...\n];\n

          In your build process, copy configuration files to SimpleSAMLphp:

          • vendor/simplesamlphp/simplesamlphp/config/authsources.php
          • vendor/simplesamlphp/simplesamlphp/config/config.php
          • vendor/simplesamlphp/simplesamlphp/metadata/saml20-idp-remote.php
          "},{"location":"using-lagoon-advanced/simplesaml/#create-nginx-conf-for-simplesamlphp","title":"Create NGINX conf for SimpleSAMLphp","text":"

          Create file lagoon/nginx/location_prepend_simplesamlphp.conf:

          location_prepend_simplesamlphp.conf
          location ^~ /simplesaml {\nalias /app/vendor/simplesamlphp/simplesamlphp/www;\nlocation ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\\.php)(?<pathinfo>/.*)?$ {\ninclude          fastcgi_params;\nfastcgi_pass     ${NGINX_FASTCGI_PASS:-php}:9000;\nfastcgi_param    SCRIPT_FILENAME $document_root$phpfile;\n# Must be prepended with the baseurlpath\nfastcgi_param    SCRIPT_NAME /simplesaml$phpfile;\nfastcgi_param    PATH_INFO $pathinfo if_not_empty;\n}\n}\n

          This will route /simplesaml URLs to SimpleSAMLphp in vendor.

          "},{"location":"using-lagoon-advanced/simplesaml/#add-additional-nginx-conf-to-nginx-image","title":"Add additional NGINX conf to NGINX image","text":"

          Modify nginx.dockerfile and add location_prepend_simplesamlphp.conf to the image:

          nginx.dockerfile
          ARG CLI_IMAGE\nFROM ${CLI_IMAGE} AS cli\n\nFROM uselagoon/nginx-drupal\n\nCOPY --from=cli /app /app\n\nCOPY lagoon/nginx/location_prepend_simplesamlphp.conf /etc/nginx/conf.d/drupal/location_prepend_simplesamlphp.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/location_prepend_simplesamlphp.conf\n\n# Define where the Drupal Root is located\nENV WEBROOT=public\n
          "},{"location":"using-lagoon-advanced/triggering-deployments/","title":"Triggering Deployments","text":""},{"location":"using-lagoon-advanced/triggering-deployments/#trigger-a-new-deployment-using-azure-pipelines","title":"Trigger a new deployment using Azure Pipelines","text":"

          In order to automatically trigger new deployments using Azure Pipelines follow these instructions:

          1. Add your deployment SSH private key to Azure as a secure file as id_rsa_lagoon. For more information about secure files have a look at the Azure Documentation Site.
          2. Add the following configuration to your azure-pipelines.yml:
          azure-pipelines.yml
          pool:\nvmImage: 'ubuntu-latest'\nstages:\n# .. other stages\n- stage: Deploy\ncondition: and(succeeded(), in(variables['Build.SourceBranch'], 'refs/heads/staging', 'refs/heads/develop'))\njobs:\n- job: DeployLagoon\nsteps:\n- task: DownloadSecureFile@1\nname: lagoonSshKey\ndisplayName: 'Download Lagoon SSH key'\ninputs:\nsecureFile: id_rsa_lagoon\n- script: |\ncurl -L \"https://github.com/uselagoon/lagoon-cli/releases/download/v0.21.3/lagoon-cli-v0.21.3-linux-amd64\" -o ./lagoon\nchmod +x ./lagoon\ndisplayName: 'Download lagoon-cli'\n- script: ./lagoon login -i $(lagoonSshKey.secureFilePath)\ndisplayName: 'Log into Lagoon'\n- script: ./lagoon deploy branch -e $(Build.SourceBranchName) -p my-awesome-project -b $(Build.SourceBranchName) --force\ndisplayName: 'Trigger deployment using lagoon-cli'\n

          This will trigger a new deployment whenever changes are made on the develop or staging branch. Adjust these values accordingly so they fit your deployment strategy and configuration.

          "},{"location":"using-lagoon-advanced/triggering-deployments/#push-without-deploying","title":"Push without deploying","text":"

          There may be a case where you want to push without a deployment. Make sure your commit message contains \"[skip deploy]\" or \"[deploy skip]\" and Lagoon will not trigger a deployment from that commit.

          "},{"location":"using-lagoon-advanced/using-harbor/","title":"Harbor","text":"

          Harbor is used as the default package repository for Lagoon when deploying to Kubernetes infrastructure. Harbor provides a Docker registry and a container security scanning solution provided by Trivy.

          Note

          When running Lagoon locally, the configuration for Harbor is handled entirely automagically.

          If you are running Lagoon locally, you can access that UI at localhost:8084. The username is admin and the password is admin.

          Note

          If you are hosting a site with a provider, they may not allow customer access to the Harbor UI.

          Once logged in, the first screen is a list of all repositories your user has access to. Each \"repository\" in Harbor correlates to a project in Lagoon.

          Within each Harbor repository, you'll see a list of container images from all environments with a single Lagoon project.

          From here, you can drill down into an individual container in order to see its details, including an overview of its security scan results.

          "},{"location":"using-lagoon-advanced/using-harbor/security-scanning/","title":"Security Scanning","text":"

          Harbor comes with a built-in security scanning solution provided by the Trivy service. This service analyzes a specified container image for any installed packages, and collects the version numbers of those installed packages. The Trivy service then searches the National Vulnerability Database for any CVEs (common vulnerabilities and exposures) affecting those package versions. Trivy is also library aware, so it will scan any Composer files or other package library definition files and report any vulnerabilities found within those package versions. These vulnerabilities are then reported within Harbor for each individual container.

          An example of a security scan in Harbor, showing applicable vulnerabilities for a scanned container:

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/","title":"Running Harbor Locally","text":"

          Lagoon supports running Harbor locally, where it makes use of MinIO as a storage backend, which is an AWS S3 compatible local storage solution.

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/#settings","title":"Settings","text":"

          Harbor is composed of multiple containers, which all require different settings in order for them to run successfully.

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/#environment-variables","title":"Environment Variables","text":"

          The following environment variables are required to be set in order for Harbor to properly start:

          • HARBOR_REGISTRY_STORAGE_AMAZON_BUCKET
            • This needs to be set to the name of the AWS bucket which Harbor will save images to.
            • Defaults to harbor-images when Lagoon is run locally or during CI testing.
          • HARBOR_REGISTRY_STORAGE_AMAZON_REGION
            • This needs to be set to the AWS region in which Harbor's bucket is located.
            • Defaults to us-east-1 when Lagoon is run locally or during CI testing.
          • REGISTRY_STORAGE_S3_ACCESSKEY
            • This needs to be set to the AWS access key Harbor should use to read and write to the AWS bucket.
            • Defaults to an empty string when Lagoon is run locally or during CI testing, as MinIO does not require authentication.
          • REGISTRY_STORAGE_S3_SECRETKEY
            • This needs to be set to the AWS secret key Harbor should use to read and write to the AWS bucket.
            • Defaults to an empty string when Lagoon is run locally or during CI testing, as MinIO does not require authentication.

          The following environment variables can be set if required:

          • HARBOR_REGISTRY_STORAGE_AMAZON_ENDPOINT
            • If this variable is set, the Harbor registry will use its value as the address of the s3 entrypoint.
            • Defaults to https://s3.amazonaws.com when this variable is not set.
          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/#container-specific-settings","title":"Container Specific Settings","text":"

          The following containers make use of configuration files:

          • HarborRegistry
          • HarborRegistryCtl
          • Harbor-Core
          • Harbor-Database
          • Harbor-Jobservice
          • Harbor-Trivy

          The following containers do not require configuration files to run:

          • Harbor-Nginx
          • Harbor-Portal
          • Harbor-Redis
          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/","title":"Harbor-Core","text":"

          Harbor-Core requires a configuration file to start, which is located at /etc/core/app.conf within the container. Any changes made to this config file are temporary and will not persist once the pod is restarted.

          The configmap from which this config file is generated is stored within Lagoon in the services/harbor-core/harbor-core.yml file. Any changes made to this configmap will be persisted across container restarts.

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/#config-file-contents","title":"Config File Contents","text":"
          • _REDIS_URL
            • Tells harbor-core and the Chartmuseum service connection info for the Redis server.
            • The default value is harbor-redis:6379,100,.
          • _REDIS_URL_REG
            • The url which harborregistry should use to connect to the Redis server.
            • The default value is redis://harbor-redis:6379/2.
          • ADMIRAL_URL
            • Tells harbor-core where to find the admiral service.
            • This service is not used with Lagoon's implementation of Harbor.
            • The default value is NA.
          • CFG_EXPIRATION
            • This value is not used.
            • The default value is 5.
          • CHART_CACHE_DRIVER
            • Tells harbor-core where to store any uploaded charts.
            • The default value is redis.
          • CLAIR_ADAPTER_URL
            • The URL that harbor-core should use to connect to the harbor-trivy service.
            • The default value is http://harbor-trivy:8080.
          • CLAIR_DB
            • The database type harborclair should use.
            • This value is not used, and is included only for legacy support
            • The default value is postgres.
          • CLAIR_DB_HOST
            • This value is not used, and is included only for legacy support
            • Tells harbor-core where to find the harborclair service.
            • The default value is harbor-database.
          • CLAIR_DB_PASSWORD
            • The password used to access harborclair's postgres database.
            • The default value is test123 when run locally or during CI testing.
            • This value is not used, and is included only for legacy support
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • CLAIR_DB_PORT
            • The port harborclair should use to connect to the harborclair server.
            • This value is not used, and is included only for legacy support
            • The default value is 5432.
          • CLAIR_DB_SSLMODE
            • Whether or not harborclair should use SSL to connect to the postgresql server.
            • This value is not used, and is included only for legacy support
            • The default value is disable.
          • CLAIR_DB_USERNAME
            • The user harborclair should use to connect to the postgresql server.
            • This value is not used, and is included only for legacy support
            • The default value is postgres.
          • CLAIR_HEALTH_CHECK_SERVER_URL
            • This value tells harbor-core where it should issue health checks to for the harbor-trivy service.
            • The default value is http://harbor-trivy:8080
          • CLAIR_URL
            • The URL that harbor-core should use to connect to the harbor-trivy service.
            • The default value is http://harbor-trivy:6060.
          • CONFIG_PATH
            • Where harbor-core should look for its config file.
            • The default value is /etc/core/app.conf.
          • CORE_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harbor-core.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • CORE_URL
            • The URL that harbor-core should publish to other Harbor services in order for them to connect to the harbor-core service.
            • The default value is http://harbor-core:8080.
          • DATABASE_TYPE
            • The database type Harbor should use.
            • The default value is postgresql.
          • HARBOR_ADMIN_PASSWORD
            • The password which should be used to access harbor using the admin user.
            • The default value is admin when run locally or during CI testing.
            • This value is retreived from a secret created when Harbor is first set up on a running Lagoon.
          • HARBOR_NGINX_ENDPOINT
            • This environment variable tells harborregistry where its NGINX ingress controller, harbor-nginx, is running in order to construct proper push and pull instructions in the UI, among other things.
            • The default value is set to http://harbor-nginx:8080 when run locally or during CI testing.
            • Lagoon attempts to obtain and set this variable automagically when run in production. If that process fails, this service will fail to run.
          • HTTP_PROXY
            • The default value is an empty string.
          • HTTPS_PROXY
            • The default value is an empty string.
          • JOBSERVICE_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harbor-jobservice.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • JOBSERVICE_URL
            • The URL that harbor-core should use to connect to the harbor-jobservice service.
            • The default value is http://harbor-jobservice:8080.
          • LOG_LEVEL
            • The default log level of the harbor-core service.
            • The default value is error.
          • NO_PROXY
            • A list of hosts which should never have their requests proxied.
            • The default is harbor-core,harbor-jobservice,harbor-database,harbor-trivy,harborregistry,harbor-portal,127.0.0.1,localhost,.local,.internal.
          • PORTAL_URL
            • This value tells the service where to connect to the harbor-portal service.
            • The default value is http://harbor-portal:8080.
          • POSTGRESQL_DATABASE
            • The postgres database harbor-core should use when connecting to the postgresql server.
            • The default value is registry.
          • POSTGRESQL_HOST
            • Where harbor-core should connect to the postgresql server.
            • The default value is harbor-database.
          • POSTGRESQL_MAX_IDLE_CONNS
            • The maximum number of idle connections harbor-core should leave open to the postgresql server.
            • The default value is 50.
          • POSTGRESQL_MAX_OPEN_CONNS
            • The maximum number of open connections harbor-core should have to the postgresql server.
            • The default value is 100.
          • POSTGRESQL_PASSWORD
            • The password Harbor should use to connect to the postgresql server.
            • The default value is a randomly generated value.
          • POSTGRESQL_PORT
            • The port harbor-core should use to connect to the postgresql server.
            • The default value is 5432.
          • POSTGRESQL_USERNAME
            • The username harbor-core should use to connect to the postgresql server.
            • The default value is postgres.
          • POSTGRESQL_SSLMODE
            • Whether or not harbor-core should use SSL to connect to the postgresql server.
            • The default value is disable.
          • REGISTRY_HTTP_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harborregistry.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retreived from a secret created when Harbor is first set up on a running Lagoon.
          • REGISTRY_STORAGE_PROVIDER_NAME
            • The storage backend that harborregistry should use.
            • The default value is s3.
          • REGISTRY_URL
            • The URL that harbor-core should use to connect to the harborregistry service..
            • The default value is http://harborregistry:5000.
          • REGISTRYCTL_URL
            • This value tells the service where to connect to the harborregistryctl service.
            • The default value is set to http://harborregistryctl:8080.
          • ROBOT_TOKEN_DURATION
            • This values sets how many days each issues robot token should be valid for.
            • The default value is set to 999.
          • SYNC_REGISTRY
            • This value is not used.
            • The default value is false.
          • TOKEN_SERVICE_URL
            • The URL that the harbor-core service publishes to other services in order to retrieve a JWT token.
            • The default value is http://harbor-core:8080/service/token.
          • TRIVY_ADAPTER_URL
            • The URL that the harbor-core service should use to connect to the harbor-trivy service.
            • The default value is http://harbor-trivy:8080.
          • WITH_CHARTMUSEUM
            • Tells harbor-core if the Chartmuseum service is being used.
            • This service is not used with Lagoon's implementation of Harbor.
            • The default value is false.
          • WITH_CLAIR
            • Tells harbor-core if the harborclair service is being used.
            • Lagoon does use this service in its implementation of Harbor.
            • The default value is true.
          • WITH_NOTARY
            • Tells harbor-core if the Notary service is being used.
            • This service is not used with Lagoon's implementation of Harbor.
            • The default value is false.
          • WITH_TRIVY
            • Tells harbor-core if the Trivy service is being used.
            • The default value is true.
          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/","title":"Harbor-Database","text":"

          Harbor-Database requires specific environment variables to be set in order to start, which are stored within secrets as described in the services/harbor-database/harbor-core.yml file.

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/#config-file-contents","title":"Config File Contents","text":"
          • POSTGRES_DB
            • The default database to be set up when initializing the Postgres service.
            • The default value is postgres.
          • POSTGRES_PASSWORD
            • The root password for the Postgres database.
            • The default value is test123.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • POSTGRES_USER
            • The default user to be set up when initializing the Postgres service.
            • The default value is postgres.
          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/","title":"Harbor-Jobservice","text":"

          Harbor-Jobservice requires a configuration file to start, which is located at /etc/jobservice/config.yml within the container. Any changes made to this config file are temporary and will not persist once the pod is restarted.

          The configmap from which this config file is generated is stored within Lagoon in the services/harbor-jobservice/harbor-jobservice.yml file. Any changes made to this configmap will be persisted across container restarts.

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/#config-file-contents","title":"Config File Contents","text":"
          • CORE_URL
            • This value tells harbor-jobservice where harbor-core can be reached.
            • The default value is http://harbor-core:8080.
          • CORE_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harbor-core.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • HTTP_PROXY
            • The default value is an empty string.
          • HTTPS_PROXY
            • The default value is an empty string.
          • JOBSERVICE_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harbor-jobservice.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • LOG_LEVEL
            • The logging level this service should use.
            • The default value is error.
              • This can also be set to debug to enable very verbose logging.
          • NO_PROXY
            • A list of hosts which should never have their requests proxied.
            • The default is harbor-core,harbor-jobservice,harbor-database,harbor-trivy,harborregistry,harbor-portal,127.0.0.1,localhost,.local,.internal.
          • REGISTRY_CONTROLLER_URL
            • This value tells the service where to connect to the harborregistryctl service.
            • The default value is set to http://harborregistryctl:8080
          • SCANNER_LOG_LEVEL
            • The logging level the scanning service should use.
            • The default value is error.
              • This can also be set to debug to enable very verbose logging.
          • SCANNER_STORE_REDIS_URL
            • This value tells harbor-trivy how to connect to its Redis store.
            • The default value is redis://harbor-redis:6379/4.
          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/","title":"Harbor-Trivy","text":"

          Harbor-Trivy is configured via specific environment variables and does not use a config file.

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/#environment-variables","title":"Environment Variables","text":"
          • SCANNER_LOG_LEVEL
            • The logging level this service should use.
            • The default value is error.
              • This can be set to debug to enable very verbose logging.
          • SCANNER_STORE_REDIS_URL
            • This value tells harbor-trivy how to connect to its Redis store.
            • The default value is redis://harbor-redis:6379/4.
          • SCANNER_JOB_QUEUE_REDIS_URL
            • This value tells harbor-trivy how to connect to its Redis store.
            • The default value is redis://harbor-redis:6379/4.
          • SCANNER_TRIVY_VULN_TYPE
            • This value tells harbor-trivy what types of vulnerabilities it should be searching for.
            • The default value is os,library
          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/","title":"HarborRegistry","text":"

          HarborRegistry requires a configuration file to start, which is located at /etc/registry/config.yml within the container. Any changes made to this config file are temporary and will not persist once the pod is restarted.

          This config file is stored within the services/harborregistry/harborregistry.yml file and loaded into the container as /etc/registry/pre-config.yml.

          A custom container entrypoint, services/harborregistry/entrypoint.sh, then transposes provided environment variables into this config file and saves the results as /etc/registry/config.yml.

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/#config-file-contents","title":"Config File Contents","text":"
          • CORE_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harbor-core.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • HARBOR_NGINX_ENDPOINT
            • This environment variable tells harborregistry where its NGINX ingress controller, harbor-nginx, is running in order to construct proper push and pull instructions in the UI, among other things.
            • The default value is set to http://harbor-nginx:8080 when run locally or during CI testing.
            • Lagoon attempts to obtain and set this variable automagically when run in production. If that process fails, this service will fail to run.
          • JOBSERVICE_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harbor-jobservice.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • REGISTRY_HTTP_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harborregistry.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • REGISTRY_REDIS_PASSWORD
            • This environment variable tells harborregistryctl the password that should be used to connect to Redis.
            • The default value is an empty string.
          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/","title":"HarborRegistryCtl","text":"

          HarborRegistryCtl requires a configuration file to start, which is located at /etc/registryctl/config.yml within the container. Any changes made to this config file are temporary and will not persist once the pod is restarted.

          The configmap from which this config file is generated is stored within Lagoon in the services/harborregistryctl/harborregistry.yml file. Any changes made to this configmap will be persisted across container restarts.

          "},{"location":"using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/#config-file-contents","title":"Config File Contents","text":"
          • CORE_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harbor-core.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • JOBSERVICE_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harbor-jobservice.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • REGISTRY_HTTP_SECRET
            • This value is a pre-shared key that must match between the various services connecting to harborregistry.
            • The default value is set to secret123 when Harbor is run locally or during CI testing.
            • This value is retrieved from a secret created when Harbor is first set up on a running Lagoon.
          • REGISTRY_REDIS_PASSWORD
            • This environment variable tells harborregistryctl the password that should be used to connect to Redis.
            • The default value is an empty string.
          "},{"location":"using-lagoon-the-basics/","title":"Using Lagoon - Overview","text":"

          This section covers some of the basic features and functionality in Lagoon. If you're familiar with these, move on to Using Lagoon - Advanced.

          If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our Discord.

          "},{"location":"using-lagoon-the-basics/#requirements","title":"Requirements","text":""},{"location":"using-lagoon-the-basics/#docker","title":"Docker","text":"

          To run a Lagoon Project, your system must meet the requirements to run Docker. We suggest installing the latest version of Docker for your workstation. You can download Docker here. We also suggest allowing Docker at least 4 CPUs and 4 GB RAM.

          "},{"location":"using-lagoon-the-basics/#local-development-environments","title":"Local Development Environments","text":"

          You can choose from pygmy, Lando, or DDEV - it's up to you!

          Learn more about Lagoon and Local Development Environments

          "},{"location":"using-lagoon-the-basics/#step-by-step-guides","title":"Step by Step Guides","text":"
          • General: set up a new project in Lagoon
          • General: first deployment
          • Drupal: first deployment in Drupal
          • Drupal: Lagoonize your Drupal site
          • All: build and deployment process of Lagoon
          "},{"location":"using-lagoon-the-basics/#overview-of-lagoon-configuration-files","title":"Overview of Lagoon Configuration Files","text":""},{"location":"using-lagoon-the-basics/#lagoonyml","title":".lagoon.yml","text":"

          This is the main file that will be used by Lagoon to understand what should be deployed, as well as many other things. See documentation for .lagoon.yml.

          "},{"location":"using-lagoon-the-basics/#docker-composeyml","title":"docker-compose.yml","text":"

          This file is used by Docker Compose to start your local development environment. Lagoon also uses it to understand which of the services should be deployed, which type, and how to build them. This happens via labels. See documentation for docker-compose.yml.

          "},{"location":"using-lagoon-the-basics/#dockerfiles","title":"Dockerfiles","text":"

          Some Docker images and containers need additional customizations from the provided images. This usually has two reasons:

          1. Application code: Containers like NGINX, PHP, Node.js, etc, need the actual programming code within their images. This is done during a Docker build step, which is configured in a Dockerfile. Lagoon has full support for Docker, and therefore also allows you full control over the resulting images via Dockerfile customizations.
          2. Customization of images: Lagoon also allows you to customize the base images according to your needs. This can be to inject an additional environment variable, change a service configuration, or even install additional tools. We advise caution with installing additional tools to the Docker images, as you will need to maintain any adaptions in the future!
          "},{"location":"using-lagoon-the-basics/#supported-services-base-images-by-lagoon","title":"Supported Services & Base Images by Lagoon","text":"Type Versions Dockerfile MariaDB 10.4, 10.5, 10.6, 10.11 mariadb/Dockerfile PostgreSQL 11, 12, 13, 14, 15, 16 postgres/Dockerfile MongoDB 4 mongo/Dockerfile NGINX openresty/1.25 nginx/Dockerfile Node.js 18, 20, 22 node/Dockerfile PHP FPM 8.1, 8.2, 8.3 php/fpm/Dockerfile PHP CLI 8.1, 8.2, 8.3 php/cli/Dockerfile Python 3.8, 3.9, 3.10, 3.11, 3.12 python/Dockerfile Redis 6, 7 redis/Dockerfile Solr 8, 9 solr/Dockerfile Varnish 6, 7 varnish/Dockerfile Opensearch 2 opensearch/Dockerfiles RabbitMQ 3.10 rabbitmq/Dockerfile Ruby 3.1, 3.2, 3.3 ruby/Dockerfile

          All images are pushed to https://hub.docker.com/u/uselagoon. We suggest always using the latest tag (like uselagoon/nginx:latest) as they are kept up to date in terms of features and security.

          If you choose to use a specific Lagoon version of an image like uselagoon/nginx:20.10.0 or uselagoon/node-10:20.10.0 it is your own responsibility to upgrade the version of the images as soon as a new Lagoon version is released!

          "},{"location":"using-lagoon-the-basics/configure-webhooks/","title":"Configure Webhooks","text":"

          Your Lagoon administrator will also give you the route to the webhook-handler. You will add this to your repository as an outgoing webhook, and choose which events to send to Lagoon. Typically, you will send all push and pull request events. In Lagoon it is possible to add a regular expression to determine which branches and pull requests actually result in a deploy, and your Lagoon administrator can set that up for you. For example, all branches that start with feature- could be deployed to Lagoon.

          Info for amazee.io customers

          If you are an amazee.io customer, the route to the webhook-handler is: https://hooks.lagoon.amazeeio.cloud.

          Danger

          Managing the following settings will require you to have a high level of access to these repositories, which will be controlled by your organization. If you cannot access these settings, please contact your systems administrator or the appropriate person within your organization.

          "},{"location":"using-lagoon-the-basics/configure-webhooks/#github","title":"GitHub","text":"
          1. Proceed to Settings -> Webhooks -> Add webhook in your GitHub repository.
          2. The Payload URL is the route to the webhook-handler of your Lagoon instance, provided by your Lagoon administrator.
          3. Set Content type to application/json.
          4. Choose \"Let me select individual events.\"
          5. Choose which events will trigger your webhook. We suggest that you send Push and Pull request events, and then filter further in the Lagoon configuration of your project.
          6. Make sure the webhook is set to Active.
          7. Click Add webhook to save your configuration.
          "},{"location":"using-lagoon-the-basics/configure-webhooks/#gitlab","title":"GitLab","text":"
          1. Navigate to Settings -> Integrations in your GitLab repository.
          2. The URL is the route to the webhook-handler of your Lagoon instance, provided by your Lagoon administrator.
          3. Select the Trigger events which will send a notification to Lagoon. We suggest that you send Push events and Merge request events, and then filter further in the Lagoon configuration of your project.
          4. Click Add webhookto save your configuration.
          "},{"location":"using-lagoon-the-basics/configure-webhooks/#bitbucket","title":"Bitbucket","text":"
          1. Navigate to Settings -> Webhooks -> Add new webhook in your repository.
          2. Title is for your reference.
          3. URL is the route to the webhook-handler of your Lagoon instance, provided by your Lagoon administrator.
          4. Choose from a full list of triggers and select the following:

            • Repository
              • Push
            • Pull Request
              • Created
              • Updated
              • Approved
              • Approval removed
              • Merged
              • Declined

            5. Click Save to save the webhook configurations for Bitbucket.

          "},{"location":"using-lagoon-the-basics/first-deployment/","title":"First Deployment","text":"

          Note

          If you are deploying a Drupal Project, skip this and read the Drupal-specific first deployment documentation.

          "},{"location":"using-lagoon-the-basics/first-deployment/#1-make-sure-you-are-ready","title":"1. Make sure you are ready","text":"

          In order to make your first deployment a successful one, please make sure that your project is Lagoonized and that you have set up the project in Lagoon. If not, or you're not sure, or that doesn't sound familiar, don't worry, go back and follow the Step-by-Step Guides which show you how this works, and then come back and deploy!

          "},{"location":"using-lagoon-the-basics/first-deployment/#2-push","title":"2. Push","text":"

          With Lagoon, you create a new deployment by pushing into a branch that is configured to be deployed.

          If you don't have any new code to push, don't worry! Run:

          Git push
          git commit --allow-empty -m \"go, go! Power Rangers!\"\ngit push\n

          This will trigger a push, and your Git hosting will inform Lagoon about this push via the configured webhook.

          If all is correct, you should see a notification in your configured chat system. (Contact your Lagoon administrator for this):

          This informs you that Lagoon has just started to deploy your code. Depending on the size of the code and amount of containers, this will take a couple of seconds. Just relax. If you want to know what's happening now, check out the Build and Deploy Process of Lagoon.

          You can also check your Lagoon UI to see the progress of any deployment. (Contact your Lagoon administrator for this).

          "},{"location":"using-lagoon-the-basics/first-deployment/#3-its-done","title":"3. It's done","text":"

          As soon as Lagoon is done building and deploying it will send a second notification to the chat system, here an example:

          It tells you:

          • Which project has been deployed.
          • Which branch and Git SHA have been deployed.
          • A link to the full logs of the build and deployment.
          • Links to all routes (URLs) where the environment can be reached.

          You can also quickly tell what kind of notification it is by the emoji at the beginning - whether it's just info that the build has started, a success, or fail.

          That's it! We hope that wasn't too hard - making devOps accessible is what we are striving for!

          "},{"location":"using-lagoon-the-basics/first-deployment/#but-wait-how-about-other-branches-or-the-production-environment","title":"But wait, how about other branches or the production environment?","text":"

          That's the beauty of Lagoon: it's exactly the same! Just push the name of the branch and that one will be deployed.

          "},{"location":"using-lagoon-the-basics/first-deployment/#failure-dont-worry","title":"Failure? Don't worry","text":"

          Did the deployment fail? Oh no! But we're here to help:

          1. If you deployed a Drupal site, make sure to read the Drupal-specific first deployment documentation, which explains why this happens.
          2. Click on the Logs link in the error notification, it will tell you where in the deployment process the failure happened.
          3. If you can't figure it out, just ask your Lagoon administrator, they are here to help!
          4. Reach out to us in your support channel or in the community Discord.
          "},{"location":"using-lagoon-the-basics/going-live/","title":"Going Live","text":"

          Congratulations, you're this close to going live with your website on Lagoon! In order to make this as seamless as possible, we've got this final checklist for you. It leads you through the last few things you should check before taking your site live.

          "},{"location":"using-lagoon-the-basics/going-live/#check-your-lagoonyml","title":"Check your .lagoon.yml","text":""},{"location":"using-lagoon-the-basics/going-live/#routes-ssl","title":"Routes / SSL","text":"

          Check to be sure that all routes have been set up in your .lagoon.yml. Be aware that if you don't point the domains towards Lagoon, you should disable Let's Encrypt (LE) certificate creation, as it will lead to issues. Domains not pointing towards Lagoon will be disabled after a while in order to not exceed the Let's Encrypt quotas.

          If you use Certificate Authority (CA) signed certificates, you can set tls-acme to false , but leave the insecure flag set to Allow or Redirect. In the case of CA certificates, contact your Lagoon administrator with the routes and the SSL certificate that needs to be put in place.

          .lagoon.yml
          environments:\nmain:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'false'\ninsecure: Allow\n- www.example.com:\ntls-acme: 'false'\ninsecure: Allow\n

          As soon as the DNS entries point towards your Lagoon installation, you can switch the flags: tls-acme to true and insecure to Redirect

          .lagoon.yml
          environments:\nmain:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'true'\ninsecure: Redirect\n- www.example.com:\ntls-acme: 'true'\ninsecure: Redirect\n

          Note

          As checking every page of your website might be a bit a tedious job, you can make use of mixed-content-scan. This will crawl the entire site and give you back pages that include assets from a non-HTTPS site.

          "},{"location":"using-lagoon-the-basics/going-live/#redirects","title":"Redirects","text":"

          If you need non-www to www redirects, make sure you have them set up in the redirects-map.conf - see Documentation.

          "},{"location":"using-lagoon-the-basics/going-live/#cron-jobs","title":"Cron jobs","text":"

          Check if your cron jobs have been set up for your production environment - see .lagoon.yml.

          "},{"location":"using-lagoon-the-basics/going-live/#dns","title":"DNS","text":"

          To make it as smooth as possible for you to get your site pointing to our servers, we have dedicated load-balancer DNS records. Those technical DNS resource records are used for getting your site linked to the amazee.io infrastructure and serve no other purpose. If you are in doubt of the CNAME record, contact your Lagoon administrator about the exact CNAME you need to set up.

          Example on amazee.io : <region-identifier>.amazee.io

          Before you switch over your domain to Lagoon, make sure you lower the Time-to-Live (TTL) before you go live. This will ensure that the switch from the old to the new servers will go quickly. We usually advise a TTL of 300-600 seconds prior to the DNS switch. More information about TTL.

          Info

          This information only relates to amazee.io hosted projects, and will shortly be removed from these docs and added to amazee.io specific ones

          "},{"location":"using-lagoon-the-basics/going-live/#recommended-settings-for-fastly","title":"Recommended settings for Fastly:","text":""},{"location":"using-lagoon-the-basics/going-live/#subdomains-cname","title":"Subdomains (CNAME)","text":"

          The recommended method of pointing your subdomain's (e.g. www.example.com) DNS records at Lagoon is via a CNAME record as shown below:

          CNAME: cdn.amazee.io

          "},{"location":"using-lagoon-the-basics/going-live/#root-domains-aaaaa","title":"Root domains (A/AAAA)","text":"

          Configuring the root domain (e.g. example.com.) can be tricky because the DNS specification does not allow root domains to point to a CNAME. Therefore, the following A and AAAA records should be used. Please ensure you set up individual records for each IP listed below:

          • A: 151.101.2.191
          • A: 151.101.66.191
          • A: 151.101.130.191
          • A: 151.101.194.191
          • AAAA: 2a04:4e42::703
          • AAAA: 2a04:4e42:200::703
          • AAAA: 2a04:4e42:400::703
          • AAAA: 2a04:4e42:600::703
          "},{"location":"using-lagoon-the-basics/going-live/#production-environment","title":"Production environment","text":"

          Lagoon understands the concept of development and production environments. Development environments automatically send noindex and nofollow headers in order to prohibit indexing by search engines.

          X-Robots-Tag: noindex, nofollow

          During project setup, the production environment should already be defined. If that's omitted, your environment will run in development mode. You can check if the environment is set as production environment in the Lagoon user interface. If the production environment is not set, let your Lagoon administrator know, and they will configure the system accordingly.

          "},{"location":"using-lagoon-the-basics/lagoon-build-errors-and-warnings/","title":"Lagoon Build Errors and Warnings","text":"

          Newer releases of Lagoon have the capability to identify potential issues with the build, and highlight them as warnings without failing. This is also a way for the Lagoon team to inform users of pending deprecations and changes to functionality.

          For example, if the Lagoon team makes a change to a setting in lagoon.yml, and there\u2019s something that users need to change, the warning will mention it, so users will be able to change it before it becomes a breaking change. They should be resolved ASAP wherever possible, as future releases of Lagoon may not be able to handle the errors, but they shouldn't stop your build.

          If you aren't sure how to resolve these errors, please reach out to your Lagoon administrator, or ask a question in the Lagoon community.

          "},{"location":"using-lagoon-the-basics/lagoon-build-errors-and-warnings/#docker-compose-errors","title":"Docker Compose Errors","text":"

          Please also see the section on Common Docker Compose Issues, as some of these issues may be covered there

          Lagoon Build output indicating env_file error
          > an env_file is defined in your docker-compose file, but no matching file found\n

          Docker Compose expects a referenced env file to be present at build time, but that env file is only present in local development, or has been excluded from the Dockerfile. The Lagoon team is working to hopefully allow Docker Compose to ignore this error, so this warning will remain until we have a resolution.

          Lagoon Build output indicating string key error
          > an invalid string key was detected in your docker-compose file\n

          There is an error in your Docker Compose file, most likely relating to a malformed or misused alias or anchor. The error message should help you understand where.

          Lagoon Build output indicating yaml validation error
          > There are yaml validation errors in your docker-compose file that should be corrected\n

          There is an error in your Docker Compose file, most likely relating to a malformed or misused alias or anchor. The error message should help you understand where.

          "},{"location":"using-lagoon-the-basics/lagoon-build-errors-and-warnings/#deprecated-images","title":"Deprecated Images","text":"

          Please see the dedicated page on how to handle this warning

          "},{"location":"using-lagoon-the-basics/local-development-environments/","title":"Local Development Environments","text":"

          Even though Lagoon has only a hard dependency on Docker and Docker Compose (which is mostly shipped with Docker) there are some things which are nice for local development that are not included in Docker:

          • An HTTP reverse proxy for nice URLs and HTTPS offloading.
          • A DNS system so we don't have to remember IP addresses.
          • SSH agents to use SSH keys within containers.
          • A system that receives and displays mail locally.
          Warning

          You do not need to install Lagoon locally to use it locally! That sounds confusing but follow the documentation. Lagoon is the system that deploys your local development environment to your production environment, it's not the environment itself.

          "},{"location":"using-lagoon-the-basics/local-development-environments/#pygmy-ddev-or-lando-the-choice-is-yours","title":"pygmy, DDEV, or Lando - the choice is yours","text":""},{"location":"using-lagoon-the-basics/local-development-environments/#pygmy","title":"pygmy","text":"

          Lagoon has traditionally worked best with pygmy , which is a preconfigured system of the above tools and works out of the box with Lagoon. It lives at https://github.com/pygmystack/pygmy

          pygmy is written in Golang, so to install it, run:

          Install with HomeBrew
          brew tap pygmystack/pygmy && brew install pygmy\n

          For detailed usage or installation info on pygmy, see its documentation.

          "},{"location":"using-lagoon-the-basics/local-development-environments/#lando","title":"Lando","text":"

          Lagoon is well-integrated with Lando! For more information, please see the documentation at https://docs.lando.dev/config/lagoon.html to get yourself up and running.

          Lando's workflow for Lagoon will be familiar to users of Lando, and will also be the easiest way for Lagoon newcomers to get up and running. Pygmy presents a closer integration with Docker, which will lend itself better to more complex scenarios and use cases but will also require a deeper understanding.

          "},{"location":"using-lagoon-the-basics/local-development-environments/#ddev","title":"DDEV","text":"

          Lagoon is also supported on DDEV! Check out their documentation to get started: https://ddev.readthedocs.io/en/stable/users/providers/lagoon/.

          We have previously evaluated adding support for other systems like Docksal and Docker4Drupal, and while we may add support for these in the future, our current focus is on supporting our current tools.

          "},{"location":"using-lagoon-the-basics/setup-project/","title":"Set Up a New Project","text":"

          Note

          We are working hard on getting our CLI and GraphQL API set up to allow everyone using Lagoon to set up and configure their projects themselves. Right now, it needs more testing before we can release those features, so hold tight!

          Until then, the setup of a new project involves talking to your Lagoon administrator, which is ok, as they are much friendlier than APIs. \ud83d\ude0a

          Please have the following information ready for your Lagoon administrator:

          • A name you would like the project to be known by
            • This name can only contain lowercase characters, numbers and dashes
            • Double dashes (--) are not allowed within a project name
          • SSH public keys, email addresses and the names of everybody that will work on this project. Here are instructions for generating and copying SSH keys for GitHub, GitLab, and Bitbucket.
          • The URL of the Git repository where your code is hosted (git@example.com:test/test.git).
          • The name of the Git branch you would like to use for your production environment (see Environment Types for details about the environments).
          • Which branches and pull requests you would like to deploy to your additional environments. With Lagoon, you can filter branches and pull requests by name with regular expressions, and your Lagoon administrator can get this set up for you.

          We suggest deploying specific important branches (like develop and main) and pull requests. But that's all up to you! (see Workflows for some more information)

          "},{"location":"using-lagoon-the-basics/setup-project/#1-make-sure-your-project-is-lagoonized","title":"1. Make sure your project is Lagoonized","text":"

          This means that the .lagoon.yml and docker-compose.yml files are available in your Git repository and configured accordingly.

          If this is not the case, check out the list of Step-by-Step Guides on how to do so before proceeding.

          "},{"location":"using-lagoon-the-basics/setup-project/#2-provide-access-to-your-code","title":"2. Provide access to your code","text":"

          In order to deploy your code, Lagoon needs access to it. By design and for security, Lagoon only needs read access to your Git repository.

          You may need your Lagoon administrator to tell you the SSH public key or the Git account to give read access to.

          "},{"location":"using-lagoon-the-basics/setup-project/#3-configure-webhooks","title":"3. Configure Webhooks","text":"

          Lagoon needs to be informed about a couple of events that are happening to your Git repository. Currently these are pushes and pull requests, but we may add more in the future.

          As Lagoon supports many different Git hosts, we have split off those instructions into this documentation: Configure Webhooks.

          "},{"location":"using-lagoon-the-basics/setup-project/#4-next-first-deployment","title":"4. Next: First deployment","text":"

          Congratulations, you are now ready to run your first deployment.

          "},{"location":"ja/#lagoon-kubernetes","title":"Lagoon - Kubernetes\u5411\u3051\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30ea\u30d0\u30ea\u30fc\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0","text":"

          Lagoon\u306f\u958b\u767a\u8005\u304c\u7406\u60f3\u3068\u3059\u308b\u3082\u306e\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u305d\u308c\u306f\u958b\u767a\u8005\u304c\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u3067\u307e\u3063\u305f\u304f\u540c\u3058\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002\u540c\u3058Docker\u30a4\u30e1\u30fc\u30b8\u3001\u540c\u3058\u30b5\u30fc\u30d3\u30b9\u8a2d\u5b9a\u3001\u305d\u3057\u3066\u540c\u3058\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/#_1","title":"\u306f\u3058\u3081\u306b","text":"

          \u3042\u306a\u305f\u304cLagoon\u3092\u4f7f\u7528\u3057\u3066\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30db\u30b9\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          Lagoon\u306e\u6a5f\u80fd\u306b\u3064\u3044\u3066\u3088\u308a\u6df1\u304f\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u306f\u3001Lagoon\u306e\u9ad8\u5ea6\u306a\u4f7f\u3044\u65b9\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

          Lagoon\u306e\u4ed5\u7d44\u307f\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u306f\u3001Lagoon\u306e\u57fa\u672c\u7684\u306a\u6982\u5ff5\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u305d\u3057\u3066\u3001\u3088\u308a\u6df1\u3044\u7406\u89e3\u306e\u305f\u3081\u306b\u3001Lagoon\u306e\u9ad8\u5ea6\u306a\u6982\u5ff5\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u3042\u306a\u305f\u304cLagoon\u3092\u958b\u767a\u3057\u305f\u3044(\u6a5f\u80fd\u3092\u8ffd\u52a0\u3001\u30d0\u30b0\u3092\u4fee\u6b63)\u5834\u5408\u306f\u3001Lagoon\u306e\u958b\u767a\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/#tldr-lagoon","title":"TL;DR: Lagoon\u306e\u4ed5\u7d44\u307f","text":"
          1. \u958b\u767a\u8005\u306f\u3001YAML \u30d5\u30a1\u30a4\u30eb\u5185\u3067\u5fc5\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3001\u8a2d\u5b9a\u3057\u307e\u3059\u3002
          2. \u4fee\u6b63\u3057\u305f\u30b3\u30fc\u30c9\u3092 Git \u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
          3. Lagoon \u306f YAML \u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3001\u5fc5\u8981\u306a\u69cb\u6210\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
          4. Lagoon \u306f\u5fc5\u8981\u306a Docker \u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002
          5. Lagoon \u306f\u305d\u308c\u3089\u3092 Docker \u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
          6. Lagoon \u306f Kubernetes \u306b\u5fc5\u8981\u306a\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
          7. Lagoon \u306f\u30b3\u30f3\u30c6\u30ca\u306e\u5c55\u958b\u3092\u76e3\u8996\u3057\u307e\u3059\u3002
          8. \u3059\u3079\u3066\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001Lagoon \u306f\u3055\u307e\u3056\u307e\u306a\u65b9\u6cd5 (Slack\u3001\u30e1\u30fc\u30eb\u3001Web \u30b5\u30a4\u30c8\u306a\u3069) \u3067\u958b\u767a\u8005\u306b\u901a\u77e5\u3057\u307e\u3059\u3002
          "},{"location":"ja/#_2","title":"\u30d8\u30eb\u30d7","text":"

          \u8cea\u554f\u3084\u30a2\u30a4\u30c7\u30a2\u304c\u3042\u308a\u307e\u3057\u305f\u3089\u30b3\u30fc\u30c9\u30e1\u30f3\u30c6\u30ca\u30fc\u3084\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u306b\u4f1a\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          Lagoon Discord\u306e\u4f1a\u8a71\u3078\u3054\u53c2\u52a0\u304f\u3060\u3055\u3044\uff1ahttps://discord.gg/te5hHe95JE

          "},{"location":"ja/#lagoon_1","title":"Lagoon\u306b\u3064\u3044\u3066","text":"
          1. Lagoon \u306f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3068\u30d3\u30eb\u30c9\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u975e\u5e38\u306b\u8907\u96d1\u3067\u3059\u3002\u8907\u6570\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30bd\u30fc\u30b9\u3001\u8907\u6570\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u3001\u8907\u6570\u306e\u901a\u77e5\u30b7\u30b9\u30c6\u30e0\u304c\u3042\u308a\u307e\u3059\u3002\u5404\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306f1\u30641\u3064\u304c\u7279\u6709\u306e\u3082\u306e\u3067\u3042\u308a\u3001\u6570\u79d2\u304b\u3089\u6570\u6642\u9593\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u67d4\u8edf\u6027\u3068\u5805\u7262\u6027\u3092\u8003\u616e\u3057\u3066\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306f\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0 \u30b7\u30b9\u30c6\u30e0\u3092\u4ecb\u3057\u3066\u901a\u4fe1\u3059\u308b\u305f\u3081\u3001\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u30b9\u30b1\u30fc\u30eb\u30a2\u30c3\u30d7\u304a\u3088\u3073\u30b9\u30b1\u30fc\u30eb\u30c0\u30a6\u30f3\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30c0\u30a6\u30f3\u30bf\u30a4\u30e0\u3092\u4e57\u308a\u5207\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u4ed6\u306e\u90e8\u5206\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u3053\u3068\u306a\u304f\u3001\u672c\u756a\u74b0\u5883\u3067 Lagoon \u306e\u65b0\u3057\u3044\u90e8\u5206\u3092\u8a66\u3059\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
          2. Lagoon \u3067\u306f\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5404\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u306f\u305d\u308c\u305e\u308c\u56fa\u6709\u306e\u9577\u6240\u304c\u3042\u308a\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u3001\u5404\u30b5\u30fc\u30d3\u30b9\u306b\u6700\u3082\u9069\u3057\u305f\u8a00\u8a9e\u3092\u6c7a\u5b9a\u3059\u308b\u3088\u3046\u52aa\u3081\u3066\u3044\u307e\u3059\u3002\u73fe\u5728\u3001Lagoon \u306e\u591a\u304f\u306f Node.js \u3067\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u6700\u521d\u306bNode.js\u3092\u4f7f\u3044\u59cb\u3081\u305f\u304b\u3089\u3060\u3051\u3067\u306a\u304f\u3001Node.js\u304cwebhooks\u3001\u30bf\u30b9\u30af\u306a\u3069\u306e\u975e\u540c\u671f\u51e6\u7406\u3092\u53ef\u80fd\u306b\u3059\u308b\u304b\u3089\u3067\u3059\u3002\u4e00\u90e8\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3092\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u7d20\u6674\u3089\u3057\u3044\u3068\u3053\u308d\u3067\u3042\u308a\u3001\u4ed6\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3078\u306e\u5f71\u97ff\u3092\u61f8\u5ff5\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u4e00\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5225\u306e\u8a00\u8a9e\u3067\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
          3. Lagoon\u306fDrupal\u7279\u6709\u306e\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4efb\u610f\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002Drupal\u7528\u306e\u65e2\u5b58\u306eDocker\u30a4\u30e1\u30fc\u30b8\u304c\u3042\u308a\u3001Drush\u306e\u3088\u3046\u306aDrupal\u7279\u6709\u306e\u30c4\u30fc\u30eb\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u304c\u3001Drupal\u7279\u6709\u306e\u90e8\u5206\u306f\u305d\u3053\u3060\u3051\u3067\u3059\u3002
          4. Lagoon\u306fDevOps\u3067\u3059\u3002\u958b\u767a\u8005\u304c\u5fc5\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u304c\u6b63\u3057\u3044\u65b9\u6cd5\u3067\u306a\u3044\u3068\u601d\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3057\u3001\u958b\u767a\u8005\u306b\u3042\u307e\u308a\u306b\u3082\u591a\u304f\u306e\u6a29\u9650\u3092\u4e0e\u3048\u3066\u3044\u308b\u3068\u601d\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3057\u304b\u3057\u3001\u79c1\u305f\u3061\u306f\u30b7\u30b9\u30c6\u30e0\u30a8\u30f3\u30b8\u30cb\u30a2\u3068\u3057\u3066\u3001\u958b\u767a\u8005\u3092\u5f37\u5316\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u958b\u767a\u8005\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u3089\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308c\u3070\u3001\u5f7c\u3089\u81ea\u8eab\u304c\u30d0\u30b0\u3084\u30df\u30b9\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
          5. Lagoon\u306fDocker\u3068Kubernetes\u4e0a\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          6. Lagoon\u306f\u5b8c\u5168\u306b\u30ed\u30fc\u30ab\u30eb\u3067\u958b\u767a\u30fb\u30c6\u30b9\u30c8\u304c\u53ef\u80fd\u3067\u3059\u3002
          7. Lagoon\u306f\u5b8c\u5168\u306b\u7d71\u5408\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u79c1\u305f\u3061\u304c \u5168\u30d7\u30ed\u30bb\u30b9\u3092\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002Git\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u306e\u53d7\u4fe1\u304b\u3089Docker\u30b3\u30f3\u30c6\u30ca\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u3001\u540c\u3058Git\u30cf\u30c3\u30b7\u30e5\u304c\u30af\u30e9\u30b9\u30bf\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002
          8. \u6700\u3082\u91cd\u8981\u306a\u70b9: \u3053\u308c\u306f\u9032\u884c\u4e2d\u306e\u4f5c\u696d\u3067\u3059\u3002\u307e\u3060\u7d42\u308f\u308a\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002amazee.io\u3067\u306f\u3001\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u3057\u3066\u3001\u53ef\u80fd\u306a\u9650\u308a\u30b3\u30fc\u30c9\u3092\u5171\u6709\u3057\u3001\u5354\u529b\u3057\u3066\u4f5c\u696d\u3092\u9032\u3081\u308b\u5fc5\u8981\u304c\u3042\u308b\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002

          \u79c1\u305f\u3061\u306f\u3042\u306a\u305f\u304cLagoon\u306e\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3068\u30b5\u30fc\u30d3\u30b9\u304c\u3069\u306e\u3088\u3046\u306b\u9023\u643a\u3057\u3066\u52d5\u4f5c\u3059\u308b\u304b\u3001\u7406\u89e3\u3057\u3066\u3082\u3089\u3048\u308b\u3053\u3068\u3092\u671b\u3093\u3067\u3044\u307e\u3059\u3002\u3053\u3053\u306b\u30b9\u30ad\u30fc\u30de\u304c\u3042\u308a\u307e\u3059(\u5c11\u3057\u53e4\u304f\u3001\u6700\u8fd1\u8ffd\u52a0\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u3084Kubernetes\u3092\u30ab\u30d0\u30fc\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u66f4\u65b0\u4f5c\u696d\u4e2d\u3067\u3059):Lucid Chart

          "},{"location":"ja/#lagoon_2","title":"Lagoon\u306e\u6b74\u53f2","text":"

          \u8aac\u660e\u3057\u305f\u3088\u3046\u306b\u3001Lagoon\u306f\u7406\u60f3\u3092\u73fe\u5b9f\u306b\u3057\u305f\u3082\u306e\u3067\u3059\u3002amazee.io\u3067\u306f\u3001Drupal\u30928\u5e74\u4ee5\u4e0a\u30db\u30b9\u30c8\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u79c1\u305f\u3061\u306e\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e4\u56de\u76ee\u306e\u5927\u304d\u306a\u6539\u8a02\u3067\u3059\u30023\u56de\u76ee\u306e\u6539\u8a02\u306fPuppet\u3068Ansible\u3092\u4e2d\u5fc3\u306b\u69cb\u7bc9\u3055\u308c\u307e\u3057\u305f\u3002\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u5404\u90e8\u5206\u306f\u5168\u3066\u8a2d\u5b9a\u7ba1\u7406\u3067\u884c\u308f\u308c\u307e\u3057\u305f\u3002\u3053\u308c\u306b\u3088\u308a\u65b0\u3057\u3044\u30b5\u30fc\u30d0\u30fc\u306e\u8a2d\u5b9a\u304c\u975e\u5e38\u306b\u901f\u304f\u3067\u304d\u307e\u3057\u305f\u304c\u3001\u540c\u6642\u306b\u958b\u767a\u8005\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u4f59\u5730\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u79c1\u305f\u3061\u306f\u3044\u304f\u3064\u304b\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3092\u5b9f\u88c5\u3057\u307e\u3057\u305f\u304c\u3001\u3059\u3067\u306bDocker\u3092\u672c\u756a\u74b0\u5883\u3067\u4f7f\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001\u79c1\u305f\u3061\u306f\u305d\u306e\u3053\u3068\u306b\u5b8c\u5168\u306b\u6e80\u8db3\u3057\u3066\u3044\u305f\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u79c1\u305f\u3061\u306f\u3001\u65e2\u5b58\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3060\u3051\u3067\u306f\u8db3\u308a\u306a\u3044\u3068\u6c17\u3065\u304d\u307e\u3057\u305f\u3002\u30c7\u30ab\u30c3\u30d7\u30ebDrupal\u306e\u53f0\u982d\u3001\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u3067\u306eNode.js\u306e\u52d5\u4f5c\u8981\u6c42\u3001Elasticsearch\u3078\u306e\u8981\u671b\u3001\u7570\u306a\u308bSolr\u30d0\u30fc\u30b8\u30e7\u30f3\u306a\u3069\u3001\u591a\u304f\u306b\u5bfe\u5fdc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u3002

          \u540c\u6642\u306b\u3001\u79c1\u305f\u3061\u306f\u9577\u5e74\u306b\u308f\u305f\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u305f\u3081\u306bDocker\u3092\u4f7f\u7528\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u672c\u756a\u74b0\u5883\u3067\u5168\u3066\u3092Docker\u3067\u884c\u3046\u3068\u3044\u3046\u306e\u306f\u5e38\u306b\u8003\u3048\u3066\u3044\u307e\u3057\u305f\u3002\u552f\u4e00\u306e\u554f\u984c\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u3068\u672c\u756a\u74b0\u5883\u3068\u306e\u9023\u643a\u3067\u3057\u305f\u3002\u4ed6\u306b\u3082\u3001\u672c\u756a\u74b0\u5883\u3067Drupal\u3092Docker\u3067\u52d5\u4f5c\u3055\u305b\u308b\u30b7\u30b9\u30c6\u30e0\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u30ed\u30fc\u30ab\u30eb\u3068\u672c\u756a\u74b0\u5883\u3067\u6b63\u78ba\u306b\u540c\u3058\u30a4\u30e1\u30fc\u30b8\u3068\u30b5\u30fc\u30d3\u30b9\u3092\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3059\u308b\u3082\u306e\u306f\u4f55\u3082\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002

          Lagoon\u306f2017\u5e74\u306b\u8a95\u751f\u3057\u307e\u3057\u305f\u3002\u305d\u308c\u4ee5\u6765\u3001\u672c\u756a\u74b0\u5883\u3067Docker\u3092\u52d5\u4f5c\u3055\u305b\u308b\u30b7\u30b9\u30c6\u30e0\u306b\u767a\u5c55\u3057\u307e\u3057\u305f\u3002Lagoon\u306f\u3001\u6211\u3005\u306e\u7b2c3\u4e16\u4ee3\u306e\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3092\u3001\u6700\u5148\u7aef\u306e\u5168Docker\u30d9\u30fc\u30b9\u306e\u30b7\u30b9\u30c6\u30e0\u306b\u7f6e\u304d\u63db\u3048\u307e\u3057\u305f\u3002

          "},{"location":"ja/#_3","title":"\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9","text":"

          amazee.io\u3067\u306f\u3001\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u53ef\u80fd\u6027\u3092\u4fe1\u3058\u3066\u3044\u307e\u3059\u3002Drupal\u306e\u3088\u3046\u306a\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u72ec\u5360\u7684\u306a\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306f\u5e38\u306b\u6211\u3005\u306b\u3068\u3063\u3066\u554f\u984c\u3067\u3057\u305f\u3002\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u4f1a\u793e\u306e\u5f37\u3055\u3068\u6210\u529f\u306f\u3001\u5358\u306b\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u3084\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u3060\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u308c\u306f\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3092\u52d5\u304b\u3059\u4eba\u3005\u3068\u77e5\u8b58\u3067\u3059\u3002 \u30d7\u30ed\u30bb\u30b9\u3001\u30b9\u30ad\u30eb\u3001\u4e88\u671f\u3057\u306a\u3044\u72b6\u6cc1\u306b\u5bfe\u5fdc\u3059\u308b\u80fd\u529b\u3001\u305d\u3057\u3066\u6700\u5f8c\u306b\u5fd8\u308c\u3066\u306f\u306a\u3089\u306a\u3044\u306e\u306f\u3001\u5f7c\u3089\u304c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u63d0\u4f9b\u3059\u308b\u30b5\u30dd\u30fc\u30c8\u3067\u3059\u3002

          "},{"location":"ja/#_4","title":"\u30e9\u30a4\u30bb\u30f3\u30b9","text":"

          Lagoon\u306f\u3001Apache 2.0 \u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u4e0b\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002

          "},{"location":"ja/code-of-conduct/","title":"\u884c\u52d5\u898f\u7bc4","text":""},{"location":"ja/code-of-conduct/#our-pledge","title":"\u79c1\u305f\u3061\u306e\u8a93\u3044","text":"

          \u30aa\u30fc\u30d7\u30f3\u3067\u6b53\u8fce\u7684\u306a\u74b0\u5883\u3092\u80b2\u3066\u308b\u305f\u3081\u306b\u3001\u79c1\u305f\u3061\u306f\u8ca2\u732e\u8005\u3084\u30e1\u30f3\u30c6\u30ca\u3068\u3057\u3066\u3001\u5e74\u9f62\u3001\u4f53\u578b\u3001\u969c\u5bb3\u3001\u6c11\u65cf\u6027\u3001\u6027\u81ea\u8a8d\u3068\u6027\u8868\u73fe\u3001\u7d4c\u9a13\u306e\u30ec\u30d9\u30eb\u3001\u56fd\u7c4d\u3001\u500b\u4eba\u306e\u5916\u898b\u3001\u4eba\u7a2e\u3001\u5b97\u6559\u3001\u307e\u305f\u306f\u6027\u7684\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u6027\u7684\u6307\u5411\u306b\u95a2\u4fc2\u306a\u304f\u3001\u79c1\u305f\u3061\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3078\u306e\u53c2\u52a0\u3092\u8ab0\u3082\u304c\u30cf\u30e9\u30b9\u30e1\u30f3\u30c8\u306e\u306a\u3044\u7d4c\u9a13\u306b\u3059\u308b\u3053\u3068\u3092\u8a93\u3044\u307e\u3059\u3002

          "},{"location":"ja/code-of-conduct/#our-standards","title":"\u79c1\u305f\u3061\u306e\u57fa\u6e96","text":"

          \u7a4d\u6975\u7684\u306a\u74b0\u5883\u4f5c\u308a\u306b\u8ca2\u732e\u3059\u308b\u884c\u52d5\u306e\u4f8b:

          • \u30a6\u30a7\u30eb\u30ab\u30df\u30f3\u30b0\u3067\u5305\u62ec\u7684\u306a\u8a00\u8449\u9063\u3044\u3092\u3059\u308b\u3053\u3068\u3002
          • \u7570\u306a\u308b\u8996\u70b9\u3068\u7d4c\u9a13\u3092\u5c0a\u91cd\u3059\u308b\u3053\u3068\u3002
          • \u5efa\u8a2d\u7684\u306a\u6279\u8a55\u3092\u7a4f\u3084\u304b\u306b\u53d7\u3051\u5165\u308c\u308b\u3053\u3068\u3002
          • \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u305f\u3081\u306b\u6700\u5584\u3092\u5c3d\u304f\u3059\u3053\u3068\u3002
          • \u4ed6\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30e1\u30f3\u30d0\u30fc\u306b\u5bfe\u3059\u308b\u5171\u611f\u3092\u793a\u3059\u3053\u3068\u3002

          \u53c2\u52a0\u8005\u306b\u3088\u308b\u8a31\u3055\u308c\u306a\u3044\u884c\u52d5\u306e\u4f8b:

          • \u6027\u7684\u306a\u8a00\u8449\u3084\u30a4\u30e1\u30fc\u30b8\u306e\u4f7f\u7528\u3001\u304a\u3088\u3073\u6b53\u8fce\u3055\u308c\u306a\u3044\u6027\u7684\u306a\u95a2\u5fc3\u3084\u30a2\u30c9\u30d0\u30f3\u30b9\u3002
          • \u30c8\u30ed\u30fc\u30ea\u30f3\u30b0\u3001\u4fae\u8fb1\u7684/\u8511\u8996\u7684\u306a\u30b3\u30e1\u30f3\u30c8\u3001\u304a\u3088\u3073\u500b\u4eba\u307e\u305f\u306f\u653f\u6cbb\u7684\u306a\u653b\u6483\u3002
          • \u516c\u5171\u306e\u5834\u307e\u305f\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u3067\u306e\u30cf\u30e9\u30b9\u30e1\u30f3\u30c8\u3002
          • \u660e\u78ba\u306a\u8a31\u53ef\u306a\u3057\u306b\u4ed6\u4eba\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u60c5\u5831(\u7269\u7406\u7684\u307e\u305f\u306f\u96fb\u5b50\u7684\u306a\u4f4f\u6240\u306a\u3069)\u3092\u516c\u958b\u3059\u308b\u3053\u3068\u3002
          • \u5408\u7406\u7684\u306b\u4e0d\u9069\u5207\u3068\u8003\u3048\u3089\u308c\u308b\u4ed6\u306e\u884c\u70ba\u3002 \u5c02\u9580\u7684\u306a\u74b0\u5883\u3067\u306f\u4e0d\u9069\u5207\u3068\u8003\u3048\u3089\u308c\u308b\u5834\u5408\u3002
          "},{"location":"ja/code-of-conduct/#our-responsibilities","title":"\u79c1\u305f\u3061\u306e\u8cac\u4efb","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7ba1\u7406\u8005\u306f\u3001\u53d7\u3051\u5165\u308c\u3089\u308c\u308b\u884c\u52d5\u306e\u57fa\u6e96\u3092\u660e\u78ba\u306b\u3057\u3001\u4e0d\u53d7\u3051\u5165\u308c\u53ef\u80fd\u306a\u884c\u52d5\u306e\u4e8b\u4f8b\u306b\u5bfe\u3057\u3066\u9069\u5207\u3067\u516c\u6b63\u306a\u662f\u6b63\u63aa\u7f6e\u3092\u3068\u308b\u3053\u3068\u304c\u671f\u5f85\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7ba1\u7406\u8005\u306f\u3001\u3053\u306e\u884c\u52d5\u898f\u7bc4\u306b\u5408\u81f4\u3057\u3066\u3044\u306a\u3044\u30b3\u30e1\u30f3\u30c8\u3001\u30b3\u30df\u30c3\u30c8\u3001\u30b3\u30fc\u30c9\u3001\u30a6\u30a3\u30ad\u306e\u7de8\u96c6\u3001\u554f\u984c\u3001\u304a\u3088\u3073\u305d\u306e\u4ed6\u306e\u8ca2\u732e\u3092\u524a\u9664\u3001\u7de8\u96c6\u3001\u307e\u305f\u306f\u62d2\u5426\u3059\u308b\u6a29\u5229\u3068\u8cac\u4efb\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u4e0d\u9069\u5207\u3001\u8105\u5a01\u7684\u3001\u653b\u6483\u7684\u3001\u307e\u305f\u306f\u6709\u5bb3\u3068\u898b\u306a\u3059\u4ed6\u306e\u884c\u52d5\u3092\u884c\u3063\u305f\u8ca2\u732e\u8005\u3092\u4e00\u6642\u7684\u307e\u305f\u306f\u6c38\u4e45\u306b\u7981\u6b62\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/code-of-conduct/#scope","title":"\u9069\u7528\u7bc4\u56f2","text":"

          \u3053\u306e\u884c\u52d5\u898f\u7bc4\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b9\u30da\u30fc\u30b9\u5185\u3060\u3051\u3067\u306a\u304f\u3001\u500b\u4eba\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u305d\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u4ee3\u8868\u3057\u3066\u516c\u5171\u306e\u30b9\u30da\u30fc\u30b9\u306b\u3044\u308b\u3068\u304d\u306b\u3082\u9069\u7528\u3055\u308c\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u4ee3\u8868\u3059\u308b\u4f8b\u3068\u3057\u3066\u306f\u3001\u516c\u5f0f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3001\u516c\u5f0f\u306e\u30bd\u30fc\u30b7\u30e3\u30eb\u30e1\u30c7\u30a3\u30a2\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u901a\u3058\u3066\u6295\u7a3f\u3059\u308b\u3053\u3068\u3001\u30aa\u30f3\u30e9\u30a4\u30f3\u307e\u305f\u306f\u30aa\u30d5\u30e9\u30a4\u30f3\u306e\u30a4\u30d9\u30f3\u30c8\u3067\u6307\u540d\u3055\u308c\u305f\u4ee3\u8868\u8005\u3068\u3057\u3066\u884c\u52d5\u3059\u308b\u3053\u3068\u306a\u3069\u304c\u3042\u308a\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4ee3\u8868\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7ba1\u7406\u8005\u306b\u3088\u3063\u3066\u3055\u3089\u306b\u5b9a\u7fa9\u3055\u308c\u3001\u660e\u78ba\u5316\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/code-of-conduct/#enforcement","title":"\u57f7\u884c","text":"

          \u8650\u5f85\u7684\u3001\u5acc\u304c\u3089\u305b\u306e\u3042\u308b\u3001\u307e\u305f\u306f\u305d\u308c\u4ee5\u5916\u306e\u4e0d\u53d7\u3051\u5165\u308c\u53ef\u80fd\u306a\u884c\u52d5\u306e\u4e8b\u4f8b\u306f\u3001\u9023\u7d61\u5148\u306b\u5831\u544a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c1\u30fc\u30e0\u306fuselagoon@amazee.io\u306b\u3044\u307e\u3059\u3002\u307e\u305f\u3001CoC\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\u3092\u5b8c\u4e86\u3057\u305fLagoon\u30c1\u30fc\u30e0\u306e\u30e1\u30f3\u30d0\u30fc\u3067\u3042\u308bAlanna\u307e\u305f\u306fBrandon\u306b\u76f4\u63a5\u9023\u7d61\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c1\u30fc\u30e0\u306f\u3059\u3079\u3066\u306e\u82e6\u60c5\u3092\u30ec\u30d3\u30e5\u30fc\u3057\u3001\u8abf\u67fb\u3057\u3001\u72b6\u6cc1\u306b\u9069\u3057\u305f\u3068\u8003\u3048\u308b\u65b9\u6cd5\u3067\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c1\u30fc\u30e0\u306f\u3001\u4e8b\u8c61\u306e\u5831\u544a\u8005\u306b\u95a2\u3059\u308b\u6a5f\u5bc6\u6027\u3092\u7dad\u6301\u3059\u308b\u7fa9\u52d9\u304c\u3042\u308a\u307e\u3059\u3002\u5177\u4f53\u7684\u306a\u65bd\u884c\u30dd\u30ea\u30b7\u30fc\u306e\u8a73\u7d30\u306f\u3001\u5225\u9014\u6295\u7a3f\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30e1\u30f3\u30c6\u30ca\u30fc\u304c\u8aa0\u5b9f\u306b\u884c\u52d5\u898f\u7bc4\u306b\u5f93\u308f\u306a\u3044\u5834\u5408\u3001\u307e\u305f\u306f\u305d\u308c\u3092\u5f37\u5236\u3057\u306a\u3044\u5834\u5408\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30ea\u30fc\u30c0\u30fc\u30b7\u30c3\u30d7\u306e\u4ed6\u306e\u30e1\u30f3\u30d0\u30fc\u306b\u3088\u3063\u3066\u4e00\u6642\u7684\u307e\u305f\u306f\u6c38\u4e45\u7684\u306a\u5f71\u97ff\u3092\u53d7\u3051\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/code-of-conduct/#attribution","title":"\u30a2\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3","text":"

          \u3053\u306e\u884c\u52d5\u898f\u7bc4\u306f\u3001Contributor Covenant\u3001\u30d0\u30fc\u30b8\u30e7\u30f31.4\u304b\u3089\u30a2\u30c0\u30d7\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3061\u3089\u3067\u3054\u89a7\u3044\u305f\u3060\u3051\u307e\u3059 http://contributor-covenant.org/version/1/4\u3002

          "},{"location":"ja/contributing/","title":"\u8ca2\u732e","text":"

          \u6211\u3005\u306fLagoon\u3078\u306e\u3042\u3089\u3086\u308b\u7a2e\u985e\u306e\u8ca2\u732e\u3092\u5fc3\u304b\u3089\u6b53\u8fce\u3057\u307e\u3059\uff01

          "},{"location":"ja/contributing/#what-kind-of-contributions-do-we-need","title":"\u3069\u306e\u3088\u3046\u306a\u8ca2\u732e\u304c\u5fc5\u8981\u3067\u3059\u304b\uff1f","text":"

          Lagoon\u306f\u3069\u3093\u306a\u7a2e\u985e\u306e\u8ca2\u732e\u3067\u3082\u6069\u6075\u3092\u53d7\u3051\u307e\u3059 - \u30d0\u30b0\u4fee\u6b63\u3001\u65b0\u6a5f\u80fd\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u66f4\u65b0\u3001\u3042\u308b\u3044\u306f\u5358\u7d14\u306a\u30ad\u30e5\u30fc\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306a\u3069 - \u3042\u306a\u305f\u304c\u52a9\u3051\u3066\u304f\u308c\u308b\u3053\u3068\u3092\u6211\u3005\u306f\u5b09\u3057\u304f\u601d\u3044\u307e\u3059\u3002

          "},{"location":"ja/contributing/#developing-for-lagoon","title":"Lagoon\u306e\u958b\u767a","text":"

          Lagoon\u3092\u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u4e0a\u3067\u52d5\u304b\u3059\u65b9\u6cd5\u306b\u3064\u3044\u3066\u3001KinD\u3092\u4f7f\u7528\u3057\u305fDeveloping Lagoon\u3068\u3044\u3046\u30bb\u30af\u30b7\u30e7\u30f3\u5168\u4f53\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u307e\u3060\u975e\u5e38\u306bWIP\u3067\u3059\u304c\u3001\u3042\u306a\u305f\u3092\u52a9\u3051\u308b\u305f\u3081\u306e\u591a\u304f\u306eMakefile\u30eb\u30fc\u30c1\u30f3\u304c\u5b58\u5728\u3057\u307e\u3059\u3002

          "},{"location":"ja/contributing/#installing-lagoon","title":"Lagoon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

          \u6211\u3005\u306fLagoon\u3092Helm\u30c1\u30e3\u30fc\u30c8\u304b\u3089\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u65b9\u6cd5\u3092\u6982\u8aac\u3057\u305f\u5225\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u540d\u3082Installing Lagoon Into Existing Kubernetes Cluster - \u3053\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u53ef\u80fd\u306a\u9650\u308a\u30b9\u30e0\u30fc\u30ba\u306b\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\uff01

          "},{"location":"ja/contributing/#help-us-with-our-examples","title":"\u6211\u3005\u306e\u4f8b\u984c\u3067\u306e\u52a9\u3051","text":"

          \u73fe\u5728\u3001\u6211\u3005\u306e\u6700\u5927\u306e\u30cb\u30fc\u30ba\u306e\u4e00\u3064\u306f\u3001Lagoon\u304cDrupal\u4ee5\u5916\u306e\u5404\u7a2e\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u306a\u3069\u3068\u3069\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3059\u308b\u304b\u306e\u4f8b\u3092\u307e\u3068\u3081\u308b\u3053\u3068\u3067\u3059\u3002

          \u3082\u3057\u3001\u3042\u306a\u305f\u304c\u73fe\u5728\u6211\u3005\u304cDocker Compose\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u6301\u3063\u3066\u3044\u306a\u3044\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9CMS\u307e\u305f\u306f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u7acb\u3061\u4e0a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u308c\u3070\u3001PR\u3092\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u65e2\u5b58\u306e\u4f8b\u3092https://github.com/uselagoon/lagoon-ex\u3067\u3054\u89a7\u304f\u3060\u3055\u3044\u3002 \u30d2\u30f3\u30c8\u3001\u30a2\u30c9\u30d0\u30a4\u30b9\u3001\u30b9\u30bf\u30fc\u30bf\u30fc\u306e\u554f\u984c\u306b\u3064\u3044\u3066\u306f\u3001examples\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

          \u305f\u3060\u3057\u3001\u53ef\u80fd\u306a\u9650\u308a\u3001\u57fa\u672c\u306eDocker Hub\u30a4\u30e1\u30fc\u30b8https://hub.docker.com/u/uselagoon\u3092\u4f7f\u7528\u3057\u3066\u4f5c\u6210\u3057\u3066\u3044\u305f\u3060\u304d\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u9069\u5207\u306a\u30a4\u30e1\u30fc\u30b8\u304c\u306a\u3044\u5834\u5408\u3084\u3001\u5f53\u793e\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001PR(\u53ef\u80fd\u306a\u5834\u5408)\u3092\u6295\u3052\u3066\u3044\u305f\u3060\u304f\u304b\u3001\u554f\u984c\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044(\u4ed6\u306e\u8ab0\u304b\u304c\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306b)https://github.com/uselagoon/lagoon-images\u306b\u3066\u3002

          \u65e2\u5b58\u306e\u4f8b\u3092\u6539\u5584\u3059\u308b\u305f\u3081\u306b\u79c1\u305f\u3061\u3092\u624b\u4f1d\u3063\u3066\u304f\u3060\u3055\u3044\u3001\u3082\u3057\u3054\u53ef\u80fd\u3067\u3042\u308c\u3070 - \u79c1\u305f\u3061\u306f\u6700\u826f\u306e\u65b9\u6cd5\u3092\u8ffd\u6c42\u3057\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u304b\u3001\u4f55\u304b\u610f\u5473\u306e\u306a\u3044\u3053\u3068\u3092\u3057\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f

          \u3053\u308c\u3089\u306e\u4f8b\u306e\u3044\u305a\u308c\u304b\u306e\u30c6\u30b9\u30c8\u306b\u8ca2\u732e\u3059\u308b\u4eba\u306b\u306f\u30dc\u30fc\u30ca\u30b9\u30dd\u30a4\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059 \u2013 https://github.com/amazeeio/drupal-example-simple/blob/8.x/TESTING_dockercompose.md\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3044\u304f\u3064\u304b\u306e\u4f8b\u30c6\u30b9\u30c8\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u305d\u308c\u3089\u3092\u30ac\u30a4\u30c0\u30f3\u30b9\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u79c1\u305f\u3061\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001Lando\u306e\u512a\u308c\u305f\u30c1\u30fc\u30e0\u304b\u3089\u306eLeia\u3067\u3059\u3002

          \u4ed6\u306e\u4f8b\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u6539\u5584\u3059\u308b\u305f\u3081\u306b\u79c1\u305f\u3061\u3092\u624b\u4f1d\u3063\u3066\u304f\u3060\u3055\u3044 \u2013 \u79c1\u305f\u3061\u306f\u5b8c\u5168\u306a\u3082\u306e\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u3001 \u539f\u7a3f\u3001\u6574\u7406\u3001\u5f79\u7acb\u3064\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30ea\u30f3\u30af\u3001\u660e\u78ba\u306a\u58f0\u660e\u306f\u5168\u3066\u8d85\u7d20\u6674\u3089\u3057\u3044\u3067\u3059\u3002

          \u4f55\u304b\u8cea\u554f\u304c\u3042\u308b\u5834\u5408\u306f\u3001Discord\u3067\u79c1\u305f\u3061\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\uff01

          "},{"location":"ja/contributing/#i-found-a-security-issue","title":"\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u554f\u984c\u3092\u898b\u3064\u3051\u307e\u3057\u305f \ud83d\udd13","text":"

          \u79c1\u305f\u3061\u306f\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u975e\u5e38\u306b\u91cd\u8996\u3057\u3066\u3044\u307e\u3059\u3002 \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u554f\u984c\u3092\u767a\u898b\u3057\u305f\u308a\u3001\u767a\u898b\u3057\u305f\u3068\u601d\u3063\u305f\u3089\u3001\u662f\u975e\u30e1\u30f3\u30c6\u30ca\u306b\u6ce8\u610f\u3092\u4fc3\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u5371\u967a

          \u7d50\u679c\u3092security@amazee.io\u306b\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002 GitHub\u306e\u554f\u984c\u3068\u3057\u3066\u305d\u308c\u3089\u3092\u30d5\u30a1\u30a4\u30eb\u3057\u3066\u306f\u7d76\u5bfe\u306b\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002

          \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ec\u30dd\u30fc\u30c8\u306f\u975e\u5e38\u306b\u8a55\u4fa1\u3055\u308c\u3001\u516c\u5171\u306e\u30ab\u30eb\u30de\u3068\u30b9\u30ef\u30c3\u30b0\u304c\u3082\u3089\u3048\u307e\u3059\uff01 \u79c1\u305f\u3061\u306f\u307e\u305f\u3001\u30d0\u30b0\u30d0\u30a6\u30f3\u30c6\u30a3\u30b7\u30b9\u30c6\u30e0\u306e\u4f5c\u696d\u3082\u9032\u3081\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/contributing/#i-found-an-issue","title":"\u554f\u984c\u3092\u898b\u3064\u3051\u307e\u3057\u305f","text":"

          \u79c1\u305f\u3061\u306f\u5e38\u306b\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u3053\u3068\u306b\u8208\u5473\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u554f\u984c\u5831\u544a\u306f\u5927\u6b53\u8fce\u3067\u3059\u3002 \u3042\u306a\u305f\u306e\u554f\u984c\u304c\u3059\u3067\u306b\u554f\u984c\u30ad\u30e5\u30fc\u306b\u5b58\u5728\u3057\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/contributing/#i-have-a-feature-request-or-idea","title":"\u6a5f\u80fd\u306e\u8981\u671b\u3084\u30a2\u30a4\u30c7\u30a2\u304c\u3042\u308a\u307e\u3059","text":"

          \u7d20\u6575\u3067\u3059\uff01 \u554f\u984c\u3092\u4f5c\u6210\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u3001\u79c1\u305f\u3061\u306f\u305d\u308c\u3092\u691c\u8a0e\u3059\u308b\u3053\u3068\u3092\u559c\u3073\u307e\u3059\u3002 \u305d\u308c\u304c\u5b9f\u88c5\u3055\u308c\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 \u3057\u304b\u3057\u3001\u79c1\u305f\u3061\u306f\u5e38\u306bLagoon\u306b\u4f55\u3092\u3082\u305f\u3089\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u306e\u30a2\u30a4\u30c7\u30a2\u3092\u805e\u304f\u3053\u3068\u306b\u8208\u5473\u304c\u3042\u308a\u307e\u3059\u3002

          \u5225\u306e\u826f\u3044\u65b9\u6cd5\u306f\u3001\u3042\u306a\u305f\u306e\u30a2\u30a4\u30c7\u30a2\u306b\u3064\u3044\u3066Discord\u7d4c\u7531\u3067\u79c1\u305f\u3061\u3068\u8a71\u3059\u3053\u3068\u3082\u3067\u3059\u3002 . \u4eca\u65e5\u53c2\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\uff01

          "},{"location":"ja/contributing/#i-wrote-some-code","title":"\u79c1\u306f\u3044\u304f\u3064\u304b\u306e\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u307e\u3057\u305f","text":"

          \u7d20\u6674\u3089\u3057\u3044\uff01\u305d\u308c\u306b\u3064\u3044\u3066\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u304a\u9001\u308a\u304f\u3060\u3055\u3044\u3001\u53ef\u80fd\u306a\u9650\u308a\u30ec\u30d3\u30e5\u30fc\u3057\u3001\u53ef\u80fd\u3067\u3042\u308c\u3070\u30de\u30fc\u30b8\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/","title":"Lagoon\u306f\u5e45\u5e83\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u8a00\u8a9e\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059","text":"

          Lagoon\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b9\u30bf\u30c3\u30af\u3092\u5927\u304d\u304f3\u3064\u306e\u30ec\u30d9\u30eb\u306b\u5206\u985e\u3057\u3066\u3044\u307e\u3059:

          "},{"location":"ja/applications/#_1","title":"\u8a00\u8a9e","text":"

          Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u57fa\u672c\u7684\u306a\u69cb\u6210\u8981\u7d20\u3067\u3042\u308a\u3001\u901a\u5e38\u306fLagoon\u5c02\u7528\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/applications/#_2","title":"\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af","text":"

          \u3053\u308c\u3089\u306e\u57fa\u672c\u30a4\u30e1\u30fc\u30b8\u3092\u57fa\u306b\u3001\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3092\u63d0\u4f9b\u3057\u305f\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u99c6\u52d5\u3057\u305f\u308a\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30ed\u30b8\u30c3\u30af\u3001\u30c4\u30fc\u30eb\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/#_3","title":"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3","text":"

          \u901a\u5e38\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e0a\u306b\u69cb\u7bc9\u3055\u308c\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u7de8\u96c6\u8005\u3084\u958b\u767a\u8005\u304c\u6700\u7d42\u88fd\u54c1\u3092\u5f62\u4f5c\u308b\u305f\u3081\u306b\u64cd\u4f5c\u3059\u308b\u30ec\u30a4\u30e4\u30fc\u3067\u3059\u3002

          Lagoon\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u7167\u3059\u308b\u3068\u304d\u3001\u901a\u5e38\u306f3\u3064\u306e\u65b9\u6cd5\u3067\u305d\u308c\u3089\u3092\u53c2\u7167\u3057\u307e\u3059:

          "},{"location":"ja/applications/#_4","title":"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8","text":"

          \u3053\u308c\u3089\u306f\u5b8c\u5168\u306b\u6a5f\u80fd\u3059\u308b\u3001\u30af\u30ed\u30fc\u30f3\u53ef\u80fd\u306a\u30b9\u30bf\u30fc\u30bf\u30fc\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3059\u3002\u5b9a\u671f\u7684\u306b\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3068\u66f4\u65b0\u304c\u884c\u308f\u308c\u3001\u308f\u305a\u304b\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u62e1\u5f35\u3057\u3066\u4f7f\u7528\u3067\u304d\u308b\u72b6\u614b\u306b\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/applications/#_5","title":"\u4f8b","text":"

          \u3053\u308c\u3089\u306f\u5b8c\u5168\u306b\u6a5f\u80fd\u3059\u308b\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3001\u5b9a\u671f\u7684\u306b\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3068\u66f4\u65b0\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u500b\u5225\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u52d5\u4f5c\u3055\u305b\u308b\u306b\u306f\u3042\u308b\u7a0b\u5ea6\u306e\u52b4\u529b\u304c\u5fc5\u8981\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/applications/#_6","title":"\u30c7\u30e2","text":"

          \u3053\u308c\u3089\u306f\u5b9f\u8a3c\u306e\u305f\u3081\u306b\u69cb\u7bc9\u3055\u308c\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3001\u6982\u5ff5\u691c\u8a3c\u3068\u3057\u3066\u306f\u4f7f\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001\u5b9a\u671f\u7684\u306a\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3084\u66f4\u65b0\u306f\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093\u3002

          \u3088\u308a\u5b8c\u5168\u306a\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u79c1\u305f\u3061\u306eGitHub\u30ea\u30dd\u30b8\u30c8\u30ea:https://www.github.com/lagoon-examples \u3068\u79c1\u305f\u3061\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8 https://lagoon.sh/application/ \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/laravel/","title":"Laravel\u3092Lagoon\u3067\u5b9f\u884c","text":"

          Laravel\u3092Lagoon\u3067\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u8907\u6570\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002

          • \u65e2\u5b58\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u81ea\u5206\u3067\u300clagoonize\u300d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff08Lagoonizing\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff09\u3002
          • \u53c2\u8003\u3068\u3057\u3066\u3001\u30b7\u30f3\u30d7\u30eb\u306alagoonize\u3055\u308c\u305fLaravel\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u4f8b\u793a\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u7528\u610f\u3057\u3066\u3044\u307e\u3059\u3002
          • \uff08\u63a8\u5968\uff09 \"Sail:onLagoon\"\u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u6a19\u6e96\u7684\u306aLaravel Sail\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308a\u3001\u9069\u5207\u306aLagoon\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002
          "},{"location":"ja/applications/laravel/#_1","title":"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u74b0\u5883\u30ad\u30fc","text":"

          \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ad\u30fc\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001CLI\u307e\u305f\u306fUI\u3092\u901a\u3058\u3066APP_KEY\u74b0\u5883\u5909\u6570(environment variable)\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u3053\u308c\u306b\u3088\u308a\u3001\u30ad\u30fc\u3092\u30b3\u30fc\u30c9\u5185\uff08\u4f8b\u3048\u3070.env\u30d5\u30a1\u30a4\u30eb\uff09\u306b\u4fdd\u5b58\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u306a\u308a\u307e\u3059\u3002

          \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ad\u30fc\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001php artisan key:generate --show\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u66f4\u305b\u305a\u306b\u3001\u6709\u52b9\u306a\u30ad\u30fc\u3092\u51fa\u529b\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/node/#_1","title":"\u306f\u3058\u3081\u306b","text":"

          Lagoon\u306f\u3001\u516c\u5f0f\u306eNode Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u305fNode.js\u30a4\u30e1\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002

          Lagoon\u4e0a\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u52d5\u304b\u3059\u305f\u3081\u306e\u9069\u5fdc\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306e\u8a73\u3057\u3044\u60c5\u5831\u306f\u3001Node.js Docker\u30a4\u30e1\u30fc\u30b8\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/options/","title":"Lagoon\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a","text":""},{"location":"ja/applications/options/#lagoonyml","title":"lagoon.yml","text":"

          Lagoon\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u304a\u3088\u3073\u74b0\u5883\u30ec\u30d9\u30eb\u306e\u8a2d\u5b9a\u306f\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u306e .lagoon.yml \u30d5\u30a1\u30a4\u30eb\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          lagoon-yml.md\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/options/#docker-composeyml","title":"docker-compose.yml","text":"

          Lagoon\u306e\u30b5\u30fc\u30d3\u30b9\u30ec\u30d9\u30eb\u306e\u8a2d\u5b9a\u306f\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001lagoon.type\u3068\u95a2\u9023\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u30e9\u30d9\u30eb\u306f\u3001\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          docker-compose-yml.md\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/options/#_1","title":"\u30b9\u30c8\u30ec\u30fc\u30b8","text":"

          Lagoon\u306f\u307b\u3068\u3093\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u63d0\u4f9b\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002Lagoon\u7d44\u307f\u8fbc\u307f\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u306b\u306f\u3001\u5fc5\u8981\u306aPVC\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u306a\u3069\u3092\u8ffd\u52a0\u3067\u304d\u308b-persistent\u30d0\u30ea\u30a2\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u53cd\u6620\u3059\u308b\u3088\u3046\u306b\u4f8b\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002

          "},{"location":"ja/applications/options/#_2","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9","text":"

          Lagoon\u306f\u4ee5\u4e0b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059:

          • Mariadb - \u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5168\u30d0\u30fc\u30b8\u30e7\u30f3
          • PostgreSQL - \u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5168\u30d0\u30fc\u30b8\u30e7\u30f3
          "},{"location":"ja/applications/options/#_3","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30fb\u30a2\u30ba\u30fb\u30a2\u30fb\u30b5\u30fc\u30d3\u30b9","text":"

          Lagoon\u306f\u307e\u305f\u3001dbaas-operator\u3092\u5229\u7528\u3057\u3066\u3001\u57fa\u76e4\u3068\u306a\u308b\u30de\u30cd\u30fc\u30b8\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9\uff08\u4f8b\uff1aRDS\u3001Google Cloud Databases\u3001Azure Database\uff09\u3092\u4f7f\u7528\u3057\u3066\u3053\u308c\u3089\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u81ea\u52d5\u7684\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3059\u308b\u6a5f\u80fd\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u30af\u30e9\u30b9\u30bf\u7528\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u304a\u3088\u3073\u8a2d\u5b9a\u3055\u308c\u308b\u3068\u3001\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u304c\u5229\u7528\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3068\u3057\u3066\u30dd\u30c3\u30c9\u304c\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/applications/options/#_4","title":"\u30ad\u30e3\u30c3\u30b7\u30e5","text":"

          Lagoon\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066Redis\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u4e00\u90e8\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u652f\u63f4\u3059\u308b\u305f\u3081\u306b\u3001\u30de\u30cd\u30fc\u30b8\u30c9Redis\u30b5\u30fc\u30d3\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/applications/options/#_5","title":"\u691c\u7d22","text":"

          Lagoon\u306f\u691c\u7d22\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3068\u3057\u3066Elasticsearch\u3001Solr\u3001OpenSearch\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u5916\u90e8\u306e\u691c\u7d22\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3082\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/options/#_6","title":"\u30a4\u30f3\u30b0\u30ec\u30b9/\u30eb\u30fc\u30c8","text":"

          Lagoon\u306f\u3001\u30a4\u30f3\u30b0\u30ec\u30b9\u8981\u4ef6\u3092\u6301\u3064\u30b5\u30fc\u30d3\u30b9\u306e\u30eb\u30fc\u30c8\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u306f\u3001\u5404\u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b .lagoon.yml \u306b\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/options/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          Lagoon\u306f\u3001\u30d3\u30eb\u30c9\u6642\u3068\u30e9\u30f3\u30bf\u30a4\u30e0\u6642\u306b\u74b0\u5883\u5909\u6570\u3092\u591a\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u304c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u91cd\u8981\u306a\u8a2d\u5b9a(\u4f8b:\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a/\u8a8d\u8a3c\u60c5\u5831)\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u5834\u5408\u3001\u30ed\u30fc\u30ab\u30eb\u3068Lagoon\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u540c\u69d8\u306e\u540d\u524d\u3092\u4ed8\u3051\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002

          \u8a73\u7d30\u306f environment-variables.md\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/other/","title":"Lagoon\u3067\u4ed6\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c","text":"

          Lagoon\u304c\u7279\u5b9a\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u8a00\u8a9e\u7528\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u6301\u3063\u3066\u3044\u306a\u304f\u3066\u3082\u3001Lagoon\u3067\u30d3\u30eb\u30c9\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002

          commons\u30a4\u30e1\u30fc\u30b8\u3092\u62e1\u5f35\u307e\u305f\u306f\u7d99\u627f\u3059\u308b\u3053\u3068\u3067\u3001Lagoon\u306f\u307b\u307c\u3042\u3089\u3086\u308b\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/other/#hugo","title":"Hugo","text":"

          \u3053\u306e\u7c21\u5358\u306a\u4f8b\u306f\u3001Hugo\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3092\u30d3\u30eb\u30c9\u3057\u3001NGINX\u30a4\u30e1\u30fc\u30b8\u3067\u9759\u7684\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u63d0\u4f9b\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002commons\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066Hugo\u3092\u8ffd\u52a0\u3057\u3001\u30b5\u30a4\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u3066\u30d3\u30eb\u30c9\u3057\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305fNGINX\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u305fNGINX\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u30b5\u30a4\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

          nginx.dockerfile
          FROM uselagoon/commons AS builder\n\nRUN apk add hugo git\nWORKDIR /app\nCOPY . /app\nRUN hugo\n\nFROM uselagoon/nginx\n\nCOPY --from=builder /app/public/ /app\nCOPY lagoon/static-files.conf /etc/nginx/conf.d/app.conf\n\nRUN fix-permissions /usr/local/openresty/nginx\n
          docker-compose.yml
          services:\nnginx:\nbuild:\ncontext: .\ndockerfile: lagoon/nginx.Dockerfile\nlabels:\nlagoon.type: nginx\n
          "},{"location":"ja/applications/php/#_1","title":"\u306f\u3058\u3081\u306b","text":"

          Lagoon\u306f\u3001Drupal\u3001Laravel\u3001Wordpress\u3001Magento\u3001Symfony\u306a\u3069\u3001\u69d8\u3005\u306aPHP\u30d9\u30fc\u30b9\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002

          Lagoon\u3067PHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u9069\u5fdc\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3001PHP-cli Docker\u30a4\u30e1\u30fc\u30b8\u304a\u3088\u3073PHP-FPM Docker\u30a4\u30e1\u30fc\u30b8\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/python/#_1","title":"\u306f\u3058\u3081\u306b","text":"

          Lagoon\u306f\u3001Python\u30d9\u30fc\u30b9\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u308bPython 3.7\u4ee5\u4e0a\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

          Lagoon\u4e0a\u3067Python\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u52d5\u4f5c\u3055\u305b\u308b\u305f\u3081\u306e\u8abf\u6574\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3001Python Docker\u30a4\u30e1\u30fc\u30b8\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/ruby/","title":"Ruby\u3068Ruby on Rails","text":""},{"location":"ja/applications/ruby/#_1","title":"\u306f\u3058\u3081\u306b","text":"

          \u79c1\u305f\u3061\u306f\u3001\u516c\u5f0f\u306e Ruby alpine Docker \u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u305f Ruby 3.0 \u4ee5\u4e0a\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002 \u4ee5\u4e0b\u3067\u306f\u3001Rails \u30a2\u30d7\u30ea\u3092 Lagoon \u306b\u30c7\u30d7\u30ed\u30a4\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u3053\u3067\u8aac\u660e\u3059\u308b\u8a73\u7d30\u306e\u591a\u304f\u306f\u5b9f\u969b\u306b\u306f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u4f9d\u5b58\u3057\u307e\u305b\u3093\u3002

          "},{"location":"ja/applications/ruby/#lagoon-rails","title":"Lagoon \u3067 Rails \u3092\u5b9f\u884c\u3059\u308b","text":""},{"location":"ja/applications/ruby/#_2","title":"\u30ea\u30af\u30a8\u30b9\u30c8\u3078\u306e\u5fdc\u7b54","text":"

          Lagoon\u306e\u4f8b\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3042\u308bRuby on Rails\u306e\u4f8b\u304c\u53c2\u8003\u306b\u306a\u308a\u307e\u3059\u3002

          docker-compose.yml\u3067\u306f\u3001\u52d5\u7684\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3059\u308b\u4e3b\u8981\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066ruby\u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

          ruby\u30b5\u30fc\u30d3\u30b9\u7528\u306b\u6307\u5b9a\u3055\u308c\u305fdockerfile\u3092\u898b\u3066\u307f\u308b\u3068\u3001\u30dd\u30fc\u30c83000\u3092\u516c\u958b\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002nginx\u30b5\u30fc\u30d3\u30b9\u306f\u3001\u975e\u9759\u7684\u30a2\u30bb\u30c3\u30c8\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u3053\u306e\u30dd\u30fc\u30c8\u306eruby\u30b5\u30fc\u30d3\u30b9\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059(\u8a73\u7d30\u306fnginx\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)\u3002

          "},{"location":"ja/applications/ruby/#_3","title":"\u30ed\u30ae\u30f3\u30b0","text":"

          Lagoon\u306e\u30ed\u30ae\u30f3\u30b0\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306b\u3064\u3044\u3066\u306f\u3001\u6b21\u306e\u6587\u66f8\u3067\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002\u57fa\u672c\u7684\u306b\u3001\u3053\u306e\u30a4\u30f3\u30d5\u30e9\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30ed\u30b0\u3092UDP\u30e1\u30c3\u30bb\u30fc\u30b8\u3067udp://application-logs.lagoon.svc:5140\u306b\u9001\u4fe1\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          Rails\u306e\u4f8b\u3067\u306f\u3001logstash-logger\u3068\u3044\u3046gem\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001\u305d\u306e\u5f8cconfig/application.rb\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u521d\u671f\u5316\u3057\u3066\u3044\u307e\u3059\uff1a

          config/application.rb
              if ENV.has_key?('LAGOON_PROJECT') && ENV.has_key?('LAGOON_ENVIRONMENT') then\nlagoon_namespace = ENV['LAGOON_PROJECT'] + \"-\" + ENV['LAGOON_ENVIRONMENT']\nLogStashLogger.configure do |config|\nconfig.customize_event do |event|\nevent[\"type\"] = lagoon_namespace\nend\nend\nconfig.logstash.host = 'application-logs.lagoon.svc'\nconfig.logstash.type = :udp\nconfig.logstash.port = 5140\nend\n
          "},{"location":"ja/applications/ruby/#_4","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a","text":"

          \u3053\u306e\u4f8b\u3067\u306f\u3001\u79c1\u305f\u3061\u306ePostgreSQL\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059(docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)\u3002Lagoon\u3067\u306eRails\u3092\u7528\u3044\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u306e\u8a2d\u5b9a\u306f\u975e\u5e38\u306b\u7c21\u5358\u3067\u3059\u3002Lagoon \u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u63d0\u4f9b\u3057\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001config/database.yml \u30d5\u30a1\u30a4\u30eb\u3067\u3053\u308c\u3089\u306e\u74b0\u5883\u5909\u6570\u3092\u5229\u7528\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u7c21\u5358\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u3092\u69cb\u6210\u3067\u304d\u307e\u3059\u3002

          config/database.yml
          default: &default\nadapter: postgresql\nencoding: unicode\npool: <%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>\nusername: <%= ENV.fetch(\"POSTGRES_USERNAME\") { \"drupal\" } %>\npassword: <%= ENV.fetch(\"POSTGRES_PASSWORD\") { \"drupal\" } %>\nhost: <%= ENV.fetch(\"POSTGRES_HOST\") { \"postgres\" } %>\ndatabase: <%= ENV.fetch(\"'POSTGRES_DATABASE'\") { \"drupal\" } %>\n
          "},{"location":"ja/applications/wordpress/","title":"WordPress\u3092Lagoon\u3067\u5b9f\u884c","text":"

          WordPress\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001Composer\u3092\u4f7f\u7528\u3057\u3066WordPress\u3001\u305d\u306e\u4f9d\u5b58\u95a2\u4fc2\u3001\u304a\u3088\u3073\u30c6\u30fc\u30de\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u3053\u306eWordPress\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001https://github.com/roots/bedrock\u306e\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u6a19\u6e96\u5316\u3055\u308c\u305fLagoon\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d1\u30bf\u30fc\u30f3\u306b\u5408\u308f\u305b\u3066\u62e1\u5f35\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/applications/wordpress/#composer","title":"Composer\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

          \u3053\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001WordPress\u3068\u305d\u306e\u30c6\u30fc\u30de\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u305f\u3081\u306bComposer\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/wordpress/#_1","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9","text":"

          Lagoon\u306fMariaDB\u3068PostgreSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u304c\u3001WordPress\u3067\u306ePostgreSQL\u306e\u30b5\u30dd\u30fc\u30c8\u306f\u9650\u5b9a\u7684\u306a\u306e\u3067\u3001\u4f7f\u7528\u306f\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u3002

          "},{"location":"ja/applications/wordpress/#nginx","title":"NGINX\u306e\u8a2d\u5b9a","text":"

          Lagoon\u306b\u306fWordPress\u7528\u306e\u7d44\u307f\u8fbc\u307f\u8a2d\u5b9a\u304c\u3042\u308a\u307e\u305b\u3093 - \u4ee3\u308f\u308a\u306b\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u306f\u521d\u671f\u8a2d\u5b9a\u306enginx.conf\u304c\u4ed8\u5c5e\u3057\u3066\u3044\u307e\u3059\u3002\u6539\u5584\u70b9\u304c\u3042\u308c\u3070\u3001\u305c\u3072\u8ca2\u732e\u3057\u3066\u304f\u3060\u3055\u3044\uff01

          "},{"location":"ja/applications/wordpress/#wp-cli","title":"WP-CLI","text":"

          Lagoon\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001WordPress\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306bwp-cli\u3092cli\u30a4\u30e1\u30fc\u30b8\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/","title":"\u6982\u8981","text":"

          Lagoon\u306fDrupal\u30b5\u30a4\u30c8\u3092\u30db\u30b9\u30c8\u3059\u308b\u305f\u3081\u306b\u4f5c\u3089\u308c\u307e\u3057\u305f(\u3044\u3084\u3001\u672c\u5f53\u306b\u3001\u5c11\u306a\u304f\u3068\u3082\u6700\u521d\u306f\u305d\u3046\u3067\u3057\u305f\uff01)

          \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Drupal\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u69d8\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u306b\u95a2\u3059\u308b\u8a73\u7d30\u60c5\u5831\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/#drupal_integrations-drupal","title":"drupal_integrations Drupal\u30b9\u30ad\u30e3\u30d5\u30a9\u30fc\u30eb\u30c7\u30a3\u30f3\u30b0\u30d1\u30c3\u30b1\u30fc\u30b8","text":"

          packagist\u3067\u5229\u7528\u53ef\u80fd\u306adrupal_integrations\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u3001Lagoon\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306bDrupal\u306ecore-composer-scaffold\u3092\u62e1\u5f35\u3057\u307e\u3059\u3002\u307e\u305f\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eDrush\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306e\u8ffd\u52a0\u306eDrush\u30b3\u30de\u30f3\u30c9drush la\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/#lagoon-logs-drupal","title":"lagoon-logs Drupal\u30e2\u30b8\u30e5\u30fc\u30eb","text":"

          drupal.org\u3067\u5229\u7528\u53ef\u80fd\u306alagoon_logs\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001Lagoon\u4e0a\u306eDrupal\u306b\u5bfe\u3057\u3066\u8a2d\u5b9a\u4e0d\u8981\u306e\u30ed\u30ae\u30f3\u30b0\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/automatic-updates/","title":"\u81ea\u52d5\u66f4\u65b0","text":"

          Lagoon\u306f\u3001Drupal\u306e\u30b3\u30a2\u90e8\u5206\u3084contrib\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u66f4\u65b0\u65b9\u6cd5\u306e\u4e00\u90e8\u3068\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002Lagoon\u306f\u5909\u66f4\u3067\u304d\u306a\u3044\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3057\u3001\u5909\u66f4\u3067\u304d\u306a\u3044\u30b3\u30f3\u30c6\u30ca\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9\u304c\u5b9f\u884c\u6642\u306b\u5909\u66f4\u3055\u308c\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u554f\u984c\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          1. \u30b3\u30f3\u30c6\u30ca\u306e\u518d\u8d77\u52d5\u306b\u3088\u308b\u5909\u66f4\u306e\u6d88\u5931: \u30b3\u30f3\u30c6\u30ca\u306fKubernetes\u306b\u3088\u3063\u3066\u81ea\u52d5\u7684\u306b\u7ba1\u7406\u3055\u308c\u3066\u304a\u308a\u3001\u3044\u3064\u3067\u3082\u79fb\u52d5\u3001\u518d\u8d77\u52d5\u3001\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u304c\u767a\u751f\u3059\u308b\u3068\u3001\u6700\u521d\u306b\u69cb\u7bc9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u304c\u5b9f\u884c\u3055\u308c\u3001\u5b9f\u884c\u6642\u306b\u52a0\u3048\u3089\u308c\u305f\u5909\u66f4\u306f\u3059\u3079\u3066\u5931\u308f\u308c\u307e\u3059\u3002
          2. \u30bf\u30b9\u30af\u3068Cron\u30b8\u30e7\u30d6\u306e\u554f\u984c: \u30bf\u30b9\u30af\u3084Cron\u30b8\u30e7\u30d6\u306f\u6700\u521d\u306b\u69cb\u7bc9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u3067\u5b9f\u884c\u3055\u308c\u308b\u305f\u3081\u3001\u66f4\u65b0\u3055\u308c\u305f\u30b3\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002
          3. \u8aad\u307f\u53d6\u308a\u5c02\u7528\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308b\u66f4\u65b0\u306e\u5236\u9650: \u66f4\u65b0\u306b\u306f\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u5f37\u5236\u3059\u308b\u74b0\u5883\u3092\u69cb\u6210\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002
          4. \u8907\u6570\u30b3\u30f3\u30c6\u30ca\u66f4\u65b0\u6642\u306e\u4e0d\u4e00\u81f4: \u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3067\u306f\u3001\u305d\u308c\u305e\u308c\u5358\u4e00\u306e\u6a5f\u80fd\u3092\u6301\u3064\u5c0f\u3055\u306a\u30b3\u30f3\u30c6\u30ca\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002\u4e00\u822c\u7684\u306aDrupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u30b3\u30fc\u30c9\u306e\u30b3\u30d4\u30fc\u3092\u542b\u3080cli\u3001php\u3001nginx\u306e\u30b3\u30f3\u30c6\u30ca\u304c3\u3064\u5b58\u5728\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30b3\u30f3\u30c6\u30ca\u306e\u3046\u30611\u3064\u3060\u3051\u3092\u66f4\u65b0\u3059\u308b\u3068\u3001\u30b3\u30fc\u30c9\u306e\u4e0d\u4e00\u81f4\u306b\u3088\u308b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3059\u3002

          Lagoon\u3067\u306f\u4ee5\u4e0b\u306e\u66f4\u65b0\u65b9\u6cd5\u304c\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/automatic-updates/#drupal","title":"Drupal \u81ea\u52d5\u66f4\u65b0","text":"

          Drupal \u81ea\u52d5\u66f4\u65b0\u30e2\u30b8\u30e5\u30fc\u30eb:contrib\u30e2\u30b8\u30e5\u30fc\u30eb\u306e[\u81ea\u52d5\u66f4\u65b0] (https ://www.drupal.org/project/automatic_updates)\u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u304a\u308a\u3001Drupal\u30b3\u30a2\u306b\u79fb\u884c\u3057\u3066\u3082\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/automatic-updates/#drush","title":"Drush","text":"

          drush pm-install\u307e\u305f\u306fdrush pm-update\u30b3\u30de\u30f3\u30c9\u306f\u3001amazeeio/drupal-integrations\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4e00\u90e8\u3068\u3057\u3066\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/drush-9/#_1","title":"\u30a8\u30a4\u30ea\u30a2\u30b9","text":"

          \u6b8b\u5ff5\u306a\u304c\u3089\u3001Drush 9\u3067\u306f Drush 8\u306e\u3088\u3046\u306a\u52d5\u7684\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u6ce8\u5165\u6a5f\u80fd\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002Drush\u30c1\u30fc\u30e0\u3068\u5354\u529b\u3057\u3066\u3001\u3053\u306e\u6a5f\u80fd\u3092\u518d\u3073\u5b9f\u88c5\u3067\u304d\u308b\u3088\u3046\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u5f53\u9762\u306e\u9593\u3001Drush 9\u3092Lagoon\u3068\u4e00\u7dd2\u306b\u4f7f\u7528\u3059\u308b\u969b\u306e\u56de\u907f\u7b56\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/drush-9/#_2","title":"\u57fa\u672c\u7684\u306a\u8003\u3048\u65b9","text":"

          Drush 9\u306f\u65b0\u3057\u3044\u30b3\u30de\u30f3\u30c9drush site:alias-convert\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001Drush 8 \u5f62\u5f0f\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092 Drush 9\u306eYAML\u5f62\u5f0f\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306f\u3001Lagoon\u306b\u73fe\u5728\u5b58\u5728\u3059\u308b\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u4e00\u5ea6\u3060\u3051\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u3001\u305d\u308c\u3089\u3092/app/drush/sites\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u3053\u308c\u3089\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u306f drush sa\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u969b\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/drush-9/#_3","title":"\u6e96\u5099","text":"

          drush site:alias-convert\u3092\u4f7f\u7528\u3059\u308b\u524d\u306b\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          • drush\u30d5\u30a9\u30eb\u30c0\u5185\u306ealiases.drushrc.php\u3092lagoon.aliases.drushrc.php\u306b\u30ea\u30cd\u30fc\u30e0\u3057\u307e\u3059\u3002
          "},{"location":"ja/applications/drupal/drush-9/#_4","title":"\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u751f\u6210","text":"

          cli\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001Drush\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u5909\u63db\u3067\u304d\u307e\u3059:

          \u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u751f\u6210

          docker-compose exec cli drush site:alias-convert /app/drush/sites --yes\n
          \u751f\u6210\u3055\u308c\u305fYAML\u30d5\u30a1\u30a4\u30eb\u306fGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30df\u30c3\u30c8\u3059\u308b\u306e\u304c\u826f\u3044\u7fd2\u6163\u3067\u3059\u3002\u305d\u3046\u3059\u308b\u3053\u3068\u3067\u3001\u4ed6\u306e\u958b\u767a\u8005\u3082\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/drush-9/#_5","title":"\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u4f7f\u7528","text":"

          Drush 9\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306f\u30b0\u30eb\u30fc\u30d7\u540d\u3067\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u304c\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u4eca\u56de\u3067\u3042\u308c\u3070\u3001\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u540d\u306flagoon\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u3001\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u4ed8\u304d\u306e\u3059\u3079\u3066\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002

          \u3059\u3079\u3066\u306e\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u8868\u793a
          drush sa --format=list\n

          \u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u5229\u7528\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u3088\u3046\u306b\u3057\u307e\u3059:

          Drush \u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u4f7f\u7528
          drush @lagoon.main ssh\n
          "},{"location":"ja/applications/drupal/drush-9/#_6","title":"\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u66f4\u65b0","text":"

          Lagoon\u3067\u65b0\u3057\u3044\u74b0\u5883\u304c\u4f5c\u6210\u3055\u308c\u305f\u5834\u5408\u3001drush site:alias-convert\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3001\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u30d5\u30a1\u30a4\u30eb (.yml) \u3092\u66f4\u65b0\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3067lagoon.site.yml\u304c\u66f4\u65b0\u3055\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u6700\u521d\u306blagoon.site.yml\u3092\u524a\u9664\u3057\u3066\u304b\u3089\u3001\u3082\u3046\u4e00\u5ea6drush site:alias-convert\u3092\u5b9f\u884c\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/drush-9/#drush-rsync","title":"\u30ed\u30fc\u30ab\u30eb\u304b\u3089\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u3078\u306eDrush rsync","text":"

          \u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u304b\u3089\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u8ffd\u52a0\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6e21\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          Drush rsync
          drush rsync @self:%files @lagoon.main:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n

          \u3053\u308c\u306f\u3001Lagoon\u306e\u30bf\u30b9\u30afUI\u3092\u4f7f\u7528\u305b\u305a\u306b\u3001\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u9593\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f\u3059\u308b\u5834\u5408\u306b\u3082\u5f53\u3066\u306f\u307e\u308a\u307e\u3059\u3002

          \u305f\u3068\u3048\u3070\u3001@lagoon.main\u304b\u3089@lagoon.dev\u3078\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f\u3057\u305f\u3044\u5834\u5408\u3001\u4e0a\u8a18\u306e\u8ffd\u52a0\u30d1\u30e9\u30e1\u30fc\u30bf\u306a\u3057\u3067\u30ed\u30fc\u30ab\u30eb\u3067drush rsync @lagoon.main @lagoon.dev\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\"Cannot specify two remote aliases\" (2 \u3064\u306e\u30ea\u30e2\u30fc\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306f\u6307\u5b9a\u3067\u304d\u307e\u305b\u3093) \u3068\u3044\u3046\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          \u3053\u308c\u3092\u89e3\u6c7a\u3059\u308b\u306b\u306f\u3001\u307e\u305a\u5b9b\u5148\u306e\u74b0\u5883\u306bSSH\u3067\u63a5\u7d9a drush @lagoon.dev ssh\u3057\u3001\u4e0a\u8a18\u3068\u540c\u69d8\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066 rsync\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          Drush rsync
          drush rsync @lagoon.main:%files  @self:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n

          \u4e0a\u8a18\u306e\u5185\u5bb9\u306f\u3001\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u304b\u3089\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3078 rsync\u3092\u4f7f\u3063\u3066\u540c\u671f\u3059\u308b\u5834\u5408\u306b\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002

          \u307e\u305f\u3001\u79c1\u305f\u3061\u306fDrush\u306e\u30e1\u30f3\u30c6\u30ca\u3068\u5354\u529b\u3057\u3066\u3001\u3053\u308c\u3092\u81ea\u52d5\u7684\u306b\u6ce8\u5165\u3059\u308b\u65b9\u6cd5\u3092\u6a21\u7d22\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/first-deployment-of-drupal/","title":"Drupal\u306e\u521d\u56de\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8","text":""},{"location":"ja/applications/drupal/first-deployment-of-drupal/#1-make-sure-you-are-all-set","title":"1. \u6e96\u5099\u3092\u6574\u3048\u307e\u3057\u3087\u3046","text":"

          \u521d\u56de\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u6210\u529f\u3055\u305b\u308b\u305f\u3081\u306b\u306f\u3001Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304cLagoon\u5316\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3068\u3001Lagoon\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u3046\u3067\u306a\u3044\u5834\u5408\u3067\u3082\u5fc3\u914d\u306f\u3044\u308a\u307e\u305b\u3093\uff01\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#2-push","title":"2. \u30d7\u30c3\u30b7\u30e5","text":"

          Lagoon \u3092\u5229\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u30c7\u30d7\u30ed\u30a4\u7528\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306b push \u3059\u308b\u3053\u3068\u3067\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002

          \u65b0\u3057\u3044\u30b3\u30fc\u30c9\u3092push\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044\u5834\u5408\u3067\u3082\u5fc3\u914d\u306f\u3044\u308a\u307e\u305b\u3093\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002

          Git\u306bpush
          git commit --allow-empty -m \"go, go! Power Rangers!\"\ngit push\n

          \u30d7\u30c3\u30b7\u30e5\u304c\u5b9f\u884c\u3055\u308c\u308b\u3068\u3001Git\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u304c\u8a2d\u5b9a\u6e08\u307f\u306eWebhook\u3092\u4ecb\u3057\u3066Lagoon\u306b\u901a\u77e5\u3057\u307e\u3059\u3002

          \u3059\u3079\u3066\u6b63\u5e38\u3067\u3042\u308c\u3070\u3001\u8a2d\u5b9a\u6e08\u307f\u306e\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u306b\u901a\u77e5\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002(\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306fLagoon\u7ba1\u7406\u8005\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044):

          \u3053\u306e\u901a\u77e5\u306f\u3001Lagoon\u304c\u30b3\u30fc\u30c9\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u958b\u59cb\u3057\u305f\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u6642\u9593\u306f\u3001\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u30b5\u30a4\u30ba\u3068\u30b3\u30f3\u30c6\u30ca\u306e\u6570\u306b\u3088\u3063\u3066\u6570\u79d2\u304b\u304b\u308a\u307e\u3059\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002\u73fe\u5728\u306e\u72b6\u6cc1\u3092\u78ba\u8a8d\u3057\u305f\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30bb\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u30c7\u30d7\u30ed\u30a4\u306e\u9032\u884c\u72b6\u6cc1\u306f\u3001LagoonUI\u3067\u3082\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002(URL\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044)

          "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#3-a-fail","title":"3. \u5931\u6557","text":"

          .lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30c7\u30d7\u30ed\u30a4\u5f8c\u51e6\u7406\u30bf\u30b9\u30af\u306b\u3088\u3063\u3066\u306f\u3001drush updb\u3084drush cr\u306a\u3069\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306eDrush\u30bf\u30b9\u30af\u306f\u3001\u74b0\u5883\u5185\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u30c7\u30d7\u30ed\u30a4\u76f4\u5f8c\u3067\u306f\u5f53\u7136\u306a\u304c\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u65b9\u6cd5\u3092\u6b21\u306b\u8aac\u660e\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#4-synchronize-local-database-to-the-remote-lagoon-environment","title":"4. \u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30ea\u30e2\u30fc\u30c8\u306eLagoon\u74b0\u5883\u306b\u540c\u671f","text":"

          Lagoon\u306f\u5b8c\u5168\u306aDrush\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u30ea\u30e2\u30fc\u30c8\u306eLagoon\u74b0\u5883\u3092\u540c\u671f\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u8b66\u544a

          \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306e\u524d\u306b\u3001pygmy\u306b\u516c\u958b\u30ad\u30fc\u3092\u767b\u9332\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          Permission denied (publickey)\u306a\u3069\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u3001\u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:pygmy - ssh\u30ad\u30fc\u306e\u8ffd\u52a0

          \u307e\u305a\u306f\u3001Drush \u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046:

          \u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u53d6\u5f97
          drush sa\n

          \u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u73fe\u5728\u30c7\u30d7\u30ed\u30a4\u6e08\u307f\u306e\u74b0\u5883\u304c\u53d6\u5f97\u3055\u308c\u307e\u3059\uff08\u6700\u65b0\u306e\u72b6\u614b\u306f\u3001develop\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u6642\u70b9\u306e\u3082\u306e\u3068\u4eee\u5b9a\u3057\u307e\u3059\uff09:

          \u8fd4\u3055\u308c\u305f\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9
          [drupal-example]cli-drupal:/app$ drush sa\n@develop\n@self\ndefault\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9(Drush\u3067\u306f\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9@self\u3067\u8868\u3055\u308c\u307e\u3059)\u3068\u30ea\u30e2\u30fc\u30c8\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9(@develop)\u3092\u540c\u671f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          Drush sql-sync
          drush sql-sync @self @develop\n

          \u6b21\u306e\u3088\u3046\u306a\u7d50\u679c\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

          Drush sql-sync\u306e\u7d50\u679c
          [drupal-example]cli-drupal:/app$ drush sql-sync @self @develop\nYou will destroy data in ssh.example.com/drupal and replace with data from drupal.\nDo you really want to continue? (y/n): y\nStarting to dump database on Source.                                                                              [ok]\nDatabase dump saved to /home/drush-backups/drupal/20180227075813/drupal_20180227_075815.sql.gz               [success]\nStarting to discover temporary files directory on Destination.                                                    [ok]\nYou will delete files in drupal-example-develop@ssh.example.com:/tmp/drupal_20180227_075815.sql.gz and replace with data from /home/drush-backups/drupal/20180227075813/drupal_20180227_075815.sql.gz\nDo you really want to continue? (y/n): y\nCopying dump file from Source to Destination.                                                                     [ok]\nStarting to import dump file onto Destination database.\n

          \u3055\u3066\u3001\u518d\u5ea6\u30c7\u30d7\u30ed\u30a4\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4eca\u5ea6\u306f\u7a7a\u306e\u30d7\u30c3\u30b7\u30e5\u3067\u3059:

          Git push
          git commit --allow-empty -m \"\u884c\u3051\u3001\u884c\u3051\uff01 \u30d1\u30ef\u30fc\u30ec\u30f3\u30b8\u30e3\u30fc\uff01\"\ngit push\n

          \u4eca\u5ea6\u306f\u3059\u3079\u3066\u6b63\u5e38\u306b\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3059:

          \u901a\u77e5\u5185\u306e\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001Drupal\u30b5\u30a4\u30c8\u304c\u3059\u3079\u3066\u306e\u6a5f\u80fd\u3092\u5099\u3048\u3066\u30ed\u30fc\u30c9\u3055\u308c\u305f\u72b6\u614b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u304a\u305d\u3089\u304f\u307e\u3060\u753b\u50cf\u306f\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u305d\u308c\u306f\u30b9\u30c6\u30c3\u30d75\u3067\u51e6\u7406\u3057\u307e\u3059\u3002

          \u30c7\u30d7\u30ed\u30a4\u304c\u4f9d\u7136\u3068\u3057\u3066\u5931\u6557\u3059\u308b\u5834\u5408\u306f\u3001\u8a73\u7d30\u60c5\u5831\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\u306b\u30ed\u30b0\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#5-synchronize-local-files-to-the-remote-lagoon-environment","title":"5. \u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30e2\u30fc\u30c8\u306eLagoon\u74b0\u5883\u306b\u540c\u671f","text":"

          \u304a\u305d\u3089\u304f\u4e88\u60f3\u901a\u308a\u3067\u3059\u304c\u3001Drush\u3092\u4f7f\u3063\u3066\u540c\u671f\u3067\u304d\u307e\u3059:

          Drush rsync
          drush rsync @self:%files @develop:%files\n

          \u6b21\u306e\u3088\u3046\u306a\u8868\u793a\u304c\u51fa\u308b\u306f\u305a\u3067\u3059:

          Drush rsync results
          [drupal-example]cli-drupal:/app$ drush rsync @self:%files @develop:%files\nYou will delete files in drupal-example-develop@ssh.example.com:/app/web/sites/default/files and replace with data from /app/web/sites/default/files/\nDo you really want to continue? (y/n): y\n

          \u3057\u304b\u3057\u3001\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u3053\u306e\u3088\u3046\u306b\u6b63\u3057\u304f\u8868\u793a\u3055\u308c\u306a\u3044\u3053\u3068\u3082\u3042\u308b\uff1a

          Drush rsync results
          [drupal-example]cli-drupal:/app$ drush rsync @self:%files @develop:%files\nYou will delete files in drupal-example-develop@ssh.example.com:'/app/web/%files' and replace with data from '/app/web/%files'/\nDo you really want to continue? (y/n):\n

          \u3053\u306e\u7406\u7531\u306f\u3001Drupal\u304c\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3092\u89e3\u6c7a\u3067\u304d\u306a\u3044\u305f\u3081\u3067\u3059\u3002\u3053\u308c\u306f\u304a\u305d\u3089\u304f\u3001Drupal\u304c\u5b8c\u5168\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u3053\u3068\u304c\u539f\u56e0\u3067\u3059\u3002\u56de\u907f\u7b56\u3068\u3057\u3066\u306fdrush rsync @self:sites/default/files @develop:sites/default/files\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5b9f\u969b\u306b\u306f\u30ed\u30fc\u30ab\u30eb\u3068\u30ea\u30e2\u30fc\u30c8\u306e Drupal \u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059 (drush status\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059)

          "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#6-its-done","title":"6. \u5b8c\u4e86","text":"

          Lagoon\u304c\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u3092\u5b8c\u4e86\u3059\u308b\u3068\u3001\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u306b\u6b21\u306e\u3088\u3046\u306a2\u56de\u76ee\u306e\u901a\u77e5\u304c\u9001\u4fe1\u3055\u308c\u307e\u3059\u3002:

          \u901a\u77e5\u306f\u6b21\u306e\u3088\u3046\u306a\u5185\u5bb9\u3092\u793a\u3057\u3066\u3044\u307e\u3059:

          • \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8
          • \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u3068Git SHA
          • \u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u306e\u30ed\u30b0\u3078\u306e\u30ea\u30f3\u30af
          • \u74b0\u5883\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8(URL)\u3078\u306e\u30ea\u30f3\u30af

          \u3053\u308c\u3067\u4f5c\u696d\u306f\u5b8c\u4e86\u3067\u3059! DevOps\u3092\u7c21\u5358\u306b\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u3053\u3068\u304c\u79c1\u305f\u3061\u306e\u76ee\u6a19\u3067\u3059\u3002

          "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#but-wait-how-about-other-branches-or-the-production-environment","title":"\u3057\u304b\u3057\u3001\u4ed6\u306e\u30d6\u30e9\u30f3\u30c1\u3084\u672c\u756a\u74b0\u5883\u306f\u3069\u3046\u306a\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f","text":"

          Lagoon\u306e\u512a\u308c\u305f\u70b9\u306f\u3001\u307e\u3063\u305f\u304f\u540c\u3058\u65b9\u6cd5\u3067\u51e6\u7406\u3067\u304d\u308b\u3053\u3068\u3067\u3059\u3002\u672c\u756a\u74b0\u5883\u30d6\u30e9\u30f3\u30c1\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u305f\u30d6\u30e9\u30f3\u30c1\u540d\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3068\u3001\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/first-deployment-of-drupal/#failure-dont-worry","title":"\u30c7\u30d7\u30ed\u30a4\u306e\u5931\u6557","text":"

          \u30c7\u30d7\u30ed\u30a4\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u304b\uff1f \u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u30d8\u30eb\u30d7\u3092\u7528\u610f\u3057\u3066\u3044\u307e\u3059:

          1. \u30a8\u30e9\u30fc\u901a\u77e5\u5185\u306e logs \u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30bb\u30b9\u3067\u3069\u3053\u3067\u5931\u6557\u3057\u305f\u304b\u304c\u308f\u304b\u308a\u307e\u3059\u3002
          2. \u554f\u984c\u304c\u89e3\u6c7a\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30b5\u30dd\u30fc\u30c8\u3044\u305f\u3057\u307e\u3059!
          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/","title":"Drupal\u3068Fastly\u306e\u7d71\u5408","text":""},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
          • Drupal 7\u4ee5\u964d
          • Fastly\u30b5\u30fc\u30d3\u30b9ID
          • \u30d1\u30fc\u30b8\u6a29\u9650\u3092\u6301\u3064Fastly API\u30c8\u30fc\u30af\u30f3
          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#drupal-7url","title":"Drupal 7\u3067\u306eURL\u30d9\u30fc\u30b9\u306e\u30d1\u30fc\u30b8","text":"
          1. Fastly Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
          2. Fastly\u30b5\u30fc\u30d3\u30b9ID\u3068API\u30c8\u30fc\u30af\u30f3\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
          3. \u5fc5\u8981\u306b\u5fdc\u3058\u3066Webhooks\u3092\u8a2d\u5b9a\u3057\u307e\u3059(\u4f8b\u3048\u3070\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30d1\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u305f\u3068\u304d\u306bSlack\u306b\u901a\u77e5\u3059\u308b\u306a\u3069)\u3002
          4. Drupal 7\u3067\u306fURL\u30d9\u30fc\u30b9\u306e\u30d1\u30fc\u30b8(\u7c21\u6613\u30d1\u30fc\u30b8)\u306e\u307f\u304c\u53ef\u80fd\u3067\u3059\u3002
          5. settings.php\u3067Drupal\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8IP\u3092\u5909\u66f4\u3057\u307e\u3059:
          Drupal 7\u306e\u305f\u3081\u306esettings.php\u306e\u5909\u66f4
          $conf['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP';\n
          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#drupal-10","title":"Drupal 10\u4ee5\u964d\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u30d1\u30fc\u30b8","text":"

          Composer\u3092\u4f7f\u3063\u3066\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u53d6\u5f97\u3057\u307e\u3059:

          Fastly Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u4f9d\u5b58\u95a2\u4fc2\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
          composer require drupal/fastly drupal/http_cache_control drupal/purge\n

          \u6b21\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u5316\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          • fastly
          • fastlypurger
          • http_cache_control (2.x)
          • purge
          • purge_ui (\u6280\u8853\u7684\u306b\u306f\u5fc5\u9808\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u672c\u756a\u74b0\u5883\u3067\u6709\u52b9\u306b\u3059\u308b\u3068\u975e\u5e38\u306b\u4fbf\u5229\u3067\u3059)
          • purge_processor_lateruntime
          • purge_processor_cron
          • purge_queuer_coretags
          • purge_drush (Drush\u3092\u4f7f\u3063\u305f\u30d1\u30fc\u30b8\u306b\u4fbf\u5229\u3067\u3059\u3002\u3053\u3061\u3089\u306b\u30b3\u30de\u30f3\u30c9\u306e\u30ea\u30b9\u30c8\u304c\u3042\u308a\u307e\u3059)
          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#drupalfastly_1","title":"Drupal\u3067Fastly\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3059","text":"

          Fastly\u30b5\u30fc\u30d3\u30b9ID\u3068API\u30c8\u30fc\u30af\u30f3\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30b5\u30a4\u30c8ID\u306f\u81ea\u52d5\u7684\u306b\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u5b9f\u884c\u6642\u74b0\u5883\u5909\u6570\u3092\u5229\u7528\u3059\u308b\u304b\u3001/admin/config/services/fastly\u306b\u3042\u308b\u8a2d\u5b9a\u30d5\u30a9\u30fc\u30e0\u3092\u7de8\u96c6\u3067\u304d\u307e\u3059:

          • FASTLY_API_TOKEN
          • FASTLY_API_SERVICE
          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_2","title":"\u30d1\u30fc\u30b8\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a","text":"
          • \u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u30cf\u30c3\u30b7\u30e5\u9577: 4\u6587\u5b57
          • \u30d1\u30fc\u30b8\u65b9\u5f0f: \u30bd\u30d5\u30c8\u30d1\u30fc\u30b8\u3092\u4f7f\u7528

          \u307b\u3068\u3093\u3069\u306e\u30b5\u30a4\u30c8\u3067\u306f4\u6587\u5b57\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3067\u5341\u5206\u3067\u3059\u304c\u3001\u6570\u767e\u4e07\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u6301\u3064\u30b5\u30a4\u30c8\u3067\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u306e\u885d\u7a81\u3092\u6e1b\u3089\u3059\u305f\u3081\u306b5\u6587\u5b57\u306e\u65b9\u304c\u826f\u3044\u3067\u3057\u3087\u3046\u3002

          \u6ce8\u610f:

          \u30bd\u30d5\u30c8\u30d1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002Fastly\u5185\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u53e4\u304f\u306a\u3063\u305f\u3068\u30de\u30fc\u30af\u3055\u308c\u3001\u5b8c\u5168\u306b\u524a\u9664\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u306a\u3044\u306e\u3067\u3001\u30aa\u30ea\u30b8\u30f3\u304c\u30c0\u30a6\u30f3\u3057\u3066\u3044\u308b\u5834\u5408\u306b\u3082\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059(\u53e4\u304f\u306a\u3063\u305f\u3082\u306e\u3092\u63d0\u4f9b\u3059\u308b\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408)

          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_3","title":"\u53e4\u3044\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a","text":"

          \u30b5\u30a4\u30c8\u306b\u9069\u3057\u305f\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6700\u5c0f1\u6642\u9593(3600)\u3001\u6700\u59271\u9031\u9593(604800)\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a2d\u5b9a\u304c\u4e00\u822c\u7684\u3067\u3059:

          1. \u518d\u691c\u8a3c\u6642\u306b\u30b9\u30c6\u30fc\u30eb - \u30aa\u30f3\u300114440\u79d2
          2. \u30a8\u30e9\u30fc\u6642\u306b\u30b9\u30c6\u30fc\u30eb - \u30aa\u30f3\u3001604800\u79d2

          \u5fc5\u8981\u306b\u5fdc\u3058\u3066Webhook\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059(\u305f\u3068\u3048\u3070\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30d1\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u305f\u3068\u304d\u306bSlack\u306b\u901a\u77e5\u3092\u9001\u308b\u306a\u3069)

          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#purge","title":"Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u8a2d\u5b9a","text":"

          \u30d1\u30fc\u30b8\u30da\u30fc\u30b8/admin/config/development/performance/purge\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002

          \u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u307e\u3059:

          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_4","title":"\u30ad\u30e3\u30c3\u30b7\u30e5\u7121\u52b9\u5316","text":"
          • Drupal Origin: \u30bf\u30b0
          • Fastly: E\u3001\u30bf\u30b0\u3001URL
          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_5","title":"\u30ad\u30e5\u30fc","text":"
          • \u30ad\u30e5\u30fc\u30ef\u30fc:\u30b3\u30a2\u30bf\u30b0\u30ad\u30e5\u30fc\u30ef\u30fc\u3001\u30d1\u30fc\u30b8\u30d6\u30ed\u30c3\u30af(\u8907\u6570\u53ef)
          • \u30ad\u30e5\u30fc:\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
          • \u30d7\u30ed\u30bb\u30c3\u30b5:\u30b3\u30a2\u30d7\u30ed\u30bb\u30c3\u30b5\u3001\u30ec\u30a4\u30c8\u30e9\u30f3\u30bf\u30a4\u30e0\u30d7\u30ed\u30bb\u30c3\u30b5\u3001\u30d1\u30fc\u30b8\u30d6\u30ed\u30c3\u30af(\u8907\u6570\u53ef)

          \u3053\u308c\u306f\u3001Drupal\u306e\u7d44\u307f\u8fbc\u307f\u306e\u30b3\u30a2\u30bf\u30b0\u30ad\u30e5\u30fc\u30ef\u30fc\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30e5\u30fc\u306b\u30bf\u30b0\u3092\u8ffd\u52a0\u3057\u3001\u30ad\u30e5\u30fc\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3055\u308c (\u30c7\u30d5\u30a9\u30eb\u30c8)\u3001\u4ee5\u4e0b\u306e\u30d7\u30ed\u30bb\u30c3\u30b5\u306b\u3088\u3063\u3066\u51e6\u7406\u3055\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

          • Cron\u30d7\u30ed\u30bb\u30c3\u30b5
          • \u30ec\u30a4\u30c8\u30e9\u30f3\u30bf\u30a4\u30e0\u30d7\u30ed\u30bb\u30c3\u30b5

          cron\u30d7\u30ed\u30bb\u30c3\u30b5\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u30b5\u30a4\u30c8\u3067cron\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 (\u7406\u60f3\u7684\u306b\u306f1\u5206\u3054\u3068)\u3002cli\u30dd\u30c3\u30c9\u3067cron\u3092\u624b\u52d5\u5b9f\u884c\u3057\u3066\u3001purge_processor_cron_cron()\u304c\u30a8\u30e9\u30fc\u306a\u304f\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          cron\u306e\u958b\u59cb
          [drupal8]production@cli-drupal:/app$ drush cron -v\n...\n[notice] purge_processor_cron_cron()\u306e\u5b9f\u884c\u3092\u958b\u59cb\u3001node_cron()\u306e\u5b9f\u884c\u306f21.16ms\u304b\u304b\u308a\u307e\u3057\u305f\u3002\n

          \u30ec\u30a4\u30a2\u30a6\u30c8\u30d1\u30fc\u30b8\u306f\u3001\u30da\u30fc\u30b8\u30ed\u30fc\u30c9\u3054\u3068\u306bhook_exit()\u3067\u5b9f\u884c\u3055\u308c\u308bLate runtime processor\u306b\u3088\u3063\u3066\u51e6\u7406\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d1\u30fc\u30b8\u8981\u6c42\u304c\u30ad\u30e5\u30fc\u306b\u8ffd\u52a0\u3055\u308c\u308b\u3068\u307b\u307c\u540c\u6642\u306b\u51e6\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u975e\u5e38\u306b\u4fbf\u5229\u3067\u3059\u3002

          \u4e21\u65b9\u306e\u65b9\u5f0f\u3092\u4f75\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30d1\u30fc\u30b8\u304c\u53ef\u80fd\u306a\u9650\u308a\u8fc5\u901f\u306b\u5b9f\u884c\u3055\u308c\u308b\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#_6","title":"\u6700\u9069\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u8a2d\u5b9a","text":"

          Drupal\u306f\u6a19\u6e96\u8a2d\u5b9a\u3067\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u3068Fastly\u3067\u7570\u306a\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u6709\u52b9\u671f\u9650\u3092\u8a2d\u5b9a\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001Drupal\u3067\u9577\u3044\u30ad\u30e3\u30c3\u30b7\u30e5\u6709\u52b9\u671f\u9650\u3092\u8a2d\u5b9a\u3057\u3066\u3082\u3001\u30d6\u30e9\u30a6\u30b6\u304c\u65e2\u306b\u30da\u30fc\u30b8\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u30e6\u30fc\u30b6\u30fc\u306f\u5909\u66f4\u3092\u78ba\u8a8d\u3067\u304d\u307e\u305b\u3093\u3002HTTP Cache Control\u30e2\u30b8\u30e5\u30fc\u30eb\u306e2.x\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3068\u3001\u3055\u307e\u3056\u307e\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u5bfe\u3057\u3066\u3001\u3088\u308a\u8a73\u7d30\u306a\u6709\u52b9\u671f\u9650\u8a2d\u5b9a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002

          \u307b\u3068\u3093\u3069\u306e\u30b5\u30a4\u30c8\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a2d\u5b9a\u304c\u59a5\u5f53\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002

          • \u5171\u6709\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 1\u30f6\u6708
          • \u30d6\u30e9\u30a6\u30b6\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 10\u5206
          • 404 \u30a8\u30e9\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 15\u5206
          • 302 \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 1\u6642\u9593
          • 301 \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: 1\u6642\u9593
          • 5xx \u30a8\u30e9\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u6700\u5927\u6709\u52b9\u671f\u9650: \u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u306a\u3044

          \u6ce8\u610f:

          \u3053\u306e\u8a2d\u5b9a\u306f\u3001\u30b5\u30a4\u30c8\u4e0a\u306e\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306b\u5bfe\u3057\u3066\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#ip","title":"\u5b9f\u969b\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8IP","text":"

          Fastly\u306f\u3001\u5b9f\u969b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092True-Client-IPHTTP\u30d8\u30c3\u30c0\u30fc\u3067\u8fd4\u9001\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002settings.php\u3067\u4ee5\u4e0b\u306e\u5909\u66f4\u3092\u884c\u3046\u3053\u3068\u3067\u3001Drupal\u304c\u3053\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u5c0a\u91cd\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

          Drupal < 8.7.0\u7528\u306esettings.php\u306e\u5909\u66f4
          $settings['reverse_proxy'] = TRUE;\n$settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP';\n

          \u3057\u304b\u3057\u3001Drupal 8.7.0\u3067\u306f\u3001\u3053\u306e\u6a5f\u80fd\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u30b9\u30cb\u30da\u30c3\u30c8\u3067\u540c\u69d8\u306e\u52d5\u4f5c\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002

          Drupal >= 8.7.0\u7528\u306esettings.php\u306e\u5909\u66f4
          /**\n * Drupal\u306bTrue-Client-IP HTTP\u30d8\u30c3\u30c0\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\n */\nif (isset($_SERVER['HTTP_TRUE_CLIENT_IP'])) {\n  $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_TRUE_CLIENT_IP'];\n}\n
          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#drush","title":"Drush\u7d71\u5408","text":"settings.php
           fastly:\n   fastly:purge:all (fpall)                                                    \u30b5\u30fc\u30d3\u30b9\u5168\u4f53\u3092\u30d1\u30fc\u30b8\n   fastly:purge:key (fpkey)                                                    \u30ad\u30fc\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d1\u30fc\u30b8\n   fastly:purge:url (fpurl)                                                    URL\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d1\u30fc\u30b8\n## cURL\u3092\u4f7f\u7528\u3057\u3066Fastly\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u3092\u8868\u793a\u3059\u308b\n\u4ee5\u4e0b\u306e\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044:(Linux\u3068Mac OSX\u3067\u52d5\u4f5c\u3057\u307e\u3059)\n```bash title=\"cURL function\"\nfunction curlf() { curl -sLIXGET -H 'Fastly-Debug:1' \"$@\" | grep -iE 'X-Cache|Cache-Control|Set-Cookie|X-Varnish|X-Hits|Vary|Fastly-Debug|X-Served|surrogate-control|surrogate-key' }\n
          Using cURL
          $ curlf https://www.example-site-fastly.com\ncache-control: max-age=601, public, s-maxage=2764800\nsurrogate-control: max-age=2764800, public, stale-while-revalidate=3600, stale-if-error=3600\nfastly-debug-path: (D cache-wlg10427-WLG 1612906144) (F cache-wlg10426-WLG 1612906141) (D cache-fra19179-FRA 1612906141) (F cache-fra19122-FRA 1612906141)\nfastly-debug-ttl: (H cache-wlg10427-WLG - - 3) (M cache-fra19179-FRA - - 0)\nfastly-debug-digest: 1118d9fefc8a514ca49d49cb6ece04649e1acf1663398212650bb462ba84c381\nx-served-by: cache-fra19179-FRA, cache-wlg10427-WLG\nx-cache: MISS, HIT\nx-cache-hits: 0, 1\nvary: Cookie, Accept-Encoding\n

          \u4e0a\u8a18\u306e\u30d8\u30c3\u30c0\u30fc\u304b\u3089\u3001\u4ee5\u4e0b\u306e\u60c5\u5831\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3059:

          • HTML\u30da\u30fc\u30b8\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u53ef\u80fd
          • \u30d6\u30e9\u30a6\u30b6\u306f\u30da\u30fc\u30b8\u3092601\u79d2\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u307e\u3059
          • Fastly\u306f\u30da\u30fc\u30b8\u309232\u65e5\u9593(2764800\u79d2)\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u307e\u3059
          • \u968e\u5c64\u578b\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u6709\u52b9(Wellington\u306e\u30a8\u30c3\u30b8PoP\u3001\u30d5\u30e9\u30f3\u30b9\u306e\u30b7\u30fc\u30eb\u30c9PoP)
          • HTML\u30da\u30fc\u30b8\u306f\u30a8\u30c3\u30b8PoP\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u3057\u307e\u3057\u305f
          "},{"location":"ja/applications/drupal/integrate-drupal-and-fastly/#fastly","title":"Fastly\u306b\u624b\u52d5\u3067\u30d1\u30fc\u30b8\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b","text":"

          \u7279\u5b9a\u306e\u30da\u30fc\u30b8\u3092\u624b\u52d5\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u524a\u9664\u3057\u305f\u3044\u5834\u5408\u3001\u3044\u304f\u3064\u304b\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002

          \u5358\u4e00\u306eURL\u3067Fastly\u3092\u30d1\u30fc\u30b8
          curl -Ssi -XPURGE -H 'Fastly-Soft-Purge:1' -H \"Fastly-Key:$FASTLY_API_TOKEN\" https://www.example.com/subpage\n

          \u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3092\u6307\u5b9a\u3057\u3066\u30d1\u30fc\u30b8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

          \u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3067Fastly\u3092\u30d1\u30fc\u30b8
          curl -XPOST -H 'Fastly-Soft-Purge:1' -H \"Fastly-Key:$FASTLY_API_TOKEN\" https://api.fastly.com/service/$FASTLY_API_SERVICE/purge/<surrogatekey>\n

          Fastly CLI\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u3088\u308a\u7c21\u5358\u306b\u30d1\u30fc\u30b8\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/","title":"PHPUnit\u3068PhpStorm","text":"

          \u6ce8\u610f:

          \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306f\u3001\u4ee5\u4e0b\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059:

          - Docker\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b

          - docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u6301\u3064\u6a19\u6e96\u7684\u306aAmazee/Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b

          - Mac\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b(\u4ed6\u306eOS\u3067\u3082\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3059\u304c\u3001\u30d5\u30a9\u30eb\u30c0\u69cb\u9020\u3084\u8a2d\u5b9a\u304c\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059)

          "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_1","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a","text":"
          1. /core/phpunit.xml.dist\u30d5\u30a1\u30a4\u30eb\u3092\u8907\u88fd\u3057\u3001/core/phpunit.xml\u3068\u3044\u3046\u540d\u524d\u3067\u4fdd\u5b58\u3057\u307e\u3059\u3002
          2. /core/phpunit.xml\u3092\u7de8\u96c6\u3057\u3001\u4ee5\u4e0b\u306e\u5909\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059:

            • SIMPLETEST_DB: mysql://drupal:drupal@mariadb:3306/drupal#db
            • SIMPLETEST_BASE_URL: <PROJECT_URL>
          "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#phpstorm","title":"PhpStorm\u306e\u8a2d\u5b9a","text":""},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#docker","title":"Docker\u306e\u8a2d\u5b9a","text":"
          1. PhpStorm\u3067\u3001\u30d5\u30a1\u30a4\u30eb > \u8a2d\u5b9a > \u30d3\u30eb\u30c9\u3001\u5b9f\u884c\u3001\u30c7\u30d7\u30ed\u30a4 > Docker\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002
          2. +\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
          3. Docker for Mac\u3092\u9078\u629e\u3057\u307e\u3059\u3002
          "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#cli","title":"CLI\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u306e\u8a2d\u5b9a","text":"

          \u65b0\u3057\u3044CLI\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u3092\u8ffd\u52a0:

          1. PhpStorm\u3067\u3001\u30d5\u30a1\u30a4\u30eb > \u8a2d\u5b9a > \u8a00\u8a9e & \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af > PHP\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002
          2. ...\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001 +\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
          3. \u6b21\u306b\u3001Docker\u3001vagrant\u306a\u3069\u304b\u3089\u65b0\u3057\u3044CLI\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u3092\u8ffd\u52a0\u3092\u9078\u629e\u3057\u307e\u3059\u3002
          4. \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059: * \u30b5\u30fc\u30d0\u30fc: <DOCKER> * \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb: ./docker-compose.yml * \u30b5\u30fc\u30d3\u30b9: cli * \u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb: \u65e2\u5b58\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a ('docker-compose exec')
          5. \u30d1\u30b9\u306e\u30de\u30c3\u30d4\u30f3\u30b0:
            • \u30ed\u30fc\u30ab\u30eb\u30d1\u30b9: <ROOT_PATH>
            • \u30ea\u30e2\u30fc\u30c8\u30d1\u30b9: /app

          "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_2","title":"\u30ea\u30e2\u30fc\u30c8\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u306e\u8a2d\u5b9a","text":"

          \u30ea\u30e2\u30fc\u30c8\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u306e\u8ffd\u52a0:

          1. PhpStorm\u3067\u3001\u30d5\u30a1\u30a4\u30eb > \u8a2d\u5b9a > \u8a00\u8a9e & \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af > PHP > \u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002
          2. +\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001PHPUnit by Remote Interpreter\u3092\u9078\u629e\u3057\u307e\u3059\u3002
          3. \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059:
            • CLI\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf: <CLI_INTERPRETER>
            • \u30d1\u30b9\u30de\u30c3\u30d4\u30f3\u30b0: <PROJECT_ROOT> -> /app
            • PHPUnit: Use Composer autoloader
            • \u30b9\u30af\u30ea\u30d7\u30c8\u3078\u306e\u30d1\u30b9: /app/vendor/autoload.php
            • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb: /app/web/core/phpunit.xml

          "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_3","title":"\u30e9\u30f3\u30ca\u30fc\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u8a2d\u5b9a/\u69cb\u6210","text":"
          1. \u30e9\u30f3\u30ca\u30fc\u306e\u8a2d\u5b9a:
            1. PhpStorm\u3067\u3001\u5b9f\u884c > \u8a2d\u5b9a\u306e\u7de8\u96c6... > \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 > PHPUnit\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002
            2. \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059:

              1. \u30c6\u30b9\u30c8\u30b9\u30b3\u30fc\u30d7: Defined in the configuration file

              2. \u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc: <CLI_INTERPRETER>

          \u6ce8\u610f:

          Mac\u4ee5\u5916\u306eOS\u3067\u306f\u624b\u9806\u304c\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_4","title":"\u6700\u7d42\u30c1\u30a7\u30c3\u30af","text":""},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_5","title":"\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u524d\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u78ba\u8a8d\u304c\u5fc5\u8981\u3067\u3059\u3002","text":"
          1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u8d77\u52d5\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059:$ docker-compose up -d
          2. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u30a8\u30e9\u30fc\u306a\u304f\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059 (\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3001\u3059\u3079\u3066\u60f3\u5b9a\u901a\u308a\u306b\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044)\u3002\u5fc5\u305a\u3057\u3082\u5fc5\u8981\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304f\u3068\u5b89\u5fc3\u3067\u3059\u3002
          3. \u3053\u308c\u3067\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\uff01
          "},{"location":"ja/applications/drupal/phpunit-and-phpstorm/#_6","title":"\u5b9f\u884c\u6e96\u5099\u5b8c\u4e86","text":"

          \u4e0a\u8a18\u306e\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u3066\u3044\u308c\u3070\u3001\u5b9f\u884c\u3057\u305f\u3044\u30c6\u30b9\u30c8\u306b\u79fb\u52d5\u3057\u3001\u7dd1\u8272\u306e\u77e2\u5370\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3060\u3051\u3067\u7c21\u5358\u306b\u5b9f\u884c\u3067\u304d\u307e\u3059\uff01

          PhpStorm\u306f\u3001Docker\u3092\u4f7f\u7528\u3057\u3066CLI\u30b3\u30f3\u30c6\u30ca\u306b\u5165\u308a\u3001\u8a2d\u5b9a\u306b\u57fa\u3065\u3044\u3066PHPUnit\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/","title":"\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7:Drupal\u3092Lagoon\u3067\u5b9f\u884c\u3059\u308b\u6e96\u5099","text":""},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#1-lagoon-drupal-setting-files","title":"1. Lagoon Drupal \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

          Drupal\u304cLagoon\u3068\u9023\u643a\u3059\u308b\u305f\u3081\u306b\u306f\u3001Drupal\u306bLagoon\u306e\u3053\u3068\u3092\u3001Lagoon\u306bDrupal\u306e\u3053\u3068\u3092\u6559\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u7279\u5b9a\u306eYAML\u3068PHP\u30d5\u30a1\u30a4\u30eb\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002

          Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u308b\u5834\u5408\u306f\u3001\u79c1\u305f\u3061\u306e\u4f8b\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3042\u308b\u69d8\u3005\u306aDrupal\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u3066 Drupal 8\u3001Drupal 9 \u3060\u3051\u3067\u306a\u304f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u7a2e\u985e\u306a\u3069\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u3082\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u958b\u59cb\u3059\u308b\u306b\u306f\u3001\u81ea\u5206\u306e\u30cb\u30fc\u30ba\u306b\u5408\u3063\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\uff01

          \u4ee5\u4e0b\u306f\u3001Lagoon\u3068Drupal\u306b\u7279\u5316\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u6982\u8981\u3067\u3059\uff1a

          • .lagoon.yml - Lagoon\u304c\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3059\u308b\u5185\u5bb9\u306a\u3069\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306e\u30e1\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002Drupal\u5411\u3051\u306e\u9069\u5207\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7de8\u96c6\u3084\u5909\u66f4\u3092\u884c\u3046\u5834\u5408\u306f\u3001.lagoon.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          • docker-compose.yml\u3001.dockerignore\u3001\u304a\u3088\u3073 *.dockerfile (\u307e\u305f\u306f Dockerfile) - \u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30fc\u30ab\u30eb\u306eDrupal\u958b\u767a\u74b0\u5883\u306e\u5b9f\u884c\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001Docker\u306b\u5bfe\u3057\u3066\u8d77\u52d5\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u7a2e\u985e\u3084\u30d3\u30eb\u30c9\u65b9\u6cd5\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u9069\u5207\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3068\u3001\u591a\u304f\u306e\u30b3\u30e1\u30f3\u30c8\u884c\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u5185\u5bb9\u304c\u8aad\u307f\u53d6\u308c\u308b\u3088\u3046\u5341\u5206\u306a\u30b3\u30e1\u30f3\u30c8\u304c\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002
          • sites/default/* - .php\u3068.yml\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001Drupal\u304c\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u306e\u4e21\u65b9\u3067Lagoon\u30b3\u30f3\u30c6\u30ca\u3068\u901a\u4fe1\u3059\u308b\u65b9\u6cd5\u3092Drupal\u306b\u6307\u793a\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u958b\u767a\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u3067\u7279\u5b9a\u306e\u8a2d\u5b9a\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9 (\u4e0a\u66f8\u304d) \u3059\u308b\u305f\u3081\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u4ed5\u7d44\u307f\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002\u4ed6\u306eDrupal\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3068\u306f\u7570\u306a\u308a\u3001Lagoon\u306fDrupal\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u4e00\u5207\u5e72\u6e09\u3057\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u7531\u306b\u7de8\u96c6\u3067\u304d\u307e\u3059\u3002\u4ed6\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u540c\u69d8\u306b\u3001\u9069\u5207\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3068\u3001\u4e00\u90e8\u30b3\u30e1\u30f3\u30c8\u4ed8\u304d\u306e\u90e8\u5206\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
          • drush/aliases.drushrc.php - Drush\u72ec\u81ea\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3001Drush\u304cLagoon\u306eGraphQL API\u3092\u4f7f\u3063\u3066\u30b5\u30a4\u30c8\u30a8\u30a4\u30ea\u30a2\u30b9 (\u30b5\u30a4\u30c8\u306e\u5225\u540d) \u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u3092Drush\u306b\u6307\u793a\u3057\u307e\u3059\u3002
          • drush/drushrc.php - Drush\u30b3\u30de\u30f3\u30c9\u7528\u306e\u9069\u5207\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#update-your-gitignore-settings","title":".gitignore\u8a2d\u5b9a\u306e\u66f4\u65b0","text":"

          \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30df\u30c3\u30c8\u3067\u304d\u308b\u3088\u3046\u306b\u3001.gitignore\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          Drupal\u306fsites/*/settings*.php\u3068sites/*/services*.yml\u3092.gitignore\u3067\u30b3\u30df\u30c3\u30c8\u304b\u3089\u9664\u5916\u3059\u308b\u3088\u3046\u306b\u521d\u671f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002Lagoon \u74b0\u5883\u3067\u306f\u6a5f\u5bc6\u60c5\u5831\u306f Git \u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u306a\u3044\u306e\u3067\u3001\u3053\u306e\u9664\u5916\u8a2d\u5b9a\u3092\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#note-about-webroot-in-drupal-8","title":"Drupal 8\u306eWEBROOT\u306b\u95a2\u3059\u308b\u6ce8\u610f\u4e8b\u9805","text":"

          \u6b8b\u5ff5\u306a\u304c\u3089\u3001Drupal\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u306fWEBROOT\u30d5\u30a9\u30eb\u30c0\u540d\u306e\u6a19\u6e96\u5316\u304c\u307e\u3060\u6c7a\u307e\u3063\u3066\u3044\u307e\u305b\u3093\u3002Drupal\u3092web\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u914d\u7f6e\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3082\u3042\u308c\u3070\u3001docroot\u3084\u5225\u306e\u5834\u6240\u306b\u5165\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3082\u3042\u308a\u307e\u3059\u3002Lagoon\u306eDrupal\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u3001Drupal\u304cweb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u914d\u7f6e\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u3082\u3057\u3042\u306a\u305f\u306eDrupal\u306e\u69cb\u6210\u304c\u7570\u306a\u308b\u5834\u5408\u306f\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u305d\u308c\u306b\u5408\u308f\u305b\u3066\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#note-about-composerjson","title":"composer.json\u306b\u95a2\u3059\u308b\u6ce8\u610f\u4e8b\u9805","text":"

          Composer \u3092\u4f7f\u3063\u3066 Drupal \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u5834\u5408\u3001composer.json\u3092\u78ba\u8a8d\u3057\u3001name\u304cdrupal/drupal\u3067\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u540d\u524d\u306f Drush \u3084\u305d\u306e\u4ed6\u306e Drupal \u95a2\u9023\u30c4\u30fc\u30eb\u3068\u7af6\u5408\u3057\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001myproject/drupal\u306a\u3069\u3001\u5225\u306e\u540d\u524d\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#2-customize-docker-composeyml","title":"2. docker-compose.yml\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba","text":"

          lagoon-project\u3068LAGOON_ROUTE\u306e\u5024\u3092\u5fd8\u308c\u305a\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3001\u30b5\u30a4\u30c8\u540d\u3068\u30a2\u30af\u30bb\u30b9\u3057\u305f\u3044URL\u306b\u66f8\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4ee5\u4e0b\u306b\u4f8b\u3092\u793a\u3057\u307e\u3059:

          docker-compose.yml
          x-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# Route that should be used locally. If you are using pygmy, this route *must* end with .docker.amazee.io.\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n
          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#3-build-images","title":"3. \u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9","text":"

          \u307e\u305a\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          \u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9
          docker-compose build\n

          \u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001docker-compose.yml\u5185\u3067build:\u306e\u5b9a\u7fa9\u304c\u3042\u308b\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u3088\u3046\u306bdocker-compose\u306b\u6307\u793a\u3057\u307e\u3059\u3002\u901a\u5e38\u3001Drupal\u3067\u306fcli\u3001nginx\u3001php\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u8a72\u5f53\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u7279\u5b9a\u306e\u30d3\u30eb\u30c9\u30b3\u30de\u30f3\u30c9(composer install\u306a\u3069)\u3092\u5b9f\u884c\u3057\u305f\u308a\u3001\u7279\u5b9a\u306e\u74b0\u5883\u5909\u6570(WEBROOT\u306a\u3069)\u3092\u30a4\u30e1\u30fc\u30b8\u306b\u6ce8\u5165\u3059\u308b\u305f\u3081\u3067\u3059\u3002

          \u901a\u5e38\u3001Drupal \u30b3\u30fc\u30c9\u3092\u7de8\u96c6\u3059\u308b\u305f\u3073\u306b\u30d3\u30eb\u30c9\u3092\u884c\u3046\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093 (\u30b3\u30fc\u30c9\u306f\u30db\u30b9\u30c8\u304b\u3089\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u308b\u305f\u3081)\u3002\u3068\u306f\u3044\u3048\u3001\u30d3\u30eb\u30c9\u3092\u3057\u3066\u3082\u4f55\u3089\u304b\u306e\u554f\u984c\u304c\u751f\u3058\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3055\u3089\u306b\u3001Lagoon \u306f\u30c7\u30d7\u30ed\u30a4\u4e2d\u306b\u307e\u3063\u305f\u304f\u540c\u3058 Docker \u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u306e\u3067\u3001docker-compose build\u30b3\u30de\u30f3\u30c9\u3092\u3082\u3046\u4e00\u5ea6\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30d7\u30ed\u30a4\u6642\u306b\u3082\u30d3\u30eb\u30c9\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#4-start-containers","title":"4. \u30b3\u30f3\u30c6\u30ca\u306e\u8d77\u52d5","text":"

          \u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u305f\u306e\u3067\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3067\u304d\u307e\u3059:

          \u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5
          docker-compose up -d\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002\u30b3\u30de\u30f3\u30c9\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u3001docker-compose ps\u3067\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u5b8c\u5168\u306b\u7acb\u3061\u4e0a\u304c\u3063\u3066\u3044\u308b\u304b\u3001\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u3066\u3044\u306a\u3044\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u554f\u984c\u304c\u3042\u308b\u5834\u5408\u306f\u3001docker-compose logs -f [servicename]\u3067\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#5-rerun-composer-install","title":"5. composer install\u3092\u518d\u5b9f\u884c\u3057\u307e\u3059\uff08composer\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u307f\uff09","text":"

          \u30ed\u30fc\u30ab\u30eb\u306e\u958b\u767a\u74b0\u5883\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u3044\u3068\u601d\u3046\u3067\u3057\u3087\u3046\u3002\u305d\u306e\u305f\u3081\u3001cli\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u3066composer install\u3092\u5b9f\u884c\u3057\u307e\u3059:

          CLI\u3067composer install\u3092\u5b9f\u884c
          docker-compose exec cli bash\ncomposer install\n

          \u5c11\u3057\u5947\u5999\u306b\u611f\u3058\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u30d3\u30eb\u30c9\u624b\u9806\u3067\u3059\u3067\u306bcomposer install\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u8aac\u660e\u3092\u52a0\u3048\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3059:

          • \u30db\u30b9\u30c8\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3066\u3001\u3059\u3050\u306b\u30b3\u30f3\u30c6\u30ca\u3067\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306edocker-composer.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u3059\u3079\u3066\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u30b3\u30f3\u30c6\u30ca\u5185\u306b\u30de\u30a6\u30f3\u30c8\u3057\u3066\u3044\u307e\u3059 (\u30dc\u30ea\u30e5\u30fc\u30e0\u30bb\u30af\u30b7\u30e7\u30f3\u306e.:/app:delegated\u304c\u3053\u308c\u306b\u8a72\u5f53\u3057\u307e\u3059)\u3002\u3064\u307e\u308a\u3001Docker\u30d3\u30eb\u30c9\u6642\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u306f\u3001\u30db\u30b9\u30c8\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002
          • \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306b\u304a\u3044\u3066\u306f\u3001composer.json\u3067require-dev\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u3082\u5b58\u5728\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308b\u3067\u3057\u3087\u3046\u3002\u4e00\u65b9\u3001\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u305d\u3046\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u306f\u305f\u3060\u7121\u99c4\u306a\u5bb9\u91cf\u3092\u6d88\u8cbb\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u3001Dockerfile\u5185\u3067\u306f composer install --no-dev\u3092\u5b9f\u884c\u3057\u3001\u624b\u52d5\u3067composer install\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

          \u3059\u3079\u3066\u554f\u984c\u306a\u304f\u52d5\u4f5c\u3057\u3066\u3044\u308b\u5834\u5408\u3001docker-compose.yml (\u4f8b\u3048\u3070 http://drupal.docker.amazee.io)\u3067\u5b9a\u7fa9\u3055\u308c\u305fLAGOON_ROUTE\u3092\u958b\u304f\u3068\u3001Drupal\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u4eca\u306e\u6bb5\u968e\u3067\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u91cd\u8981\u306a\u306e\u306f\u3001Drupal\u30b5\u30a4\u30c8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u3002

          500\u30a8\u30e9\u30fc\u3084\u540c\u69d8\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001Composer\u306b\u3088\u3063\u3066\u3059\u3079\u3066\u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#6-check-status-and-install-drupal","title":"6. \u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u78ba\u8a8d\u3068Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

          \u3044\u3088\u3044\u3088Drupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u304c\u3001\u305d\u306e\u524d\u306b\u3059\u3079\u3066\u304c\u6a5f\u80fd\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u306bDrush\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059:

          Drush status
          docker-compose exec cli bash\ndrush status\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7d50\u679c\u304c\u8fd4\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

          Drush status result
          [drupal-example]cli-drupal:/app$ drush status\n[notice] Missing database table: key_value\nDrupal version       :  8.6.1\nSite URI             :  http://drupal.docker.amazee.io\nDatabase driver      :  mysql\nDatabase hostname    :  mariadb\nDatabase port        :  3306\nDatabase username    :  drupal\nDatabase name        :  drupal\nPHP binary           :  /usr/local/bin/php\nPHP config           :  /usr/local/etc/php/php.ini\nPHP OS               :  Linux\nDrush script         :  /app/vendor/drush/drush/drush\nDrush version        :  9.4.0\nDrush temp           :  /tmp\nDrush configs        :  /home/.dr ush/drush.yml\n                        /app/vendor/drush/drush/drush.yml\nDrupal root          :  /app/web\nSite path            :  sites/default\n

          \u8b66\u544a

          \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u524d\u306b\u3001pygmy\u306b\u516c\u958b\u9375\u306b\u3064\u3044\u3066\u4f1d\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          Permission denied (publickey)\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u304c\u51fa\u305f\u5834\u5408\u306f\u3001\u3053\u3061\u3089\u304b\u3089SSH\u30ad\u30fc\u306e\u8ffd\u52a0\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044: pygmy - ssh\u30ad\u30fc\u306e\u8ffd\u52a0

          \u6b21\u306bDrupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059(\u65e2\u5b58\u306eSQL\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u30b9\u30c6\u30c3\u30d77\u3078\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305f\u3060\u3057\u3001\u3059\u3079\u3066\u304c\u6a5f\u80fd\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\u306b\u3001\u6700\u521d\u304b\u3089\u30af\u30ea\u30fc\u30f3\u306aDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002))\u3002

          Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
          drush site-install\n

          \u4ee5\u4e0b\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

          drush site-install
          [drupal-example]cli-drupal:/app$ drush site-install\nYou are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y\nStarting Drupal installation. This takes a while. Consider using the --notify global option.\nInstallation complete.  User name: admin  User password: a7kZJekcqh\nCongratulations, you installed Drupal!\n

          LAGOON_ROUTE\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308bURL\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001\u65b0\u3057\u304f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fDrupal\u30b5\u30a4\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\uff01

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#7-import-existing-database-dump","title":"7. \u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b","text":"

          \u65e2\u306b\u65e2\u5b58\u306eDrupal\u30b5\u30a4\u30c8\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30ed\u30fc\u30ab\u30eb\u30b5\u30a4\u30c8\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u3068\u601d\u3046\u3067\u3057\u3087\u3046\u3002

          \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u306f\u591a\u6570\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u306e\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306bDrush\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059:

          Drush sql-dump
          drush sql-dump --result-file=dump.sql\n\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u306fdump.sql\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\n

          \u3053\u308c\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5168\u4f53\u3092\u542b\u3080dump.sql\u30d5\u30a1\u30a4\u30eb\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002

          \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u3001cli\u306b\u63a5\u7d9a\u3059\u308b\u3068\u3001\u305d\u306e\u4e2d\u306b\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

          dump.sql\u306e\u8868\u793a
          [drupal-example]cli-drupal:/app$ ls -l dump.sql\n-rw-r--r--    1 root     root          5281 Dec 19 12:46 dump.sql\n

          \u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u524a\u9664\u3057\u3001\u30c0\u30f3\u30d7\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u304d\u307e\u3059\u3002

          dump.sql\u306e\u30a4\u30f3\u30dd\u30fc\u30c8
          drush sql-drop\n\ndrush sql-cli < dump.sql\n

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3001\u3059\u3079\u3066\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3067\u3001Drupal\u30b5\u30a4\u30c8\u304c\u6b63\u5e38\u306b\u6a5f\u80fd\u3057\u3066\u3044\u308b\u306f\u305a\u3067\u3059\uff01

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#8-drupal-files-directory","title":"8. Drupal\u30d5\u30a1\u30a4\u30eb \u30c7\u30a3\u30ec\u30af\u30c8\u30ea","text":"

          Drupal\u30b5\u30a4\u30c8\u306b\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3082\u5fc5\u8981\u3067\u3059\u3002\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u5168\u4f53\u306fDocker\u30b3\u30f3\u30c6\u30ca\u5185\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u308b\u305f\u3081\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u6b63\u3057\u3044\u30d5\u30a9\u30eb\u30c0\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044 (\u304a\u305d\u3089\u304fweb/sites/default/files\u3001sites/default/files\u307e\u305f\u306f\u540c\u69d8\u306e\u30d5\u30a9\u30eb\u30c0\u3067\u3059)\u3002\u8a2d\u5b9a\u3057\u305fWEBROOT\u3092\u899a\u3048\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044 - \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3054\u3068\u306b\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093

          "},{"location":"ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/#done","title":"9. \u5b8c\u4e86","text":"

          \u30ed\u30fc\u30ab\u30eb\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002Lagoon \u30c1\u30fc\u30e0\u306f\u3001\u7686\u69d8\u306e\u697d\u3057\u3044 Drupaling \u3092\u5fdc\u63f4\u3057\u3066\u3044\u307e\u3059\uff01

          "},{"location":"ja/applications/drupal/subfolders/","title":"\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0","text":"

          \u4f8b\u3048\u3070\u3001www.example.com\u306f\u3042\u308bDrupal\u30b5\u30a4\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3057\u3001www.example.com/blog\u306f\u5225\u306eDrupal\u3067\u69cb\u7bc9\u3055\u308c\u305f\u30d6\u30ed\u30b0\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002

          \u3053\u306e\u5834\u5408\u3001\u4e21\u65b9\u306eDrupal\u3092\u5358\u4e00\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u7ba1\u7406\u3057\u3001\u307e\u3068\u3081\u3066\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u5168\u3066\u306e\u30c1\u30fc\u30e0\u306b\u9069\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u306a\u304f\u3001\u72b6\u6cc1\u306b\u3088\u3063\u3066\u306f\u5225\u3005\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f7f\u7528\u3057\u305f\u65b9\u304c\u826f\u3044\u5834\u5408\u3082\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/subfolders/#_2","title":"\u30eb\u30fc\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5909\u66f4","text":"

          \u30eb\u30fc\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(\u3053\u306e\u4f8b\u3067\u306fwww.example.com\u306eDrupal\u30b5\u30a4\u30c8)\u306f\u3001NGINX\u3092\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3078\u306e\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306eNGINX\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u3044\u304f\u3064\u304b\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059:

          "},{"location":"ja/applications/drupal/subfolders/#location_prependconf","title":"location_prepend.conf","text":"

          Drupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30eb\u30fc\u30c8\u306blocation_prepend.conf\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059:

          location_prepend.conf
          resolver 8.8.8.8 valid=30s;\n\nlocation ~ ^/subfolder {\n  # $http_x_forwarded_proto\u304c\u7a7a\u306e\u5834\u5408 (\u4e0a\u6d41\u306e\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u304b\u3089\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408)\n  # \u73fe\u5728\u306e\u30b9\u30ad\u30fc\u30e0\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\n  set_if_empty $http_x_forwarded_proto $scheme;\n\n  proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;\n  proxy_set_header      X-Forwarded-Proto $scheme;\n  proxy_set_header      X-Forwarded-Proto $http_x_forwarded_proto;\n  proxy_set_header      X-Lagoon-Forwarded-Host $ \u30db\u30b9\u30c8;\n  # \u5143\u306e\u30db\u30b9\u30c8\u3092\u4e0b\u6d41\u304c\u77e5\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n  proxy_set_header      X-REVERSEPROXY $hostname;\n  proxy_set_header      FORWARDED \"\";\n  # Drupal 8\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u305f\u3081\u3001FORWARDED\u30d8\u30c3\u30c0\u30fc\u3092\u524a\u9664\u3057\u307e\u3059\u3002\n  proxy_set_header      Proxy \"\";\n  # Drupal 8\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u305f\u3081\u3001Proxy\u30d8\u30c3\u30c0\u30fc\u3092\u524a\u9664\u3057\u307e\u3059\u3002\n  proxy_ssl_server_name on;\n\n  # NGINX\u3067DNS\u89e3\u6c7a\u3092\u6b63\u3057\u304f\u52d5\u4f5c\u3055\u305b\u308b\u306b\u306f\u3001\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n  set                   $subfolder_drupal_host \"https://nginx-lagoonproject-${LAGOON_GIT_SAFE_BRANCH}.clustername.com:443\";\n  # LAGOON_GIT_SAFE_BRANCH\u5909\u6570\u306fdocker\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u6642\u306b\u7f6e\u63db\u3055\u308c\u307e\u3059\u3002\n  proxy_pass            $subfolder_drupal_host;\n  proxy_set_header      Host $proxy_host;\n  # $proxy_host\u306f\u3001NGINX\u304cproxy_pass\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6(\u30b9\u30ad\u30fc\u30e0\u3068\u30dd\u30fc\u30c8\u3092\u9664\u304f\u30db\u30b9\u30c8\u540d)\u3092\u5143\u306b\u81ea\u52d5\u751f\u6210\u3055\u308c\u307e\u3059\u3002\n\n  expires off; # \u30d7\u30ed\u30ad\u30b7\u304b\u3089\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u3092\u5c0a\u91cd\u3057\u3001\u4e0a\u66f8\u304d\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\n

          \u4ee5\u4e0b\u306e\u6587\u5b57\u5217\u3092\u7f6e\u63db\u3057\u3066\u304f\u3060\u3055\u3044:

          • /subfolder\uff1a\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u4f8b\u3048\u3070\u3001/blog\u3002
          • nginx\uff1a\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u53c2\u7167\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          • lagoonproject\uff1a\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eLagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          "},{"location":"ja/applications/drupal/subfolders/#n-ginx-dockerfile","title":"N GINX Dockerfile","text":"

          \u4ee5\u4e0b\u306e\u5185\u5bb9\u3092NGINX Dockerfile(nginx.dockerfile\u307e\u305f\u306fDockerfile.nginx)\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044:

          nginx.dockerfile
          COPY location_prepend.conf /etc/nginx/conf.d/drupal/location_prepend.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/*\n
          "},{"location":"ja/applications/drupal/subfolders/#_3","title":"\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5909\u66f4","text":"

          \u30eb\u30fc\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u540c\u69d8\u306b\u3001\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(\u3053\u306e\u4f8b\u3067\u306f\u3001www.example.com/blog\u306eDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb)\u306b\u5bfe\u3057\u3066\u3082\u3001\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e2\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059:

          "},{"location":"ja/applications/drupal/subfolders/#location_drupal_append_subfolderconf","title":"location_drupal_append_subfolder.conf","text":"

          \u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3001location_drupal_append_subfolder.conf\u3068\u3044\u3046\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059:

          location_drupal_append_subfolder.conf
          # Drupal\u306f\u3001`subfolder`\u3067\u59cb\u307e\u308b\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u304c\u4ed8\u3044\u305f\u30b9\u30af\u30ea\u30d7\u30c8\u540d\u3092\u6ce8\u5165\u3059\u308b\u3068\u3001\n# \u3059\u3079\u3066\u306eURL\u306b`subfolder`\u3092\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3068\u3057\u3066\u4ed8\u52a0\u3057\u3066\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002\nfastcgi_param  SCRIPT_NAME        /subfolder/index.php;\n\n# \u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u7d4c\u7531\u3067\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u30aa\u30ea\u30b8\u30ca\u30eb\u306eHOST URL\u3092\n# PHP\u306b\u6ce8\u5165\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Drupal\u306f\u73fe\u5728\u306eHOST\u3067\u306f\u306a\u304f\u3001\n# \u30aa\u30ea\u30b8\u30ca\u30eb\u306eHOST URL\u3092\u7528\u3044\u3066\u3059\u3079\u3066\u306e URL \u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002\n\n# \u6700\u521d\u306b\u3001HOST\u3092\u901a\u5e38\u306e\u30db\u30b9\u30c8\u5909\u6570\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\nfastcgi_param  HTTP_HOST          $http\n``` _host;\n# \u305d\u308c\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u3001`X-Lagoon-Forwarded-Host`\u3067\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002\nfastcgi_param  HTTP_HOST          $http_x_lagoon_forwarded_host if_not_empty;\n

          \u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u540d\u3067 /subfolder\u3092\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001/blog\u306e\u3088\u3046\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/subfolders/#server_prepend_subfolderconf","title":"server_prepend_subfolder.conf","text":"

          \u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u3067\u306eDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3001server_prepend_subfolder.conf\u3068\u3044\u3046\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044:

          server_prepend_subfolder.conf
          # \u5185\u90e8NGINX\u30ea\u30e9\u30a4\u30c8\u306f`last`\u30d5\u30e9\u30b0\u3092\u4f7f\u3046\u305f\u3081\u3001\n# \u30ea\u30e9\u30a4\u30c8\u306e\u524d\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u6709\u7121\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\n# `last`\u30d5\u30d5\u30e9\u30b0\u306fNGINX\u306b\u5bfe\u3057\u3066\u3001\u3053\u308c\u4ee5\u964d\u306e\u30ea\u30e9\u30a4\u30c8\u51e6\u7406\u3092\u884c\u308f\u306a\u3044\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\n# (\u307e\u305f\u3001`if`\u306f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u4e00\u90e8\u3067\u3059\u3002)\ninclude /etc/nginx/helpers/010_redirects.conf;\n\n# \u3053\u306e\u30ea\u30e9\u30a4\u30c8\u306f\u30ea\u30af\u30a8\u30b9\u30c8URL\u304b\u3089`/subfolder/`\u3092\u524a\u9664\u3057\u3001\n# \u3042\u305f\u304b\u3082\u6700\u521d\u304b\u3089`/`\u3067\u3042\u3063\u305f\u304b\u306e\u3088\u3046\u306bNGINX\u304c\n# \u51e6\u7406\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\n# `last`\u30d5\u30e9\u30b0\u3082\u91cd\u8981\u3067\u3059\u3002\n# \u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u30ea\u30e9\u30a4\u30c8\u304c\u6c38\u7d9a\u7684\u306b\u7e70\u308a\u8fd4\u3055\u308c\u308b\u306e\u3092\u9632\u304e\u307e\u3059\u3002\nrewrite ^/subfolder/(.*)          /$1             last;\n\n# NGINX\u306b\u3088\u3063\u3066\u73fe\u5728\u51e6\u7406\u3055\u308c\u3066\u3044\u308b\u30db\u30b9\u30c8\u60c5\u5831\u304c\u4e0a\u66f8\u304d\u3055\u308c\u306a\u3044\u3088\u3046\u3001\n# \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u7d76\u5bfe\u30d1\u30b9\u3092\u4f7f\u7528\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002\nabsolute_redirect off;\n\n# `/subfolder`\u3060\u3051\u304c\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u5834\u5408\u3001301\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3067\n# `/subfolder`(Drupal\u306f\u672b\u5c3e\u306e\u30b9\u30e9\u30c3\u30b7\u30e5\u3092\u597d\u307f\u307e\u3059)\u306b\u8ee2\u9001\u3057\u307e\u3059\u3002\nrewrite ^/subfolder               /subfolder/     permanent;\n\n# \u305d\u306e\u4ed6\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u306f\u3001301\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u30d1\u30b9\u306b`/subfolder/`\u3092\u5148\u982d\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\nrewrite ^\\/(.*)                   /subfolder/$1   permanent;\n

          /subfolder\u306f\u3001\u4f7f\u7528\u3059\u308b\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u540d\u524d\u3068\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001\u30d6\u30ed\u30b0\u7528\u306e\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u3067\u3042\u308c\u3070 /blog\u3068\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/subfolders/#nginx-dockerfile","title":"NGINX Dockerfile","text":"

          NGINX Dockerfile\u3082\u7de8\u96c6\u304c\u5fc5\u8981\u3067\u3059\u3002

          NGINX Dockerfile(\u901a\u5e38\u306fnginx.dockerfile \u307e\u305f\u306f Dockerfile.nginx)\u306b\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044:

          nginx.dockerfile
          COPY location_drupal_append_subfolder.conf /etc/nginx/conf.d/drupal/location_drupal_append_subfolder.conf\nCOPY server_prepend_subfolder.conf /etc/nginx/conf.d/drupal/server_prepend_subfolder.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/*\n
          "},{"location":"ja/applications/drupal/services/","title":"\u6982\u8981","text":""},{"location":"ja/applications/drupal/services/#mariadbmysql","title":"MariaDB\u306f\u3001\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eMySQL\u306e\u5f8c\u7d99\u8005\u3067\u3059","text":"

          Drupal\u3068MariaDB\u306b\u3064\u3044\u3066\u5b66\u3076

          \u6a19\u6e96\u7684\u306aMariaDB\u30a4\u30e1\u30fc\u30b8\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3(\u3053\u306eMariaDB-Drupal\u30a4\u30e1\u30fc\u30b8\u306f\u3053\u308c\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059)

          "},{"location":"ja/applications/drupal/services/#redis","title":"Redis\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u30d6\u30ed\u30fc\u30ab\u30fc\u3001\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u3001\u9ad8\u901f\u3067\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a4\u30f3\u30e1\u30e2\u30ea\u30fb\u30ad\u30fc\u30d0\u30ea\u30e5\u30fc\u30fb\u30c7\u30fc\u30bf\u30b9\u30c8\u30a2\u3067\u3059","text":"

          Drupal\u3068Redis\u306b\u3064\u3044\u3066\u5b66\u3076

          Redis-persistent\u30a4\u30e1\u30fc\u30b8\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3

          "},{"location":"ja/applications/drupal/services/#solr","title":"Solr\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059","text":"

          Drupal\u3068Solr\u306b\u3064\u3044\u3066\u5b66\u3076

          \u6a19\u6e96\u7684\u306aSolr\u30a4\u30e1\u30fc\u30b8\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 (\u3053\u306eSolr-Drupal\u30a4\u30e1\u30fc\u30b8\u306f\u3053\u308c\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059)

          "},{"location":"ja/applications/drupal/services/#varnishhttphttp","title":"Varnish\u306f\u3001\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306e\u5f37\u529b\u306a\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eHTTP\u30a8\u30f3\u30b8\u30f3\u304a\u3088\u3073\u30ea\u30d0\u30fc\u30b9HTTP\u30d7\u30ed\u30ad\u30b7\u3067\u3059","text":"

          Drupal\u3068Varnish\u306b\u3064\u3044\u3066\u5b66\u3076

          \u6a19\u6e96\u7684\u306aVarnish\u30a4\u30e1\u30fc\u30b8\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 (\u3053\u306eVarnish-Drupal\u30a4\u30e1\u30fc\u30b8\u306f\u3053\u308c\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059)

          "},{"location":"ja/applications/drupal/services/mariadb/","title":"MariaDB","text":"

          Lagoon\u306e mariadb-drupal Docker\u30a4\u30e1\u30fc\u30b8 Dockerfile \u306f\u3001Lagoon\u306eDrupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f mariadb \u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002 mariadb \u30a4\u30e1\u30fc\u30b8\u3068\u7570\u306a\u308b\u306e\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u74b0\u5883\u5909\u6570\u306b\u3088\u3063\u3066\u884c\u308f\u308c\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u521d\u671f\u8a2d\u5b9a\u3060\u3051\u3067\u3059:

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e MARIADB_DATABASE drupal \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308bDrupal\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 MARIADB_USER drupal \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc MARIADB_PASSWORD drupal \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9

          LAGOON_ENVIRONMENT_TYPE \u5909\u6570\u304c production \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f MARIADB_INNODB_BUFFER_POOL_SIZE=1024 \u304a\u3088\u3073 MARIADB_INNODB_LOG_FILE_SIZE=256 \u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u6700\u9069\u5316\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/services/mariadb/#mariadb_1","title":"MariaDB \u30ed\u30b0\u306e\u8ffd\u52a0\u8a2d\u5b9a","text":"

          \u958b\u767a\u306e\u904e\u7a0b\u3067\u3001\u30af\u30a8\u30ea\u30ed\u30b0\u307e\u305f\u306f\u30b9\u30ed\u30fc\u30af\u30a8\u30ea\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u305d\u3046\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u74b0\u5883\u5909\u6570 MARIADB_LOG_SLOW \u307e\u305f\u306f MARIADB_LOG_QUERIES \u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306fdocker-compose.yml\u3067\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059.

          "},{"location":"ja/applications/drupal/services/mariadb/#mysql","title":"\u30db\u30b9\u30c8\u304b\u3089MySQL\u30b3\u30f3\u30c6\u30ca\u3078\u306e\u63a5\u7d9a","text":"

          Sequel Pro\u3001MySQL Workbench\u3001HeidiSQL\u3001DBeaver\u3001\u6a19\u6e96\u7684\u306amysql-cli\u306a\u3069\u306e\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u3001Docker\u30b3\u30f3\u30c6\u30ca\u5185\u306eMySQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3057\u305f\u3044\u5834\u5408\u3001IP\u30a2\u30c9\u30ec\u30b9\u3068\u30dd\u30fc\u30c8\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/services/mariadb/#mysql_1","title":"\u30b3\u30f3\u30c6\u30ca\u304b\u3089\u516c\u958b\u3055\u308c\u305f MySQL \u30dd\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b","text":"

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001Docker\u306f\u5404\u30b3\u30f3\u30c6\u30ca\u8d77\u52d5\u6642\u306bMySQL\u306e\u516c\u958b\u30dd\u30fc\u30c8\u3092\u30e9\u30f3\u30c0\u30e0\u306b\u5272\u308a\u5f53\u3066\u307e\u3059\u3002\u3053\u308c\u306f\u30dd\u30fc\u30c8\u306e\u885d\u7a81\u3092\u9632\u3050\u305f\u3081\u306b\u884c\u308f\u308c\u307e\u3059\u3002

          docker\u3092\u4f7f\u3063\u3066\u516c\u958b\u30dd\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f:

          docker port [container_name]\u3092\u5b9f\u884c

          \u30dd\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b
          $ docker port drupal_example_mariadb_1\n3306/tcp -> 0.0.0.0:32797\n

          \u307e\u305f\u306f\u3001Drupal\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306edocker-compose\u3092\u4f7f\u7528\u3057\u3066:

          docker-compose port [service_name] [internal_port]\u3092\u5b9f\u884c

          \u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b
          docker-compose port mariadb 3306\n0.0.0.0:32797\n
          "},{"location":"ja/applications/drupal/services/mariadb/#_1","title":"\u9759\u7684\u30dd\u30fc\u30c8\u306e\u8a2d\u5b9a(\u975e\u63a8\u5968)","text":"

          \u958b\u767a\u4e2d\u306b\u5916\u90e8\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001MySQL\u63a5\u7d9a\u30dd\u30fc\u30c8\u3092\u5e38\u306b\u78ba\u8a8d\u3057\u8a2d\u5b9a\u3059\u308b\u306e\u306f\u9762\u5012\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          \u9759\u7684\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001docker-compose.yml\u306e\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\u3092\u7de8\u96c6\u3057\u307e\u3059\u3002

          docker-compose.yml
            mariadb:\n...\nports:\n- \"33772:3306\" # \u30dd\u30fc\u30c83306\u3092\u30db\u30b9\u30c8\u30dd\u30fc\u30c8\u306e33772\u3092\u6307\u5b9a\u3057\u3066\u516c\u958b\u3057\u307e\u3059\u3002\u3053\u308c\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u30dd\u30fc\u30c8\u306e\u885d\u7a81\u3092\u7ba1\u7406\u3059\u308b\u8cac\u4efb\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u3002\n

          \u8b66\u544a

          \u9759\u7684\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30dd\u30fc\u30c8\u306e\u885d\u7a81\u3092\u7ba1\u7406\u3059\u308b\u8cac\u4efb\u304c\u751f\u3058\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/services/mariadb/#mysql_2","title":"MySQL\u3078\u306e\u63a5\u7d9a","text":"

          \u3053\u308c\u3089\u306e\u8a73\u7d30\u3092\u4f7f\u7528\u3057\u3066\u3001\u304a\u597d\u307f\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30c4\u30fc\u30eb\u306b\u63a5\u7d9a\u3067\u304d\u307e\u3059\u3002

          Linux OS X IP/\u30db\u30b9\u30c8 \u30b3\u30f3\u30c6\u30ca\u304b\u3089\u306eIP docker.amazee.io \u30dd\u30fc\u30c8 \u30b3\u30f3\u30c6\u30ca\u304b\u3089\u516c\u958b\u3055\u308c\u305f\u30dd\u30fc\u30c8 \u30b3\u30f3\u30c6\u30ca\u304b\u3089\u516c\u958b\u3055\u308c\u305f\u30dd\u30fc\u30c8 \u30e6\u30fc\u30b6\u30fc\u540d drupal drupal \u30d1\u30b9\u30ef\u30fc\u30c9 drupal drupal \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 drupal drupal"},{"location":"ja/applications/drupal/services/nginx/","title":"NGINX","text":"

          Lagoon\u306enginx-drupal Docker\u30a4\u30e1\u30fc\u30b8\u3002Drupal\u3068\u9023\u643a\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002Lagoon\u306enginx\u30a4\u30e1\u30fc\u30b8\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/services/nginx/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u3001Lagoon\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • drupal.conf\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u3067\u304d\u308b\u3060\u3051\u30b7\u30f3\u30d7\u30eb\u3067\u3001\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3084\u3059\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30a4\u30f3\u30bb\u30af\u30b7\u30e7\u30f3(server\u3001location /\u3001location @drupal\u3001location @php)\u306binclude\u6307\u793a\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002
          • Drupal.conf\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u3055\u3089\u306a\u308b\u60c5\u5831\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002
          "},{"location":"ja/applications/drupal/services/nginx/#drupal-drupalconf","title":"\u542b\u307e\u308c\u308bDrupal\u8a2d\u5b9a - drupal.conf","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Drupal 7, 8, 9\u306e\u5b8c\u5168\u306aNGINX\u52d5\u4f5c\u8a2d\u5b9a\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8ffd\u52a0\u6a5f\u80fd\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

          • humanstxt Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30b5\u30dd\u30fc\u30c8
          • robotstxt Drupal\u30e2\u30b8\u30e5\u30fc\u30eb
          • \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u7528\u306evagrant\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u7981\u6b62\u3057\u307e\u3059\u3002
          "},{"location":"ja/applications/drupal/services/nginx/#drupalconf-customization","title":"Drupal.conf\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba","text":"

          drupal.conf\u30d5\u30a1\u30a4\u30eb\u306f\u3001nginx\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092Drupal\u7528\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3082\u306e\u3067\u3059\u3002\u9867\u5ba2\u306b\u3088\u3063\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u65b9\u6cd5\u306f\u69d8\u3005\u3067\u3059:

          • \u4fee\u6b63\u304c\u56f0\u96e3 (\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u96e3\u3057\u3044 )
          • *.conf\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u305f\u7d44\u307f\u8fbc\u307f\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba

          drupal.conf\u30d5\u30a1\u30a4\u30eb\u306f\u3044\u304f\u3064\u304b\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u5206\u304b\u308c\u3066\u3044\u307e\u3059\u3002\u79c1\u305f\u3061\u304c\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u542b\u3081\u305f\u30bb\u30af\u30b7\u30e7\u30f3\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:

          • server
          • location /
          • location @drupal
          • location @php.

          \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u306f\u3001\u305d\u308c\u305e\u308c2\u3064\u306e\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u304c\u3042\u308a\u307e\u3059:

          • *_prepend.conf
          • *_append.conf

          location @drupal\u30bb\u30af\u30b7\u30e7\u30f3\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059:

          drupal.conf
          location @drupal {\ninclude /etc/nginx/conf.d/drupal/location_drupal_prepend*.conf;\ninclude        /etc/nginx/fastcgi.conf;\nfastcgi_param  SCRIPT_NAME        /index.php;\nfastcgi_param  SCRIPT_FILENAME    $realpath_root/index.php;\nfastcgi_pass   ${NGINX_FASTCGI_PASS:-php}:9000;\ninclude /etc/nginx/conf.d/drupal/location_drupal_append*.conf;\n}\n

          \u3053\u306e\u8a2d\u5b9a\u306f\u3001\u304a\u5ba2\u3055\u307e\u304clocation_drupal_prepend.conf\u304a\u3088\u3073location_drupal_append.conf\u3068\u3044\u3046\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u4ed6\u306e\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u306e\u524d\u306b\u633f\u5165\u3057\u305f\u3044\u8a2d\u5b9a\u3068\u3001\u5f8c\u306b\u633f\u5165\u3057\u305f\u3044\u8a2d\u5b9a\u3092\u3059\u3079\u3066\u8a18\u8ff0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u4e00\u5ea6\u4f5c\u6210\u3055\u308c\u308b\u3068\u3001nginx\u30b3\u30f3\u30c6\u30ca\u5185\u306b\u5fc5\u305a\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u306e\u3067\u3001Dockerfile.nginx\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8ffd\u52a0\u3057\u307e\u3059:

          dockerfile.nginx
          COPY location_drupal_prepend.conf /etc/nginx/conf.d/drupal/location_drupal_prepend.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/location_drupal_prepend.conf\n
          "},{"location":"ja/applications/drupal/services/nginx/#drupal-core-statistics-module-configuration","title":"Drupal Core Statistics\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u8a2d\u5b9a","text":"

          \u30b3\u30a2\u306eStatistics\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u7c21\u5358\u306a\u8a2d\u5b9a\u5909\u66f4\u304c\u5fc5\u8981\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          \u30c7\u30d5\u30a9\u30eb\u30c8\u306eNGINX\u8a2d\u5b9a\u3067\u306f\u3001\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8/core/modules/statistics/statistics.php\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u62d2\u5426\u3055\u308c\u307e\u3059(404)

          \u3053\u308c\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306eNGINX\u8a2d\u5b9a\u306b\u95a2\u9023\u3057\u3066\u3044\u307e\u3059:

          drupal.conf
          location ~* ^.+\\.php$ {\n    try_files /dev/null @drupal;\n}\n

          \u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u7279\u5b9a\u306e\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u3092\u5b9a\u7fa9\u3057\u3001\u3053\u308c\u3092\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d7\u30ea\u30da\u30f3\u30c9\u8a2d\u5b9a\u3068\u3057\u3066\u6ce8\u5165\u3057\u307e\u3059:

          drupal.conf
          ## Allow access to to the statistics endpoint.\nlocation ~* ^(/core/modules/statistics/statistics.php) {\n      try_files /dev/null @php;\n}\n

          NGINX\u30b3\u30f3\u30c6\u30ca\u306e\u30d3\u30eb\u30c9\u6642\u306b\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002

          dockerfile.nginx
          # Drupal Statistics\u30e2\u30b8\u30e5\u30fc\u30eb\u306eNGINX\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3059\u308b\nCOPY .lagoon/nginx/location_prepend_allow_statistics.conf /etc/nginx/conf.d/drupal/location_prepend_allow_statistics.conf\n
          "},{"location":"ja/applications/drupal/services/php-cli/","title":"PHP-cli","text":"

          Lagoon\u306ephp-cli-drupal Docker\u30a4\u30e1\u30fc\u30b8\u306fDrupal\u3068\u9023\u643a\u3059\u308b\u305f\u3081\u306b\u6700\u9069\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306fLagoon\u306ephp-cli\u30a4\u30e1\u30fc\u30b8\u3092\u57fa\u306b\u4f5c\u3089\u308c\u3066\u304a\u308a\u3001Drupal\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u65e5\u3005\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306b\u5fc5\u8981\u306a\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u5168\u3066\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

          • drush
          • drupal console
          • drush launcher (Drush\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u30b5\u30a4\u30c8\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001Drush 8\u306b\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3057\u307e\u3059)
          "},{"location":"ja/applications/drupal/services/php-cli/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 7.3 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306b\u5229\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86) - uselagoon/php-7.3-cli-drupal
          • 7.4 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306b\u5229\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86) - uselagoon/php-7.4-cli-drupal
          • 8.0 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306b\u5229\u7528\u53ef\u80fd\u3067\u3059\u304c\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86) - uselagoon/php-8.0-cli-drupal
          • 8.1 Dockerfile - uselagoon/php-8.1-cli-drupal
          • 8.2 Dockerfile - uselagoon/php-8.2-cli-drupal
          • 8.3 Dockerfile - uselagoon/php-8.3-cli-drupal

          \u5168\u3066\u306ePHP\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u305d\u308c\u305e\u308c\u306eDockerfiles\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/services/php-cli/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          "},{"location":"ja/applications/drupal/services/redis/","title":"Redis","text":"

          \u5185\u90e8\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u306b\u306f\u3001Redis\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002Redis\u30b5\u30fc\u30d3\u30b9\u3092 docker-compose.yaml\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002

          docker-compose.yml
            redis:\nimage: uselagoon/redis-5\nlabels:\nlagoon.type: redis\n<< : *default-user # \u5b9a\u7fa9\u6e08\u307f\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\nenvironment:\n<< : *default-environment\n

          \u307e\u305f\u3001Redis\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u3092settings.php\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/services/redis/#drupal-7","title":"Drupal 7","text":"settings.php
            if(getenv('LAGOON')){\n    $conf['redis_client_interface'] = 'PhpRedis';\n    $conf['redis_client_host'] = 'redis';\n    $conf['lock_inc'] = 'sites/all/modules/contrib/redis/redis.lock.inc';\n    $conf['path_inc'] = 'sites/all/modules/contrib/redis/redis.path.inc';\n    $conf['cache_backends'][] = 'sites/all/modules/contrib/redis/redis.autoload.inc';\n    $conf['cache_default_class'] = 'Redis_Cache';\n    $conf['cache_class_cache_form'] = 'DrupalDatabaseCache';\n    $conf['cache_class_cache_field'] = 'DrupalDatabaseCache';\n  }\n

          \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u9020\u306b\u3088\u3063\u3066\u306f\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30d1\u30b9\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          "},{"location":"ja/applications/drupal/services/redis/#drupal-8","title":"Drupal 8","text":"

          Drupal 8 \u306e\u8a2d\u5b9a\u306f\u307b\u3068\u3093\u3069\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u306e\u307e\u307e\u3067\u3059\u304c\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b Redis \u306f\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002

          settings.php
          if (getenv('LAGOON')){\n  $settings['redis.connection']['interface'] = 'PhpRedis';\n  $settings['redis.connection']['host'] = getenv('REDIS_HOST') ?: 'redis';\n  $settings['redis.connection']['port'] = getenv('REDIS_SERVICE_PORT') ?: '6379';\n  $settings['cache_prefix']['default'] = getenv('LAGOON_PROJECT') . '_' . getenv('LAGOON_GIT_SAFE_BRANCH');\n  // Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u4e2d\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u3002\n  if (!drupal_installation_attempted() && extension_loaded('redis')) {\n    $settings['cache']['default'] = 'cache.backend.redis';\n    // \u305d\u3057\u3066\u3001Redis\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u306a\u304f\u3066\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\n    $class_loader->addPsr4('Drupal\\\\redis\\\\', 'modules/contrib/redis/src');\n    $settings['bootstrap_container_definition'] = [\n      'parameters' => [],\n      'services' => [\n        'redis.factory' => [\n          'class' => 'Drupal\\redis\\ClientFactory',\n        ],\n        'cache.backend.redis' => [\n          'class' => 'Drupal\\redis\\Cache\\CacheBackendFactory',\n          'arguments' => ['@redis.factory', '@cache_tags_provider.container', '@serialization.phpserialize'],\n        ],\n        'cache.container' => [\n          'class' => '\\Drupal\\redis\\Cache\\PhpRedis',\n           'factory' => ['@cache.backend.redis', 'get'],\n          'arguments' => ['container'],\n        ],\n        'cache_tags_provider.container' => [\n          'class' => 'Drupal\\redis\\Cache\\RedisCacheTagsChecksum',\n          'arguments' => ['@redis.factory'],\n        ],\n        'serialization.phpserialize' => [\n          'class' => 'Drupal\\Component\\Serialization\\PhpSerialize',\n        ],\n      ],\n    ];\n  }\n}\n
          "},{"location":"ja/applications/drupal/services/redis/#_1","title":"\u6c38\u7d9a\u6027","text":"

          Redis\u306f\u3001\u6c38\u7d9a\u7684\u306a\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

          docker-compose.yml
          redis:\nimage: uselagoon/redis-5-persistent\nlabels:\nlagoon.type: redis-persistent\nenvironment:\n<< : *default-environment\n
          "},{"location":"ja/applications/drupal/services/redis/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u74b0\u5883\u5909\u6570\u306f\u3001Redis\u306b\u95a2\u3059\u308b\u4e00\u822c\u7684\u306a\u60c5\u5831\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e LOGLEVEL notice Redis\u306e\u30ed\u30b0\u30ec\u30d9\u30eb DATABASES 1 \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6570 MAXMEMORY 100mb Redis\u306e\u6700\u5927\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf"},{"location":"ja/applications/drupal/services/redis/#redis_1","title":"Redis\u306e\u30d5\u30a7\u30a4\u30eb\u30aa\u30fc\u30d0\u30fc","text":"

          Redis\u30b3\u30f3\u30c6\u30ca\u304c\u5229\u7528\u3067\u304d\u306a\u3044\u5834\u5408(\u4f8b\u3048\u3070\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u4e2d\u306a\u3069)\u306bRedis\u306e\u30d5\u30a7\u30a4\u30eb\u30aa\u30fc\u30d0\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306e\u30b9\u30cb\u30da\u30c3\u30c8\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

          \u4ee5\u4e0b\u3092Drupal\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u306asettings.php\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002

          settings.php
          if (getenv('LAGOON')) {\n  $contrib_path = is_dir('sites/all/modules/contrib') ? 'sites/all/modules/contrib' : 'sites/all/modules';\n  $redis = DRUPAL_ROOT . '/sites/all/modules/contrib/redis';\n  if (file_exists(\"$redis/redis.module\")) {\n    require_once \"$redis/redis.module\";\n    $conf['redis_client_host'] = getenv('REDIS_HOST') ?: 'redis';\n    $conf['redis_client_port'] = getenv('REDIS_SERVICE_PORT') ?: 6379;\n    $conf['cache_prefix'] = getenv('REDIS_CACHE_PREFIX') ?: getenv('LAGOON_PROJECT') . '_' . getenv('LAGOON_GIT_SAFE_BRANCH');\n    try {\n      // Redis\u306b\u63a5\u7d9a\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\n      $client = Redis_Client::getClient();\n      $response = $client->ping();\n      if (!$response) {\n      throw new \\Exception('Redis\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3057\u305f\u304c\u3001\u6b63\u3057\u304f\u5fdc\u7b54\u3057\u3066\u3044\u307e\u305b\u3093\u3002');\n      }\n      $conf['redis_client_interface'] = 'PhpRedis';\n      $conf['lock_inc'] = $contrib_path . '/redis/redis.lock.inc';\n      $conf['path_inc'] = $contrib_path . '/redis/redis.path.inc';\n      $conf['cache_backends'][] = $contrib_path . '/redis/redis.autoload.inc';\n      $conf['cache_default_class'] = 'Redis_Cache';\n    } catch (\\Exception $e) {\n      // Redis \u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u306f\u5229\u7528\u3067\u304d\u306a\u3044\u305f\u3081\u3001Redis\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u8a2d\u5b9a\u3092\u884c\u308f\u305a\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u4f7f\u7528\u3055\u308c\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u6b21\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u518d\u8a66\u884c\u3055\u308c\u307e\u3059\u3002\n      // 'DrupalFakeCache'\u30af\u30e9\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\n      if (!class_exists('DrupalFakeCache')) {\n        $conf['cache_backends'][] = 'includes/cache-install.inc';\n      }\n      $conf['cache_default_class'] = 'DrupalFakeCache';\n    }\n  }\n}\n
          "},{"location":"ja/applications/drupal/services/solr/","title":"Solr","text":""},{"location":"ja/applications/drupal/services/solr/#_1","title":"\u6a19\u6e96\u7684\u306a\u4f7f\u3044\u65b9","text":"

          Solr 5.5\u30016.6\u3001\u304a\u3088\u3073 7.7\u3067\u306f\u3001search_api_solr Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b9\u30ad\u30fc\u30de\u30d5\u30a1\u30a4\u30eb\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u4f7f\u7528\u3059\u308bSolr\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f8b\u306e\u3088\u3046\u306bdocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/services/solr/#_2","title":"\u30ab\u30b9\u30bf\u30e0\u30b9\u30ad\u30fc\u30de","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067Solr\u306e\u30b9\u30ad\u30fc\u30de\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3092\u5b9f\u88c5\u3059\u308b\u306b\u306f\u3001Lagoon\u304c\u3069\u306e\u3088\u3046\u306b\u6a19\u6e96\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\u304b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          • docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u306e solr \u30bb\u30af\u30b7\u30e7\u30f3\u3067\u3001 image: uselagoon/solr:8 \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059:
          docker-compose.yml
            build:\ncontext: .\ndockerfile: solr.dockerfile\n
          • \u30b9\u30ad\u30fc\u30de\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002\u901a\u5e38\u3001.lagoon/solr\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
          • solr.dockerfile \u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
          solr.dockerfile
          FROM uselagoon/solr:8\n\nCOPY .lagoon/solr /solr-conf/conf\n\nCMD solr-recreate drupal /solr-conf && solr-foreground\n

          \u76ee\u6a19\u306f\u3001\u30d3\u30eb\u30c9\u3059\u308b\u30a4\u30e1\u30fc\u30b8\u306e/solr-conf/confSolr\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u3067\u3059\u3002

          "},{"location":"ja/applications/drupal/services/solr/#_3","title":"\u30de\u30eb\u30c1\u30b3\u30a2","text":"

          \u8907\u6570\u306e\u30b3\u30a2\u3092\u5b9f\u88c5\u3059\u308b\u306b\u306f\u3001\u4e0a\u8a18\u306e\u3088\u3046\u306b\u72ec\u81ea\u306eSolr\u30b9\u30ad\u30fc\u30de\u3092\u7528\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5fc5\u8981\u306a\u5909\u66f4\u306fDockerfile\u306eCMD\u3060\u3051\u3067\u3001\u5fc5\u8981\u306a\u30b3\u30a2\u3054\u3068\u306bprecreate-core corename /solr-conf/ ;\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002

          solr.dockerfile
          FROM uselagoon/solr:8-drupal\n\nCMD solr-recreate drupal /solr-conf && solr-recreate more-drupal /solr-conf && solr-foreground\n
          "},{"location":"ja/applications/drupal/services/varnish/","title":"Varnish","text":"

          Drupal\u3092Varnish\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3068\u4e00\u7dd2\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002Lagoon\u306fVarnish\u304c\u3059\u3067\u306b\u8a2d\u5b9a\u6e08\u307f\u306eDrupal Varnish config\u3067varnish-drupalDocker\u30a4\u30e1\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002

          \u3053\u306eVarnish config\u306f\u4ee5\u4e0b\u306e\u3053\u3068\u3092\u884c\u3044\u307e\u3059:

          • Drupal\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u3092\u7406\u89e3\u3057\u3001\u8a8d\u8a3c\u3055\u308c\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066Varnish\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u81ea\u52d5\u7684\u306b\u7121\u52b9\u306b\u3057\u307e\u3059\u3002
          • \u3053\u306e\u6a5f\u80fd\u306f\u3001\u30a2\u30bb\u30c3\u30c8(\u753b\u50cf\u3001CSS\u3001JS\u306a\u3069)\u3092\u81ea\u52d5\u7684\u306b 1 \u304b\u6708\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306b\u3082\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u305b\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u8a8d\u8a3c\u3055\u308c\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u3082\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u306a\u3044\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u3082\u884c\u308f\u308c\u307e\u3059\u3002
          • Drupal 8\u306e\u30d1\u30fc\u30b8\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u4f7f\u7528\u3055\u308c\u308bBAN\u304a\u3088\u3073URIBAN\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002
          • Google Analytics\u306e\u30ea\u30f3\u30af\u304c\u8907\u6570\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u306b\u3001URL\u30d1\u30e9\u30e1\u30fc\u30bf\u304b\u3089utm_\u3068gclid\u3092\u524a\u9664\u3057\u307e\u3059\u3002
          • \u4ed6\u306b\u3082\u826f\u3044\u3053\u3068\u304c\u305f\u304f\u3055\u3093\u3042\u308a\u307e\u3059 - drupal.vcl\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002
          "},{"location":"ja/applications/drupal/services/varnish/#drupal-8","title":"Drupal 8\u3068\u306e\u4f7f\u7528","text":"

          \u8981\u7d04: examples repo\u306edrupal8-advanced example\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3068Drupal\u306e\u8a2d\u5b9a\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u6ce8\u610f:\u3053\u308c\u3089\u306e\u4f8b\u306e\u591a\u304f\u306f\u3001\u540c\u3058drupal-example-simple\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306e\u7570\u306a\u308b\u30d6\u30e9\u30f3\u30c1/\u30cf\u30c3\u30b7\u30e5\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u5fc5\u305a\u3001\u30b5\u30f3\u30d7\u30eb\u30ea\u30b9\u30c8\u304b\u3089\u6b63\u78ba\u306a\u30d6\u30e9\u30f3\u30c1\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044!

          "},{"location":"ja/applications/drupal/services/varnish/#purgevarnish-purge","title":"Purge\u3068Varnish Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

          Drupal 8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3067Varnish\u3092\u5b8c\u5168\u306b\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001Purge\u3068Varnish Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u306f\u591a\u304f\u306e\u30b5\u30d6\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u5c11\u306a\u304f\u3068\u3082\u4ee5\u4e0b\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a

          • purge
          • purge_drush
          • purge_tokens
          • purge_ui
          • purge_processor_cron
          • purge_processor_lateruntime
          • purge_queuer_coretags
          • varnish_purger
          • varnish_purge_tags

          \u4e00\u5ea6\u306b\u3059\u3079\u3066\u3092\u53d6\u5f97\u3057\u307e\u3059:

          Purge\u3068Varnish Purge\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
          composer require drupal/purge drupal/varnish_purge\n\ndrush en purge purge_drush purge_tokens purge_ui purge_processor_cron purge_processor_lateruntime purge_queuer_coretags varnish_purger varnish_purge_tags\n
          "},{"location":"ja/applications/drupal/services/varnish/#varnish-purge","title":"Varnish Purge\u306e\u8a2d\u5b9a","text":"
          1. Configuration > Development > Performance > Purge\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002
          2. Add purger\u304b\u3089\u30d1\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
          3. Varnish Bundled Purger\u3092\u9078\u629e\u3057\u307e\u3059(Varnish Purger\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002#Behind the Scenes\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)
          4. \u8ffd\u52a0\u3057\u305f\u3070\u304b\u308a\u306e\u30d1\u30fc\u30b8\u306e\u6a2a\u306b\u3042\u308b\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001Configure\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
          5. \u308f\u304b\u308a\u3084\u3059\u3044\u540d\u524d\u3092\u3064\u3051\u3066\u4e0b\u3055\u3044\u3002Lagoon Varnish \u304c\u826f\u3044\u3067\u3057\u3087\u3046\u3002
          6. \u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059:

            Varnish Purge\u306e\u8a2d\u5b9a
             TYPE: \u30bf\u30b0\n\n REQUEST:\n \u30db\u30b9\u30c8\u540d: varnish\n (\u307e\u305f\u306fdocker-compose.yml\u3067Varnish\u304c\u547c\u3070\u308c\u3066\u3044\u308b\u540d\u524d)\n \u30dd\u30fc\u30c8: 8080\n \u30d1\u30b9: /\n \u30ea\u30af\u30a8\u30b9\u30c8\u65b9\u6cd5: BAN\n \u30b9\u30ad\u30fc\u30e0: http\n\n HEADERS:\n \u30d8\u30c3\u30c0\u30fc: Cache-Tags\n \u5024: [invalidations:separated_pipe]\n
          7. Save configuration\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002

          \u4ee5\u4e0a\u3067\u8a2d\u5b9a\u306f\u5b8c\u4e86\u3067\u3059\uff01\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u8aad\u3093\u3067\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/services/varnish/#varnishdrupal","title":"Varnish\u7528\u306eDrupal\u306e\u8a2d\u5b9a","text":"

          \u4ed6\u306b\u3082\u3044\u304f\u3064\u304b\u306e\u8a2d\u5b9a\u304c\u53ef\u80fd\u3067\u3059:

          1. drush pmu page_cache\u3092\u4f7f\u7528\u3057\u3066Internal Page Cache Drupal\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a2\u30f3\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u5947\u5999\u306a\u4e8c\u91cd\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001Varnish \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u307f\u304c\u30af\u30ea\u30a2\u3055\u308c\u3001\u5185\u90e8\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u30af\u30ea\u30a2\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u5909\u66f4\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u975e\u5e38\u306b\u9045\u304f\u53cd\u6620\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u5927\u304d\u306a\u30b5\u30a4\u30c8\u3067\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5927\u91cf\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
          2. production.settings.php\u5185\u306e$config['system.performance']['cache']['page']['max_age']\u30922628000\u306b\u5909\u66f4\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Varnish \u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u30b5\u30a4\u30c8\u3092\u6700\u5927 1 \u30f6\u6708\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002\u4e00\u898b\u9577\u3044\u3088\u3046\u306b\u601d\u308f\u308c\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001Drupal 8 \u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u30b7\u30b9\u30c6\u30e0\u306f\u975e\u5e38\u306b\u512a\u79c0\u3067\u3001\u4f55\u3089\u304b\u306e\u5909\u66f4\u304c\u884c\u308f\u308c\u308b\u3068\u3001Varnish \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u81ea\u52d5\u7684\u306b\u66f4\u65b0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002
          "},{"location":"ja/applications/drupal/services/varnish/#varnish_1","title":"\u30ed\u30fc\u30ab\u30eb\u3067\u306e Varnish \u30c6\u30b9\u30c8","text":"

          Lagoon\u306e\u30ed\u30fc\u30ab\u30eb\u3067\u306eDrupal\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u306f\u3001\u958b\u767a\u4f5c\u696d\u306e\u59a8\u3052\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001Varnish\u3068Drupal\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u304c\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7121\u52b9\u5316\u65b9\u6cd5\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:

          • docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u74b0\u5883\u5909\u6570VARNISH_BYPASS=true\u306b\u3088\u308a\u3001Varnish\u306b\u4e8b\u5b9f\u4e0a\u7121\u52b9\u5316\u3092\u6307\u793a\u3057\u3066\u3044\u307e\u3059\u3002
          • Drupal \u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u3092\u9001\u4fe1\u3057\u306a\u3044\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059(\u958b\u767a\u74b0\u5883\u3088\u3046\u306edevelopment.settings.php\u30d5\u30a1\u30a4\u30eb\u5185\u306eDrupal\u8a2d\u5b9a$config['system.performance']['cache']['page']['max_age'] = 0\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059)

          Varnish\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3059\u308b\u306b\u306f\u3001docker-compose.yml\u3067\u4ee5\u4e0b\u306e\u5909\u66f4\u3092\u884c\u3044\u307e\u3059:

          • Varnish\u30b5\u30fc\u30d3\u30b9\u30bb\u30af\u30b7\u30e7\u30f3\u3067VARNISH_BYPASS\u3092false\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
          • x-environment\u30bb\u30af\u30b7\u30e7\u30f3\u3067LAGOON_ENVIRONMENT_TYPE\u3092production\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
          • docker-compose up -d\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u65b0\u3057\u3044\u74b0\u5883\u5909\u6570\u3068\u3068\u3082\u306b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u518d\u8d77\u52d5\u3057\u307e\u3059\u3002

          \u3053\u308c\u3067\u3001Varnish\u3092\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff01

          \u6b21\u306b\u3001ID\u304c1\u3067URL\u304cdrupal-example.docker.amazee.io/node/1\u3068\u306a\u308b\u30ce\u30fc\u30c9\u3092\u60f3\u5b9a\u3057\u305f\u77ed\u3044\u4f8b\u3067\u3059\u3002

          1. curl -I drupal-example.docker.amazee.io/node/1\u3092\u5b9f\u884c\u3057\u3001\u30d8\u30c3\u30c0\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:
            • X-LAGOON \u306b\u306f varnish \u304c\u542b\u307e\u308c\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b9f\u969b\u306bVarnish\u3092\u901a\u3057\u3066\u51e6\u7406\u3055\u308c\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
            • Varnish\u306f\u304a\u305d\u3089\u304f\u3053\u306e\u30b5\u30a4\u30c8\u3092\u898b\u305f\u3053\u3068\u304c\u306a\u304f\u3001\u6700\u521d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306fVarnish\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30a6\u30a9\u30fc\u30e0\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u3001Age:\u306f0\u306e\u307e\u307e\u3067\u3059\u3002
            • X-Varnish-Cache \u306f MISS \u306b\u306a\u3063\u3066\u3044\u308c\u3070\u3001Varnish\u304c\u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u6e08\u307f\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u898b\u3064\u3051\u3089\u308c\u306a\u304b\u3063\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
          2. curl -I drupal-example.docker.amazee.io/node/1 \u3092\u518d\u5ea6\u5b9f\u884c\u3059\u308b\u3068\u3001\u30d8\u30c3\u30c0\u30fc\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059:
            • Age: \u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u3066\u304b\u3089\u4f55\u79d2\u7d4c\u3063\u305f\u304b\u3092\u793a\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u901f\u5ea6\u306b\u3088\u308a\u307e\u3059\u304c\u3001\u304a\u305d\u3089\u304f1-30\u306e\u9593\u306e\u5024\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002
            • X-Varnish-Cache \u306f HIT \u3068\u306a\u308a\u3001Varnish\u304c\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6b63\u5e38\u306b\u53d6\u5f97\u3057\u3066\u3001\u305d\u308c\u3092\u8fd4\u3057\u305f\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002
          3. Drupal\u306e node/1 \u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u5185\u5bb9\u3092\u5909\u66f4\u3057\u307e\u3059\u3002
          4. curl -I drupal-example.docker.amazee.io/node/1 \u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30d8\u30c3\u30c0\u30fc\u306f\u6700\u521d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u540c\u3058\u306b\u306a\u308b\u306f\u305a\u3067\u3059:
            • Age:0
            • X-Varnish-Cache: MISS
          "},{"location":"ja/applications/drupal/services/varnish/#drupalvarnish","title":"Drupal\u3068Varnish\u306e\u821e\u53f0\u88cf","text":"

          Drupal \u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3092\u5229\u7528\u3057\u3066\u3044\u305f\u7d4c\u9a13\u304c\u3042\u308b\u65b9\u3084\u3001Drupal 8 \u3068 Varnish \u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u4ee5\u524d\u306b\u884c\u3063\u305f\u3053\u3068\u304c\u3042\u308b\u65b9\u306f\u3001Lagoon \u306e Drupal Varnish \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u5909\u66f4\u70b9\u304c\u3042\u308b\u3053\u3068\u306b\u6c17\u3065\u3044\u305f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u3067\u305d\u308c\u3089\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059:

          "},{"location":"ja/applications/drupal/services/varnish/#varnish-purgervarnish-bundled-purger","title":"Varnish Purger\u306e\u4ee3\u308f\u308a\u306bVarnish Bundled Purger\u3092\u4f7f\u7528\u3059\u308b","text":"

          Varnish Purger\u306f\u3001\u7121\u52b9\u5316\u3059\u308b\u5fc5\u8981\u306e\u3042\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u3054\u3068\u306bBAN\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002Drupal\u306b\u306f\u591a\u304f\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u304c\u5b58\u5728\u3059\u308b\u305f\u3081\u3001Varnish\u306b\u5927\u91cf\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u306b\u5bfe\u3057\u3066\u3001Varnish Bundled Purger\u306f\u3001\u8907\u6570\u306e\u7121\u52b9\u5316\u3092\u30d1\u30a4\u30d7(|)\u3067\u533a\u5207\u3063\u3066\u30011\u3064\u306eBAN\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u307f\u9001\u4fe1\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001Varnish\u306e\u30d0\u30f3\u6b63\u898f\u8868\u73fe\u30b7\u30b9\u30c6\u30e0\u3068\u9069\u5408\u3057\u3066\u304a\u308a\u3001\u7d50\u679c\u3068\u3057\u3066\u5c11\u306a\u3044\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u3001Varnish\u5185\u306e\u30d0\u30f3\u30ea\u30b9\u30c8\u30c6\u30fc\u30d6\u30eb\u3082\u5c0f\u3055\u304f\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/applications/drupal/services/varnish/#purge-late-runtime-processor","title":"Purge Late runtime processor\u306e\u4f7f\u3044\u65b9","text":"

          Drupal 7\u306eVarnish\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u306f\u7570\u306a\u308a\u3001Drupal 8\u306ePurge\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u524a\u9664\u65b9\u6cd5\u304c\u5c11\u3057\u7570\u306a\u308a\u307e\u3059\u3002Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u524a\u9664\u5bfe\u8c61\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30ad\u30e5\u30fc\u306b\u8ffd\u52a0\u3057\u3001\u305d\u306e\u5f8c\u3055\u307e\u3056\u307e\u306a\u51e6\u7406\u8005\u304c\u30ad\u30e5\u30fc\u3092\u51e6\u7406\u3057\u307e\u3059\u3002Purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306fCron processor\u3092\u4f7f\u3046\u3053\u3068\u3092\u63a8\u5968\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u308c\u306f Varnish \u30ad\u30e3\u30c3\u30b7\u30e5\u304ccron\u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u6642\u306e\u307f\u524a\u9664\u3055\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u901a\u5e38\u306ecron\u306f\u304a\u305d\u3089\u304f1\u5206\u3054\u3068\u306a\u3069\u975e\u5e38\u306b\u983b\u7e41\u306b\u306f\u5b9f\u884c\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u53e4\u3044\u30c7\u30fc\u30bf\u304cVarnish\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u6b8b\u3063\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u7de8\u96c6\u8005\u3084\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u6df7\u4e71\u3059\u308b\u4e8b\u614b\u3092\u5f15\u304d\u8d77\u3053\u3059\u304a\u305d\u308c\u304c\u3042\u308a\u307e\u3059\u3002

          \u4ee3\u308f\u308a\u306b\u3001\u79c1\u305f\u3061\u306fPurge Late runtime processor\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5404Drupal\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7d42\u4e86\u6642\u306b\u30ad\u30e5\u30fc\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\u3053\u306e\u5229\u70b9\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u304c\u30d1\u30fc\u30b8\u30ad\u30e5\u30fc\u306b\u8ffd\u52a0\u3055\u308c\u305f\u5834\u5408 (\u7de8\u96c6\u8005\u304c Drupal \u30ce\u30fc\u30c9\u3092\u7de8\u96c6\u3057\u305f\u5834\u5408\u306a\u3069)\u3001\u305d\u306e\u30ce\u30fc\u30c9\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u304c\u76f4\u63a5\u30d1\u30fc\u30b8\u3055\u308c\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u308c\u3068Varnish Bundled Purger\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001Drupal\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u6700\u5f8c\u3060\u3051\u306bVarnish\u306b\u5bfe\u3059\u308b\u5358\u4e00\u306e\u8ffd\u52a0\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u884c\u308f\u308c\u308b\u305f\u3081\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u6642\u9593\u306b\u76ee\u7acb\u3063\u305f\u5f71\u97ff\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          "},{"location":"ja/applications/drupal/services/varnish/#varnish-ban-lurker","title":"Varnish Ban Lurker\u306e\u5b8c\u5168\u306a\u30b5\u30dd\u30fc\u30c8","text":"

          Varnish\u306e\u8a2d\u5b9a\u3067\u306f\u3001Ban Lurker\u304c\u5b8c\u5168\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002Ban Lurker \u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u3068 Varnish \u306e\u30b9\u30e0\u30fc\u30ba\u306a\u52d5\u4f5c\u3092\u7dad\u6301\u3059\u308b\u306e\u306b\u5f79\u7acb\u3064\u30c4\u30fc\u30eb\u3067\u3059\u3002Ban Lurker\u306f\u3001Varnish\u306e\u7981\u6b62\u30ea\u30b9\u30c8\u306b\u3042\u308b\u9805\u76ee\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u5185\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u6bd4\u8f03\u3059\u308b\u5c0f\u3055\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002Varnish\u306e\u7981\u6b62\u6a5f\u80fd\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u5185\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u524a\u9664\u5bfe\u8c61\u3068\u3057\u3066\u30de\u30fc\u30af\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002Ban Lurker\u306f\u524a\u9664\u3059\u3079\u304d\u9805\u76ee\u3092\u898b\u3064\u3051\u308b\u3068\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u524a\u9664\u3057\u3001\u7981\u6b62\u81ea\u4f53\u3082\u89e3\u9664\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u901a\u5e38\u306f\u7981\u6b62\u3055\u308c\u305a\u306b\u305a\u3063\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u5bb9\u91cf\u3092\u5360\u6709\u3057\u7d9a\u3051\u308b\u3001\u30a2\u30af\u30bb\u30b9\u983b\u5ea6\u304c\u4f4e\u304f\u6709\u52b9\u671f\u9650\u304c\u975e\u5e38\u306b\u9577\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u524a\u9664\u3055\u308c\u3001\u66f4\u65b0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u7981\u6b62\u30ea\u30b9\u30c8\u304c\u5c0f\u3055\u304f\u306a\u308a\u3001Varnish\u306e\u5404\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3059\u308b\u51e6\u7406\u6642\u9593\u3082\u77ed\u7e2e\u3055\u308c\u307e\u3059\u3002\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001Ban Lurker\u306eVarnish\u306e\u516c\u5f0f\u8a18\u4e8b\u3084\u3001\u305d\u306e\u4ed6\u306e\u53c2\u8003\u306b\u306a\u308b\u8a18\u4e8b\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/applications/drupal/services/varnish/#_1","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"

          Varnish\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3066\u3044\u306a\u3044\uff1f \u305d\u308c\u3068\u3082\u4f55\u304b\u4ed6\u306e\u554f\u984c\u304c\uff1f \u4ee5\u4e0b\u306b\u30c7\u30d0\u30c3\u30b0\u306e\u65b9\u6cd5\u3092\u3044\u304f\u3064\u304b\u7d39\u4ecb\u3057\u307e\u3059:

          • purge\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001drush p-debug-en\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306f\u3001Drupal\u30ed\u30b0admin/reports/dblog\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002
          • Drupal\u304c\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u3092\u9001\u4fe1\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6700\u9069\u306a\u30c6\u30b9\u30c8\u65b9\u6cd5\u3068\u3057\u3066\u306f\u3001Lagoon\u304c\u751f\u6210\u3059\u308bVarnish\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d0\u30a4\u30d1\u30b9\u3059\u308b\u305f\u3081\u306eURL\u3092\u4f7f\u7528\u3057\u307e\u3059(\u30ed\u30fc\u30ab\u30eb\u306eDrupal\u306e\u4f8b\u3067\u306f\u3001http://nginx-drupal-example.docker.amazee.io\u306b\u306a\u308a\u307e\u3059)\u3002Cache-Control: max-age=900, public\u30d8\u30c3\u30c0\u30fc\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3001900\u304c$config['system.performance']['cache']['page']['max_age']\u3067\u8a2d\u5b9a\u3057\u305f\u3082\u306e\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
          • \u74b0\u5883\u5909\u6570VARNISH_BYPASS\u304ctrue\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044(docker-compose.yml\u3092\u78ba\u8a8d\u3057\u3001docker-compose up -d varnish\u3092\u5b9f\u884c\u3057\u3066\u74b0\u5883\u5909\u6570\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044)\u3002
          • \u3059\u3079\u3066\u304c\u4e0a\u624b\u304f\u3044\u304b\u306a\u3044\u5834\u5408\u3001\u30c6\u30fc\u30d6\u30eb\u3092\u3072\u3063\u304f\u308a\u8fd4\u3059\u524d\u306b (\u256f\u00b0\u25a1\u00b0)\u256f\ufe35 \u253b\u2501\u253b\u3001Lagoon\u30c1\u30fc\u30e0\u306b\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002\u559c\u3093\u3067\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\u3002
          "},{"location":"ja/community/discord/","title":"Discord\u4e0a\u306eLagoon\u30b3\u30df\u30e5\u30cb\u30c6\u30a3","text":"

          \u79c1\u305f\u3061\u306e\u516c\u5f0f\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4f1a\u8b70\u30b9\u30da\u30fc\u30b9\u306f\u3001Lagoon\u306eDiscord\u3067\u3059\u3002

          \u79c1\u305f\u3061\u306f\u3001\u3053\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u5168\u3066\u306eLagoon\u30e6\u30fc\u30b6\u30fc\u304c\u5354\u529b\u3057\u3001\u554f\u984c\u3092\u89e3\u6c7a\u3057\u3001\u30a2\u30a4\u30c7\u30a2\u3092\u5171\u6709\u3057\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ca2\u732e\u3059\u308b\u5834\u3068\u3057\u3066\u8a2d\u7acb\u3057\u307e\u3057\u305f\u3002\u73fe\u5728\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306fSlack\u3084\u305d\u306e\u4ed6\u306e\u5834\u6240\u306b\u5206\u6563\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u4e00\u5143\u5316\u3059\u308b\u305f\u3081\u306b\u52aa\u529b\u3057\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u5168\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u3084\u9867\u5ba2\u304c\u53c2\u52a0\u3057\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304b\u3089\u5f97\u3089\u308c\u308b\u5229\u76ca\u3092\u5168\u3066\u306e\u4eba\u304c\u4eab\u53d7\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002

          \u3053\u306e\u5834\u6240\u306f\u3001\u73fe\u5728\u306e\u30b5\u30dd\u30fc\u30c8\u30c1\u30e3\u30cd\u30eb\u3092\u7f6e\u304d\u63db\u3048\u308b\u3082\u306e\u3067\u306f\u306a\u3044\u3053\u3068\u3092\u5fd8\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044 - \u305d\u308c\u3089\u306f\u305d\u306e\u307e\u307e\u7dad\u6301\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u3084Lagoon\u306e\u30e1\u30f3\u30c6\u30ca\u3068\u7e4b\u304c\u308b\u5834\u6240\u3067\u3059\u3002

          \u79c1\u305f\u3061\u306f\u5168\u3066\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30e1\u30f3\u30d0\u30fc\u306b\u3001\u79c1\u305f\u3061\u306e\u53c2\u52a0\u3068\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3001\u304a\u3088\u3073\u884c\u52d5\u898f\u7bc4\u3092\u78ba\u8a8d\u3057\u3066\u3044\u305f\u3060\u304f\u3053\u3068\u3092\u304a\u9858\u3044\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/community/discord/#_1","title":"\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u6642\u9593","text":"

          \u73fe\u5728\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30cb\u30fc\u30ba\u3092\u3088\u308a\u3088\u304f\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u8abf\u67fb\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u6642\u9593\u306f\u4e00\u6642\u505c\u6b62\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u3061\u3089\u3067\u30a2\u30f3\u30b1\u30fc\u30c8\u306b\u3054\u8a18\u5165\u304f\u3060\u3055\u3044\u3002

          Lagoon\u306b\u95a2\u3057\u3066\u4f55\u304b\u624b\u52a9\u3051\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001Discord\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002 \u307e\u305f\u306f\u3001uselagoon@amazee.io\u307e\u3067\u30e1\u30fc\u30eb\u3092\u304a\u9001\u308a\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/community/moderation/","title":"Lagoon\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3","text":"

          \u3053\u308c\u3089\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306f\u3001Drupal Diversity & Inclusion\u306e\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u6539\u5909\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          Lagoon\u306e\u7a7a\u9593\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u4eba\u3005\u306b\u5bfe\u3059\u308b\u7406\u89e3\u3001\u5171\u611f\u3001\u500b\u4eba\u7684\u306a\u8a8d\u8b58\u306e\u5411\u4e0a\u3092\u4fc3\u9032\u3059\u308b\u3088\u3046\u52aa\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306b\u306f\u3001\u3042\u306a\u305f\u304c\u500b\u4eba\u7684\u306b\u610f\u898b\u304c\u5408\u308f\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044Drupal\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3084\u5e83\u7bc4\u306a\u6280\u8853\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u4eba\u3005\u3082\u542b\u307e\u308c\u307e\u3059\u3002

          Discord\u304b\u3089\u30ad\u30c3\u30af\u3055\u308c\u305f\u5834\u5408\u3001\u30ad\u30c3\u30af\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u518d\u5165\u5834\u3092\u5e0c\u671b\u3059\u308b\u5834\u5408\u3001\u30ad\u30c3\u30ab\u30fc\u307e\u305f\u306f\u5225\u306e\u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\u306b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8(PM)\u3092\u9001\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3082\u3057\u3001\u6575\u610f\u3042\u308b\u53cd\u5fdc\u3092\u5f15\u304d\u8d77\u3053\u3059\u3088\u3046\u306a\u610f\u56f3\u7684\u306b\u717d\u52d5\u7684\u3001\u3044\u3058\u3081\u3001\u307e\u305f\u306f\u5acc\u304c\u3089\u305b\u884c\u70ba\u306b\u5f93\u4e8b\u3057\u3066\u3044\u308b\u3068\u898b\u3048\u308b\u6df7\u4e71\u3092\u62db\u304f\u4eba\u304c\u3044\u305f\u5834\u5408\u3001\u4ed6\u306e\u30c1\u30e3\u30cd\u30eb\u30e1\u30f3\u30d0\u30fc\u306b\u3068\u3063\u3066\u30b9\u30c8\u30ec\u30b9\u3068\u306a\u308b\u884c\u70ba\u3092\u307b\u3050\u3059\u3088\u308a\u3082\u3001\u30ad\u30c3\u30af\u3059\u308b\u65b9\u304c\u65e9\u304f\u3066\u7c21\u5358\u3067\u3059\u3002

          \u30ad\u30c3\u30af\u306f\u7981\u6b62\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u6df7\u4e71\u3092\u62db\u304f\u53ef\u80fd\u6027\u306e\u3042\u308b\u30b3\u30e1\u30f3\u30c8\u3084\u767a\u8a00\u304c\u771f\u5263\u3067\u3001\u4e8c\u8005\u9593\u306e\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u65ad\u7d76\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\u3068\u8a71\u3059\u3053\u3068\u306b\u3088\u308a\u3001(\u6f5c\u5728\u7684\u306b)\u6df7\u4e71\u3092\u62db\u304f\u4eba\u306f\u3001\u3088\u308a\u914d\u616e\u6df1\u304f\u3001\u5305\u62ec\u7684\u3067\u3001\u591a\u69d8\u6027\u3092\u610f\u8b58\u3057\u305f\u8a00\u8449\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u6307\u5c0e\u3055\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u305d\u3057\u3066\u3001\u3088\u308a\u5efa\u8a2d\u7684\u306a\u65b9\u6cd5\u3067\u95a2\u4e0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/community/moderation/#_1","title":"\u6bb5\u968e\u7684\u306a\u5bfe\u5fdc","text":"
          1. \u6bb5\u968e\u4e00\u306e\u5bfe\u5fdc

            \u30e6\u30fc\u30b6\u30fc\u306f\u30c1\u30e3\u30f3\u30cd\u30eb\u306b\u6b53\u8fce\u3055\u308c\u3001\u30b9\u30af\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u8aad\u307f\u65b9\u3092\u8aac\u660e\u3055\u308c\u3001\u53c2\u52a0\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3078\u306e\u30ea\u30f3\u30af\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002

          2. \u6bb5\u968e\u4e8c\u306e\u5bfe\u5fdc

            \u30e6\u30fc\u30b6\u30fc\u306b\u306f\u3001\u6295\u7a3f\u3092\u30c8\u30d4\u30c3\u30af\u306b\u6cbf\u3063\u305f\u3082\u306e\u306b\u4fdd\u3064\u3088\u3046\u306b\u3001\u307e\u305f\u306f\u53c2\u52a0\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u5b88\u308b\u3088\u3046\u306b\u3001\u30c1\u30e3\u30f3\u30cd\u30eb\u5185\u3067\u512a\u3057\u304f\u601d\u3044\u51fa\u3055\u305b\u307e\u3059\u3002

          3. \u6bb5\u968e\u4e09\u306e\u5bfe\u5fdc

            \u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u306bPM\u304c\u9001\u3089\u308c\u3001\u305d\u306e\u6295\u7a3f\u306b\u554f\u984c\u304c\u3042\u3063\u305f\u7406\u7531\u3068\u3001\u4f55\u3092\u3069\u3046\u9055\u3046\u65b9\u6cd5\u3067\u884c\u3046\u3079\u304d\u304b\u306b\u3064\u3044\u3066\u8aac\u660e\u3055\u308c\u307e\u3059\u3002

          4. \u6bb5\u968e\u56db\u306e\u5bfe\u5fdc

            \u884c\u52d5\u304c\u7d9a\u304f\u5834\u5408\u3001\u30e6\u30fc\u30b6\u30fc\u306fDiscord\u304b\u3089\u5c11\u306a\u304f\u3068\u308224\u6642\u9593\u306f\u8ffd\u653e\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/community/moderation/#_2","title":"\u6bb5\u968e\u7684\u3067\u306a\u3044\u5bfe\u5fdc:\u7981\u6b62","text":"

          \u610f\u56f3\u7684\u306b\u6df7\u4e71\u3092\u5f15\u304d\u8d77\u3053\u3059\u500b\u4eba\u306f\u3001\u6bb5\u968e\u7684\u3067\u306f\u306a\u304f\u3001\u8ffd\u653e\u3055\u308c\u307e\u3059\u3002\u7e70\u308a\u8fd4\u3057\u9055\u53cd\u3059\u308b\u3068\u7981\u6b62\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/community/participation/","title":"Lagoon\u53c2\u52a0\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3","text":"

          \u79c1\u305f\u3061\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u3059\u3079\u3066\u306e\u30e1\u30f3\u30d0\u30fc\u304c\u3001\u4eee\u60f3\u7684\u306a\u30b9\u30da\u30fc\u30b9\u3067\u3082\u7269\u7406\u7684\u306a\u30b9\u30da\u30fc\u30b9\u3067\u3082\u3001\u79c1\u305f\u3061\u306e\u884c\u52d5\u898f\u7bc4\u3092\u9075\u5b88\u3059\u308b\u3053\u3068\u3092\u304a\u9858\u3044\u3057\u307e\u3059\u3002

          \u3053\u308c\u3089\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306f\u3001Drupal Diversity & Inclusion\u306e\u53c2\u52a0\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u53c2\u8003\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002

          1. \u7a4d\u6975\u7684\u306b\u805e\u304d\u3001\u6ce8\u610f\u6df1\u304f\u8aad\u307f\u3001\u7406\u89e3\u3059\u308b\u3053\u3068\u3002
            • \u4f1a\u8a71\u306b\u53c2\u52a0\u3059\u308b\u5834\u5408\u306f\u3001\u30d0\u30c3\u30af\u30ed\u30b0\u3092\u8aad\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u4ed6\u306e\u53c2\u52a0\u8005\u304c\u52b9\u679c\u7684\u306b\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u6a5f\u4f1a\u3092\u4e0e\u3048\u3066\u304f\u3060\u3055\u3044\u3002
            • \u4ed6\u306e\u53c2\u52a0\u8005\u306e\u767a\u8a00\u306e\u80cc\u5f8c\u306b\u306f\u826f\u3044\u610f\u56f3\u304c\u3042\u308b\u3068\u4eee\u5b9a\u3057\u307e\u3059\u3002\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306f\u975e\u5e38\u306b\u591a\u69d8\u3067\u3001\u5168\u4e16\u754c\u304b\u3089\u306e\u53c2\u52a0\u8005\u304c\u3044\u307e\u3059\u3002\u6587\u5316\u7684\u306a\u7279\u6027\u3084\u8a00\u8a9e\u7684\u306a\u7279\u6027\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002
            • \u3053\u306e\u5206\u91ce\u306b\u65b0\u3057\u304f\u53c2\u52a0\u3059\u308b\u4eba\u3082\u591a\u304f\u3044\u307e\u3059\u3002\u5f7c\u3089\u304c\u826f\u3044\u610f\u56f3\u3092\u6301\u3063\u3066\u3044\u308b\u304c\u3001\u307e\u3060\u8a00\u8a9e\u3084\u30a2\u30a4\u30c7\u30a2\u3092\u30de\u30b9\u30bf\u30fc\u3057\u3066\u3044\u306a\u3044\u3068\u4eee\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u79c1\u305f\u3061\u306f\u5f7c\u3089\u3092\u52a9\u3051\u305f\u3044\u3068\u601d\u3063\u3066\u3044\u307e\u3059\uff01
          2. \u4e00\u822c\u5316\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u81ea\u5206\u81ea\u8eab\u306e\u7d4c\u9a13\u304b\u3089\u8a71\u3059\u3053\u3068\u3002\u4ed6\u4eba\u306e\u7d4c\u9a13\u306e\u4fa1\u5024\u3092\u8a8d\u8b58\u3059\u308b\u3002\u4ed6\u4eba\u306e\u4ee3\u308f\u308a\u306b\u8a71\u3059\u3053\u3068\u306f\u907f\u3051\u3066\u304f\u3060\u3055\u3044\u3002
            • \u300c\u5f7c\u3089\u300d\u3001\u300c\u79c1\u305f\u3061\u300d\u3001\u300c\u3042\u306a\u305f\u300d\u306e\u4ee3\u308f\u308a\u306b\u300c\u79c1\u300d\u3092\u4f7f\u3063\u3066\u304f\u3060\u3055\u3044\u3002
            • \u3059\u3079\u3066\u306e\u53c2\u52a0\u8005\u306f\u3001\u4ed6\u306e\u53c2\u52a0\u8005\u304c\u81ea\u5206\u81ea\u8eab\u306e\u30e6\u30cb\u30fc\u30af\u306a\u7d4c\u9a13\u3092\u6301\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3059\u308b\u3079\u304d\u3067\u3059\u3002
            • \u5225\u306e\u53c2\u52a0\u8005\u306e\u7d4c\u9a13\u3092\u7121\u52b9\u306b\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u4ee3\u308f\u308a\u306b\u3001\u3042\u306a\u305f\u81ea\u8eab\u306e\u30b9\u30c8\u30fc\u30ea\u30fc\u3084\u7d4c\u9a13\u3092\u5171\u6709\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          3. \u8cea\u554f\u3092\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30a4\u30c7\u30a2\u3001\u611f\u60c5\u3001\u61f8\u5ff5\u3001\u307e\u305f\u306f\u304a\u4e92\u3044\u306b\u7570\u8b70\u3092\u5531\u3048\u307e\u3059\u3002\u500b\u4eba\u653b\u6483\u306f\u63a7\u3048\u307e\u3059\u3002\u307e\u305a\u306f\u30a2\u30a4\u30c7\u30a2\u306b\u7126\u70b9\u3092\u5f53\u3066\u307e\u3059\u3002
            • \u8a00\u8449\u306b\u3088\u308b\u7570\u8b70\u3001\u76ae\u8089\u306a\u4fae\u8fb1\u3001\u6027\u5225/\u4eba\u7a2e/\u5730\u57df\u306e\u56fa\u5b9a\u89b3\u5ff5\u306a\u3069\u306f\u907f\u3051\u307e\u3059\u3002
          4. \u81ea\u5206\u306e\u80fd\u529b\u3068\u90fd\u5408\u306b\u5408\u308f\u305b\u3066\u6700\u5927\u9650\u306b\u53c2\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002
            • \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u6210\u9577\u306f\u3001\u500b\u4eba\u306e\u610f\u898b\u3092\u53d6\u308a\u5165\u308c\u308b\u3053\u3068\u306b\u304b\u304b\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u306f\u3001\u7686\u3055\u3093\u304c\u58f0\u3092\u4e0a\u3052\u3066\u767a\u8a00\u3059\u308b\u3053\u3068\u3092\u671b\u3093\u3067\u3044\u307e\u3059\u3002\u8ca2\u732e\u3067\u304d\u308b\u6642\u9593\u306f\u4eba\u305d\u308c\u305e\u308c\u3067\u3059\u30025 \u5206\u3067\u3082 5 \u6642\u9593\u3067\u3082\u3001\u53c2\u52a0\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u5e78\u3044\u3067\u3059\u3002
            • \u9759\u304b\u306b\u6f5c\u3093\u3067\u5b66\u3073\u306b\u6765\u308b\u3001\u3064\u307e\u308a\u300c\u6f5c\u3080\u300d\u4eba\u3082\u6b53\u8fce\u3057\u307e\u3059\u304c\u3001\u81ea\u5df1\u7d39\u4ecb\u3092\u3057\u3066\u6328\u62f6\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          5. \u5408\u610f\u3059\u308b\u3053\u3068\u304c\u5fc5\u305a\u3057\u3082\u76ee\u6a19\u3067\u306f\u306a\u3044\u3053\u3068\u3092\u53d7\u3051\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002
            • \u6280\u8853\u7684\u306a\u554f\u984c\u306b\u306f\u3001\u3042\u306a\u305f\u306e\u8a2d\u5b9a\u3067\u306f\u3046\u307e\u304f\u3044\u304b\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044\u304c\u3001\u3055\u307e\u3056\u307e\u306a\u300c\u6b63\u3057\u3044\u300d\u7b54\u3048\u304c\u3057\u3070\u3057\u3070\u5b58\u5728\u3057\u307e\u3059\u3002
          6. \u8a00\u8a9e\u306e\u9055\u3044\u3084\u610f\u56f3\u3057\u306a\u3044\u610f\u5473\u5408\u3044\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002
            • \u300c\u30c6\u30ad\u30b9\u30c8\u306f\u96e3\u3057\u3044\u300d - \u30c6\u30ad\u30b9\u30c8\u3067\u52b9\u679c\u7684\u306b\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3068\u308b\u306e\u306f\u96e3\u3057\u3044\u3053\u3068\u3092\u8a8d\u8b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          7. \u500b\u4eba\u306e\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u8a8d\u3081\u308b\u3002
            • \u660e\u793a\u3055\u308c\u305f\u540d\u524d\u3068\u4ee3\u540d\u8a5e\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4eba\u7a2e\u3001\u6027\u7684\u6307\u5411\u3001\u969c\u5bb3\u306a\u3069\u306b\u3064\u3044\u3066\u7591\u554f\u3092\u5448\u3055\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
            • \u8ab0\u304b\u3092\u3069\u306e\u3088\u3046\u306b\u547c\u3076\u3079\u304d\u304b\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u63a7\u3048\u3081\u304b\u3064\u656c\u610f\u3092\u6301\u3063\u3066\u5c0b\u306d\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001\u3069\u306e\u4ee3\u540d\u8a5e\u3092\u4f7f\u7528\u3059\u3079\u304d\u304b\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u3063\u3066\u5c0b\u306d\u3066\u304f\u3060\u3055\u3044\u3002\u6b63\u3057\u3044\u4ee3\u540d\u8a5e\u3092\u4f7f\u3046\u3053\u3068\u3067\u4ed6\u4eba\u3092\u5c0a\u91cd\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
          8. \u4e00\u90e8\u306e\u30aa\u30d5\u30c8\u30d4\u30c3\u30af\u306a\u4f1a\u8a71\u306f\u8a31\u5bb9\u3055\u308c\u307e\u3059\u3002
            • \u30a2\u30ca\u30a6\u30f3\u30b9\u306e\u30af\u30ed\u30b9\u30dd\u30b9\u30c8\u306e\u4e00\u90e8\u3082\u8a31\u5bb9\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u884c\u70ba\u306f\u8a31\u3055\u308c\u307e\u305b\u3093:
              • \u30b9\u30ec\u30c3\u30c9\u306e\u4e57\u3063\u53d6\u308a
              • \u30b9\u30d1\u30e0\u884c\u70ba
              • \u5546\u696d\u7684\u306a\u5e83\u544a
              • \u9732\u9aa8\u306a\u81ea\u5df1\u5ba3\u4f1d
              • \u7279\u306b\u516c\u5f0f\u306e\u4f1a\u8b70\u6642\u9593\u3084\u96c6\u4e2d\u7684\u306a\u4f1a\u8a71\u4e2d\u306b\u30aa\u30d5\u30c8\u30d4\u30c3\u30af\u306b\u9038\u8131\u3059\u308b\u3053\u3068
            • \u30aa\u30d5\u30c8\u30d4\u30c3\u30af\u306a\u4f1a\u8a71\u3092\u6df1\u3081\u308b\u305f\u3081\u306e\u3088\u308a\u9069\u5207\u306a\u5834\u6240\u3084\u6642\u9593\u3092\u767a\u8868\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002
            • \u9069\u5207\u306a\u884c\u52d5\u304c\u4f55\u304b\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          9. Lagoon\u5185\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5171\u6709\u3059\u308b\u5834\u5408\u306f\u3001\u660e\u78ba\u306a\u540c\u610f\u306e\u3082\u3068\u3067\u306e\u307f\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u5171\u6709\u306f\u614e\u91cd\u306b\u8003\u3048\u3066\u884c\u3044\u3001\u53c2\u52a0\u8005\u3092\u5acc\u304c\u3089\u305b\u305f\u308a\u3001\u50b7\u3064\u3051\u308b\u610f\u56f3\u3092\u3082\u3063\u3066\u884c\u308f\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
            • \u3053\u306e\u30d5\u30a9\u30fc\u30e9\u30e0\u306f\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u3068\u8003\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u3053\u306b\u6295\u7a3f\u3055\u308c\u305f\u3082\u306e\u306f\u8ab0\u3067\u3082\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u3001\u5b9f\u969b\u306b\u8aad\u307e\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3068\u60f3\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
            • Lagoon\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5171\u6709\u3059\u308b\u969b\u306f\u3001\u3059\u3079\u3066\u306e\u53c2\u52a0\u8005\u304b\u3089\u4e8b\u524d\u306b\u8a31\u53ef\u3092\u5f97\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u5f15\u7528\u3055\u308c\u305f\u308a\u3001\u8981\u7d04\u3055\u308c\u305f\u308a\u3001\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u304c\u64ae\u3089\u308c\u305f\u308a\u3059\u308b\u5834\u5408\u3067\u3082\u540c\u69d8\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u3001Twitter\u3084\u4ed6\u306e\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u30e1\u30c7\u30a3\u30a2\u3067\u306e\u5171\u6709\u3082\u542b\u307e\u308c\u307e\u3059\u3002 \u30d6\u30ed\u30b0\u6295\u7a3f\u3001\u8a18\u4e8b\u3001\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u306a\u3069\u3001\u3053\u308c\u3089\u306e\u5834\u6240\u306f\u8b70\u8ad6\u3084\u4f5c\u696d\u9032\u884c\u4e2d\u306e\u5834\u6240\u3067\u3059\u3002\u4f1a\u8a71\u306e\u65ad\u7247\u3092\u524a\u9664\u3059\u308b\u3068\u3001\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304c\u5931\u308f\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u7279\u306bLagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u63a8\u9032\u3059\u308b\u76ee\u7684\u304c\u306a\u3044\u5834\u5408\u3001\u8b70\u8ad6\u3092\u6b6a\u3081\u305f\u308a\u3001\u963b\u6b62\u3057\u305f\u308a\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
            • \u4e0a\u8a18\u3067\u8ff0\u3079\u305f\u901a\u308a\u3001\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u3063\u3066\u30bd\u30fc\u30b7\u30e3\u30eb\u30e1\u30c7\u30a3\u30a2\u3084\u4ed6\u306e\u30d5\u30a9\u30fc\u30e9\u30e0\u306b\u6295\u7a3f\u3059\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u6295\u7a3f\u3057\u305f\u4eba\u304b\u3089\u8a31\u53ef\u3092\u53d6\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u8a31\u53ef\u3092\u53d6\u308b\u969b\u306b\u306f\u3001\u8b58\u5225\u60c5\u5831\u3092\u524a\u9664\u3059\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u8b58\u5225\u60c5\u5831\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u3067\u3082\u3001\u8a31\u53ef\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306b\u306fDiscord\u3001Github\u3001\u305d\u306e\u4ed6\u306eLagoon\u306e\u5a92\u4f53\u304b\u3089\u306e\u5185\u5bb9\u3082\u542b\u307e\u308c\u307e\u3059\u3002
            • \u4f55\u304b\u3092\u5171\u6709\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u305f\u3060\u805e\u3044\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff01\u300c\u306d\u3048\u3001\u3053\u308c\u3092Twitter\u306b\u30b7\u30a7\u30a2\u3057\u3066\u3082\u3044\u3044\u3067\u3059\u304b\uff1f\u3042\u306a\u305f\u306b\u30af\u30ec\u30b8\u30c3\u30c8\u3092\u4ed8\u3051\u308b\u3053\u3068\u3092\u559c\u3093\u3067\u3044\u307e\u3059\uff01\u300d
            • \u53c2\u52a0\u8005\u304cLagoon\u306e\u30e2\u30c7\u30ec\u30fc\u30bf\u30fc\u306b\u30cf\u30e9\u30b9\u30e1\u30f3\u30c8\u884c\u70ba\u3092\u5831\u544a\u3059\u308b\u305f\u3081\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u8a31\u53ef\u3092\u5f97\u308b\u3053\u3068\u306a\u304f\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u516c\u306b\u307e\u305f\u306f\u79c1\u7684\u306b\u500b\u4eba\u3092\u6065\u305a\u304b\u3057\u304f\u3059\u308b\u305f\u3081\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u308b\u3053\u3068\u306f\u8a31\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u30cf\u30e9\u30b9\u30e1\u30f3\u30c8\u884c\u70ba\u306e\u5831\u544a\u306b\u306e\u307f\u9069\u7528\u3055\u308c\u307e\u3059\u3002
          10. \u5b89\u5168\u304b\u3064\u9069\u5207\u306a\u5834\u5408\u306b\u306f\u3001\u305d\u306e\u5834\u3067\u304a\u4e92\u3044\u306e\u82e6\u60c5\u3092\u89e3\u6c7a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u5b89\u5168\u3067\u3042\u308b\u5834\u5408\u3001\u5bfe\u7acb\u304c\u8d77\u3053\u3063\u305f\u5834\u6240\u3067\u660e\u78ba\u5316\u3057\u3001\u95a2\u4e0e\u3057\u3088\u3046\u3068\u52aa\u3081\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001Discord\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u3002
            • \u5bfe\u7acb\u304c\u30a8\u30b9\u30ab\u30ec\u30fc\u30c8\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u7ba1\u7406\u8005\u3084\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30de\u30cd\u30fc\u30b8\u30e3\u30fc(Alanna)\u306b\u9023\u7d61\u3059\u308b\u3002
            • \u52a9\u3051\u3092\u6c42\u3081\u308b\u3002
            • \u5bfe\u7acb\u306e\u4e3b\u984c\u304cLagoon\u3068\u306f\u95a2\u4fc2\u306a\u3044\u5834\u5408\u306f\u3001\u305d\u306e\u4f1a\u8a71\u3092\u3088\u308a\u9069\u5207\u306a\u30c1\u30e3\u30f3\u30cd\u30eb\u3078\u79fb\u52d5\u3055\u305b\u308b\u3002

          \u5bfe\u9762\u3067\u306eLagoon\u30b9\u30da\u30fc\u30b9\u306b\u304a\u3051\u308b\u8ffd\u52a0\u7684\u306a\u914d\u616e\u4e8b\u9805

          1. \u30a4\u30d9\u30f3\u30c8\u306e\u884c\u52d5\u898f\u7bc4\u304c\u3042\u308b\u5834\u5408\u306f\u305d\u308c\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u306a\u3044\u5834\u5408\u306f\u3001\u79c1\u305f\u3061\u306e\u884c\u52d5\u898f\u7bc4\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002
          2. \u4eba\u3005\u3001\u5f7c\u3089\u306e\u79fb\u52d5\u88c5\u7f6e\u3001\u307e\u305f\u306f\u4ed6\u306e\u88dc\u52a9\u6a5f\u5668\u306b\u3001\u305d\u306e\u4eba\u306e\u540c\u610f\u306a\u304f\u89e6\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u3082\u3057\u8ab0\u304b\u304c\u3042\u308b\u7279\u5b9a\u306e\u884c\u52d5\u3092\u6b62\u3081\u308b\u3088\u3046\u306b\u983c\u3093\u3060\u3089\u3001\u3059\u3050\u306b\u6b62\u3081\u3066\u304f\u3060\u3055\u3044\u3002
          3. \u4f55\u304b\u554f\u984c\u304c\u3042\u3063\u305f\u5834\u5408\u306f\u3001\u30a4\u30d9\u30f3\u30c8\u306e\u30b9\u30bf\u30c3\u30d5\u306b\u5831\u544a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 Lagoon\u30c1\u30fc\u30e0\u306e\u30e1\u30f3\u30d0\u30fc\u306b\u95a2\u3059\u308b\u554f\u984c\u306e\u5834\u5408\u306f\u3001uselagoon@amazee.io\u306b\u5831\u544a\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          Lagoon\u30c1\u30fc\u30e0\u306f\u3001Lagoon\u306e\u30b9\u30da\u30fc\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8ab0\u3067\u3082\u7d42\u4e86\u3055\u305b\u308b\u6a29\u5229\u3092\u4fdd\u7559\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/","title":"Lagoon\u306e\u9ad8\u5ea6\u306a\u6982\u5ff5","text":"

          \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Lagoon\u306e\u3088\u308a\u9ad8\u5ea6\u306a\u6982\u5ff5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002Lagoon\u3092\u4f7f\u3046\u306e\u304c\u521d\u3081\u3066\u306e\u65b9\u306f\u3001\u307e\u305aLagoon\u306e\u57fa\u672c\u6982\u5ff5\u304b\u3089\u59cb\u3081\u3066\u304f\u3060\u3055\u3044\u3002

          \u5c02\u9580\u7684\u306a\u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001\u79c1\u305f\u3061\u306eDiscord\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30e1\u30f3\u30d0\u30fc\u3084\u30e1\u30f3\u30c6\u30ca\u30fc\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-advanced/backups/","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7","text":"

          Lagoon\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u3068\u30b3\u30f3\u30c6\u30ca\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u4e21\u65b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u6a5f\u80fd\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u3001k8up operator\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30aa\u30da\u30ec\u30fc\u30bf\u306f\u3001\u3053\u308c\u3089\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u30ab\u30bf\u30ed\u30b0\u5316\u3059\u308b\u305f\u3081\u306bRestic\u3092\u5229\u7528\u3057\u3001\u901a\u5e38\u306fAWS S3\u30d0\u30b1\u30c3\u30c8\u306b\u63a5\u7d9a\u3057\u3066\u751f\u6210\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u5b89\u5168\u306a\u30aa\u30d5\u30b5\u30a4\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/backups/#production","title":"production\u74b0\u5883","text":""},{"location":"ja/concepts-advanced/backups/#_2","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb","text":"

          \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u30b3\u30f3\u30c6\u30ca\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067production\u74b0\u5883\u5185\u3067\u591c\u9593\u306b\u884c\u308f\u308c\u307e\u3059\u3002

          \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u7570\u306a\u308b\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u306e\"Backup Schedule\"\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u3067\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/backups/#_3","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u4fdd\u6301","text":"

          production\u74b0\u5883\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u4ee5\u4e0b\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306b\u5f93\u3063\u3066\u4fdd\u6301\u3055\u308c\u307e\u3059:

          • \u65e5\u6b21:7
          • \u9031\u6b21:6
          • \u6708\u6b21:1
          • \u6642\u9593\u3054\u3068:0

          \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306b\u7570\u306a\u308b\u4fdd\u6301\u671f\u9593\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u306b\u3042\u308b\"Backup Retention\"\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u3067\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/backups/#_4","title":"\u958b\u767a\u74b0\u5883","text":"

          \u958b\u767a\u74b0\u5883\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u6bce\u6669\u8a66\u307f\u3089\u308c\u307e\u3059\u304c\u3001\u3042\u304f\u307e\u3067\u30d9\u30b9\u30c8\u30a8\u30d5\u30a9\u30fc\u30c8\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002

          "},{"location":"ja/concepts-advanced/backups/#_5","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u53d6\u5f97","text":"

          Restic\u306b\u4fdd\u5b58\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306fLagoon\u5185\u3067\u8ffd\u8de1\u3055\u308c\u3001Lagoon UI\u306e\u5404\u74b0\u5883\u306e\u300c\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u300d\u30bf\u30d6\u304b\u3089\u56de\u5fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/backups/#_6","title":"\u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304a\u3088\u3073/\u307e\u305f\u306f\u30ea\u30b9\u30c8\u30a2\u4f4d\u7f6e","text":"

          Lagoon\u306f\u3001\u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eLagoon API\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\"\u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u8a2d\u5b9a\"\u304a\u3088\u3073/\u307e\u305f\u306f\"\u30ab\u30b9\u30bf\u30e0\u30ea\u30b9\u30c8\u30a2\u8a2d\u5b9a\"\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u3001\u30ab\u30b9\u30bf\u30e0\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u30ea\u30b9\u30c8\u30a2\u306e\u5834\u6240\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002

          \u5371\u967a

          \u6ce8\u610f\u3057\u3066\u9032\u3081\u3066\u304f\u3060\u3055\u3044:\u3053\u308c\u3089\u306e\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u30ec\u30d9\u30eb\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7/\u30ea\u30b9\u30c8\u30a2\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u5834\u6240\u304c\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002\u8a2d\u5b9a\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u3068\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7/\u30ea\u30b9\u30c8\u30a2\u304c\u5931\u6557\u3059\u308b\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8","text":""},{"location":"ja/concepts-advanced/base-images/#what-is-a-base-image","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3068\u306f\u4f55\u3067\u3059\u304b\uff1f","text":"

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001Lagoon\u4e0a\u3067\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u4f7f\u7528\u3067\u304d\u308b\u3001\u307e\u305f\u306f\u4f7f\u7528\u3057\u3066\u3044\u308bDocker\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u76e3\u67fb\u3055\u308c\u3066\u3044\u306a\u3044\u3082\u306e\u304c\u4e0a\u6d41\u304b\u3089\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9/\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6301\u3061\u8fbc\u307e\u308c\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u4f4e\u30ec\u30d9\u30eb\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304b\u3089\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ec\u30d9\u30eb\u306e\u30c6\u30fc\u30de\u3068\u30e2\u30b8\u30e5\u30fc\u30eb\u307e\u3067\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u74b0\u5883\u4e0a\u3067\u5fc5\u8981\u3068\u306a\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u3082\u306e\u304c\u3059\u3079\u3066\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u3069\u306e\u30b7\u30b9\u30c6\u30e0\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u3066\u3044\u308b\u304b\u304c\u308f\u304b\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u6642\u9593\u3068\u30ea\u30bd\u30fc\u30b9\u306e\u7bc0\u7d04\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u5171\u6709\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u3092\u500b\u3005\u306e\u6570\u767e\u306e\u30b5\u30a4\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          "},{"location":"ja/concepts-advanced/base-images/#derived-images","title":"\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8","text":"

          \u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3068\u306f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u62e1\u5f35\u3059\u308b\u30a4\u30e1\u30fc\u30b8\u306e\u3053\u3068\u3092\u6307\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u3044\u304f\u3064\u304b\u306e\u30d6\u30ed\u30b0\u30b5\u30a4\u30c8\u3092\u4f5c\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u79c1\u305f\u3061\u306eDrupal\u30a4\u30e1\u30fc\u30b8\u3092\u53d6\u5f97\u3057\u3001\u30d6\u30ed\u30b0\u30b5\u30a4\u30c8\u306b\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u30c6\u30fc\u30de\u3059\u3079\u3066\u3092\u542b\u3081\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3001\u305d\u306e\u30d6\u30ed\u30b0\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3079\u3066\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u6d3e\u751f\u3057\u307e\u3059\u3002

          \u3059\u3079\u3066\u306e\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u306f\u3001composer.json\u30d5\u30a1\u30a4\u30eb(Packagist\u3001Satis\u3001\u307e\u305f\u306fGitHub\u306a\u3069\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u7d4c\u7531\u3067)\u3092\u53d6\u308a\u8fbc\u3080\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u57fa\u672c\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

          \u3055\u3089\u306b\u3001\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001/build/pre_composer\u30b9\u30af\u30ea\u30d7\u30c8\u3078\u306e\u547c\u3073\u51fa\u3057\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u304c\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u30b9\u30af\u30ea\u30d7\u30c8\u3001\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306a\u3069\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u66f4\u65b0\u307e\u305f\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u308b\u3068\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5b9f\u884c\u3055\u308c\u3001pre_composer\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u305d\u306e\u5f8c\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#anatomy-of-a-base-image","title":"\u3079\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u69cb\u9020","text":"

          \u60c5\u5831

          \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306f\u3001Drupal\u3084Laravel\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u4f8b\u306b\u53d6\u308a\u4e0a\u3052\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5143\u3005Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3053\u308c\u3089\u306e\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5411\u3051\u306b\u66f8\u304b\u308c\u305f\u3082\u306e\u3067\u3059\u3002\u4ed6\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u5185\u5bb9\u3082\u30ab\u30d0\u30fc\u3059\u308b\u3088\u3046\u306b\u62e1\u5f35\u3055\u308c\u307e\u3059\u304c\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u5185\u5bb9\u306b\u95a2\u4fc2\u306a\u304f\u3001\u30d7\u30ed\u30bb\u30b9\u306f\u5909\u308f\u308a\u307e\u305b\u3093\u3002

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001Composer\u3067\u7ba1\u7406\u3055\u308c\u3001BitBucket\u3001GitHub\u3001\u307e\u305f\u306fGitLab (\u30c1\u30fc\u30e0\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u3082\u306e)\u306b\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5404\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u72ec\u81ea\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#metapackages","title":"\u30e1\u30bf\u30d1\u30c3\u30b1\u30fc\u30b8","text":"

          \u30e1\u30bf\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u3001\u8907\u6570\u306e\u4ed6\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u5305\u62ec\u3059\u308bComposer\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u4f8b\u3048\u3070\u3001Laravel\u3084Drupal\u306e\u30b3\u30a2\u30d5\u30a1\u30a4\u30eb\u3001\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3084\u30c6\u30fc\u30de\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002 \u3053\u308c\u306b\u3088\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u306b Laravel \u3084 Drupal \u306a\u3069\u3092\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002

          \u4ee5\u4e0b\u306f\u3001Laravel\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092 composer.json \u304b\u3089\u4f7f\u7528\u3057\u305f\u4f8b\u3067\u3059:

          composer.json
          \"require\": {\n    \"amazeelabs/algm_laravel_baseimage\": \"*\"\n},\n

          \u79c1\u305f\u3061\u306b\u5fc5\u7528\u306a\u306e\u306fGitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u6307\u3059\u3053\u306e\u30e1\u30bf\u30d1\u30c3\u30b1\u30fc\u30b8\u3060\u3051\u3067\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#docker-composeyml","title":"docker-compose.yml","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4ed6\u306e\u90e8\u5206\u306f docker-compose.yml \u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3001Drupal \u306e\u30a4\u30e1\u30fc\u30b8\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001MariaDB\u3001Solr\u3001Redis\u3001Varnish\u3082\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306fDrupal\u306b\u6700\u9069\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u3059\u3079\u3066docker-compose.yml\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#drupal","title":"Drupal","text":"

          Drupal\u30d9\u30fc\u30b9\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Drupal\u30b3\u30a2\u306b\u52a0\u3048\u3066\u4ee5\u4e0b\u306e\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30c8\u30c4\u30fc\u30eb\u3084\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

          • Drupal Console
          • Drush
          • Configuration installer
          • Redis
          • Poll
          • Search API
          • Search API Solr
          • Varnish Purge
          • Purge
          • Admin Toolbar
          • CDN
          • Password Policy
          • Pathauto
          • Ultimate Cron
          "},{"location":"ja/concepts-advanced/base-images/#configuration","title":"\u8a2d\u5b9a","text":"

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u3001Laravel\u3067\u4f7f\u7528\u3055\u308c\u308b\u74b0\u5883\u5909\u6570\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002

          \u3053\u308c\u3089\u306f\u4ee5\u4e0b\u306e\u5024\u3067\u3059:

          • DB_CONNECTION
          • DB_HOST
          • DB_PORT
          • DB_DATABASE
          • DB_USERNAME
          • DB_PASSWORD
          • REDIS_HOST
          • REDIS_PASSWORD
          • REDIS_PORT

          \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb(\u901a\u5e38\u306f/config\u306b\u4f4d\u7f6e\u3057\u3066\u3044\u307e\u3059)\u304c\u3053\u308c\u3089\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-advanced/base-images/#queues","title":"\u30ad\u30e5\u30fc","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u30ad\u30e5\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001artisan-worker\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u30ef\u30fc\u30ab\u30fc\u30b3\u30f3\u30c6\u30ca\u3067\u3001artisan queue:work\u306e\u5b9f\u884c\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\uff08docker-compose.yml\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\uff09

          "},{"location":"ja/concepts-advanced/base-images/#understanding-the-process-of-building-a-base-image","title":"\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306e\u7406\u89e3 \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8","text":"

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3059\u308b\u30d7\u30ed\u30bb\u30b9\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u90e8\u5206\u304c\u3042\u308a\u307e\u3059\u3002\u4e3b\u8981\u306a\u30b9\u30c6\u30c3\u30d7\u306f\u3059\u3079\u3066Makefile\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002Jenkinsfile\u306b\u306f\u3088\u308a\u30b7\u30f3\u30d7\u30eb\u306a\u30d3\u30e5\u30fc\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u898b\u308b\u3053\u3068\u3067\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u4f55\u304c\u8d77\u3053\u308b\u304b\u3092\u3088\u304f\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307b\u3068\u3093\u3069\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059(\u3053\u308c\u306f\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3059\u308b\u969b\u306b\u91cd\u8981\u3067\u3059)\u3002\u30ed\u30fc\u30ab\u30eb\u3067\u5168\u3066\u3092\u4f5c\u6210\u3057\u3001\u30c6\u30b9\u30c8\u3057\u305f\u5f8c\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3068\u3001\u5b9f\u969b\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306fJenkins\u306b\u3088\u3063\u3066\u69cb\u7bc9\u3055\u308c\u3001Harbor\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#makefile-and-build-assumptions","title":"Makefile\u3068\u30d3\u30eb\u30c9\u306e\u524d\u63d0\u6761\u4ef6","text":"

          \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u3001\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306b\u6700\u4f4e\u9650\u5fc5\u7528\u306a\u74b0\u5883\u5909\u6570\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#base-image-build-variables","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u30d3\u30eb\u30c9\u5909\u6570","text":"

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306b\u6ce8\u5165\u3055\u308c\u308b\u5909\u6570\u3068\u3001\u305d\u308c\u3092\u898b\u3064\u3051\u308b\u5834\u6240\u3067\u3059\u3002

          • BUILD_NUMBER - \u3053\u308c\u306f\u81ea\u52d5\u7684\u306bJenkins\u306b\u3088\u3063\u3066\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002
          • GIT_BRANCH - \u3053\u308c\u306fJenkins\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u81ea\u4f53\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u305d\u306e\u6642\u70b9\u3067\u30d3\u30eb\u30c9\u3055\u308c\u3066\u3044\u308b\u30d6\u30e9\u30f3\u30c1(develop\u3001main\u306a\u3069)\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002
          • DOCKER_REPO/DOCKER_HUB - \u3053\u308c\u306fJenkinsfile\u81ea\u4f53\u5185\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u3066\u751f\u6210\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u308bDocker\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30cf\u30d6\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u3002
          • DOCKER_USERNAME/DOCKER_PASSWORD - \u3053\u308c\u3089\u306f\u3001\u30d3\u30eb\u30c9\u306e\u65e9\u3044\u6bb5\u968e\u3067Docker\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u5b9f\u969b\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5909\u6570\u306fJenkins\u306e\u8a8d\u8a3c\u60c5\u5831\u5185\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306fJenkinsfile\u81ea\u4f53\u3067\u4f7f\u7528\u3055\u308c\u3001Makefile\u306e\u4e00\u90e8\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3064\u307e\u308a\u3001Jenkins\u4ee5\u5916\u306e\u5834\u6240(\u30ed\u30fc\u30ab\u30eb\u3067\u30c6\u30b9\u30c8\u3059\u308b\u306a\u3069)\u3067\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5834\u5408\u3001docker login\u3092\u624b\u52d5\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          \u5b9f\u969b\u306b\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u3067make\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u308c\u3089\u304c\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3068\u601d\u3046\u3067\u3057\u3087\u3046 - \u305f\u3068\u3048\u3070\u3001\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089make\u3092\u5b9f\u884c\u3059\u308b\u3068\u304d\u306b\u3053\u308c\u3089\u3092\u8a2d\u5b9a\u3059\u308b\u3060\u3051\u3067\u3082\u69cb\u3044\u307e\u305b\u3093:

          \u30ed\u30fc\u30ab\u30eb\u3067make\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b
          GIT_BRANCH=example_branch_name DOCKER_HUB=the_docker_hub_the_images_are_pushed_to DOCKER_REPO=your_docker_repo_here BUILD_NUMBER=<some_integer> make images_remove\n
          "},{"location":"ja/concepts-advanced/base-images/#makefile-targets","title":"Makefile targets","text":"

          \u6700\u3082\u91cd\u8981\u306a\u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:

          • images_build : \u74b0\u5883\u5909\u6570\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u753b\u50cf\u3092\u30d3\u30eb\u30c9\u3057\u3066\u30bf\u30b0\u3092\u4ed8\u3051\u3066\u516c\u958b\u3057\u307e\u3059\u3002
          • images_publish : \u30d3\u30eb\u30c9\u3055\u308c\u305f\u753b\u50cf\u3092Docker\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
          • images_start : \u30c6\u30b9\u30c8\u306a\u3069\u306e\u305f\u3081\u306b\u30a4\u30e1\u30fc\u30b8\u3092\u958b\u59cb\u3057\u307e\u3059\u3002
          • images_test:\u30a4\u30e1\u30fc\u30b8\u306b\u5bfe\u3057\u3066\u57fa\u672c\u7684\u306a\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • images_remove:\u30d3\u30eb\u30c9\u74b0\u5883\u5909\u6570\u304c\u4e0e\u3048\u3089\u308c\u308b\u3068\u3001\u4ee5\u524d\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u524a\u9664\u3057\u307e\u3059\u3002
          "},{"location":"ja/concepts-advanced/base-images/#example-workflow-for-building-a-new-release-of-a-base-image","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30ea\u30ea\u30fc\u30b9\u3092\u30d3\u30eb\u30c9\u3059\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u4f8b","text":"

          \u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u307b\u3068\u3093\u3069\u306f\u3001\u69d8\u3005\u306a\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u9593\u3067\u5171\u6709\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u4e3b\u306b\u4e0a\u8a18\u3067\u8aac\u660e\u3057\u305fMakefile\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002

          1. Docker Login - Docker\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3001Harbor\u306eURL\u304cDocker\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u6e21\u3055\u308c\u307e\u3059\u3002
          2. Docker Build - make images_build\u30b9\u30c6\u30c3\u30d7\u304c\u73fe\u5728\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u4ee5\u4e0b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u307e\u3059:
            1. \u3059\u3079\u3066\u306e\u74b0\u5883\u5909\u6570\u304c\u30d3\u30eb\u30c9\u306e\u305f\u3081\u306b\u6e96\u5099\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
            2. docker-compose build\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u73fe\u5728\u306eGit\u30d6\u30e9\u30f3\u30c1\u304b\u3089\u3044\u304f\u3064\u304b\u306e\u65b0\u3057\u3044Docker\u30a4\u30e1\u30fc\u30b8\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002
          3. Image Test - \u3053\u308c\u306b\u3088\u308amake images_test\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u30c6\u30b9\u30c8\u3055\u308c\u308b\u30a4\u30e1\u30fc\u30b8\u306b\u3088\u308a\u7570\u306a\u308a\u307e\u3059\u3002\u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001\u3053\u308c\u306f\u30a4\u30e1\u30fc\u30b8\u3092\u958b\u59cb\u3057\u3001\u4f55\u3089\u304b\u306e\u65b9\u6cd5\u3067\u5bfe\u8a71\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u975e\u5e38\u306b\u76f4\u611f\u7684\u306a\u30c6\u30b9\u30c8\u3067\u3059(Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u30ea\u30b9\u30c8\u8868\u793a\u306a\u3069)\u3002
          4. Docker Push - \u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001images_publish\u306emake\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u542b\u307e\u308c\u308b\u30ed\u30b8\u30c3\u30af\u304c\u5b9f\u884c\u3055\u308c\u3001\u305d\u306e\u7d50\u679c\u3068\u3057\u3066\u751f\u6210\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u306b\u30bf\u30b0\u304c\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002 \u30b9\u30c6\u30c3\u30d72\u306eDocker Build\u3067\u305d\u308c\u3089\u3092Harbor\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3064\u3044\u3066\u306f\u3001\u672c\u30ac\u30a4\u30c9\u306e\u4ed6\u306e\u5834\u6240\u3067\u8a73\u3057\u304f\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          5. Docker Clean Images - images_remove\u3068\u3044\u3046make\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u5b9f\u884c\u3057\u3001\u3053\u308c\u3089\u304cHarbor\u306b\u3042\u308b\u305f\u3081\u3001\u65b0\u3057\u304f\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092Docker\u30db\u30b9\u30c8\u304b\u3089\u5358\u7d14\u306b\u524a\u9664\u3057\u307e\u3059\u3002
          "},{"location":"ja/concepts-advanced/base-images/#releasing-a-new-version-of-a-base-image","title":"\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30ea\u30ea\u30fc\u30b9","text":"

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30ea\u30ea\u30fc\u30b9\u3059\u308b\u7406\u7531\u306f\u591a\u3005\u3042\u308a\u307e\u3059\u3002Drupal\u3084Laravel\u3001Node.js\u306a\u3069\u306e\u30a4\u30e1\u30fc\u30b8\u3067\u306f\u3001\u6a5f\u80fd\u3084\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u305f\u3081\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u3084\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u307e\u305f\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u307e\u305f\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u30d0\u30f3\u30c9\u30eb\u3055\u308c\u3066\u3044\u308b\u57fa\u672c\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001PHP\u3084Node.js\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u306a\u3069\u3067\u3059\u3002\u307e\u305f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u3066\u3044\u308b\u5b9f\u969b\u306e\u57fa\u672c\u7684\u306a\u30a4\u30e1\u30fc\u30b8\u3092\u66f4\u65b0\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002

          \u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d9\u30fc\u30b9\u3068\u306a\u308b\u30a4\u30e1\u30fc\u30b8\u306f\u3001Lagoon\u30c1\u30fc\u30e0\u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u3066\u3044\u308b\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306f\u6708\u306b\u4e00\u56de(\u307e\u305f\u306f\u305d\u308c\u4ee5\u4e0a)\u306e\u983b\u5ea6\u3067\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u304c\u66f4\u65b0\u3055\u308c\u305f\u3068\u304d\u3001\u3042\u306a\u305f\u306f\u30a2\u30c3\u30d7\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u30d0\u30f3\u30c9\u30eb\u3055\u308c\u3066\u3044\u308b\u5909\u66f4\u3068\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u53d6\u308a\u5165\u308c\u308b\u305f\u3081\u306b\u3001\u81ea\u5206\u81ea\u8eab\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u307e\u3059\u3002 Drupal8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u30ea\u30ea\u30fc\u30b9\u3092\u66f4\u65b0\u304a\u3088\u3073\u30bf\u30b0\u4ed8\u3051\u3057\u307e\u3059\u3002\u6211\u3005\u306f\u65b0\u3057\u3044\u30e2\u30b8\u30e5\u30fc\u30eb(ClamAV)\u3092\u57fa\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002Drupal\u3067\u30c7\u30e2\u3092\u884c\u3046\u306e\u306f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u4e2d\u3067\u6700\u3082\u8a2d\u5b9a\u304c\u8907\u96d1\u3060\u304b\u3089\u3067\u3059\u3002\u3059\u3079\u3066\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u5171\u901a\u3059\u308b\u624b\u9806\u3092\u4ee5\u4e0b\u306b\u8a18\u8f09\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#step-1-pull-down-the-base-image-locally","title":"\u30b9\u30c6\u30c3\u30d71 - \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u30ed\u30fc\u30ab\u30eb\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b","text":"

          \u3053\u308c\u306f\u5358\u306bGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30ed\u30fc\u30ab\u30eb\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u3067\u3059\u3002Drupal8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u5834\u5408\u3067\u306f\u3001Bitbucket\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u306e\u3067\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

          Clone Git repo.
          git clone ssh://git@bitbucket.biscrum.com:7999/webpro/drupal8_base_image.git\n

          "},{"location":"ja/concepts-advanced/base-images/#step-2-make-the-changes-to-the-repository","title":"\u30b9\u30c6\u30c3\u30d72 - \u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b","text":"

          \u60c5\u5831

          \u3053\u3053\u3067\u793a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306fDrupal 8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u7279\u6709\u306e\u3082\u306e\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u3042\u3089\u3086\u308b\u5909\u66f4(\u30d5\u30a1\u30a4\u30eb\u306e\u8ffd\u52a0\u3001\u57fa\u672c\u7684\u306aDocker\u30a4\u30e1\u30fc\u30b8\u306e\u5909\u66f4\u306a\u3069)\u306f\u3059\u3079\u3066\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u5bfe\u3057\u3066\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u884c\u308f\u308c\u307e\u3059\u3002

          \u6211\u3005\u306e\u4f8b\u3067\u306f\u3001ClamAV\u30e2\u30b8\u30e5\u30fc\u30eb\u3092Drupal 8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u95a2\u4e0e\u3057\u307e\u3059\u3002\u6700\u521d\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5fc5\u8981\u3068\u3059\u308b\u3053\u3068\u3067\u3001\u3053\u308c\u306b\u3088\u308a\u6211\u3005\u306ecomposer.json\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306fcomposer require\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u884c\u308f\u308c\u307e\u3059\u3002

          \u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059: Composer require\u3067\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3002

          composer require drupal/clamav\n

          Composer require\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u306fcomposer.json\u30d5\u30a1\u30a4\u30eb\u306b\u8868\u793a\u3055\u308c\u308b\u3079\u304d\u3067\u3059\u3002 \u3053\u3053\u3067\u306f\u3001composer.json\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304d\u3001\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30ea\u30b9\u30c8\u3092\u898b\u3066\u3001ClamAV\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u30ea\u30b9\u30c8\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#step-22-ensure-that-the-required-drupal-module-is-enabled-in-template-based-derived-images","title":"\u30b9\u30c6\u30c3\u30d72.2 - \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d9\u30fc\u30b9\u306e\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u5fc5\u8981\u306aDrupal\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b","text":"

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u3055\u308c\u305f\u4efb\u610f\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d9\u30fc\u30b9\u306e\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u3092Lagoon Bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u884c\u308f\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u5177\u4f53\u7684\u306b\u306f\u3001dependencies\u30bb\u30af\u30b7\u30e7\u30f3\u306elagoon_bundle.info.yml\u30d5\u30a1\u30a4\u30eb\u306b\u4f9d\u5b58\u6027\u3068\u3057\u3066\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u8981\u6c42\u3057\u307e\u3059\u3002Lagoon Bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u5f37\u5236\u3059\u308b\u305f\u3081\u3060\u3051\u306b\u5b58\u5728\u3059\u308b\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002 \u3053\u3053\u3067\u306f\u3001web/modules/contrib/lagoon/lagoon_bundle/lagoon_bundle.info.yml\u3092\u958b\u304d\u3001\u4f9d\u5b58\u95a2\u4fc2\u3068\u3057\u3066clamav:clamav\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

          \u3053\u308c\u306b\u4f9d\u5b58\u95a2\u4fc2\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001\u6d3e\u751f\u3057\u305f\u30a4\u30e1\u30fc\u30b8\u4e0a\u3067Lagoon Bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u306b\u306a\u308b\u305f\u3073\u306b\u3001\u305d\u306e\u4f9d\u5b58\u95a2\u4fc2(\u3053\u306e\u5834\u5408\u3001\u65b0\u305f\u306b\u8ffd\u52a0\u3055\u308c\u305fClamAV\u30e2\u30b8\u30e5\u30fc\u30eb)\u3082\u6709\u52b9\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u6642\u306blagoon_bundle\u3092\u6d3e\u751f\u30a4\u30e1\u30fc\u30b8\u3067\u6709\u52b9\u306b\u3059\u308b\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u5f37\u5236\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#step-23-test","title":"\u30b9\u30c6\u30c3\u30d72.3 - \u30c6\u30b9\u30c8","text":"

          \u3053\u308c\u306f\u3042\u306a\u305f\u304c\u4f55\u3092\u30c6\u30b9\u30c8\u3057\u3066\u3044\u308b\u304b\u306b\u3088\u308a\u307e\u3059\u3002ClamAV\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u5834\u5408\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3067\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u3001Lagoon Bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u5316\u3055\u308c\u305f\u3068\u304d\u306bClamAV\u3082\u6709\u52b9\u5316\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3067\u3059\u3002 \u3053\u3053\u3067\u306f\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u304c/app/web/modules/contrib\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002

          \u305d\u3057\u3066\u3001lagoon_bundle\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u5316\u3059\u308b\u3068\u304d\u306b\u3001clamav\u3082\u6709\u52b9\u5316\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002 Drush\u3067\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6709\u52b9\u5316\u3059\u308b\u3002

          drush pm-enable lagoon_bundle -y\n

          \u8b66\u544a

          \u4e0a\u8a18\u306e\u30b3\u30f3\u30c6\u30ca\u3067JWT\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308b\u3067\u3057\u3087\u3046\u3002\u4e0a\u306e\u30c7\u30e2\u3067\u306f\u3053\u306e\u30a8\u30e9\u30fc\u306f\u7121\u8996\u3057\u3066\u304b\u307e\u3044\u307e\u305b\u3093\u3002\u80cc\u666f\u3068\u3057\u3066\u3001\u3042\u306a\u305f\u304c\u4f5c\u696d\u3057\u3066\u3044\u308b\u30b5\u30a4\u30c8\u306bLagoon\u74b0\u5883\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u3053\u306e\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

          \u30c6\u30b9\u30c8\u304c\u7d42\u4e86\u3057\u305f\u306e\u3067\u3001\u30a4\u30e1\u30fc\u30b8\u3092\u30bf\u30b0\u4ed8\u3051\u3057\u3066\u30d3\u30eb\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#step-3-tagging-images","title":"\u30b9\u30c6\u30c3\u30d73 - \u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30b0\u4ed8\u3051","text":"

          \u30a4\u30e1\u30fc\u30b8\u306f\u3001Git\u30bf\u30b0\u306b\u57fa\u3065\u3044\u3066\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3055\u308c\u307e\u3059 - \u3053\u308c\u3089\u306f\u6a19\u6e96\u7684\u306a\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0(semver)\u306e\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3046\u3079\u304d\u3067\u3059\u3002\u3059\u3079\u3066\u306e\u30bf\u30b0\u306f vX.Y.Z \u306e\u69cb\u9020\u3092\u6301\u3064\u3079\u304d\u3067\u3042\u308a\u3001X\u3001Y\u3001Z\u306f\u6574\u6570\u3067\u3059(\u6b63\u78ba\u306b\u306fX.Y.Z\u81ea\u4f53\u304c\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3042\u308a\u3001vX.Y.Z\u306f\u30bf\u30b0\u3067\u3059)\u3002\u3053\u308c\u306f\u30a4\u30e1\u30fc\u30b8\u30bf\u30b0\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u306e\u3067\u5fc5\u305a\u5f93\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          \u3053\u306e\u4f8b\u3067\u306f\u3001ClamAV\u3092\u8ffd\u52a0\u3057\u305f\u3053\u3068\u3092\u793a\u3059Drupal8\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30bf\u30b0\u4ed8\u3051\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#here-we-demonstrate-how-to-tag-an-image","title":"\u3053\u3053\u3067\u306f\u3001\u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30b0\u4ed8\u3051\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059","text":"

          \u79c1\u305f\u3061\u306f\u3001git log\u3092\u4f7f\u7528\u3057\u3066\u3001\u901a\u5e38\u306e\u30b3\u30df\u30c3\u30c8\u3084\u30d7\u30c3\u30b7\u30e5\u3068\u540c\u3058\u3088\u3046\u306b\u3001\u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8(\u3057\u304b\u3057\u30d7\u30c3\u30b7\u30e5\u306f\u3057\u306a\u3044)\u3057\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002

          1. \u307e\u3060\u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8\u3057\u3066\u3044\u306a\u3051\u308c\u3070\u3001\u30b3\u30df\u30c3\u30c8\u3057\u307e\u3059\u3002
          2. \u6b21\u306b\u3001git tag\u3092\u4f7f\u7528\u3057\u3066\u3001\u3069\u306e\u30bf\u30b0\u306b\u3044\u308b\u306e\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
          3. \u6b21\u306b\u3001git tag -a v0.0.9 -m \u201cAdds clamAV to base.\u201d\u3092\u4f7f\u7528\u3057\u3066\u30bf\u30b0\u4ed8\u3051\u3057\u307e\u3059\u3002
            1. _git -a, --annotate\u3092\u4f7f\u3046\u3068 \u7121\u7f72\u540d\u306e\u6ce8\u91c8\u4ed8\u304d\u30bf\u30b0\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
          4. \u6b21\u306b\u3001git push --tags\u3067\u30bf\u30b0\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
          5. \u6700\u5f8c\u306b\u3001git push\u3067\u5168\u3066\u306e\u5909\u66f4\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002

          \u5371\u967a

          \u30bf\u30b0\u306f\u305d\u308c\u81ea\u4f53\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u660e\u793a\u7684\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\uff01

          "},{"location":"ja/concepts-advanced/base-images/#how-git-tags-map-to-image-tags","title":"Git\u306e\u30bf\u30b0\u304c\u30a4\u30e1\u30fc\u30b8\u306e\u30bf\u30b0\u306b\u3069\u306e\u3088\u3046\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u308b\u304b","text":"

          \u5371\u967a

          \u30d3\u30eb\u30c9\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u3088\u308a\u307e\u3059\u304c\u3001\u307b\u307c\u78ba\u5b9f\u306bdevelop\u30d6\u30e9\u30f3\u30c1\u7d4c\u7531\u3067\u5909\u66f4\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u3001\u305d\u308c\u3092main\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3059\u308b\u3067\u3057\u3087\u3046\u3002

          \u3053\u3053\u3067\u899a\u3048\u3066\u304a\u304f\u3079\u304d\u91cd\u8981\u306a\u70b9\u306f\u3001Jenkins\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001\u6700\u65b0\u306e\u30b3\u30df\u30c3\u30c8\u30bf\u30b0\u306b\u57fa\u3065\u3044\u3066\u30a4\u30e1\u30fc\u30b8\u3092\u30bf\u30b0\u4ed8\u3051\u3059\u308b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002

          \u30a4\u30e1\u30fc\u30b8\u306f\u4ee5\u4e0b\u306e\u30eb\u30fc\u30eb\u3067\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3001\u3053\u308c\u306b\u8a72\u5f53\u3059\u308b\u3082\u306e\u3054\u3068\u306b\u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u307e\u3059:

          1. main\u30d6\u30e9\u30f3\u30c1\u304c\u30d3\u30eb\u30c9\u3055\u308c\u308b\u3068\u3001latest\u3068\u3057\u3066\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u307e\u3059\u3002
          2. develop\u30d6\u30e9\u30f3\u30c1\u304c\u30d3\u30eb\u30c9\u3055\u308c\u308b\u3068\u3001development\u3068\u3057\u3066\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u307e\u3059\u3002
          3. \u30d3\u30eb\u30c9\u3055\u308c\u308b\u30b3\u30df\u30c3\u30c8\u304c\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3066\u3044\u308c\u3070\u3001\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u306f\u305d\u306e\u30b3\u30df\u30c3\u30c8\u306e\u30bf\u30b0\u4ed8\u3051\u3067\u30d3\u30eb\u30c9\u3055\u308c\u307e\u3059\u3002
            1. \u4e0a\u3067\u793a\u3057\u305f\u3088\u3046\u306b\u3001\u3053\u308c\u304c\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30ea\u30ea\u30fc\u30b9\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002\u307e\u305f\u3001\u4efb\u610f\u306e\u30bf\u30b0\u3067\u30a2\u30c9\u30db\u30c3\u30af\u306a\u30d3\u30eb\u30c9\u3092\u884c\u3046\u305f\u3081\u306b\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u30bf\u30b0\u540d\u306b\u306f\u5341\u5206\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306f\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u306e\u30bf\u30b0\u3067\u306e\u307f\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          "},{"location":"ja/concepts-advanced/base-images/#step-4-building-the-new-base-images","title":"\u30b9\u30c6\u30c3\u30d74 - \u65b0\u3057\u3044\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9","text":"

          \u60c5\u5831

          \u4e00\u822c\u7684\u306b\u306f\u3001\u81ea\u52d5\u30d3\u30eb\u30c9\u306e\u305f\u3081\u306e\u30c8\u30ea\u30ac\u30fc\u30b9\u30c8\u30e9\u30c6\u30b8\u30fc\u3092\u3053\u3053\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u305d\u308c\u306f\u3042\u306a\u305f\u306e\u30cb\u30fc\u30ba\u3084\u8a2d\u5b9a\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u305f\u3081\u3001\u3053\u3053\u3067\u306f\u624b\u52d5\u3067\u30d3\u30eb\u30c9\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

          1. \u3042\u306a\u305f\u306eLagoon Jenkins\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002
          2. \u4f5c\u696d\u4e2d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8(\u3053\u306e\u5834\u5408\u3001AIOBI Drupal 8 Base)\u3092\u9078\u629e\u3057\u307e\u3059\u3002
          3. \u30d3\u30eb\u30c9\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
          4. \u300cBuild Now\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002

          \u3053\u308c\u306b\u3088\u308a\u3001\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u304c\u958b\u59cb\u3055\u308c\u3001\u6210\u529f\u3059\u308c\u3070\u65b0\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u3092Harbor\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002

          \u30d3\u30eb\u30c9\u304c\u6210\u529f\u3057\u306a\u3044\u5834\u5408\u306f\u3001\u30d3\u30eb\u30c9\u81ea\u4f53\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30ed\u30b0\u3092\u8aad\u307f\u3001\u3069\u3053\u3067\u5931\u6557\u3057\u305f\u304b\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u4e0b\u306eHarbor\u304b\u3089\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3067\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u79c1\u305f\u3061\u304cJenkins\u3067\u30d3\u30eb\u30c9\u3057\u305f\u3070\u304b\u308a\u306e\u30a4\u30e1\u30fc\u30b8\u306fHarbor\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u3001\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u305d\u308c\u304cv0.0.9\u3068\u30bf\u30b0\u4ed8\u3051\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u305d\u306e\u30bf\u30b0\u306e\u3064\u3044\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u79c1\u305f\u3061\u306fmain\u30d6\u30e9\u30f3\u30c1\u3092\u30d3\u30eb\u30c9\u3057\u305f\u306e\u3067\u3001\u300clatest\u300d\u30a4\u30e1\u30fc\u30b8\u3082\u30d3\u30eb\u30c9\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u6bb5\u968e\u3067\u306f\u3001v0.0.9\u3068\u300clatest\u300d\u30a4\u30e1\u30fc\u30b8\u306f\u540c\u4e00\u3067\u3059\u3002

          "},{"location":"ja/concepts-advanced/base-images/#acknowledgement","title":"\u8b1d\u8f9e","text":"

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306e\u69cb\u9020\u306f\u3001\u5b9f\u969b\u306b\u306f\u3001 Denpal\u306e\u30d5\u30a9\u30fc\u30af\u3067\u3059\u3002\u3053\u308c\u306f\u5143\u306eDrupal Composer Template\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u304c\u3001Lagoon(\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u307e\u305f\u306f\u30db\u30b9\u30c8\u3055\u308c\u305fLagoon)\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u3059\u3079\u3066\u3092\u542b\u3093\u3067\u3044\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/environment-idling/","title":"\u74b0\u5883\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0(\u30aa\u30d7\u30b7\u30e7\u30f3)","text":""},{"location":"ja/concepts-advanced/environment-idling/#_2","title":"\u74b0\u5883\u30a2\u30a4\u30c9\u30e9\u30fc\u3068\u306f\u4f55\u3067\u3059\u304b\uff1f","text":"

          Lagoon\u306f\u3001Aergia\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc(lagoon-remote\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u3059)\u3092\u5229\u7528\u3057\u3066\u3001\u4e00\u5b9a\u671f\u9593\u4f7f\u7528\u3055\u308c\u3066\u3044\u306a\u3044\u74b0\u5883\u3092\u81ea\u52d5\u7684\u306b\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001Kubernetes\u30af\u30e9\u30b9\u30bf\u306e\u8ca0\u8377\u3092\u8efd\u6e1b\u3057\u3001\u5b9f\u969b\u306b\u4f7f\u7528\u4e2d\u306e\u672c\u756a\u74b0\u5883\u3068\u958b\u767a\u74b0\u5883\u306e\u5168\u4f53\u7684\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306b\u884c\u308f\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/environment-idling/#_3","title":"\u74b0\u5883\u306f\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u3059\u304b\uff1f","text":"

          \u74b0\u5883\u30a2\u30a4\u30c9\u30e9\u30fc\u306b\u306f\u591a\u304f\u306e\u7570\u306a\u308b\u8a2d\u5b9a\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u6a19\u6e96\u7684\u306aLagoon\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u793a\u3057\u307e\u3059(\u3053\u308c\u3089\u306f\u3042\u306a\u305f\u306eLagoon\u3067\u306f\u5168\u304f\u7570\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001Lagoon\u7ba1\u7406\u8005\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff01)

          • \u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u306f4\u6642\u9593\u3054\u3068\u306b\u8a66\u307f\u3089\u308c\u307e\u3059\u3002
          • \u672c\u756a\u74b0\u5883\u306f\u6c7a\u3057\u3066\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u305b\u3093\u3002
          • CLI\u30dd\u30c3\u30c9\u306f\u3001cron\u30b8\u30e7\u30d6\u304c\u542b\u307e\u308c\u3066\u304a\u3089\u305a\u3001\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u63a5\u7d9a\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u3067\u306a\u3044\u5834\u5408\u306b\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u3059\u3002
          • \u4ed6\u306e\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30dd\u30c3\u30c9\u306f\u3001\u74b0\u5883\u4e0a\u3067\u904e\u53bb4\u6642\u9593\u306e\u9593\u306b\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u304c\u306a\u304b\u3063\u305f\u5834\u5408\u306b\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u3059\u3002
          • \u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d3\u30eb\u30c9\u304c\u9032\u884c\u4e2d\u3067\u3042\u308c\u3070\u3001\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u306f\u884c\u308f\u308c\u307e\u305b\u3093\u3002
          "},{"location":"ja/concepts-advanced/environment-idling/#_4","title":"\u74b0\u5883\u306f\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u304b\u3089\u89e3\u9664\u3055\u308c\u307e\u3059\u304b\uff1f","text":"

          Aergia\u306f\u3001\u4efb\u610f\u306e\u74b0\u5883\u304c\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u3068\u81ea\u52d5\u7684\u306b\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u3092\u89e3\u9664\u3057\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u74b0\u5883\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3060\u3051\u3067\u74b0\u5883\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002\u540c\u69d8\u306b\u3001\u74b0\u5883\u3078\u306eSSH\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3059\u308b\u3068\u3001\u30b5\u30fc\u30d3\u30b9\u3082\u518d\u958b\u3057\u307e\u3059\u3002

          \u30a2\u30f3\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u306f\u6570\u79d2\u304b\u304b\u308a\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001Kubernetes\u30af\u30e9\u30b9\u30bf\u306f\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3089\u3067\u3059\u3002\u3053\u306e\u9593\u3001\u8a2a\u554f\u8005\u306b\u306f\u3001\u73fe\u5728\u81ea\u5206\u306e\u74b0\u5883\u304c\u8d77\u52d5\u4e2d\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3059\u5f85\u6a5f\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/environment-idling/#idler","title":"Idler\u304c\u79c1\u306e\u74b0\u5883\u3092\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u3057\u306a\u3044\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

          \u306f\u3044\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8(\u3059\u3079\u3066\u306e\u74b0\u5883\u306b\u5f71\u97ff)\u3068\u74b0\u5883(1\u3064\u306e\u74b0\u5883\u306e\u307f\u3092\u5bfe\u8c61\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408)\u306bautoIdle\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u3042\u308a\u3001\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u304c\u884c\u308f\u308c\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u30021\u306e\u5024\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/\u74b0\u5883\u304c\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u306e\u5bfe\u8c61\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c0\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u74b0\u5883\u304c0\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u3066\u3082\u3001\u74b0\u5883\u306f\u6c7a\u3057\u3066\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306b\u306a\u308a\u307e\u305b\u3093\u3002 \u30c7\u30d5\u30a9\u30eb\u30c8\u306f\u5e38\u306b1(\u30a2\u30a4\u30c9\u30ea\u30f3\u30b0\u304c\u6709\u52b9)\u3067\u3059\u3002

          \u3053\u308c\u3089\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/\u74b0\u5883\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a2d\u5b9a\u65b9\u6cd5\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u76f8\u8ac7\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-advanced/environment-types/","title":"\u74b0\u5883\u306e\u7a2e\u985e","text":"

          Lagoon\u306f\u73fe\u5728\u3001production(\u672c\u756a\u74b0\u5883)\u3068development(\u958b\u767a\u74b0\u5883)\u306e2\u3064\u306e\u7570\u306a\u308b\u74b0\u5883\u30bf\u30a4\u30d7\u3092\u533a\u5225\u3057\u3066\u3044\u307e\u3059\u3002

          Lagoon GraphQL API\u3092\u901a\u3058\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u969b\u306b\u306f\u3001productionEnvironment\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Lagoon\u304c\u5b9f\u884c\u3059\u308b\u3059\u3079\u3066\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u3001\u73fe\u5728\u306e\u74b0\u5883\u540d\u304cproductionEnvironment\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3068\u4e00\u81f4\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002\u3082\u3057\u305d\u3046\u3067\u3042\u308c\u3070\u3001Lagoon\u306f\u3053\u306e\u74b0\u5883\u3092production\u74b0\u5883\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u307e\u3059\u3002\u3053\u308c\u306f2\u3064\u306e\u5834\u6240\u3067\u884c\u308f\u308c\u307e\u3059:

          1. GraphQL API\u81ea\u4f53\u5185\u3002
          2. \u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u306eLAGOON_ENVIRONMENT_TYPE\u3068\u3044\u3046\u540d\u524d\u306e\u74b0\u5883\u5909\u6570\u3002

          \u3053\u306e2\u3064\u3060\u3051\u3067\u3059\u3002Lagoon\u81ea\u4f53\u306fdevelopment\u3068production\u306e\u74b0\u5883\u3092\u307e\u3063\u305f\u304f\u540c\u3058\u3088\u3046\u306b\u6271\u3044\u307e\u3059(\u6700\u7d42\u7684\u306b\u306f\u74b0\u5883\u306e\u9055\u3044\u3092\u3067\u304d\u308b\u3060\u3051\u5c11\u306a\u304f\u3059\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059 - \u305d\u308c\u304cLagoon\u306e\u7f8e\u3057\u3055\u3067\u3059)\u3002

          \u3053\u306e\u60c5\u5831\u3092\u4f7f\u7528\u3059\u308b\u3082\u306e\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059:

          • \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001development\u74b0\u5883\u306f\u30d2\u30c3\u30c8\u304c4\u6642\u9593\u306a\u3044\u5834\u5408\u306b\u4f11\u6b62\u72b6\u614b\u306b\u306a\u308a\u307e\u3059(\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3001\u81ea\u52d5\u7684\u306b\u8d77\u52d5\u3057\u307e\u3059)\u3002\u307e\u305f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b1\u3064\u305a\u3064\u306e\u74b0\u5883\u3067\u81ea\u52d5\u4f11\u6b62\u3092\u7121\u52b9\u306b\u3059\u308b\u3088\u3046\u4f9d\u983c\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\uff01
          • \u30c7\u30d5\u30a9\u30eb\u30c8\u306eDrupal settings.php\u30d5\u30a1\u30a4\u30eb\u306f\u3001development.settings.php\u3068 production.settings.php\u3068\u3044\u3046\u8ffd\u52a0\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u74b0\u5883\u30bf\u30a4\u30d7\u3054\u3068\u306b\u7570\u306a\u308b\u8a2d\u5b9a\u3084\u69cb\u6210\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002
          • \u3082\u3057\u3001\u3042\u306a\u305f\u304cproduction\u74b0\u5883\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883(\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u307e\u305f\u306fREST\u7d4c\u7531\u3067)\u3092\u524a\u9664\u3059\u308b\u306a\u3089\u3001Lagoon\u306f\u8aa4\u3063\u3066\u524a\u9664\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u306b\u62d2\u5426\u3057\u307e\u3059\u3002production\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u306b\u306f\u3001API\u3067productionEnvironment\u3092\u5909\u66f4\u3059\u308b\u304b\u3001REST API\u306ePOST\u30da\u30a4\u30ed\u30fc\u30c9\u3067forceDeleteProductionEnvironment: true\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u7528\u304c\u3042\u308a\u307e\u3059\u3002
          • Lagoon\u306e\u7ba1\u7406\u8005\u306f\u3001production\u74b0\u5883\u60c5\u5831\u3092\u8ffd\u52a0\u306e\u76ee\u7684\u3067\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001amazee.io\u3067\u306f\u3001\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u4fa1\u683c\u3092\u8a08\u7b97\u3059\u308b\u305f\u3081\u306b\u3001production\u74b0\u5883\u306e\u30d2\u30c3\u30c8\u6570\u3060\u3051\u3092\u8a08\u7b97\u3057\u3066\u3044\u307e\u3059\u3002
          "},{"location":"ja/concepts-advanced/environment-variables/","title":"\u74b0\u5883\u5909\u6570","text":"

          API\u30c8\u30fc\u30af\u30f3\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3092\u74b0\u5883\u5909\u6570\u306b\u4fdd\u5b58\u3059\u308b\u3053\u3068\u306f\u4e00\u822c\u7684\u3067\u3059\u3002

          \u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3046\u3068\u3001\u3053\u308c\u3089\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u306f\u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308a\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u3001\u5404\u74b0\u5883\u304c\u74b0\u5883\u5909\u6570\u307e\u305f\u306f.env\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u5225\u306e\u74b0\u5883\u5909\u6570\u30bb\u30c3\u30c8\u3092\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002

          \u74b0\u5883\u5909\u6570\u306b\u306fDockerfile\u307e\u305f\u306f\u30e9\u30f3\u30bf\u30a4\u30e0\u6642(API\u74b0\u5883\u5909\u6570\u7d4c\u7531)\u306e\u3044\u305a\u308c\u304b\u3067\u5b9a\u7fa9\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308b\u305f\u3081\u512a\u5148\u9806\u4f4d\u304c\u3042\u308a\u3001\u3088\u308a\u4f4e\u3044\u6570\u5b57\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u304c\u512a\u5148\u3055\u308c\u307e\u3059\u3002

          1. \u74b0\u5883\u5909\u6570(Lagoon API\u7d4c\u7531\u3067\u5b9a\u7fa9) - \u74b0\u5883\u56fa\u6709\u3002
          2. \u74b0\u5883\u5909\u6570(Lagoon API\u7d4c\u7531\u3067\u5b9a\u7fa9) - \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u3002
          3. Dockerfile\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570(ENV\u30b3\u30de\u30f3\u30c9)\u3002
          4. .lagoon.env.\u306e$LAGOON_GIT_BRANCH\u307e\u305f\u306f.lagoon.env.\u306e$LAGOON_GIT_SAFE_BRANCH\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570(\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u3001$LAGOON_GIT_BRANCH\u3068$LAGOON_GIT_SAFE_BRANCH\u304c\u3053\u306eDocker\u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3068\u4e00\u81f4\u3059\u308b\u540d\u524d\u3067\u3042\u308b\u5834\u5408\u3001\u3053\u308c\u3089\u306e\u5024\u3092\u3053\u306e\u7279\u5b9a\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u5909\u6570\u306b\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002\uff09
          5. .lagoon.env\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570(\u5b58\u5728\u3059\u308b\u5834\u5408)\u3001\u3053\u308c\u3092\u5168\u3066\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u5909\u6570\u306e\u4e0a\u66f8\u304d\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
          6. .env\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u3002
          7. .env.defaults\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u3002

          .lagoon.env.\u306e$LAGOON_GIT_BRANCH\u3001.lagoon.env.\u306e$LAGOON_GIT_SAFE_BRANCH\u3001.env\u3001\u305d\u3057\u3066 .env.defaults\u306f\u3001\u5168\u3066\u3001\u5404\u30b3\u30f3\u30c6\u30ca\u81ea\u4f53\u306b\u3088\u3063\u3066\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4e00\u90e8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u308b\u969b\u306b\u30bd\u30fc\u30b9\u5316\u3055\u308c\u307e\u3059\u3002\u305d\u308c\u3089\u306fLagoon\u3067\u306f\u306a\u304f\u3001\u30b3\u30f3\u30c6\u30ca\u306eENTRYPOINT\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u3088\u3063\u3066\u8aad\u307f\u8fbc\u307e\u308c\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u305d\u308c\u3089\u3092\u63a2\u3057\u307e\u3059\u3002\u74b0\u5883\u5909\u6570\u304c\u671f\u5f85\u901a\u308a\u306b\u8868\u793a\u3055\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u4ed6\u306e\u5834\u6240\u3092\u6307\u3059WORKDIR\u8a2d\u5b9a\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-advanced/environment-variables/#environment-variables-lagoon-api","title":"\u74b0\u5883\u5909\u6570 - Lagoon API","text":"

          Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u305f\u304f\u306a\u3044\u5909\u6570(\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3084API\u30ad\u30fc\u306a\u3069)\u306b\u3064\u3044\u3066\u306f\u3001Lagoon API\u306e\u74b0\u5883\u5909\u6570\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5909\u6570\u306f\u3001\u8ab0\u304b\u304c\u30ed\u30fc\u30ab\u30eb\u306e\u958b\u767a\u74b0\u5883\u3084\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u4e0a\u306b\u6301\u3063\u3066\u3044\u308b\u3068\u3001\u5371\u967a\u306b\u3055\u3089\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          Lagoon API\u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u307e\u305f\u306f\u74b0\u5883\u56fa\u6709\u306e\u5909\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u30b9\u30b3\u30fc\u30d7\u9650\u5b9a\u306e\u30d3\u30eb\u30c9\u6642\u307e\u305f\u306f\u30e9\u30f3\u30bf\u30a4\u30e0\u306b\u5bfe\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3059\u3079\u3066Lagoon GraphQL API\u3092\u901a\u3058\u3066\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002GraphQL API\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001GraphQL API\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/environment-variables/#runtime-environment-variables-lagoon-api","title":"\u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u5909\u6570 - LagoonAPI","text":"

          \u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u5909\u6570\u306f\u81ea\u52d5\u7684\u306b\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u3067\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u74b0\u5883\u304c\u518d\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u5f8c\u306b\u306e\u307f\u8ffd\u52a0\u307e\u305f\u306f\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002

          \u3053\u308c\u306f\u3001ID 463\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u30e9\u30f3\u30bf\u30a4\u30e0\u5909\u6570(\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd)\u3092\u5b9a\u7fa9\u3057\u307e\u3059:

          \u30e9\u30f3\u30bf\u30a4\u30e0\u5909\u6570\u306e\u8ffd\u52a0
          mutation addRuntimeEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:RUNTIME,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"\n}\n) {\nid\n}\n}\n

          \u3053\u308c\u306f\u3001\u74b0\u5883ID 546\u7279\u6709\u306e\u30e9\u30f3\u30bf\u30a4\u30e0\u5909\u6570(\u7279\u5b9a\u306e\u74b0\u5883\u306e\u307f\u3067\u5229\u7528\u53ef\u80fd)\u3092\u5b9a\u7fa9\u3057\u307e\u3059:

          \u74b0\u5883ID\u306e\u5b9a\u7fa9
          mutation addRuntimeEnv {\naddEnvVariable(\ninput:{\ntype:ENVIRONMENT,\ntypeId:546,\nscope:RUNTIME,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"\n}\n) {\nid\n}\n}\n
          "},{"location":"ja/concepts-advanced/environment-variables/#build-time-environment-variables-lagoon-api","title":"\u30d3\u30eb\u30c9\u6642\u306e\u74b0\u5883\u5909\u6570 LagoonAPI","text":"

          \u30d3\u30eb\u30c9\u6642\u306e\u74b0\u5883\u5909\u6570\u306f\u30d3\u30eb\u30c9\u4e2d\u306b\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3042\u308a\u3001Dockerfiles\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          \u30d3\u30eb\u30c9\u6642\u306e\u74b0\u5883\u5909\u6570\u306e\u4f7f\u7528
          ARG MYVARIABLENAME\n

          \u901a\u5e38\u3001ARG\u306fFROM\u306e\u5f8c\u306b\u8a18\u8ff0\u3057\u307e\u3059\u3002ARG\u3068FROM\u306b\u3064\u3044\u3066\u306edocker\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u8aad\u3080\u3002

          \u3053\u308c\u306f\u3001ID 463\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u30d3\u30eb\u30c9\u6642\u5909\u6570(\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd)\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u30d3\u30eb\u30c9\u6642\u5909\u6570\u3092\u5b9a\u7fa9\u3059\u308b
          mutation addBuildtimeEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:BUILD,\nname:\"MYVARIABLENAME\",\nvalue:\"MyVariableValue\"}\n) {\nid\n}\n}\n

          \u3053\u308c\u306f\u3001\u74b0\u5883ID 546\u7279\u6709\u306e\u30d3\u30eb\u30c9\u6642\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u307e\u3059(\u305d\u306e\u7279\u5b9a\u306e\u74b0\u5883\u5185\u3060\u3051\u3067\u5229\u7528\u53ef\u80fd)\u3002

          \u74b0\u5883ID\u3092\u5b9a\u7fa9\u3059\u308b
          mutation addBuildtimeEnv {\naddEnvVariable(input:{type:ENVIRONMENT, typeId:546, scope:BUILD, name:\"MYVARIABLENAME\", value:\"MyVariableValue\"}) {\nid\n}\n}\n

          \u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u74b0\u5883\u5909\u6570\u306f\u3001\u30d3\u30eb\u30c9\u4e2d\u306b\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u304d\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3001Specials \u00bb container-registries\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u307e\u305f\u306f\u74b0\u5883\u30ec\u30d9\u30eb\u3067\u9069\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u3053\u308c\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u3092\u5b9a\u7fa9\u3057\u307e\u3059 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8ID 463\u306e\u305f\u3081\u306e\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u5909\u6570(\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u5229\u7528\u53ef\u80fd):

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u5909\u6570\u3092\u5b9a\u7fa9\u3059\u308b
          mutation addContainerRegistryEnv {\naddEnvVariable(\ninput:{\ntype:PROJECT,\ntypeId:463,\nscope:CONTAINER_REGISTRY,\nname:\"MY_OWN_REGISTRY_PASSWORD\",\nvalue:\"MySecretPassword\"})\n) {\nid\n}\n}\n

          \u3053\u308c\u306f\u3001\u74b0\u5883ID 546\u7279\u6709\u306e\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u307e\u3059(\u305d\u306e\u7279\u5b9a\u306e\u74b0\u5883\u5185\u3067\u306e\u307f\u5229\u7528\u53ef\u80fd):

          \u74b0\u5883ID\u3092\u5b9a\u7fa9\u3059\u308b
          mutation addContainerRegistryEnv {\naddEnvVariable(\ninput:{\ntype:ENVIRONMENT,\ntypeId:546,\nscope:CONTAINER_REGISTRY,\nname:\"MY_OWN_REGISTRY_PASSWORD\",\nvalue:\"MySecretPassword\"}\n) {\nid\n}\n}\n
          "},{"location":"ja/concepts-advanced/environment-variables/#global-environment-variables-lagoon-api","title":"\u30b0\u30ed\u30fc\u30d0\u30eb\u74b0\u5883\u5909\u6570 - Lagoon API","text":"

          \u30b0\u30ed\u30fc\u30d0\u30eb\u74b0\u5883\u5909\u6570\u306f\u3001\u30d3\u30eb\u30c9\u306b\u3088\u3063\u3066\u6d88\u8cbb\u3055\u308c\u308b\u305f\u3081\u306e\u30d3\u30eb\u30c9\u6642\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u3001\u307e\u305f\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u3067\u5229\u7528\u53ef\u80fd\u306a\u30e9\u30f3\u30bf\u30a4\u30e0\u5909\u6570\u3068\u3057\u3066\u5229\u7528\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/environment-variables/#environment-files-existing-directly-in-the-git-repo","title":"Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u76f4\u63a5\u5b58\u5728\u3059\u308b\u74b0\u5883\u30d5\u30a1\u30a4\u30eb","text":"

          Git\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306b\u5b89\u5168\u306b\u4fdd\u5b58\u3067\u304d\u308b\u74b0\u5883\u5909\u6570\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u76f4\u63a5\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059 \u3002\u3053\u308c\u3089\u306e\u5909\u6570\u306f\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u3082\u5229\u7528\u53ef\u80fd\u3067\u3042\u308a\u3001\u3088\u308a\u79fb\u690d\u6027\u304c\u9ad8\u304f\u306a\u308a\u307e\u3059\u3002

          \u74b0\u5883\u30d5\u30a1\u30a4\u30eb\u306e\u69cb\u6587\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059:

          myenvironment.env
          MYVARIABLENAME=\"MyVariableValue\"\nMVARIABLENUMBER=4242\nDB_USER=$DB_USERNAME # DB_USERNAME\u306e\u5024\u3067DB_USER\u3092\u518d\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304cLagoon\u63d0\u4f9b\u306e\u5909\u6570\u306b\u5bfe\u3057\u3066\u5225\u306e\u5909\u6570\u540d\u3092\u671f\u5f85\u3057\u3066\u3044\u308b\u5834\u5408\u306a\u3069\u3067\u3059\u3002\n
          "},{"location":"ja/concepts-advanced/environment-variables/#lagoonenvbranchname","title":".lagoon.env.$BRANCHNAME","text":"

          \u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308b\u74b0\u5883\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u305f\u3044\u5834\u5408\u306f\u3001.lagoon.env.$BRANCHNAME\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306e\u5834\u5408\u306f.lagoon.env.main\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u74b0\u5883\u9593\u3067\u306e\u74b0\u5883\u5909\u6570\u306e\u533a\u5225\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/environment-variables/#env-and-envdefaults","title":".env and .env.defaults","text":"

          .env\u3068.env.defaults\u306f\u3001\u4ed6\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306e\u74b0\u5883\u5909\u6570\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u74b0\u5883\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u5229\u7528\u3057\u307e\u3059(Workflows\u53c2\u7167)\u3002

          "},{"location":"ja/concepts-advanced/environment-variables/#special-environment-variables","title":"\u7279\u5225\u306a\u74b0\u5883\u5909\u6570","text":""},{"location":"ja/concepts-advanced/environment-variables/#php_error_reporting","title":"PHP_ERROR_REPORTING","text":"

          \u3053\u306e\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001PHP\u304c\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30ec\u30d9\u30eb\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001production\u74b0\u5883\u304b\u958b\u767a\u74b0\u5883\u304b\u306b\u3088\u3063\u3066\u52d5\u7684\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

          production\u74b0\u5883\u3067\u306f\u3001\u3053\u306e\u5024\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE\u306b\u306a\u308a\u307e\u3059\u3002

          \u958b\u767a\u74b0\u5883\u3067\u306f\u3001\u3053\u306e\u5024\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067E_ALL & ~E_DEPRECATED & ~E_STRICT\u306b\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/feature-flags/","title":"\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d5\u30e9\u30b0","text":"

          Lagoon\u306e\u4e00\u90e8\u306e\u6a5f\u80fd\u306f\u3001\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d5\u30e9\u30b0\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u5236\u5fa1\u3067\u304d\u307e\u3059\u3002 \u3053\u308c\u306f\u3001\u65b0\u3057\u3044\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u6a5f\u80fd\u3092\u5236\u5fa1\u3055\u308c\u305f\u65b9\u6cd5\u3067\u5c55\u958b\u3059\u308b\u305f\u3081\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u7ba1\u7406\u8005\u3092\u652f\u63f4\u3059\u308b\u3088\u3046\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/feature-flags/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u4ee5\u4e0b\u306e\u74b0\u5883\u5909\u6570\u306f\u3001\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d5\u30e9\u30b0\u3092\u5207\u308a\u66ff\u3048\u308b\u305f\u3081\u306b\u74b0\u5883\u307e\u305f\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u74b0\u5883\u5909\u6570\u540d \u30a2\u30af\u30c6\u30a3\u30d6\u30b9\u30b3\u30fc\u30d7 \u5c0e\u5165\u3055\u308c\u305f\u30d0\u30fc\u30b8\u30e7\u30f3 \u524a\u9664\u3055\u308c\u305f\u30d0\u30fc\u30b8\u30e7\u30f3 \u30c7\u30d5\u30a9\u30eb\u30c8\u5024 \u8aac\u660e LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD global 2.2.0 - \u7121\u52b9 \u3053\u306e\u74b0\u5883\u307e\u305f\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30dd\u30c3\u30c9\u306b\u975eroot\u30dd\u30c3\u30c9\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001enabled\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u30d5\u30e9\u30b0\u306f\u6700\u7d42\u7684\u306b\u5ec3\u6b62\u3055\u308c\u3001\u305d\u306e\u6642\u70b9\u3067\u975eroot\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u304c\u5f37\u5236\u3055\u308c\u307e\u3059\u3002 LAGOON_FEATURE_FLAG_ISOLATION_NETWORK_POLICY global 2.2.0 - \u7121\u52b9 \u30c7\u30d7\u30ed\u30a4\u6642\u306b\u5404\u74b0\u5883\u306b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u540d\u524d\u7a7a\u9593\u5206\u96e2\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30dd\u30ea\u30b7\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3001enabled\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u30d5\u30e9\u30b0\u306f\u6700\u7d42\u7684\u306b\u5ec3\u6b62\u3055\u308c\u3001\u305d\u306e\u6642\u70b9\u3067\u540d\u524d\u7a7a\u9593\u5206\u96e2\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30dd\u30ea\u30b7\u30fc\u304c\u5f37\u5236\u3055\u308c\u307e\u3059\u3002\u6ce8: \u3053\u306e\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3057\u3066\u304b\u3089\u7121\u52b9\u306b\u3059\u308b\u3068\u3001\u65e2\u5b58\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306f\u524a\u9664\u3055\u308c\u307e\u305b\u3093\u3002 \u4ee5\u524d\u306e\u30c7\u30d7\u30ed\u30a4\u304b\u3089\u306e\u30dd\u30ea\u30b7\u30fc\u524a\u9664\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u3089\u306f\u624b\u52d5\u3067\u524a\u9664\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002"},{"location":"ja/concepts-advanced/feature-flags/#_2","title":"\u30af\u30e9\u30b9\u30bf\u30fc\u30ec\u30d9\u30eb\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb","text":"

          \u6a5f\u80fd\u30d5\u30e9\u30b0\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u30ec\u30d9\u30eb\u3067\u3082\u5236\u5fa1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u308blagoon-build-deploy\u30c1\u30e3\u30fc\u30c8\u304c\u3042\u308a\u307e\u3059\u3002 \u5404\u6a5f\u80fd\u30d5\u30e9\u30b0\u306b\u306f\u3001\u8a2d\u5b9a\u3067\u304d\u308b\u5024\u304cdefault\u3068force\u306e2\u7a2e\u985e\u3042\u308a\u307e\u3059\u3002

          • default\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u74b0\u5883\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u5236\u5fa1\u3057\u307e\u3059\u304c\u3001\u4e0a\u8a18\u306e\u74b0\u5883\u5909\u6570\u306b\u3088\u3063\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u307e\u305f\u306f\u74b0\u5883\u30ec\u30d9\u30eb\u3067\u4e0a\u66f8\u304d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
          • force\u3082\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u74b0\u5883\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u5236\u5fa1\u3057\u307e\u3059\u304c\u3001\u4e0a\u8a18\u306e\u74b0\u5883\u5909\u6570\u306b\u3088\u3063\u3066\u4e0a\u66f8\u304d\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
          "},{"location":"ja/concepts-advanced/service-types/","title":"\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7","text":"

          \u4ee5\u4e0b\u306b\u793a\u3059\u306e\u306f\u3001docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u5185\u306e lagoon.type \u3092\u901a\u3058\u3066\u5b9a\u7fa9\u3067\u304d\u308b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3067\u3059\u3002

          \u8b66\u544a

          \u4e00\u5ea6 lagoon.type \u304c\u5b9a\u7fa9\u3055\u308c\u3001\u74b0\u5883\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3068\u3001\u7570\u306a\u308b\u30bf\u30a4\u30d7\u306b\u5909\u66f4\u3059\u308b\u3053\u3068\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u304a\u3089\u305a\u3001\u74b0\u5883\u304c\u58ca\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/service-types/#basic","title":"basic","text":"

          \u57fa\u672c\u7684\u306a\u30b3\u30f3\u30c6\u30ca\u3067\u3001\u65e2\u5b58\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u306a\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u307b\u3068\u3093\u3069\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30dd\u30fc\u30c8\u306f\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3057\u3066\u5909\u66f4\u3067\u304d\u307e\u3059\u3002\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u304c\u5fc5\u8981\u3067\u306a\u3044\u5834\u5408(\u4f8b:\u5185\u90e8\u5411\u3051\u30b5\u30fc\u30d3\u30b9\u306e\u5834\u5408)\u3001docker-compose.yml \u5185\u3067 lagoon.autogeneratedroute: false \u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3000\u3067TCP\u63a5\u7d9a 3000 \u306f\u3044 \u3044\u3044\u3048 lagoon.service.port, lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#basic-persistent","title":"basic-persistent","text":"

          basic\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3057\u3001lagoon.persistent \u3092\u3067\u30de\u30a6\u30f3\u30c8\u306e\u4f4d\u5024\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3000\u3067TCP\u63a5\u7d9a 3000 \u306f\u3044 \u306f\u3044 lagoon.service.port, lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.persistent.class"},{"location":"ja/concepts-advanced/service-types/#cli","title":"cli","text":"

          PHP\u3001Node.js\u306a\u3069\u3001\u4efb\u610f\u306eCLI\u30b3\u30f3\u30c6\u30ca\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002 /var/run/secrets/lagoon/sshkey/ssh-privatekey\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u3066\u3044\u308b\u9867\u5ba2\u306eSSH\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ad\u30fc\u304c\u81ea\u52d5\u7684\u306b\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u305d\u306e\u4ed6\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - \u3044\u3044\u3048 \u3044\u3044\u3048 \u3044\u3044\u3048 -"},{"location":"ja/concepts-advanced/service-types/#cli-persistent","title":"cli-persistent","text":"

          cli\u3068\u540c\u3058\u3067\u3059\u304c\u3001lagoon.persistent.name\u306f\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6301\u3064\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3092\u6307\u5b9a\u3055\u308c\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u5b9a\u7fa9\u3055\u308c\u305flagoon.persistent\u30e9\u30d9\u30eb\u306e\u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u307e\u3059\u3002\u81ea\u8eab\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u305b\u305a\u3001\u5225\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u305f\u3081\u3060\u3051\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u305d\u306e\u4ed6\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - \u3044\u3044\u3048 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.name, lagoon.persistent"},{"location":"ja/concepts-advanced/service-types/#elasticsearch","title":"elasticsearch","text":"

          Elasticsearch\u30b3\u30f3\u30c6\u30ca\u306f\u3001/usr/share/el\u306e\u4e0b\u306b\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002 elasticsearch/data

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf localhost:9200/_cluster/health?local=true \u3067HTTP\u901a\u4fe1 9200 \u306a\u3057 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#kibana","title":"kibana","text":"

          Kibana\u30b3\u30f3\u30c6\u30ca\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 5601\u3067TCP\u63a5\u7d9a 5601 \u306f\u3044 \u306a\u3057 -"},{"location":"ja/concepts-advanced/service-types/#logstash","title":"logstash","text":"

          Logstash\u30b3\u30f3\u30c6\u30ca\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 9600\u3067TCP\u63a5\u7d9a 9600 \u306a\u3057 \u306a\u3057 -"},{"location":"ja/concepts-advanced/service-types/#mariadb","title":"mariadb","text":"

          Lagoon\u306bmariadb-single\u3068mariadb-dbaas\u306e\u3069\u3061\u3089\u304b\u3092\u81ea\u52d5\u7684\u306b\u6c7a\u5b9a\u3055\u305b\u308b\u30e1\u30bf\u30b5\u30fc\u30d3\u30b9\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - - - - -"},{"location":"ja/concepts-advanced/service-types/#mariadb-single","title":"mariadb-single","text":"

          MariaDB\u30b3\u30f3\u30c6\u30ca\u3002/lagoon/mysql-backup.sh 127.0.0.1\u3092\u5b9f\u884c\u3059\u308b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306ecron\u30b8\u30e7\u30d6\u309224\u6642\u9593\u3054\u3068\u306b\u4f5c\u6210\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3306\u3067TCP\u63a5\u7d9a 3306 \u306a\u3057 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#mariadb-dbaas","title":"mariadb-dbaas","text":"

          DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u3092\u4ecb\u3057\u305f\u5171\u6709MariaDB\u30b5\u30fc\u30d0\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf \u4e0d\u8981 3306 \u306a\u3057 - -"},{"location":"ja/concepts-advanced/service-types/#mongo","title":"mongo","text":"

          Lagoon\u306bmongo-single\u3068mongo-dbaas\u306e\u3069\u3061\u3089\u304b\u3092\u81ea\u52d5\u7684\u306b\u6c7a\u5b9a\u3055\u305b\u308b\u30e1\u30bf\u30b5\u30fc\u30d3\u30b9\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - - - - -"},{"location":"ja/concepts-advanced/service-types/#mongo-single","title":"mongo-single","text":"

          MongoDB\u30b3\u30f3\u30c6\u30ca\u3001/data/db\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u6700\u5c0f1GB\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 27017\u3067TCP\u63a5\u7d9a 27017 \u306a\u3057 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#mongo-dbaas","title":"mongo-dbaas","text":"

          DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u3092\u4ecb\u3057\u305f\u5171\u6709MongoDB\u30b5\u30fc\u30d0\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf \u4e0d\u8981 27017 \u3044\u3044\u3048 - -"},{"location":"ja/concepts-advanced/service-types/#nginx","title":"nginx","text":"

          NGINX\u30b3\u30f3\u30c6\u30ca\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf localhost:50000/nginx_status 8080 \u306f\u3044 \u3044\u3044\u3048 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#nginx-php","title":"nginx-php","text":"

          nginx\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u8ffd\u52a0\u3067php\u30b3\u30f3\u30c6\u30ca\u304c\u3042\u308a\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf NGINX: localhost:50000/nginx_status, PHP: /usr/sbin/check_fcgi 8080 \u306f\u3044 \u3044\u3044\u3048 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#nginx-php-persistent","title":"nginx-php-persistent","text":"

          nginx-php\u3068\u540c\u69d8\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3057\u3001lagoon.persistent \u3067\u30de\u30a6\u30f3\u30c8\u306e\u4f4d\u7f6e\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf NGINX: localhost:50000/nginx_status, PHP: /usr/sbin/check_fcgi http\u306e8080 \u306f\u3044 \u306f\u3044 lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.persistent.class"},{"location":"ja/concepts-advanced/service-types/#node","title":"node","text":"

          Node.js \u30b3\u30f3\u30c6\u30ca\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3000\u3067TCP\u63a5\u7d9a 3000 \u306f\u3044 \u306a\u3057 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#node-persistent","title":"node-persistent","text":"

          node\u3068\u540c\u69d8\u3002\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3057\u3001lagoon.persistent\u3067\u30de\u30a6\u30f3\u30c8\u306e\u4f4d\u7f6e\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 3000\u3067TCP\u63a5\u7d9a 3000 \u306f\u3044 \u306f\u3044 lagoon.autogeneratedroute, lagoon.persistent, lagoon.persistent.name, lagoon.persistent.size, lagoon.persistent.class"},{"location":"ja/concepts-advanced/service-types/#none","title":"none","text":"

          Lagoon\u306b\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b8c\u5168\u306b\u7121\u8996\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - - - - -"},{"location":"ja/concepts-advanced/service-types/#opensearch","title":"opensearch","text":"

          OpenSearch\u30b3\u30f3\u30c6\u30ca\u3001/usr/share/opensearch/data\u4ee5\u4e0b\u306b\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf localhost:920\u3067\u306eHTTP 0/_cluster/health?local=true| 9200 | \u3044\u3044\u3048 | \u306f\u3044 |lagoon.persistent.size`"},{"location":"ja/concepts-advanced/service-types/#postgres","title":"postgres","text":"

          Lagoon\u306bpostgres-single\u3068postgres-dbaas\u306e\u3069\u3061\u3089\u304b\u3092\u81ea\u52d5\u7684\u306b\u6c7a\u5b9a\u306b\u6c7a\u5b9a\u3055\u305b\u308b\u30e1\u30bf\u30b5\u30fc\u30d3\u30b9\u3002

          \u5065\u5eb7\u30c1\u30a7\u30c3\u30af \u9732\u51fa\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - - - - -"},{"location":"ja/concepts-advanced/service-types/#postgres-single","title":"postgres-single","text":"

          Postgres\u30b3\u30f3\u30c6\u30ca\u3002\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u7528\u306ecron\u30b8\u30e7\u30d6\u3092\u4f5c\u6210\u3057\u300124\u6642\u9593\u3054\u3068\u306b/lagoon/postgres-backup.sh localhost\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

          \u5065\u5eb7\u30c1\u30a7\u30c3\u30af \u9732\u51fa\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 5432\u3067TCP\u63a5\u7d9a 5432 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#postgres-dbaas","title":"postgres-dbaas","text":"

          DBaaS Operator\u7d4c\u7531\u3067\u5171\u6709PostgreSQL\u30b5\u30fc\u30d0\u3092\u5229\u7528\u3057\u307e\u3059\u3002

          \u5065\u5eb7\u30c1\u30a7\u30c3\u30af \u9732\u51fa\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf \u4e0d\u8981 5432 \u3044\u3044\u3048 - -"},{"location":"ja/concepts-advanced/service-types/#python","title":"python","text":"

          Python\u30b3\u30f3\u30c6\u30ca\u3002\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          \u5065\u5eb7\u30c1\u30a7\u30c3\u30af \u9732\u51fa\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 8800\u3067HTTP\u63a5\u7d9a 8800 \u306f\u3044 \u3044\u3044\u3048 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#python-persistent","title":"python-persistent","text":"

          \u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5099\u3048\u305fPython\u30b3\u30f3\u30c6\u30ca\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 8800\u3067HTTP\u63a5\u7d9a 8800 \u306f\u3044 \u306f\u3044 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#redis","title":"redis","text":"

          Redis\u30b3\u30f3\u30c6\u30ca\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 6379\u3067TCP\u63a5\u7d9a 6379 \u3044\u3044\u3048 \u3044\u3044\u3048 -"},{"location":"ja/concepts-advanced/service-types/#redis-persistent","title":"redis-persistent","text":"

          /data\u4ee5\u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u81ea\u52d5\u751f\u6210\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5099\u3048\u305fRedis\u30b3\u30f3\u30c6\u30ca\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 6379\u3067TCP\u63a5\u7d9a 6379 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#solr","title":"solr","text":"

          /var/solr\u4ee5\u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u81ea\u52d5\u751f\u6210\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5099\u3048\u305fSolr\u30b3\u30f3\u30c6\u30ca\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf 8983\u3067TCP\u63a5\u7d9a 8983 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#varnish","title":"varnish","text":"

          Varnish\u30b3\u30f3\u30c6\u30ca\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf HTTP\u30ea\u30af\u30a8\u30b9\u30c8 localhost:8080/varnish_status 8080 \u306f\u3044 \u3044\u3044\u3048 lagoon.autogeneratedroute"},{"location":"ja/concepts-advanced/service-types/#varnish-persistent","title":"varnish-persistent","text":"

          /var/cache/varnish \u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6301\u3064Varnish\u30b3\u30f3\u30c6\u30ca\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf HTTP\u30ea\u30af\u30a8\u30b9\u30c8 localhost:8080/varnish_status 8080 \u306f\u3044 \u306f\u3044 lagoon.autogeneratedroute, lagoon.persistent.size"},{"location":"ja/concepts-advanced/service-types/#worker","title":"worker","text":"

          \u4efb\u610f\u306e\u7a2e\u985e\u306e\u30ef\u30fc\u30ab\u30fc\u30b3\u30f3\u30c6\u30ca(\u30ad\u30e5\u30fc\u30ef\u30fc\u30ab\u30fc\u306a\u3069)\u3067\u3001\u516c\u958b\u30b5\u30fc\u30d3\u30b9\u30dd\u30fc\u30c8\u304c\u306a\u3044\u5834\u5408\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - \u3044\u3044\u3048 \u3044\u3044\u3048 \u3044\u3044\u3048 -"},{"location":"ja/concepts-advanced/service-types/#worker-persistent","title":"worker-persistent","text":"

          worker\u3068\u540c\u3058\u3067\u3059\u304c\u3001lagoon.persistent.name\u304c\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6301\u3064\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3092\u4e0e\u3048\u3089\u308c\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u3001\u5b9a\u7fa9\u3055\u308c\u305flagoon.persistent\u30e9\u30d9\u30eb\u306e\u4e0b\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u81ea\u8eab\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u305f\u3081\u306b\u306e\u307f\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          \u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af \u516c\u958b\u30dd\u30fc\u30c8 \u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8 \u30b9\u30c8\u30ec\u30fc\u30b8 \u305d\u306e\u4ed6\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30d1\u30e9\u30e1\u30fc\u30bf - \u3044\u3044\u3048 \u3044\u3044\u3048 \u306f\u3044 lagoon.persistent.name, lagoon.persistent"},{"location":"ja/concepts-advanced/workflows/","title":"\u30ef\u30fc\u30af\u30d5\u30ed\u30fc","text":"

          Lagoon\u306f\u3001\u53ef\u80fd\u306a\u9650\u308a\u591a\u69d8\u306a\u958b\u767a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001\u30c1\u30fc\u30e0\u306b\u5bfe\u3057\u3066\u7279\u5b9a\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5f37\u5236\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u5404\u958b\u767a\u30c1\u30fc\u30e0\u304c\u81ea\u5206\u305f\u3061\u306e\u30b3\u30fc\u30c9\u3092\u3069\u306e\u3088\u3046\u306b\u958b\u767a\u3057\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u304b\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/workflows/#fixed-branches","title":"\u56fa\u5b9a\u30d6\u30e9\u30f3\u30c1","text":"

          \u6700\u3082\u76f4\u63a5\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u56fa\u5b9a\u30d6\u30e9\u30f3\u30c1\u306b\u57fa\u3065\u3044\u305f\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u3059:

          Lagoon\u304c\u30c7\u30d7\u30ed\u30a4\u3059\u3079\u304d\u30d6\u30e9\u30f3\u30c1(\u4f8b\u3048\u3070 develop\u3001staging\u3001main\u306a\u3069\u3001\u3053\u308c\u3089\u306f\u6b63\u898f\u8868\u73fe\u3067 ^(develop|staging|main)$\u3068\u306a\u308a\u307e\u3059)\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u305d\u308c\u3067\u5b8c\u4e86\u3067\u3059\uff01

          \u65b0\u3057\u3044\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u8a2d\u5b9a\u3057\u305f\u30d6\u30e9\u30f3\u30c1\u306b\u305d\u308c\u3089\u3092\u30de\u30fc\u30b8\u3057\u3066\u30d7\u30c3\u30b7\u30e5\u3057\u3001Lagoon\u304c\u305d\u306e\u6a5f\u80fd\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u554f\u984c\u304c\u306a\u3051\u308c\u3070\u3001\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u3092\u3042\u306a\u305f\u306e\u672c\u756a\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3057\u3066\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/workflows/#feature-branches","title":"\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1","text":"

          \u3082\u3046\u5c11\u3057\u9ad8\u5ea6\u306a\u3082\u306e\u306b\u306a\u308b\u3068\u3001\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1\u304c\u3042\u308a\u307e\u3059\u3002Lagoon\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u3092\u6b63\u898f\u8868\u73fe\u3067\u5b9a\u7fa9\u3059\u308b\u80fd\u529b\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u4e0a\u8a18\u306e\u6b63\u898f\u8868\u73fe\u3092\u3053\u306e\u3088\u3046\u306b\u62e1\u5f35\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:^feature\\/|^(staging|main)$\u3002\u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u306ffeature/\u3067\u59cb\u307e\u308b\u3059\u3079\u3066\u306e\u30d6\u30e9\u30f3\u30c1\u3001\u304a\u3088\u3073staging\u3068main\u3068\u3044\u3046\u540d\u524d\u306e\u30d6\u30e9\u30f3\u30c1\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\u79c1\u305f\u3061\u306e\u958b\u767a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093:

          • \u65b0\u3057\u3044\u30d6\u30e9\u30f3\u30c1\u3092\u4f5c\u6210\u3059\u308b main\u304b\u3089feature/myfeature\u3092\u547c\u3073\u51fa\u3057\u3001feature/myfeature\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
          • Lagoon\u306f\u3001feature/myfeature\u30d6\u30e9\u30f3\u30c1\u3092\u65b0\u3057\u3044\u74b0\u5883\u3068\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u3057\u3001\u4ed6\u306e\u6a5f\u80fd\u3068\u306f\u72ec\u7acb\u3057\u3066\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002
          • feature/myfeature\u3092main\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3059\u308b\u3068\u3001\u305d\u308c\u306f\u3042\u306a\u305f\u306e\u672c\u756a\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002

          \u3082\u3057\u3054\u5e0c\u671b\u3067\u3042\u308c\u3070\u3001feature/myfeature\u3084\u4ed6\u306e\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1\u3092\u6700\u521d\u306bstaging\u306b\u30de\u30fc\u30b8\u3057\u3066\u3001\u8907\u6570\u306e\u6a5f\u80fd\u3092\u4e00\u7dd2\u306b\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001main\u306b\u30de\u30fc\u30b8\u3067\u304d\u307e\u3059\u3002

          \u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u6574\u7406\u3068\u30af\u30ea\u30fc\u30f3\u3055\u304c\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002\u5404\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30d6\u30e9\u30f3\u30c1\u306f\u81ea\u8eab\u306eLagoon\u74b0\u5883\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u3001\u975e\u5e38\u306b\u901f\u304f\u5927\u91cf\u306e\u74b0\u5883\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u305d\u308c\u3089\u5168\u3066\u304c\u30ea\u30bd\u30fc\u30b9\u3092\u6d88\u8cbb\u3057\u307e\u3059\u3002\u672a\u4f7f\u7528\u306e\u30d6\u30e9\u30f3\u30c1\u306f\u5fc5\u305a\u30de\u30fc\u30b8\u3059\u308b\u304b\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u3053\u306e\u305f\u3081\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u8003\u3048\u308b\u3053\u3068\u304c\u7406\u306b\u304b\u306a\u3063\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          "},{"location":"ja/concepts-advanced/workflows/#pull-requests","title":"\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8","text":"

          \u3055\u3089\u306b\u9ad8\u5ea6\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u3088\u308b\u3082\u306e\u3067\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8(\u307e\u305f\u306f\u30de\u30fc\u30b8\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u3082\u547c\u3070\u308c\u307e\u3059)\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308bGit\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u30a2\u30a4\u30c7\u30a2\u306f\u3001\u30d3\u30eb\u30c9\u4e2d\u306bLagoon\u304c\u30de\u30fc\u30b8\u3092\u884c\u3063\u3066\u304f\u308c\u308b\u306e\u3067\u3001\u5b9f\u969b\u306b\u30de\u30fc\u30b8\u3059\u308b\u5fc5\u8981\u306f\u306a\u304f\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u30d6\u30e9\u30f3\u30c1\u3068\u4e00\u7dd2\u306b\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3068\u3044\u3046\u30a2\u30a4\u30c7\u30a2\u306e\u80cc\u666f\u306b\u3042\u308a\u307e\u3059\u3002

          \u79c1\u305f\u3061\u306e\u4f8b\u3067\u306f\u3001Lagoon\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u30d6\u30e9\u30f3\u30c1^(staging|main)$\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092.* (\u3059\u3079\u3066\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b)\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u305b\u307e\u3059\u3002 \u3053\u308c\u3067\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059:

          1. main\u304b\u3089\u65b0\u3057\u3044\u30d6\u30e9\u30f3\u30c1feature/myfeature\u3092\u4f5c\u6210\u3057\u3001feature/myfeature\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059(\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u30d6\u30e9\u30f3\u30c1\u306fstaging\u3068main\u306e\u307f\u306e\u305f\u3081\u3001\u4eca\u306f\u30c7\u30d7\u30ed\u30a4\u306f\u884c\u308f\u308c\u307e\u305b\u3093)\u3002
          2. \u3042\u306a\u305f\u306eGit\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3067feature/myfeature\u304b\u3089main\u3078\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
          3. Lagoon\u306f\u4eca\u3001feature/myfeature\u30d6\u30e9\u30f3\u30c1\u3092main\u30d6\u30e9\u30f3\u30c1\u306e\u4e0a\u306b\u30de\u30fc\u30b8\u3057\u3001\u305d\u306e\u7d50\u679c\u306e\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002
          4. \u3053\u308c\u3067\u3001feature/myfeature\u30d6\u30e9\u30f3\u30c1\u306e\u6a5f\u80fd\u3092\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002\u307e\u308b\u3067main\u306b\u30de\u30fc\u30b8\u3055\u308c\u305f\u304b\u306e\u3088\u3046\u306b\u3001feature/myfeature\u30d6\u30e9\u30f3\u30c1\u3092\u4f5c\u6210\u3057\u3066\u304b\u3089main\u3067\u8d77\u3053\u3063\u305f\u3059\u3079\u3066\u306e\u5909\u66f4\u304c\u305d\u3053\u306b\u3042\u308a\u307e\u3059\u306e\u3067\u3001main\u30d6\u30e9\u30f3\u30c1\u306e\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u3068\u5fc3\u914d\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002
            1. \u30de\u30fc\u30b8\u306e\u7af6\u5408\u304c\u3042\u308b\u5834\u5408\u3001\u30d3\u30eb\u30c9\u304c\u5931\u6557\u3057\u3001Lagoon\u306f\u505c\u6b62\u3057\u3066\u3042\u306a\u305f\u306b\u901a\u77e5\u3057\u307e\u3059\u3002
          5. \u3042\u306a\u305f\u304c\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30c6\u30b9\u30c8\u3092\u7d42\u3048\u305f\u5f8c \u30ea\u30af\u30a8\u30b9\u30c8\u30d6\u30e9\u30f3\u30c1\u3067\u306f\u3001Git\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306b\u623b\u3063\u3066\u5b9f\u969b\u306b\u30b3\u30fc\u30c9\u3092main\u306b\u30de\u30fc\u30b8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001main\u306e\u30c7\u30d7\u30ed\u30a4\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u307e\u3059\u3002
          6. \u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30de\u30fc\u30b8\u3055\u308c\u308b\u3068\u3001\u81ea\u52d5\u7684\u306b\u30af\u30ed\u30fc\u30ba\u3055\u308c\u3001Lagoon\u306f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u74b0\u5883\u3092\u81ea\u52d5\u7684\u306b\u524a\u9664\u3057\u307e\u3059\u3002

          \u4e00\u90e8\u306e\u30c1\u30fc\u30e0\u3067\u306f\u3001\u5171\u6709\u306estaging\u30d6\u30e9\u30f3\u30c1\u306b\u5bfe\u3057\u3066\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f5c\u6210\u3057\u3001\u305d\u306e\u5f8c\u3001\u5225\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4ecb\u3057\u3066staging\u30d6\u30e9\u30f3\u30c1\u3092main\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3059\u308b\u3053\u3068\u3092\u9078\u629e\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u3001\u4f7f\u7528\u3057\u3066\u3044\u308bGit\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u7a2e\u985e\u306b\u3088\u308a\u307e\u3059\u3002

          \u307e\u305f\u3001Lagoon\u3067\u306f\u3001\u30bf\u30a4\u30c8\u30eb\u306b\u7279\u5b9a\u306e\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308b\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u307f\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b63\u898f\u8868\u73fe\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f[BUILD]\u306f\u3001\u30bf\u30a4\u30c8\u30eb\u304c[BUILD] My Pull Request\u306e\u3088\u3046\u306a\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u307f\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3001\u30bf\u30a4\u30c8\u30eb\u304cMy other Pull Request\u306e\u3088\u3046\u306a\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u81ea\u52d5\u7684\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u74b0\u5883\u306e\u6570\u3092\u5c11\u306a\u304f\u4fdd\u3064\u3053\u3068\u304c\u3067\u304d\u3001\u307e\u3060\u74b0\u5883\u304c\u5fc5\u8981\u3067\u306a\u3044\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4fdd\u6301\u3059\u308b\u3053\u3068\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-advanced/workflows/#automatic-database-sync-for-pull-requests","title":"\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u81ea\u52d5\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540c\u671f","text":"

          \u81ea\u52d5\u7684\u306a\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u74b0\u5883\u306f\u7d20\u6674\u3089\u3057\u3044\u3053\u3068\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u305d\u308c\u3089\u306e\u74b0\u5883\u304c\u4f5c\u6210\u3055\u308c\u305f\u3068\u304d\u306b\u5225\u306e\u74b0\u5883\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u540c\u671f\u3055\u308c\u308b\u3068\u4fbf\u5229\u3060\u308d\u3046\u3068\u3082\u601d\u3044\u307e\u3059\u3002Lagoon\u306f\u305d\u308c\u3092\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff01

          \u6b21\u306e\u4f8b\u306f\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u74b0\u5883\u306e\u6700\u521d\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3067\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u540c\u671f\u3057\u307e\u3059:

          .lagoon.yml
          tasks:\npost-rollout:\n- run:\nname: IF no Drupal installed & Pullrequest = Sync database from staging\ncommand: |\nif [[ -n ${LAGOON_PR_BASE_BRANCH} ]] && tables=$(drush sqlq 'show tables;') && [ -z \"$tables\" ]; then\ndrush -y sql-sync @staging default\nfi\nservice: cli\nshell: bash\n
          "},{"location":"ja/concepts-advanced/workflows/#promotion","title":"\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3","text":"

          \u74b0\u5883\u306b\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u5225\u306e\u65b9\u6cd5\u306f\u3001\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u3059\u3002

          \u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u8003\u3048\u65b9\u306f\u3001\u4f8b\u3068\u3057\u3066\u3053\u3053\u304b\u3089\u6765\u3066\u3044\u307e\u3059\u3002

          staging\u30d6\u30e9\u30f3\u30c1\u3092main\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3057\u3001main\u306b\u5909\u66f4\u304c\u306a\u3051\u308c\u3070\u3001\u3064\u307e\u308amain\u3068staging\u304cGit\u3067\u307e\u3063\u305f\u304f\u540c\u3058\u30b3\u30fc\u30c9\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3067\u3082\u3001\u7d50\u679c\u3068\u3057\u3066\u5f97\u3089\u308c\u308bDocker\u30a4\u30e1\u30fc\u30b8\u304c\u308f\u305a\u304b\u306b\u7570\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u6700\u5f8c\u306estaging\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3068\u73fe\u5728\u306emain\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u9593\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u4e0a\u6d41Docker\u30a4\u30e1\u30fc\u30b8\u304c\u5909\u66f4\u3055\u308c\u305f\u304b\u3001\u307e\u305f\u306f\u3055\u307e\u3056\u307e\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306b\u3088\u3063\u3066\u30ed\u30fc\u30c9\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u304c\u5909\u66f4\u3055\u308c\u305f\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3067\u3059\u3002\u3053\u308c\u306f\u975e\u5e38\u306b\u5c0f\u3055\u3044\u78ba\u7387\u3067\u3059\u304c\u5b58\u5728\u3057\u307e\u3059\u3002

          \u305d\u306e\u305f\u3081\u3001 \u3053\u306e\u72b6\u6cc1\u3067\u306fLagoon\u306f\u4e00\u3064\u306e\u74b0\u5883\u304b\u3089\u5225\u306e\u74b0\u5883\u3078\u306eLagoon\u30a4\u30e1\u30fc\u30b8\u306e\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u3068\u3044\u3046\u6982\u5ff5\u3092\u7406\u89e3\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u57fa\u672c\u7684\u306b\u3001\u3059\u3067\u306b\u69cb\u7bc9\u3055\u308c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305fDocker\u30a4\u30e1\u30fc\u30b8\u3092\u4e00\u3064\u306e\u74b0\u5883\u304b\u3089\u53d6\u308a\u51fa\u3057\u3001\u305d\u308c\u3089\u306e\u307e\u3063\u305f\u304f\u540c\u3058Docker\u30a4\u30e1\u30fc\u30b8\u3092\u5225\u306e\u74b0\u5883\u3067\u4f7f\u7528\u3059\u308b\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

          \u79c1\u305f\u3061\u306e\u4f8b\u3067\u306f\u3001main\u74b0\u5883\u304b\u3089production\u74b0\u5883\u3078Docker\u30a4\u30e1\u30fc\u30b8\u3092\u30d7\u30ed\u30e2\u30fc\u30c8\u3057\u305f\u3044\u3068\u601d\u3063\u3066\u3044\u307e\u3059:

          • \u6700\u521d\u306b\u3001main\u3068\u3044\u3046\u540d\u524d\u306e\u901a\u5e38\u306e\u30c7\u30d7\u30ed\u30a4\u74b0\u5883\u304c\u5fc5\u8981\u3067\u3059\u3002\u74b0\u5883\u304c\u6b63\u5e38\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          • \u307e\u305f\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306bproduction\u3068\u3044\u3046\u540d\u524d\u306e\u30d6\u30e9\u30f3\u30c1\u304c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u304c\u3042\u308b\u3068\u3001\u4eba\u3005\u304c\u3053\u306e\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u306a\u3069\u3001\u5947\u5999\u306a\u6df7\u4e71\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
          • \u6b21\u306b\u3001lagoon cli\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u307e\u3059:
          \u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b
          lagoon deploy promote --project=\"myproject\" --source=\"main\" --destination=\"production\"\n

          \u3053\u308c\u306f\u3001\u30bd\u30fc\u30b9main\u304b\u3089\u30c7\u30b9\u30c6\u30a3\u30cd\u30fc\u30b7\u30e7\u30f3production\u3078\u306e\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u3092\u5e0c\u671b\u3059\u308b\u3053\u3068\u3092Lagoon\u306b\u4f1d\u3048\u307e\u3059\u3002

          Lagoon\u306f\u6b21\u306e\u3053\u3068\u3092\u884c\u3044\u307e\u3059:

          • .lagoon.yml\u3068docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30fc\u30c9\u3059\u308b\u305f\u3081\u306b\u3001Git\u30d6\u30e9\u30f3\u30c1main\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059(Lagoon\u304c \u5b8c\u5168\u306b\u52d5\u4f5c\u3059\u308b\u306b\u306f\u3053\u308c\u3089\u304c\u307e\u3060\u5fc5\u8981\u3067\u3059)\u3002
          • docker-compose.yml\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u3001\u3059\u3079\u3066\u306eKubernetes/OpenShift\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u304c\u3001\u74b0\u5883\u5909\u6570\u3068\u3057\u3066LAGOON_GIT_BRANCH=production\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
          • main\u74b0\u5883\u304b\u3089\u6700\u65b0\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30b3\u30d4\u30fc\u3057\u3001\u305d\u308c\u3089\u3092\u4f7f\u7528\u3057\u307e\u3059(\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3057\u305f\u308a\u3001\u4e0a\u6d41\u304b\u3089\u30bf\u30b0\u4ed8\u3051\u3057\u305f\u308a\u3059\u308b\u4ee3\u308f\u308a\u306b)\u3002
          • \u901a\u5e38\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u3088\u3046\u306b\u3001\u3059\u3079\u3066\u306e\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

          \u4ed6\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3068\u540c\u69d8\u306b\u3001\u6210\u529f\u307e\u305f\u306f\u5931\u6557\u306e\u901a\u77e5\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/","title":"Lagoon\u306e\u57fa\u672c\u7684\u306a\u6982\u5ff5","text":"

          \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Lagoon\u306e\u57fa\u672c\u7684\u306a\u6982\u5ff5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u3059\u3067\u306b\u3053\u308c\u3089\u306b\u3064\u3044\u3066\u7406\u89e3\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001Lagoon\u306e\u9ad8\u5ea6\u306a\u6982\u5ff5\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002

          \u3082\u3057\u52a9\u3051\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001\u79c1\u305f\u3061\u306eDiscord\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3084\u30e1\u30f3\u30c6\u30ca\u30fc\u3078\u3054\u9023\u7d61\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/","title":"\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30bb\u30b9","text":"

          \u3053\u306e\u6587\u66f8\u3067\u306f\u3001Lagoon\u306e\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u4e2d\u306b\u5b9f\u969b\u306b\u4f55\u304c\u8d77\u3053\u308b\u304b\u3092\u8aac\u660e\u3057\u307e\u3059\u3002\u5b9f\u969b\u306e\u30d7\u30ed\u30bb\u30b9\u304b\u3089\u5927\u5e45\u306b\u5358\u7d14\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001Lagoon\u304c\u65b0\u3057\u3044\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3073\u306b\u4f55\u304c\u884c\u308f\u308c\u3066\u3044\u308b\u304b\u3092\u7406\u89e3\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002

          \u4ee5\u4e0b\u306e\u30d3\u30c7\u30aa\u3092\u898b\u3066\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d7\u30ed\u30bb\u30b9\u306e\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#1-openshiftkubernetes","title":"1. \u74b0\u5883\u306e\u305f\u3081\u306eOpenShift\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/Kubernetes\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306e\u8a2d\u5b9a","text":"

          \u307e\u305a\u3001Lagoon\u306f\u6307\u5b9a\u3055\u308c\u305f\u74b0\u5883\u306eOpenShift\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/Kubernetes\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u304c\u5b58\u5728\u3057\u3066\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u5fc5\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u3001\u74b0\u5883\u5909\u6570\u3092lagoon-env\u3068\u3044\u3046ConfigMap\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u74b0\u5883\u306e\u30bf\u30a4\u30d7\u3084\u540d\u524d\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u306a\u3069\u306e\u60c5\u5831\u3067\u6e80\u305f\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#2-git","title":"2. Git\u306e\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3068\u30de\u30fc\u30b8","text":"

          \u6b21\u306b\u3001Lagoon\u306fGit\u304b\u3089\u30b3\u30fc\u30c9\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002.lagoon.yml\u3001docker-compose.yml\u3001\u304a\u3088\u3073.env\u3092\u8aad\u307f\u53d6\u308b\u305f\u3081\u3060\u3051\u3067\u306a\u304f\u3001Docker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306b\u3082\u3053\u308c\u304c\u5fc5\u8981\u3067\u3059\u3002

          \u6ce8\u610f\u70b9\u3068\u3057\u3066\u3001Lagoon\u306f\u30d6\u30e9\u30f3\u30c1/PR\u304cLagoon\u3067\u8a2d\u5b9a\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306e\u6b63\u898f\u8868\u73fe\u3068\u4e00\u81f4\u3059\u308b\u5834\u5408\u306b\u306e\u307f\u3001\u3053\u308c\u3089\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u3069\u306e\u3088\u3046\u306b\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u305f\u304b\u306b\u57fa\u3065\u3044\u3066\u3001\u7570\u306a\u308b\u3053\u3068\u304c\u8d77\u3053\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#webhook","title":"\u30d6\u30e9\u30f3\u30c1Webhook\u30d7\u30c3\u30b7\u30e5","text":"

          \u30c7\u30d7\u30ed\u30a4\u304cGit webhook\u7d4c\u7531\u3067\u81ea\u52d5\u7684\u306b\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u3001\u5358\u4e00\u306e\u30d6\u30e9\u30f3\u30c1\u5411\u3051\u3067\u3042\u308b\u5834\u5408\u3001Lagoon\u306fwebhook\u30da\u30a4\u30ed\u30fc\u30c9\u306b\u542b\u307e\u308c\u308bGit SHA\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u305f\u5404Git SHA\u3054\u3068\u306b\u30c7\u30d7\u30ed\u30a4\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#rest","title":"\u30d6\u30e9\u30f3\u30c1REST\u30c8\u30ea\u30ac\u30fc","text":"

          REST API\u7d4c\u7531(UI\u307e\u305f\u306fGraphQL\u7d4c\u7531)\u3067\u624b\u52d5\u3067\u30d6\u30e9\u30f3\u30c1\u30c7\u30d7\u30ed\u30a4\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u3001POST\u30da\u30a4\u30ed\u30fc\u30c9\u3067SHA\u3092\u5b9a\u7fa9\u3057\u306a\u3044\u5834\u5408\u3001Lagoon\u306f\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u6700\u65b0\u306e\u30b3\u30df\u30c3\u30c8\u3092\u5358\u306b\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u3001\u305d\u308c\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#_2","title":"\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8","text":"

          \u30c7\u30d7\u30ed\u30a4\u304c\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8(PR)\u30c7\u30d7\u30ed\u30a4\u3067\u3042\u308b\u5834\u5408\u3001Lagoon\u306f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30d9\u30fc\u30b9\u3068HEAD\u30d6\u30e9\u30f3\u30c1\u304a\u3088\u3073SHA\u3092\u30ed\u30fc\u30c9\u3057\u3001\u6b21\u306e\u3053\u3068\u3092\u884c\u3044\u307e\u3059:

          • PR\u304c\u6307\u3057\u3066\u3044\u308b\u30d6\u30e9\u30f3\u30c1(\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1)\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002
          • PR\u304c\u8d77\u6e90\u3068\u306a\u308b\u30d6\u30e9\u30f3\u30c1(HEAD\u30d6\u30e9\u30f3\u30c1)\u3092\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1\u306e\u4e0a\u306b\u30de\u30fc\u30b8\u3057\u307e\u3059\u3002
          • \u3088\u308a\u5177\u4f53\u7684\u306b\u306f:
            • Lagoon\u306f\u3001Webhook\u3067\u9001\u4fe1\u3055\u308c\u305f\u7279\u5b9a\u306eSHA\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u3066\u30de\u30fc\u30b8\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306eSHA\u306f\u30d6\u30e9\u30f3\u30c1\u30d8\u30c3\u30c9\u3092\u6307\u3057\u3066\u3044\u308b\u5834\u5408\u3082\u3042\u308c\u3070\u3001 \u305d\u3046\u3067\u306a\u3044\u5834\u5408 \u3082\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001GitHub\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u65b0\u3057\u3044\u30d7\u30c3\u30b7\u30e5\u3092\u884c\u3046\u3068\u3001\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1\u306eSHA\u304c\u73fe\u5728\u306e\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1HEAD\u3092\u6307\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

          \u30de\u30fc\u30b8\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u3001Lagoon\u3082\u505c\u6b62\u3057\u3001\u305d\u306e\u3053\u3068\u3092\u304a\u77e5\u3089\u305b\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#3","title":"3. \u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9","text":"

          docker-compose.yml\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u5404\u30b5\u30fc\u30d3\u30b9\u306b\u3064\u3044\u3066\u3001Lagoon\u306f\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u3053\u306e\u6642\u70b9\u3067\u30d3\u30eb\u30c9\u304c\u884c\u308f\u308c\u307e\u3059\u3002\u30d3\u30eb\u30c9\u306e\u9806\u5e8f\u306f\u3001docker-compose.yml\u3067\u306e\u8a2d\u5b9a\u9806\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u306e\u30d3\u30eb\u30c9\u5f15\u6570\u304c\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002

          • LAGOON_GIT_SHA
          • LAGOON_GIT_BRANCH
          • LAGOON_PROJECT
          • LAGOON_BUILD_TYPE ( pullrequest\u3001branch\u3001\u307e\u305f\u306f promote \u306e\u3044\u305a\u308c\u304b)
          • LAGOON_SSH_PRIVATE_KEY - \u30bd\u30fc\u30b9\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308bSSH\u306e\u79d8\u5bc6\u9375\u3067\u3059\u3002\u30d3\u30eb\u30c9\u5f15\u6570\u3092\u5b9f\u969b\u306e\u9375\u306b\u5909\u63db\u3059\u308b\u306b\u306f\u3001RUN /lagoon/entrypoints/05-ssh-key.sh\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u306e\u9375\u306f/home/.ssh/key\u306b\u3042\u308a\u3001SSH\u3068Git\u304c\u81ea\u52d5\u7684\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002\u5b89\u5168\u306e\u305f\u3081\u3001RUN rm /home/.ssh/key\u3092\u4f7f\u7528\u3057\u3066\u9375\u3092\u518d\u5ea6\u524a\u9664\u3057\u307e\u3059\u3002
          • LAGOON_GIT_SOURCE_REPOSITORY - \u30bd\u30fc\u30b9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u5b8c\u5168\u306aGit URL\u3067\u3059

          \u307e\u305f\u3001\u3053\u308c\u304c\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30d3\u30eb\u30c9\u3067\u3042\u308b\u5834\u5408\u306f\u4ee5\u4e0b\u3068\u306a\u308a\u307e\u3059\u3002

          • LAGOON_PR_HEAD_BRANCH
          • LAGOON_PR_HEAD_SHA
          • LAGOON_PR_BASE_BRANCH
          • LAGOON_PR_BASE_SHA
          • LAGOON_PR_TITLE

          \u307e\u305f\u3001\u3059\u3067\u306b\u69cb\u7bc9\u3055\u308c\u305f\u5404\u30a4\u30e1\u30fc\u30b8\u306e\u540d\u524d\u3082\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002\u3042\u306a\u305f\u306edocker-compose.yml\u304c\u6700\u521d\u306bcli\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3057\u3001\u6b21\u306bnginx\u30a4\u30e1\u30fc\u30b8\u3092\u69cb\u7bc9\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001nginx\u30a4\u30e1\u30fc\u30b8\u306e\u540d\u524d\u306fNGINX_IMAGE\u3068\u3057\u3066\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#4-kubernetesopenshift","title":"4. Kubernetes\u307e\u305f\u306fOpenShift\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b","text":"

          \u6b21\u306b\u3001Lagoon\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u304b\u3089\u5b9a\u7fa9\u3055\u308c\u308b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30eb\u30fc\u30c8\u3001\u304a\u3088\u3073.lagoon.yml\u3067\u5b9a\u7fa9\u3057\u305f\u8ffd\u52a0\u53ef\u80fd\u306a\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092Kubernetes\u307e\u305f\u306fOpenShift\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002

          \u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001LAGOON_ROUTES\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8\u3092\u30ab\u30f3\u30de\u533a\u5207\u308a\u306eURL\u3068\u3057\u3066\u516c\u958b\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u4ee5\u4e0b\u306e\u9806\u5e8f\u30671\u3064\u306e\u30eb\u30fc\u30c8\u3092\"main\"\u30eb\u30fc\u30c8\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u307e\u3059:

          1. \u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u5834\u5408:.lagoon.yml\u3067\u6700\u521d\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8
          2. docker-compose.yml\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u6700\u521d\u306e\u30eb\u30fc\u30c8
          3. \u306a\u3057

          \"main\"\u30eb\u30fc\u30c8\u306fLAGOON_ROUTE\u74b0\u5883\u5909\u6570\u3092\u4ecb\u3057\u3066\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#5","title":"5. \u30a4\u30e1\u30fc\u30b8\u306e\u30d7\u30c3\u30b7\u30e5\u3068\u30bf\u30b0\u4ed8\u3051","text":"

          \u3053\u308c\u3067\u3001\u4ee5\u524d\u306b\u30d3\u30eb\u30c9\u3057\u305fDocker\u30a4\u30e1\u30fc\u30b8\u3092\u5185\u90e8\u306eDocker\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          docker-compose.yml\u3067\u30d3\u30eb\u30c9\u3059\u308bDockerfile\u3092\u6307\u5b9a\u305b\u305a\u306b\u30a4\u30e1\u30fc\u30b8\u306e\u307f\u3092\u6307\u5b9a\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u306b\u3064\u3044\u3066\u3082\u3001\u30bf\u30b0\u4ed8\u3051\u304c\u884c\u308f\u308c\u3001\u5185\u90e8Docker\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u8a8d\u8b58\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30b3\u30f3\u30c6\u30ca\u3067\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#6","title":"6. \u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8","text":"

          Lagoon\u306f\u3001\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\uff08PVC\uff09\u3092\u5fc5\u8981\u3068\u3057\u3066\u8981\u6c42\u3057\u305f\u5404\u30b5\u30fc\u30d3\u30b9\u306e\u305f\u3081\u306b\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#7-cron","title":"7. Cron\u30b8\u30e7\u30d6","text":"

          MariaDB\u306e\u3088\u3046\u306bcron\u30b8\u30e7\u30d6\u3092\u8981\u6c42\u3059\u308b\u5404\u30b5\u30fc\u30d3\u30b9\u3001\u304a\u3088\u3073.lagoon.yml\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30ab\u30b9\u30bf\u30e0cron\u30b8\u30e7\u30d6\u3054\u3068\u306b\u3001Lagoon\u306fcron\u30b8\u30e7\u30d6\u74b0\u5883\u5909\u6570\u3092\u751f\u6210\u3057\u3001\u305d\u308c\u3089\u306f\u5f8c\u3067\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306b\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#8","title":"8. \u5b9a\u7fa9\u6e08\u307f\u306e\u30d7\u30ec\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306e\u5b9f\u884c","text":"

          \u6b21\u306bLagoon\u306f.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305fpre-rollout\u306e\u30bf\u30b9\u30af\u3092\u78ba\u8a8d\u3057\u3001\u305d\u308c\u3089\u3092\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b1\u3064\u305a\u3064\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30bf\u30b9\u30af\u306f\u73fe\u5728\u5b9f\u884c\u4e2d\u306e\u30dd\u30c3\u30c9\u3067\u5b9f\u884c\u3055\u308c\u308b\u305f\u3081\u3001\u6700\u65b0\u306e\u30b3\u30df\u30c3\u30c8\u306b\u306e\u307f\u5b58\u5728\u3059\u308b\u6a5f\u80fd\u3084\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u307e\u305f\u3001\u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3002

          \u3053\u308c\u3089\u306e\u30bf\u30b9\u30af\u306e\u3044\u305a\u308c\u304b\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u3001Lagoon\u306f\u76f4\u3061\u306b\u505c\u6b62\u3057\u901a\u77e5\u3057\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306f\u9032\u884c\u3057\u307e\u305b\u3093\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#9-deploymentconfigsstatefulsetsdaemonsets","title":"9. DeploymentConfigs\u3001Statefulsets\u3001Daemonsets","text":"

          \u3053\u308c\u304c\u304a\u305d\u3089\u304f\u6700\u3082\u91cd\u8981\u306a\u30b9\u30c6\u30c3\u30d7\u3067\u3059\u3002\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u306b\u57fa\u3065\u3044\u3066\u3001Lagoon\u306f[ Deployment\u3001Statefulset \u307e\u305f\u306f Daemonsets \u3092\u30b5\u30fc\u30d3\u30b9\u7528\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002 (Deployment\u306fOpenShift\u306e DeploymentConfigs \u3068\u540c\u7b49\u3067\u3059)

          \u3053\u308c\u306b\u306f\u3001\u4ee5\u524d\u306b\u53ce\u96c6\u3057\u305f\u60c5\u5831\u3001cron\u30b8\u30e7\u30d6\u3001\u6c38\u7d9a\u7684\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4f4d\u7f6e\u3001\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u306a\u3069\u5168\u3066\u304c\u542b\u307e\u308c\u307e\u3059\u3002

          \u3053\u308c\u3089\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u306f\u3001\u74b0\u5883\u5909\u6570\u304c\u5909\u66f4\u3055\u308c\u305f\u308a\u3001\u30a4\u30e1\u30fc\u30b8\u304c\u5909\u66f4\u3055\u308c\u305f\u308a\u3057\u305f\u5834\u5408\u306a\u3069\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066Kubernetes\u3084OpenShift\u304c\u30dd\u30c3\u30c9\u306e\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u81ea\u52d5\u7684\u306b\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u3053\u3068\u3082\u5f15\u304d\u8d77\u3053\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5909\u66f4\u304c\u306a\u3044\u5834\u5408\u306f\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306f\u884c\u308f\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306ePHP\u30b3\u30fc\u30c9\u306e\u307f\u3092\u66f4\u65b0\u3057\u305f\u5834\u5408\u3001Varnish\u3001Solr\u3001MariaDB\u3001Redis\u306a\u3069\u306e\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u304c\u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u3092\u542b\u307e\u306a\u3044\u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u306a\u3044\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5168\u3066\u304c\u975e\u5e38\u306b\u9ad8\u901f\u306b\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#10","title":"10. \u3059\u3079\u3066\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064","text":"

          \u3053\u3053\u3067Lagoon\u306f\u5f85\u6a5f\u3057\u307e\u3059\uff01\u65b0\u3057\u3044\u30dd\u30c3\u30c9\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u3059\u3079\u3066\u5b8c\u4e86\u3057\u3001\u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af\u304c\u6210\u529f\u3059\u308b\u306e\u3092\u5f85\u3061\u307e\u3059\u3002

          \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3084\u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af\u306e\u3044\u305a\u308c\u304b\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306f\u3053\u3053\u3067\u505c\u6b62\u3055\u308c\u3001Slack\u306a\u3069\u306e\u5b9a\u7fa9\u6e08\u307f\u306e\u901a\u77e5\u30b7\u30b9\u30c6\u30e0\u3092\u901a\u3058\u3066\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u5931\u6557\u3057\u305f\u3053\u3068\u304c\u901a\u77e5\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#11","title":"11. \u5b9a\u7fa9\u3055\u308c\u305f\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306e\u5b9f\u884c","text":"

          \u6b21\u306b\u3001Lagoon\u306f.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066post-rollout\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30bf\u30b9\u30af\u3092\u63a2\u3057\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u3067\u305d\u308c\u3089\u3092\u4e00\u3064\u305a\u3064\u5b9f\u884c\u3057\u307e\u3059\u3002

          \u3053\u308c\u3089\u306e\u3044\u305a\u308c\u304b\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u3001Lagoon\u306f\u76f4\u3061\u306b\u505c\u6b62\u3057\u3001\u3042\u306a\u305f\u306b\u901a\u77e5\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/build-and-deploy-process/#12","title":"12. \u6210\u529f","text":"

          \u5168\u3066\u304c\u9806\u8abf\u306b\u9032\u307f\u3001\u4f55\u3082\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u3001Lagoon\u306f\u3053\u306e\u30d3\u30eb\u30c9\u3092\u6210\u529f\u3068\u30de\u30fc\u30af\u3057\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u901a\u77e5\u3092\u4ecb\u3057\u3066\u3042\u306a\u305f\u306b\u901a\u77e5\u3057\u307e\u3059\u3002\u2705

          "},{"location":"ja/concepts-basics/docker-compose-yml/","title":"docker-compose.yml","text":"

          docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306fLagoon\u304c\u4ee5\u4e0b\u306e\u76ee\u7684\u306e\u305f\u3081\u306b\u5229\u7528\u3057\u307e\u3059:

          • \u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u30b5\u30fc\u30d3\u30b9/\u30b3\u30f3\u30c6\u30ca\u3092\u77e5\u308b
          • \u30b3\u30f3\u30c6\u30ca\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u3069\u306e\u3088\u3046\u306b\u30d3\u30eb\u30c9\u3055\u308c\u308b\u304b\u3092\u5b9a\u7fa9\u3059\u308b
          • \u6c38\u7d9a\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u3088\u3046\u306a\u8ffd\u52a0\u306e\u8a2d\u5b9a\u3092\u5b9a\u7fa9\u3059\u308b

          Docker Compose(\u30c4\u30fc\u30eb)\u306fYAML\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u306e\u691c\u8a3c\u306b\u975e\u5e38\u306b\u53b3\u683c\u3067\u3042\u308b\u305f\u3081\u3001\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\u306elabels\u5185\u3067\u306e\u307f\u8a2d\u5b9a\u3092\u884c\u3046\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002

          \u8b66\u544a

          Lagoon\u306fdocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30e9\u30d9\u30eb\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u3001\u30a4\u30e1\u30fc\u30b8\u540d\u3001\u30d3\u30eb\u30c9\u5b9a\u7fa9\u306e\u307f\u3092\u8aad\u307f\u53d6\u308a\u307e\u3059\u3002\u30dd\u30fc\u30c8\u3001\u74b0\u5883\u5909\u6570\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u30ea\u30f3\u30af\u3001\u30e6\u30fc\u30b6\u30fc\u306a\u3069\u306e\u5b9a\u7fa9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002

          \u3053\u308c\u306f\u610f\u56f3\u7684\u306a\u3082\u306e\u3067\u3001docker-compose\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306e\u8a2d\u5b9a\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002Lagoon\u306flagoon.type\u304b\u3089\u3042\u306a\u305f\u304c\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u3044\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u5b66\u3073\u3001\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u5fc5\u8981\u3068\u3059\u308b\u30dd\u30fc\u30c8\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u305d\u306e\u4ed6\u306e\u8ffd\u52a0\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u77e5\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u4ee5\u4e0b\u306b\u3001Drupal\u7528\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306e\u7c21\u5358\u306a\u4f8b\u3092\u793a\u3057\u307e\u3059:

          docker-compose.yml
          version: '2.3'\nx-lagoon-project:\n# Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d(\u3053\u308c\u3092\u7de8\u96c6\u3059\u308b\u969b\u306f`&lagoon-project`\u3092\u6b8b\u3057\u3066\u304f\u3060\u3055\u3044)\n&lagoon-project drupal-example\nx-volumes:\n&default-volumes\n# Docker\u30b3\u30f3\u30c6\u30ca\u306b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30de\u30a6\u30f3\u30c8\u3057\u305f\u3044\u3059\u3079\u3066\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u5b9a\u7fa9\u3057\u307e\u3059\nvolumes:\n- .:/app:delegated\nx-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# \u30ed\u30fc\u30ab\u30eb\u3067\u4f7f\u7528\u3059\u308b\u30eb\u30fc\u30c8\u3002pygmy\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u30eb\u30fc\u30c8\u306f *\u5fc5\u305a* .docker.amazee.io\u3067\u7d42\u308f\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n# \u672c\u756a\u74b0\u5883\u3068\u540c\u69d8\u306e\u52d5\u4f5c\u3092\u3055\u305b\u305f\u3044\u5834\u5408\u306f\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\n#LAGOON_ENVIRONMENT_TYPE: production\n# Xdebug\u3092\u6709\u52b9\u306b\u3057\u3001`docker-compose up -d`\u3067\u518d\u8d77\u52d5\u3057\u305f\u3044\u5834\u5408\u306f\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\n#XDEBUG_ENABLE: \"true\"\nx-user:\n&default-user\n# \u30b3\u30f3\u30c6\u30ca\u304c\u5b9f\u884c\u3055\u308c\u308b\u3079\u304d\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u3002Linux\u4e0a\u3067ID `1000`\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u306f\u3053\u308c\u3092\u5909\u66f4\u3057\u307e\u3059\nuser: '1000'\nservices:\nnginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent # (1)\nlagoon.persistent: /app/web/sites/default/files/\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent # (2)\nlagoon.name: nginx\nlagoon.persistent: /app/web/sites/default/files/\nmariadb:\nimage: uselagoon/mariadb-10.11-drupal\nlabels:\nlagoon.type: mariadb\n
          1. \u3053\u3053\u3067\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9\u306b\u6ce8\u76ee\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          2. \u3053\u3053\u3067\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9\u306b\u6ce8\u76ee\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          "},{"location":"ja/concepts-basics/docker-compose-yml/#basic-settings","title":"\u57fa\u672c\u8a2d\u5b9a","text":"

          x-lagoon-project:

          \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30de\u30b7\u30f3\u540d\u3067\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002\"drupal-example\"\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

          x-volumes:

          \u3053\u308c\u306fLagoon\u306b\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3082\u306e\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f/app\u306b\u5b58\u5728\u3057\u307e\u3059\u304c\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u3053\u308c\u3092\u8ffd\u52a0\u307e\u305f\u306f\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          x-environment:

          1. \u3053\u3053\u3067\u30ed\u30fc\u30ab\u30eb\u958b\u767aURL\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002pygmy\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001.docker.amazee.io\u3067\u7d42\u308f\u3089\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
          2. \u5b8c\u5168\u306b\u672c\u756a\u74b0\u5883\u306b\u4f3c\u305b\u305f\u3044\u5834\u5408\u306f\u3001LAGOON_ENVIRONMENT_TYPE: production \u306e\u30b3\u30e1\u30f3\u30c8\u3092\u5916\u3057\u307e\u3059\u3002
          3. Xdebug\u3092\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001DEBUG_ENABLE: \"true\" \u306e\u30b3\u30e1\u30f3\u30c8\u3092\u5916\u3057\u307e\u3059\u3002

          x-user:

          Linux\u3092\u4f7f\u7528\u3057\u3066\u3044\u3066\u30011000\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u3067\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u3092\u9664\u304d\u3001\u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u307b\u3068\u3093\u3069\u3042\u308a\u307e\u305b\u3093\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#services","title":"services","text":"

          \u3053\u3053\u3067\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002 \u6b8b\u5ff5\u306a\u304c\u3089\u3001 Docker Compose\u306f\u305d\u308c\u3089\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059\u304c\u3001\u5b9f\u969b\u306b\u306f\u30b3\u30f3\u30c6\u30ca\u3067\u3059\u3002\u3053\u308c\u304b\u3089\u306f\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3076\u3053\u3068\u306b\u3057\u307e\u3059\u3002

          \u305d\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d(\u4e0a\u8a18\u306e\u4f8b\u3067\u306f nginx\u3001php\u3001mariadb)\u306f\u3001Lagoon\u306b\u3088\u3063\u3066\u751f\u6210\u3055\u308c\u308bKubernetes\u306e\u30dd\u30c3\u30c9\u306e\u540d\u524d(\u307e\u305f\u5225\u306e\u7528\u8a9e\u3068\u3057\u3066\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059)\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u3001\u3055\u3089\u306b\u5b9a\u7fa9\u3055\u308c\u305flagoon.type\u306b\u57fa\u3065\u3044\u3066\u4f5c\u6210\u3055\u308c\u308bKubernetes\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3068\u3057\u3066\u3082\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3001\u30eb\u30fc\u30c8\u3001\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306a\u3069\u304c\u542b\u307e\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          \u30b5\u30fc\u30d3\u30b9\u540d\u306fRFC 1035\u306eDNS\u30e9\u30d9\u30eb\u6a19\u6e96\u306b\u6e96\u62e0\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30b5\u30fc\u30d3\u30b9\u540d\u306f\u4ee5\u4e0b\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          • \u6700\u592763\u6587\u5b57\u3092\u542b\u3080
          • \u5c0f\u6587\u5b57\u306e\u82f1\u6570\u5b57\u307e\u305f\u306f'-'\u306e\u307f\u3092\u542b\u3080
          • \u82f1\u5b57\u3067\u59cb\u307e\u308b
          • \u82f1\u6570\u5b57\u3067\u7d42\u308f\u308b

          \u8b66\u544a

          \u4e00\u5ea6\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3092\u8a2d\u5b9a\u3057\u305f\u3089\u3001\u4fee\u6b63\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u4fee\u6b63\u3059\u308b\u3068\u3001\u30b3\u30f3\u30c6\u30ca\u5185\u3067\u69d8\u3005\u306a\u554f\u984c\u304c\u767a\u751f\u3057\u3001\u4e0d\u6574\u5408\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#docker-images","title":"Docker\u30a4\u30e1\u30fc\u30b8","text":""},{"location":"ja/concepts-basics/docker-compose-yml/#build","title":"build","text":"

          \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3054\u3068\u306bLagoon\u304c\u3042\u306a\u305f\u306e\u30b5\u30fc\u30d3\u30b9\u306eDockerfile\u3092\u30d3\u30eb\u30c9\u3057\u3066\u307b\u3057\u3044\u5834\u5408\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3067\u304d\u307e\u3059:

          build

          • context
            • docker build \u30b3\u30de\u30f3\u30c9\u306b\u6e21\u3059\u3079\u304d\u30d3\u30eb\u30c9\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9
          • dockerfile:
            • \u30d3\u30eb\u30c9\u3059\u308b\u3079\u304dDockerfile\u306e\u5834\u6240\u3068\u540d\u524d

          \u8b66\u544a

          Lagoon\u306f\u77ed\u7e2e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002build: <Dockerfile>\u306e\u5b9a\u7fa9\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u51e6\u7406\u306f\u5931\u6557\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#image","title":"image","text":"

          Dockerfile\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u3001\u65e2\u5b58\u306eDockerfile\u3092\u4f7f\u7528\u3057\u305f\u3044\u5834\u5408\u306f\u3001image\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#types","title":"\u30bf\u30a4\u30d7","text":"

          Lagoon\u306f\u3001Kubernetes\u3084OpenShift\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6b63\u3057\u304f\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u77e5\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          \u3053\u308c\u306flagoon.type\u30e9\u30d9\u30eb\u3092\u901a\u3058\u3066\u884c\u308f\u308c\u307e\u3059\u3002\u9078\u629e\u3067\u304d\u308b\u30bf\u30a4\u30d7\u306f\u591a\u6570\u3042\u308a\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u30bf\u30a4\u30d7\u3068\u8ffd\u52a0\u8a2d\u5b9a\u306e\u53ef\u80fd\u6027\u3092\u898b\u308b\u306b\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#skipignore-containers","title":"\u30b3\u30f3\u30c6\u30ca\u306e\u30b9\u30ad\u30c3\u30d7/\u7121\u8996","text":"

          \u305f\u3068\u3048\u3070\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u6642\u306b\u306e\u307f\u30b3\u30f3\u30c6\u30ca\u304c\u5fc5\u8981\u306a\u5834\u5408\u306a\u3069\u3001Lagoon\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u5b8c\u5168\u306b\u7121\u8996\u3055\u305b\u305f\u3044\u5834\u5408\u306f\u3001\u305d\u306e\u30bf\u30a4\u30d7\u306bnone\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#persistent-storage","title":"\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8","text":"

          \u4e00\u90e8\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u306f\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5fc5\u8981\u3067\u3059\u3002Lagoon\u3067\u306f\u3001\u5404\u30b3\u30f3\u30c6\u30ca\u304c\u6700\u59271\u3064\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u306b\u81ea\u8eab\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u8981\u6c42\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d(\u305d\u308c\u3092\u4ed6\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u305b\u308b\u3053\u3068\u3082\u53ef\u80fd)\u3001\u307e\u305f\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u4ed6\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u4f5c\u6210\u3057\u305f\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3088\u3046\u6307\u793a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

          \u591a\u304f\u306e\u5834\u5408\u3001Lagoon\u306f\u305d\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u3069\u3053\u306b\u914d\u7f6e\u3059\u3079\u304d\u304b\u3092\u77e5\u3063\u3066\u3044\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001 \u4f8b\u3048\u3070\u3001MariaDB\u30b3\u30f3\u30c6\u30ca\u306e\u5834\u5408\u3001Lagoon\u306f\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092/var/lib/mysql\u306b\u914d\u7f6e\u3059\u3079\u304d\u3068\u77e5\u3063\u3066\u304a\u308a\u3001\u305d\u308c\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u8ffd\u52a0\u306e\u8a2d\u5b9a\u306a\u3057\u306b\u81ea\u52d5\u7684\u306b\u305d\u3053\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u4e00\u90e8\u306e\u72b6\u6cc1\u3067\u306f\u3001Lagoon\u306f\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u3069\u3053\u306b\u914d\u7f6e\u3059\u3079\u304d\u304b\u3092\u77e5\u308b\u305f\u3081\u306b\u3042\u306a\u305f\u306e\u52a9\u3051\u304c\u5fc5\u8981\u3067\u3059\u3002

          • lagoon.persistent - \u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u3079\u304d\u7d76\u5bfe\u30d1\u30b9(\u4e0a\u8a18\u306e\u4f8b\u3067\u306f/app/web/sites/default/files/\u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u306fDrupal\u304c\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u671f\u5f85\u3059\u308b\u30d1\u30b9\u3067\u3059)\u3002
          • lagoon.persistent.name - Lagoon\u306b\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u65b0\u3057\u3044\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u306a\u3044\u3088\u3046\u306b\u6307\u793a\u3057\u3001\u4ee3\u308f\u308a\u306b\u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u5b9a\u7fa9\u6e08\u307f\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059\u3002
          • lagoon.persistent.size - \u5fc5\u8981\u306a\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u30b5\u30a4\u30ba(Lagoon\u306f\u901a\u5e38\u3001\u6700\u5c0f5G\u306e\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3082\u3057\u3082\u3063\u3068\u5fc5\u8981\u306a\u3089\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044)\u3002
          • lagoon.persistent.class - \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306fLagoon\u306f\u81ea\u52d5\u7684\u306b\u9069\u5207\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9(MySQL\u306eSSD\u3001Nginx\u306e\u5927\u91cf\u30b9\u30c8\u30ec\u30fc\u30b8\u306a\u3069)\u3092\u30b5\u30fc\u30d3\u30b9\u306b\u5272\u308a\u5f53\u3066\u307e\u3059\u3002\u3053\u308c\u3092\u4e0a\u66f8\u304d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u3053\u3067\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001Lagoon\u304c\u52d5\u4f5c\u3059\u308bKubernetes/OpenShift\u306e\u30a4\u30f3\u30d5\u30e9\u57fa\u76e4\u306b\u5927\u304d\u304f\u4f9d\u5b58\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3064\u3044\u3066\u306fLagoon\u306e\u7ba1\u7406\u8005\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044\u3002
          "},{"location":"ja/concepts-basics/docker-compose-yml/#auto-generated-routes","title":"\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8","text":"

          docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u3092\u6709\u52b9\u307e\u305f\u306f\u7121\u52b9\u306b\u3059\u308b\u3053\u3068\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002

          • lagoon.autogeneratedroute: false \u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u81ea\u52d5\u7684\u306b\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u304c\u505c\u6b62\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u9069\u7528\u3067\u304d\u307e\u3059\u304c\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9\u306a\u3069\u306e\u8ffd\u52a0\u306e\u5185\u90e8\u5411\u3051\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u969b\u306bbasic\u304a\u3088\u3073basic-persistent\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3067\u7279\u306b\u4fbf\u5229\u3067\u3059\u3002\u9006\u3082\u307e\u305f\u540c\u69d8\u306b\u3001.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u304c\u305d\u308c\u3089\u3092\u7121\u52b9\u306b\u3059\u308b\u3068\u304d\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002
          "},{"location":"ja/concepts-basics/docker-compose-yml/#multi-container-pods","title":"\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30fc\u30dd\u30c3\u30c9","text":"

          Kubernetes\u3068OpenShift\u306f\u5358\u7d14\u306a\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001\u305d\u308c\u305e\u308c\u304c1\u3064\u4ee5\u4e0a\u306e\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u6301\u3064\u30dd\u30c3\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u901a\u5e38\u3001Lagoon\u306f\u5b9a\u7fa9\u3055\u308c\u305fdocker-compose\u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b\u30b3\u30f3\u30c6\u30ca\u30fc\u304c\u5185\u90e8\u306b\u3042\u308b\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3042\u308b\u30b1\u30fc\u30b9\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30b3\u30f3\u30c6\u30ca\u30fc\u304c\u4e92\u3044\u306b\u975e\u5e38\u306b\u4f9d\u5b58\u3057\u3066\u3044\u3066\u3001\u5e38\u306b\u4e00\u7dd2\u306b\u3044\u308b\u3079\u304d\u3067\u3042\u308b\u305f\u3081\u3001\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u5185\u306b2\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u914d\u7f6e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u3088\u3046\u306a\u72b6\u6cc1\u306e\u4e00\u4f8b\u306f\u3001PHP\u30b3\u30f3\u30c6\u30ca\u3068NGINX\u30b3\u30f3\u30c6\u30ca\u304cDrupal\u306e\u3088\u3046\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306ePHP\u30b3\u30fc\u30c9\u3092\u542b\u3080\u5834\u5408\u3067\u3059\u3002

          \u3053\u308c\u3089\u306e\u30b1\u30fc\u30b9\u3067\u306f\u3001\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u4e00\u7dd2\u306b\u3059\u3079\u304d\u304b\u3092Lagoon\u306b\u4f1d\u3048\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3001\u6b21\u306e\u3088\u3046\u306b\u884c\u3044\u307e\u3059(\u79c1\u305f\u3061\u304c\u30b3\u30f3\u30c6\u30ca\u3092docker-compose\u306e\u305f\u3081\u306bservices\u3068\u547c\u3093\u3067\u3044\u308b\u3053\u3068\u3092\u899a\u3048\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044):

          1. \u4e21\u65b9\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u3001\u4e8c\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u671f\u5f85\u3059\u308blagoon.type\u3067\u5b9a\u7fa9\u3057\u307e\u3059(\u3053\u306e\u4f8b\u3067\u306f\u3001nginx\u3068php\u30b5\u30fc\u30d3\u30b9\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308bnginx-php-persistent\u3067\u3059)\u3002
          2. \u7b2c2\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u7b2c1\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u30ea\u30f3\u30af\u3057\u3001\u7b2c2\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30e9\u30d9\u30eblagoon.name\u306b\u3066\u7b2c1\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059(\u3053\u306e\u4f8b\u3067\u306f\u3001lagoon.name: nginx\u3068\u6307\u5b9a\u3057\u307e\u3059)\u3002

          \u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u306fnginx\u3068php\u30b3\u30f3\u30c6\u30ca\u3092nginx\u3068\u547c\u3070\u308c\u308b1\u3064\u306e\u30dd\u30c3\u30c9\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3057\u307e\u3059\u3002

          \u8b66\u544a

          \u4e00\u5ea6\u30b5\u30fc\u30d3\u30b9\u306elagooon.name\u3092\u8a2d\u5b9a\u3057\u305f\u3089\u3001\u4fee\u6b63\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u3042\u306a\u305f\u306e\u30b3\u30f3\u30c6\u30ca\u3067\u6df7\u4e71\u3092\u5f15\u304d\u8d77\u3053\u3057\u3001\u4e0d\u6574\u5408\u3092\u5f15\u304d\u8d77\u3053\u3059\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002

          Lagoon\u306f\u30012\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u3046\u3061\u3069\u308c\u304c\u5b9f\u969b\u306e\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\uff08\u3053\u306e\u5834\u5408\u3001nginx\u304a\u3088\u3073php\uff09\u3067\u3042\u308b\u304b\u3092\u7406\u89e3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u30bf\u30a4\u30d7\u306b\u3088\u3063\u3066\u4e0e\u3048\u3089\u308c\u305f\u540d\u524d\u3068\u540c\u3058\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u691c\u7d22\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001nginx-php-persistent\u306fdocker-compose.yml\u5185\u306bnginx\u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3068php\u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u304c1\u3064\u305a\u3064\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u307e\u3059\u3002\u4f55\u3089\u304b\u306e\u7406\u7531\u3067\u30b5\u30fc\u30d3\u30b9\u306b\u7570\u306a\u308b\u540d\u524d\u3092\u4f7f\u7528\u3057\u305f\u3044\u5834\u5408\u3001\u307e\u305f\u306fnginx-php-persistent\u30bf\u30a4\u30d7\u306e\u30dd\u30c3\u30c9\u3092\u8907\u6570\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u306b\u306f\u3001\u5b9f\u969b\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306blagoon.deployment.servicetype\u3068\u3044\u3046\u8ffd\u52a0\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u4f8b:

          docker-compose.yml
          nginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # \u3053\u308c\u304c\u306a\u3044\u5834\u5408\u3001Lagoon\u306f\u30b3\u30f3\u30c6\u30ca\u540d\u3001\u3064\u307e\u308a\u3053\u306e\u5834\u5408\u306fnginx\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\nlagoon.deployment.servicetype: nginx\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092Lagoon\u306eNGINX\u30dd\u30c3\u30c9\u306e\u4e00\u90e8\u306b\u3057\u307e\u3059\u3002\nlagoon.deployment.servicetype: php\n

          \u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u306fnginx\u3068php\u3067\u3059(\u597d\u304d\u306a\u540d\u524d\u3092\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002lagoon.name\u306fLagoon\u306b\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u4e00\u7dd2\u306e\u30dd\u30c3\u30c9\u306b\u3059\u3079\u304d\u3092\u4f1d\u3048\u307e\u3059 - \u540c\u3058\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3059\u3079\u3066\u4e00\u7dd2\u306e\u30dd\u30c3\u30c9\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002

          Lagoon\u306f\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u304cnginx\u3001php\u3067\u3042\u308b\u304b\u3092\u8a8d\u8b58\u3059\u308b\u305f\u3081\u306b\u3001lagoon.deployment.servicetype: nginx\u304a\u3088\u3073lagoon.deployment.servicetype: php\u3068\u5b9a\u7fa9\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#helm-templates-kubernetes-only","title":"Helm\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 (Kubernetes\u306e\u307f)","text":"

          Lagoon\u306fKubernetes\u3067\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4f5c\u6210\u306bHelm\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u4e00\u9023\u306e\u30c1\u30e3\u30fc\u30c8\u304cbuild-deploy-tool\u30a4\u30e1\u30fc\u30b8\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#custom-rollout-monitor-types","title":"\u30ab\u30b9\u30bf\u30e0\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30e2\u30cb\u30bf\u30fc\u30bf\u30a4\u30d7","text":"

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001Lagoon\u306f\u30ab\u30b9\u30bf\u30e0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u304cKubernetes\u307e\u305f\u306fOpenshift\u5185\u306eDeploymentConfig\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4ecb\u3057\u3066\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3055\u308c\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306b\u57fa\u3065\u3044\u3066\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3092\u76e3\u8996\u3057\u307e\u3059\u3002\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u304c\u7570\u306a\u308b\u76e3\u8996\u65b9\u6cd5\u3092\u5fc5\u8981\u3068\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306flagoon.rollout\u3092\u901a\u3058\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

          • deploymentconfig - \u3053\u308c\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4e2d\u306eDeploymentConfig\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u671f\u5f85\u3057\u307e\u3059\u3002
          • daemonset - \u30b5\u30fc\u30d3\u30b9\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5185\u306eDaemonset\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u671f\u5f85\u3057\u307e\u3059\u3002
          • false - \u3069\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3082\u76e3\u8996\u305b\u305a\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u9069\u7528\u3055\u308c\u3001\u30a8\u30e9\u30fc\u3092\u6295\u3052\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u6e80\u8db3\u3057\u307e\u3059\u3002

          \u307e\u305f\u3001\u7279\u5b9a\u306e\u74b0\u5883\u306e\u307f\u306b\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3092\u4e0a\u66f8\u304d\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f.lagoon.yml\u3067\u884c\u3044\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#docker-compose-v2-compatibility","title":"Docker Compose v2\u4e92\u63db\u6027","text":"

          \u30d0\u30b0

          \u30ed\u30fc\u30ab\u30eb\u3067Docker Compose V2\u306e\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u3068\u3001\u4e00\u90e8\u306e\u65e2\u77e5\u306e\u554f\u984c\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059 - \u3053\u308c\u3089\u306e\u554f\u984c\u306f\u5f8c\u306e\u30ea\u30ea\u30fc\u30b9(v2.17.3\u4ee5\u964d)\u3067\u89e3\u6c7a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\u7b56\u306f\u901a\u5e38\u3001\u4f7f\u7528\u3057\u3066\u3044\u308bDocker Compose\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u304b(\u307e\u305f\u306f\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b)\u3001\u3042\u308b\u3044\u306f\u4f7f\u7528\u3057\u3066\u3044\u308bDocker Desktop\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u3053\u3068\u3067\u3059\u3002 Docker Desktop\u306e\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u8a73\u3057\u304f\u306f

          depends_on\u306e\u30a8\u30e9\u30fc\u3092\u793a\u3059Docker Compose\u51fa\u529b
          Failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization\n\n\u307e\u305f\u306f\n\nFailed to solve: drupal9-base-cli: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed`\n
          • \u3053\u308c\u3089\u306fDocker Compose v2.13.0\u3067\u89e3\u6c7a\u3055\u308c\u307e\u3059\u3002
          • \u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u3001\u30d3\u30eb\u30c9\u304c\u3001\u307e\u3060\u30d3\u30eb\u30c9\u3055\u308c\u3066\u3044\u306a\u3044Docker\u30a4\u30e1\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3057\u305f\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002BuildKit\u306f\u4e26\u5217\u306b\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u3001\u3082\u3057\u3082\u3046\u4e00\u3064\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u7d99\u627f\u3059\u308b\u3082\u306e\u304c\u3042\u308b\u5834\u5408(Drupal\u306eCLI\u306e\u3088\u3046\u306b)\u306f\u3053\u306e\u4e8b\u8c61\u304c\u767a\u751f\u3057\u307e\u3059\u3002
          • \u30de\u30eb\u30c1\u30b9\u30c6\u30fc\u30b8\u30d3\u30eb\u30c9\u3068\u3057\u3066\u518d\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001\u30d3\u30eb\u30c9\u5185\u306etarget\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
          • \u3059\u3067\u306b\u65b0\u3057\u3044Docker Compose\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u30a8\u30e9\u30fc\u306f\u3001docker-container\u30d3\u30eb\u30c9\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092buildx\u3067\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002docker buildx ls\u304cdocker-container\u30d9\u30fc\u30b9\u306e\u3082\u306e\u3067\u306f\u306a\u304f\u3001docker builder\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u3068\u3057\u3066\u8868\u793a\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002Docker buildx\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3053\u3061\u3089\u3067\u3059.
          volumes_from\u30a8\u30e9\u30fc\u3092\u793a\u3059Docker Compose\u51fa\u529b
          no such service: container:amazeeio-ssh-agent\n
          • \u3053\u306e\u554f\u984c\u306fDocker Compose v2.17.3\u3067\u89e3\u6c7a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          • \u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u30b3\u30f3\u30c6\u30ca\u3078\u306eSSH\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u304c\u3001\u3042\u306a\u305f\u306eDocker Compose\u30b9\u30bf\u30c3\u30af\u306e\u5916\u90e8\u3067\u5b9f\u884c\u3055\u308c\u3001\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002
          • \u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u304b\u3089SSH\u30a2\u30af\u30bb\u30b9\u304c\u5fc5\u8981\u306a\u3044\u5834\u5408\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
          "},{"location":"ja/concepts-basics/docker-compose-yml/#buildkit-and-lagoon","title":"BuildKit\u3068Lagoon","text":"

          BuildKit\u306f\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u52b9\u7387\u7684\u3067\u8868\u73fe\u529b\u8c4a\u304b\u3067\u7e70\u308a\u8fd4\u3057\u5229\u7528\u53ef\u80fd\u306a\u65b9\u6cd5\u3067\u30d3\u30eb\u30c9\u6210\u679c\u7269\u306b\u5909\u63db\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u30ad\u30c3\u30c8\u3067\u3059\u3002

          Lagoon v2.11.0\u306e\u30ea\u30ea\u30fc\u30b9\u306b\u3088\u308a\u3001Lagoon\u306f\u3088\u308a\u9ad8\u5ea6\u306aBuildKit\u30d9\u30fc\u30b9\u306edocker-compose\u30d3\u30eb\u30c9\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u74b0\u5883\u3067BuildKit\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u74b0\u5883\u306bDOCKER_BUILDKIT=1\u3092\u30d3\u30eb\u30c9\u6642\u306e\u5909\u6570\u3068\u3057\u3066\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#docker-compose-errors-in-lagoon-builds","title":"Lagoon\u30d3\u30eb\u30c9\u3067\u306eDocker Compose\u30a8\u30e9\u30fc","text":"

          Docker Compose\u3067\u4e00\u822c\u7684\u306a\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001Lagoon\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u30da\u30fc\u30b8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#common-docker-compose-issues","title":"\u3088\u304f\u3042\u308bDocker Compose\u306e\u554f\u984c","text":"

          \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4e00\u822c\u7684\u306aDocker Compose\u306e\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u3067\u767a\u751f\u3059\u308b\u304b\u3001\u307e\u305f\u306fLagoon\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u3068\u8b66\u544a\u3068\u3057\u3066\u767a\u751f\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          "},{"location":"ja/concepts-basics/docker-compose-yml/#dual-mapping-keys","title":"\u4e8c\u91cd\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc","text":"\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc\u306e\u30a8\u30e9\u30fc\u3092\u793a\u3059Docker Compose\u306e\u51fa\u529b
          ERR: yaml: unmarshal errors: line 22: mapping key \"<<\" already defined at line 21\n

          Lagoon\u306e\u521d\u671f\u30ea\u30ea\u30fc\u30b9\u3067\u306f\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u3068\u30e6\u30fc\u30b6\u30fc\u30b3\u30fc\u30c9\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u306bYAML\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u30da\u30a2\u304c\u6dfb\u4ed8\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002Docker Compose\u306e\u65b0\u3057\u3044\u30ea\u30ea\u30fc\u30b9\u3067\u306f\u3001\u3053\u308c\u3092\u30a8\u30e9\u30fc\u3068\u3057\u3066\u5831\u544a\u3057\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u4f8b\u304c\u73fe\u5728\u66f4\u65b0\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u306e\u3001\u66f4\u65b0\u304c\u5fc5\u8981\u306a\u53e4\u3044\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          \u3053\u306e\u30a8\u30e9\u30fc\u306f\u3001Docker Compose\u304c\u914d\u5217\u306b\u4f55\u3092\u633f\u5165\u3057\u3066\u3044\u308b\u306e\u304b\u5206\u304b\u3089\u306a\u3044\u305f\u3081\u3001\u91cd\u8907\u3057\u3066\u3044\u308b\u3068\u4eee\u5b9a\u3057\u3066\u767a\u751f\u3057\u307e\u3059\u3002

          \u3042\u306a\u305f\u306edocker-compose.yml\u304c\u3053\u306e(\u307e\u305f\u306f\u985e\u4f3c\u306e)\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u3092\u4e00\u3064\u4ee5\u4e0a\u542b\u3093\u3067\u3044\u308b\u5834\u5408\u3001\u3042\u306a\u305f\u306f\u5f71\u97ff\u3092\u53d7\u3051\u307e\u3059\u3002

          \u4e8c\u91cd\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc\u3092\u542b\u3080Docker Compose\u306e\u30a8\u30e9\u30fc
          ...\n<< : [*default-volumes]\n<< : [*default-user]\n...\n

          \u4fee\u6b63\u7248\u3067\u306f\u3001\u4e21\u65b9\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u30921\u3064\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc\u306b\u7d71\u5408\u3057\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u7b87\u6240\u3092\u5bfe\u51e6\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          Docker Compose\u306b\u304a\u3051\u308b\u8907\u6570\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u30de\u30c3\u30d4\u30f3\u30b0\u30ad\u30fc\u306e\u6b63\u3057\u3044\u633f\u5165\u65b9\u6cd5
          ...\n<< : [*default-volumes, *default-user]\n...\n
          "},{"location":"ja/concepts-basics/lagoon-yml/","title":".lagoon.yml","text":"

          .lagoon.yml \u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306e\u4e2d\u5fc3\u3068\u306a\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u64cd\u4f5c\u3092\u884c\u3046\u305f\u3081\u306e\u8a2d\u5b9a\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

          • \u30b5\u30a4\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u30eb\u30fc\u30c8\u3092\u5b9a\u7fa9\u3059\u308b
          • \u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b
          • \u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b
          • SSL\u8a3c\u660e\u66f8\u3092\u8a2d\u5b9a\u3059\u308b
          • \u74b0\u5883\u306e\u305f\u3081\u306ecron\u30b8\u30e7\u30d6\u3092\u8ffd\u52a0\u3059\u308b

          .lagoon.yml \u30d5\u30a1\u30a4\u30eb\u306f\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30eb\u30fc\u30c8\u306b\u914d\u7f6e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#_1","title":"\u6c4e\u7528\u7684\u306a\u8a2d\u5b9a","text":""},{"location":"ja/concepts-basics/lagoon-yml/#docker-compose-yaml","title":"docker-compose-yaml","text":"

          \u3053\u306e\u8a2d\u5b9a\u306f\u3001\u30d3\u30eb\u30c9\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u3069\u306eDocker Compose YAML\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3079\u304d\u304b\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30b3\u30f3\u30c6\u30ca\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3079\u304d\u304b\u3092\u628a\u63e1\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3068\u3057\u3066 docker-compose.yml \u3092\u6307\u3057\u307e\u3059\u304c\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u7279\u5b9a\u306eLagoon Docker Compose YAML\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#environment_variablesgit_sha","title":"environment_variables.git_sha","text":"

          \u3053\u306e\u8a2d\u5b9a\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305fGit SHA\u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3053\u308c\u306f\u7121\u52b9\u3067\u3059\u3002\u5024\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001SHA\u304c\u74b0\u5883\u5909\u6570 LAGOON_GIT_SHA \u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#routes","title":"\u30eb\u30fc\u30c8","text":"

          \u30eb\u30fc\u30c8\u306f\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u30b5\u30fc\u30d3\u30b9\u3078\u8ee2\u9001\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059 \u3002\u74b0\u5883\u5185\u306e\u5404\u30b5\u30fc\u30d3\u30b9\u306b\u306f\u30eb\u30fc\u30c8\u304c\u3042\u308a\u3001\u30c9\u30e1\u30a4\u30f3\u540d\u306f\u624b\u52d5\u307e\u305f\u306f\u81ea\u52d5\u3067\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u30c8\u30c3\u30d7\u30ec\u30d9\u30eb\u306e routes \u30bb\u30af\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u306f\u3001\u3059\u3079\u3066\u306e\u74b0\u5883\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066\u9069\u7528\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#routesautogenerate","title":"routes.autogenerate","text":"

          \u30eb\u30fc\u30c8\u3092\u81ea\u52d5\u7684\u306b\u4f5c\u6210\u3059\u308b\u3088\u3046\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002\u624b\u52d5\u30eb\u30fc\u30c8\u306f\u74b0\u5883\u3054\u3068\u306b\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002

          • enabled: \u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306f\u3001false\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306ftrue\u3067\u3059\u3002
          • allowPullrequests: \u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u305f\u3081\u306b enabled: false\u3092\u4e0a\u66f8\u304d\u3059\u308b\u306b\u306f\u3001true\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002.lagoon.yml
            routes:\nautogenerate:\nenabled: false\nallowPullrequests: true\n
          • insecure: HTTP\u63a5\u7d9a\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fAllow\u3067\u3059\u3002
            • Allow: \u30eb\u30fc\u30c8\u306fHTTP\u3068HTTPS\u306e\u4e21\u65b9\u306b\u5fdc\u7b54\u3057\u307e\u3059\u3002
            • Redirect: \u30eb\u30fc\u30c8\u306f\u4efb\u610f\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092HTTPS\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002
          • prefixes: \u5404\u74b0\u5883\u306e\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u306e\u30d7\u30ec\u30d5\u30a3\u30af\u30b9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u8a00\u8a9e\u30d7\u30ec\u30d5\u30a3\u30af\u30b9\u30c9\u30e1\u30a4\u30f3\u3084Drupal\u306edomain\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u305f\u30de\u30eb\u30c1\u30c9\u30e1\u30a4\u30f3\u30b5\u30a4\u30c8\u306a\u3069\u306b\u4fbf\u5229\u3067\u3059\u3002

            .lagoon.yml
              routes:\nautogenerate:\nprefixes:\n- www\n- de\n- fr\n- it\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#tasks","title":"\u30bf\u30b9\u30af","text":"

          \u5b9a\u7fa9\u53ef\u80fd\u306a\u30bf\u30b9\u30af\u306b\u306f\u8907\u6570\u306e\u7a2e\u985e\u304c\u3042\u308a\u3001\u305d\u308c\u3089\u306f\u30d3\u30eb\u30c9\u30d5\u30ed\u30fc\u306e\u4e2d\u306e\u3069\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u5b9f\u884c\u3055\u308c\u308b\u304b\u304c\u7570\u306a\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#pre-rollout-tasks-pre_rolloutirun","title":"\u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af - pre_rollout.[i].run","text":"

          \u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f\u5f8c\u3001\u304b\u3064\u3001\u4ee5\u4e0b\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u306e\u524d\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          • \u65b0\u898f\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3067\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u66f4\u65b0\u3055\u308c\u308b
          • \u65e2\u5b58\u306e\u74b0\u5883\u306b\u4ed6\u306e\u5909\u66f4\u304c\u52a0\u3048\u3089\u308c\u308b

          \u3053\u306e\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u3068\u3001\u305f\u3068\u3048\u3070\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u524d\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u4f5c\u6210\u3059\u308b\u306a\u3069\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306e\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002

          \u60c5\u5831

          \u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306f\u3001\u66f4\u65b0\u524d\u306e\u65e2\u5b58\u306e\u30dd\u30c3\u30c9\u5185\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3064\u307e\u308a:

          • \u6700\u5f8c\u306e\u30c7\u30d7\u30ed\u30a4\u4ee5\u964d\u306bDockerfile\u306b\u52a0\u3048\u3089\u308c\u305f\u5909\u66f4\u306f\u3001\u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u304c\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306b\u306f\u53cd\u6620\u3055\u308c\u307e\u305b\u3093\u3002
          • \u65e2\u5b58\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u306a\u3044\u5834\u5408(\u4f8b\u3048\u3070\u3001\u65b0\u3057\u3044\u74b0\u5883\u306e\u521d\u671f\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u6642\u306a\u3069)\u3001\u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306f\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002
          "},{"location":"ja/concepts-basics/lagoon-yml/#post-rollout-tasks-post_rolloutirun","title":"\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af - post_rollout.[i].run","text":"

          \u4ee5\u4e0b\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u306e\u5f8c\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u30bf\u30b9\u30af\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          • \u5168\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u30d3\u30eb\u30c9\u3055\u308c\u308b
          • \u5168\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u65b0\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u3067\u66f4\u65b0\u3055\u308c\u308b
          • readiness\u30c1\u30a7\u30c3\u30af\u3092\u901a\u904e\u3057\u3001\u5168\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u7a3c\u50cd\u3059\u308b

          \u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u306e\u4e00\u822c\u7684\u306a\u4f7f\u7528\u4f8b\u306b\u306f\u3001drush updb\u3001drush cim\u306e\u5b9f\u884c\u3084\u3001\u3055\u307e\u3056\u307e\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002

          • name
            • \u540d\u524d\u306f\u3001\u30ed\u30b0\u5185\u306e\u5404\u30bf\u30b9\u30af\u3092\u8b58\u5225\u3059\u308b\u305f\u3081\u306e\u4efb\u610f\u306e\u30e9\u30d9\u30eb\u3067\u3059\u3002
          • command
            • \u3053\u3053\u3067\u306f\u3001\u5b9f\u884c\u3059\u308b\u3079\u304d\u30b3\u30de\u30f3\u30c9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3001\u5404\u30b3\u30f3\u30c6\u30ca\u306eWORKDIR\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002Lagoon\u306e\u30a4\u30e1\u30fc\u30b8\u306e\u5834\u5408\u3001\u3053\u308c\u306f/app\u3067\u3059\u3002\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u7279\u5b9a\u306e\u5834\u6240\u306bcd\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u5ff5\u982d\u306b\u7f6e\u3044\u3066\u304f\u3060\u3055\u3044\u3002
          • service
            • \u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002Drupal\u306e\u4f8b\u306b\u5f93\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u308c\u306fCLI\u30b3\u30f3\u30c6\u30ca\u306b\u306a\u308a\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u306e\u30b3\u30fc\u30c9\u3001\u30d5\u30a1\u30a4\u30eb\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u63a5\u7d9a\u304c\u3059\u3079\u3066\u542b\u307e\u308c\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002\u901a\u5e38\u3001\u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002
          • container
            • \u30b5\u30fc\u30d3\u30b9\u304c\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408(\u4f8b:nginx-php)\u3001\u30dd\u30c3\u30c9\u5185\u3067\u63a5\u7d9a\u3059\u308b\u30b3\u30f3\u30c6\u30ca\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059(\u4f8b:nginx\u30dd\u30c3\u30c9\u5185\u306ephp\u30b3\u30f3\u30c6\u30ca)\u3002
          • shell
            • \u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b7\u30a7\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306fsh\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u304c\u3001\u30b3\u30f3\u30c6\u30ca\u304c\u4ed6\u306e\u30b7\u30a7\u30eb(bash\u306a\u3069)\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u306fsh\u4ee5\u5916\u306e\u30b7\u30a7\u30eb\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u5185\u3067if/else\u3092\u4f7f\u3063\u305f\u5c0f\u3055\u306abash\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002\u8907\u6570\u884c\u306b\u308f\u305f\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u8a18\u8ff0\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3076\u306b\u306f\u4ee5\u4e0b\u306e\u4f8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          • when
            • \u30bf\u30b9\u30af\u306e\u6761\u4ef6\u4ed8\u304d\u5b9f\u884c\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u304b\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001true/false\u306b\u8a55\u4fa1\u3055\u308c\u308b\u5f0f\u3067\u3042\u308b\u3053\u3068\u3092\u671f\u5f85\u3055\u308c\u307e\u3059\u3002

          \u6ce8: \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u4e2d\u306bpre/post-rollout\u30bf\u30b9\u30af\u3092\u4e00\u6642\u7684\u306b\u7121\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001API\u3067\u4ee5\u4e0b\u306e\u74b0\u5883\u5909\u6570\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ec\u30d9\u30eb\u307e\u305f\u306f\u74b0\u5883\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff08\u74b0\u5883\u5909\u6570\u306e\u8a2d\u5b9a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3053\u3053\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff09\u3002

          • LAGOON_PREROLLOUT_DISABLED=true
          • LAGOON_POSTROLLOUT_DISABLED=true
          "},{"location":"ja/concepts-basics/lagoon-yml/#example-post-rollout-tasks","title":"post-rollout\u30bf\u30b9\u30af\u306e\u4f8b","text":"

          \u4ee5\u4e0b\u306f\u3044\u304f\u3064\u304b\u306e\u6709\u7528\u306apost-rollout\u30bf\u30b9\u30af\u306e\u4f8b\u3067\u3059\u3002

          Drupal\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af:

          .lagoon.yml
          - run:\n  name: IF no Drupal installed\n  command: | # (1)\nif tables=$(drush sqlq \"show tables like 'node';\") && [ -z \"$tables\" ]; then\n#### whatever you like\nfi\nservice: cli\n  shell: bash\n

          \u30d6\u30e9\u30f3\u30c1\u540d\u306b\u57fa\u3065\u3044\u3066\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af:

          .lagoon.yml
          - run:\nname: Different tasks based on branch name\ncommand: |\n### Runs if current branch is not 'production'\nservice: cli\nwhen: LAGOON_GIT_BRANCH != \"production\"\n

          \u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c:

          .lagoon.yml
          - run:\nname: Run Script\ncommand: './scripts/script.sh'\nservice: cli\n

          \u30dd\u30c3\u30c9\u5185\u306e\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u5bfe\u8c61\u306b\u3059\u308b:

          .lagoon.yml
          - run:\nname: show php env variables\ncommand: env\nservice: nginx\ncontainer: php\n

          Drupal & Drush 9: \u30de\u30b9\u30bf\u30fc\u74b0\u5883\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f:

          .lagoon.yml
          - run:\n    name: Sync DB and Files from master if we are not on master\n    command: |\n# Only if we don't have a database yet\nif tables=$(drush sqlq 'show tables;') && [ -z \"$tables\" ]; then\ndrush sql-sync @lagoon.master @self # (1)\ndrush rsync @lagoon.master:%files @self:%files -- --omit-dir-times --no-perms --no-group --no-owner --chmod=ugo=rwX\n      fi\nservice: cli\n    when: LAGOON_ENVIRONMENT_TYPE != \"production\"\n
          1. \u3053\u3053\u3067\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u305f\u30a8\u30a4\u30ea\u30a2\u30b9\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          "},{"location":"ja/concepts-basics/lagoon-yml/#backup-retention","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u671f\u9593 ( #backup-retention }","text":""},{"location":"ja/concepts-basics/lagoon-yml/#backup-retentionproductionmonthly","title":"backup-retention.production.monthly","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eproduction\u74b0\u5883\u306e\u6708\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u6570\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

          \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 0 \u3067\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#backup-retentionproductionweekly","title":"backup-retention.production.weekly","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eproduction\u74b0\u5883\u306e\u9031\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u6570\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

          \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 6 \u3067\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#backup-retentionproductiondaily","title":"backup-retention.production.daily","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eproduction\u74b0\u5883\u306e\u65e5\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u6570\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

          \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 7 \u3067\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#backup-retentionproductionhourly","title":"backup-retention.production.hourly","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eproduction\u74b0\u5883\u306e\u6bce\u6642\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4fdd\u6301\u6570\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

          \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 0 \u3067\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#backup-schedule","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb","text":""},{"location":"ja/concepts-basics/lagoon-yml/#backup-scheduleproduction","title":"backup-schedule.production","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u305f\u3060\u3057\u3001Minute \u30d6\u30ed\u30c3\u30af\u306f M \u3067\u306a\u3051\u308c\u3070\u306a\u3089\u305a\u3001\u4ed6\u306e\u5024\u306f Lagoon \u30d3\u30eb\u30c9\u306b\u5931\u6557\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u306f\u3053\u308c\u3089\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4f55\u5206\u306b\u884c\u3046\u304b\u30e9\u30f3\u30c0\u30e0\u306b\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u30e6\u30fc\u30b6\u30fc\u306f\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306e\u6b8b\u308a\u306e\u90e8\u5206\u3092\u6642\u9593\u5358\u4f4d\u3067\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002

          \u3053\u306e\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u30c7\u30d5\u30a9\u30eb\u30c8\u306f M H(22-2) * * * \u3067\u3059\u3002

          \u30bf\u30a4\u30e0\u30be\u30fc\u30f3:

          \u30d0\u30c3\u30af\u30a2\u30c3\u30d7 \u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3067\u306f\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30ed\u30fc\u30ab\u30eb \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#environments","title":"\u74b0\u5883","text":"

          \u74b0\u5883\u540d\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u540d\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u540d\u3068\u4e00\u81f4\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5404\u74b0\u5883\u3067\u7570\u306a\u308b\u8a2d\u5b9a\u3092\u6301\u3064\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u79c1\u305f\u3061\u306e\u4f8b\u3067\u306f\u3001main\u3068staging\u74b0\u5883\u306b\u9069\u7528\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnameroutes","title":"environments.[name].routes","text":"

          \u624b\u52d5\u30eb\u30fc\u30c8\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u6307\u793a\u3059\u308b\u305f\u3081\u306b\u74b0\u5883\u3054\u3068\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30c9\u30e1\u30a4\u30f3\u540d\u3067\u3059\u3002\u3059\u3079\u3066\u306e\u74b0\u5883\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u3001\u624b\u52d5\u30eb\u30fc\u30c8\u306f\u901a\u5e38\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u30e1\u30a4\u30f3\u30c9\u30e1\u30a4\u30f3(www.example.com\u306a\u3069)\u3092\u4f7f\u7528\u3057\u3066\u672c\u756a\u74b0\u5883\u3067\u306e\u307f\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

          \u30d2\u30f3\u30c8

          Lagoon\u306f\u624b\u52d5\u30eb\u30fc\u30c8\u3092\u5236\u5fa1\u3067\u304d\u306a\u3044\u306e\u3067\u3001DNS\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3067DNS\u30ec\u30b3\u30fc\u30c9\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u81ea\u52d5\u30eb\u30fc\u30c8\u3092\u6307\u3059CNAME\u30ec\u30b3\u30fc\u30c9\u3092\u8a2d\u5b9a\u3067\u304d\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          \u74b0\u5883\u306e\u6b21\u306e\u6700\u521d\u306e\u8981\u7d20\u306f\u30bf\u30fc\u30b2\u30c3\u30c8\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308a\u3001\u79c1\u305f\u3061\u306e\u4f8b\u3067\u306fnginx\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002 \u3053\u308c\u306f\u79c1\u305f\u3061\u304c\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u5165\u3063\u3066\u304f\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308b\u304b\u3092\u8b58\u5225\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002

          \u6700\u3082\u5358\u7d14\u306a\u30eb\u30fc\u30c8\u306f example.com\u3067\u3001\u3053\u308c\u306f\u79c1\u305f\u3061\u306e\u4f8b\u306e.lagoon.yml\u3067\u78ba\u8a8d \u3067\u304d\u307e\u3059 - \u8ffd\u52a0\u306e\u8a2d\u5b9a\u304c\u306a\u3044\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u3042\u306a\u305f\u304c\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066Let's Encrypt\u8a3c\u660e\u66f8\u3092\u671b\u3093\u3067\u3044\u308b\u3068\u4eee\u5b9a\u3057\u3001HTTPS\u304b\u3089HTTP\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          \u4ee5\u4e0b\u306e\"www.example.com\"\u306e\u4f8b\u3067\u306f\u3001\u3055\u3089\u306b3\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059(\u307e\u305f\u3001\u30eb\u30fc\u30c8\u306e\u7d42\u308f\u308a\u306b\u3042\u308b:\u3068\u3001\u30eb\u30fc\u30c8\u304c\"\u3067\u56f2\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u3053\u308c\u306f\u91cd\u8981\u3067\u3059\uff01):

          .lagoon.yml
          - \"www.example.com\":\ntls-acme: true\ninsecure: Redirect\nhstsEnabled: true\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#ssl-configuration-tls-acme","title":"SSL\u8a2d\u5b9a tls-acme","text":"

          \u8b66\u544a

          tls-acme: true\u304b\u3089tls-acme: false\u306b\u5207\u308a\u66ff\u3048\u308b\u3068\u3001\u3053\u306e\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066\u4ee5\u524d\u306b\u751f\u6210\u3055\u308c\u305f\u8a3c\u660e\u66f8\u304c\u3059\u3079\u3066\u524a\u9664\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5916\u90e8\u306eCDN\u3092\u4f7f\u7528\u3057\u3066\u3044\u3066\u8a3c\u660e\u66f8\u306e\u30d4\u30f3\u7559\u3081\u3092\u884c\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u4e88\u671f\u3057\u306a\u3044\u6319\u52d5\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          • tls-acme:Let's Encrypt\u3092\u901a\u3058\u305f\u81ea\u52d5TLS\u8a3c\u660e\u66f8\u751f\u6210\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306ftrue\u3067\u3001\u81ea\u52d5\u8a3c\u660e\u66f8\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306ffalse\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
          • insecure:HTTP\u63a5\u7d9a\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fAllow\u3067\u3059\u3002
            • Allow:\u30eb\u30fc\u30c8\u306fHTTP\u3068HTTPS\u306b\u5fdc\u7b54\u3057\u307e\u3059\u3002
            • Redirect:\u30eb\u30fc\u30c8\u306f\u3059\u3079\u3066\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092HTTPS\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002
          • hstsEnabled: Strict-Transport-Security\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f false\u3067\u3059\u3002
          • hstsMaxAge: max-age\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 31536000 (1 \u5e74)\u3067\u3059\u3002
          • hstsPreload: preload\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f false\u3067\u3059\u3002
          • hstsIncludeSubdomains: includeSubDomains\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f false\u3067\u3059\u3002

          \u60c5\u5831

          \u8a3c\u660e\u66f8\u8a8d\u8a3c\u6a5f\u95a2(CA)\u306b\u3088\u3063\u3066\u7f72\u540d\u3055\u308c\u305fSSL\u8a3c\u660e\u66f8\u304b\u3089Let's Encrypt\u8a3c\u660e\u66f8\u306b\u5207\u308a\u66ff\u3048\u308b\u4e88\u5b9a\u306e\u5834\u5408\u3001\u79fb\u884c\u3092\u76e3\u8996\u3059\u308b\u305f\u3081\u306bLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#monitoring-a-specific-path","title":"\u7279\u5b9a\u306e\u30d1\u30b9\u306e\u76e3\u8996","text":"

          UptimeRobot\u304c\u3042\u306a\u305f\u306e\u30af\u30e9\u30b9\u30bf\u30fc(Kubernetes\u307e\u305f\u306fOpenShift)\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001Lagoon\u306f\u5404\u30eb\u30fc\u30c8/\u30a4\u30f3\u30b0\u30ec\u30b9\u306bannotation\u3092\u8a2d\u5b9a\u3057\u3066stakater/IngressControllerMonitor\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u306f\u30eb\u30fc\u30c8\u306e\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u3092\u76e3\u8996\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u7279\u5b9a\u306e\u30eb\u30fc\u30c8\u3092\u76e3\u8996\u3057\u305f\u3044\u5834\u5408\u3001\u30eb\u30fc\u30c8\u4ed5\u69d8\u306bmonitoring-path\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3053\u308c\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u304d\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u4f7f\u7528\u6cd5\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u3092\u30d0\u30a4\u30d1\u30b9\u3059\u308b\u76e3\u8996\u7528\u306e\u30d1\u30b9\u3092\u8a2d\u5b9a\u3057\u3001\u30b5\u30a4\u30c8\u306e\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u76e3\u8996\u3092\u53ef\u80fd\u306b\u3059\u308b\u3053\u3068\u3067\u3059\u3002

          .lagoon.yml
          - \"www.example.com\":\nmonitoring-path: \"/bypass-cache\"\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#ingress-annotations","title":"Ingress annotations","text":"

          \u8b66\u544a

          \u30eb\u30fc\u30c8/Ingress\u306eannotations\u306f\u3001nginx-ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u5b9f\u884c\u3059\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u307f\u304c\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306fLagoon\u7ba1\u7406\u8005\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          • annotations\u306f\u3001nginx-ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308bannotations\u306eYAML\u30de\u30c3\u30d7\u3067\u3059\u3002\u3053\u308c\u306f\u7279\u306b\u3001\u7c21\u5358\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3084\u4ed6\u306e\u8a2d\u5b9a\u306b\u4fbf\u5229\u3067\u3059\u3002
          "},{"location":"ja/concepts-basics/lagoon-yml/#restrictions","title":"\u5236\u9650\u4e8b\u9805","text":"

          Lagoon\u3067\u306f\u3001\u4e00\u90e8\u306eannotations\u304c\u7981\u6b62\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u307e\u305f\u306f\u90e8\u5206\u7684\u306b\u5236\u9650\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u4ee5\u4e0b\u306e\u8868\u306f\u3001\u3053\u308c\u3089\u306e\u30eb\u30fc\u30eb\u3092\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u3002

          \u3042\u306a\u305f\u306e.lagoon.yml\u304c\u3053\u308c\u3089\u306eannotations\u306e\u3044\u305a\u308c\u304b\u3092\u542b\u3093\u3067\u3044\u308b\u5834\u5408\u3001\u30d3\u30eb\u30c9\u304c\u5931\u6557\u3059\u308b\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002

          \u6ce8\u91c8 \u30ce\u30fc\u30c8 nginx.ingress.kubernetes.io/auth-snippet \u7981\u6b62 nginx.ingress.kubernetes.io/configuration-snippet rewrite\u3001add_header\u3001set_real_ip\u3001\u304a\u3088\u3073 more_set_headers \u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u306b\u5236\u9650\u3055\u308c\u3066\u3044\u307e\u3059\u3002 nginx.ingress.kubernetes.io/modsecurity-snippet \u7981\u6b62 nginx.ingress.kubernetes.io/server-snippet rewrite\u3001add_header\u3001set_real_ip\u3001\u304a\u3088\u3073 more_set_headers \u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u306b\u5236\u9650\u3055\u308c\u3066\u3044\u307e\u3059\u3002 nginx.ingress.kubernetes.io/stream-snippet \u7981\u6b62 nginx.ingress.kubernetes.io/use-regex \u7981\u6b62"},{"location":"ja/concepts-basics/lagoon-yml/#ingress-annotations-redirects","title":"Ingress\u306eannotations\u30ea\u30c0\u30a4\u30ec\u30af\u30c8","text":"

          \u3053\u306e\u4f8b\u3067\u306f\u3001example.ch\u3078\u306e\u4efb\u610f\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u3001\u30d5\u30a9\u30eb\u30c0\u30fc\u3084\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4fdd\u6301\u3057\u305f\u307e\u307e https://www.example.ch\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u307e\u3059(example.com/folder?query -> https://www.example.ch/folder?query)\u3002

          .lagoon.yml
          - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\n

          Lagoon\u306b\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u4ed6\u306e\u4efb\u610f\u306eURL\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002 \u4ee5\u4e0b\u306fexample.de\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092https://www.google.com\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002

          .lagoon.yml
          - \"example.de\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#trusted-reverse-proxies","title":"\u4fe1\u983c\u3055\u308c\u308b\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7","text":"

          \u8b66\u544a

          Kubernetes\u306f\u5358\u4e00\u306enginx.ingress.kubernetes.io/server-snippet\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u307f\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\u975e\u672c\u756a\u74b0\u5883\u306e\u30eb\u30fc\u30c8\u3067\u3053\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001add_header X-Robots-Tag \"noindex, nofollow\";\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3082\u30b5\u30fc\u30d0\u30fc\u30b9\u30cb\u30da\u30c3\u30c8\u306e\u4e00\u90e8\u3068\u3057\u3066\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u3001\u958b\u767a\u74b0\u5883\u3067\u30ed\u30dc\u30c3\u30c8\u304c\u30af\u30ed\u30fc\u30eb\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u306b\u5fc5\u8981\u3067\u3059\u3002ingress\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u958b\u767a\u74b0\u5883\u3067\u3053\u308c\u3092\u9632\u3050\u305f\u3081\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30c7\u30d5\u30a9\u30eb\u30c8\u306eserver-snippet\u306f\u3001.lagoon.yml\u306b\u8a2d\u5b9a\u3055\u308c\u305fserver-snippets\u306b\u3088\u3063\u3066\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002

          \u4e00\u90e8\u306e\u8a2d\u5b9a\u3067\u306f\u3001\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7(CDN\u306a\u3069)\u304cKubernetes\u30af\u30e9\u30b9\u30bf\u306e\u524d\u306b\u914d\u7f6e\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3067\u306f\u3001\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u306eIP\u304c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eREMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR\u30d8\u30c3\u30c0\u30fc\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30ea\u30af\u30a8\u30b9\u30bf\u30fc\u306e\u30aa\u30ea\u30b8\u30ca\u30ebIP\u306fHTTP_X_ORIGINAL_FORWARDED_FOR\u30d8\u30c3\u30c0\u30fc\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002

          \u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u30ea\u30af\u30a8\u30b9\u30c8IP\u3092\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u3001 REMOTE_ADDR HTTP_X_FORWARDED_FOR HTTP_X_REAL_IP \u30d8\u30c3\u30c0\u30fc\u306b\u5143\u306eIP\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001\u4fe1\u983c\u3059\u308b\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u306eIP\u3092\u30a4\u30f3\u30b0\u30ec\u30b9\u306b\u4f1d\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          .lagoon.yml
          - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/server-snippet: |\nset_real_ip_from 1.2.3.4/32;\n

          \u3053\u306e\u4f8b\u3067\u306f\u3001CIDR 1.2.3.4/32(\u3053\u306e\u5834\u5408\u306fIP 1.2.3.4)\u3092\u4fe1\u983c\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001IP 1.2.3.4 \u304b\u3089Kubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u308b\u3068\u3001X-Forwarded-For \u30d8\u30c3\u30c0\u30fc\u304c\u5206\u6790\u3055\u308c\u3001\u305d\u306e\u5185\u5bb9\u304c REMOTE_ADDR HTTP_X_REAL_IP HTTP_X_FORWARDED_FOR \u30d8\u30c3\u30c0\u30fc\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnametypes","title":"Environments.[name].types","text":"

          Lagoon\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089lagoon.type\u30e9\u30d9\u30eb\u3092\u8abf\u3079\u3066\u3001\u3069\u306e\u7a2e\u985e\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3079\u304d\u304b\u3092\u5b66\u7fd2\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

          \u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u5168\u74b0\u5883\u3067\u306f\u306a\u304f\u3001\u5358\u4e00\u306e\u74b0\u5883\u3060\u3051\u3067type\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3082\u3057\u3001\u30b5\u30fc\u30d3\u30b9\u30d6\u30ed\u30fc\u30ab\u30fc/\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306b\u5171\u6709\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u305b\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u958b\u767a\u74b0\u5883\u3067\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eMariaDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002

          service-name: service-type

          • service-name\u306f\u3001docker-compose.yml\u304b\u3089\u4e0a\u66f8\u304d\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059
          • service-type\u306f\u3001\u4e0a\u66f8\u304d\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3067\u3059

          MariaDB_Galera\u306e\u8a2d\u5b9a\u4f8b:

          .lagoon.yml
          environments:\ndevelop:\ntypes:\nmariadb: mariadb-single\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnametemplates","title":"environments.[name].templates","text":"

          Lagoon\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089lagoon.template\u30e9\u30d9\u30eb\u3092\u8abf\u3079\u3066\u3001\u30b5\u30fc\u30d3\u30b9\u304c\u30ab\u30b9\u30bf\u30e0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

          \u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u306f\u306a\u304f\u3001\u7279\u5b9a\u306e\u74b0\u5883\u3060\u3051\u3067\u4e0a\u66f8\u304d\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059:

          service-name: template-file

          • service-name\u306f\u3001docker-compose.yml\u304b\u3089\u4e0a\u66f8\u304d\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059\u3002
          • template-file\u306f\u3001\u3053\u306e\u74b0\u5883\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u4f7f\u7528\u3059\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30d1\u30b9\u3068\u540d\u524d\u3067\u3059\u3002
          "},{"location":"ja/concepts-basics/lagoon-yml/#example-template-override","title":"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4e0a\u66f8\u304d\u306e\u4f8b","text":".lagoon.yml
          environments:\nmain:\ntemplates:\nmariadb: mariadb.main.deployment.yml\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#environments-name-rollouts","title":"environments.[name].rollouts","text":"

          Lagoon\u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9 lagoon.rollout\u30e9\u30d9\u30eb\u3092docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8abf\u3079\u3066\u3001\u30b5\u30fc\u30d3\u30b9\u304c\u7279\u5225\u306a\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30a4\u30d7\u3092\u5fc5\u8981\u3068\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

          \u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u7279\u306b\u74b0\u5883\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30bf\u30a4\u30d7\u3092\u4e0a\u66f8\u304d\u3057\u305f\u5834\u5408\u306b\u306f\u3001\u5358\u4e00\u306e\u74b0\u5883\u3060\u3051\u3067\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30a4\u30d7\u3092\u4e0a\u66f8\u304d\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002

          service-name: rollout-type

          • service-name\u306f\u3001\u4e0a\u66f8\u304d\u3057\u305f\u3044docker-compose.yml\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059\u3002
          • rollout-type\u306f\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002\u53ef\u80fd\u306a\u5024\u306b\u3064\u3044\u3066\u306f\u3001docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          "},{"location":"ja/concepts-basics/lagoon-yml/#custom-rollout-type-example","title":"\u30ab\u30b9\u30bf\u30e0\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30a4\u30d7\u306e\u4f8b","text":".lagoon.yml
          environments:\nmain:\nrollouts:\nmariadb: statefulset\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnameautogenerateroutes","title":"environments.[name].autogenerateRoutes","text":"

          \u30eb\u30fc\u30c8\u306e\u81ea\u52d5\u751f\u6210\u304c\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u5834\u5408\u3067\u3082\u3001\u74b0\u5883\u3054\u3068\u306b\u81ea\u52d5\u751f\u6210\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          .lagoon.yml
          routes:\nautogenerate:\nenabled: false\nenvironments:\ndevelop:\nautogenerateRoutes: true\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#environmentsnamecronjobs","title":"environments.[name].cronjobs","text":"

          Cron\u30b8\u30e7\u30d6\u306f\u3001\u901a\u5e38\u3001\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u540c\u3058\u3082\u306e\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u671b\u307e\u3057\u304f\u306a\u3044\u305f\u3081\u3001\u5404\u74b0\u5883\u3067\u660e\u793a\u7684\u306b\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5b9a\u7fa9\u3057\u305f\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306b\u3088\u308a\u3001Cron\u30b8\u30e7\u30d6\u306fKubernetes\u30cd\u30a4\u30c6\u30a3\u30d6\u306eCronJob\u3068\u3057\u3066\u3001\u307e\u305f\u306f\u5b9a\u7fa9\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u306ecrontab\u3092\u4ecb\u3057\u305fin-pod cron\u30b8\u30e7\u30d6\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#cron-job-example","title":"Cron\u30b8\u30e7\u30d6\u306e\u4f8b","text":".lagoon.yml
          cronjobs:\n- name: Hourly Drupal Cron\nschedule: \"M * * * *\" # 1\u6642\u9593\u3054\u3068, \u4f55\u5206\u306a\u306e\u304b\u306f\u30e9\u30f3\u30c0\u30e0.\ncommand: drush cron\nservice: cli\n- name: Nightly Drupal Cron\nschedule: \"M 0 * * *\" # 1\u65e5\u3054\u3068, \u4f55\u5206\u306a\u306e\u304b\u306f\u300100:00\u304b\u308900:59\u306e\u9593\u306e\u30e9\u30f3\u30c0\u30e0.\ncommand: drush cron\nservice: cli\n
          • name: \u4ed6\u306ecron\u30b8\u30e7\u30d6\u3068\u533a\u5225\u3057\u3001\u76ee\u7684\u3092\u7279\u5b9a\u3059\u308b\u305f\u3081\u306e\u4efb\u610f\u306e\u540d\u524d
          • schedule: cron\u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3002Lagoon\u306f\u3001crontab\u5f62\u5f0f\u306e\u62e1\u5f35\u7248\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u69cb\u6587\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001crontab generator\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            • \u5206\u306bM\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001cron\u30b8\u30e7\u30d6\u306f \u30e9\u30f3\u30c0\u30e0\u306a\u5206(\u6bce\u6642\u9593\u540c\u3058\u5206)\u306b1\u6642\u9593\u3054\u3068\u306b\u5b9f\u884c\u3059\u308b\u304b\u3001M/15\u3092\u6307\u5b9a\u3057\u306615\u5206\u3054\u3068\u306b\u5b9f\u884c\u3059\u308b\u304c\u3001\u6642\u9593\u304b\u3089\u306e\u30e9\u30f3\u30c0\u30e0\u306a\u30aa\u30d5\u30bb\u30c3\u30c8(6,21,36,51\u306e\u3088\u3046\u306a)\u3067\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066cron\u30b8\u30e7\u30d6\u3092\u5206\u6563\u3055\u305b\u308b\u3053\u3068\u306f\u3001\u3059\u3079\u3066\u306e\u30b8\u30e7\u30d6\u3092\u52060\u3067\u4e00\u6589\u306b\u5b9f\u884c\u3059\u308b\u3088\u308a\u3082\u826f\u3044\u65b9\u6cd5\u3067\u3059\u3002
            • H\u3092\u6642\u9593\u306b\u6307\u5b9a\u3059\u308b\u3068\u3001cron\u30b8\u30e7\u30d6\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u6642\u9593(\u6bce\u65e5\u540c\u3058\u6642\u9593)\u306b1\u65e51\u56de\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u307e\u305f\u3001H(2-4)\u3092\u6307\u5b9a\u3059\u308b\u3068\u30012\u6642\u304b\u30894\u6642\u306e\u9593\u306b1\u65e51\u56de\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002

          \u30bf\u30a4\u30e0\u30be\u30fc\u30f3:

          • cron\u30b8\u30e7\u30d6\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u306fUTC\u3067\u3059\u3002
          • \u30cd\u30a4\u30c6\u30a3\u30d6\u306ecron\u30b8\u30e7\u30d6\u306f\u30ce\u30fc\u30c9\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u3001\u305d\u308c\u306fUTC\u3067\u3059\u3002
          • In-pod\u306ecron\u30b8\u30e7\u30d6\u306f\u5b9a\u7fa9\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u3001UTC\u4ee5\u5916\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
          • command:\u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30b5\u30fc\u30d3\u30b9\u306eWORKDIR\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002Lagoon\u30a4\u30e1\u30fc\u30b8\u306e\u5834\u5408\u3001\u3053\u308c\u306f/app\u3067\u3059\u3002

          \u8b66\u544a

          Cron\u30b8\u30e7\u30d6\u306f\u3001crontab\u3092\u4ecb\u3057\u3066Pod\u5185\u3067\u5b9f\u884c\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u8907\u6570\u884c\u306e\u30b3\u30de\u30f3\u30c9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u8907\u96d1\u306a\u307e\u305f\u306f\u8907\u6570\u884c\u306ecron\u30b3\u30de\u30f3\u30c9\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001\u30b3\u30de\u30f3\u30c9\u3068\u3057\u3066\u4f7f\u7528\u53ef\u80fd\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u7528\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30d7\u30ea\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u307e\u305f\u306f\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8 \u30bf\u30b9\u30af \u304c\u6a5f\u80fd\u3059\u308b\u304b\u3069\u3046\u304b\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u5371\u967a

          Cron\u30b8\u30e7\u30d6\u306fKubernetes\u306e\u30dd\u30c3\u30c9\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u304c\u3001\u30dd\u30c3\u30c9\u306e\u518d\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0\u306b\u3088\u308a\u4e2d\u65ad\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001cron\u30b8\u30e7\u30d6\u3092\u4f5c\u6210\u3059\u308b\u969b\u306b\u306f\u3001\u6b21\u306ecron\u30a4\u30f3\u30bf\u30fc\u30d0\u30eb\u3067\u30b3\u30de\u30f3\u30c9\u3092\u5b89\u5168\u306b\u4e2d\u65ad\u3057\u3001\u518d\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          • service:\u30b3\u30de\u30f3\u30c9\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u5b9f\u884c\u3059\u308b\u304b\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u3053\u308c\u306fcli\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002
          "},{"location":"ja/concepts-basics/lagoon-yml/#polysite","title":"\u30dd\u30ea\u30b5\u30a4\u30c8 { #polysite )","text":"

          Lagoon\u3067\u306f\u3001\u540c\u3058Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u3053\u308c\u3092\u30dd\u30ea\u30b5\u30a4\u30c8\u3068\u547c\u3073\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u540c\u3058\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3092\u5b9f\u884c\u3057\u306a\u304c\u3089\u3001\u7570\u306a\u308b\u72ec\u7acb\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u6c38\u7d9a\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u8a31\u53ef\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 .lagoon.yml\u3067\u306f\u3001\u73fe\u5728\u3001\u30dd\u30ea\u30b5\u30a4\u30c8\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u305f\u3081\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u6a19\u6e96\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u306e\u4e3b\u306a\u9055\u3044\u306f\u3001environments\u304c\u4e8c\u6b21\u5143\u8981\u7d20\u3068\u306a\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u304c\u6700\u4e0a\u4f4d\u8981\u7d20\u3068\u306a\u308b\u3053\u3068\u3067\u3059\u3002

          \u3053\u308c\u3092\u5229\u7528\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u3092\u8e0f\u3080\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          1. Lagoon\u306b2\u3064(\u4ee5\u4e0a)\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001\u305d\u308c\u305e\u308c\u306b\u540c\u3058Git URL\u3068\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u30d6\u30e9\u30f3\u30c1\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3042\u306a\u305f\u306e.lagoon.yml\u306b\u5f93\u3063\u3066\u547d\u540d\u3055\u308c\u307e\u3059(\u4f8b:poly-project1 \u3068 poly-project2)
          2. \u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002
          3. (\u3082\u3057\u5fc5\u8981\u306a\u3089)\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u8a2d\u5b9a\u3057\u307e\u3059 - \u305d\u306e\u5f8c\u3001\u30d7\u30c3\u30b7\u30e5/\u30c7\u30d7\u30ed\u30a4\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u30d7\u30c3\u30b7\u30e5\u306f\u3001\u305d\u306eGit URL\u306b\u5bfe\u3059\u308b\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/\u30d6\u30e9\u30f3\u30c1\u3092\u540c\u6642\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002
          "},{"location":"ja/concepts-basics/lagoon-yml/#polysite-example","title":"Polysite\u306e\u4f8b","text":".lagoon.yml
          poly-project1:\nenvironments:\nmain:\nroutes:\n- nginx:\n- project1.com\npoly-project2:\nenvironments:\nmain:\nroutes:\n- nginx:\n- project2.com\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#specials","title":"\u7279\u5225\u306a\u9805\u76ee","text":""},{"location":"ja/concepts-basics/lagoon-yml/#api","title":"api","text":"\u60c5\u5831

          amazee.io\u306b\u30db\u30b9\u30c8\u3055\u308c\u305fLagoon\u3067\u76f4\u63a5\u52d5\u4f5c\u3059\u308b\u5834\u5408\u3001\u3053\u306e\u30ad\u30fc\u306f\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          api\u30ad\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001Lagoon CLI\u3068drush\u304cLagoon GraphQL API\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u5225\u306eURL\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u30b9\u30ad\u30fc\u30e0\u4ed8\u304d\u306e\u5b8c\u5168\u306aURL\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b:http://localhost:3000 \u3053\u308c\u306f\u901a\u5e38\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001Lagoon\u306e\u7ba1\u7406\u8005\u304c\u305d\u3046\u3059\u308b\u3088\u3046\u6307\u793a\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#ssh","title":"ssh","text":"\u60c5\u5831

          amazee.io\u306b\u30db\u30b9\u30c8\u3055\u308c\u305fLagoon\u3067\u76f4\u63a5\u52d5\u4f5c\u3059\u308b\u5834\u5408\u3001\u3053\u306e\u30ad\u30fc\u306f\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          ssh\u30ad\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001Lagoon CLI\u3068drush\u304cLagoon\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u5225\u306eSSH\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u30b3\u30ed\u30f3\u3067\u533a\u5207\u3089\u308c\u305f\u30db\u30b9\u30c8\u540d\u3068\u30dd\u30fc\u30c8\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b:localhost:2020 \u3053\u308c\u306f\u901a\u5e38\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001Lagoon\u306e\u7ba1\u7406\u8005\u304c\u305d\u3046\u3059\u308b\u3088\u3046\u6307\u793a\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#container-registries","title":"container-registries","text":"

          container-registries \u30d6\u30ed\u30c3\u30af\u3067\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u307e\u305f\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u30a4\u30e1\u30fc\u30b8\u3092\u30d7\u30eb\u3059\u308b\u305f\u3081\u306e\u72ec\u81ea\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001username\u3001password\u3001\u304a\u3088\u3073\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u30ec\u30b8\u30b9\u30c8\u30ea\u306e url \u304c\u5fc5\u8981\u3067\u3059\u3002YAML\u3067 url \u3092\u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067Docker Hub\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u30a8\u30f3\u30c8\u30ea\u306b\u8aac\u660e\u3092\u8ffd\u52a0\u3057\u3066\u3001\u60c5\u5831\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u306e\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059

          \u30ec\u30b8\u30b9\u30c8\u30ea\u30e6\u30fc\u30b6\u30fc\u306b\u4f7f\u7528\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u306f2\u3064\u3042\u308a\u307e\u3059\u3002

          • API\u3067\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b
          • .lagoon.yml\u30d5\u30a1\u30a4\u30eb\u306b\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3059\u308b\uff08\u305f\u3060\u3057\u3001\u3053\u308c\u306f\u63a8\u5968\u3057\u307e\u305b\u3093\uff09
          "},{"location":"ja/concepts-basics/lagoon-yml/#environment-variables-method","title":"\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5","text":"

          \u307e\u305a\u3001.lagoon.yml\u306b\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u30e6\u30fc\u30b6\u30fc\u540d\u3084\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30ab\u30b9\u30bf\u30e0\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3067\u3082\u3001URL\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u6b21\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3057\u307e\u3059:

          .lagoon.yml
          container-registries:\ndocker-hub:\ndescription: \"\u30c7\u30d5\u30a9\u30eb\u30c8\u306edocker.io\u30ec\u30b8\u30b9\u30c8\u30ea\u7528\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\"\nmy-custom-registry:\ndescription: \"\u30ab\u30b9\u30bf\u30e0\u30ec\u30b8\u30b9\u30c8\u30ea\u7528\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\"\nurl: my.own.registry.com\nanother-custom-registry:\ndescription: \"\u4ed6\u306e\u30ec\u30b8\u30b9\u30c8\u30ea\u7528\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\"\nusername: myotheruser\nurl: my.other.registry.com\n

          .lagoon.yml\u306b\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5b9a\u7fa9\u3059\u308b\u5834\u5408\u3001\u95a2\u9023\u3059\u308b\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u305f\u3060\u3057\u3001\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u5834\u5408\u3001\u305d\u306e\u5909\u6570\u306e\u5024\u304c\u512a\u5148\u3055\u308c\u307e\u3059\u3002

          \u6b21\u306b\u3001Lagoon API\u3067container_registry\u30bf\u30a4\u30d7\u306e\u74b0\u5883\u5909\u6570\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

          • lagoon add variable -p <\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d> -N <\u30ec\u30b8\u30b9\u30c8\u30ea\u30e6\u30fc\u30b6\u30fc\u306e\u5909\u6570\u540d> -V <\u30e6\u30fc\u30b6\u30fc> -S container_registry
          • lagoon add variable -p <\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d> -N <\u30ec\u30b8\u30b9\u30c8\u30ea\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5909\u6570\u540d> -V <\u30d1\u30b9\u30ef\u30fc\u30c9> -S container_registry
          • (\u8a73\u3057\u304f\u306f\u74b0\u5883\u5909\u6570\u3092\u53c2\u7167)

          \u5909\u6570\u306e\u540d\u524d\u306f.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u540d\u524d\u3068\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u6b21\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\uff1a

          • \u5927\u6587\u5b57\u3067\u8a18\u8ff0\u3059\u308b
          • \u30cf\u30a4\u30d5\u30f3\uff08-\uff09\u3092\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\uff08_\uff09\u306b\u7f6e\u304d\u63db\u3048\u308b
          • \u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u306bREGISTRY_\u3092\u4ed8\u3051\u308b
          • \u30b5\u30d5\u30a3\u30c3\u30af\u30b9\u306b_USERNAME\u307e\u305f\u306f_PASSWORD\u3092\u4ed8\u3051\u308b

          \u3044\u304f\u3064\u304b\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a

          • dockerhub\u306fREGISTRY_DOCKERHUB_USERNAME\u304a\u3088\u3073REGISTRY_DOCKERHUB_PASSWORD\u306b\u306a\u308a\u307e\u3059\u3002
          • docker-hub\u306fREGISTRY_DOCKER_HUB_USERNAME\u304a\u3088\u3073REGISTRY_DOCKER_HUB_PASSWORD\u306b\u306a\u308a\u307e\u3059\u3002
          • my-custom-registry\u306fREGISTRY_MY_CUSTOM_REGISTRY_USERNAME\u304a\u3088\u3073REGISTRY_MY_CUSTOM_REGISTRY_PASSWORD\u306b\u306a\u308a\u307e\u3059\u3002
          • \u30cf\u30a4\u30d5\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u5c0f\u6587\u5b57\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\uff08\u4f8b\uff1aREGISTRY_dockerhub_USERNAME\uff09\u3082\u52d5\u4f5c\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u5e38\u306b\u5927\u6587\u5b57\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u512a\u5148\u3055\u308c\u307e\u3059\u3002
          Legacy method of defining registry password

          \u4ee5\u524d\u306f\u3001\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u3053\u306e\u5834\u5408\u3001\u5909\u6570\u540d\u306f.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u6b21\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3055\u308c\u307e\u3059\uff1a .lagoon.yml

          container-registries:\ndocker-hub:\nusername: dockerhubuser\npassword: MY_DOCKER_HUB_PASSWORD\n

          \u30e6\u30fc\u30b6\u30fc\u540d\u3082\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5909\u6570\u3067\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5b9a\u7fa9\u3059\u308b\u5834\u5408\u306f\u305d\u306e\u9650\u308a\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          \u5909\u6570\u306f\u6b21\u306e\u3088\u3046\u306bAPI\u306b\u8ffd\u52a0\u3067\u304d\u307e\u3059\uff1a

          • lagoon add variable -p <\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d> -N MY_DOCKER_HUB_PASSWORD -V <\u30d1\u30b9\u30ef\u30fc\u30c9> -S container_registry

          \u3053\u306e\u65b9\u6cd5\u306f\u5f15\u304d\u7d9a\u304d\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3059\u304c\u3001\u5c06\u6765\u7684\u306b\u975e\u63a8\u5968\u3068\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u65b9\u6cd5\u306b\u5909\u66f4\u3059\u308b\u6642\u9593\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u3001\u30d3\u30eb\u30c9\u5185\u3067\u8b66\u544a\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002

          \u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5909\u6570\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30ab\u30b9\u30bf\u30e0\u540d\u306e\u5909\u6570\u306e\u4ee3\u308f\u308a\u306b\u305d\u308c\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/lagoon-yml/#hardcoded-values-method","title":"\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3055\u308c\u305f\u5024\u306e\u65b9\u6cd5","text":"

          \u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u304c\u3001.lagoon.yml \u30d5\u30a1\u30a4\u30eb\u306b\u76f4\u63a5\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

          .lagoon.yml
          container-registries:\ndocker-hub:\ndescription: \"\u30c7\u30d5\u30a9\u30eb\u30c8\u306edocker.io\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u8a8d\u8a3c\u60c5\u5831\"\nusername: dockerhubuser\npassword: MySecretPassword\nmy-custom-registry:\ndescription: \"\u81ea\u5206\u306e\u30ec\u30b8\u30b9\u30c8\u30ea\u306e\u8a8d\u8a3c\u60c5\u5831\"\nurl: my.own.registry.com\nusername: mycustomuser\npassword: MyCustomSecretPassword\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#consuming-a-custom-or-private-container-registry-image","title":"\u30ab\u30b9\u30bf\u30e0\u307e\u305f\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u30a4\u30e1\u30fc\u30b8\u306e\u4f7f\u7528","text":"

          \u30ab\u30b9\u30bf\u30e0\u307e\u305f\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u5185\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u66f4\u65b0\u3057\u3066\u3001\u30a4\u30e1\u30fc\u30b8\u3092\u5b9a\u7fa9\u3059\u308b\u4ee3\u308f\u308a\u306b\u30d3\u30eb\u30c9\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

          .docker-compose.yml
          services:\nmariadb:\nbuild:\ncontext: .\ndockerfile: Dockerfile.mariadb\n

          docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u304c\u30d3\u30eb\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u66f4\u65b0\u3055\u308c\u305f\u3089\u3001 Dockerfile.<service> \u3092\u4f5c\u6210\u3057\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30a4\u30e1\u30fc\u30b8\u3092 FROM <repo>/<name>:<tag> \u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          .lagoon.yml
          FROM dockerhubuser/my-private-database:tag\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#example-lagoonyml","title":".lagoon.yml \u306e\u4f8b","text":"

          \u3053\u308c\u306f\u5168\u3066\u306e\u53ef\u80fd\u306a\u8a2d\u5b9a\u3092\u793a\u3057\u305f .lagoon.yml \u306e\u4f8b\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5408\u308f\u305b\u3066\u8abf\u6574\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          .lagoon.yml
          docker-compose-yaml: docker-compose.yml\nenvironment_variables:\ngit_sha: 'true'\ntasks:\npre-rollout:\n- run:\nname: drush sql-dump\ncommand: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz\nservice: cli\npost-rollout:\n- run:\nname: drush cim\ncommand: drush -y cim\nservice: cli\nshell: bash\n- run:\nname: drush cr\ncommand: drush -y cr\nservice: cli\nroutes:\nautogenerate:\ninsecure: Redirect\nenvironments:\nmain:\nroutes:\n- nginx:\n- example.com\n- example.net\n- \"www.example.com\":\ntls-acme: true\ninsecure: Redirect\nhstsEnabled: true\n- \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\ntypes:\nmariadb: mariadb\ntemplates:\nmariadb: mariadb.main.deployment.yml\nrollouts:\nmariadb: statefulset\ncronjobs:\n- name: drush cron\nschedule: \"M * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nstaging:\ncronjobs:\n- name: drush cron\nschedule: \"M * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\nfeature/feature-branch:\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # This will run the cron once per hour.\ncommand: drush cron\nservice: cli\n
          "},{"location":"ja/concepts-basics/lagoon-yml/#deprecated","title":"\u975e\u63a8\u5968","text":"

          \u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306f\u975e\u63a8\u5968\u3068\u306a\u308a\u3001\u3042\u306a\u305f\u306e .lagoon.yml \u304b\u3089\u524a\u9664\u3059\u308b\u3079\u304d\u3067\u3059\u3002

          • routes.autogenerate.insecure

            None \u30aa\u30d7\u30b7\u30e7\u30f3\u306f Redirect \u3068\u540c\u7b49\u3067\u3059\u3002

          • environments.[name].monitoring_urls
          • environments.[name].routes.[service].[route].hsts
          • environments.[name].routes.[service].[route].insecure

            None \u30aa\u30d7\u30b7\u30e7\u30f3\u306f Redirect \u3068\u540c\u7b49\u3067\u3059\u3002

          "},{"location":"ja/concepts-basics/building-blocks/deploy-targets/","title":"\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8","text":"

          \u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8 \u306f\u3001Lagoon\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u3069\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u304b\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u4e00\u3064\u307e\u305f\u306f\u305d\u308c\u4ee5\u4e0a\u306e\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u3001\u4f8b\u3048\u3070\u3001\u4e00\u3064\u306f\u672c\u756a\u7528\u3001\u3082\u3046\u4e00\u3064\u306f\u30c6\u30b9\u30c8\u7528\u3068\u3044\u3063\u305f\u5177\u4f53\u7684\u306a\u4f7f\u3044\u5206\u3051\u304c\u53ef\u80fd\u3067\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3078\u306e\u5bfe\u5fdc\u306a\u3069\u3001\u3055\u307e\u3056\u307e\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

          \u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aad\u3080\u3002

          "},{"location":"ja/concepts-basics/building-blocks/groups/","title":"\u30b0\u30eb\u30fc\u30d7","text":"

          \u30b0\u30eb\u30fc\u30d7 \u306f\u30ed\u30fc\u30eb\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7d44\u7e54\u306f1\u3064\u4ee5\u4e0a\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f1\u3064\u4ee5\u4e0a\u306e\u30b0\u30eb\u30fc\u30d7\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002\u30b0\u30eb\u30fc\u30d7\u306f\u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30b0\u30eb\u30fc\u30d7\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u306f\u72ec\u7acb\u3057\u3066\u4f5c\u6210\u3055\u308c\u3001\u305d\u306e\u5f8c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002

          \u7d44\u7e54\u306b\u306f\u3001\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u6570\u3092\u5236\u9650\u3059\u308b\u30af\u30a9\u30fc\u30bf\u304c\u3042\u308a\u307e\u3059\u3002\u30af\u30a9\u30fc\u30bf\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/concepts-basics/building-blocks/notifications/","title":"\u901a\u77e5","text":"

          \u901a\u77e5 \u306f\u3001Lagoon\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u9032\u884c\u72b6\u6cc1\u3092\u4f1d\u3048\u308b\u65b9\u6cd5\u3067\u3059\u3002\u901a\u77e5\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u7a2e\u985e\u304c\u3042\u308a\u307e\u3059:

          • Slack
          • RocketChat
          • \u30e1\u30fc\u30eb
          • Webhook
          • Microsoft Teams

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u4e00\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u901a\u77e5\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7d44\u7e54\u306f\u3001\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u901a\u77e5\u306e\u5272\u308a\u5f53\u3066\u67a0\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u901a\u77e5\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u306f\u72ec\u7acb\u3057\u3066\u4f5c\u6210\u3055\u308c\u3001\u305d\u306e\u5f8c\u4e00\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          Lagoon UI\u3067\u901a\u77e5\u3092\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u3067\u8ffd\u52a0\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3076.

          API\u3092\u901a\u3058\u3066\u901a\u77e5\u3092\u8ffd\u52a0\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3076.

          "},{"location":"ja/concepts-basics/building-blocks/organizations/","title":"\u7d44\u7e54","text":"

          \u7d44\u7e54 \u306f\u3001\u4e00\u3064\u4ee5\u4e0a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u901a\u77e5\u3092\u542b\u3080\u3053\u3068\u304c\u3067\u304d\u308b\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3067\u3059\u3002\u7d44\u7e54\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u5236\u5fa1\u3057\u3001\u30b0\u30eb\u30fc\u30d7\u306e\u4f5c\u6210\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u8ffd\u52a0\u3068\u524a\u9664\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u5272\u308a\u5f53\u3066\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002

          Organizations\u306f\u3001\u69cb\u9020\u306e\u5c64\u3092\u8ffd\u52a0\u3057\u3066\u73fe\u5b9f\u3092\u6a21\u5023\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u7279\u5b9a\u306e\u30b5\u30a4\u30c8\u3067\u4f5c\u696d\u3059\u308b\u30c1\u30fc\u30e0\u3092\u53cd\u6620\u3059\u308b\u305f\u3081\u306b\u3001\u7d44\u7e54\u3092\u4f5c\u6210\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3067\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u305d\u306e\u7d44\u7e54\u306b\u306f\u3001\u305d\u306e\u30b5\u30a4\u30c8\u3092\u69cb\u6210\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001 \u958b\u767a\u8005\u3068 \u547c\u3070\u308c\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u30b5\u30a4\u30c8\u4f5c\u696d\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3059\u3079\u3066\u306e\u4eba\u3005\u3001\u305d\u3057\u3066\u30b5\u30a4\u30c8\u3084\u554f\u984c\u3092\u95b2\u89a7\u3059\u308b\u305f\u3081\u3060\u3051\u306bLagoon\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5225\u306e\u30b0\u30eb\u30fc\u30d7\uff08 \u95b2\u89a7\u8005 \u3068\u547c\u3070\u308c\u308b\uff09\u304c\u542b\u307e\u308c\u3001\u305d\u308c\u305e\u308c\u9069\u5207\u306a\u30ed\u30fc\u30eb\u3092\u6301\u3061\u307e\u3059\u3002

          \u7d44\u7e54\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u901a\u77e5\u3001\u74b0\u5883\u306e\u6570\u3092\u5236\u9650\u3059\u308b\u305f\u3081\u306e\u30af\u30a9\u30fc\u30bf\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30af\u30a9\u30fc\u30bf\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u7d44\u7e54\u3068\u306e\u3084\u308a\u3068\u308a\u306b\u3064\u3044\u3066\u3082\u3063\u3068\u5b66\u3076.

          "},{"location":"ja/concepts-basics/building-blocks/projects/","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8","text":"

          \u30d7\u30ed\u30b8\u30a7\u30af\u30c8 \u306f\u3001Lagoon\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3059\u3002\u7d44\u7e54\u306f1\u3064\u4ee5\u4e0a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f\u30011\u4eba\u4ee5\u4e0a\u306e\u30e6\u30fc\u30b6\u30fc\u3001\u901a\u77e5\u3001\u305d\u3057\u3066\u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u7d44\u7e54\u306f\u3001\u4f5c\u6210\u3067\u304d\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u91cf\u3092\u5236\u9650\u3059\u308b\u305f\u3081\u306e\u30af\u30a9\u30fc\u30bf\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/concepts-basics/building-blocks/roles/","title":"\u30ed\u30fc\u30eb","text":"

          \u30ed\u30fc\u30eb \u306f\u30e6\u30fc\u30b6\u30fc\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306f\u30b0\u30eb\u30fc\u30d7\u3084\u7d44\u7e54\u3067\u30ed\u30fc\u30eb\u3092\u4e0e\u3048\u3089\u308c\u307e\u3059\u3002

          \u30b0\u30eb\u30fc\u30d7\u306e\u30e1\u30f3\u30d0\u30fc\u306b\u306f\u4ee5\u4e0b\u306e\u30ed\u30fc\u30eb\u3092\u4e0e\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

          • \u30b2\u30b9\u30c8
          • \u30ec\u30dd\u30fc\u30bf\u30fc
          • \u958b\u767a\u8005
          • \u30e1\u30f3\u30c6\u30ca\u30fc
          • \u30aa\u30fc\u30ca\u30fc

          \u3053\u308c\u3089\u306e\u30ed\u30fc\u30eb\u3068\u305d\u306e\u6a29\u9650\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u3053\u3067\u8a73\u3057\u304f\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059:\u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3002

          \u7d44\u7e54\u306e\u30e1\u30f3\u30d0\u30fc\u306b\u306f\u4ee5\u4e0b\u306e\u30ed\u30fc\u30eb\u3092\u4e0e\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

          • \u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc
          • \u7d44\u7e54\u306e\u30d3\u30e5\u30fc\u30a2

          \u30af\u30a9\u30fc\u30bf\u306e\u5909\u66f4

          \u30af\u30a9\u30fc\u30bf\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc \u306f\u3001\u30af\u30a9\u30fc\u30bf\u306e\u5909\u66f4\u3092\u9664\u304f\u3001\u7d44\u7e54\u306e\u7ba1\u7406\u306b\u95a2\u9023\u3059\u308b\u3059\u3079\u3066\u306e\u4e8b\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5f7c\u3089\u306f\u30e6\u30fc\u30b6\u30fc\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u3001\u901a\u77e5\u306e\u8ffd\u52a0\u3084\u524a\u9664\u304c\u3067\u304d\u307e\u3059\u3002

          \u7d44\u7e54\u306e\u95b2\u89a7\u8005 \u306f\u3001\u7d44\u7e54\u3092\u95b2\u89a7\u3059\u308b\u3060\u3051\u306e\u8aad\u307f\u53d6\u308a\u5c02\u7528\u306e\u30ed\u30fc\u30eb\u3067\u3042\u308a\u3001\u5909\u66f4\u3084\u8ffd\u52a0\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u5f7c\u3089\u306f\u7d44\u7e54\u5185\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u901a\u77e5\u3092\u95b2\u89a7\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u5909\u66f4\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002

          \u30aa\u30fc\u30ca\u30fc\u307e\u305f\u306f\u30d3\u30e5\u30fc\u30a2\u3068\u3057\u3066\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u7d44\u7e54\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002

          "},{"location":"ja/concepts-basics/building-blocks/users/","title":"\u30e6\u30fc\u30b6\u30fc","text":"

          \u30e6\u30fc\u30b6\u30fc \u306f\u3001Lagoon\u30b7\u30b9\u30c6\u30e0\u3068\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306eLagoon\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306f\u4e00\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u7d44\u7e54\u3084\u30b0\u30eb\u30fc\u30d7\u306b\u6240\u5c5e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u5404\u30b0\u30eb\u30fc\u30d7\u306f\u3055\u307e\u3056\u307e\u306a\u8a31\u53ef\u3092\u4ed8\u4e0e\u3059\u308b\u7570\u306a\u308b\u30ed\u30fc\u30eb\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7d44\u7e54\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u304a\u3088\u3073\u30ed\u30fc\u30eb\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u4ed8\u4e0e\u3057\u307e\u3059\u3002

          \u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30fc\u30eb\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aad\u3080\u3002

          "},{"location":"ja/contributing-to-lagoon/api-debugging/","title":"API\u30c7\u30d0\u30c3\u30b0","text":"

          1 . services/api/package.json\u306b\u3042\u308bdev\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u4ee5\u4e0b\u3092\u542b\u3080\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059:

          services/api/package.json
          node --inspect=0.0.0.0:9229\n

          2 . docker-compose.yml\u3092\u66f4\u65b0\u3057\u3066\u3001dist\u30d5\u30a9\u30eb\u30c0\u3092\u30de\u30c3\u30d7\u3057\u30019229\u30dd\u30fc\u30c8\u3092\u516c\u958b\u3057\u307e\u3059:

          docker-compose.yml
            api:\nimage: ${IMAGE_REPO:-lagoon}/api\ncommand: yarn run dev\nvolumes:\n- ./services/api/src:/app/services/api/src\n- ./services/api/dist:/app/services/api/dist\ndepends_on:\n- api-db\n- local-api-data-watcher-pusher\n- keycloak\nports:\n- '3000:3000'\n- '9229:9229'\n

          3 . \u6b21\u306e\u5185\u5bb9\u3092.vscode/launch.json\u306b\u8ffd\u52a0\u3057\u307e\u3059:

          .vscode/launch.json
          {\n// IntelliSense\u3092\u4f7f\u7528\u3057\u3066\u53ef\u80fd\u306a\u5c5e\u6027\u306b\u3064\u3044\u3066\u5b66\u7fd2\u3057\u307e\u3059\u3002\n// \u65e2\u5b58\u306e\u5c5e\u6027\u306e\u8aac\u660e\u3092\u8868\u793a\u3059\u308b\u306b\u306f\u3001\u30db\u30d0\u30fc\u3057\u307e\u3059\u3002\n// \u8a73\u7d30\u60c5\u5831\u306f\u3001\u6b21\u306eURL\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:https://go.microsoft.com/fwlink/?linkid=830387.\n\"version\": \"0.2.0\",\n\"configurations\": [\n{\n\"name\": \"Docker: Attach to Node\",\n\"type\": \"node\",\n\"request\": \"attach\",\n\"port\": 9229,\n\"address\": \"localhost\",\n\"outFiles\": [\"${workspaceRoot}/app/services/api/dist/**/*.js\"],\n\"localRoot\": \"${ \"workspaceFolder}/services/api\",\n      \"remoteRoot\": \"/app/services/api\",\n      \"sourceMaps\": true,\n      \"protocol\": \"inspector\"\n    }\n  ]\n}\n4 . \u30b3\u30f3\u30c6\u30ca\u306e\u518d\u69cb\u7bc9/\u518d\u8d77\u52d5:\n```bash title=\"\u30b3\u30f3\u30c6\u30ca\u306e\u518d\u8d77\u52d5\"\nrm build/api && make build/api && docker-compose restart api\n

          5 . VScode\u3092\u518d\u8d77\u52d5\u3057\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/","title":"Lagoon\u306e\u958b\u767a","text":"

          Lagoon\u306e\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306f\u3001\u73fe\u5728\u3001\u30ed\u30fc\u30ab\u30eb\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u307e\u305f\u306fDocker Compose(\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3068\u3057\u3066)\u3092\u7d4c\u7531\u3057\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u6ce8\u610f:

          \u30d5\u30eb\u306eLagoon\u30b9\u30bf\u30c3\u30af\u306f\u3001\u73fe\u5728ARM\u30d9\u30fc\u30b9\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3(M1/M2 Apple Silicon\u30d9\u30fc\u30b9\u306e\u30de\u30b7\u30f3\u306a\u3069)\u3068\u4e92\u63db\u6027\u306e\u306a\u3044\u4e0a\u6d41\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u4f9d\u5b58\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u4e0a\u3067lagoon-core\u307e\u305f\u306flagoon-remote\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u307e\u305f\u306f\u958b\u767a\u3059\u308b\u3053\u3068\u306f\u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u8a73\u7d30\u306fhttps://github.com/uselagoon/lagoon/issues/3189 \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#docker","title":"Docker","text":"

          Docker\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067Lagoon\u3092\u30d3\u30eb\u30c9\u304a\u3088\u3073\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#dockerdocker-compose","title":"Docker\u3068Docker Compose\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

          Docker\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

          Docker Compose\u306f\u3001Docker for Mac\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002Linux\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u306e\u624b\u9806\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#docker_1","title":"Docker\u306e\u8a2d\u5b9a","text":"

          Docker\u306e\u30bb\u30ad\u30e5\u30a2\u3067\u306a\u3044\u30ec\u30b8\u30b9\u30c8\u30ea\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u3092\u8aad\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u518d\u8a2d\u5b9a\u3092\u907f\u3051\u308b\u305f\u3081\u3001\u5168\u3066\u306e\u30ed\u30fc\u30ab\u30ebIPv4\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30a2\u30c9\u30ec\u30b9\u30b9\u30da\u30fc\u30b9\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002 Kubernetes\u3068Docker Compose\u3002\u305f\u3068\u3048\u3070\u3001\"insecure-registries\" : [\"172.16.0.0/12\",\"192.168.0.0/16\"],

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#docker_2","title":"\u5341\u5206\u306aDocker\u30ea\u30bd\u30fc\u30b9\u306e\u5272\u308a\u5f53\u3066","text":"

          \u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u4e0a\u3067Lagoon\u3001Kubernetes\u3001\u307e\u305f\u306fDocker\u30af\u30e9\u30b9\u30bf\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u591a\u304f\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u6d88\u8cbb\u3057\u307e\u3059\u3002Docker\u30db\u30b9\u30c8\u306b\u306f\u6700\u4f4e\u3067\u30828\u3064\u306eCPU\u30b3\u30a2\u306812GB\u306eRAM\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#lagoon_1","title":"\u30ed\u30fc\u30ab\u30eb\u3067Lagoon\u3092\u30d3\u30eb\u30c9\u3059\u308b","text":"

          \u8b66\u544a

          Lagoon\u3092\u3053\u306e\u65b9\u6cd5\u3067\u30d3\u30eb\u30c9\u3092\u8003\u3048\u308b\u306e\u306f\u3001\u305d\u308c\u306b\u6a5f\u80fd\u3084\u6a5f\u80fd\u3092\u958b\u767a\u3057\u305f\u3044\u3001\u307e\u305f\u306f\u5185\u90e8\u30d7\u30ed\u30bb\u30b9\u3092\u30c7\u30d0\u30c3\u30b0\u3057\u305f\u3044\u5834\u5408\u3060\u3051\u3067\u3059\u3002\u307e\u305f\u3001\u30d3\u30eb\u30c9\u305b\u305a\u306bLagoon\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u65b9\u6cd5(\u3064\u307e\u308a\u3001\u516c\u958b\u3055\u308c\u305f\u30ea\u30ea\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5)\u306e\u6307\u793a\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002

          \u79c1\u305f\u3061\u306f\u3001\u5fc5\u8981\u306aDocker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3057\u3001Kubernetes\u3092\u8a2d\u5b9a\u3057\u3001\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306bmake(Makefile\u3092\u53c2\u7167)\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

          \u79c1\u305f\u3061\u306f\u3001\u307b\u3068\u3093\u3069\u306e\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u30b7\u30ca\u30ea\u30aa\u3092\u30ab\u30d0\u30fc\u3059\u308b\u305f\u3081\u306b\u3001Makefile\u306b\u3044\u304f\u3064\u304b\u306e\u30eb\u30fc\u30c1\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3057\u305f\u3002\u3053\u3053\u3067\u306f\u3001\u5b8c\u5168\u306a\u30d7\u30ed\u30bb\u30b9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_1","title":"\u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9","text":"
          1. \u3053\u3053\u3067\u306e-j8\u306f\u3001make\u306b\u30d3\u30eb\u30c9\u3092\u901f\u3081\u308b\u305f\u3081\u306b\u4e26\u5217\u30678\u3064\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u3088\u3046\u306b\u6307\u793a\u3057\u307e\u3059\u3002\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          2. \u30c7\u30d5\u30a9\u30eb\u30c8\u3067SCAN_IMAGES=false\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u30d3\u30eb\u30c9\u3057\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002 \u8106\u5f31\u6027\u3002\u3053\u308c\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u30b9\u30ad\u30e3\u30f3\u7d50\u679c\u3092\u542b\u3080scan.txt\u30d5\u30a1\u30a4\u30eb\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\u306b\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002
          \u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9
          make -j8 build\n
          1. Makefile\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3067Lagoon\u306e\u30c6\u30b9\u30c8\u30eb\u30fc\u30c6\u30a3\u30f3\u3092\u958b\u59cb\u3057\u307e\u3059(\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8)\u3002
          \u30c6\u30b9\u30c8\u958b\u59cb
          make kind/test\n

          \u8b66\u544a

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30c6\u30b9\u30c8\u304c\u591a\u6570\u3042\u308a\u307e\u3059 - \u6a5f\u80fd\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u6700\u4f4e\u9650\u306e\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u30c6\u30b9\u30c8\u306e\u307f\u3092\u8003\u616e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u3001Makefile\u306eTESTS\u5909\u6570\u304b\u3089\u30c6\u30b9\u30c8\u3092\u6307\u5b9a\u3057\u305f\u308a\u524a\u9664\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u3067\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u3053\u306e\u30d7\u30ed\u30bb\u30b9\u3067\u306f\u6b21\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u307e\u3059:

          1. \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u30c4\u30fc\u30eb\u306e\u6b63\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059 - kind\u3001kubectl\u3001helm\u3001jq\u3002
          2. Lagoon\u304c\u6a5f\u80fd\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306aHelm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002
          3. \u524d\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u6b63\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u304c\u3059\u3079\u3066\u30d3\u30eb\u30c9\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
          4. \u30ed\u30fc\u30ab\u30eb\u306eKinD\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306eDocker\u30b3\u30f3\u30c6\u30ca\u306b\u5b8c\u5168\u306b\u7a3c\u50cd\u3059\u308bKubernetes\u30af\u30e9\u30b9\u30bf\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u306e\u30af\u30e9\u30b9\u30bf\u306f\u3001\u30d3\u30eb\u30c9\u3057\u305fLagoon\u30a4\u30e1\u30fc\u30b8\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u305f\u3081\u306b\u63d0\u4f9b\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u3068\u901a\u4fe1\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u305f\u3081\u306b\u30db\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3082\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          5. Lagoon\u3092 https://github.com/uselagoon/lagoon-charts (\u5fc5\u8981\u306b\u5fdc\u3058\u3066Makefile\u306eCHARTS_TREEISH\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u30d6\u30e9\u30f3\u30c1\u3092\u5236\u5fa1\u3057\u3066\u304f\u3060\u3055\u3044).
          6. Harbor Image\u30ec\u30b8\u30b9\u30c8\u30ea\u3092KinD\u30af\u30e9\u30b9\u30bf\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u305d\u306e\u30a4\u30f3\u30b0\u30ec\u30b9\u3068\u30a2\u30af\u30bb\u30b9\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
          7. Docker\u306f\u30d3\u30eb\u30c9\u3057\u305fLagoon\u306e\u30a4\u30e1\u30fc\u30b8\u3092Harbor\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
          8. \u6b21\u306b\u3001lagoon-charts\u306eMakefile\u3092\u4f7f\u7528\u3057\u3066\u3001\u6b8b\u308a\u306e\u8a2d\u5b9a\u624b\u9806\u3092\u9032\u884c\u3057\u307e\u3059\u3002
          9. \u9069\u5207\u306a\u30a4\u30f3\u30b0\u30ec\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059 - NGINX Ingress Controller\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
          10. \u7279\u5b9a\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u8981\u6c42\u3092\u51e6\u7406\u3059\u308b\u30ed\u30fc\u30ab\u30ebNFS\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059 - Read-Write-Many\u64cd\u4f5c(RWX)\u3092\u51e6\u7406\u3059\u308b\u3082\u306e\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
          11. \u305d\u306e\u5f8c\u3001Lagoon Core\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u30ed\u30fc\u30ab\u30eb\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30ed\u30fc\u30ab\u30eb\u3067\u30d3\u30eb\u30c9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u30c6\u30b9\u30c8\u306b\u5fc5\u8981\u3068\u3055\u308c\u306a\u3044\u4e00\u90e8\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u9664\u5916\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u3001API\u3068Keycloak\u304c\u30aa\u30f3\u30e9\u30a4\u30f3\u306b\u306a\u308b\u306e\u3092\u5f85\u3061\u307e\u3059\u3002
          12. DBaaS\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059 - MariaDB\u3001PostgreSQL\u3001MongoDB\u3002\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u3001 \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u4e2d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u3001\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc(\u4f8b\u3048\u3070\u3001Cloud SQL\u3001RDS\u3001Azure Database\u306a\u3069)\u7d4c\u7531\u3067\u5229\u7528\u53ef\u80fd\u306a\u30de\u30cd\u30fc\u30b8\u30c9\u30b5\u30fc\u30d3\u30b9\u3092\u30a8\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u307e\u3059\u3002
          13. \u6b21\u306bLagoon Remote\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3001Lagoon Core\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u901a\u4fe1\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u3053\u308c\u304c\u5b8c\u4e86\u3059\u308b\u306e\u3092\u5f85\u3063\u3066\u304b\u3089\u7d9a\u884c\u3057\u307e\u3059\u3002
          14. \u30c6\u30b9\u30c8\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3059\u308b\u305f\u3081\u306b\u3001Lagoon Test\u30c1\u30e3\u30fc\u30c8\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30c6\u30b9\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30db\u30b9\u30c8\u3059\u308b\u30ed\u30fc\u30ab\u30eb\u306eGit\u30b5\u30fc\u30d0\u30fc\u304c\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3001\u8a2d\u5b9a\u3067Lagoon API\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u4e8b\u524d\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002\u305d\u308c\u304b\u3089\u3001\u30c6\u30b9\u30c8\u3092\u958b\u59cb\u3059\u308b\u524d\u306b\u6e96\u5099\u30c1\u30a7\u30c3\u30af\u3092\u884c\u3044\u307e\u3059\u3002
          15. Lagoon\u306f\u3001Makefile\u306eTESTS\u5909\u6570\u3067\u6307\u5b9a\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u5404\u30c6\u30b9\u30c8\u306f\u81ea\u8eab\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u74b0\u5883\u3092\u4f5c\u6210\u3057\u3001\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u305f\u5f8c\u306b\u74b0\u5883\u3068\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u524a\u9664\u3057\u307e\u3059\u3002\u30c6\u30b9\u30c8\u306e\u5b9f\u884c\u7d50\u679c\u306flagoon-test-suite-*\u30dd\u30c3\u30c9\u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u30ed\u30b0\u306b\u51fa\u529b\u3055\u308c\u3001\u30b3\u30f3\u30c6\u30ca\u3054\u3068\u306b1\u3064\u306e\u30c6\u30b9\u30c8\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          \u7406\u60f3\u7684\u306b\u306f\u3001\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u304c\u901a\u904e\u3057\u3001\u3059\u3079\u3066\u7d42\u4e86\u3057\u307e\u3059\uff01

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_2","title":"\u30c6\u30b9\u30c8\u306e\u9032\u884c\u72b6\u6cc1\u3068\u30ed\u30fc\u30ab\u30eb\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u8868\u793a","text":"

          \u30c6\u30b9\u30c8\u30eb\u30fc\u30c1\u30f3\u306f\u30ed\u30fc\u30ab\u30eb\u306eKubeconfig\u30d5\u30a1\u30a4\u30eb(\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30c8\u306bkubeconfig.kind.lagoon\u3068\u3044\u3046\u540d\u524d\u3067)\u3092\u4f5c\u6210\u3057\u3001Kubernetes\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3001\u30d3\u30e5\u30fc\u30ef\u3001CLI\u3068\u3068\u3082\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30ed\u30fc\u30ab\u30eb\u30af\u30e9\u30b9\u30bf\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3059\u3002\u79c1\u305f\u3061\u306f\u3001Lens\u3001Octant\u3001kubectl\u3001Portainer\u3068\u3044\u3063\u305f\u30c4\u30fc\u30eb\u3092\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002Lagoon Core\u3001Remote\u3001Tests\u306f\u3059\u3079\u3066Lagoon\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u3067\u30d3\u30eb\u30c9\u3055\u308c\u3001\u5404\u74b0\u5883\u306f\u81ea\u8eab\u306e\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u3066\u5b9f\u884c\u3059\u308b\u305f\u3081\u3001\u78ba\u8a8d\u3059\u308b\u969b\u306b\u306f\u6b63\u3057\u3044\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u30ed\u30fc\u30ab\u30eb\u30af\u30e9\u30b9\u30bf\u3068kubectl\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u6b63\u3057\u3044Kubeconfig\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u3059\u3079\u3066\u306e\u30b3\u30de\u30f3\u30c9\u3067\u884c\u3046\u3053\u3068\u3082\u3001\u597d\u307f\u306e\u30c4\u30fc\u30eb\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

          kubeconfig.kind.lagoon
          KUBECONFIG=./kubeconfig.kind.lagoon kubectl get pods -n lagoon\n

          \u30ed\u30fc\u30ab\u30eb\u306eLagoon\u3092\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308bHelm\u30c1\u30e3\u30fc\u30c8\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u30af\u30ed\u30fc\u30f3\u3055\u308c\u3001lagoon-charts.kind.lagoon\u306b\u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5f8c\u3067\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u7c21\u5358\u306a\u5909\u66f4\u306e\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#lagoon_2","title":"\u30ed\u30fc\u30ab\u30ebLagoon\u30af\u30e9\u30b9\u30bf\u3068\u5bfe\u8a71\u3059\u308b","text":"

          Makefile\u306b\u306f\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fLagoon\u3068\u306e\u5bfe\u8a71\u3092\u7c21\u5358\u306b\u3059\u308b\u3044\u304f\u3064\u304b\u306e\u30eb\u30fc\u30c1\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

          Create local ports
          make kind/port-forwards\n

          \u3053\u308c\u306b\u3088\u308a\u3001UI\u3092\u516c\u958b\u3059\u308b\u305f\u3081\u306e\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002 6060)\u3001API (7070)\u3001\u305d\u3057\u3066 Keycloak (8080)\u3067\u3059\u3002\u3053\u308c\u306f stdout\u306b\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u305f\u3081\u3001\u5225\u306e\u30bf\u30fc\u30df\u30ca\u30eb/\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u5b9f\u884c\u3059\u3079\u304d\u3067\u3057\u3087\u3046\u3002

          \u7ba1\u7406\u8005\u306e\u8cc7\u683c\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b
          make kind/get-admin-creds\n

          \u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u3068\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306e\u5fc5\u8981\u306a\u8cc7\u683c\u60c5\u5831\u304c\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002

          • JWT\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306eGraphQL\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067bearer\u30c8\u30fc\u30af\u30f3\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u7ba1\u7406\u8005\u30b9\u30b3\u30fc\u30d7\u306e\u30c8\u30fc\u30af\u30f3\u3067\u3059\u3002\u8a73\u7d30\u306fGraphQL\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002
          • Keycloak\u306e\"admin\"\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30c8\u30fc\u30af\u30f3\u304c\u3042\u308a\u3001\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30ed\u30fc\u30eb\u306a\u3069\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002
          • Lagoon\u306e\"lagoonadmin\"\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30c8\u30fc\u30af\u30f3\u3082\u3042\u308a\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b0\u30eb\u30fc\u30d7\u3001\u6a29\u9650\u306a\u3069\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
          \u30a4\u30e1\u30fc\u30b8\u306e\u518d\u30d7\u30c3\u30b7\u30e5
          make kind/dev\n

          \u3053\u308c\u306b\u3088\u308a\u3001KIND_SERVICES\u306b\u30ea\u30b9\u30c8\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u3057\u3044\u30bf\u30b0\u3067\u518d\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u3001lagoon-core\u30c1\u30e3\u30fc\u30c8\u304c\u518d\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306fLagoon\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3059\u308b\u5c0f\u3055\u306a\u5909\u66f4\u3092\u30c6\u30b9\u30c8\u3059\u308b\u306e\u306b\u4fbf\u5229\u3067\u3059\u304c\u3001\"\u30e9\u30a4\u30d6\"\u958b\u767a\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u307e\u305a\u3053\u308c\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u518d\u69cb\u7bc9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b:rm build/api && make build/api.

          typescript\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u30d3\u30eb\u30c9\u3059\u308b
          make kind/local-dev-patch\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fNode.js\u3092\u4f7f\u7528\u3057\u3066typescript\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u30d3\u30eb\u30c9\u3055\u308c\u307e\u3059(\u3053\u308c\u306f >16.0)\u3002\u305d\u306e\u5f8c\u3001\u6b21\u306e\u64cd\u4f5c\u3092\u884c\u3044\u307e\u3059:

          • Lagoon\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u306edist\u30d5\u30a9\u30eb\u30c0\u3092Kubernetes\u306e\u6b63\u3057\u3044lagoon-core\u30dd\u30c3\u30c9\u306b\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059
          • \u30b3\u30fc\u30c9\u306e\u5909\u66f4\u3092\u76e3\u8996\u3059\u308bnodemon\u304c\u52d5\u4f5c\u3057\u3066\u3044\u308b\u30b5\u30fc\u30d3\u30b9\u3068\u5171\u306blagoon-core\u30c1\u30e3\u30fc\u30c8\u3092\u518d\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059
          • \u3053\u308c\u306b\u3088\u308a\u3001Lagoon \u3067\u306e\u30e9\u30a4\u30d6\u958b\u767a\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002
          • Kubernetes\u306e\u30dd\u30c3\u30c9\u306b\u5909\u66f4\u304c\u53cd\u6620\u3055\u308c\u308b\u305f\u3081\u306b\u306f\u3001\u6642\u6298\u518d\u30c7\u30d7\u30ed\u30a4\u304c\u5fc5\u8981\u306a\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u7570\u306a\u308b\u30d6\u30e9\u30f3\u30c1\u3092git clean -dfx\u3067\u518d\u30d3\u30eb\u30c9\u3059\u308b\u5834\u5408\u306f\u3001\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u306e\u30d3\u30eb\u30c9\u6210\u679c\u7269\u3092\u30af\u30ea\u30fc\u30f3\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u306a\u304a\u3001dist\u30d5\u30a9\u30eb\u30c0\u306fGit\u306b\u3088\u3063\u3066\u7121\u8996\u3055\u308c\u307e\u3059\u3002
          \u30ed\u30ae\u30f3\u30b0\u3092\u958b\u59cb
          make kind/local-dev-logging\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u306eDocker\u306b\u72ec\u7acb\u3057\u305fOpenDistro for Elasticsearch\u30af\u30e9\u30b9\u30bf\u304c\u4f5c\u6210\u3055\u308c\u3001Lagoon\u304c\u3059\u3079\u3066\u306e\u30ed\u30b0(Lagoon\u304a\u3088\u3073\u30d7\u30ed\u30b8\u30a7\u30af\u30c8)\u3092\u305d\u308c\u306b\u9001\u4fe1\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a2d\u5b9a\u306flagoon-logging\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u30c6\u30b9\u30c8\u3092\u518d\u5b9f\u884c
          make kind/retest\n# OR\nmake kind/retest TESTS='[features-kubernetes]'\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u65e2\u5b58\u306e\u30af\u30e9\u30b9\u30bf\u306b\u5bfe\u3059\u308b\u4e00\u9023\u306e\u30c6\u30b9\u30c8(TESTS\u5909\u6570\u3067\u5b9a\u7fa9)\u304c\u518d\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u30c6\u30b9\u30c8\u7528\u306e\u30a4\u30e1\u30fc\u30b8(tests\u3001local-git\u3001data-watcher-pusher)\u304c\u518d\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002\u30c6\u30b9\u30c8\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 TESTS\u5909\u6570\u3092\u30a4\u30f3\u30e9\u30a4\u30f3\u3067\u6e21\u3057\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002

          \u30c6\u30b9\u30c8\u8a2d\u5b9a\u3092\u66f4\u65b0\u3059\u308b\u5834\u5408\u3001\u30c6\u30b9\u30c8\u30a4\u30e1\u30fc\u30b8\u3092\u518d\u30d3\u30eb\u30c9\u3057\u3066\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001rm build/tests && make build/tests && make kind/push-images IMAGES='tests' && make kind/retest TESTS='[api]'

          Push all images
          make kind/push-images\n# OR\nmake kind/push-images IMAGES='tests local-git'\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002IMAGES\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u7279\u5b9a\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u30bf\u30b0\u3092\u4ed8\u3051\u3066\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002

          Remove cluster
          make kind/clean\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30ab\u30eb\u306eDocker\u304b\u3089KinD Lagoon\u30af\u30e9\u30b9\u30bf\u304c\u524a\u9664\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#ansible","title":"Ansible","text":"

          Lagoon\u30c6\u30b9\u30c8\u3067\u306f\u3001Ansible\u3092\u7528\u3044\u3066\u30c6\u30b9\u30c8\u30b9\u30a4\u30fc\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u7279\u5b9a\u306e\u6a5f\u80fd\u306e\u30c6\u30b9\u30c8\u7bc4\u56f2\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30eb\u30fc\u30c1\u30f3\u306b\u5206\u5272\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u3067\u958b\u767a\u4f5c\u696d\u3092\u884c\u3063\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u5b9f\u884c\u3059\u308b\u30c6\u30b9\u30c8\u3092\u9078\u629e\u3057\u3001Makefile\u5185\u306e$TESTS\u5909\u6570\u3092\u66f4\u65b0\u3057\u3066\u3001\u540c\u6642\u306b\u5b9f\u884c\u3055\u308c\u308b\u30c6\u30b9\u30c8\u3092\u6e1b\u3089\u3057\u307e\u3059\u3002

          \u3053\u308c\u3089\u306e\u30c6\u30b9\u30c8\u306e\u8a2d\u5b9a\u306f3\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u4fdd\u6301\u3055\u308c\u3066\u3044\u307e\u3059:

          • tests\u306fAnsible\u30c6\u30b9\u30c8\u30b5\u30fc\u30d3\u30b9\u305d\u306e\u3082\u306e\u3067\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u306e\u30c6\u30b9\u30c8\u30eb\u30fc\u30c1\u30f3\u3067\u306f\u3001\u5404\u500b\u3005\u306e\u30c6\u30b9\u30c8\u3092\u30c6\u30b9\u30c8\u30b9\u30a4\u30fc\u30c8\u306e\u30dd\u30c3\u30c9\u5185\u306e\u5225\u3005\u306e\u30b3\u30f3\u30c6\u30ca\u3068\u3057\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u4ee5\u4e0b\u306b\u30ea\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          • local-git\u306f\u30af\u30e9\u30b9\u30bf\u5185\u3067\u30db\u30b9\u30c8\u3055\u308c\u308bGit\u30b5\u30fc\u30d0\u3067\u3001\u305d\u308c\u304c\u4fdd\u6301\u3057\u3066\u3044\u307e\u3059 \u30c6\u30b9\u30c8\u306e\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3002Ansible\u306f\u30c6\u30b9\u30c8\u306e\u9593\u306b\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30d7\u30eb\u3068\u30d7\u30c3\u30b7\u30e5\u3092\u884c\u3044\u307e\u3059\u3002
          • api-data-watcher-pusher\u306f\u3001\u5fc5\u8981\u306aKubernetes\u8a2d\u5b9a\u3001\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u3068SSH\u30ad\u30fc\u3001\u5fc5\u8981\u306a\u30b0\u30eb\u30fc\u30d7\u3068\u901a\u77e5\u3092\u30ed\u30fc\u30ab\u30ebLagoon\u306b\u4e8b\u524d\u306b\u914d\u7f6e\u3059\u308b\u305f\u3081\u306eGraphQL\u5909\u7570\u306e\u30bb\u30c3\u30c8\u3067\u3059\u3002 \u3053\u308c\u306f\u5b9f\u884c\u3054\u3068\u306b\u30ed\u30fc\u30ab\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u74b0\u5883\u3092\u6d88\u53bb\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          Kubernetes\u306b\u95a2\u9023\u3059\u308b\u500b\u3005\u306e\u30eb\u30fc\u30c1\u30f3\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059:

          • active-standby-kubernetes\u306fKubernetes\u3067\u306e\u30a2\u30af\u30c6\u30a3\u30d6/\u30b9\u30bf\u30f3\u30d0\u30a4\u3092\u78ba\u8a8d\u3059\u308b\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • api\u306fAPI - \u30d6\u30e9\u30f3\u30c1/PR\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3001\u6607\u9032\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • bitbucket\u3001gitlab\u3001github\u306f\u7279\u5b9a\u306eSCM\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • drupal-php74\u306f\u5358\u4e00\u30dd\u30c3\u30c9\u306eMariaDB\u3001MariaDB DBaaS\u3001\u304a\u3088\u3073Drupal 8/9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306eDrush\u7279\u5316\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059(drupal-php73\u306fDrush\u30c6\u30b9\u30c8\u3092\u884c\u3044\u307e\u305b\u3093)\u3002
          • drupal-postgres\u306f\u3001Drupal 8\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306e\u5358\u4e00\u30dd\u30c3\u30c9\u306ePostgreSQL\u3068PostgreSQL DBaaS\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • elasticsearch\u306fElasticsearch\u5358\u4e00\u30dd\u30c3\u30c9\u3078\u306e\u30b7\u30f3\u30d7\u30eb\u306aNGINX\u30d7\u30ed\u30ad\u30b7\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • features-variables\u306fLagoon\u5185\u306e\u5909\u6570\u3092\u5229\u7528\u3059\u308b\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • features-kubernetes\u306fKubernetes\u306b\u7279\u5316\u3057\u305f\u6a19\u6e96\u7684\u306aLagoon\u30c6\u30b9\u30c8\u306e\u7bc4\u56f2\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • features-kubernetes-2\u306f\u3088\u308a\u9ad8\u5ea6\u306akub\u3092\u5b9f\u884c\u3057\u307e\u3059 * \u30a8\u30f3\u30c0\u30fc\u30f3\u7279\u6709\u306e\u30c6\u30b9\u30c8 - \u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u8a2d\u5b9a\u3092\u30ab\u30d0\u30fc\u3002
          • nginx\u3001node\u3001python\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u306b\u5bfe\u3057\u3066\u57fa\u672c\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          • node-mongodb\u306f\u3001\u5358\u4e00\u30dd\u30c3\u30c9\u306eMongoDB\u30c6\u30b9\u30c8\u3068Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5bfe\u3059\u308bMongoDB DBaaS\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_3","title":"\u30ed\u30fc\u30ab\u30eb\u958b\u767a","text":"

          \u307b\u3068\u3093\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306fNode.js\u3067\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u591a\u304f\u304c\u540c\u69d8\u306eNode.js\u30b3\u30fc\u30c9\u3068Node.js\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5171\u6709\u3057\u3066\u3044\u308b\u305f\u3081\u3001Yarn\u3068\u3044\u3046\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306fYarn workspaces\u3068\u547c\u3070\u308c\u307e\u3059\u3002Yarn workspaces\u306f\u3001\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u5b9a\u7fa9\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306bpackage.json\u304c\u5fc5\u8981\u3067\u3059\u3002

          \u30b5\u30fc\u30d3\u30b9\u306e\u958b\u767a\u306f\u3001Docker\u5185\u3067\u76f4\u63a5\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059(docker-compose.yml\u3092\u53c2\u7167)\u3002Node.js\u81ea\u4f53\u304cnodemon\u3092\u4ecb\u3057\u3066\u30b3\u30fc\u30c9\u3092\u76e3\u8996\u3057\u3001\u5909\u66f4\u304c\u3042\u308b\u3068Node.js\u30d7\u30ed\u30bb\u30b9\u3092\u81ea\u52d5\u7684\u306b\u518d\u8d77\u52d5\u3057\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#lagoon-commons","title":"lagoon-commons","text":"

          \u30b5\u30fc\u30d3\u30b9\u306f\u591a\u304f\u306eNode.js\u30d1\u30c3\u30b1\u30fc\u30b8\u3060\u3051\u3067\u306a\u304f\u3001\u5b9f\u969b\u306e\u30ab\u30b9\u30bf\u30e0\u30b3\u30fc\u30c9\u3082\u5171\u6709\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u306fnode-packages/lagoon-commons\u5185\u306b\u3042\u308a\u3001\u81ea\u52d5\u7684\u306b\u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u3055\u308c\u307e\u3059\u3002 Yarn\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u306enodemon\u306f\u3001node-packages\u306e\u5909\u66f4\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3001\u30ce\u30fc\u30c9\u30d7\u30ed\u30bb\u30b9\u3092\u81ea\u52d5\u7684\u306b\u518d\u8d77\u52d5\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_4","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":""},{"location":"ja/contributing-to-lagoon/developing-lagoon/#nodejsdocker","title":"Node.js\u30d9\u30fc\u30b9\u306e\u30b5\u30fc\u30d3\u30b9\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3067\u304d\u306a\u3044","text":"

          \u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30a4\u30e1\u30fc\u30b8\u3092\u518d\u30d3\u30eb\u30c9\u3057\u3066\u304f\u3060\u3055\u3044:

          \u30a4\u30e1\u30fc\u30b8\u306e\u518d\u69cb\u7bc9
              make clean\n    make build\n
          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#nodejsnode_modules","title":"Node.js\u30d9\u30fc\u30b9\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9/\u5b9f\u884c\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001node_modules\u306e\u5185\u5bb9\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u3068\u3044\u3046\u30a8\u30e9\u30fc\u304c\u51fa\u308b","text":"

          \u4e00\u90e8\u306e\u30b5\u30fc\u30d3\u30b9\u304cyarn\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u3066\u3044\u308b\u5171\u901a\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u6301\u3063\u3066\u3044\u308b\u305f\u3081\u3001Lagoon\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067yarn\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#nipio","title":"nip.io\u30c9\u30e1\u30a4\u30f3\u306e\u89e3\u6c7a\u3067\u30a8\u30e9\u30fc\u304c\u51fa\u308b","text":"\u30a8\u30e9\u30fc
          Error response from daemon: Get https://registry.172.18.0.2.nip.io:32080/v2/: dial tcp: lookup registry.172.18.0.2.nip.io: no such host\n

          \u3053\u308c\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u306e\u30ea\u30be\u30eb\u30d0\u304c\u7d50\u679c\u304b\u3089\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8IP\u3092\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u5834\u5408\u306b\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u56de\u907f\u3059\u308b\u305f\u3081\u306b\u3001/etc/resolv.conf\u3092\u7de8\u96c6\u3057\u3066\u3001\u7d50\u679c\u3092\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3057\u306a\u3044\u516c\u958b\u30ea\u30be\u30eb\u30d0\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u3001\u4e0a\u90e8\u306bnameserver 8.8.8.8\u306e\u3088\u3046\u306a\u884c\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#_5","title":"\u4f8b\u793a\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc","text":"

          \u3053\u3053\u3067\u306f\u3001\u958b\u767a\u306e\u30b7\u30ca\u30ea\u30aa\u3068\u7269\u4e8b\u3092\u9032\u3081\u308b\u305f\u3081\u306e\u6709\u7528\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u3044\u304f\u3064\u304b\u7d39\u4ecb\u3057\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/developing-lagoon/#1","title":"\u30c6\u30b9\u30c8\u306e\u8ffd\u52a0 1. \u4e0a\u8a18\u306e\u6700\u521d\u306e\u624b\u9806\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002","text":"
          1. tests/tests/features-variables.yaml\u3092\u7de8\u96c6\u3057\u3001\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
          2. tests\u30a4\u30e1\u30fc\u30b8\u3092\u518d\u69cb\u7bc9\u3057\u307e\u3059\u3002
          \u30c6\u30b9\u30c8\u306e\u69cb\u7bc9
          rm build/tests\nmake -j8 build/tests\n
          1. \u65b0\u3057\u3044tests\u30a4\u30e1\u30fc\u30b8\u3092\u30af\u30e9\u30b9\u30bf\u30ec\u30b8\u30b9\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
          \u30c6\u30b9\u30c8\u30a4\u30e1\u30fc\u30b8\u3092\u30d7\u30c3\u30b7\u30e5
          make kind/push-images IMAGES=tests\n
          1. \u30c6\u30b9\u30c8\u3092\u518d\u5b9f\u884c\u3057\u307e\u3059\u3002
          \u30c6\u30b9\u30c8\u3092\u518d\u5b9f\u884c
          make kind/retest TESTS='[features-variables]'\n
          "},{"location":"ja/contributing-to-lagoon/documentation/","title":"Lagoon\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3078\u306e\u8ca2\u732e","text":"

          \u7686\u3055\u3093\u304b\u3089\u3044\u305f\u3060\u3051\u308b\u3082\u306e\u306f\u4f55\u3067\u3082\u5927\u3044\u306b\u8a55\u4fa1\u3057\u307e\u3059\uff01

          \u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210\u3068\u95b2\u89a7\u3092\u975e\u5e38\u306b\u7c21\u5358\u306b\u3057\u3066\u304a\u308a\u3001\u30c1\u30fc\u30e0\u306f\u5e38\u306b\u30ec\u30d3\u30e5\u30fc\u3084\u30d2\u30f3\u30c8\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u307e\u3059\u3002

          \u79c1\u305f\u3061\u306f\u512a\u308c\u305fMaterial\u30c6\u30fc\u30de\u3068\u5171\u306bmkdocs\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/documentation/#_1","title":"\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u95b2\u89a7\u3068\u66f4\u65b0","text":"

          Lagoon\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30eb\u30fc\u30c8\u304b\u3089(Docker\u304c\u5fc5\u8981\u3067\u3059)\u3001\u4ee5\u4e0b\u3092\u5b9f\u884c\u3057\u307e\u3059:

          Get local docs up and running.
          docker run --rm -it -p 127.0.0.1:8000:8000 -v ${PWD}:/docs ghcr.io/amazeeio/mkdocs-material\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u4efb\u610f\u306e\u66f4\u65b0\u3067\u30e9\u30a4\u30d6\u30ea\u30ed\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u305f\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u304c http://127.0.0.1:8000\u3067\u8d77\u52d5\u3057\u307e\u3059\u3002

          \u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305fDocker\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001\u5fc5\u8981\u306a\u3059\u3079\u3066\u306e\u62e1\u5f35\u6a5f\u80fd\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

          \u3042\u308b\u3044\u306f\u3001mkdocs\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001mkdocs\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u5fc5\u8981\u306a\u3059\u3079\u3066\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          Install mkdocs
          pip3 install -r docs/requirements.txt\nmkdocs serve\n
          "},{"location":"ja/contributing-to-lagoon/documentation/#_2","title":"\u30af\u30e9\u30a6\u30c9\u3067\u306e\u7de8\u96c6","text":"

          \u5404\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30da\u30fc\u30b8\u306b\u306f\u3001\u53f3\u4e0a\u306b\"\u7de8\u96c6\"\u306e\u925b\u7b46\u30a2\u30a4\u30b3\u30f3\u304c\u3042\u308a\u3001\u305d\u308c\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u6b63\u3057\u3044\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002 Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3066\u3002

          \u3053\u3061\u3089\u3067\u3082\u304a\u6c17\u8efd\u306b\u8ca2\u732e\u3057\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u3002\u7d44\u307f\u8fbc\u307f\u306egithub.dev web\u30d9\u30fc\u30b9\u306e\u30a8\u30c7\u30a3\u30bf\u30fc\u3092\u3044\u3064\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u57fa\u672c\u7684\u306a\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u304c\u3042\u308a\u307e\u3059\u304c\u3001mkdocs\u306e\u7d20\u6674\u3089\u3057\u3055\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          "},{"location":"ja/contributing-to-lagoon/documentation/#_3","title":"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u65b9\u6cd5","text":"

          \u79c1\u305f\u3061\u306fDeploy MkDocs GitHub\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3001\u3059\u3079\u3066\u306e\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306e\u30d7\u30c3\u30b7\u30e5\u3092\u30d3\u30eb\u30c9\u3057\u3001gh-pages \u30d6\u30e9\u30f3\u30c1\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/releasing/","title":"Lagoon\u306e\u30ea\u30ea\u30fc\u30b9","text":"

          Lagoon\u306b\u306f\u591a\u304f\u306e\u52d5\u7684\u306a\u90e8\u5206\u304c\u3042\u308b\u305f\u3081\u3001\u30ea\u30ea\u30fc\u30b9\u306f\u304b\u306a\u308a\u8907\u96d1\u3067\u3059\uff01

          "},{"location":"ja/contributing-to-lagoon/releasing/#lagoon-core-","title":"Lagoon-core - \u30bf\u30b0\u3068\u30c6\u30b9\u30c8","text":"
          1. \u6b21\u306e\u5168\u3066\u306e\u7279\u5b9a\u3055\u308c\u305f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306b\u30de\u30fc\u30b8\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059:
            • uselagoon/lagoon
            • uselagoon/build-deploy-tool
            • uselagoon/lagoon-ui
          2. \u78ba\u8a8d\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\u6b21\u306e\u30bf\u30b0(\u30de\u30a4\u30ca\u30fc\u307e\u305f\u306f\u30d1\u30c3\u30c1)\u3092\u30e1\u30a4\u30f3\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306fv2.MINOR.PATCH\u3068\u3057\u3001semver\u306b\u5f93\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Jenkins\u30d3\u30eb\u30c9\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u3001https://ci.lagoon.sh/blue/organizations/jenkins/lagoon/branches \u3067\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
          3. \u3053\u308c\u304c\u30d3\u30eb\u30c9\u4e2d\u306e\u9593\u3001lagoon-ui \u3068 build-deploy-tool \u306e\u9069\u5207\u306a\u30b3\u30df\u30c3\u30c8\u306b\u8efd\u91cf\u30bf\u30b0\u3092\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f core-v2.MINOR.PATCH \u3068\u3057\u307e\u3059\u3002build-deploy-tool\u306b\u306f\u4ed6\u306e\u30bf\u30b0\u3084\u30ea\u30ea\u30fc\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001lagoon-ui\u306b\u306f\u72ec\u81ea\u306esemver\u30ea\u30ea\u30fc\u30b9\u304c\u3042\u308a\u3001\u3053\u308c\u306f\u305d\u306e\u6a5f\u80fd\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002
          4. Jenkins\u3067\u306e\u30d3\u30eb\u30c9\u304c\u6210\u529f\u3057\u305f\u3089\u3001https://github.com/uselagoon/lagoon-charts \u306b\u79fb\u52d5\u3057\u3066\u3001\u30c1\u30e3\u30fc\u30c8\u30ea\u30ea\u30fc\u30b9\u306e\u6e96\u5099\u3092\u3057\u307e\u3059\u3002
          5. lagoon-core \u3068 lagoon-test \u30c1\u30e3\u30fc\u30c8\u306echart.yaml\u3067\u3001\u66f4\u65b0\u3057\u307e\u3059\u3002 \u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9:

            • \u30d0\u30fc\u30b8\u30e7\u30f3: \u3053\u308c\u306f\u30c1\u30e3\u30fc\u30c8\u306e\u6b21\u306e\u300c\u30de\u30a4\u30ca\u30fc\u300d\u30ea\u30ea\u30fc\u30b9\u3067\u3001\u901a\u5e38\u306f\u5bfe\u5fdc\u3059\u308blagoon-core\u30ea\u30ea\u30fc\u30b9\u306e\u305f\u3081\u306e\u30de\u30a4\u30ca\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059
            • appVersion: \u3053\u308c\u306f\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u305flagoon-core\u306e\u5b9f\u969b\u306e\u30bf\u30b0\u3067\u3059
            • artifacthub.io/changes: \u5fc5\u8981\u306a\u306e\u306f\u4ee5\u4e0b\u306e\u30b9\u30cb\u30da\u30c3\u30c8\u306e2\u884c\u3067\u3001\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u5b9f\u969b\u306eappVersion\u306b\u5408\u308f\u305b\u3066\u5909\u66f4\u3055\u308c\u307e\u3059\u3002

            sample chart.yml snippets

            # \u3053\u308c\u306f\u30c1\u30e3\u30fc\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002\u3053\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u306f\u3001\u30a2\u30d7\u30ea\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u542b\u3080\u3001\u30c1\u30e3\u30fc\u30c8\u3068\u305d\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b\u305f\u3073\u306b\u5897\u3084\u3059\u3079\u304d\u3067\u3059\u3002\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0(https://semver.org/)\u306b\u5f93\u3046\u3053\u3068\u304c\u671f\u5f85\u3055\u308c\u307e\u3059\u3002\nversion: 1.28.0\n# \u3053\u308c\u306f\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u3067\u3059\u3002\u3053\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\n# \u756a\u53f7\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b\u305f\u3073\u306b\u5897\u52a0\u3055\u305b\u308b\u3079\u304d\u3067\u3059\u3002\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u306b\u5f93\u3046\u3053\u3068\u304c\u671f\u5f85\u3055\u308c\u307e\u305b\u3093\u3002\u305d\u308c\u3089\u306f\n# \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u53cd\u6620\u3059\u308b\u3079\u304d\u3067\u3059\u3002\nappVersion: v2.14.2\n# \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306f\u3001artifacthub.io\u306e\u30c1\u30a7\u30f3\u30b8\u30ed\u30b0\u3092\u53ce\u96c6\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\n# \u305d\u308c\u306f\u5404\u30ea\u30ea\u30fc\u30b9\u3054\u3068\u306b\u65b0\u305f\u306b\u958b\u59cb\u3055\u308c\u308b\u3079\u304d\u3067\u3059\n# \u6709\u52b9\u306a\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u7a2e\u985e\u306f\u3001\u8ffd\u52a0\u3001\u5909\u66f4\u3001\u975e\u63a8\u5968\u3001\u524a\u9664\u3001\u4fee\u6b63\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u304c\u3042\u308a\u307e\u3059\nannotations:\nartifacthub.io/changes: |\n- \u7a2e\u985e: \u5909\u66f4\n\u8aac\u660e: Lagoon appVersion\u3092v2.14.2\u306b\u66f4\u65b0\n
            lagoon-core\u30ea\u30ea\u30fc\u30b9\u306e\u7d50\u679c\u3001lagoon-core\u3068lagoon-test\u306e\u30c1\u30e3\u30fc\u30c8\u306e\u307f\u304c\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002\u4ed6\u306b\u5909\u66f4\u304c\u3042\u308b\u5834\u5408\u306f\u3001lagoon-remote\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002

          6. \u3053\u306e\u30c1\u30e3\u30fc\u30c8\u30ea\u30ea\u30fc\u30b9\u306ePR\u3092\u4f5c\u6210\u3057\u3001Github Actions\u30b9\u30a4\u30fc\u30c8\u304c\u4e00\u9023\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u65bd\u3057\u307e\u3059:

            • Lint\u3068\u30c6\u30b9\u30c8\u30c1\u30e3\u30fc\u30c8 - \u30de\u30c8\u30ea\u30af\u30b9: \u73fe\u5728\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u308bKubernetes\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5bfe\u3057\u3066lint\u3068\u30c1\u30e3\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3044\u307e\u3059
            • Lint\u3068\u30c6\u30b9\u30c8\u30c1\u30e3\u30fc\u30c8 - current: \u4ee5\u524d/\u5c06\u6765\u306eKubernetes\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5bfe\u3057\u3066lint\u3068\u30c1\u30e3\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3044\u307e\u3059
            • Lagoon tests: \u30ea\u30ea\u30fc\u30b9\u306b\u5bfe\u3057\u3066ansible\u30c6\u30b9\u30c8\u306e\u5168\u30b7\u30ea\u30fc\u30ba\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

            \u901a\u5e38\u3001lint\u3068\u30c6\u30b9\u30c8\u30c1\u30e3\u30fc\u30c8\u306e\u5931\u6557\u306f\u3088\u304f\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059(\u30c1\u30e3\u30fc\u30c8\u8a2d\u5b9a\u306e\u6b20\u843d/\u8aa4\u8a2d\u5b9a)\u3002\u5358\u4e00\u306eLagoon\u30c6\u30b9\u30c8\u304c\u5931\u6557\u3059\u308b\u5834\u5408\u306f\u3001\u518d\u5b9f\u884c\u3059\u308b\u3060\u3051\u3067\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u8907\u6570\u306e\u5931\u6557\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001\u8abf\u67fb\u304c\u5fc5\u8981\u3067\u3059\u3002

          \u3053\u308c\u3089\u306e\u30c6\u30b9\u30c8\u304c\u3059\u3079\u3066\u6210\u529f\u3057\u305f\u5f8c\u3001\u30ea\u30ea\u30fc\u30b9\u306e\u4f5c\u6210\u3092\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

          "},{"location":"ja/contributing-to-lagoon/releasing/#lagoon-core-_1","title":"Lagoon-core - \u30ea\u30ea\u30fc\u30b9\u3068\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8","text":"
          1. uselagoon/lagoon \u3067\u3001\u5148\u307b\u3069\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u30bf\u30b0\u304b\u3089\u30ea\u30ea\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\"\u30ea\u30ea\u30fc\u30b9\u306e\u751f\u6210 \"notes\"\u30dc\u30bf\u30f3\u3092\u4f7f\u3063\u3066\u5909\u66f4\u5c65\u6b74\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30ea\u30ea\u30fc\u30b9\u306b\u542b\u3081\u308b\u5185\u5bb9\u306b\u3064\u3044\u3066\u306f\u3001\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u307e\u305f\u3001lagoon-images\u306e\u30ea\u30f3\u30af\u306f\u5e38\u306b\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u7248\u3068\u306a\u308a\u307e\u3059\u3002\u30c1\u30e3\u30fc\u30c8\u3001lagoon-ui\u3001build-deploy-tool\u3078\u306e\u30ea\u30f3\u30af\u306f\u3059\u3079\u3066\u4eca\u3059\u3050\u57cb\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u30ea\u30f3\u30af\u306f\u4eca\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3002\u3053\u308c\u3092\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u3001\u30ea\u30ea\u30fc\u30b9\u3092\u516c\u958b\u3057\u307e\u3059\u3002
          2. uselagoon/build-deploy-tool \u3067\u3001\u5148\u307b\u3069\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u30bf\u30b0\u304b\u3089\u30ea\u30ea\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\"\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8\u3092\u751f\u6210\"\u30dc\u30bf\u30f3\u3092\u4f7f\u7528\u3057\u3066\u5909\u66f4\u5c65\u6b74\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u6700\u5f8c\u306ecore-v2.X\u30bf\u30b0\u304c\u4f7f\u7528\u3055\u308c\u3001\u4ed6\u306e\u30bf\u30b0\u306f\u4f7f\u7528\u3055\u308c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30ea\u30ea\u30fc\u30b9\u306b\u542b\u3081\u308b\u5185\u5bb9\u306b\u3064\u3044\u3066\u306f\u3001\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3092\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u3001\u30ea\u30ea\u30fc\u30b9\u3092\u516c\u958b\u3057\u307e\u3059\u3002
          3. uselagoon/lagoon-ui \u3067\u3001\u5148\u307b\u3069\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u30bf\u30b0\u304b\u3089\u30ea\u30ea\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\"\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8\u3092\u751f\u6210\"\u30dc\u30bf\u30f3\u3092\u4f7f\u7528\u3057\u3066\u5909\u66f4\u5c65\u6b74\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u6700\u5f8c\u306ecore-v2.X\u30bf\u30b0\u304c\u4f7f\u7528\u3055\u308c\u3001\u4ed6\u306e\u30bf\u30b0\u306f\u4f7f\u7528\u3055\u308c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u30ea\u30ea\u30fc\u30b9\u306b\u542b\u3081\u308b\u5185\u5bb9\u306b\u3064\u3044\u3066\u306f\u3001\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3092\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u3001\u30ea\u30ea\u30fc\u30b9\u3092\u516c\u958b\u3057\u307e\u3059\u3002
          4. uselagoon/lagoon-charts \u3067 \u6210\u529f\u3057\u305fPR\u3092\u30de\u30fc\u30b8\u3059\u308b\u3068\u3001lagoon-core\u3068lagoon-test\u306e\u30ea\u30ea\u30fc\u30b9\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u7d50\u679c\u3068\u3057\u3066\u5f97\u3089\u308c\u305flagoon-core\u30c1\u30e3\u30fc\u30c8\u30ea\u30ea\u30fc\u30b9\u3092\u7de8\u96c6\u3057\u3001\u30bf\u30a4\u30c8\u30eb\u3068\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\u3059\u308blagoon\u30ea\u30ea\u30fc\u30b9\u3092\u8a18\u8f09\u3057\u307e\u3059\u3002\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u3068\u540c\u69d8\u306b\u3057\u307e\u3059\u3002
          "},{"location":"ja/contributing-to-lagoon/releasing/#lagoon-","title":"Lagoon\u30ea\u30e2\u30fc\u30c8 - \u30ea\u30ea\u30fc\u30b9\u3068\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8","text":"

          Lagoon remote\u306fLagoon Core\u3068\u306f\u5225\u306e\u30ea\u30ea\u30fc\u30b9\u30b5\u30a4\u30af\u30eb\u3092\u6301\u3061\u3001\u305d\u306e\u305f\u3081\u3001\u4f9d\u5b58\u95a2\u4fc2\u306e\u3042\u308b\u30b5\u30d6\u30c1\u30e3\u30fc\u30c8\u3084\u30b5\u30fc\u30d3\u30b9\u304c\u66f4\u65b0\u3055\u308c\u308b\u305f\u3073\u306b\u30ea\u30ea\u30fc\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          "},{"location":"ja/contributing-to-lagoon/tests/","title":"\u30c6\u30b9\u30c8","text":"

          \u79c1\u305f\u3061\u306e\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u306fAnsible\u3067\u66f8\u304b\u308c\u3066\u304a\u308a\u3001\u4e3b\u306b\u4ee5\u4e0b\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u5f93\u3063\u3066\u3044\u307e\u3059:

          1. \u65b0\u3057\u3044Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
          2. \u30d5\u30a1\u30a4\u30eb\u306e\u30ea\u30b9\u30c8(tests/files\u5185)\u304b\u3089\u4e00\u90e8\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3057\u3001\u3053\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30df\u30c3\u30c8\u3057\u307e\u3059\u3002
          3. \u3053\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3092Git\u30b5\u30fc\u30d0\u30fc(\u30ed\u30fc\u30ab\u30eb\u307e\u305f\u306fGitHub\u4e0a)\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
          4. \u30c8\u30ea\u30ac\u30fc\u30b5\u30fc\u30d3\u30b9(\u4f8b\u3048\u3070\u3001\u5b9f\u969b\u306b\u9001\u4fe1\u3055\u308c\u308b\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3068\u540c\u3058\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u30cf\u30f3\u30c9\u30e9\u30fc\u3078\u306e\u30a6\u30a7\u30d6\u30d5\u30c3\u30af)\u306b\u30c8\u30ea\u30ac\u30fc\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002
          5. \u30c6\u30b9\u30c8\u304c\u4f55\u304b\u304c\u8d77\u3053\u308b\u3053\u3068\u3092\u671f\u5f85\u3059\u308bURL\u3092\u76e3\u8996\u3092\u958b\u59cb\u3057\u307e\u3059(\u4f8b\u3048\u3070\u3001Git\u30d6\u30e9\u30f3\u30c1\u3092HTML\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u6301\u3064Node.js\u30a2\u30d7\u30ea\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u306a\u3069)\u3002
          6. URL\u306e\u7d50\u679c\u3068\u671f\u5f85\u3055\u308c\u308b\u7d50\u679c\u3092\u6bd4\u8f03\u3057\u307e\u3059\u3002

          Lagoon\u306f\u4e3b\u306b3\u3064\u306e\u7570\u306a\u308b\u65b9\u6cd5\u3067\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059:

          "},{"location":"ja/contributing-to-lagoon/tests/#1","title":"1. \u30ed\u30fc\u30ab\u30eb\u3067","text":"

          \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u4e2d\u306b\u30c6\u30b9\u30c8\u3059\u308b\u6700\u5584\u306e\u65b9\u6cd5\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u30c6\u30b9\u30c8\u3067\u3059\u3002\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u306fmake\u3092\u4ecb\u3057\u3066\u958b\u59cb\u3055\u308c\u307e\u3059\u3002Make\u306f\u5fc5\u8981\u306a\u3059\u3079\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3001\u30d3\u30eb\u30c9\u3057\u307e\u3059\u3002

          Make tests
          make tests\n

          \u3053\u308c\u306b\u3088\u308a\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u30c6\u30b9\u30c8\u306e\u4e00\u90e8\u3060\u3051\u3092\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u3001make tests-list\u3092\u5b9f\u884c\u3057\u3066\u3059\u3079\u3066\u306e\u5b58\u5728\u3059\u308b\u30c6\u30b9\u30c8\u3092\u8868\u793a\u3057\u3001\u305d\u308c\u305e\u308c\u3092\u500b\u5225\u306b\u5b9f\u884c\u3057\u307e\u3059\u3002

          \u305f\u3068\u3048\u3070\u3001make tests/node\u306fNode.js Docker\u30a4\u30e1\u30fc\u30b8\u306e\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

          \u3067 \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u5185\u90e8\u3067\u4f55\u304c\u8d77\u3053\u3063\u3066\u3044\u308b\u306e\u304b\u3092\u5b9f\u969b\u306b\u898b\u308b\u305f\u3081\u306b\u306f\u3001make logs\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059:

          Make logs
          make logs\n

          \u307e\u305f\u306f\u7279\u5b9a\u306e\u30b5\u30fc\u30d3\u30b9\u3060\u3051\u3092\u8868\u793a\u3059\u308b\u306b\u306f:

          Make logs
          make logs service=webhook-handler\n
          "},{"location":"ja/contributing-to-lagoon/tests/#2","title":"2. \u81ea\u52d5\u5316\u3055\u308c\u305f\u7d71\u5408\u30c6\u30b9\u30c8","text":"

          Lagoon\u306b\u5bfe\u3057\u3066\u4f5c\u6210\u3055\u308c\u305f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30c6\u30b9\u30c8\u3059\u308b\u305f\u3081\u306b\u3001\u5c02\u7528\u306eJenkins\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u5b8c\u5168\u306b\u81ea\u52d5\u5316\u3055\u308c\u305f\u7d71\u5408\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059:https://ci.lagoon.sh\u3002\u3053\u308c\u306f.Jenkinsfile\u5185\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001\u958b\u304b\u308c\u305f\u3059\u3079\u3066\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u81ea\u52d5\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002

          \u3053\u308c\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u3001Kubernetes\u30af\u30e9\u30b9\u30bf\u304c\u8d77\u52d5\u3057\u3001\u4e00\u9023\u306e\u30c6\u30b9\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002

          \u30c6\u30b9\u30c8\u306f\u3053\u3053\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

          • https://ci.lagoon.sh/blue/organizations/jenkins/lagoon/activity
          "},{"location":"ja/docker-images/commons/","title":"Commons","text":"

          Lagoon commons Docker\u30a4\u30e1\u30fc\u30b8\u3002\u516c\u5f0f\u306eAlpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u3002

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u81ea\u4f53\u306f\u6a5f\u80fd\u3092\u6301\u3061\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001\u4ed6\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306e\u57fa\u672c\u30a4\u30e1\u30fc\u30b8\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002Lagoon\u5185\u306e\u3059\u3079\u3066\u306ealpine\u30d9\u30fc\u30b9\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u3001commons\u304b\u3089\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u7d99\u627f\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/commons/#_1","title":"\u30c4\u30fc\u30eb","text":"
          • docker-sleep - \u6a19\u6e96\u5316\u3055\u308c\u305f1\u6642\u9593\u306e\u30b9\u30ea\u30fc\u30d7\u6a5f\u80fd
          • fix-permissions - \u6307\u5b9a\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u81ea\u52d5\u7684\u306b\u5168\u30b0\u30eb\u30fc\u30d7\u306e\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u306b\u5909\u66f4
          • wait-for - \u30b5\u30fc\u30d3\u30b9\u304c\u6b63\u3057\u3044\u9806\u5e8f\u3067\u8d77\u52d5\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5c0f\u3055\u306a\u30b9\u30af\u30ea\u30d7\u30c8 - https://github.com/eficode/wait-for \u3092\u57fa\u306b\u3057\u3066\u3044\u307e\u3059
          • entrypoint-readiness - \u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u308b\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u304c\u5b8c\u4e86\u3057\u305f\u3053\u3068\u3092\u78ba\u8a8d
          • entrypoints - /lagoon/entrypoints/* \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u3059\u3079\u3066\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806/\u6570\u5024\u9806\u306b\u8aad\u307f\u8fbc\u3080\u30b9\u30af\u30ea\u30d7\u30c8
          "},{"location":"ja/docker-images/commons/#_2","title":"\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u306e\u4e00\u89a7\u306fhttps://github.com/uselagoon/lagoon-images/tree/main/images/commons/lagoon/entrypoints\u306b\u3042\u308a\u307e\u3059\u3002\u4ee5\u964d\u306e\u4e0b\u6d41\u30a4\u30e1\u30fc\u30b8\u3082\u3001/lagoon\u914d\u4e0b\u306b\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u8ffd\u52a0\u3067\u304d\u3001\u6700\u7d42\u7684\u306a\u30a4\u30e1\u30fc\u30b8\u3067\u5b9f\u884c\u3055\u307e\u3059\u3002

          "},{"location":"ja/docker-images/mariadb/","title":"MariaDB","text":"

          MariaDB\u306f\u3001MySQL\u306e\u5f8c\u7d99\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u3059\u3002

          Lagoon\u306e MariaDB \u30a4\u30e1\u30fc\u30b8\u306eDockerfile\u306f\u3001\u516c\u5f0f\u306eAlpine\u30a4\u30e1\u30fc\u30b8\u3067\u63d0\u4f9b\u3055\u308c\u308b mariadb \u3068 mariadb-client \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u3002

          \u3053\u306eDockerfile\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eMariaDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          • 10.4 Dockerfile (Alpine 3.12 \u306f2022\u5e745\u6708\u307e\u3067\u30b5\u30dd\u30fc\u30c8) - uselagoon/mariadb-10.4
          • 10.5 Dockerfile (Alpine 3.14 \u306f2023\u5e745\u6708\u307e\u3067\u30b5\u30dd\u30fc\u30c8) - uselagoon/mariadb-10.5
          • 10.6 Dockerfile (Alpine 3.16 \u306f2024\u5e745\u6708\u307e\u3067\u30b5\u30dd\u30fc\u30c8) - uselagoon/mariadb-10.6
          • 10.11 Dockerfile (Alpine 3.18 \u306f2025\u5e745\u6708\u307e\u3067\u30b5\u30dd\u30fc\u30c8) - uselagoon/mariadb-10.11

          \u60c5\u5831

          \u3053\u308c\u3089\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u516c\u5f0f\u306eMariaDB\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u69cb\u7bc9\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30af\u30eb\u304c\u7570\u306a\u308a\u3001\u57fa\u76e4\u3068\u306a\u308bAlpine\u30a4\u30e1\u30fc\u30b8\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u671f\u9593\u306e\u307f\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://alpinelinux.org/releases/\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5b9f\u969b\u306b\u306f\u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001MariaDB\u30b3\u30f3\u30c6\u30ca\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u307f\u5b9f\u884c\u3057\u3001\u672c\u756a\u74b0\u5883\u3067\u306fDBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u304c\u63d0\u4f9b\u3059\u308bManaged Cloud Databases\u3092\u5229\u7528\u3057\u307e\u3059\u3002

          "},{"location":"ja/docker-images/mariadb/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          MariaDB\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c83306\u3067\u3059\u3002

          Lagoon\u304cMariaDB\u30b3\u30f3\u30c6\u30ca\u306e\u5b9f\u884c\u65b9\u6cd5\u3092\u6700\u9069\u306b\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001lagoon.type: mariadb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306f\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u3067\u5229\u7528\u53ef\u80fd\u306a\u5834\u5408\u3001\u30af\u30e9\u30a6\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u5185\u3067MariaDB\u3092\u78ba\u5b9f\u306b\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u3001lagoon.type: mariadb-single\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002MariaDB\u30b3\u30f3\u30c6\u30ca\u306b\u5bfe\u3057\u3066\u306f\u3001\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5e38\u306b/var/lib/mysql\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • readiness-probe.sh \u30b9\u30af\u30ea\u30d7\u30c8\u3001MariaDB \u30b3\u30f3\u30c6\u30ca\u306e\u6e96\u5099\u5b8c\u4e86\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
          "},{"location":"ja/docker-images/mariadb/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
              mariadb:\nimage: uselagoon/mariadb-10.6-drupal:latest\nlabels:\n# Lagoon\u306bMariaDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u308b\nlagoon.type: mariadb\nports:\n# \u30dd\u30fc\u30c83306\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u3067\u516c\u958b\u3057\u3001`docker-compose port mariadb 3306`\u3067\u305d\u308c\u3092\u898b\u3064\u3051\u308b\n- \"3306\"\nvolumes:\n# MariaDB\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u306b\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\n- db:/var/lib/mysql\n
          "},{"location":"ja/docker-images/mariadb/#included-tools","title":"\u30c4\u30fc\u30eb","text":"
          • mysqltuner.pl - \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u8abf\u6574\u306b\u4fbf\u5229\u306aPerl\u30b9\u30af\u30ea\u30d7\u30c8\u3002
          • mysql-backup.sh - \u958b\u767a\u74b0\u5883\u3067 MySQL \u306e\u65e5\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u81ea\u52d5\u5316\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3002
          • pwgen - \u30e9\u30f3\u30c0\u30e0\u3067\u8907\u96d1\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u751f\u6210\u3059\u308b\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u3002
          "},{"location":"ja/docker-images/mariadb/#included-mycnf-configuration-file","title":"my.cnf \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Lagoon\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u305f \u30c7\u30d5\u30a9\u30eb\u30c8 \u306eMariaDB\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u4ed8\u5c5e\u3057\u3066\u3044\u307e\u3059\u3002\u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

          "},{"location":"ja/docker-images/mariadb/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"\u74b0\u5883\u5909\u6570\u540d \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e MARIADB_DATABASE lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d MARIADB_USER lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc MARIADB_PASSWORD lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 MARIADB_ROOT_PASSWORD Lag00n MariaDB\u306e\u30eb\u30fc\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 MARIADB_CHARSET utf8mb4 \u30b5\u30fc\u30d0\u30fc\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b MARIADB_COLLATION utf8mb4_bin \u30b5\u30fc\u30d0\u30fc\u306e\u7167\u5408\u9806\u5e8f\u3092\u8a2d\u5b9a\u3059\u308b MARIADB_MAX_ALLOWED_PACKET 64M max_allowed_packet\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3059\u308b MARIADB_INNODB_BUFFER_POOL_SIZE 256M MariaDB InnoDB\u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3057\u307e\u3059 MARIADB_INNODB_BUFFER_POOL_INSTANCES 1 InnoDB\u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6570 MARIADB_INNODB_LOG_FILE_SIZE 64M InnoDB\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u30b5\u30a4\u30ba MARIADB_LOG_SLOW (\u8a2d\u5b9a\u306a\u3057) \u9045\u3044\u30af\u30a8\u30ea\u306e\u4fdd\u5b58\u3092\u5236\u5fa1\u3059\u308b\u5909\u6570 MARIADB_LOG_QUERIES (\u8a2d\u5b9a\u306a\u3057) \u3059\u3079\u3066\u306e\u30af\u30a8\u30ea\u306e\u4fdd\u5b58\u3092\u5236\u5fa1\u3059\u308b\u5909\u6570 BACKUPS_DIR /var/lib/mysql/backup \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9 MARIADB_DATA_DIR /var/lib/mysql MariaDB\u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3002\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u3053\u306e\u5024\u3092\u5909\u66f4\u3059\u308b\u3068\u30c7\u30fc\u30bf\u640d\u5931\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff01 MARIADB_COPY_DATA_DIR_SOURCE (\u8a2d\u5b9a\u306a\u3057) Mariadb\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u3001\u8a2d\u5b9a\u3055\u308c\u305fARIADB_DATA_DIR\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3059\u308b\u969b\u306b\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u306b\u3064\u3044\u3066\u30bb\u30eb\u540d\u3057\u307e\u3059\u3002\u3053\u306e\u30d1\u30b9\u3092\u5229\u7528\u3057\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u3042\u3089\u304b\u3058\u3081MariaDB\u306b\u6295\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u305f\u3060\u3057\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306fSQL\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u306a\u304f\u3001\u5b9f\u969b\u306eMariaDB\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002 \u3055\u3089\u306b\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u30b3\u30d4\u30fc\u5148\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u65e2\u5b58\u306eMySQL\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u3001\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002

          LAGOON_ENVIRONMENT_TYPE \u5909\u6570\u304c production \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f MARIADB_INNODB_BUFFER_POOL_SIZE=1024 \u304a\u3088\u3073 MARIADB_INNODB_LOG_FILE_SIZE=256 \u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u6700\u9069\u5316\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/docker-images/mongodb/","title":"MongoDB","text":"

          MongoDB\u306f\u3001\u6c4e\u7528\u7684\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u578b\u5206\u6563\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308a\u3001\u73fe\u4ee3\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u8005\u3084\u30af\u30e9\u30a6\u30c9\u6642\u4ee3\u306e\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u3066\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30c7\u30fc\u30bf\u306f JSON\u306e\u3088\u3046\u306a\u5f62\u5f0f\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u4fdd\u5b58\u3055\u308c\u307e\u3059

          • \u51fa\u5178: mongodb.com
          "},{"location":"ja/docker-images/mongodb/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"

          4.0 Dockerfile - uselagoon/mongo-4

          \u3053\u306eDockerfile\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eMongoDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/docker-images/mongodb/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u3082\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3001Kubernetes\u3084OpenShift\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002
          "},{"location":"ja/docker-images/mysql/","title":"MySQL","text":"

          MySQL\u306f\u4eba\u6c17\u306e\u3042\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0(RDBMS)\u3067\u3059\u3002

          Lagoon\u306e MySQl \u30a4\u30e1\u30fc\u30b8\u306eDockerfile\u306f\u3001\u516c\u5f0f\u306e\u30a2\u30c3\u30d7\u30b9\u30c8\u30ea\u30fc\u30e0docker \u30a4\u30e1\u30fc\u30b8mysql(Oracle Linux variant)\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u3053\u306eDockerfile\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eMariaDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          • 8.0 Dockerfile (2026\u5e744\u6708\u307e\u3067\u5ef6\u9577\u30b5\u30dd\u30fc\u30c8) - uselagoon/mysql-8.0
          • 8.4 Dockerfile (2032\u5e744\u6708\u307e\u3067\u5ef6\u9577\u30b5\u30dd\u30fc\u30c8) - uselagoon/mysql-8.4

          \u60c5\u5831

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fMariaDB\u30a4\u30e1\u30fc\u30b8\u306e\u5b8c\u5168\u306a\u4ee3\u66ff\u54c1\u3068\u3057\u3066\u4f5c\u3089\u308c\u305f\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u52d5\u4f5c\u3055\u305b\u308b\u306b\u306f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u5fc5\u8981\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/docker-images/mysql/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          MySQL\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c83306\u3067\u3059\u3002

          Lagoon\u304cMySQL\u30b3\u30f3\u30c6\u30ca\u306e\u5b9f\u884c\u65b9\u6cd5\u3092\u6700\u9069\u306b\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001lagoon.type: mariadb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306f\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u3067\u5229\u7528\u53ef\u80fd\u306a\u5834\u5408\u3001\u30af\u30e9\u30a6\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u5185\u3067MySQL\u3092\u78ba\u5b9f\u306b\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u3001lagoon.type: mariadb-single\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002MySQL\u30b3\u30f3\u30c6\u30ca\u306b\u5bfe\u3057\u3066\u306f\u3001\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5e38\u306b/var/lib/mysql\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • readiness-probe.sh \u30b9\u30af\u30ea\u30d7\u30c8\u3001MariaDB \u30b3\u30f3\u30c6\u30ca\u306e\u6e96\u5099\u5b8c\u4e86\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
          "},{"location":"ja/docker-images/mysql/#docker-composeyml-snippet-for-non-drupal-projects","title":"\u975eDrupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306edocker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
              mariadb:\nimage: uselagoon/mysql-8.4:latest\nlabels:\n# Lagoon\u306bMariaDB\u4e92\u63db\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u308b\nlagoon.type: mariadb\nports:\n# \u30dd\u30fc\u30c83306\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u3067\u516c\u958b\u3057\u3001`docker-compose port mysql 3306`\u3067\u305d\u308c\u3092\u898b\u3064\u3051\u308b\n- \"3306\"\nvolumes:\n# MySQL\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u306b\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\n- db:/var/lib/mysql\n
          "},{"location":"ja/docker-images/mysql/#docker-composeyml-snippet-for-drupal-projects","title":"Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306edocker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
              mariadb:\nimage: uselagoon/mysql-8.4:latest\nlabels:\n# Lagoon\u306bMariaDB\u4e92\u63db\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u308b\nlagoon.type: mariadb\nports:\n# \u30dd\u30fc\u30c83306\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u3067\u516c\u958b\u3057\u3001`docker-compose port mysql 3306`\u3067\u305d\u308c\u3092\u898b\u3064\u3051\u308b\n- \"3306\"\nenvironment:\n# Lagoon\u3067Drupal\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u671f\u5f85\u3059\u308b\u8a8d\u8a3c\u60c5\u5831\u3068\u4e00\u81f4\u3059\u308b\u3088\u3046\u306b\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8a8d\u8a3c\u60c5\u5831\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u307e\u3059\u3002\n- MYSQL_DATABASE=drupal\n- MYSQL_USER=drupal\n- MYSQL_PASSWORD=drupal\nvolumes:\n# MySQL\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u306b\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\n- db:/var/lib/mysql\n
          "},{"location":"ja/docker-images/mysql/#included-tools","title":"\u30c4\u30fc\u30eb","text":"
          • mysqltuner.pl - \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u8abf\u6574\u306b\u4fbf\u5229\u306aPerl\u30b9\u30af\u30ea\u30d7\u30c8\u3002
          • mysql-backup.sh - \u958b\u767a\u74b0\u5883\u3067 MySQL \u306e\u65e5\u6b21\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u81ea\u52d5\u5316\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3002
          • pwgen - \u30e9\u30f3\u30c0\u30e0\u3067\u8907\u96d1\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u751f\u6210\u3059\u308b\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u3002
          "},{"location":"ja/docker-images/mysql/#included-mycnf-configuration-file","title":"my.cnf \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Lagoon\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u305f \u30c7\u30d5\u30a9\u30eb\u30c8 \u306eMariaDB\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

          "},{"location":"ja/docker-images/mysql/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"\u74b0\u5883\u5909\u6570\u540d \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e MYSQL_DATABASE lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d MYSQL_USER lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc MYSQL_PASSWORD lagoon \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 MYSQL_ROOT_PASSWORD Lag00n MariaDB\u306e\u30eb\u30fc\u30c8\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 MYSQL_CHARSET utf8mb4 \u30b5\u30fc\u30d0\u30fc\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b MYSQL_COLLATION utf8mb4_bin \u30b5\u30fc\u30d0\u30fc\u306e\u7167\u5408\u9806\u5e8f\u3092\u8a2d\u5b9a\u3059\u308b MYSQL_MAX_ALLOWED_PACKET 64M max_allowed_packet\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3059\u308b MYSQL_INNODB_BUFFER_POOL_SIZE 256M MySQL InnoDB\u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3057\u307e\u3059 MYSQL_INNODB_BUFFER_POOL_INSTANCES 1 InnoDB\u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u6570 MYSQL_INNODB_LOG_FILE_SIZE 64M InnoDB\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u30b5\u30a4\u30ba MYSQL_LOG_SLOW (\u8a2d\u5b9a\u306a\u3057) \u9045\u3044\u30af\u30a8\u30ea\u306e\u4fdd\u5b58\u3092\u5236\u5fa1\u3059\u308b\u5909\u6570 MYSQL_LOG_QUERIES (\u8a2d\u5b9a\u306a\u3057) \u3059\u3079\u3066\u306e\u30af\u30a8\u30ea\u306e\u4fdd\u5b58\u3092\u5236\u5fa1\u3059\u308b\u5909\u6570 BACKUPS_DIR /var/lib/mysql/backup \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9 MYSQL_DATA_DIR /var/lib/mysql MySQL\u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3002\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u3053\u306e\u5024\u3092\u5909\u66f4\u3059\u308b\u3068\u30c7\u30fc\u30bf\u640d\u5931\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff01 MARIADB_COPY_DATA_DIR_SOURCE (\u8a2d\u5b9a\u306a\u3057) MySQL\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u3001\u8a2d\u5b9a\u3055\u308c\u305fMYSQL_DATA_DIR\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3059\u308b\u969b\u306b\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u306b\u3064\u3044\u3066\u30bb\u30eb\u540d\u3057\u307e\u3059\u3002\u3053\u306e\u30d1\u30b9\u3092\u5229\u7528\u3057\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u3042\u3089\u304b\u3058\u3081MySQL\u306b\u6295\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u305f\u3060\u3057\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306fSQL\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u306a\u304f\u3001\u5b9f\u969b\u306eMySQL\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002 \u3055\u3089\u306b\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u30b3\u30d4\u30fc\u5148\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u65e2\u5b58\u306eMySQL\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u3001\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002

          LAGOON_ENVIRONMENT_TYPE \u5909\u6570\u304c production \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f MYSQL_INNODB_BUFFER_POOL_SIZE=1024 \u304a\u3088\u3073 MYSQL_INNODB_LOG_FILE_SIZE=256 \u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u6700\u9069\u5316\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/docker-images/nginx/","title":"NGINX","text":"

          Lagoon\u306e nginx \u30a4\u30e1\u30fc\u30b8Dockerfile\u3067\u3059\u3002\u516c\u5f0f\u306eopenresty/openresty \u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u3053\u306eDockerfile\u306f\u3001Lagoon\u5185\u306e\u3042\u3089\u3086\u308b\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u306e\u30d9\u30fc\u30b9\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/nginx/#lagoon","title":"Lagoon\u306e\u8abf\u6574\u4e8b\u9805","text":"

          NGINX\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f 8080 \u30dd\u30fc\u30c8\u3067\u3059\u3002

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • /etc/nginx/* \u5185\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u306b\u3088\u3063\u3066 envplate \u3092\u901a\u3058\u3066\u51e6\u7406\u3055\u308c\u307e\u3059\u3002
          "},{"location":"ja/docker-images/nginx/#nginx-static-filesconf","title":"NGINX \u8a2d\u5b9a(static-files.conf)","text":"

          \u8b66\u544a

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f NGINX \u306f\u9759\u7684\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3084PHP\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u5fc5\u8981\u306a\u3044\u9759\u7684\u30b5\u30a4\u30c8\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059:\u4f8b\u3048\u3070\u3001\u9759\u7684\u30b5\u30a4\u30c8\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30fc\u306e Hugo\u3001Jekyll\u3001Gatsby \u306a\u3069\u3067\u3059\u3002

          PHP\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001php-fpm\u30a4\u30e1\u30fc\u30b8\u3092\u53c2\u7167\u3057\u3001nginx\u3068php-fpm\u3092\u4e00\u7dd2\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          \u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u30d3\u30eb\u30c9\u3057\u3001nginx\u30b3\u30f3\u30c6\u30ca\u306b\u6295\u5165\u3057\u307e\u3059\u3002

          "},{"location":"ja/docker-images/nginx/#_1","title":"\u30d8\u30eb\u30d1\u30fc","text":""},{"location":"ja/docker-images/nginx/#redirects-mapconf","title":"redirects-map.conf","text":"

          \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u3001redirects-map.conf\u30d5\u30a1\u30a4\u30eb\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3092\u4f7f\u7528\u3057\u3066\u3001\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u30c9\u30e1\u30a4\u30f3\u3092\u30b5\u30d6\u30b5\u30a4\u30c8\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u305f\u308a\u3001www\u306a\u3057\u3092www\u4ed8\u304d\u306b\u3059\u308b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u304c\u591a\u3044\u5834\u5408\u306f\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306bredirects-map.conf\u3092\u30b3\u30fc\u30c9\u306e\u96a3\u306b\u4fdd\u5b58\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002

          \u6ce8\u610f:

          \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u304c\u5c11\u306a\u3044\u5834\u5408\u306f\u3001nginx.dockerfile\u306eRUN\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u4fbf\u5229\u306a\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002

          \u4ee5\u4e0b\u306f\u3001www.example.com\u3092example.com\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4fdd\u6301\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3059\u4f8b\u3067\u3059:

          Redirect
          RUN echo \"~^www.example.com http://example.com\\$request_uri;\" >> /etc/nginx/redirects-map.conf\n

          \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u7a2e\u985e\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001redirects-map.conf\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          redirects-map.conf\u3092\u914d\u7f6e\u3057\u305f\u3089\u3001\u30d3\u30eb\u30c9\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u308a\u8fbc\u3080\u305f\u3081\u306b\u3001nginx.dockerfile\u306b\u3082\u305d\u308c\u3092\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          nginx.dockerfile
          COPY redirects-map.conf /etc/nginx/redirects-map.conf\n
          "},{"location":"ja/docker-images/nginx/#_2","title":"\u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c","text":"

          BASIC_AUTH_USERNAME\u304a\u3088\u3073 BASIC_AUTH_PASSWORD \u74b0\u5883\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u306f\u81ea\u52d5\u7684\u306b\u6709\u52b9\u306b\u306a\u308a\u307e\u3059\u3002

          \u8b66\u544a

          \u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u306e\u81ea\u52d5\u8a2d\u5b9a\u306f\u3001\u5229\u4fbf\u6027\u306e\u305f\u3081\u306b\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3084\u6a5f\u5bc6\u30c7\u30fc\u30bf\u3092\u4fdd\u8b77\u3059\u308b\u305f\u3081\u306e\u5b89\u5168\u306a\u65b9\u6cd5\u3068\u306f\u307f\u306a\u3055\u308c\u307e\u305b\u3093\u3002

          "},{"location":"ja/docker-images/nginx/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e BASIC_AUTH restricted \u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306f off \u306b\u8a2d\u5b9a\u3057\u307e\u3059 BASIC_AUTH_USERNAME (\u8a2d\u5b9a\u306a\u3057) \u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u306e\u30e6\u30fc\u30b6\u30fc\u30cd\u30fc\u30e0 BASIC_AUTH_PASSWORD (\u8a2d\u5b9a\u306a\u3057) \u30d9\u30fc\u30b7\u30c3\u30af\u8a8d\u8a3c\u306e\u30d1\u30b9\u30ef\u30fc\u30c9(\u975e\u6697\u53f7\u5316) FAST_HEALTH_CHECK (\u8a2d\u5b9a\u306a\u3057) \u7279\u5b9a\u306e\u30e6\u30fc\u30b6\u30fc\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8(StatusCake\u3001Pingdom\u3001Site25x7\u3001Uptime\u3001nagios)\u304b\u3089\u306eGET\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u3001\u8efd\u91cf\u306aLagoon\u30b5\u30fc\u30d3\u30b9\u30d8\u30eb\u30b9\u30c1\u30a7\u30c3\u30af\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u306b\u306f\u3001true\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002"},{"location":"ja/docker-images/nodejs/","title":"Node.js","text":"

          Lagoon\u306e Node.js Docker\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002\u516c\u5f0f\u306eNode Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/nodejs/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"

          Node.js\u306e\u30a4\u30e1\u30fc\u30b8\u306f2\u3064\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002\u901a\u5e38\u306enode:version\u30a4\u30e1\u30fc\u30b8\u3068node:version-builder\u3067\u3059\u3002

          node:version-builder\u306b\u306f\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30d3\u30eb\u30c9\u3059\u308b\u969b\u306b\u5fc5\u8981\u306a\u8ffd\u52a0\u30c4\u30fc\u30eb(\u30d3\u30eb\u30c9\u30e9\u30a4\u30d6\u30e9\u30ea\u3001npm\u3001Yarn\u306a\u3069)\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u8a73\u7d30\u306a\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001Dockerfile\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          • 12 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/node-12
          • 14 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/node-14
          • 16 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/node-16
          • 18 Dockerfile (2025\u5e744\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/node-18
          • 20 Dockerfile (2026\u5e744\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/node-20
          • 22 Dockerfile (2027\u5e744\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/node-22

          \u30d2\u30f3\u30c8

          Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fNode.js\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://nodejs.org/en/about/releases/\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

          "},{"location":"ja/docker-images/nodejs/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          Node.js\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c83000\u3067\u3059\u3002

          Lagoon\u3067\u306f\u3001lagoon.type: node-persistent\u3092\u4f7f\u7528\u3057\u3066\u3001\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002\u8a73\u7d30\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

          \u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3067\u4ee5\u4e0b\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059:

          • lagoon.persistent = \u30b3\u30f3\u30c6\u30ca\u5185\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059 - \u4f8b\u3048\u3070\u3001/app/files
          • lagoon.persistent.size = Lagoon\u306b\u5bfe\u3057\u3001\u3053\u306e\u30d1\u30b9\u306b\u5272\u308a\u5f53\u3066\u308b\u30b9\u30c8\u30ec\u30fc\u30b8\u5bb9\u91cf\u3092\u6307\u5b9a\u3057\u307e\u3059
          • \u540c\u3058\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5171\u6709\u3059\u308b\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u4f7f\u7528\u3057\u307e\u3059 lagoon.persistent.name = (\u30aa\u30d7\u30b7\u30e7\u30f3)\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u540c\u3058\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5171\u6709\u3059\u308b\u5834\u5408\u3001\u5225\u306e\u540d\u524d\u4ed8\u304d\u30b5\u30fc\u30d3\u30b9\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306bLagoon\u306b\u6307\u793a\u3057\u307e\u3059\u3002
          "},{"location":"ja/docker-images/nodejs/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
              node:\nbuild:\n# \u30eb\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u306b\u3042\u308bDockerfile\u304b\u3089\u30d3\u30eb\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# Lagoon\u306b\u5bfe\u3057\u3066\u3001Node.js\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308b\u3053\u3068\u3001/app/files\u306b500MB\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\nlagoon.type: node-persistent\nlagoon.persistent: /app/files\nlagoon.persistent.size: 500Mi\n\u30dd\u30fc\u30c8:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# \u30dd\u30fc\u30c83000\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3057\u3001\n# `docker-compose port node 3000`\u3067\u30dd\u30fc\u30c8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n- \"3000\"\n\u30dc\u30ea\u30e5\u30fc\u30e0:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# files\u3068\u3044\u3046\u540d\u524d\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u5b9a\u7fa9\u3055\u308c\u305f\u30d1\u30b9\u306b\u3092\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u672c\u756a\u74b0\u5883\u3068\u540c\u3058\u72b6\u614b\u3092\u518d\u73fe\u3059\u308b\u305f\u3081\u306b\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u5229\u7528\u3055\u308c\u307e\u3059\u3002\n- files:/app/files\n
          "},{"location":"ja/docker-images/opensearch/","title":"OpenSearch","text":"

          OpenSearch\u306f\u3001\u30c7\u30fc\u30bf\u3092\u7c21\u5358\u306b\u53d6\u308a\u8fbc\u307f\u3001\u691c\u7d22\u3001\u53ef\u8996\u5316\u3001\u5206\u6790\u3059\u308b\u305f\u3081\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4e3b\u5c0e\u306eApache2.0\u30e9\u30a4\u30bb\u30f3\u30b9\u3092\u63a1\u7528\u3057\u305f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u304a\u3088\u3073\u5206\u6790\u30b9\u30a4\u30fc\u30c8\u3067\u3059\u3002

          • \u51fa\u5178: https://opensearch.org/
          "},{"location":"ja/docker-images/opensearch/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 2 Dockerfile - uselagoon/opensearch-2
          "},{"location":"ja/docker-images/opensearch/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          OpenSearch \u306e\u4e00\u90e8\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3001\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3057\u3066\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8\u5024 \u8aac\u660e OPENSEARCH_JAVA_OPTS -Xms512m -Xmx512m OpenSearch\u30b3\u30f3\u30c6\u30ca\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u4e21\u65b9\u306e\u5024\u306f\u540c\u3058\u5024\u3067\u306a\u3051\u308c\u3070\u3001OpenSearch\u306f\u6b63\u5e38\u306b\u8d77\u52d5\u3057\u307e\u305b\u3093\u3002"},{"location":"ja/docker-images/opensearch/#_1","title":"\u65e2\u77e5\u306e\u554f\u984c","text":"

          Linux\u30d9\u30fc\u30b9\u306e\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001vm.max_map_count\u8a2d\u5b9a\u304c\u4f4e\u3044\u305f\u3081\u306b\u3001OpenSearch\u30b3\u30f3\u30c6\u30ca\u306e\u8d77\u52d5\u304c\u5931\u6557\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002

          bash title=\"\u30a8\u30e9\u30fc\" opensearch_1 | ERROR: [1] bootstrap checks failed opensearch_1 | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

          \u3053\u306e\u554f\u984c\u306e\u89e3\u6c7a\u7b56\u306f\u3053\u3053\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059.

          "},{"location":"ja/docker-images/php-cli/","title":"PHP-CLI","text":"

          Lagoon\u306e php-cli Docker\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002Lagoon\u306e php-fpm\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3001\u65e5\u5e38\u7684\u306a\u64cd\u4f5c\u306b\u5fc5\u8981\u306a\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u304c\u3059\u3079\u3066\u63c3\u3063\u3066\u3044\u307e\u3059\u3002

          cli\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u8d77\u52d5\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca(\u307e\u305f\u306f\u30dd\u30c3\u30c9)\u306fComposer\u3084Node.js\u30d9\u30fc\u30b9\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b3\u30fc\u30c9\u30d3\u30eb\u30c9\u3092\u62c5\u5f53\u3057\u307e\u3059\u3002

          \u307e\u305f\u3001MariaDB\u3068PostgreSQL\u4e21\u65b9\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9cli\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

          \u60c5\u5831

          \u3053\u306eDockerfile\u306f\u3001Lagoon\u5185\u3067\u306e\u3042\u3089\u3086\u308bcli\u30cb\u30fc\u30ba\u306e\u57fa\u76e4\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/php-cli/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 7.3 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-7.3-cli
          • 7.4 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-7.4-cli
          • 8.0 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-8.0-cli
          • 8.1 Dockerfile (2024\u5e7411\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.1-cli
          • 8.2 Dockerfile (2025\u5e7412\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.2-cli
          • 8.3 Dockerfile (2026\u5e7412\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.3-cli

          \u3059\u3079\u3066\u306ePHP\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u3001\u305d\u308c\u305e\u308c\u306eDockerfiles\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

          "},{"location":"ja/docker-images/php-cli/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • COMPOSER_ALLOW_SUPERUSER=1\u306f\u3001root\u3068\u3057\u3066Composer\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306b\u95a2\u3059\u308b\u8b66\u544a\u3092\u524a\u9664\u3057\u307e\u3059\u3002
          • 80-shell-timeout.sh\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u304cKubernetes\u74b0\u5883\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u3001\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306ecli\u30dd\u30c3\u30c9\u306b\u5bfe\u3057\u306610\u5206\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
          • cli\u30b3\u30f3\u30c6\u30ca\u306f\u3001Lagoon\u306b\u3088\u3063\u3066\u6ce8\u5165\u3055\u308c\u308b\u304b\u3001SSH_PRIVATE_KEY\u74b0\u5883\u5909\u6570\u3067\u5b9a\u7fa9\u3055\u308c\u305fSSH\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
          "},{"location":"ja/docker-images/php-cli/#cli","title":"CLI\u30c4\u30fc\u30eb","text":"

          \u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308bCLI\u30c4\u30fc\u30eb\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:

          • composer\u30d0\u30fc\u30b8\u30e7\u30f31.9.0 ( COMPOSER_VERSION\u304a\u3088\u3073COMPOSER_HASH_SHA256\u7d4c\u7531\u3067\u5909\u66f4\u53ef\u80fd)
          • node.js\u30d0\u30fc\u30b8\u30e7\u30f317 (2022\u5e743\u6708\u73fe\u5728)
          • npm
          • yarn
          • mariadb-client
          • postgres ql-client
          "},{"location":"ja/docker-images/php-cli/#nodejs","title":"Node.js\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u5909\u66f4","text":"

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306fnodejs-current\u30d1\u30c3\u30b1\u30fc\u30b8(2022\u5e743\u6708\u6642\u70b9\u3067v17)\u304c\u642d\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5225\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u73fe\u5728\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u524a\u9664\u3057\u3066\u76ee\u7684\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Node.js 16\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u3001Dockerfile\u3092\u6b21\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002

          Node.js\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u66f4\u65b0
          RUN apk del nodejs-current \\\n&& apk add --no-cache nodejs=~16\n
          "},{"location":"ja/docker-images/php-cli/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002php-fpm\u74b0\u5883\u5909\u6570\u3082\u9069\u7528\u3055\u308c\u307e\u3059\u3002

          \u540d\u524d \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e MARIADB_MAX_ALLOWED_PACKET 64M MySql\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u6700\u5927\u8a31\u5bb9\u30d1\u30b1\u30c3\u30c8\u30b5\u30a4\u30ba\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002"},{"location":"ja/docker-images/php-fpm/","title":"PHP-FPM","text":"

          Lagoon\u306e php-fpm Docker\u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002\u516c\u5f0f\u306ePHP Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          PHP-FPM(FastCGI Process Manager)\u306f\u3001FastCGI \u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305f PHP \u306e\u5b9f\u88c5\u306e\u3072\u3068\u3064\u3067\u3001\u69d8\u3005\u306a\u898f\u6a21\u306e\u30b5\u30a4\u30c8\u3001\u7279\u306b\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u304c\u591a\u3044\u30b5\u30a4\u30c8\u5411\u3051\u306b\u4fbf\u5229\u306a\u8ffd\u52a0\u6a5f\u80fd\u3092\u5099\u3048\u3066\u3044\u307e\u3059\u3002

          • \u51fa\u5178: https://php-fpm.org/

          FastCGI\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u6642\u9593\u306e\u304b\u304b\u308b\u30b3\u30fc\u30c9\u3092\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u30ed\u30fc\u30c9\u3055\u308c\u308b\u6bce\u5ea6\u3067\u306f\u306a\u304f\u3001\u4e00\u5ea6\u3060\u3051\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u524a\u6e1b\u3057\u307e\u3059\u3002

          \u60c5\u5831

          Dockerfile\u306f\u3001Lagoon\u5185\u3067PHP\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306e\u30d9\u30fc\u30b9\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u60f3\u5b9a\u3067\u3059\u3002\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u81ea\u4f53\u304c\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u3092\u4f5c\u6210\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001php-fpm\u306b\u3088\u308bFastCGI\u30ea\u30b9\u30ca\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002php-fpm\u30d7\u30fc\u30eb\u306e\u8a2d\u5b9a\u3092\u8abf\u6574\u3059\u308b\u5fc5\u8981\u304c\u751f\u3058\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

          "},{"location":"ja/docker-images/php-fpm/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 7.3 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-7.3-fpm
          • 7.4 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-7.4-fpm
          • 8.0 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/php-8.0-fpm
          • 8.1 Dockerfile (2024\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.1-fpm
          • 8.2 Dockerfile (2025\u5e7412\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.2-fpm
          • 8.3 Dockerfile (2026\u5e7412\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/php-8.3-fpm

          \u3059\u3079\u3066\u306ePHP\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u305d\u308c\u305e\u308c\u306eDockerfiles\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

          \u30d2\u30f3\u30c8

          Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fPHP\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://www.php.net/supported-versions.php\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

          "},{"location":"ja/docker-images/php-fpm/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • /usr/local/etc/php/php.ini \u304a\u3088\u3073 /usr/local/etc/php-fpm.conf\u30d5\u30a1\u30a4\u30eb\u3001/usr/local/etc/php-f pm.d/\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u5168\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u901a\u3057\u3066envplate\u3067\u51e6\u7406\u3055\u308c\u307e\u3059\u3002
          • \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b PHP \u62e1\u5f35\u6a5f\u80fd\u306b\u3064\u3044\u3066\u306f\u3001Dockerfile\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          • \u3055\u3089\u306a\u308b\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u3082\u3068\u306bDockerfile\u3092\u62e1\u5f35\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u62e1\u5f35\u6a5f\u80fd\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306f\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8How to install more PHP extensions.\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
          "},{"location":"ja/docker-images/php-fpm/#php","title":"PHP\u8a2d\u5b9a","text":"

          PHP \u8a2d\u5b9a\u306b\u306f\u3001PHP\u30d7\u30fc\u30eb\u8a2d\u5b9a\u306e\u4f5c\u6210\u3092\u5bb9\u6613\u306b\u3059\u308b\u305f\u3081\u306e\u9069\u5207\u306a\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u305d\u306e\u4e00\u90e8\u306e\u30ea\u30b9\u30c8\u3067\u3059\u3002\u8a73\u7d30\u306f/usr/local/etc/php.ini\u3001/usr/local/etc/php-fpm.conf \u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:

          \u5024 \u8a73\u7d30 max_execution_time = 900 PHP_MAX_EXECUTION_TIME \u3067\u5909\u66f4\u53ef\u80fd realpath_cache_size = 256k \u5927\u898f\u6a21\u306aPHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6271\u3046\u305f\u3081\u306e\u8a2d\u5b9a memory_limit = 400M \u5927\u898f\u6a21\u306aPHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6271\u3046\u305f\u3081\u306e\u8a2d\u5b9a(PHP_MEMORY_LIMIT \u3067\u5909\u66f4\u53ef\u80fd) opcache.memory_consumption = 265 \u5927\u898f\u6a21\u306aPHP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6271\u3046\u305f\u3081\u306e\u8a2d\u5b9a opcache.enable_file_override = 1 \u3068 opcache.huge_code_pages = 1 \u3088\u308a\u9ad8\u901f\u306aPHP\u306e\u305f\u3081\u306e\u8a2d\u5b9a display_errors = Off \u3068 display_startup_errors = Off \u5b9f\u7528\u7684\u306aproduction\u8a2d\u5b9a (PHP_DISPLAY_ERRORS \u304a\u3088\u3073 PHP_DISPLAY_STARTUP_ERRORS \u3067\u5909\u66f4\u53ef\u80fd)\u3002 upload_max_filesize = 2048M \u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u305f\u3081\u306e\u8a2d\u5b9a apc.shm_size = 32m \u3068 apc.enabled = 1 PHP_APC_SHM_SIZE \u304a\u3088\u3073 PHP_APC_ENABLED \u3067\u5909\u66f4\u53ef\u80fd

          \u307e\u305f\u3001php-fpm\u306e\u30a8\u30e9\u30fc\u30ed\u30b0\u306f stderr\u306b\u8a18\u9332\u3055\u308c\u307e\u3059\u3002

          \ud83d\udca1 \u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306e\u3044\u305a\u308c\u3082\u6c17\u306b\u5165\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u6b21\u306e3\u3064\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059:

          1. \u8a2d\u5b9a\u5024\u304c\u74b0\u5883\u5909\u6570\u3067\u5909\u66f4\u3067\u304d\u308b\u5834\u5408\u306f\u3001\u74b0\u5883\u5909\u6570\u3092\u4f7f\u3063\u3066\u304f\u3060\u3055\u3044(\u3053\u308c\u304c\u63a8\u5968\u3055\u308c\u308b\u65b9\u6cd5\u3067\u3059\u3002\u74b0\u5883\u5909\u6570\u306e\u8868 \u306e\u8a73\u7d30\u306f\u4ee5\u4e0b\u306e\u8868\u306b\u307e\u3068\u3081\u3066\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u53c2\u7167\u304f\u3060\u3055\u3044\u3002)
          2. \u4ee5\u4e0b\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3042\u308bphp_admin_value\u304a\u3088\u3073php_admin_flag\u3092\u4f7f\u3063\u3066\u3001\u72ec\u81ea\u306e\u30ab\u30b9\u30bf\u30e0fpm-pool\u8a2d\u5b9a\u3092\u4f5c\u6210\u3057\u3001\u305d\u308c\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
            • \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001PHP \u3092 Apache \u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306fApache\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u3057\u3066\u306ePHP\u5b9f\u884c\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u304c\u3001php-fpm \u306b\u3082\u5f53\u3066\u306f\u307e\u308a\u307e\u3059\u3002 \u91cd\u8981:
              • \u72ec\u81ea\u306e php-fpm \u30d7\u30fc\u30eb\u3092\u9069\u7528\u3057\u305f\u3044\u5834\u5408\u306f\u3001/usr/local/etc/php-fpm.d/www.conf\u30d5\u30a1\u30a4\u30eb\u3092\u81ea\u5206\u306e\u8a2d\u5b9a\u3067\u4e0a\u66f8\u304d\u3059\u308b\u304b\u3001\u5225\u306e\u540d\u524d\u3092\u4ed8\u3051\u305f\u3044\u5834\u5408\u306f\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u64cd\u4f5c\u3092\u884c\u308f\u306a\u3044\u3068\u3001\u6700\u521d\u304b\u3089\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u30d7\u30fc\u30eb\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002
              • PHP_INI_SYSTEM\u5909\u66f4\u53ef\u80fd\u30e2\u30fc\u30c9\u306ePHP\u306e\u8a2d\u5b9a\u5024\u306f\u3001fpm-pool\u8a2d\u5b9a\u3067\u306f\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u3046\u3044\u3063\u305f\u8a2d\u5b9a\u5024\u306f\u3001\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u74b0\u5883\u5909\u6570\u3092\u4f7f\u3046\u304b\u3001\u307e\u305f\u306f:
              • \u72ec\u81ea\u306ephp.ini\u307e\u305f\u306fphp-fpm.conf\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059(\u3053\u306e\u65b9\u6cd5\u306f\u63a8\u5968\u3055\u308c\u307e\u305b\u3093)
          "},{"location":"ja/docker-images/php-fpm/#fpm-pool","title":"\u30c7\u30d5\u30a9\u30eb\u30c8\u306efpm-pool","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u3001fpm-pool\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb(php-fpm.d/www.conf)\u304c\u542b\u307e\u308c\u3066\u304a\u308a\u3001\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306ffpm-pool\u3092\u4f5c\u6210\u3057\u3001\u30dd\u30fc\u30c89000\u3067\u30ea\u30c3\u30b9\u30f3\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u307b\u3068\u3093\u3069\u306ePHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30cb\u30fc\u30ba\u3092\u6700\u521d\u304b\u3089\u30ab\u30d0\u30fc\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3067\u3059\u3002\u3082\u3061\u308d\u3093\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u72ec\u81ea\u306e\u8a2d\u5b9a\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

          \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u306e\u8aac\u660e:

          • IPv4\u3068IPv6\u3067\u30dd\u30fc\u30c89000\u3067\u30ea\u30c3\u30b9\u30f3\u3057\u307e\u3059\u3002
          • pm dynamic\u3092\u4f7f\u7528\u3057\u30012\u304b\u308950\u307e\u3067\u306e\u5b50\u30d7\u30ed\u30bb\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
          • \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306b\u3001500\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5f8c\u306bphp-fpm\u30d7\u30fc\u30eb\u306e\u5b50\u30d7\u30ed\u30bb\u30b9\u3092\u518d\u751f\u6210\u3057\u307e\u3059\u3002
          • /ping\u3078\u306efastcgi\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066pong\u3067\u5fdc\u7b54\u3057\u307e\u3059(\u30d7\u30fc\u30eb\u304c\u8d77\u52d5\u3057\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306e\u81ea\u52d5\u30c6\u30b9\u30c8\u306b\u4fbf\u5229)\u3002
          • catch_workers_output = yes\u306b\u3088\u308a\u3001PHP\u306e\u30a8\u30e9\u30fc\u3092\u78ba\u8a8d\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u3002
          • clear_env = no\u306b\u3088\u308a\u3001\u901a\u5e38\u306e Docker \u74b0\u5883\u5909\u6570\u3092\u4f7f\u3063\u3066 PHP \u74b0\u5883\u5909\u6570\u3092\u6ce8\u5165\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b
          "},{"location":"ja/docker-images/php-fpm/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e NEWRELIC_ENABLED false NewRelic\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u6709\u52b9\u306b\u3059\u308b\u306b\u306fNEWRELIC_LICENSE\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3059\u3002 NEWRELIC_LICENSE (\u8a2d\u5b9a\u306a\u3057) \u4f7f\u7528\u3059\u308bNewRelic\u306e\u30e9\u30a4\u30bb\u30f3\u30b9\u3002\u91cd\u8981:NewRelic\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306fNEWRELIC_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 NEWRELIC_BROWSER_MONITORING_ENABLED true NewRelic\u30d6\u30e9\u30a6\u30b6\u76e3\u8996\u7528\u306eJavaScript\u30d5\u30e9\u30b0\u30e1\u30f3\u30c8\u306e\u81ea\u52d5\u633f\u5165\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u91cd\u8981:NewRelic\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306fNEWRELIC_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 NEWRELIC_DISTRIBUTED_TRACING_ENABLED false \u5206\u6563\u30c8\u30ec\u30fc\u30b9\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u91cd\u8981:NewRelic\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001NEWRELIC_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 PHP_APC_ENABLED 1 APC\u3092\u7121\u52b9\u306b\u3059\u308b\u306b\u306f0\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002 PHP_APC_SHM_SIZE 32m \u5404\u5171\u6709\u30e1\u30e2\u30ea\u30bb\u30b0\u30e1\u30f3\u30c8\u306e\u30b5\u30a4\u30ba\u3002 PHP_DISPLAY_ERRORS Off \u30a8\u30e9\u30fc\u3092\u8868\u793a\u3055\u308c\u308b\u304b\u975e\u8868\u793a\u306b\u3059\u308b\u304b\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_DISPLAY_STARTUP_ERRORS Off \u8d77\u52d5\u6642\u306e\u30a8\u30e9\u30fc\u3092\u8868\u793a\u3059\u308b\u304b\u975e\u8868\u793a\u3059\u308b\u304b\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_ERROR_REPORTING Production E_ALL & ~E _DEPRECATED & ~E_STRICT Development: E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE PHP\u306b\u4f7f\u7528\u3055\u308c\u308bdesired logging\u30ec\u30d9\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_MAX_CHILDREN 50 \u5b50\u30d7\u30ed\u30bb\u30b9\u306e\u6700\u5927\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3002 PHP_FPM_PM_MAX_REQUESTS 500 \u5404\u5b50\u30d7\u30ed\u30bb\u30b9\u304c\u518d\u751f\u6210\u3055\u308c\u308b\u524d\u306b\u5b9f\u884c\u3059\u308b\u3079\u304d\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_MAX_SPARE_SERVERS 2 \u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306e\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u6700\u5927\u8a31\u5bb9\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_MIN_SPARE_SERVERS 2 \u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306e\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u6700\u5c0f\u8a31\u5bb9\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_PROCESS_IDLE_TIMEOUT 60s \u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u7d42\u4e86\u3055\u308c\u308b\u307e\u3067\u306e\u79d2\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_FPM_PM_START_SERVERS 2 \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u5b50\u30d7\u30ed\u30bb\u30b9\u306e\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_MAX_EXECUTION_TIME 900 \u5404\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u6700\u5927\u5b9f\u884c\u6642\u9593(\u79d2)\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_MAX_FILE_UPLOADS 20 \u540c\u6642\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u5927\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_MAX_INPUT_VARS 2000 \u53d7\u3051\u5165\u308c\u53ef\u80fd\u306a\u5165\u529b\u5909\u6570\u306e\u6570\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 PHP_MEMORY_LIMIT 400M \u30b9\u30af\u30ea\u30d7\u30c8\u304c\u6d88\u8cbb\u3067\u304d\u308b\u30e1\u30e2\u30ea\u306e\u6700\u5927\u91cf\u3002\u8a73\u7d30\u306f\u3001php.net\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 XDEBUG_ENABLE (\u8a2d\u5b9a\u306a\u3057) xdebug \u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001true\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 BLACKFIRE_ENABLED (\u8a2d\u5b9a\u306a\u3057) blackfire \u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f true \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 BLACKFIRE_SERVER_ID (\u8a2d\u5b9a\u306a\u3057) Blackfire.io\u304c\u63d0\u4f9b\u3059\u308bBlackfire\u30b5\u30fc\u30d0\u30fcID\u3002BLACKFIRE_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 BLACKFIRE_SERVER_TOKEN (\u8a2d\u5b9a\u306a\u3057) Blackfire.io\u304c\u63d0\u4f9b\u3059\u308bBlackfire\u30b5\u30fc\u30d0\u30fc\u30c8\u30fc\u30af\u30f3\u3002BLACKFIRE_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 BLACKFIRE_LOG_LEVEL 3 blackfire\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u30ed\u30b0\u30ec\u30d9\u30eb\u3092\u5909\u66f4\u3057\u307e\u3059\u3002\u5229\u7528\u53ef\u80fd\u306a\u5024:\u30ed\u30b0\u306e\u5197\u9577\u6027\u30ec\u30d9\u30eb (4: \u30c7\u30d0\u30c3\u30b0, 3: \u60c5\u5831, 2: \u8b66\u544a, 1: \u30a8\u30e9\u30fc) \u8a73\u7d30\u306f\u3001blackfire.io\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002"},{"location":"ja/docker-images/postgres/","title":"PostgreSQL","text":"

          Lagoon PostgreSQL Docker\u30a4\u30e1\u30fc\u30b8\u3002\u516c\u5f0fPostgreSQL Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/postgres/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 11 (\u4e92\u63db\u6027\u306e\u305f\u3081\u3060\u3051\u306b\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u306b\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093) - uselagoon/postgres-11
          • 12 Dockerfile (2024\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-12
          • 13 Dockerfile (2025\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-13
          • 14 Dockerfile (2026\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-14
          • 15 Dockerfile (2027\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-15
          • 16 Dockerfile (2028\u5e7411\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/postgres-16

          \u30d2\u30f3\u30c8

          Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fPostgreSQL\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://www.postgresql.org/support/versioning\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

          "},{"location":"ja/docker-images/postgres/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          Postgres\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c85432\u3067\u3059\u3002

          Lagoon\u304cPostgres\u30b3\u30f3\u30c6\u30ca\u306e\u5b9f\u884c\u65b9\u6cd5\u3092\u6700\u9069\u306b\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001lagoon.type: postgres\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001DBaaS\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306f\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u3067\u5229\u7528\u53ef\u80fd\u306a\u5834\u5408\u3001\u30af\u30e9\u30a6\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u5185\u3067Postgres\u3092\u78ba\u5b9f\u306b\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u3001lagoon.type: postgres-single\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002Postgres\u30b3\u30f3\u30c6\u30ca\u306b\u5bfe\u3057\u3066\u306f\u3001\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u5e38\u306b/var/lib/postgresql/data\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/docker-images/postgres/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
          postgres:\nimage: uselagoon/postgres-14-drupal:latest\nlabels:\n# Lagoon\u306bPostgres\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u308b\nlagoon.type: postgres\nports:\n# \u30dd\u30fc\u30c85432\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u3067\u516c\u958b\u3057\u3001\n# `docker-compose port postgres 5432`\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\n- \"5432\"\nvolumes:\n# Postgres\u7528\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u306b\u540d\u524d\u4ed8\u304d\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\n- db:/var/lib/postgresql/data\n
          "},{"location":"ja/docker-images/postgres/#_1","title":"\u30d2\u30f3\u30c8\uff06\u30b3\u30c4","text":"

          \u30b3\u30f3\u30c6\u30ca\u8d77\u52d5\u76f4\u5f8c\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u521d\u671f\u5316\u3059\u308b\u305f\u3081\u306eSQL\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u306e.sql\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30f3\u30c6\u30ca\u306edocker-entrypoint-initdb.d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u914d\u7f6e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b .sql \u30d5\u30a1\u30a4\u30eb\u306f\u3001PostgreSQL\u30b3\u30f3\u30c6\u30ca\u306e\u8d77\u52d5\u6642\u306b\u81ea\u52d5\u7684\u306b\u5b9f\u884c\u3055\u308c\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u521d\u671f\u5316\u51e6\u7406\u306e\u4e00\u90e8\u3068\u3057\u3066\u52d5\u4f5c\u3057\u307e\u3059\u3002

          \u8b66\u544a

          \u3053\u308c\u3089\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u7a7a\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3055\u308c\u305f\u5834\u5408\u306b\u306e\u307f\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5bfe\u3057\u3066\u306f\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3002

          "},{"location":"ja/docker-images/python/","title":"Python","text":"

          Lagoon python Docker image\u3002\u3053\u308c\u306f\u516c\u5f0f\u306ePython Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/python/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 2.7 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/python-2.7
          • 3.7 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/python-3.7
          • 3.8 Dockerfile (2024\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/python-3.8
          • 3.9 Dockerfile (2025\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/python-3.9
          • 3.10 Dockerfile (2026\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/python-3.10
          • 3.11 Dockerfile (2027\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/python-3.11
          • 3.12 Dockerfile (2028\u5e7410\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8)- uselagoon/python-3.12

          \u30d2\u30f3\u30c8

          Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fPython\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://devguide.python.org/versions/#versions\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

          "},{"location":"ja/docker-images/python/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          Python\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c88800\u3067\u3059\u3002

          Lagoon\u3067\u306f\u3001lagoon.type: python-persistent\u3092\u4f7f\u7528\u3057\u3066\u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

          \u6c38\u7d9a\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3067\u4ee5\u4e0b\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059: lagoon.persistent = \u30b3\u30f3\u30c6\u30ca\u5185\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059 - \u4f8b\u3048\u3070/app/files lagoon.persistent.size = Lagoon\u306b\u5bfe\u3057\u3066\u3001\u3053\u306e\u30d1\u30b9\u306b\u5272\u308a\u5f53\u3066\u308b\u30b9\u30c8\u30ec\u30fc\u30b8\u5bb9\u91cf\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

          \u540c\u3058\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5171\u6709\u3059\u308b\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u4f7f\u7528\u3057\u307e\u3059 lagoon.persistent.name =(\u30aa\u30d7\u30b7\u30e7\u30f3)\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u540c\u3058\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5171\u6709\u3059\u308b\u5834\u5408\u3001\u5225\u306e\u540d\u524d\u4ed8\u304d\u30b5\u30fc\u30d3\u30b9\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306bLagoon\u306b\u6307\u793a\u3057\u307e\u3059\u3002

          "},{"location":"ja/docker-images/python/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
          python:\nbuild:\n# \u30eb\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u306b\u3042\u308bDockerfile\u3092\u4f7f\u7528\u3057\u3066\u30d3\u30eb\u30c9\u3092\u884c\u3046\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# Lagoon\u306b\u5bfe\u3057\u3001Python\u30b5\u30fc\u30d3\u30b9\u3067\u3042\u308b\u3053\u3068\u3068\u3001/app/files\u306b500MB\u306e\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\nlagoon.type: python-persistent\nlagoon.persistent: /app/files\nlagoon.persistent.size: 500Mi\nports:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# \u30dd\u30fc\u30c88800\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3057\u3001\n# `docker compose port node 8800`\u3067\u30dd\u30fc\u30c8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n- \"8800\"\nvolumes:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# files\u3068\u3044\u3046\u540d\u524d\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u5b9a\u7fa9\u3055\u308c\u305f\u30d1\u30b9\u306b\u3092\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u672c\u756a\u74b0\u5883\u3068\u540c\u3058\u72b6\u614b\u3092\u518d\u73fe\u3059\u308b\u305f\u3081\u306b\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u5229\u7528\u3055\u308c\u307e\u3059\u3002\n- files:/app/files\n
          "},{"location":"ja/docker-images/rabbitmq/","title":"RabbitMQ","text":"

          Lagoon RabbitMQ Dockerfile\u3067\u3001\u7ba1\u7406\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u3059\u3002docker-hub\u306b\u3042\u308b\u516c\u5f0f\u306erabbitmq:3-management\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u3002

          \u3053\u306eDockerfile\u306f\u3001\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eRabbitMQ\u30ad\u30e5\u30fc\u30d6\u30ed\u30fc\u30ab\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u3060\u3051\u3067\u306a\u304f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u9ad8\u53ef\u7528\u6027\u30ad\u30e5\u30fc\u30b5\u30dd\u30fc\u30c8(\u30df\u30e9\u30fc\u30ea\u30f3\u30b0\u30ad\u30e5\u30fc)\u3092\u5099\u3048\u305f\u30af\u30e9\u30b9\u30bf\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3068\u3057\u3066\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001RabbitMQ\u30d6\u30ed\u30fc\u30ab\u30fc\u306f\u30b7\u30f3\u30b0\u30eb\u30ce\u30fc\u30c9\u3067\u8d77\u52d5\u3057\u307e\u3059\u3002\u30af\u30e9\u30b9\u30bf\u3092\u8d77\u52d5\u3059\u308b\u5834\u5408\u306f\u3001rabbitmq\u30a4\u30e1\u30fc\u30b8\u306b\u52a0\u3048\u3066rabbitmq_peer_discovery_k8s\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u7d44\u307f\u8fbc\u307e\u308c\u305frabbitmq-cluster Docker\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/docker-images/rabbitmq/#_1","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 3.10 Dockerfile (2023\u5e747\u6708\u307e\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/rabbitmq
          "},{"location":"ja/docker-images/rabbitmq/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • /etc/rabbitmq/definitions.json\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u6301\u3064envplate\u3092\u901a\u3057\u3066\u51e6\u7406\u3055\u308c\u307e\u3059\u3002
          "},{"location":"ja/docker-images/rabbitmq/#rabbitmqdefinitionsjson","title":"RabbitMQ\u30c7\u30d5\u30a9\u30eb\u30c8\u30b9\u30ad\u30fc\u30de(definitions.json)","text":"
          • \u30df\u30e9\u30fc\u30ea\u30f3\u30b0\u30ad\u30e5\u30fc\u306e\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u306b\u306f\u3001\u5c11\u306a\u304f\u3068\u3082\u4e00\u3064\u306epolicy\u304c\u5fc5\u8981\u3067\u3059\u3002
          • definitions.json\u30b9\u30ad\u30fc\u30de\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u5b9f\u884c\u3001virtualhost(vhost)\u3001\u7ba1\u7406UI\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eusername\u3001password\u3001permissions\u3001policies\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306e\u6700\u5c0f\u9650\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u8d77\u52d5\u6642\u306blagoon-ha\u3068\u3044\u3046\u540d\u524d\u306e\u30dd\u30ea\u30b7\u30fc\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u304c\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u30ad\u30e5\u30fc\u540d\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u4e00\u81f4\u3057\u306a\u3044\u305f\u3081\u3001\u30a2\u30af\u30c6\u30a3\u30d6\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

          definitions.json
          \"policies\":[\n{\"vhost\":\"${RABBITMQ_DEFAULT_VHOST}\",\"name\":\"lagoon-ha\",\"pattern\":\"${RABBITMQ_DEFAULT_HA_PATTERN}\", \"definition\":{\"ha-mode\":\"exactly\",\"ha-params\":2,\"ha-sync-mode\":\"automatic\",\"ha-sync-batch-size\":5}}\n]\n

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001ha-mode\u306fexactly\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u304a\u308a\u3001\u30ad\u30e5\u30fc(mirrors)\u306e\u30df\u30e9\u30fc\u30ea\u30f3\u30b0\u30ce\u30fc\u30c9\u306e\u6b63\u78ba\u306a\u6570\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002\u30ce\u30fc\u30c9\u306e\u6570\u306f ha-params \u3067\u5236\u5fa1\u3055\u308c\u307e\u3059\u3002

          \u8a73\u7d30\u306a\u60c5\u5831\u3084\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306f\u3001\u516c\u5f0f\u306e RabbitMQ \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/docker-images/rabbitmq/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e RABBITMQ_DEFAULT_USER guest \u7ba1\u7406UI\u3078\u306e\u30a2\u30af\u30bb\u30b9\u7528\u306e\u30e6\u30fc\u30b6\u540d RABBITMQ_DEFAULT_PASS guest \u7ba1\u7406UI\u3078\u306e\u30a2\u30af\u30bb\u30b9\u7528\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 RABBITMQ_DEFAULT_VHOST / RabbitMQ\u306e\u30e1\u30a4\u30f3\u306e\u4eee\u60f3\u30db\u30b9\u30c8 RABBITMQ_DEFAULT_HA_PATTERN ^$ \u30df\u30e9\u30fc\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30ad\u30e5\u30fc\u3092\u4e00\u81f4\u3055\u305b\u308b\u305f\u3081\u306e\u6b63\u898f\u8868\u73fe"},{"location":"ja/docker-images/redis/","title":"Redis","text":"

          Lagoon Redis\u30a4\u30e1\u30fc\u30b8Dockerfile \u306f\u3001\u516c\u5f0f redis:alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u3053\u306eDockerfile\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eRedis ephemeral \u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/redis/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 5 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/redis-5\u307e\u305f\u306fuselagoon/redis-5-persistent
          • 6 Dockerfile - uselagoon/redis-6\u307e\u305f\u306fuselagoon/redis-6-persistent
          • 7 Dockerfile - uselagoon/redis-7\u307e\u305f\u306fuselagoon/redis-7-persistent
          "},{"location":"ja/docker-images/redis/#_1","title":"\u4f7f\u7528\u65b9\u6cd5","text":"

          Redis\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Ephemeral(\u4e00\u6642\u7684)\u3068Persistent(\u6c38\u7d9a\u7684)\u306e2\u7a2e\u985e\u306e\u30bf\u30a4\u30d7\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/docker-images/redis/#ephemeral","title":"Ephemeral(\u4e00\u6642\u7684)","text":"

          Ephemeral\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e00\u6642\u7684\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u304a\u308a\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u30c7\u30fc\u30bf\u306f\u4fdd\u6301\u3055\u308c\u307e\u305b\u3093\u3002

          \u30e1\u30e2\u30ea\u5185(RAM)\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u5927\u304d\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u6700\u521d\u306b\u8abf\u6574\u3057\u305f\u3044\u306e\u304cMAXMEMORY\u5909\u6570\u3067\u3059\u3002\u3053\u306e\u5909\u6570\u306f\u3001Redis\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30a2\u30a4\u30c6\u30e0\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u30e1\u30e2\u30ea(RAM)\u306e\u6700\u5927\u91cf\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002

          "},{"location":"ja/docker-images/redis/#persistent","title":"Persistent (\u6c38\u7d9a\u7684)","text":"

          Persistent\u306aRedis\u30a4\u30e1\u30fc\u30b8\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u30c7\u30fc\u30bf\u3092\u4fdd\u6301\u3057\u3001\u30ad\u30e5\u30fc\u3084\u6c38\u7d9a\u5316\u304c\u5fc5\u8981\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30fc\u30bf\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

          Redis\u30b3\u30f3\u30c6\u30ca\u304c\u518d\u8d77\u52d5\u3057\u3066\u30c7\u30a3\u30b9\u30af\u304b\u3089\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3080\u9593\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u4e88\u671f\u3057\u306a\u3044\u526f\u4f5c\u7528\u304c\u751f\u3058\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u901a\u5e38\u306f\u30e1\u30e2\u30ea\u5185\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30b7\u30ca\u30ea\u30aa\u3067Persistent Redis\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306f\u304a\u52e7\u3081\u3057\u307e\u305b\u3093\u3002

          "},{"location":"ja/docker-images/redis/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • /etc/redis/*\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u901a\u3057\u3066envplate\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002
          "},{"location":"ja/docker-images/redis/#redisconf","title":"redis.conf \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Lagoon\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u305f \u30c7\u30d5\u30a9\u30eb\u30c8 \u306eRedis\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/redis/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 -1 \u8d77\u52d5\u6642\u306b\u4f5c\u6210\u3055\u308c\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u6570(-1\u306f\u7121\u5236\u9650) \u30ed\u30b0\u30ec\u30d9\u30eb \u901a\u77e5 \u30ed\u30b0\u306e\u30ec\u30d9\u30eb\u3092\u5b9a\u7fa9\u3057\u307e\u3059 \u6700\u5927\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf 100mb \u6700\u5927\u30e1\u30e2\u30ea\u5bb9\u91cf \u6700\u5927\u30e1\u30e2\u30ea\u30dd\u30ea\u30b7\u30fc allkeys-lru Redis\u304c\u6700\u5927\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306b\u9054\u3057\u305f\u3068\u304d\u306b\u30ad\u30fc\u3092\u8ffd\u3044\u51fa\u3059\u305f\u3081\u306e\u30dd\u30ea\u30b7\u30fc REDIS_PASSWORD \u7121\u52b9 \u8a8d\u8a3c\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002"},{"location":"ja/docker-images/redis/#_2","title":"\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a","text":"

          \u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u306b\u57fa\u3065\u3044\u3066\u3001\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 Redis\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8a73\u7d30\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u3061\u3089\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/docker-images/redis/#redis_1","title":"Redis \u6c38\u7d9a\u5316","text":"

          Lagoon\u306e redis\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u3057\u305fLagoon\u306e redis-persistent Docker\u30a4\u30e1\u30fc\u30b8\u306f\u3001Redis\u30b5\u30fc\u30d3\u30b9\u3092persistent\u30e2\u30fc\u30c9\u3067\u4f7f\u7528\u3059\u308b\u5834\u5408(\u3064\u307e\u308a\u3001\u30ad\u30fc\u304c\u30c7\u30a3\u30b9\u30af\u306b\u4fdd\u5b58\u3055\u308c\u308b\u6c38\u7d9a\u5316\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408)\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          redis\u3068\u306e\u9055\u3044\u306f\u3001FLAVOR\u74b0\u5883\u5909\u6570\u306e\u307f\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u4f7f\u7528\u3055\u308c\u308bredis\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5fdc\u3058\u3066\u3001\u305d\u308c\u305e\u308c\u306eRedis\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

          "},{"location":"ja/docker-images/redis/#_3","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"

          Lagoon\u306eRedis\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3059\u3079\u3066redis-cli\u30b3\u30de\u30f3\u30c9\u304c\u4e8b\u524d\u306b\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3092\u4f7f\u7528\u3057\u3066\u3001Redis \u30b5\u30fc\u30d3\u30b9\u306b\u60c5\u5831\u3092\u554f\u3044\u5408\u308f\u305b\u305f\u308a\u3001\u8a2d\u5b9a\u5024\u3092\u52d5\u7684\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u3053\u3053\u306e\u624b\u9806\u3092\u4f7f\u7528\u3057\u3066\u3001pod\u5024\u3068\u3057\u3066redis\u3092\u6307\u5b9a\u3057\u3066Redis\u30dd\u30c3\u30c9\u306bSSH\u3067\u63a5\u7d9a\u3057\u3001\u63a5\u7d9a\u3057\u305f\u3089\u30bf\u30fc\u30df\u30ca\u30eb\u304b\u3089\u5b9f\u884c\u3059\u308b\u3060\u3051\u3067\u3059\u3002

          "},{"location":"ja/docker-images/redis/#_4","title":"\u6700\u5927\u30e1\u30e2\u30ea\u30dd\u30ea\u30b7\u30fc","text":"

          \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001Lagoonredis\u30a4\u30e1\u30fc\u30b8\u306fallkeys-lru\u30dd\u30ea\u30b7\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30dd\u30ea\u30b7\u30fc\u306f\u3001Redis\u30b5\u30fc\u30d3\u30b9\u304cmaxmemory\u5236\u9650\u306b\u9054\u3057\u305f\u5834\u5408\u3001\u6700\u5f8c\u306b\u4f7f\u7528\u3055\u308c\u305f\u30ad\u30fc\u304b\u3089\u9806\u306b\u3001Redis\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u4efb\u610f\u306e\u30ad\u30fc\u3092\u8ffd\u3044\u51fa\u3059\u3053\u3068\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002

          \u4e00\u822c\u7684\u306a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u3001Drupal\u304cRedis\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u5404\u30ad\u30fc\u306bTTL\u5024\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u5834\u5408\u304c\u3042\u308b\u305f\u3081\u3001\u3053\u308c\u304c\u7406\u60f3\u7684\u306a\u8a2d\u5b9a\u3067\u3059\u3002maxmemory-policy\u304cvolatile-lru\u306e\u3088\u3046\u306a\u3082\u306e\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u3066\u3001Drupal\u304c\u3053\u308c\u3089\u306eTTL\u30bf\u30b0\u3092\u63d0\u4f9b\u3057\u306a\u3044\u5834\u5408\u3001Redis\u30b3\u30f3\u30c6\u30ca\u304c\u3044\u3063\u3071\u3044\u306b\u306a\u308a\u3001\u4efb\u610f\u306e\u30ad\u30fc\u306e\u8ffd\u3044\u51fa\u3057\u304c\u5b8c\u5168\u306b\u3067\u304d\u306a\u304f\u306a\u308a\u3001\u65b0\u3057\u3044\u30ad\u30e3\u30c3\u30b7\u30e5\u30ad\u30fc\u306e\u53d7\u3051\u5165\u308c\u3082\u5b8c\u5168\u306b\u505c\u6b62\u3057\u3066\u3057\u307e\u3044\u307e\u3059\u3002

          Redis\u306emaxmemory\u30dd\u30ea\u30b7\u30fc\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u60c5\u5831\u306f\u3001Redis\u306e\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

          \u6ce8\u610f\u3057\u3066\u9032\u3081\u3066\u304f\u3060\u3055\u3044

          \u3053\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u3068\u3001Redis\u304c\u5b8c\u5168\u306b\u3044\u3063\u3071\u3044\u306b\u306a\u308a\u3001\u7d50\u679c\u3068\u3057\u3066\u969c\u5bb3\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/docker-images/redis/#redismaxmemory","title":"Redis\u306emaxmemory\u5024\u306e\u8abf\u6574","text":"

          Redis\u306b\u5272\u308a\u5f53\u3066\u308b\u6700\u9069\u306a\u30e1\u30e2\u30ea\u91cf\u3092\u898b\u3064\u3051\u308b\u306e\u306f\u3001\u306a\u304b\u306a\u304b\u96e3\u3057\u3044\u4f5c\u696d\u3067\u3059\u3002Redis\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30e1\u30e2\u30ea\u30b5\u30a4\u30ba\u3092\u8abf\u6574\u3059\u308b\u524d\u306b\u3001\u901a\u5e38\u901a\u308a\u306e\u4f7f\u7528\u3067\u3001\u5c11\u306a\u304f\u3068\u30821\u65e5\u9593\u306f\u901a\u5e38\u901a\u308a\u306b\u5b9f\u884c\u3055\u305b\u308b\u306e\u304c\u8ce2\u660e\u3067\u3059\u3002

          \u3053\u308c\u3089\u306e\u30e1\u30e2\u30ea\u5024\u3092\u8abf\u6574\u3059\u308b\u969b\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u9ad8\u30ec\u30d9\u30eb\u306a\u30dd\u30a4\u30f3\u30c8\u304c\u3042\u308a\u307e\u3059\uff1a

          • \u6700\u521d\u306b\u78ba\u8a8d\u3059\u308b\u3079\u304d\u3053\u3068\u306f \u73fe\u5728Redis\u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u30e1\u30e2\u30ea\u306e\u5272\u5408\u3067\u3059\u3002
            • \u3053\u306e\u5272\u5408\u304c50\uff05\u672a\u6e80\u306e\u5834\u5408\u306f\u3001maxmemory\u306e\u5024\u309225\uff05\u6e1b\u3089\u3059\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
            • \u3053\u306e\u5272\u5408\u304c50\uff05\u304b\u308975\uff05\u306e\u9593\u3067\u3042\u308c\u3070\u3001\u554f\u984c\u306a\u304f\u7a3c\u50cd\u3057\u3066\u3044\u307e\u3059\u3002
            • \u3053\u306e\u5024\u304c75\uff05\u3092\u8d85\u3048\u308b\u5834\u5408\u3001maxmemory\u3092\u5897\u3084\u3059\u5fc5\u8981\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3001\u4ed6\u306e\u5909\u6570\u3092\u78ba\u8a8d\u3059\u308b\u4fa1\u5024\u304c\u3042\u308a\u307e\u3059\u3002
          • Redis\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u304c\u9ad8\u3044\u3068\u5224\u65ad\u3057\u305f\u5834\u5408\u3001\u6b21\u306b\u30ad\u30fc\u306e\u8ffd\u3044\u51fa\u3057\u56de\u6570\u3092\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002
            • \u30ad\u30fc\u306e\u8ffd\u3044\u51fa\u3057\u56de\u6570\u304c\u591a\u304f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u7387\u304c95\uff05\u3092\u8d85\u3048\u3066\u3044\u308b\u5834\u5408\u306f\u3001Redis\u306emaxmemory\u8a2d\u5b9a\u3092\u9ad8\u304f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002
            • \u30ad\u30fc\u306e\u8ffd\u3044\u51fa\u3057\u56de\u6570\u304c\u591a\u304f\u306a\u3044\u3088\u3046\u3067\u3001\u5fdc\u7b54\u6642\u9593\u304c\u59a5\u5f53\u306a\u5834\u5408\u306f\u3001\u5358\u306b Redis \u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30e1\u30e2\u30ea\u3092\u60f3\u5b9a\u901a\u308a\u306b\u7ba1\u7406\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002
          "},{"location":"ja/docker-images/redis/#_5","title":"\u30b3\u30de\u30f3\u30c9\u4f8b","text":"

          \u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001Redis\u30b5\u30fc\u30d3\u30b9\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059:

          • Redis\u30b5\u30fc\u30d3\u30b9\u306b\u95a2\u3059\u308b\u3059\u3079\u3066\u306e\u60c5\u5831\u3092\u8868\u793a:redis-cli info
          • \u30b5\u30fc\u30d3\u30b9\u306e\u30e1\u30e2\u30ea\u60c5\u5831\u3092\u8868\u793a:redis-cli info memory
          • \u30b5\u30fc\u30d3\u30b9\u306e\u30ad\u30fc\u30b9\u30da\u30fc\u30b9\u60c5\u5831\u3092\u8868\u793a:redis-cli info keyspace
          • \u30b5\u30fc\u30d3\u30b9\u306e\u7d71\u8a08\u60c5\u5831\u3092\u8868\u793a:redis-cli info stats

          Redis\u30b5\u30fc\u30d3\u30b9\u306e\u5024\u3092\u3001Redis\u30b5\u30fc\u30d3\u30b9\u3092\u518d\u8d77\u52d5\u305b\u305a\u306b\u52d5\u7684\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 \u305f\u3060\u3057\u3001\u3053\u308c\u3089\u306e\u52d5\u7684\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u5024\u306f\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3057\u305f\u5834\u5408 (\u30c7\u30d7\u30ed\u30a4\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3001\u307e\u305f\u306f\u5358\u306b\u30ce\u30fc\u30c9\u9593\u3067\u30b7\u30e3\u30c3\u30d5\u30eb\u3055\u308c\u305f\u5834\u5408\u306b\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059) \u306b\u306f\u6c38\u7d9a\u5316\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          • maxmemory\u8a2d\u5b9a\u5024\u3092\u52d5\u7684\u306b500mb\u306b\u8a2d\u5b9a: config set maxmemory 500mb
          • maxmemory-policy\u8a2d\u5b9a\u5024\u3092\u52d5\u7684\u306bvolatile-lru\u306b\u8a2d\u5b9a: config set maxmemory-policy volatile-lru
          "},{"location":"ja/docker-images/ruby/","title":"Ruby","text":"

          Lagoon ruby Docker\u30a4\u30e1\u30fc\u30b8\u3002\u516c\u5f0f\u306ePython Alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/ruby/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 3.0 (\u4e92\u63db\u6027\u306e\u305f\u3081\u3060\u3051\u306b\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u306b\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093) - uselagoon/ruby-3.0
          • 3.1 Dockerfile (2025\u5e743\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/ruby-3.1
          • 3.2 Dockerfile (2026\u5e743\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/ruby-3.2
          • 3.3 Dockerfile (2027\u5e743\u6708\u307e\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8) - uselagoon/ruby-3.3

          \u30d2\u30f3\u30c8

          Lagoon\u306f\u3001\u516c\u5f0f\u306b\u30a2\u30ca\u30a6\u30f3\u30b9\u3055\u308c\u305f\u7d42\u4e86\u65e5(EOL)\u306e\u5f8c\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001EOL\u306b\u9054\u3057\u305fRuby\u30a4\u30e1\u30fc\u30b8\u306e\u66f4\u65b0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://www.ruby-lang.org/en/downloads/releases/\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044\u3002

          "},{"location":"ja/docker-images/ruby/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          ruby\u30b3\u30f3\u30c6\u30ca\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u516c\u958b\u30dd\u30fc\u30c8\u306f\u30dd\u30fc\u30c83000\u3067\u3059\u3002

          Lagoon\u306b\u306fRuby\u30b5\u30fc\u30d3\u30b9\u5c02\u7528\u306e\u4e8b\u524d\u5b9a\u7fa9\u3055\u308c\u305f\u578b\u306f\u3042\u308a\u307e\u305b\u3093\u3002lagoon.type: generic\u3092\u4f7f\u7528\u3057\u3066\u69cb\u6210\u3057\u3001lagoon.port: 3000 \u3067\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/docker-images/ruby/#docker-composeyml-snippet","title":"docker-compose.yml \u30b9\u30cb\u30da\u30c3\u30c8","text":"docker-compose.yml
          ruby:\nbuild:\n# \u30eb\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u306b\u3042\u308bDockerfile\u3092\u4f7f\u7528\u3057\u3066\u30d3\u30eb\u30c9\u3092\u884c\u3046\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\ncontext: .\ndockerfile: Dockerfile\nlabels:\n# Lagoon\u306b\u3053\u308c\u304c\u4e00\u822c\u7684\u306a\u30b5\u30fc\u30d3\u30b9\u3067\u3001\u30dd\u30fc\u30c83000\u3092\u516c\u958b\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u4f1d\u3048\u307e\u3059\nlagoon.type: generic\nlagoon.port: 3000\nports:\n# \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u307f\u9069\u7528\u3055\u308c\u308b\u8a2d\u5b9a\u3067\u3059\n# \u30dd\u30fc\u30c83000\u3092\u30e9\u30f3\u30c0\u30e0\u306a\u30ed\u30fc\u30ab\u30eb\u30dd\u30fc\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3057\u3001\n# `docker-compose port node 3000`\u3067\u30dd\u30fc\u30c8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n- \"3000\"\n
          "},{"location":"ja/docker-images/solr/","title":"Solr","text":"

          Lagoon Solr\u30a4\u30e1\u30fc\u30b8\u306eDockerfile\u3002\u516c\u5f0f\u306esolr:<version>-alpine\u30a4\u30e1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u3053\u306eDockerfile\u306f\u3001\u521d\u671f\u30b3\u30a2mycore\u3092\u6301\u3064\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306eSolr\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

          "},{"location":"ja/docker-images/solr/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 5.5 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059)
          • 6.6 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059)
          • 7.7 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059)
          • 7 (\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059) - uselagoon/solr-7
          • 8 Dockerfile - uselagoon/solr-8
          • 9 Dockerfile - uselagoon/solr-9
          "},{"location":"ja/docker-images/solr/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          • 10-solr-port.sh\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001Solr\u30dd\u30fc\u30c8\u306e\u4fee\u6b63\u3068\u78ba\u8a8d\u3092\u884c\u3044\u307e\u3059\u3002
          • 20-solr-datadir.sh\u306f\u3001Solr\u306e\u8a2d\u5b9a\u304cLagoon\u306b\u9069\u5408\u3057\u3066\u3044\u308b\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9\u3092\u8a2d\u5b9a\u3057\u3001\u6b63\u3057\u3044\u30ed\u30c3\u30af\u30bf\u30a4\u30d7\u3092\u69cb\u6210\u3057\u307e\u3059\u3002
          "},{"location":"ja/docker-images/solr/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u4e00\u90e8\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3092\u901a\u3058\u3066\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e SOLR_JAVA_MEM 512M \u30c7\u30d5\u30a9\u30eb\u30c8\u306eJava HEAP\u30b5\u30a4\u30ba(\u4f8b. SOLR_JAVA_MEM=\"-Xms10g -Xmx10g\") SOLR_DATA_DIR /var/solr Solr\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3002\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u3068\u30c7\u30fc\u30bf\u304c\u5931\u308f\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff01 SOLR_COPY_DATA_DIR_SOURCE (\u8a2d\u5b9a\u306a\u3057) \u8d77\u52d5\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u5b9a\u7fa9\u6e08\u307f\u306eSOLR_DATA_DIR\u306b\u30b3\u30d4\u30fc\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u3067\u3059\u3002\u65e2\u5b58\u306e\u30b3\u30a2\u3092\u4f7f\u3063\u3066 Solr \u3092\u4e8b\u524d\u306b\u8a2d\u5b9a\u3057\u3066\u304a\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30b9\u30af\u30ea\u30d7\u30c8\u306f\u5b9f\u969b\u306e Solr \u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u30b3\u30d4\u30fc\u306f\u3001\u5b9b\u5148\u306b Solr \u30b3\u30a2\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u307f\u884c\u308f\u308c\u307e\u3059\u3002"},{"location":"ja/docker-images/varnish/","title":"Varnish","text":"

          Lagoon\u306e Varnish\u30a4\u30e1\u30fc\u30b8Dockerfile\u3067\u3059\u3002 \u516c\u5f0f Varnish\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30d9\u30fc\u30b9\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/docker-images/varnish/#supported-versions","title":"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3","text":"
          • 5(\u4e92\u63db\u6027\u306e\u305f\u3081\u306e\u307f\u5229\u7528\u53ef\u80fd\u3001\u516c\u5f0f\u30b5\u30dd\u30fc\u30c8\u306f\u7d42\u4e86\u3057\u3066\u3044\u307e\u3059)- uselagoon/varnish-5
          • 6.0 LTS Dockerfile - uselagoon/varnish-6
          • 7 Dockerfile - uselagoon/varnish-7
          "},{"location":"ja/docker-images/varnish/#included-varnish-modules","title":"Varnish\u30e2\u30b8\u30e5\u30fc\u30eb","text":"
          • vbox-dynamic - DNS \u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u3068 SRV \u30ec\u30b3\u30fc\u30c9\u304b\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u691c\u51fa\u306b\u3088\u308b\u30c0\u30a4\u30ca\u30df\u30c3\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9
          • vbox-bodyaccess - \u30ea\u30af\u30a8\u30b9\u30c8\u30dc\u30c7\u30a3\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b Varnish vmod
          "},{"location":"ja/docker-images/varnish/#lagoon-adaptions","title":"Lagoon\u306e\u9069\u5fdc","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306fLagoon\u3067\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u6e96\u5099\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059:

          • \u30d5\u30a9\u30eb\u30c0\u306e\u6a29\u9650\u306f\u3001fix-permissions\u3067\u81ea\u52d5\u7684\u306b\u9069\u5fdc\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u30e9\u30f3\u30c0\u30e0\u306a\u30e6\u30fc\u30b6\u30fc\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002
          "},{"location":"ja/docker-images/varnish/#included-defaultvcl-configuration-file","title":"default.vcl \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

          \u3053\u306e\u30a4\u30e1\u30fc\u30b8\u306b\u306f\u3001Lagoon\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3055\u308c\u305f\u30c7\u30d5\u30a9\u30eb\u30c8\u306evcl\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059(\u74b0\u5883\u5909\u6570\u3092\u53c2\u7167\u3057\u3066\u4e0b\u3055\u3044)\u3002

          "},{"location":"ja/docker-images/varnish/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

          \u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u74b0\u5883\u5909\u6570\u3067\u8a2d\u5b9a\u53ef\u80fd\u3067\u3059\u3002

          \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e VARNISH_BACKEND_HOST NGINX \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30db\u30b9\u30c8 VARNISH_BACKEND_PORT 8080 \u30c7\u30d5\u30a9\u30eb\u30c8\u306eVarnish\u30dd\u30fc\u30c8 VARNISH_SECRET lagoon_default_secret \u7ba1\u7406\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308bVarnish\u30b7\u30fc\u30af\u30ec\u30c3\u30c8 LIBVMOD_DYNAMIC_VERSION 5.2 vmod-dynamic\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3 LIBVMOD_BODYACCESS_VERSION 5.0 vmod-bodyaccess\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3 HTTP_RESP_HDR_LEN 8k \u4efb\u610f\u306eHTTP\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30ec\u30b9\u30dd\u30f3\u30b9\u30d8\u30c3\u30c0\u306e\u6700\u5927\u9577 HTTP_RESP_SIZE 32k \u51e6\u7406\u53ef\u80fd\u306aHTTP\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6700\u5927\u30d0\u30a4\u30c8\u6570 NUKE_LIMIT 150 \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30dc\u30c7\u30a3\u306e\u305f\u3081\u306e\u7a7a\u304d\u3092\u4f5c\u308b\u305f\u3081\u306b\u524a\u9664\u3092\u8a66\u307f\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u6700\u5927\u6570 CACHE_TYPE malloc varnish\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30bf\u30a4\u30d7 CACHE_SIZE 100M \u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30a4\u30ba LISTEN 8080 \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30b5\u30fc\u30d0\u30fc\u30dd\u30fc\u30c8 MANAGEMENT_LISTEN 6082 \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u7ba1\u7406\u30ea\u30b9\u30cb\u30f3\u30b0\u30dd\u30fc\u30c8"},{"location":"ja/installing-lagoon/add-group/","title":"\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0","text":"\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
            lagoon add group -N groupname\n
          "},{"location":"ja/installing-lagoon/add-project/","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8ffd\u52a0","text":""},{"location":"ja/installing-lagoon/add-project/#lagoon","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092Lagoon\u306b\u8ffd\u52a0\u3059\u308b","text":"
          1. \u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8ffd\u52a0
            lagoon add project \\\n--gitUrl <YOUR-GITHUB-REPO-URL> \\\n--openshift 1 \\\n--productionEnvironment <YOUR-PROD-ENV> \\\n--branches <THE-BRANCHES-YOU-WANT-TO-DEPLOY> \\\n--project <YOUR-PROJECT-NAME>\n
            • --openshift\u306e\u5024\u306f\u3001\u3042\u306a\u305f\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u306eID\u3067\u3059\u3002
            • \u672c\u756a\u74b0\u5883\u306f\u3001\u672c\u756a\u74b0\u5883\u3068\u3057\u3066\u4f7f\u7528\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002
            • \u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u306f\u3001\u6b21\u306e\u3088\u3046\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059:\u201c^(main|develop)$\u201d
            • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u306f\u4f55\u3067\u3082\u826f\u3044 - \u201c\u4f1a\u793e\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8,\u201d \u201c\u4f8b,\u201d \u306a\u3069\u3067\u3059\u3002
          2. Lagoon UI\u306b\u79fb\u52d5\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u30ea\u30b9\u30c8\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3059\uff01

          "},{"location":"ja/installing-lagoon/add-project/#git","title":"\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8ffd\u52a0\u3059\u308b","text":"

          Lagoon\u306f\u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3068\u3057\u3066\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001Lagoon\u304c\u30b3\u30fc\u30c9\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          1. \u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ad\u30fc\u306e\u53d6\u5f97
            lagoon get project-key --project <YOUR-PROJECT-NAME>\n
          2. \u30ad\u30fc\u3092\u30b3\u30d4\u30fc\u3057\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\u3002

          GitHub GitLab Bitbucket

          "},{"location":"ja/installing-lagoon/add-project/#gitwebhooks","title":"Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306bwebhooks\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u8ffd\u52a0\u3059\u308b","text":"

          Lagoon\u304c\u30b3\u30fc\u30c9\u306e\u66f4\u65b0\u6642\u306b\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u308b\u3088\u3046\u306b\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u63a5\u7d9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          1. Lagoon\u30af\u30e9\u30b9\u30bf\u306ewebhook\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002

            • \u30da\u30a4\u30ed\u30fc\u30c9URL: <LAGOON-WEBHOOK-INGRESS>
            • \u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30a4\u30d7: JSON
            • \u30a2\u30af\u30c6\u30a3\u30d6: \u30a2\u30af\u30c6\u30a3\u30d6(\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u6709\u52b9/\u7121\u52b9\u3092\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059)
            • \u30a4\u30d9\u30f3\u30c8: \u95a2\u9023\u3059\u308b\u30a4\u30d9\u30f3\u30c8\u3092\u9078\u629e\u3059\u308b\u304b\u3001\u5168\u3066\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u901a\u5e38\u306f\u30d7\u30c3\u30b7\u30e5\u3001\u30d6\u30e9\u30f3\u30c1\u306e\u4f5c\u6210/\u524a\u9664\u304c\u5fc5\u8981\u3067\u3059

          GitHub GitLab Bitbucket

          "},{"location":"ja/installing-lagoon/create-user/","title":"Lagoon\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210","text":"
          1. Lagoon CLI\u3092\u4f7f\u3063\u3066\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059:

            \u30e6\u30fc\u30b6\u30fc\u306e\u8ffd\u52a0
            lagoon add user --email user@example.com --firstName MyFirstName --lastName MyLastName\n
          2. \u3042\u306a\u305f\u306e\u30e1\u30fc\u30eb\u306b\u79fb\u52d5\u3057\u3001\u30e1\u30fc\u30eb\u5185\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002

          3. \u6307\u793a\u306b\u5f93\u3063\u3066\u4f5c\u6210\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3067Lagoon UI\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3059\u3002
          4. \u30e6\u30fc\u30b6\u30fc\u306eSSH\u516c\u958b\u9375\u3092\u8a2d\u5b9a\u304b\u3089\u8ffd\u52a0\u3057\u307e\u3059\u3002
          "},{"location":"ja/installing-lagoon/deploy-project/","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b","text":"
          1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

            \u30c7\u30d7\u30ed\u30a4
            lagoon deploy branch -p <\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d> -b <\u3042\u306a\u305f\u306e\u30d6\u30e9\u30f3\u30c1\u540d>\n
          2. Lagoon\u306eUI\u306b\u79fb\u52d5\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044 - \u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u74b0\u5883\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3059\uff01

          3. \u30af\u30e9\u30b9\u30bf\u5185\u306ePods\u30ea\u30b9\u30c8\u3092\u78ba\u8a8d\u3057\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u305f\u308a\u3001\u30b5\u30fc\u30d3\u30b9\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u305f\u308a\u3059\u308b\u30d3\u30eb\u30c9Pod\u304c\u898b\u3048\u308b\u306f\u305a\u3067\u3059\u3002\u5168\u3066\u306epods\u3092\u898b\u308b
            kubectl get pods --all-namespaces | grep lagoon-build\n
          "},{"location":"ja/installing-lagoon/gitlab/","title":"GitLab","text":"

          *\u307b\u3068\u3093\u3069\u306e*\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u3053\u308c\u306fLagoon\u3068GitLab\u3092\u30e6\u30fc\u30b6\u30fc\u304a\u3088\u3073\u30b0\u30eb\u30fc\u30d7\u8a8d\u8a3c\u306e\u305f\u3081\u306b\u7d71\u5408\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          1. \u7ba1\u7406\u8005\u6a29\u9650\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u306eGitLab\u3067\u30d1\u30fc\u30bd\u30ca\u30eb\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
          2. your-gitlab.com/admin/hooks \u306e\u4e0b\u306b\u30b7\u30b9\u30c6\u30e0\u30d5\u30c3\u30af\u3092\u4f5c\u6210\u3057\u3001webhookhandler.lagoon.example.com \u306b\u30dd\u30a4\u30f3\u30c8\u3057\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u79d8\u5bc6\u306e\u30c8\u30fc\u30af\u30f3\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002
            1. \u300c\u30ea\u30dd\u30b8\u30c8\u30ea\u66f4\u65b0\u30a4\u30d9\u30f3\u30c8\u300d\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002
          3. lagoon-core-values.yml\u3092\u66f4\u65b0\u3057\u307e\u3059:

            lagoon-core-values.yml
            api:\nadditionalEnvs:\nGITLAB_API_HOST: <<GitLab\u306eURL \u4f8b: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << API\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6301\u3064\u30d1\u30fc\u30bd\u30ca\u30eb\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3 >>\nGITLAB_SYSTEM_HOOK_TOKEN: << \u30b7\u30b9\u30c6\u30e0\u30d5\u30c3\u30af\u79d8\u5bc6\u30c8\u30fc\u30af\u30f3 >>\nwebhook-haondler:\nadditionalEnvs:\nGITLAB_API_HOST: <<GitLab\u306eURL \u4f8b: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << API\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6301\u3064\u30d1\u30fc\u30bd\u30ca\u30eb\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3 >>\nGITLAB_SYSTEM_HOOK_TOKEN: << \u30b7\u30b9\u30c6\u30e0\u30d5\u30c3\u30af\u79d8\u5bc6\u30c8\u30fc\u30af\u30f3 >>\nwebhooks2tasks:\nadditionalEnvs:\nGITLAB_API_HOST: <<GitLab\u306eURL \u4f8b: https://your-gitlab.com>>\nGITLAB_API_TOKEN: << Personal API\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6301\u3064\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3 >>\nGITLAB_SYSTEM_HOOK_TOKEN: << \u30b7\u30b9\u30c6\u30e0\u30d5\u30c3\u30af\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30c8\u30fc\u30af\u30f3 >>\n
          4. lagoon-core helmchart\u3092Helm\u3067\u66f4\u65b0\u3057\u307e\u3059\u3002

          5. \u3059\u3067\u306bKeycloak\u306b\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u305d\u308c\u3089\u3092\u524a\u9664\u3057\u307e\u3059\u3002
          6. API\u30dd\u30c3\u30c9\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:GitLab\u3068\u540c\u671f
              yarn sync:gitlab:all\n
          "},{"location":"ja/installing-lagoon/install-harbor/","title":"Harbor\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"
          1. Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0\u3057\u307e\u3059:

            Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0
            helm repo add harbor https://helm.goharbor.io\n
          2. \u3042\u306a\u305f\u306e\u7279\u5b9a\u306e\u72b6\u6cc1\u306b\u6700\u9069\u306aHarbor\u306e\u8a2d\u5b9a\u3092\u8003\u616e\u3057\u3066\u304f\u3060\u3055\u3044 - \u8a73\u7d30\u306a\u63a8\u5968\u4e8b\u9805\u306b\u3064\u3044\u3066\u306f\u5f7c\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:

            1. \u753b\u50cf\u306eblob(imageChartStorage)\u306b\u306fS3\u4e92\u63db\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002
            2. Postgres\u30b5\u30fc\u30d3\u30b9(database.type)\u306b\u306f\u30de\u30cd\u30fc\u30b8\u30c9\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002
            3. \u9ad8\u8ca0\u8377\u30b7\u30ca\u30ea\u30aa\u3067\u306f\u3001\u30de\u30cd\u30fc\u30b8\u30c9Redis\u30b5\u30fc\u30d3\u30b9(redis.type)\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002
          3. \u8a2d\u5b9a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306bharbor-values.yml\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30d7\u30ed\u30ad\u30b7\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u6ce8\u91c8\u306f\u5927\u304d\u306a\u753b\u50cf\u306e\u30d7\u30c3\u30b7\u30e5\u306b\u5f79\u7acb\u3061\u307e\u3059:

            harbor-values.yml
            expose:\ningress:\nannotations:\nkubernetes.io/tls-acme: \"true\"\nnginx.ingress.kubernetes.io/proxy-buffering: \"off\"\nnginx.ingress.kubernetes.io/proxy-request-buffering: \"off\"\nhosts:\ncore: harbor.lagoon.example.com\ntls:\nenabled: true\ncertSource: secret\nsecret:\nsecretName: harbor-harbor-ingress\nexternalURL: https://harbor.lagoon.example.com\nharborAdminPassword: <\u3042\u306a\u305f\u306eHarbor\u7ba1\u7406\u8005\u30d1\u30b9\u30ef\u30fc\u30c9>\nchartmuseum:\nenabled: false\nclair:\nenabled: false\nnotary:\nenabled: false\ntrivy:\nenabled: false\njobservice:\njobLogger: stdout\n
          4. \u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308bHarbor\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u8981\u4ef6\u3092\u78ba\u8a8d\u3057\u306a\u304c\u3089\u3001Harbor\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002

            Harbor\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
            helm upgrade --install --create-namespace \\\n--namespace harbor --wait \\\n-f harbor-values.yml \\\nharbor harbor/harbor\n
          5. harbor.yml\u3067\u8a2d\u5b9a\u3057\u305fURL\u3067Harbor\u3092\u8a2a\u308c\u307e\u3059\u3002

            1. \u30e6\u30fc\u30b6\u30fc\u540d:admin
            2. \u30d1\u30b9\u30ef\u30fc\u30c9:
            Harbor\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u53d6\u5f97
            kubectl -n harbor get secret harbor-core -o jsonpath=\"{.data.HARBOR_ADMIN_PASSWORD}\" | base64 --decode\n
          6. \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306eLagoon Remote values.yml\u3068harbor-values.yml\u306b\u4e0a\u8a18\u306eHarbor\u306e\u8cc7\u683c\u60c5\u5831\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          "},{"location":"ja/installing-lagoon/install-lagoon-remote/","title":"Lagoon Remote\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

          \u6b21\u306b\u3001Lagoon Remote\u3092Lagoon\u540d\u524d\u7a7a\u9593\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002RabbitMQ\u30b5\u30fc\u30d3\u30b9\u304c\u30d6\u30ed\u30fc\u30ab\u30fc\u3068\u306a\u308a\u307e\u3059\u3002

          1. \u524d\u306e\u4e8c\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u540c\u69d8\u306b\u3001\u8a2d\u5b9a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306blagoon-remote-values.yml\u3092\u4f5c\u6210\u3057\u3001\u5024\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002

            • rabbitMQPassword
            RabbitMQ password\u3092\u53d6\u5f97
            kubectl -n lagoon-core get secret lagoon-core-broker -o jsonpath=\"{.data.RABBITMQ_PASSWORD}\" | base64 --decode\n
            • rabbitMQHostname
            lagoon-remote-values.yml
            lagoon-core-broker.lagoon-core.svc.local\n
            • taskSSHHost
            SSH Host\u3092\u66f4\u65b0
            kubectl get service lagoon-core-broker-amqp-ext \\\n-o custom-columns=\"NAME:.metadata.name,IP ADDRESS:.status.loadBalancer.ingress[*].ip,HOSTNAME:.status.loadBalancer.ingress[*].hostname\"\n
            • harbor-password
            Harbor secret\u3092\u53d6\u5f97
            kubectl -n harbor get secret harbor-harbor-core -o jsonpath=\"{.data.HARBOR_ADMIN_PASSWORD}\" | base64 --decode\n
          2. Harbor\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u30b9\u30c6\u30c3\u30d7\u304b\u3089Harbor\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

            lagoon-remote-values.yml
            lagoon-build-deploy:\nenabled: true\nextraArgs:\n- \"--enable-harbor=true\"\n- \"--harbor-url=https://harbor.lagoon.example.com\"\n- \"--harbor-api=https://harbor.lagoon.example.com/api/\"\n- \"--harbor-username=admin\"\n- \"--harbor-password=<from harbor-harbor-core secret>\"\nrabbitMQUsername: lagoon\nrabbitMQPassword: <from lagoon-core-broker secret>\nrabbitMQHostname: lagoon-core-broker.lagoon-core.svc.cluster.local\nlagoonTargetName: <name of lagoon remote, can be anything>\ntaskSSHHost: <IP of ssh service loadbalancer>\ntaskSSHPort: \"22\"\ntaskAPIHost: \"api.lagoon.example.com\"\ndbaas-operator:\nenabled: true\nmariadbProviders:\nproduction:\nenvironment: production\nhostname: 172.17.0.1.nip.io\nreadReplicaHostnames:\n- 172.17.0.1.nip.io\npassword: password\nport: '3306'\nuser: root\ndevelopment:\nenvironment: development\nhostname: 172.17.0.1.nip.io\nreadReplicaHostnames:\n- 172.17.0.1.nip.io\npassword: password\nport: '3306'\nuser: root\n
          3. ssh-core service account

          4. Lagoon Remote\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b:

            Lagoon remote\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
            helm upgrade --install --create-namespace \\\n--namespace lagoon \\\n-f lagoon-remote-values.yml \\\nlagoon-remote lagoon/lagoon-remote\n
          "},{"location":"ja/installing-lagoon/lagoon-backups/","title":"Lagoon\u30d0\u30c3\u30af\u30a2\u30c3\u30d7","text":"

          Lagoon\u306f\u3001K8up\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059:https://k8up.io\u3002Lagoon\u306fK8up\u3068\u5bc6\u63a5\u306b\u7d71\u5408\u3055\u308c\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3080\u3057\u308d\u3001Lagoon\u306f\u305d\u306e\u30ea\u30bd\u30fc\u30b9\u3092K8up\u304c\u81ea\u52d5\u7684\u306b\u767a\u898b\u3057\u3066\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3067\u304d\u308b\u3088\u3046\u306b\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002

          Lagoon\u306fK8up 1.x\u3068\u5e83\u7bc4\u306b\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u307e\u30602.x\u3068\u306f\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u30021.1.0\u30c1\u30e3\u30fc\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3(\u30a2\u30d7\u30ea\u30d0\u30fc\u30b8\u30e7\u30f3v1.2.0)\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u307e\u3059\u3002

          1. \u30dd\u30ea\u30b7\u30fc\u3092\u6301\u3064\u65b0\u3057\u3044AWS\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

            example K8up IAM user
            {\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Sid\":\"VisualEditor0\",\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:ListAllMyBuckets\",\n\"s3:CreateBucket\",\n\"s3:GetBucketLocation\"\n],\n\"Resource\":\"*\"\n},\n{\n\"Sid\":\"VisualEditor1\",\n\"Effect\":\"Allow\",\n\"Action\":\"s3:ListBucket\",\n\"Resource\":\"arn:aws:s3:::baas-*\"\n},\n{\n\"Sid\":\"VisualEditor2\",\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\"\n],\n\"Resource\":\"arn:aws:s3:::baas-*/*\"\n}\n]\n}\n
          2. \u3042\u306a\u305f\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306b\u5408\u308f\u305b\u3066k8up-values.yml\u3092\u4f5c\u6210\u3057\u307e\u3059:

            k8up-values.yml
            k8up:\nenvVars:\n- name: BACKUP_GLOBALS3ENDPOINT\nvalue: 'https://s3.eu-west-1.amazonaws.com'\n- name: BACKUP_GLOBALS3BUCKET\nvalue: ''\n- name: BACKUP_GLOBALKEEPJOBS\nvalue: '1'\n- name: BACKUP_GLOBALSTATSURL\nvalue: 'https://backup.lagoon.example.com'\n- name: BACKUP_GLOBALACCESSKEYID\nvalue: ''\n- name: BACKUP_GLOBALSECRETACCESSKEY\nvalue: ''\n- name: BACKUP_BACKOFFLIMIT\nvalue: '2'\n- name: BACKUP_GLOBALRESTORES3BUCKET\nvalue: ''\n- name: BACKUP_GLOBALRESTORES3ENDPOINT\nvalue: 'https://s3.eu-west-1.amazonaws.com'\n- name: BACKUP_GLOBALRESTORES3ACCESSKEYID\nvalue: ''\n- name: BACKUP_GLOBALRESTORES3SECRETACCESSKEY\nvalue: ''\ntimezone: Europe/Zurich\n
          3. K8up\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb:

            K8up\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u30b9\u30c6\u30c3\u30d71
            helm repo add appuio https://charts.appuio.ch\n
            K8up\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u30b9\u30c6\u30c3\u30d7 2
            kubectl apply -f https://github.com/vshn/k8up/releases/download/v1.2.0/k8up-crd.yaml\n
            K8up\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u30b9\u30c6\u30c3\u30d73
            helm upgrade --install --create-namespace \\\n--namespace k8up \\\n-f k8up-values.yaml \\\n--version 1.1.0 \\\nk8up appuio/k8up\n
          4. lagoon-core-values.yml\u3092\u66f4\u65b0\u3057\u307e\u3059:

            lagoon-core-values.yml
            s3BAASAccessKeyID: <<Access Key ID for restore bucket>>\ns3BAASSecretAccessKey: <<Access Key Secret for restore bucket>>\n
          5. lagoon-core\u3092\u518d\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002

          "},{"location":"ja/installing-lagoon/lagoon-cli/","title":"Lagoon CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"
          1. \u3042\u306a\u305f\u306e\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306b\u5bfe\u5fdc\u3059\u308b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001https://github.com/uselagoon/lagoon-cli#install\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002macOS\u3068Linux\u3067\u306f\u3001Homebrew\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
            1. brew tap uselagoon/lagoon-cli
            2. brew install lagoon
          2. CLI\u306fLagoon\u3068\u3069\u306e\u3088\u3046\u306b\u901a\u4fe1\u3059\u308b\u304b\u3092\u77e5\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

            Lagoon config
                lagoon config add \\\n--graphql https://YOUR-API-URL/graphql \\\n--ui https://YOUR-UI-URL \\\n--hostname YOUR.SSH.IP \\\n--lagoon YOUR-LAGOON-NAME \\\n--port 22\n
          3. SSH\u30ad\u30fc\u3067\u8a8d\u8a3c\u3057\u3066Lagoon\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002

            1. Lagoon UI(URL\u306fvalues.yml\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059)\u306b\u79fb\u52d5\u3057\u3001\u8a2d\u5b9a\u306b\u9032\u307f\u307e\u3059\u3002
            2. \u516c\u958bSSH\u30ad\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002
            3. amazee.io\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u4f7f\u7528\u3057\u3088\u3046\u3068\u3059\u308b\u306e\u3092\u9632\u3050\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306eLagoon\u3092_\u3042\u306a\u305f\u306e_ Lagoon\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

              Lagoon config
                  lagoon config default --lagoon <YOUR-LAGOON-NAME>\n
          4. lagoon login\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002Lagoon\u306fSSH\u306b\u63a5\u7d9a\u3057\u3001\u516c\u958b/\u79d8\u5bc6\u30ad\u30fc\u30da\u30a2\u306b\u5bfe\u3057\u3066\u8a8d\u8a3c\u3092\u884c\u3044\u3001\u30e6\u30fc\u30b6\u30fc\u540d\u306e\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002

          5. lagoon whoami\u3092\u901a\u3058\u3066\u691c\u8a3c\u3057\u307e\u3059\u3002\u305d\u308c\u304c \u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u307e\u3059\u3002

          \u60c5\u5831

          \u4e00\u822c\u7684\u306b\u306fLagoon\u7ba1\u7406\u8005\u30ed\u30fc\u30eb\u306e\u4f7f\u7528\u3092\u63a8\u5968\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u6700\u521d\u306b\u59cb\u3081\u308b\u305f\u3081\u306b\u306f\u7ba1\u7406\u8005\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u7406\u60f3\u7684\u306b\u306f\u3001\u7ba1\u7406\u8005\u3067\u306f_\u306a\u3044_\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u3059\u3050\u306b\u4f5c\u6210\u3057\u3066\u4f5c\u696d\u3092\u884c\u3044\u307e\u3059\u3002

          "},{"location":"ja/installing-lagoon/lagoon-core/","title":"Lagoon Core\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":""},{"location":"ja/installing-lagoon/lagoon-core/#install-the-helm-chart","title":"Helm\u30c1\u30e3\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"
          1. Lagoon Charts\u30ea\u30dd\u30b8\u30c8\u30ea\u3092Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8ffd\u52a0\u3057\u307e\u3059:

            Lagoon Charts\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8ffd\u52a0
            helm repo add lagoon https://uselagoon.github.io/lagoon-charts/\n
          2. \u4f5c\u6210\u3059\u308b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002values.yml\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3067\u3053\u306e\u30d1\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          3. \u4f5c\u6210\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306bvalues.yml\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u3092\u66f4\u65b0\u3057\u307e\u3059(\u305d\u308c\u3089\u3092api.lagoon.example.com\u304b\u3089\u3042\u306a\u305f\u306e\u5024\u306b\u5909\u66f4\u3057\u307e\u3059)\u3002 \u4f8b: https://github.com/uselagoon/lagoon-charts/blob/main/charts/lagoon-core/ci/linter-values.yaml
          4. \u6b21\u306b\u3001values.yml\u3092\u6307\u5b9a\u3057\u3066helm upgrade --install\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059:

            values.yml\u3092\u4f7f\u7528\u3057\u3066Helm\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9
            helm upgrade --install --create-namespace --namespace lagoon-core -f values.yml lagoon-core lagoon/lagoon-core`\n
          5. Lagoon Core\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3057\u305f\uff01

          \u8b66\u544a

          \u6642\u3005\u3001Docker Hub\u306e\u30d7\u30eb\u5236\u9650\u306b\u906d\u9047\u3057\u307e\u3059\u3002\u3053\u308c\u304c\u7d9a\u304f\u5834\u5408\u306f\u3001\u79c1\u305f\u3061\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4ed6\u306e\u5834\u6240\u306b\u79fb\u52d5\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u3044\u307e\u3059\u3002

          "},{"location":"ja/installing-lagoon/lagoon-core/#configure-keycloak","title":"Keycloak \u3092\u69cb\u6210\u3059\u308b","text":"

          Keycloak \u306e values.yml \u3067\u5b9a\u7fa9\u3057\u305f URL \u3067 Keycloak \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002

          1. \u300c\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
          2. \u30e6\u30fc\u30b6\u30fc\u540d: admin
          3. \u30d1\u30b9\u30ef\u30fc\u30c9: lagoon-core-keycloak \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3001\u30ad\u30fc\u5024 KEYCLOAK_ADMIN_PASSWORD \u3092\u4f7f\u7528\u3057\u307e\u3059
          4. \u6b21\u306e\u3088\u3046\u306b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u53d6\u5f97\u3057\u307e\u3059: \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u53d6\u5f97
            kubectl -n lagoon-core get secret lagoon-core-keycloak -o jsonpath=\"{.data.KEYCLOAK_ADMIN_PASSWORD}\" | base64 --decode\n
          5. \u53f3\u4e0a\u306e \u30e6\u30fc\u30b6\u30fc \u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002

            1. \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u7ba1\u7406 \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002

            2. \u4f5c\u6210\u3057\u305f\u7ba1\u7406\u8005\u30a2\u30ab\u30a6\u30f3\u30c8\u306e \u30e1\u30fc\u30eb \u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

            3. \u4fdd\u5b58\u3057\u307e\u3059\u3002

          6. Realm Lagoon -> Realm Settings -> Email \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002

            1. Keycloak \u306e\u30e1\u30fc\u30eb \u30b5\u30fc\u30d0\u30fc\u3092\u8a2d\u5b9a\u3057\u3001\u300cTest connection\u300d\u30dc\u30bf\u30f3\u3067\u63a5\u7d9a\u3092\u30c6\u30b9\u30c8\u3057\u307e\u3059\u3002

          7. Realm Lagoon -> Realm Settings -> Login \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002

            1. \u300cForgot Password\u300d\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002

            2. \u4fdd\u5b58\u3057\u307e\u3059\u3002

          "},{"location":"ja/installing-lagoon/lagoon-core/#log-in-to-the-ui","title":"UI \u306b\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3059\u3002","text":"

          \u3053\u308c\u3067\u3001UI \u306e values.yml \u3067\u5b9a\u7fa9\u3057\u305f URL \u3067 Lagoon UI \u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002

          1. \u30e6\u30fc\u30b6\u30fc\u540d: lagoonadmin
          2. \u30b7\u30fc\u30af\u30ec\u30c3\u30c8: lagoon-core-keycloak \u30b7\u30fc\u30af\u30ec\u30c3\u30c8 \u30ad\u30fc\u5024: LAGOON-CORE-KEYCLOAK \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
          3. \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002 \u79d8\u5bc6\u3092\u53d6\u5f97\u3059\u308b
                kubectl -n lagoon-core get secret lagoon-core-keycloak -o jsonpath=\"{.data.KEYCLOAK_LAGOON_ADMIN_PASSWORD}\" | base64 --decode\n
          "},{"location":"ja/installing-lagoon/lagoon-files/","title":"Lagoon\u30d5\u30a1\u30a4\u30eb","text":"

          Lagoon\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306a\u3069\u306e\u30bf\u30b9\u30af\u306e\u30d5\u30a1\u30a4\u30eb\u51fa\u529b\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u3001S3\u4e92\u63db\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u30db\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002

          1. \u30dd\u30ea\u30b7\u30fc\u3092\u6301\u3064\u65b0\u3057\u3044AWS\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059:

            \u4f8b:\u30d5\u30a1\u30a4\u30ebIAM\u30e6\u30fc\u30b6\u30fc
            {\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:ListBucket\",\n\"s3:GetBucketLocation\",\n\"s3:ListBucketMultipartUploads\"\n],\n\"Resource\":\"arn:aws:s3:::S3_BUCKET_NAME\"\n},\n{\n\"Effect\":\"Allow\",\n\"Action\":[\n\"s3:PutObject\",\n\"s3:GetObject\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:AbortMultipartUpload\"\n],\n\"Resource\":\"arn:aws:s3:::S3_BUCKET_NAME/*\"\n}\n]\n}\n
          2. lagoon-core-values.yml\u3092\u66f4\u65b0\u3057\u307e\u3059:

            lagoon-core-values.yml
            s3FilesAccessKeyID: <<\u30a2\u30af\u30bb\u30b9\u30ad\u30fcID>>\ns3FilesBucket: <<Lagoon\u30d5\u30a1\u30a4\u30eb\u7528\u306e\u30d0\u30b1\u30c3\u30c8\u540d>>\ns3FilesHost: <<S3\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8(\u4f8b:\"https://s3.eu-west-1.amazonaws.com\")>>\ns3FilesSecretAccessKey: <<\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u30b7\u30fc\u30af\u30ec\u30c3\u30c8>>\ns3FilesRegion: <<S3\u30ea\u30fc\u30b8\u30e7\u30f3>>\n
          3. \u3082\u3057\u3082\u3042\u306a\u305f\u304c lagoon-core\u306e\u524d\u306bingress-nginx\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u63d0\u6848\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3088\u308a\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059:

            lagoon-core-values.yml
            controller:\nconfig:\nclient-body-timeout: '600' # \u6700\u5927600\u79d2\u306e\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\nproxy-send-timeout: '1800' # \u6700\u592730\u5206\u306e\u63a5\u7d9a - \u30a6\u30a7\u30d6\u30bd\u30b1\u30c3\u30c8\u306b\u5fc5\u8981\nproxy-read-timeout: '1800' # \u6700\u592730\u5206\u306e\u63a5\u7d9a - \u30a6\u30a7\u30d6\u30bd\u30b1\u30c3\u30c8\u306b\u5fc5\u8981\nproxy-body-size: 1024m # 1GB\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\nproxy-buffer-size: 64k # \u5927\u304d\u306a\u30d0\u30c3\u30d5\u30a1\n
          "},{"location":"ja/installing-lagoon/lagoon-logging/","title":"Lagoon\u30ed\u30ae\u30f3\u30b0","text":"

          Lagoon\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30b3\u30f3\u30c6\u30ca\u3001\u30eb\u30fc\u30bf\u30fc\u306e\u30ed\u30b0\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306bOpenSearch\u3068\u7d71\u5408\u3057\u307e\u3059\u3002Lagoon\u30ed\u30ae\u30f3\u30b0\u306f\u3001Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304b\u3089\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30eb\u30fc\u30bf\u30fc\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u30ed\u30b0\u3092\u53ce\u96c6\u3057\u3001\u305d\u308c\u3089\u3092\u30ed\u30b0\u96c6\u7d04\u5668\u306b\u9001\u4fe1\u3057\u307e\u3059\u3002\u305d\u308c\u306f\u5404lagoon-remote \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

          \u3055\u3089\u306b\u3001\u305d\u308c\u306flagoon-core\u30b5\u30fc\u30d3\u30b9\u304b\u3089\u30ed\u30b0\u3092\u53ce\u96c6\u3059\u308b\u305f\u3081\u306blagoon-core\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3079\u304d\u3067\u3059\u3002\u3053\u308c\u306fLagoonLogs\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

          \u30ed\u30ae\u30f3\u30b0\u6982\u8981:Lucid Chart

          \u53c2\u7167:Logging\u3002

          Lagoon\u30ed\u30ae\u30f3\u30b0\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044:https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logging

          1. lagoon-logging-values.yaml\u3092\u4f5c\u6210\u3057\u307e\u3059:

            lagoon-logging-values.yaml
            tls:\ncaCert: |\n<< content of ca.pem from Logs-Concentrator>>\nclientCert: |\n<< content of client.pem from Logs-Concentrator>>\nclientKey: |\n<< content of client-key.pem from Logs-Concentrator>>\nforward:\nusername: <<Username for Lagoon Remote 1>>\npassword: <<Password for Lagoon Remote 1>>\nhost: <<ExternalIP of Logs-Concentrator Service LoadBalancer>>\nhostName: <<Hostname in Server Cert of Logs-Concentrator>>\nhostPort: '24224'\nselfHostname: <<Hostname in Client Cert of Logs-Concentrator>>\nsharedKey: <<Generated ForwardSharedKey of Logs-Concentrator>>\ntlsVerifyHostname: false\nclusterName: <<Short Cluster Identifier>>\nlogsDispatcher:\nserviceMonitor:\nenabled: false\nlogging-operator:\nmonitoring:\nserviceMonitor:\nenabled: false\nlagoonLogs:\nenabled: true\nrabbitMQHost: lagoon-core-broker.lagoon-core.svc.cluster.local\nrabbitMQUser: lagoon\nrabbitMQPassword: <<RabbitMQ Lagoon Password>>\nexcludeNamespaces: {}\n
          2. lagoon-logging\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059:

            Install lagoon-logging
            helm repo add banzaicloud-stable https://kubernetes-charts.banzaicloud.com\n\nhelm upgrade --install --create-namespace \\\n--namespace lagoon-logging \\\n-f lagoon-logging-values.yaml \\\nlagoon-logging lagoon/lagoon-logging\n
          "},{"location":"ja/installing-lagoon/lagoon-logging/#logging-nginx-in-gress","title":"Logging NGINX In gress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9","text":"

          lagoon-logging\u5185\u306eingress-nginx\u304b\u3089\u30ed\u30b0\u304c\u5fc5\u8981\u306a\u5834\u5408:

          1. ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306fingress-nginx\u3068\u3044\u3046\u540d\u524d\u7a7a\u9593\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093
          2. \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092ingress-nginx\u306b\u8ffd\u52a0\u3057\u307e\u3059:

            ingress-nginx log-format-upstream
            controller:\nconfig:\nlog-format-upstream: >-\n{\n\"time\": \"$time_iso8601\",\n\"remote_addr\": \"$remote_addr\",\n\"x-forwarded-for\": \"$http_x_forwarded_for\",\n\"true-client-ip\": \"$http_true_client_ip\",\n\"req_id\": \"$req_id\",\n\"remote_user\": \"$remote_user\",\n\"bytes_sent\": $bytes_sent,\n\"request_time\": $request_time,\n\"status\": \"$status\",\n\"host\": \"$host\",\n\"request_proto\": \"$server_protocol\",\n\"request_uri\": \"$uri\",\n\"request_query\": \"$args\",\n\"request_length\": $request_length,\n\"request_time\": $request_time,\n\"request_method\": \"$request_method\",\n\"http_referer\": \"$http_referer\",\n\"http_user_agent\": \"$http_user_agent\",\n\"namespace\": \"$namespace\",\n\"ingress_name\": \"$ingress_name\",\n\"service_name\": \"$service_name\",\n\"service_port\": \"$service_port\"\n}\n
          3. \u3042\u306a\u305f\u306e\u30ed\u30b0\u304c\u6d41\u308c\u59cb\u3081\u308b\u306f\u305a\u3067\u3059\uff01

          "},{"location":"ja/installing-lagoon/logs-concentrator/","title":"\u30ed\u30b0\u96c6\u7d04\u5668","text":"

          \u30ed\u30b0\u96c6\u7d04\u5668\u306f\u3001Lagoon\u30af\u30e9\u30b9\u30bf\u304b\u3089\u9001\u4fe1\u3055\u308c\u308b\u30ed\u30b0\u3092\u53ce\u96c6\u3057\u3001\u305d\u308c\u3089\u306b\u8ffd\u52a0\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u4ed8\u52a0\u3057\u3066\u304b\u3089Elasticsearch\u306b\u633f\u5165\u3057\u307e\u3059\u3002

          1. ReadMe\u306b\u5f93\u3063\u3066\u8a3c\u660e\u66f8\u3092\u4f5c\u6210\u3057\u307e\u3059:https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logs-concentrator
          2. logs-concentrator-values.yml\u3092\u4f5c\u6210\u3057\u307e\u3059:

            logs-concentrator-values.yml
            tls:\ncaCert: |\n<<ca.pem\u306e\u5185\u5bb9>>\nserverCert: |\n<<server.pem\u306e\u5185\u5bb9\nserverKey: |\n<<server-key.pem\u306e\u5185\u5bb9>>\nelasticsearchHost: elasticsearch-opendistro-es-client-service.elasticsearch.svc.cluster.local\nelasticsearchAdminPassword: <<ElasticSearch\u7ba1\u7406\u8005\u30d1\u30b9\u30ef\u30fc\u30c9>>\nforwardSharedKey: <<\u30e9\u30f3\u30c0\u30e0\u306a32\u6587\u5b57\u306e\u30d1\u30b9\u30ef\u30fc\u30c9>>\nusers:\n- username: <<Lagoon\u30ea\u30e2\u30fc\u30c81\u306e\u30e6\u30fc\u30b6\u30fc\u540d>>\npassword: <<Lagoon\u30ea\u30e2\u30fc\u30c81\u306e\u30e9\u30f3\u30c0\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9>>\nservice:\ntype: LoadBalancer\nserviceMonitor:\nenabled: false\n
          3. \u30ed\u30b0\u96c6\u7d04\u5668\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059:

            Install logs-concentrator

            helm upgrade --install --create-namespace ```\n--namespace lagoon-logs-concentrator \\\n-f logs-concentrator-values.yaml \\\nlagoon-logs-concentrator lagoon/lagoon-logs-concentrator\n
            \u3053\u306e\u30c6\u30ad\u30b9\u30c8\u306f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b3\u30fc\u30c9\u3067\u3042\u308a\u3001\u7279\u5b9a\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u4f9d\u5b58\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u7ffb\u8a33\u306f\u9069\u7528\u3055\u308c\u307e\u305b\u3093\u3002

          "},{"location":"ja/installing-lagoon/opendistro/","title":"OpenDistro","text":"

          OpenDistro\u30af\u30e9\u30b9\u30bf\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u3001Lagoon\u304c\u305d\u308c\u3068\u5b89\u5168\u306b\u901a\u4fe1\u3067\u304d\u308b\u3088\u3046\u306bTLS\u3068\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3044\u304f\u3064\u304b\u306eJSON\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - \u3053\u308c\u3089\u3092\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u30d7\u30ed\u30bb\u30b9\u5168\u4f53\u3092\u901a\u3058\u3066\u4f5c\u6210\u3057\u3066\u304d\u305f\u5024\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u540c\u3058\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u7f6e\u3044\u3066\u304f\u3060\u3055\u3044\u3002

          OpenDistro Helm\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://opendistro.github.io/for-elasticsearch-docs/docs/install/helm/\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

          "},{"location":"ja/installing-lagoon/opendistro/#_1","title":"\u30ad\u30fc\u3068\u8a3c\u660e\u66f8\u306e\u4f5c\u6210","text":"
          1. \u8a3c\u660e\u66f8\u306e\u751f\u6210

          \u6ce8\u610f:

          CFSSL\u306fCloudFlare\u306ePKI/TLS\u30b9\u30a4\u30b9\u30a2\u30fc\u30df\u30fc\u30ca\u30a4\u30d5\u3067\u3059\u3002\u3053\u308c\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u3067\u3042\u308a\u3001TLS\u8a3c\u660e\u66f8\u306e\u7f72\u540d\u3001\u691c\u8a3c\u3001\u30d0\u30f3\u30c9\u30eb\u5316\u3092\u884c\u3046HTTP API\u30b5\u30fc\u30d0\u3067\u3059\u3002\u30d3\u30eb\u30c9\u306b\u306fGo 1.12+\u304c\u5fc5\u8981\u3067\u3059\u3002

          1. CFSSL\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059: https://github.com/cloudflare/cfssl 2. CA\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059:

          ca-csr.json
          {\n\"CN\": \"ca.elasticsearch.svc.cluster.local\",\n\"hosts\": [\n\"ca.elasticsearch.svc.cluster.local\"\n],\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n},\n\"ca\": {\n\"expiry\": \"87600h\"\n}\n}\n
          1. \u6b21\u306e2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059 :

            \u8a3c\u660e\u66f8\u306e\u751f\u6210
            cfssl gencert -initca ca-csr.json | cfssljson -bare ca -\nrm ca.csr\n

            ca-key.pem\u3068ca.pem\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u304c\u3042\u306a\u305f\u306eCA\u30ad\u30fc\u3068\u81ea\u5df1\u7f72\u540d\u8a3c\u660e\u66f8\u3067\u3059\u3002

          2. \u6b21\u306b\u3001\u30ce\u30fc\u30c9\u306e\u30d4\u30fc\u30ea\u30f3\u30b0\u8a3c\u660e\u66f8\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u6b21\u306e2\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059:

            ca-config.json
            {\n\"signing\": {\n\"default\": {\n\"expiry\": \"87600h\"\n},\n\"profiles\": {\n\"peer\": {\n\"expiry\": \"87600h\",\n\"usages\": [\n\"signing\",\n\"key encipherment\",\n\"server auth\",\n\"client auth\"\n]\n},\n\"client\": {\n\"expiry\": \"87600h\",\n\"usages\": [\n\"signing\",\n\"key encipherment\",\n\"client auth\"\n]\n}\n}\n}\n}\n
            node.json
            {\n\"hosts\": [\n\"node.elasticsearch.svc.cluster.local\"\n],\n\"CN\": \"node.elasticsearch.svc.cluster.local\",\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n}\n}\n
          3. \u6b21\u306e2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

            \u8a3c\u660e\u66f8\u30ad\u30fc\u306e\u751f\u6210
            cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer node.json | cfssljson -bare node\nrm node.csr\n

            node.pem\u3068node-key.pem\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u304cES\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30ce\u30fc\u30c9\u3067\u4f7f\u7528\u3055\u308c\u308b\u30d4\u30a2\u8a3c\u660e\u66f8\u306b\u306a\u308a\u307e\u3059\u3002

          4. \u6b21\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30ad\u30fc\u3092Java\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u5f62\u5f0f\u306b\u5909\u63db\u3057\u307e\u3059:

            \u30ad\u30fc\u5f62\u5f0f\u306e\u5909\u63db
            openssl pkey -in node-key.pem -out node-key.pkcs8\n
          5. \u6b21\u306b\u3001\u7ba1\u7406\u8005\u8a3c\u660e\u66f8\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u6b21\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059:

            admin.json
            {\n\"CN\": \"admin.elasticsearch.svc.cluster.local\",\n\"key\": {\n\"algo\": \"ecdsa\",\n\"size\": 256\n}\n}\n
          6. \u6b21\u306e2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

            \u7ba1\u7406\u8005\u8a3c\u660e\u66f8\u30ad\u30fc\u306e\u751f\u6210
            cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client admin.json | cfssljson -bare admin\nrm admin.csr\n

            admin.pem\u3068admin-key.pem\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u304copendistro-security\u30d7\u30e9\u30b0\u30a4\u30f3\u3067\u7ba1\u7406\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u8a3c\u660e\u66f8\u306b\u306a\u308a\u307e\u3059\u3002

          7. \u6b21\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30ad\u30fc\u3092Java\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u5f62\u5f0f\u306b\u5909\u63db\u3057\u307e\u3059:

            \u30ad\u30fc\u5f62\u5f0f\u306e\u5909\u63db
            openssl pkey -in admin-key.pem -out admin-key.pkcs8\n
          "},{"location":"ja/installing-lagoon/opendistro/#opendistro_1","title":"OpenDistro\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

          \u30ad\u30fc\u3068\u8a3c\u660e\u66f8\u3092\u624b\u306b\u5165\u308c\u305f\u306e\u3067\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u7d9a\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

          1. \u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u751f\u6210\u3057\u307e\u3059\u3002

            1. elasticsearch-secrets-values.yaml\u306b\u306f2\u3064\u306e\u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u5fc5\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u305d\u308c\u3089\u3092\u4f5c\u6210\u3057\u307e\u3059(2\u56de\u5b9f\u884c\u3057\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3001\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u4e21\u65b9\u3092\u4fdd\u5b58\u3057\u307e\u3059)\u3002
            \u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u751f\u6210
            docker run --rm -it docker.io/amazon/opendistro-for-elasticsearch:1.12.0 sh -c \"chmod +x /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh; /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh\"\n
          2. secrets\u3092\u4f5c\u6210\u3057\u307e\u3059:

            1. elasticsearch-secrets-values.yaml\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306egist\u3092\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044:https://gist.github.com/Schnitzel/43f483dfe0b23ca0dddd939b12bb4b0b
          3. \u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067secrets\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059:

            secrets\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
            helm repo add incubator https://charts.helm.sh/incubator`\nhelm upgrade --namespace elasticsearch --create-namespace --install elasticsearch-secrets incubator/raw --values elasticsearch-secrets-values.yaml `\n
          4. \u3042\u306a\u305f\u306f\u5fc5\u8981\u3068\u3059\u308b\u3067\u3057\u3087\u3046 elasticsearch-values.yaml\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u4f8b\u3068\u3057\u3066\u3053\u306egist\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:(\u3059\u3079\u3066\u306e<\\>\u306b\u5024\u3092\u57cb\u3081\u3066\u304f\u3060\u3055\u3044)https://gist.github.com/Schnitzel/1e386654b6abf75bf4d66a544db4aa6a

          5. Elasticsearch\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb:

            Elasticsearch\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
            helm upgrade --namespace elasticsearch --create-namespace --install elasticsearch opendistro-es-X.Y.Z.tgz --values elasticsearch-values.yaml\n
          6. Elasticsearch\u5185\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u6b21\u306e\u3088\u3046\u306b\u8a2d\u5b9a:

            \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8a2d\u5b9a
            kubectl exec -n elasticsearch -it elasticsearch-opendistro-es-master-0 -- bash\nchmod +x /usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh\n/usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh -nhnv -cacert /usr/share/elasticsearch/config/admin-root-ca.pem -cert /usr/share/elasticsearch/config/admin-crt.pem -key /usr/share/elasticsearch/config/admin-key.pem -cd /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/\n
          7. lagoon-core-values.yaml\u3092\u6b21\u306e\u3088\u3046\u306b\u66f4\u65b0:

            lagoon-core-values.yaml
            elasticsearchURL: http://elasticsearch-opendistro-es-client-service.elasticsearch.svc.cluster.local:9200\nkibanaURL: https://<<Kibana Public URL>>\nlogsDBAdminPassword: \"<<PlainText Elasticsearch Admin Password>>\"\n
          8. \u30ed\u30fc\u30eb\u30a2\u30a6\u30c8Lagoon Core:

            Rollout Lagoon Core
            helm upgrade --install --create-namespace --namespace lagoon-core -f values.yaml lagoon-core lagoon/lagoon-core\n
          9. \u3059\u3079\u3066\u306eLagoon\u30b0\u30eb\u30fc\u30d7\u3092Opendistro Elasticsearch\u3068\u540c\u671f\u3055\u305b\u308b

            Sync groups
            kubectl -n lagoon-core exec -it deploy/lagoon-core-api -- sh\nyarn run sync:opendistro-security\n
          10. "},{"location":"ja/installing-lagoon/querying-graphql/","title":"GraphQL\u3067\u306e\u30af\u30a8\u30ea","text":"
            1. GraphQL\u30af\u30a8\u30ea\u306e\u9001\u53d7\u4fe1\u306b\u306f\u30a2\u30d7\u30ea\u304c\u5fc5\u8981\u3067\u3059\u3002GraphiQL\u3092\u63a8\u5968\u3057\u307e\u3059\u3002

              1. Homebrew\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001brew install --cask graphiql\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002
            2. Lagoon Core\u306bKubernetes\u30af\u30e9\u30b9\u30bf\u306b\u3064\u3044\u3066\u901a\u77e5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002GraphQL\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059:https://<YOUR-API-URL>/graphql

            3. HTTP\u30d8\u30c3\u30c0\u30fc\u3092\u7de8\u96c6\u306b\u79fb\u52d5\u3057\u3001\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

              1. \u30d8\u30c3\u30c0\u30fc\u540d:Authorization
              2. \u5024:Bearer YOUR-TOKEN-HERE
              3. \u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306bLagoon CLI\u304c.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30c8\u30fc\u30af\u30f3\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3001\u3053\u3053\u3067\u306e\u5024\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
              4. \u4fdd\u5b58\u3002
            4. \u3053\u308c\u3067\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3059\u308b\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\u3002\u6b21\u306e\u30c6\u30b9\u30c8\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u3066\u3001\u3059\u3079\u3066\u304c\u6b63\u3057\u304f\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059:

              Get all projects
              query allProjects {allProjects {name } }\n
            5. \u3053\u308c\u306b\u3088\u308a\u3001\u6b21\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3059:

              API Response
                {\n    \"data\": {\n      \"allProjects\": []\n    }\n  }\n

              \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306eGraphQL\u306b\u3064\u3044\u3066\u306e\u30da\u30fc\u30b8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

            6. \u6b63\u3057\u3044\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5f97\u3089\u308c\u305f\u3089\u3001\u5909\u7570\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

              1. \u6b21\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u307e\u3059:

                \u7a81\u7136\u5909\u7570\u3092\u8ffd\u52a0
                mutation addKubernetes {\naddKubernetes(input:\n{\nname: \"<TARGET-NAME-FROM-REMOTE-VALUES.yml>\",\nconsoleUrl: \"<URL-OF-K8S-CLUSTER>\",\ntoken: \"xxxxxx\u201d\nrouterPattern: \"${environment}.${project}.lagoon.example.com\"\n}){id}\n}\n
                1. name: lagoon-remote-values.yml\u304b\u3089\u53d6\u5f97
                2. consoleUrl: Kubernetes\u30af\u30e9\u30b9\u30bf\u306eAPI\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3002values.yml\u304b\u3089\u53d6\u5f97
                3. token: ssh-core\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u7528\u306e\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97

                  \u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97
                  kubectl -n lagoon get secret/lagoon-remote-ssh-core-token -o json | jq -r '.data.token | @base64d'\n

            \u60c5\u5831

            GraphQL\u306e\u8a8d\u8a3c\u30c8\u30fc\u30af\u30f3\u306e\u6709\u52b9\u671f\u9650\u306f\u975e\u5e38\u306b\u77ed\u3044\u305f\u3081\u3001\u65b0\u3057\u3044\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002lagoon login\u3092\u5b9f\u884c\u3057\u3001\u65b0\u3057\u3044\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3092cat\u30b3\u30de\u30f3\u30c9\u3067\u8868\u793a\u3057\u3001HTTP\u30d8\u30c3\u30c0\u30fc\u306e\u53e4\u3044\u30c8\u30fc\u30af\u30f3\u3092\u65b0\u3057\u3044\u3082\u306e\u306b\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/installing-lagoon/requirements/","title":"\u65e2\u5b58\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u3078\u306eLagoon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":""},{"location":"ja/installing-lagoon/requirements/#requirements","title":"\u5fc5\u8981\u6761\u4ef6","text":"
            • Kubernetes 1.23+(Kubernetes 1.21\u3082\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u30011.23\u3092\u63a8\u5968\u3057\u307e\u3059)
            • Helm\u3001Helm Charts\u3001kubectl\u306b\u7cbe\u901a\u3057\u3066\u3044\u308b\u3053\u3068\u3002
            • Ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001\u6211\u3005\u306fingress-nginx\u3092\u63a8\u5968\u3057\u3001ingress-nginx\u540d\u524d\u7a7a\u9593\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068
            • Cert manager(TLS\u7528) - letsencrypt\u306e\u4f7f\u7528\u3092\u5f37\u304f\u63a8\u5968\u3057\u307e\u3059
            • StorageClasses(\u30c7\u30d5\u30a9\u30eb\u30c8\u3068\u3057\u3066RWO\u3001\u6c38\u7d9a\u30bf\u30a4\u30d7\u7528\u306bRWM)

            \u6ce8\u610f:

            \u3053\u308c\u306f\u591a\u304f\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u5fc5\u8981\u3067\u3042\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3057\u3066\u304a\u308a\u3001\u4eca\u5f8c\u3059\u3050\u306b\u884c\u3046\u4e88\u5b9a\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7\u306b\u306f\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306e\u30b9\u30c6\u30c3\u30d7\u6570\u3092\u6e1b\u3089\u3059\u3053\u3068\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

            "},{"location":"ja/installing-lagoon/requirements/#specific-requirements-as-of-january-2023","title":"\u7279\u5b9a\u306e\u8981\u4ef6 (2023\u5e741\u6708\u73fe\u5728)","text":""},{"location":"ja/installing-lagoon/requirements/#kubernetes","title":"Kubernetes","text":"

            Lagoon\u306fKubernetes\u30d0\u30fc\u30b8\u30e7\u30f31.21\u4ee5\u964d\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u7a4d\u6975\u7684\u306bKubernetes 1.24\u306b\u5bfe\u3057\u3066\u30c6\u30b9\u30c8\u3068\u958b\u767a\u3092\u884c\u3063\u3066\u304a\u308a\u3001\u5b9a\u671f\u7684\u306b1.21\u30011.22\u30011.25\u306b\u5bfe\u3057\u3066\u3082\u30c6\u30b9\u30c8\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002

            \u6b21\u306e\u5927\u898f\u6a21\u306a\u7834\u58ca\u7684\u5909\u66f4\u306fKubernetes 1.25\u306b\u3042\u308a\u3001\u6211\u3005\u306f\u3053\u308c\u3089\u3092\u4e8b\u524d\u306b\u628a\u63e1\u3059\u308b\u52aa\u529b\u3092\u3057\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u6700\u4f4e\u30b5\u30dd\u30fc\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e0a\u6607\u3092\u5fc5\u8981\u3068\u3059\u308b\u3067\u3057\u3087\u3046\u3002 Lagoon\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3002

            "},{"location":"ja/installing-lagoon/requirements/#ingress-nginx","title":"ingress-nginx","text":"

            Lagoon\u306f\u73fe\u5728\u3001\u5358\u4e00\u306e ingress-nginx \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u307f\u306b\u5bfe\u5fdc\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u904e\u53bb\u306b\u306f IngressClass \u306e\u5b9a\u7fa9\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002

            \u6700\u8fd1\u306e ingress-nginx \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc(\u30d0\u30fc\u30b8\u30e7\u30f34\u4ee5\u964d\u3001Kubernetes 1.22\u304c\u5fc5\u8981)\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002ingress-nginx \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002

            • nginx-ingress \u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - Helm\u306e\u5024\u3067 .controller.ingressClassResource.default: true \u3092\u8a2d\u5b9a\u3057\u307e\u3059
            • nginx-ingress \u306f IngressClass \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044Ingress\u3092\u76e3\u8996\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - Helm\u306e\u5024\u3067 .controller.watchIngressWithoutClass: true \u3092\u8a2d\u5b9a\u3057\u307e\u3059

            \u3053\u308c\u306b\u3088\u308a\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306f\u65b0\u3057\u3044Ingress\u3092 IngressClass \u3068\u3057\u3066\u81ea\u8eab\u3067\u4f5c\u6210\u3057\u3001IngressClass \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u65e2\u5b58\u306eIngress\u3092\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

            \u4ed6\u306e\u8a2d\u5b9a\u3082\u53ef\u80fd\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u30c6\u30b9\u30c8\u306f\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093\u3002

            "},{"location":"ja/installing-lagoon/requirements/#harbor","title":"Harbor","text":"

            \u73fe\u5728\u3001Harbor \u306e\u30d0\u30fc\u30b8\u30e7\u30f3 2.1 \u304a\u3088\u3073 2.2+ \u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30ed\u30dc\u30c3\u30c8 \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u306f 2.2 \u3067\u5909\u66f4\u3055\u308c\u3001Lagoon \u30ea\u30e2\u30fc\u30c8 \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306f\u3053\u308c\u3089\u306e\u30c8\u30fc\u30af\u30f3\u3092\u51e6\u7406\u3067\u304d\u307e\u3059\u3002\u3064\u307e\u308a\u3001Harbor \u306f lagoon-core \u3067\u306f\u306a\u304f lagoon-build-deploy \u306e\u8cc7\u683c\u60c5\u5831\u3092\u4f7f\u7528\u3057\u3066\u69cb\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            2.6.0 \u4ee5\u964d\u306e Harbor \u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u3001Helm \u30c1\u30e3\u30fc\u30c8 1.10.0 \u4ee5\u4e0a\u3068\u3068\u3082\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

            "},{"location":"ja/installing-lagoon/requirements/#k8up-for-backups","title":"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u7528\u306e k8up","text":"

            Lagoon \u306b\u306f\u3001K8up \u30d0\u30c3\u30af\u30a2\u30c3\u30d7 \u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u306e\u69cb\u6210\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002 Lagoon \u3067\u306f\u3001\u4e8b\u524d\u30d0\u30c3\u30af\u30a2\u30c3\u30d7 \u30dd\u30c3\u30c9\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3001\u4fdd\u6301\u671f\u9593\u3092\u8a2d\u5b9a\u3057\u3001K8up \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u5fa9\u5143\u3092\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002\u73fe\u5728\u3001Lagoon \u306f\u3001v2 \u4ee5\u964d\u306e\u540d\u524d\u7a7a\u9593\u306e\u5909\u66f4\u306b\u3088\u308a\u3001K8up \u306e 1.x \u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u4fee\u6b63\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002

            \u30d0\u30b0 k8up v2

            Lagoon \u306f\u3001\u540d\u524d\u7a7a\u9593\u306e\u5909\u66f4\u306b\u3088\u308a\u3001\u73fe\u5728 K8up v2 \u4ee5\u964d\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093 (\u3053\u3061\u3089)\u3002

            K8up \u30d0\u30fc\u30b8\u30e7\u30f3 1.2.0 \u3092 Helm Chart 1.1.0 \u3068\u3068\u3082\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

            "},{"location":"ja/installing-lagoon/requirements/#storage-provisioners","title":"\u30b9\u30c8\u30ec\u30fc\u30b8\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc","text":"

            Lagoon \u306f\u3001\u307b\u3068\u3093\u3069\u306e\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u306b\u5bfe\u3057\u3066\u30c7\u30d5\u30a9\u30eb\u30c8\u306e standard StorageClass \u3092\u5229\u7528\u3057\u3001\u307b\u3068\u3093\u3069\u306e Kubernetes \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u5185\u90e8\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u3067\u5341\u5206\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u53ef\u80fd\u306a\u5834\u5408\u306f\u52d5\u7684\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3068\u62e1\u5f35\u304c\u53ef\u80fd\u306b\u306a\u308b\u3088\u3046\u306b\u69cb\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            \u307e\u305f\u3001Lagoon\u3067\u306f\u3001\u6c38\u7d9a\u7684\u306a\u30dd\u30c3\u30c9\u30ec\u30d7\u30ea\u30ab(\u30ce\u30fc\u30c9\u9593)\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u305f\u3081\u306b\u3001'bulk'\u3068\u547c\u3070\u308c\u308bStorageClass\u304c\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u306eStorageClass\u306fReadWriteMany(RWX)\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001\u53ef\u80fd\u306a\u9650\u308a\u52d5\u7684\u306a\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3068\u62e1\u5f35\u6027\u304c\u3042\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u8a73\u7d30\u306fhttps://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes \u3092\u53c2\u7167\u3057\u3001\u4e92\u63db\u6027\u306e\u3042\u308b\u30c9\u30e9\u30a4\u30d0\u306e\u5b8c\u5168\u306a\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306fproduction drivers list\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            \u73fe\u5728\u3001\u79c1\u305f\u3061\u306f(\u73fe\u5728\u306f\u5ec3\u6b62\u3055\u308c\u3066\u3044\u308b)EFS Provisioner\u306e\u6307\u793a\u3060\u3051\u3092\u542b\u3081\u3066\u3044\u307e\u3059\u3002\u672c\u756a\u306eEFS CSI driver\u306f\u3001120\u4ee5\u4e0a\u306ePVC\u3092\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3059\u308b\u969b\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u30a2\u30c3\u30d7\u30b9\u30c8\u30ea\u30fc\u30e0\u3067\u306e\u53ef\u80fd\u306a\u4fee\u6b63\u3092\u3053\u3053\u3068\u3053\u3053\u3067\u5f85\u3063\u3066\u3044\u307e\u3059 - \u3057\u304b\u3057\u3001\u4ed6\u306e\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u306eCSI\u30c9\u30e9\u30a4\u30d0\u3082\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3001NFS\u4e92\u63db\u306e\u30b5\u30fc\u30d0\u3068\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u3092\u5099\u3048\u305f\u8a2d\u5b9a\u3082\u540c\u69d8\u3067\u3059\u3002

            "},{"location":"ja/installing-lagoon/requirements/#kubernetes_1","title":"\u3069\u308c\u304f\u3089\u3044 Kubernetes\u306e\u7d4c\u9a13/\u77e5\u8b58\u306f\u5fc5\u8981\u3067\u3059\u304b\uff1f","text":"

            Lagoon\u306f\u3001\u975e\u5e38\u306b\u9ad8\u5ea6\u306aKubernetes\u3068\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u306e\u6982\u5ff5\u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001Lagoon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3084\u8a2d\u5b9a\u306b\u5b8c\u5168\u306a\u719f\u77e5\u304c\u5fc5\u8981\u306a\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u554f\u984c\u306e\u8a3a\u65ad\u3084\u8ca2\u732e\u306f\u3001\u5341\u5206\u306a\u77e5\u8b58\u304c\u306a\u3051\u308c\u3070\u96e3\u3057\u304f\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

            \u6307\u6a19\u3068\u3057\u3066\u3001Certified Kubernetes Administrator\u306e\u30ab\u30ea\u30ad\u30e5\u30e9\u30e0\u306b\u5bfe\u3059\u308b\u5feb\u9069\u3055\u3092\u6700\u4f4e\u9650\u3068\u3057\u3066\u63d0\u6848\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/installing-lagoon/update-lagoon/","title":"\u66f4\u65b0","text":"
            1. Helm\u3092\u4f7f\u7528\u3057\u3066\u6700\u65b0\u306e\u30c1\u30e3\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002

              \u6700\u65b0\u306e\u30c1\u30e3\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
              helm repo update\n
            2. helm diff\u3092\u4f7f\u3063\u3066\u5909\u66f4\u70b9\u3092\u78ba\u8a8d\u3057\u307e\u3059(https://github.com/databus23/helm-diff)\u3002

              \u5909\u66f4\u70b9\u3092\u78ba\u8a8d
              helm diff upgrade --install --create-namespace --namespace lagoon-core \\\n-f values.yml lagoon-core lagoon/lagoon-core\n
            3. \u4efb\u610f\u306eHelm\u64cd\u4f5c\u524d\u306b\u3001Lagoon\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u308a\u307e\u3059\u3002 \u307e\u305f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u79fb\u884c\u30b9\u30af\u30ea\u30d7\u30c8\u304cinitContainers\u3067\u5b9f\u884c\u3055\u308c\u308b\u306e\u3092\u652f\u63f4\u3059\u308b\u305f\u3081\u306b\u3001API\u3092\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u306b\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3082\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

            4. Helm\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

              \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u5b9f\u884c
              helm upgrade --install --create-namespace --namespace lagoon-core \\\n-f values.yaml lagoon-core lagoon/lagoon-core\n
            5. (Lagoon v2.11.0\u4ee5\u964d\u3001\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u4e0d\u8981\u306b\u306a\u308a\u307e\u3057\u305f) Lagoon Core\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u5834\u5408\u3001\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u5f8c\u306e\u79fb\u884c\u3092\u884c\u3046\u305f\u3081\u306brerun_initdb.sh\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

              \u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c
              kubectl --namespace lagoon-core exec -it lagoon-core-api-db-0 -- \\\nsh -c /rerun_initdb.sh\n
            6. API\u30dd\u30c3\u30c9\u3092\u5143\u306e\u6570\u306b\u623b\u3057\u3066\u30b9\u30b1\u30fc\u30eb\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002 \u30ec\u30d9\u30eb\u3002

            7. Lagoon Core\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3001OpenSearch\u306e\u30b0\u30eb\u30fc\u30d7/\u30e6\u30fc\u30b6\u30fc\u540c\u671f\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u308b\u5834\u5408\u3001OpenSearch\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u66f4\u65b0\u3059\u308b\u305f\u3081\u306bsync:opendistro-security\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306f\u3001\u5168\u4f53\u306e\u30b0\u30eb\u30fc\u30d7\u69cb\u9020\u306e\u540c\u671f\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u5834\u5408\u3001\u4e00\u5ea6\u306b1\u3064\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u540c\u671f\u3059\u308b\u305f\u3081\u306bGROUP_REGEX=<group-to-sync\u3067\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u4ed8\u3051\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

              \u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5b9f\u884c
              kubectl --namespace lagoon-core exec -it deploy/lagoon-core-api -- \\\nsh -c yarn sync:opendistro-security\n

            \u8ffd\u52a0\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u306b\u3064\u3044\u3066\u306f\u3001https://github.com/uselagoon/lagoon/releases\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/installing-lagoon/update-lagoon/#database-backups","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7","text":"

            Lagoon Core\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u524d\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u624b\u9806\u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4f5c\u6210\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u305d\u308c\u3089\u3092\u4f7f\u7528\u3057\u3066\u5fa9\u5143\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5f8c\u3067\u305d\u308c\u3089\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/installing-lagoon/update-lagoon/#api-db","title":"API DB","text":"API DB\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7
            kubectl --namespace lagoon-core exec -it lagoon-core-api-db-0 -- \\\nsh -c 'mysqldump --max-allowed-packet=500M --events \\\n    --routines --quick --add-locks --no-autocommit \\\n    --single-transaction infrastructure | gzip -9 > \\\n    /var/lib/mysql/backup/$(date +%Y-%m-%d_%H%M%S).infrastructure.sql.gz'\n
            "},{"location":"ja/installing-lagoon/update-lagoon/#keycloak-db","title":"Keycloak DB","text":"Keycloak DB\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7
            kubectl --namespace lagoon-core exec -it lagoon-core-keycloak-db-0 -- \\\nsh -c 'mysqldump --max-allowed-packet=500M --events \\\n    --routines --quick --add-locks --no-autocommit \\\n    --single-transaction keycloak | gzip -9 > \\\n    /var/lib/mysql/backup/$(date +%Y-%m-%d_%H%M%S).keycloak.sql.gz'\n
            "},{"location":"ja/interacting/graphql-queries/#running-graphql-queries","title":"GraphQL\u30af\u30a8\u30ea\u306e\u5b9f\u884c","text":"

            Lagoon\u3067\u306e\u76f4\u63a5\u7684\u306aAPI\u306e\u76f8\u4e92\u4f5c\u7528\u306f\u3001GraphQL\u3092\u7d4c\u7531\u3057\u3066\u884c\u308f\u308c\u307e\u3059\u3002

            API\u3068\u306e\u8a8d\u8a3c\u3092\u884c\u3046\u305f\u3081\u306b\u306f\u3001\u79c1\u305f\u3061\u304c\u7ba1\u7406\u8005\u3068\u3057\u3066GraphQL API\u3092\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308bJWT(JSON Web Token)\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u306e\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001Kubernetes UI\u7d4c\u7531\u3001\u307e\u305f\u306fkubectl\u3092\u4f7f\u7528\u3057\u3066storage-calculator\u30dd\u30c3\u30c9\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u958b\u304d\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

            JWT\u30c8\u30fc\u30af\u30f3\u306e\u751f\u6210
            ./create_jwt.py\n

            \u3053\u308c\u306b\u3088\u308aJWT\u30c8\u30fc\u30af\u30f3\u3067\u3042\u308b\u9577\u3044\u6587\u5b57\u5217\u304c\u8fd4\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u30af\u30a8\u30ea\u3092\u9001\u4fe1\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u3068\u306a\u308b\u306e\u3067\u3001\u30e1\u30e2\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002

            \u307e\u305f\u3001API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306eURL\u3082\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306fKubernetes UI\u306e\"Ingresses\"\u306e\u4e0b\u3001\u307e\u305f\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306ekubectl\u3092\u7d4c\u7531\u3057\u3066\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u3082\u5fc5\u8981\u306b\u306a\u308b\u306e\u3067\u3001\u30e1\u30e2\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002

            GraphQL\u30af\u30a8\u30ea\u3092\u4f5c\u6210\u3057\u9001\u4fe1\u3059\u308b\u306b\u306f\u3001\u81ea\u52d5\u88dc\u5b8c\u6a5f\u80fd\u306a\u3069\u3092\u5099\u3048\u305f\u30c7\u30b9\u30af\u30c8\u30c3\u30d7GraphQL\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067\u3042\u308bGraphiQL.app\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u6b21\u306e\u624b\u9806\u306b\u9032\u3080\u306b\u306f\u3001\u3053\u306e\u30a2\u30d7\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u8d77\u52d5\u3057\u307e\u3059\u3002

            \"GraphQL Endpoint\"\u306e\u4e0b\u306b/graphql\u3092\u672b\u5c3e\u306b\u4ed8\u3051\u305fAPI\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u3092\u5165\u529b\u3057\u307e\u3059\u3002\u6b21\u306b\"Edit HTTP Headers\"\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u65b0\u3057\u3044\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059:

            • \"\u30d8\u30c3\u30c0\u30fc\u540d\":Authorization
            • \"\u30d8\u30c3\u30c0\u30fc\u5024\":Bearer [JWT\u30c8\u30fc\u30af\u30f3] (\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044 JWT\u30c8\u30fc\u30af\u30f3\u306b\u30b9\u30da\u30fc\u30b9\u304c\u306a\u3044\u3053\u3068(\u30b9\u30da\u30fc\u30b9\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u3068\u52d5\u4f5c\u3057\u307e\u305b\u3093)

            ESC\u30ad\u30fc\u3092\u62bc\u3057\u3066HTTP\u30d8\u30c3\u30c0\u30fc\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u3092\u9589\u3058\u3001\u6700\u521d\u306eGraphQL\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\uff01

            \u3053\u308c\u3092\u5de6\u30d1\u30cd\u30eb\u306b\u5165\u529b\u3057\u307e\u3059

            \u30af\u30a8\u30ea\u306e\u5b9f\u884c
            query allProjects{\nallProjects {\nname\n}\n}\n

            \u305d\u3057\u3066\u3001\u25b6\ufe0f\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u304b(\u307e\u305f\u306fCTRL+ENTER\u3092\u62bc\u3059)\u3002

            \u3059\u3079\u3066\u304c\u3046\u307e\u304f\u3044\u3051\u3070\u3001\u6700\u521d\u306eGraphQL\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u3059\u3050\u306b\u53f3\u306e\u30da\u30a4\u30f3\u306b\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002

            "},{"location":"ja/interacting/graphql-queries/#creating-the-first-project","title":"\u6700\u521d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210","text":"

            Lagoon\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u6700\u521d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\uff01\u3053\u308c\u306b\u306f\u3001create-project.gql\u306eGraphQL\u30af\u30a8\u30ea\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

            \u5404\u30af\u30a8\u30ea(mutation {\u3067\u59cb\u307e\u308b\u30d6\u30ed\u30c3\u30af)\u306b\u3064\u3044\u3066\u3001TODO\u30b3\u30e1\u30f3\u30c8\u3067\u30de\u30fc\u30af\u3055\u308c\u305f\u7a7a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u3059\u3079\u3066\u57cb\u3081\u3066\u3001GraphiQL.app\u3067\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e2\u3064\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u305d\u308c\u305e\u308c1\u3064\u305a\u3064\u4f5c\u6210\u3055\u308c\u307e\u3059:

            1. kubernetes : Lagoon\u304c\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304dKubernetes(\u307e\u305f\u306fOpenshift)\u30af\u30e9\u30b9\u30bf\u3002Lagoon\u306f\u81ea\u8eab\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u306b\u3060\u3051\u3067\u306a\u304f\u3001\u4efb\u610f\u306eKubernetes\u306b\u3082\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002 \u4e16\u754c\u4e2d\u306e\u3069\u3053\u3067\u3082\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002
            2. project : \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308bLagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3001\u30eb\u30fc\u30c8\u306b\u30b3\u30df\u30c3\u30c8\u3055\u308c\u305f .lagoon.yml \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u6301\u3064Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3059\u3002
            "},{"location":"ja/interacting/graphql-queries/#allowing-access-to-the-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u8a31\u53ef","text":"

            Lagoon\u3067\u306f\u3001\u5404\u958b\u767a\u8005\u306f\u81ea\u5206\u306eSSH\u30ad\u30fc\u3067\u8a8d\u8a3c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u3078\u306e\u30a2\u30af\u30bb\u30b9\u304c\u6c7a\u307e\u308a\u307e\u3059:

            1. \u81ea\u5206\u304c\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3064\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u898b\u3066\u7de8\u96c6\u3067\u304d\u308bLagoon API\u3002
            2. \u81ea\u5206\u304c\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3064\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u3078\u306e\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u30a2\u30af\u30bb\u30b9\u3002
            3. \u30ea\u30af\u30a8\u30b9\u30c8\u30ed\u30b0\u3001\u30b3\u30f3\u30c6\u30ca\u30ed\u30b0\u3001Lagoon\u30ed\u30b0\u306a\u3069\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308bLagoon\u306e\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u3002

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u307e\u305aAPI\u306b\u65b0\u3057\u3044\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

            API\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0
            mutation {\naddGroup (\ninput: {\n# TODO: \u65b0\u3057\u3044\u30b0\u30eb\u30fc\u30d7\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n}\n)     {\nid\nname\n}\n}\n

            \u6b21\u306b\u3001API\u306b\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

            API\u306b\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0
            mutation {\naddUser(\ninput: {\nemail: \"michael.schmid@example.com\"\nfirstName: \"Michael\"\nlastName: \"Schmid\"\ncomment: \"CTO\"\n}\n) {\n# TODO: \u8fd4\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fcID\u3092\u30e1\u30e2\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002\nid\n}\n}\n

            \u305d\u308c\u304b\u3089\u3001\u305d\u306e API\u306b\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0:

            API\u306bSSH\u516c\u958b\u9375\u3092\u8ffd\u52a0\u3059\u308b
            mutation {\naddSshKey(\ninput: {\n# TODO: name\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u4e0b\u3055\u3044\u3002\n# \u3053\u308c\u306fSSH\u30ad\u30fc\u306e\u975e\u4e00\u610f\u306a\u8b58\u5225\u5b50\u3067\u3059\u3002\nname: \"\"\n# TODO: keyValue\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u4e0b\u3055\u3044\u3002\n# \u3053\u308c\u306f\u5b9f\u969b\u306eSSH\u516c\u958b\u9375\u3067\u3059(\u6700\u521d\u306e\u30bf\u30a4\u30d7\u3068\u6700\u5f8c\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u9664\u3044\u3066\u3001\u4f8b `AAAAB3NzaC1yc2EAAAADAQ...3QjzIOtdQERGZuMsi0p`)\u3002\nkeyValue: \"\"\n# TODO: keyType\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u4e0b\u3055\u3044\u3002\n# \u6709\u52b9\u306a\u5024\u306f\u3001SSH_RSA\u3001SSH_ED25519\u3001ECDSA_SHA2_NISTP256/384/521\u306e\u3044\u305a\u308c\u304b\u3067\u3059\u3002\nkeyType: SSH_RSA\nuser: {\n# TODO: userId\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u4e0b\u3055\u3044\u3002\n# \u3053\u308c\u306faddUser\u30af\u30a8\u30ea\u304b\u3089\u53d6\u5f97\u3057\u305f\u30e6\u30fc\u30b6\u30fcID\u3067\u3059\u3002\nid:\"0\",\nemail:\"michael.schmid@example.com\"\n}\n}\n) {\nid\n}\n}\n

            \u30ad\u30fc\u3092\u8ffd\u52a0\u3057\u305f\u5f8c\u3001\u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

            \u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b
            mutation {\naddUserToGroup (\ninput: {\nuser: {\n#TODO: \u30e6\u30fc\u30b6\u30fc\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nemail: \"\"\n}\ngroup: {\n#TODO: \u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u305f\u3044\u30b0\u30eb\u30fc\u30d7\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n}\n#TODO: \u30e6\u30fc\u30b6\u30fc\u306e\u5f79\u5272\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 .\nrole: OWNER\n}\n) {\nid\nname\n}\n}\n

            \u3053\u308c\u3089\u306e\u30af\u30a8\u30ea\u306e\u4e00\u90e8\u307e\u305f\u306f\u5168\u90e8\u3092\u5b9f\u884c\u3057\u305f\u5f8c\u3001\u30e6\u30fc\u30b6\u30fc\u306fSSH\u7d4c\u7531\u3067\u30c8\u30fc\u30af\u30f3\u3092\u4f5c\u6210\u3057\u305f\u308a\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u308a\u3059\u308b\u6a29\u9650\u304c\u4ed8\u4e0e\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/interacting/graphql-queries/#adding-notifications-to-the-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u901a\u77e5\u3092\u8ffd\u52a0\u3059\u308b","text":"

            \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u4e2d\u306b\u4f55\u304c\u8d77\u3053\u3063\u3066\u3044\u308b\u306e\u304b\u3092\u77e5\u308a\u305f\u3044\u5834\u5408\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u901a\u77e5\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u63d0\u4f9b\u3057\u307e\u3059:

            • \u30d7\u30c3\u30b7\u30e5\u901a\u77e5
            • \u30d3\u30eb\u30c9\u958b\u59cb\u60c5\u5831
            • \u30d3\u30eb\u30c9\u6210\u529f\u307e\u305f\u306f\u5931\u6557\u30e1\u30c3\u30bb\u30fc\u30b8
            • \u305d\u306e\u4ed6\u591a\u6570\uff01

            \u901a\u77e5\u306f\u3001\u5fc5\u8981\u306a\u60c5\u5831\u306e\u70b9\u3067\u304b\u306a\u308a\u7570\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u5404\u901a\u77e5\u30bf\u30a4\u30d7\u306b\u306f\u72ec\u81ea\u306e\u5909\u7570\u304c\u3042\u308a\u307e\u3059\u3002

            \u30e6\u30fc\u30b6\u30fc\u3068\u540c\u69d8\u306b\u3001\u307e\u305a\u901a\u77e5\u3092\u8ffd\u52a0\u3057\u307e\u3059:

            \u901a\u77e5\u3092\u8ffd\u52a0\u3059\u308b
            mutation {\naddNotificationSlack(\ninput: {\n# TODO: \u540d\u524d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u901a\u77e5\u306e\u305f\u3081\u306e\u81ea\u8eab\u306e\u8b58\u5225\u5b50\u3067\u3059\u3002\nname: \"\"\n# TODO: \u30c1\u30e3\u30f3\u30cd\u30eb\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u308b\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u3059\u3002\nchannel: \"\"\n# TODO: \u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u308b\u3079\u304d\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u306eURL\u3067\u3001\u901a\u5e38\u306f\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u304b\u3089\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\nwebhook: \"\"\n}\n) {\nid\n}\n}\n

            \u901a\u77e5\u304c\u4f5c\u6210\u3055\u308c\u305f\u5f8c\u3001 \u3053\u308c\u3067\u3001\u79c1\u305f\u3061\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u901a\u77e5\u3092\u5272\u308a\u5f53\u3066\u308b
            mutation {\naddNotificationToProject(\ninput: {\nnotificationType: SLACK\n# TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3067\u3059\u3002\nproject: \"\"\n# TODO: \u901a\u77e5\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u901a\u77e5\u306e\u540d\u524d\u3067\u3059\u3002\nnotificationName: \"\"\n# TODO: \u30aa\u30d7\u30b7\u30e7\u30f3\n# \u8208\u5473\u306e\u3042\u308b\u901a\u77e5\u30af\u30e9\u30b9\u306e\u7a2e\u985e\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067DEPLOYMENT\u306b\u306a\u308a\u307e\u3059\ncontentType: DEPLOYMENT/PROBLEM\n# TODO: \u30aa\u30d7\u30b7\u30e7\u30f3\n# contentType PROBLEM\u306b\u95a2\u9023\u3057\u3066\u3001\u6211\u3005\u304c\u901a\u77e5\u3092\u53d7\u3051\u305f\u3044\u554f\u984c\u306e\u7a2e\u985e\u306e\u95be\u5024\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\nnotificationSeverityThreshold: \"NONE/UNKNOWN/NEGLIGIBLE/LOW/MEDIUM/HIGH/CRITICAL\n}\n) {\nid\n}\n}\n

            \u3053\u308c\u3067\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3054\u3068\u306b\u3001\u5b9a\u7fa9\u3057\u305f\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d7\u3051\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/interacting/graphql-queries/#example-graphql-queries","title":"GraphQL\u30af\u30a8\u30ea\u306e\u4f8b","text":""},{"location":"ja/interacting/graphql-queries/#adding-a-new-kubernetes-target","title":"\u65b0\u3057\u3044Kubernetes\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u8ffd\u52a0","text":"

            \u6ce8\u610f:

            Lagoon\u3067\u306f\u3001addKubernetes\u3068addOpenshift\u306e\u3069\u3061\u3089\u3082Kubernetes\u3068OpenShift\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4e21\u65b9\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u3069\u3061\u3089\u3082\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u3059\u3002

            Lagoon\u304c\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u30af\u30e9\u30b9\u30bf\u3002

            Kubernetes\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u8ffd\u52a0
            mutation {\naddKubernetes(\ninput: {\n# TODO: \u540d\u524d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30af\u30e9\u30b9\u30bf\u306e\u4e00\u610f\u306e\u8b58\u5225\u5b50\u3067\u3059\u3002\nname: \"\"\n# TODO: consoleUrl\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306fKubernetes\u30af\u30e9\u30b9\u30bf\u306eURL\u3067\u3059\nconsoleUrl: \"\"\n# TODO: \u30c8\u30fc\u30af\u30f3\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u3001\u3053\u306e\u30af\u30e9\u30b9\u30bf\u3067\u4f5c\u6210\u3055\u308c\u305f`lagoon`\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30c8\u30fc\u30af\u30f3\u3067\u3059(\u3053\u308c\u306f\u3001Lagoon\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b\u3082\u4f7f\u7528\u3057\u305f\u306e\u3068\u540c\u3058\u30c8\u30fc\u30af\u30f3\u3067\u3059)\u3002\ntoken: \"\"\n}\n){\nname\nid\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#adding-a-group-to-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b","text":"

            \u3053\u306e\u30af\u30a8\u30ea\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u5f7c\u3089\u306f\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u3067\u306e\u5f79\u5272\u306b\u57fa\u3065\u3044\u3066\u5909\u66f4\u3092\u52a0\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b
            mutation {\naddGroupsToProject (\ninput: {\nproject: {\n#TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n}\ngroups: {\n#TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n}\n}\n) {\nid\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#adding-a-new-project","title":"\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8ffd\u52a0\u3059\u308b","text":"

            \u3053\u306e\u30af\u30a8\u30ea\u306f\u3001\u65b0\u3057\u3044Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30eb\u30fc\u30c8\u306b\u30b3\u30df\u30c3\u30c8\u3055\u308c\u305f.lagoon.yml\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u6301\u3064Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u3059\u3002

            \u3082\u3057 privateKey \u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u3042\u308b\u5834\u5408\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u65b0\u3057\u3044SSH\u30ad\u30fc\u304c\u81ea\u52d5\u7684\u306b\u751f\u6210\u3055\u308c\u307e\u3059\u3002

            \u5225\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304b\u3089\u30ad\u30fc\u3092\u518d\u5229\u7528\u3057\u305f\u3044\u5834\u5408\u306f\u3001addProject \u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u30ad\u30fc\u3092\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            \u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8ffd\u52a0
            mutation {\naddProject(\ninput: {\n# TODO: \u540d\u524d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3067\u3059\u3002\nname: \"\"\n# TODO: \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ad\u30fc\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044(\u6539\u884c\u306f '\\n' \u3067\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044)\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ad\u30fc\u3067\u3001Git\u306e\u30b3\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\nprivateKey: \"\"\n# TODO: Kubernetes\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u308bKubernetes\u307e\u305f\u306fOpenShift\u306eID\u3067\u3059\u3002\nkubernetes: 0\n# TODO: \u540d\u524d\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3067\u3059\u3002\ngitUrl: \"\"\n# TODO: \u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nbranches: \"\"\n# TODO: \u672c\u756a\u74b0\u5883\u3092\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nproductionEnvironment: \"\"\n}\n) {\nname\nkubernetes {\nname\nid\n}\ngitUrl\nbranches\npullrequests\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#list-projects-and-groups","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30b0\u30eb\u30fc\u30d7\u306e\u30ea\u30b9\u30c8","text":"

            \u3053\u308c\u306f\u3001\u79c1\u305f\u3061\u306eLagoon\u5185\u306b\u5b58\u5728\u3059\u308b\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u3001\u30b0\u30eb\u30fc\u30d7\u306e\u6982\u8981\u3092\u898b\u308b\u305f\u3081\u306e\u826f\u3044\u30af\u30a8\u30ea\u3067\u3059\u3002

            \u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u3001\u304a\u3088\u3073\u30b0\u30eb\u30fc\u30d7\u306e\u6982\u8981\u3092\u53d6\u5f97
            query {\nallProjects {\nname\ngitUrl\n}\nallKubernetes {\nname\nid\n}\nallGroups{\nid\nname\nmembers {\n# \u3053\u308c\u306f\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u8868\u793a\u3057\u307e\u3059\u3002\nuser {\nid\nfirstName\nlastName\n}\nrole\n}\ngroups {\nid\nname\n}\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#single-project","title":"\u5358\u4e00\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8","text":"

            \u5358\u4e00\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a73\u3057\u304f\u898b\u308b\u5834\u5408\u3001\u3053\u306e\u30af\u30a8\u30ea\u304c\u975e\u5e38\u306b\u6709\u7528\u3067\u3042\u308b\u3053\u3068\u304c\u8a3c\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a73\u3057\u304f\u898b\u308b
            query {\nprojectByName(\n# TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n) {\nid\nbranches\ngitUrl\npullrequests\nproductionEnvironment\nnotifications(type: SLACK) {\n... on NotificationSlack {\nname\nchannel\nwebhook\nid\n}\n}\nenvironments {\nname\ndeployType\nenvironmentType\n}\nkubernetes {\nid\n}\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#querying-a-project-by-its-git-url","title":"Git URL\u306b\u3088\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30af\u30a8\u30ea","text":"

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3092\u899a\u3048\u3066\u3044\u306a\u3044\u304c\u3001Git URL\u306f\u77e5\u3063\u3066\u3044\u308b\u5834\u5408\uff1f\u3082\u3046\u63a2\u3059\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3001\u305d\u306e\u305f\u3081\u306eGraphQL\u30af\u30a8\u30ea\u304c\u3042\u308a\u307e\u3059:

            Git URL\u306b\u3088\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30af\u30a8\u30ea
            query {\nprojectByGitUrl(gitUrl: \"git@server.com:org/repo ```\n.git\") {\nname\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#updating-objects","title":"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u66f4\u65b0","text":"

            Lagoon GraphQL API\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8868\u793a\u3057\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u30d1\u30c3\u30c1\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 \u3092\u4f7f\u7528\u3057\u3066\u65e2\u5b58\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b\u80fd\u529b\u3082\u3042\u308a\u307e\u3059\u3002

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002

            \u30c7\u30d7\u30ed\u30a4\u30d6\u30e9\u30f3\u30c1\u306e\u66f4\u65b0\u3002
            mutation {\nupdateProject(\ninput: { id: 109, patch: { branches: \"^(prod|stage|dev|update)$\" } }\n) {\nid\n}\n}\n

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u672c\u756a\u74b0\u5883\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002

            \u8b66\u544a

            \u3053\u306e\u5909\u66f4\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u53cd\u6620\u3055\u305b\u308b\u306b\u306f\u3001\u518d\u30c7\u30d7\u30ed\u30a4\u304c\u5fc5\u8981\u3067\u3059\u3002

            \u672c\u756a\u74b0\u5883\u306e\u66f4\u65b0
             mutation {\nupdateProject(\ninput: { id: 109, patch: { productionEnvironment: \"main\" } }\n) {\nid\n}\n}\n

            \u307e\u305f\u3001\u4e00\u5ea6\u306b\u8907\u6570\u306e\u5909\u66f4\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

            \u672c\u756a\u74b0\u5883\u306e\u66f4\u65b0\u3068\u30c7\u30d7\u30ed\u30a4\u30d6\u30e9\u30f3\u30c1\u306e\u8a2d\u5b9a\u3002
            mutation {\nupdateProject(\ninput: {\nid: 109\npatch: {\nproductionEnvironment: \"main\"\nbranches: \"^(prod|stage|dev|update)$\"\n}\n}\n) {\nid\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#deleting-environments","title":"\u74b0\u5883\u306e\u524a\u9664","text":"

            Lagoon GraphQL API\u3092\u4f7f\u7528\u3057\u3066\u3001\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 \u74b0\u5883\u3002\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3068\u74b0\u5883\u540d\u3092\u77e5\u3063\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            \u74b0\u5883\u3092\u524a\u9664\u3059\u308b
            mutation {\ndeleteEnvironment(\ninput: {\n# TODO: name\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u74b0\u5883\u540d\u3067\u3059\u3002\nname: \"\"\n# TODO: project\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a18\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n# \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3067\u3059\u3002\nproject: \"\"\nexecute:true\n}\n)\n}\n
            "},{"location":"ja/interacting/graphql-queries/#querying-a-project-to-see-what-groups-and-users-are-assigned","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3068\u30e6\u30fc\u30b6\u30fc\u3092\u78ba\u8a8d\u3059\u308b","text":"

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3069\u306e\u30b0\u30eb\u30fc\u30d7\u3068\u30e6\u30fc\u30b6\u30fc\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u304b\u898b\u305f\u3044\u3067\u3059\u304b\uff1f\u5f7c\u3089\u306e\u5f79\u5272\u306f\u4f55\u304b\u77e5\u308a\u305f\u3044\u3067\u3059\u304b\uff1f\u305d\u306e\u305f\u3081\u306e\u30af\u30a8\u30ea\u304c\u3042\u308a\u307e\u3059\uff01\u4e0b\u8a18\u306e\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u691c\u7d22\u3057\u3001\u305d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u5f79\u5272\u3092\u8868\u793a\u3067\u304d\u307e\u3059\u3002

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u5f79\u5272\u3092\u30af\u30a8\u30ea\u3059\u308b
            query search{\nprojectByName(\n#TODO: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nname: \"\"\n) {\nid,\nbranches,\nproductionEnvironment,\npullrequests,\ngitUrl,\nkubernetes {\nid\n},\ngroups{\nid\nname\ngroups {\nid\nname\n}\nmembers {\nrole\nuser {\nid\nemail\n}\n}\n}\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#maintaining-project-metadata","title":"\u7dad\u6301 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30e1\u30bf\u30c7\u30fc\u30bf","text":"

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30e1\u30bf\u30c7\u30fc\u30bf\u306f\u3001\u4efb\u610f\u306e\u30ad\u30fc/\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u3088\u3063\u3066\u554f\u3044\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u7a2e\u985e\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u3001\u307e\u305f\u306f\u5f8c\u3067\u554f\u3044\u5408\u308f\u305b\u308b\u305f\u3081\u306e\u4efb\u610f\u306e\u30ab\u30c6\u30b4\u30ea\u30fc\u306b\u3088\u3063\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5206\u985e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/interacting/graphql-queries/#addupdate-metadata-on-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0/\u66f4\u65b0\u3059\u308b","text":"

            \u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u66f4\u65b0\u306f\u30ad\u30fc/\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306fUPSERT\u3068\u3057\u3066\u52d5\u4f5c\u3057\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u65e2\u306b\u30ad\u30fc\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u5024\u304c\u66f4\u65b0\u3055\u308c\u3001\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f\u633f\u5165\u3055\u308c\u307e\u3059\u3002

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u4efb\u610f\u306e\u6570\u306ek/v\u30da\u30a2\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            \u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u30ad\u30fc/\u5024\u306e\u30da\u30a2\u3092\u8ffd\u52a0\u3059\u308b
            mutation {\nupdateProjectMetadata(\ninput: { id: 1,  patch: { key: \"type\", value: \"saas\" } }\n) {\nid\nmetadata\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#query-for-projects-by-metadata","title":"\u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u3088\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30af\u30a8\u30ea","text":"

            \u30af\u30a8\u30ea\u306fkey\u306e\u307f(\u4f8b:\u7279\u5b9a\u306e\u30ad\u30fc\u304c\u5b58\u5728\u3059\u308b\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8fd4\u3059)\u307e\u305f\u306fkey\u3068value\u306e\u4e21\u65b9(\u30ad\u30fc\u3068\u5024\u306e\u4e21\u65b9\u304c\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059)\u306b\u3088\u3063\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            version\u30bf\u30b0\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8:

            \u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u3088\u308b\u30af\u30a8\u30ea
            query projectsByMetadata {\nprojectsByMetadata(metadata: [{key: \"version\"] ) {\nid\nname\n}\n}\n

            \u7279\u306b\u30d0\u30fc\u30b8\u30e7\u30f38\u306eversion\u30bf\u30b0\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8:

            \u30e1\u30bf\u30c7\u30fc\u30bf\u306b\u3088\u308b\u30af\u30a8\u30ea
            query projectsByMetadata {\nprojectsByMetadata(metadata: [{key: \"version\", value: \"8\"] ) {\nid\nname\n}\n}\n
            "},{"location":"ja/interacting/graphql-queries/#removing-metadata-on-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u524a\u9664\u3059\u308b","text":"

            \u30e1\u30bf\u30c7\u30fc\u30bf\u306f\u30ad\u30fc\u3054\u3068\u306b\u524a\u9664\u3067\u304d\u307e\u3059\u3002\u4ed6\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u30ad\u30fc/\u5024\u306e\u30da\u30a2\u306f\u6b8b\u308a\u307e\u3059\u3002

            \u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u524a\u9664\u3059\u308b
            mutation {\nremoveProjectMetadataByKey (\ninput: { id: 1,  key: \"version\" }\n) {\nid\nmetadata\n}\n}\n
            "},{"location":"ja/interacting/graphql/#graphql-api","title":"GraphQL API\u3078\u306e\u63a5\u7d9a","text":"

            Lagoon\u3067\u306eAPI\u3068\u306e\u3084\u308a\u3068\u308a\u306fGraphQL\u3092\u901a\u3058\u3066\u884c\u3044\u307e\u3059\u3002API\u306b\u8a8d\u8a3c\u3059\u308b\u305f\u3081\u306b\u306f\u3001JWT(JSON Web Token)\u304c\u5fc5\u8981\u3067\u3001\u3053\u308c\u306b\u3088\u308aSSH\u516c\u958b\u9375\u3092\u901a\u3058\u3066API\u306b\u5bfe\u3059\u308b\u8a8d\u8a3c\u304c\u884c\u308f\u308c\u307e\u3059\u3002

            \u3053\u306e\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001token\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059:

            \u30c8\u30fc\u30af\u30f3\u306e\u53d6\u5f97
            ssh -p [PORT] -t lagoon@[HOST] token\n

            amazee.io\u306e\u4f8b:

            amazee.io\u30c8\u30fc\u30af\u30f3\u306e\u53d6\u5f97
            ssh -p 32222 -t lagoon@ssh.lagoon.amazeeio.cloud token\n

            \u3053\u308c\u306b\u3088\u308a\u9577\u3044\u6587\u5b57\u5217\u304c\u8fd4\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u304cJWT\u30c8\u30fc\u30af\u30f3\u3067\u3059\u3002

            \u307e\u305f\u3001API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306eURL\u3082\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306b\u3064\u3044\u3066\u306fLagoon\u306e\u7ba1\u7406\u8005\u306b\u5c0b\u306d\u3066\u304f\u3060\u3055\u3044\u3002

            amazee.io\u3067\u306f\u3053\u308c\u306fhttps://api.lagoon.amazeeio.cloud/graphql\u3067\u3059\u3002

            \u3055\u3066\u3001GraphQL\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002\u6280\u8853\u7684\u306b\u306f\u3053\u308c\u306f\u5358\u306a\u308bHTTP\u3067\u3059\u304c\u3001\u6211\u3005\u306fGraphiQL\u3092\u63a8\u5968\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u7d20\u6575\u306aUI\u3092\u5099\u3048\u3066\u304a\u308a\u3001\u30aa\u30fc\u30c8\u30b3\u30f3\u30d7\u30ea\u30fc\u30c8\u3067GraphQL\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u8d77\u52d5\u3057\u307e\u3059\u3002 [GraphiQL App]

            API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u3092\u5165\u529b\u3057\u307e\u3059\u3002\u6b21\u306b\"Edit HTTP Headers\"\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u65b0\u3057\u3044\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059:

            • \"Header name\": Authorization
            • \"Header value\": Bearer [jwt token] ( JWT\u30c8\u30fc\u30af\u30f3\u306b\u30b9\u30da\u30fc\u30b9\u304c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3001\u305d\u308c\u306f\u52d5\u4f5c\u3057\u307e\u305b\u3093)

            HTTP\u30d8\u30c3\u30c0\u30fc\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u3092\u9589\u3058\u307e\u3059(ESC\u30ad\u30fc\u3092\u62bc\u3057\u307e\u3059)\u3002\u3053\u308c\u3067\u3042\u306a\u305f\u306f\u521d\u3081\u3066\u306eGraphQL\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3046\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\uff01

            \u5de6\u5074\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u6b21\u306e\u5185\u5bb9\u3092\u5165\u529b\u3057\u307e\u3059:

            \u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\u3059\u308b
            query whatIsThere {\nallProjects {\nid\ngitUrl\nname\nbranches\npullrequests\nproductionEnvironment\nenvironments {\nname\nenvironmentType\n}\n}\n}\n

            \u305d\u3057\u3066\u3001\u25b6\ufe0f\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u304b(\u307e\u305f\u306fCTRL+ENTER\u3092\u62bc\u3059)\u3002

            \u3059\u3079\u3066\u3046\u307e\u304f\u3044\u3051\u3070\u3001\u521d\u3081\u3066\u306eGraphQL\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002

            "},{"location":"ja/interacting/graphql/#_1","title":"\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3","text":"

            Lagoon\u306eGraphQL API\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8868\u793a\u3057\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u65e2\u5b58\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b\u6a5f\u80fd\u3082\u6301\u3063\u3066\u3044\u307e\u3059\u3002Lagoon\u306e\u3059\u3079\u3066\u306eGraphQL\u306f\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

            \u60c5\u5831

            GraphQL\u306e\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u30af\u30a8\u30ea\u306f\u3001\u30c7\u30fc\u30bf\u30b9\u30c8\u30a2\u306e\u30c7\u30fc\u30bf\u3092\u5909\u66f4\u3057\u3001\u5024\u3092\u8fd4\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3001\u30c7\u30fc\u30bf\u306e\u633f\u5165\u3001\u66f4\u65b0\u3001\u524a\u9664\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u30b9\u30ad\u30fc\u30de\u306e\u4e00\u90e8\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u3092\u66f4\u65b0\u3057\u307e\u3059:

            \u30c7\u30d7\u30ed\u30a4\u30d6\u30e9\u30f3\u30c1\u3092\u66f4\u65b0
            mutation editProjectBranches {\nupdateProject(input:{id:109, patch:{branches:\"^(prod|stage|dev|update)$\"}}) {\nid\n}\n}\n

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u88fd\u54c1\u74b0\u5883\u3092\u66f4\u65b0\u3057\u307e\u3059:

            \u8b66\u544a

            \u3059\u3079\u3066\u306e\u5909\u66f4\u304c\u30b3\u30f3\u30c6\u30ca\u306b\u53cd\u6620\u3055\u308c\u308b\u3088\u3046\u306b\u3001\u518d\u30c7\u30d7\u30ed\u30a4\u304c\u5fc5\u8981\u3067\u3059\u3002

            \u88fd\u54c1\u74b0\u5883\u306e\u66f4\u65b0
            mutation editProjectProductionEnvironment {\nupdateProject(input:{id:109, patch:{productionEnvironment:\"prod\"}}) {\nid\n}\n}\n

            \u307e\u305f\u3001\u8907\u6570\u306e\u5909\u66f4\u3092\u4e00\u3064\u306e\u30af\u30a8\u30ea\u306b\u307e\u3068\u3081\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

            \u8907\u6570\u306e\u5909\u66f4
            mutation editProjectProductionEnvironmentAndBranches {\nupdateProject(input:{id:109, patch:{productionEnvironment:\"prod\", branches:\"^(prod|stage|dev|update)$\"}}) {\nid\n}\n}\n
            "},{"location":"ja/interacting/lagoon-ui/","title":"LagoonUI","text":"

            Lagoon UI\u306f\u3001Lagoon\u3068\u306e\u6700\u521d\u306e\u63a5\u70b9\u3067\u3059\u3002\u30a2\u30af\u30bb\u30b9\u306b\u95a2\u3059\u308b\u554f\u984c\u304c\u3042\u308b\u5834\u5408\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            UI\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u7d44\u7e54\u306b\u95a2\u3059\u308b\u3055\u307e\u3056\u307e\u306a\u30bf\u30b9\u30af\u3092\u5b8c\u4e86\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7d44\u7e54\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002\u3001UI\u3067\u7d44\u7e54\u3068\u4f55\u304c\u3067\u304d\u308b\u304b\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/interacting/organizations/","title":"UI\u3067\u7d44\u7e54\u3068\u5171\u540c\u4f5c\u696d\u3059\u308b","text":"

            \u4ee5\u4e0b\u306b\u3001Lagoon UI\u3067\u30b0\u30eb\u30fc\u30d7\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30e6\u30fc\u30b6\u30fc\u3001\u304a\u3088\u3073\u5f79\u5272\u306b\u95a2\u9023\u3059\u308b\u6709\u7528\u306a\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9\u3092\u793a\u3057\u307e\u3059\u3002

            "},{"location":"ja/interacting/organizations/#log-in-and-find-organizations","title":"\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u7d44\u7e54\u3092\u63a2\u3059","text":""},{"location":"ja/interacting/organizations/#view-who-has-access-to-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3064\u4eba\u3092\u78ba\u8a8d\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#add-user-to-group-with-role","title":"\u30e6\u30fc\u30b6\u30fc\u3092\u30ed\u30fc\u30eb\u4ed8\u304d\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#remove-a-user-from-a-group","title":"\u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u524a\u9664\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#change-a-user-role","title":"\u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30fc\u30eb\u3092\u5909\u66f4\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#add-an-email-notification-to-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30e1\u30fc\u30eb\u901a\u77e5\u3092\u8ffd\u52a0\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#add-a-group-to-a-project","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#add-a-user-with-organization-owner-privileges","title":"\u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u6a29\u9650\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3059\u308b","text":""},{"location":"ja/interacting/organizations/#create-a-new-project-add-a-group-and-create-a-production-environment","title":"\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001\u30b0\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3057\u3001\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u74b0\u5883\u3092\u4f5c\u6210\u3059\u308b","text":""},{"location":"ja/interacting/rbac/","title":"\u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1 (RBAC)","text":"

            Lagoon \u30d0\u30fc\u30b8\u30e7\u30f3 1.0 \u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u65b9\u6cd5\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u30b0\u30eb\u30fc\u30d7\u7d4c\u7531\u3067\u51e6\u7406\u3055\u308c\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f 1 \u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306f\u30ed\u30fc\u30eb\u3092\u6301\u3064\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\u30b0\u30eb\u30fc\u30d7\u306f\u30b5\u30d6\u30b0\u30eb\u30fc\u30d7\u5185\u306b\u30cd\u30b9\u30c8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u5909\u66f4\u306b\u3088\u308a\u3001\u67d4\u8edf\u6027\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3001Lagoon \u5185\u3067\u5b9f\u969b\u306e\u30c1\u30fc\u30e0\u3092\u518d\u73fe\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

            "},{"location":"ja/interacting/rbac/#roles","title":"\u5f79\u67c4","text":"

            \u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u308b\u3068\u304d\u306f\u3001\u3053\u306e\u30b0\u30eb\u30fc\u30d7\u5185\u3067\u305d\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u30b0\u30eb\u30fc\u30d7 \u30ed\u30fc\u30eb\u3092\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u5b58\u5728\u3059\u308b 5 \u3064\u306e\u30b0\u30eb\u30fc\u30d7 \u30ed\u30fc\u30eb\u306e\u305d\u308c\u305e\u308c\u304c\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u30b0\u30eb\u30fc\u30d7\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u7570\u306a\u308b\u6a29\u9650\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u4ed8\u4e0e\u3057\u307e\u3059\u3002\u73fe\u5728 Lagoon \u306b\u3042\u308b\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u30ed\u30fc\u30eb\u3068\u30b0\u30eb\u30fc\u30d7 \u30ed\u30fc\u30eb\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002

            "},{"location":"ja/interacting/rbac/#platform-wide-roles","title":"\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u30ed\u30fc\u30eb","text":""},{"location":"ja/interacting/rbac/#platform-wide-admin","title":"\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u7ba1\u7406\u8005","text":"

            \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u7ba1\u7406\u8005\u306f\u3001Lagoon \u5168\u4f53\u306e\u3059\u3079\u3066\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u524a\u9664\u3059\u308b\u306a\u3069\u306e\u5371\u967a\u306a\u5909\u66f4\u3082\u542b\u307e\u308c\u307e\u3059\u3002\u975e\u5e38\u306b\u614e\u91cd\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/interacting/rbac/#platform-wide-owner","title":"\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u6240\u6709\u8005","text":"

            \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u30aa\u30fc\u30ca\u30fc\u306f\u3001\u30b0\u30eb\u30fc\u30d7\u30aa\u30fc\u30ca\u30fc\u306e\u5f79\u5272\u3068\u540c\u69d8\u306b\u3059\u3079\u3066\u306eLagoon\u30b0\u30eb\u30fc\u30d7\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u3059\u3079\u3066\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304c\u3001\u5404\u30b0\u30eb\u30fc\u30d7\u306b\u30e6\u30fc\u30b6\u30fc\u3092\u5272\u308a\u5f53\u3066\u305f\u304f\u306a\u3044\u5834\u5408\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/interacting/rbac/#organization-roles","title":"\u7d44\u7e54\u306e\u5f79\u5272","text":""},{"location":"ja/interacting/rbac/#organization-owner","title":"\u7d44\u7e54\u306e\u6240\u6709\u8005","text":"

            \u7d44\u7e54\u306e\u6240\u6709\u8005\u306e\u30ed\u30fc\u30eb\u306b\u3088\u308a\u3001\u7d44\u7e54\u5185\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u901a\u77e5\u3092\u4f5c\u6210\u304a\u3088\u3073\u524a\u9664\u3067\u304d\u307e\u3059\u3002

            \u5f7c\u3089\u306f\u30e6\u30fc\u30b6\u30fc\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3057\u3001\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u5185\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30ed\u30fc\u30eb\u3092\u5909\u66f4\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u95a2\u9023\u4ed8\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u306f\u8ab0\u304c\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3063\u3066\u3044\u308b\u304b\u3092\u660e\u78ba\u306b\u628a\u63e1\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u3092\u8fc5\u901f\u306b\u8ffd\u52a0\u30fb\u524a\u9664\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            \u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u306f\u3001Slack\u3084\u305d\u306e\u4ed6\u306e\u901a\u77e5\u3092\u76f4\u63a5\u4f5c\u6210\u3057\u3001\u305d\u308c\u3089\u306e\u901a\u77e5\u3092Lagoon\u7ba1\u7406\u8005\u306e\u52a9\u3051\u3092\u501f\u308a\u305a\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u95a2\u9023\u4ed8\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002

            \u7d44\u7e54\u306e\u6240\u6709\u8005\u306f\u3001\u7d44\u7e54\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u4ed6\u306e\u6240\u6709\u8005\u3001\u7ba1\u7406\u8005\u3001\u307e\u305f\u306f\u95b2\u89a7\u8005\u3092\u8ffd\u52a0\u304a\u3088\u3073\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

            \u6ce8\u610f

            \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u3053\u306e\u30ed\u30fc\u30eb\u306f\u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u74b0\u5883\u3092\u4f5c\u6210\u3057\u305f\u308a\u3001\u30c7\u30d7\u30ed\u30a4\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u5f7c\u3089\u306f\u81ea\u5206\u81ea\u8eab\u3092\u3001\u305d\u306e\u6a29\u9650\u3092\u4ed8\u4e0e\u3059\u308b\u30ed\u30fc\u30eb\u3092\u6301\u3064\u30b0\u30eb\u30fc\u30d7\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3068\u304d\u3001\u7d44\u7e54\u306e\u30aa\u30fc\u30ca\u30fc\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30b0\u30eb\u30fc\u30d7\u306e\u30aa\u30fc\u30ca\u30fc\u3068\u3057\u3066\u8ffd\u52a0\u3055\u308c\u308b\u3053\u3068\u3092\u9078\u629e\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/interacting/rbac/#organization-admin","title":"\u7d44\u7e54\u7ba1\u7406\u8005","text":"

            \u7d44\u7e54\u7ba1\u7406\u8005\u306e\u5f79\u5272\u306f\u7d44\u7e54\u6240\u6709\u8005\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u3053\u306e\u5f79\u5272\u3067\u306f\u7d44\u7e54\u306e\u6240\u6709\u8005\u3001\u7ba1\u7406\u8005\u3001\u307e\u305f\u306f\u95b2\u89a7\u8005\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002

            "},{"location":"ja/interacting/rbac/#organization-viewer","title":"\u7d44\u7e54\u306e\u30d3\u30e5\u30fc\u30a2","text":"

            \u7d44\u7e54\u306e\u30d3\u30e5\u30fc\u30ef\u30fc\u306f\u3001\u81ea\u7d44\u7e54\u5185\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u30e6\u30fc\u30b6\u30fc\u306e\u30a2\u30af\u30bb\u30b9\u3001\u901a\u77e5\u3092\u8868\u793a\u3059\u308b\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

            "},{"location":"ja/interacting/rbac/#group-roles","title":"\u30b0\u30eb\u30fc\u30d7\u306e\u30ed\u30fc\u30eb","text":""},{"location":"ja/interacting/rbac/#owner","title":"\u30aa\u30fc\u30ca\u30fc","text":"

            \u30aa\u30fc\u30ca\u30fc\u306e\u30ed\u30fc\u30eb\u306f\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u305d\u306e\u95a2\u9023\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u5168\u3066\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5f7c\u3089\u306f\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u3001\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u3053\u306e\u30ed\u30fc\u30eb\u306b\u306f\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3001\u306a\u305c\u306a\u3089\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u672c\u756a\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u3089\u3067\u3059\u3002

            "},{"location":"ja/interacting/rbac/#maintainer","title":"\u30e1\u30f3\u30c6\u30ca","text":"

            \u30e1\u30f3\u30c6\u30ca\u306e\u30ed\u30fc\u30eb\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u81ea\u4f53\u3084\u672c\u756a\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3092\u9664\u3044\u3066\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u305d\u306e\u95a2\u9023\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u3067\u4f55\u3067\u3082\u3067\u304d\u307e\u3059\u3002\u5f7c\u3089\u306f\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u3001\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/interacting/rbac/#developer","title":"\u958b\u767a\u8005","text":"

            \u958b\u767a\u8005\u30ed\u30fc\u30eb\u306f\u958b\u767a\u74b0\u5883\u3078\u306eSSH\u30a2\u30af\u30bb\u30b9\u306e\u307f\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30ed\u30fc\u30eb\u306f\u3001\u672c\u756a\u74b0\u5883\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3001\u66f4\u65b0\u3001\u524a\u9664\u3092\u884c\u3046\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u672c\u756a\u74b0\u5883\u3092\u30bd\u30fc\u30b9\u3068\u3057\u3066\u540c\u671f\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u3059\u304c\u3001\u5b9b\u5148\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u307e\u305f\u3001\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u3082\u884c\u3048\u307e\u305b\u3093\u3002

            \u91cd\u8981

            \u3053\u306e\u30ed\u30fc\u30eb\u306f\u3001Git\u30d7\u30c3\u30b7\u30e5\u306b\u3088\u3063\u3066\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u308b\u305f\u3081\u3001\u672c\u756a\u74b0\u5883\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u9632\u3050\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002Git\u30b5\u30fc\u30d0\u30fc\u304c\u3053\u308c\u3089\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u672c\u756a\u74b0\u5883\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u306e\u3092\u9632\u3050\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/interacting/rbac/#reporter","title":"\u30ec\u30dd\u30fc\u30bf\u30fc","text":"

            \u30ec\u30dd\u30fc\u30bf\u30fc\u306e\u30ed\u30fc\u30eb\u306f\u3001\u95b2\u89a7\u30a2\u30af\u30bb\u30b9\u306e\u307f\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u5f7c\u3089\u306fSSH\u7d4c\u7531\u3067\u74b0\u5883\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u308a\u3001\u305d\u308c\u3089\u3092\u5909\u66f4\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u5f7c\u3089\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30ea\u30a2\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30ed\u30fc\u30eb\u306f\u4e3b\u306b\u3001\u30b9\u30c6\u30fc\u30af\u30db\u30eb\u30c0\u30fc\u304cLagoon UI\u3068\u30ed\u30b0\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/interacting/rbac/#guest","title":"\u30b2\u30b9\u30c8","text":"

            \u30b2\u30b9\u30c8\u306e\u30ed\u30fc\u30eb\u306f\u3001\u4e0a\u8a18\u306e\u30ec\u30dd\u30fc\u30bf\u30fc\u306e\u30ed\u30fc\u30eb\u3068\u540c\u7b49\u306e\u6a29\u9650\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

            \u4ee5\u4e0b\u306f\u305d\u306e\u8868\u3067\u3059\u3002 \u5f7c\u3089\u304c\u6301\u3064\u30ed\u30fc\u30eb\u3068\u30a2\u30af\u30bb\u30b9\u3092\u30ea\u30b9\u30c8\u3057\u307e\u3059:

            "},{"location":"ja/interacting/rbac/#lagoon-100-rbac-permission-matrix","title":"Lagoon 1.0.0 RBAC \u6a29\u9650\u30de\u30c8\u30ea\u30c3\u30af\u30b9","text":"\u81ea\u5206\u81ea\u8eab\u30b2\u30b9\u30c8\u958b\u767a\u8005\u30e1\u30f3\u30c6\u30ca\u30fc\u30aa\u30fc\u30ca\u30fc\u7d44\u7e54\u30d3\u30e5\u30fc\u30a2\u7d44\u7e54\u30aa\u30fc\u30ca\u30fc\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u6240\u6709\u8005\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5168\u4f53\u306e\u7ba1\u7406\u8005 \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID userCanSshToEnvironment environment ssh:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID userCanSshToEnvironment environment ssh:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u7bc4\u56f2 \u5c5e\u6027 addOrUpdateEnvironmentStorage environment storage addNotificationSlack notification add updateNotificationSlack notification update deleteNotificationSlack notification delete addKubernetes kubernetes add updateKubernetes kubernetes update deleteKubernetes kubernetes delete getAllOpenshifts openshift viewAll getAllProjects project viewAll addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID allEnvironments environment viewAll getEnvironmentStorageMonthByEnvironmentId environment storage getEnvironmentHoursMonthByEnvironmentId environment storage getEnvironmentHitsMonthByEnvironmentId environment storage addOrUpdateEnvironmentStorage environment storage addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add getAllOrganizations organization viewAll addOrganization add viewAll updateOrganization update viewAll deleteOrganization delete viewAll getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId \u540d\u524d \u30ea\u30bd\u30fc\u30b9 \u30b9\u30b3\u30fc\u30d7 \u5c5e\u6027 getEnvironmentStorageMonthByEnvironmentId environment storage getEnvironmentHoursMonthByEnvironmentId environment storage getEnvironmentHitsMonthByEnvironmentId environment storage getAllOpenshifts openshift viewAll addOrUpdateEnvironmentStorage environment storage addNotificationSlack notification add updateNotificationSlack notification update deleteNotificationSlack notification delete addKubernetes kubernetes add updateKubernetes kubernetes update deleteKubernetes kubernetes delete getAllProjects project viewAll addSshKey ssh_key add userID updateSshKey ssh_key update userID deleteSshKey ssh_key delete userID getUserSshKeys ssh_key view:user userID updateUser user update userID deleteUser user delete userID deleteEnvironment environment delete:production projectID deleteProject project delete projectID getProjectByEnvironmentId project viewPrivateKey projectID getProjectByGitUrl project viewPrivateKey projectID getProjectByName project viewPrivateKey projectID deleteBackup backup delete projectID addEnvVariable (to Project) env_var project:add projectID addEnvVariable (to Environment) env_var environment:add:production projectID deleteEnvVariable env_var delete projectID deleteEnvVariable (from Project) env_var project:delete projectID deleteEnvVariable (from Environment) env_var environment:delete:production projectID getEnvVarsByProjectId env_var project:viewValue projectID getEnvVarsByEnvironmentId env_var environment:viewValue:production projectID addOrUpdateEnvironment environment addOrUpdate:production projectID updateEnvironment environment update:production projectID addDeployment environment deploy:production projectID deleteDeployment deployment delete projectID updateDeployment deployment update projectID setEnvironmentServices environment update:production projectID deployEnvironmentLatest environment deploy:production projectID deployEnvironmentBranch environment deploy:production projectID deployEnvironmentPullrequest environment deploy:production projectID deployEnvironmentPromote environment deploy:production projectID updateGroup group update groupID deleteGroup group delete groupID addUserToGroup group addUser groupID removeUserFromGroup group removeUser groupID addNotificationToProject project addNotification projectID removeNotificationFromProject project removeNotification projectID updateProject project update projectID addGroupsToProject project addGroup projectID removeGroupsFromProject project removeGroup projectID addTask task add:production projectID taskDrushUserLogin task drushUserLogin:destination:production environmentID taskDrushSqlSync task drushSqlSync:destination:production projectID taskDrushRsyncFiles task drushRsync:destination:production projectID addBackup backup add projectID getBackupsByEnvironmentId backup view projectID addEnvVariable (to Environment) env_var environment:add:development projectID deleteEnvVariable (from Environment) env_var environment:delete:development projectID getEnvVarsByEnvironmentId env_var environment:viewValue:development projectID addOrUpdateEnvironment environment addOrUpdate:development projectID updateEnvironment environment update:development projectID deleteEnvironment environment delete:development projectID addDeployment environment deploy:development projectID setEnvironmentServices environment update:development projectID deployEnvironmentLatest environment deploy:development projectID deployEnvironmentBranch environment deploy:development projectID deployEnvironmentPullrequest environment deploy:development projectID deployEnvironmentPromote environment deploy:development projectID getNotificationsByProjectId notification view projectID addTask task add:development projectID taskDrushArchiveDump task drushArchiveDump:development projectID taskDrushArchiveDump task drushArchiveDump:production projectID taskDrushSqlDump task drushSqlDump:development projectID taskDrushSqlDump task drushSqlDump:production projectID taskDrushUserLogin task drushUserLogin:destination:development environmentID taskDrushSqlSync task drushSqlSync:source:development projectID taskDrushSqlSync task drushSqlSync:source:production projectID taskDrushSqlSync task drushSqlSync:destination:development projectID taskDrushRsyncFiles task drushRsync:source:development projectID taskDrushRsyncFiles task drushRsync:source:production projectID taskDrushRsyncFiles task drushRsync:destination:development projectID deleteTask task delete projectID updateTask task update projectID uploadFilesForTask task update projectID deleteFilesForTask task delete projectID getBackupsByEnvironmentId deployment view projectID getEnvironmentsByProjectId environment view projectID getEnvironmentServicesByEnvironmentId environment view projectID getEnvVarsByEnvironmentId env_var environment:view:development projectID getEnvVarsByEnvironmentId env_var environment:view:production projectID getEnvVarsByProjectId env_var project:view projectID addGroup group add getOpenshiftByProjectId openshift view projectID addProject project add getProjectByEnvironmentId project view projectID getProjectByGitUrl project view projectID getProjectByName project view projectID addRestore restore add projectID updateRestore restore update projectID taskDrushCacheClear task drushCacheClear:development projectID taskDrushCacheClear task drushCacheClear:production projectID taskDrushCron task drushCron:development projectID taskDrushCron task drushCron:production projectID getFilesByTaskId task view projectID getTasksByEnvironmentId task view projectID getTaskByRemoteId task view projectID getTaskById task view projectID addUser user add getAllOrganizations organization viewAll addOrganization add viewAll updateOrganization update viewAll deleteOrganization delete viewAll getOrganizationById organization view organizationId getProjectByEnvironmentId organization viewProject organizationId getGroupsByOrganizationId organization viewGroup organizationId getUsersByOrganizationId organization viewUsers organizationId getUserByEmailAndOrganizationId organization viewUser organizationId getNotificationsByOrganizationId organization viewNotification organizationId addProject organization addProject organizationId updateProject organization updateProject organizationId deleteProject organization deleteProject organizationId addGroup organization addGroup organizationId deleteGroup organization removeGroup organizationId addNotificationSlack organization addNotification organizationId updateNotificationSlack organization updateNotification organizationId deleteNotificationSlack organization removeNotification organizationId addUserToOrganization organization addOwner organizationId addUserToOrganization organization addViewer organizationId updateOrganization organization updateOrganization organizationId"},{"location":"ja/interacting/ssh/","title":"SSH","text":"

            Lagoon\u3067\u306f\u3001SSH\u3092\u901a\u3058\u3066\u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u81ea\u4f53\u306b\u306fSSH\u30b5\u30fc\u30d0\u30fc\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u4ee3\u308f\u308a\u306bSSH\u3092\u4f7f\u3063\u3066Lagoon\u306b\u63a5\u7d9a\u3057\u3001\u305d\u3053\u304b\u3089Kubernetes API\u3092\u901a\u3058\u3066\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u63a5\u7d9a\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

            "},{"location":"ja/interacting/ssh/#ssh_1","title":"SSH\u30a2\u30af\u30bb\u30b9\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3059\u308b","text":""},{"location":"ja/interacting/ssh/#ssh_2","title":"SSH\u30ad\u30fc\u306e\u751f\u6210","text":"

            \u540c\u3058\u30ad\u30fc\u3092\u8907\u6570\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u9593\u3067\u5171\u6709\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u5404\u30c7\u30d0\u30a4\u30b9\u3054\u3068\u306b\u5225\u3005\u306eSSH\u30ad\u30fc\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u5404\u30b7\u30b9\u30c6\u30e0\u3067\u306eSSH\u30ad\u30fc\u306e\u751f\u6210\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/interacting/ssh/#osxmac","title":"OSX(Mac)","text":"

            Mac

            "},{"location":"ja/interacting/ssh/#linuxubuntu","title":"Linux(Ubuntu)","text":"

            Linux

            "},{"location":"ja/interacting/ssh/#ssh_3","title":"SSH\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8","text":""},{"location":"ja/interacting/ssh/#osxmac_1","title":"OSX(Mac)","text":"

            OSX\u306f\u3001\u8d77\u52d5\u6642\u306b\u8a2d\u5b9a\u3055\u308c\u305fSSH\u30ad\u30fc\u3092\u30ed\u30fc\u30c9\u3059\u308b\u3088\u3046\u306bSSH\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u3053\u308c\u306b\u3088\u308a\u554f\u984c\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306e\u8a2d\u5b9a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u3061\u3089\u306e\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044:https://www.backarapper.com/add-ssh-keys-to-ssh-agent-on-startup-in-macos/

            "},{"location":"ja/interacting/ssh/#linux","title":"Linux","text":"

            Linux\u30c7\u30a3\u30b9\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3\u306f\u3001ssh-agent\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3088\u308a\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u30ac\u30a4\u30c9\u306f\u3053\u3053\u306b\u3042\u308a\u307e\u3059:https://www.ssh.com/academy/ssh/agent

            "},{"location":"ja/interacting/ssh/#windows_1","title":"Windows","text":"

            \u6700\u8fd1\u3067\u306fWindows\u3067\u306eSSH\u30ad\u30fc\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3001\u73fe\u5728\u3067\u306f\u30cd\u30a4\u30c6\u30a3\u30d6\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002Windows 10\u306eSSH\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306e\u4fbf\u5229\u306a\u30ac\u30a4\u30c9\u306f\u3053\u3053\u306b\u3042\u308a\u307e\u3059:https://richardballard.co.uk/ssh-keys-on-windows-10/

            "},{"location":"ja/interacting/ssh/#ssh_4","title":"SSH\u30ad\u30fc\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9","text":""},{"location":"ja/interacting/ssh/#ui","title":"UI\u3092\u901a\u3058\u3066","text":"

            SSH\u30ad\u30fc\u3092UI\u3092\u901a\u3058\u3066\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002\u901a\u5e38\u901a\u308a\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            \u53f3\u4e0a\u306e\u89d2\u306b\u3042\u308b\u8a2d\u5b9a\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059:

            \u6b21\u306b\u3001SSH\u30ad\u30fc\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u3001\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30ad\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30ad\u30fc\u3092\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\u8cbc\u308a\u4ed8\u3051\u3001\u540d\u524d\u3092\u4ed8\u3051\u3066\u300c\u8ffd\u52a0\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u305d\u308c\u3060\u3051\u3067\u3059\uff01\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8ffd\u52a0\u306e\u30ad\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

            "},{"location":"ja/interacting/ssh/#_1","title":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u7d4c\u7531","text":"

            \u30e6\u30fc\u30b6\u30fc\u306bSSH\u30ad\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306eLagoon API\u3092GraphQL\u7d4c\u7531\u3067\u4f7f\u7528\u3059\u308b\u4e00\u822c\u7684\u306a\u4f8b\u306f\u3001\u3053\u3061\u3089\u306b\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/interacting/ssh/#ssh_5","title":"\u30dd\u30c3\u30c9\u3078\u306eSSH\u63a5\u7d9a","text":""},{"location":"ja/interacting/ssh/#_2","title":"\u63a5\u7d9a","text":"

            \u63a5\u7d9a\u306f\u76f4\u63a5\u7684\u3067\u3001\u6b21\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u5f93\u3044\u307e\u3059:

            SSH
            ssh -p [PORT] -t [PROJECT-ENVIRONMENT-NAME]@[HOST]\n
            • PORT - \u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u306eSSH\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30dd\u30fc\u30c8(amazee.io\u306e\u5834\u5408:22)\u3002
            • HOST - \u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u306eSSH\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30db\u30b9\u30c8(amazee.io\u306e\u5834\u5408ssh.example.com)\u3002
            • PROJECT-ENVIRONMENT-NAME - \u63a5\u7d9a\u3057\u305f\u3044\u74b0\u5883\u3002\u3053\u308c\u306f\u901a\u5e38PROJECTNAME-ENVIRONMENT\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

            \u4f8b\u3048\u3070:

            SSH example
            ssh -p 22 -t drupal-example-main@ssh.example.com\n

            \u3053\u308c\u306b\u3088\u308a\u3001main\u74b0\u5883\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8drupal-example\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002

            "},{"location":"ja/interacting/ssh/#_3","title":"\u30dd\u30c3\u30c9/\u30b5\u30fc\u30d3\u30b9\u3001\u30b3\u30f3\u30c6\u30ca\u5b9a\u7fa9","text":"

            \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u30ea\u30e2\u30fc\u30c8\u30b7\u30a7\u30eb\u306f\u30bf\u30a4\u30d7cli\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u3088\u3046\u3068\u3057\u307e\u3059\u3002\u4ed6\u306e\u30dd\u30c3\u30c9/\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3067\u304d\u307e\u3059:

            SSH to another service
            ssh -p [PORT] -t [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8-\u74b0\u5883\u540d]@[\u30db\u30b9\u30c8] service=[\u30b5\u30fc\u30d3\u30b9\u540d]\n

            \u3042\u306a\u305f\u306e\u30dd\u30c3\u30c9/\u30b5\u30fc\u30d3\u30b9\u306b\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5834\u5408\u3001Lagoon\u306f\u3042\u306a\u305f\u3092\u6700\u521d\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u63a5\u7d9a\u3057\u305f\u3044\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

            \u30b3\u30f3\u30c6\u30ca\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002
            ssh -p [\u30dd\u30fc\u30c8] -t [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8-\u74b0\u5883\u540d]@[\u30db\u30b9\u30c8] service=[\u30b5\u30fc\u30d3\u30b9\u540d] container=[\u30b3\u30f3\u30c6\u30ca\u540d]\n

            \u4f8b\u3048\u3070\u3001nginx\u30dd\u30c3\u30c9\u5185\u306ephp\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3059\u308b\u306b\u306f:

            SSH to php container
            ssh -p 22 -t drupal-example-main@sssh.example.com service=nginx container=php\n
            "},{"location":"ja/interacting/ssh/#_4","title":"\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30d4\u30fc","text":"

            \u4e00\u822c\u7684\u306a\u30b1\u30fc\u30b9\u3067\u3001\u30d5\u30a1\u30a4\u30eb\u3092cli\u30dd\u30c3\u30c9\u306b\u30b3\u30d4\u30fc\u3059\u308b\u3053\u3068\u306f\u3001\u901a\u5e38\u306eSSH\u4e92\u63db\u30c4\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u9054\u6210\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/interacting/ssh/#scp","title":"scp","text":"Copy file with scp
            scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 22 [\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9] [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@ssh.example.com:[\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9]\n
            "},{"location":"ja/interacting/ssh/#rsync","title":"rsync","text":"Copy files with rsync
            rsync --rsh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22' [\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9] [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@ssh.example.com:[\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9]\n
            "},{"location":"ja/interacting/ssh/#tar","title":"tar","text":"Bash
            ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 22 [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@ssh.example.com tar -zcf - [\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9] | tar -zxf - -C /tmp/\n
            "},{"location":"ja/interacting/ssh/#cli","title":"\u975eCLI\u30dd\u30c3\u30c9/\u30b5\u30fc\u30d3\u30b9\u306e\u6307\u5b9a","text":"

            \u307e\u308c\u306a\u30b1\u30fc\u30b9\u3067\u3001\u975eCLI\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 service=...\u304a\u3088\u3073/\u307e\u305f\u306fcontainer=...\u5f15\u6570\u306f\u30b3\u30d4\u30fc\u30b3\u30de\u30f3\u30c9\u306b\u3042\u308a\u307e\u3059\u3002

            tar\u3092ssh\u63a5\u7d9a\u3092\u901a\u3057\u3066\u30d1\u30a4\u30d7\u3059\u308b\u3053\u3068\u306f\u6700\u3082\u5358\u7d14\u306a\u65b9\u6cd5\u3067\u3001\u901a\u5e38\u306etar\u30d5\u30e9\u30b0\u3092\u7528\u3044\u3066\u30d5\u30a1\u30a4\u30eb\u3084\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30fc\u3092\u30b3\u30d4\u30fc\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059:

            Bash
            ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 32222 [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@ssh.example.com service=solr tar -zcf - [\u30ea\u30e2\u30fc\u30c8\u30d1\u30b9] | tar -zxf - -C /tmp/\n

            \u307e\u305f\u3001Lagoon\u306eSSH\u30b5\u30fc\u30d3\u30b9\u306b\u5fc5\u8981\u306a\u5f62\u3067ssh\u306e\u5f15\u6570\u3092\u4e26\u3079\u66ff\u3048\u308b\u30e9\u30c3\u30d1\u30fc\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u7528\u3044\u3066rsync\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059:

            Bash
            #!/usr/bin/env sh\nsvc=$1 user=$3 host=$4\nshift 4\nexec ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 22 -l \"$user\" \"$host\" \"$svc\" \"$@\"\n

            \u305d\u308c\u3092\u5b9f\u884c\u53ef\u80fd\u306a\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8rsh.sh\u306b\u5165\u308c\u3066\u3001rsync\u30b3\u30de\u30f3\u30c9\u3067service=...\u3092\u6307\u5b9a\u3057\u307e\u3059:

            rsync to non-CLI pod
            rsync --rsh=\"/path/to/rsh.sh service=cli\" /tmp/foo [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d]-[\u74b0\u5883\u540d]@sssh.example.com:/tmp/foo\n

            \u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3001container=...\u5f15\u6570\u3082\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u8abf\u6574\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/installing-lagoon/efs-provisioner/","title":"EFS\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc","text":"

            \u60c5\u5831

            \u3053\u308c\u306fAWS\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u306e\u307f\u9069\u7528\u3055\u308c\u307e\u3059\u3002

            1. Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0\u3057\u307e\u3059:

              Helm\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0
              helm repo add stable https://charts.helm.sh/stable\n
            2. \u8a2d\u5b9a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306befs-provisioner-values.yml\u3092\u4f5c\u6210\u3057\u3001\u5024\u3092\u66f4\u65b0\u3057\u307e\u3059:

              efs-provisioner-values.yml
              efsProvisioner:\nefsFileSystemId: <efsFileSystemId>\nawsRegion: <awsRegion>\npath: /\nprovisionerName: example.com/aws-efs\nstorageClass:\nname: bulk\nisDefault: false\nreclaimPolicy: Delete\nmountOptions: []\nglobal:\ndeployEnv: prod\n
            3. EFS\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059:

              EFS\u30d7\u30ed\u30d3\u30b8\u30e7\u30ca\u30fc\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
              helm upgrade --install --create-namespace \\\n--namespace efs-provisioner --wait \\\n-f efs-provisioner-values.yaml \\\nefs-provisioner stable/efs-provisioner\n
            "},{"location":"ja/lagoonizing/","title":"\u65e2\u5b58\u306e\u30b5\u30a4\u30c8\u3092Lagoonizing","text":"

            \u300cLagoonizing\u300d\u3068\u306f\u3001\u65e2\u5b58\u306e\u30b5\u30a4\u30c8\u3092Lagoon\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306b\u9069\u5fdc\u3055\u305b\u308b\u3053\u3068\u3067\u3001\u901a\u5e38\u306f\u96e3\u3057\u304f\u306a\u3044\u4f5c\u696d\u3067\u3059\uff08\u305f\u3060\u3057\u3001\u30b5\u30a4\u30c8\u3084\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u3088\u308a\u7570\u306a\u308a\u307e\u3059\uff09\u3002\u300cLagoonizing\u300d\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u624b\u9806\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u7c21\u5358\u306b\u3059\u308b\u305f\u3081\u306e\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u306e\u30ac\u30a4\u30c9\u3092\u307e\u3068\u3081\u3066\u3044\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#_1","title":"\u8981\u4ef6","text":"

            \u3042\u306a\u305f\u306e\u30b7\u30b9\u30c6\u30e0\u304c\u30ed\u30fc\u30ab\u30eb\u3067Lagoon\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/lagoonizing/#_2","title":"\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883","text":"

            \u30ed\u30fc\u30ab\u30eb\u3067\u306e\u958b\u767a\u74b0\u5883\u306e\u8a2d\u5b9a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002Pygmy\u307e\u305f\u306fLando\u306e\u3044\u305a\u308c\u304b\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#git","title":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3068Git","text":"

            Lagoon\u3068\u306e\u3084\u308a\u53d6\u308a\u306b\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304c\u5fc5\u8981\u3067\u3059\u3057\u3001Git\u3082\u4f7f\u7528\u3057\u307e\u3059\u306e\u3067\u3001\u3053\u308c\u3089\u304c\u6e96\u5099\u3067\u304d\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/lagoonizing/#_3","title":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3","text":"

            \u30bf\u30b9\u30af\u306e\u5b9f\u884c\u306b\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002OS\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30c4\u30fc\u30eb\u3092\u542b\u3081\u3001\u4f55\u3092\u4f7f\u7528\u3057\u3066\u3044\u305f\u3060\u3044\u3066\u3082\u69cb\u3044\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u306b\u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u793a\u3057\u307e\u3059:

            • iTerm2 (Mac)
            • PowerShell (Windows)
            • Fish (Mac, Windows, Linux)
            • Tabby (Mac, Windows, Linux)
            "},{"location":"ja/lagoonizing/#git_1","title":"Git\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

            \u307e\u3060Git\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001 \u4f55\u3089\u304b\u306e\u5f62\u3067Git\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3001GUI\u3001\u4f55\u3067\u3082\u69cb\u3044\u307e\u305b\u3093(\u79c1\u305f\u3061\u306e\u4f8b\u3067\u306f\u3001\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059)\u3002\u4ee5\u4e0b\u306b\u3044\u304f\u3064\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u793a\u3057\u307e\u3059:

            • Git\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb (Mac\u3001Windows\u3001Linux)
            • SourceTree (Mac\u3001Windows)
            • GitHub Desktop (Mac\u3001Windows)
            • GitKraken (Mac\u3001Windows\u3001Linux - \u516c\u958b\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u7121\u6599)
            "},{"location":"ja/lagoonizing/#lagoon","title":"Lagoon\u7ba1\u7406\u8005\u304c\u5fc5\u8981\u3068\u3059\u308b\u3082\u306e","text":"

            Lagoon\u3092\u8a2d\u5b9a\u3059\u308bLagoon\u7ba1\u7406\u8005\u306f\u3001\u5404\u7a2e\u60c5\u5831\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u8a73\u7d30\u306f\u3053\u3061\u3089\u3002

            "},{"location":"ja/lagoonizing/#webhooks","title":"Webhooks\u306e\u8a2d\u5b9a","text":"

            \u6b21\u306b\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u305f\u3081\u306ewebhooks\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u624b\u9806\u306f\u3053\u3061\u3089\u304b\u3089\u3054\u78ba\u8a8d\u3044\u305f\u3060\u3051\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#docker-composeyml","title":"docker-compose.yml","text":"

            docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001Lagoon\u306b\u304a\u3044\u3066\u4ee5\u4e0b\u306e\u76ee\u7684\u3067\u4f7f\u7528\u3055\u308c\u307e\u3059:

            • \u3069\u306e\u30b5\u30fc\u30d3\u30b9/\u30b3\u30f3\u30c6\u30ca\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u304b\u3092\u5b66\u3076\u3002
            • \u30b3\u30f3\u30c6\u30ca\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u3069\u306e\u3088\u3046\u306b\u30d3\u30eb\u30c9\u3055\u308c\u308b\u304b\u3092\u5b9a\u7fa9\u3059\u308b\u3002
            • \u6c38\u7d9a\u30dc\u30ea\u30e5\u30fc\u30e0\u306a\u3069\u306e\u8ffd\u52a0\u8a2d\u5b9a\u3092\u5b9a\u7fa9\u3059\u308b\u3002

            \u3055\u3089\u306b\u8a73\u3057\u3044\u60c5\u5831\u306fdocker-compose.yml\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044.

            docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u3092Lagoon\u306b\u5bfe\u5fdc\u3055\u305b\u308b\u305f\u3081\u306b\u4f5c\u6210\u30fb\u8a2d\u5b9a\u3059\u308b2\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u3046\u3061\u306e1\u3064\u3067\u3059\u3002

            Docker-compose(\u30c4\u30fc\u30eb)\u306f\u3001YAML\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u53b3\u683c\u306b\u691c\u8a3c\u3059\u308b\u306e\u3067\u3001\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\u306e\u30e9\u30d9\u30eb\u5185\u3067\u306e\u307f\u8a2d\u5b9a\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            \u8b66\u544a

            Lagoon\u306fdocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30e9\u30d9\u30eb\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u3001\u30a4\u30e1\u30fc\u30b8\u540d\u3001\u30d3\u30eb\u30c9\u5b9a\u7fa9\u306e\u307f\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u30dd\u30fc\u30c8\u3001\u74b0\u5883\u5909\u6570\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u30ea\u30f3\u30af\u3001\u30e6\u30fc\u30b6\u30fc\u306a\u3069\u306e\u5b9a\u7fa9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u610f\u56f3\u7684\u306a\u3082\u306e\u3067\u3001docker-compose\u30d5\u30a1\u30a4\u30eb\u306f\u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u8a2d\u5b9a\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002Lagoon\u306flagoon.type\u304b\u3089\u3042\u306a\u305f\u304c\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u3044\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u5b66\u3073\u3001\u305d\u306e\u7d50\u679c\u3001\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u5fc5\u8981\u3068\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30dd\u30fc\u30c8\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u305d\u306e\u4ed6\u306e\u8ffd\u52a0\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u77e5\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            \u57fa\u672c\u7684\u306a\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u65b9\u6cd5\u3092\u3044\u304f\u3064\u304b\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u4f8b\u3067\u306f\u3001Drupal\u3001Laravel\u3001\u305d\u306e\u4ed6\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u306a\u3069\u3001\u591a\u304f\u306e\u30b7\u30b9\u30c6\u30e0\u306b\u5fc5\u8981\u306aNGINX\u3001PHP\u3001MariaDB\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002

            \u4ee5\u4e0b\u306f\u3001Drupal\u7528\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\u3067\u3059:

            docker-compose.yml
            version: '2.3'\nx-lagoon-project:\n# Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff08\u3053\u3053\u3092\u7de8\u96c6\u3059\u308b\u5834\u5408\u306f\u3001&lagoon-project\u3092\u4fdd\u6301\u3057\u3066\u304f\u3060\u3055\u3044\uff09\n&lagoon-project drupal-example\nx-volumes:\n&default-volumes\n# Docker\u30b3\u30f3\u30c6\u30ca\u306b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30de\u30a6\u30f3\u30c8\u3057\u305f\u3044\u3059\u3079\u3066\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u5b9a\u7fa9\u3057\u307e\u3059\nvolumes:\n- .:/app:delegated\nx-environment:\n&default-environment\nLAGOON_PROJECT: *lagoon-project\n# \u30ed\u30fc\u30ab\u30eb\u3067\u4f7f\u7528\u3059\u308b\u30eb\u30fc\u30c8\u3002pygmy\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u30eb\u30fc\u30c8\u306f *\u5fc5\u305a* .docker.amazee.io\u3067\u7d42\u308f\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\nLAGOON_ROUTE: http://drupal-example.docker.amazee.io\n# \u30b7\u30b9\u30c6\u30e0\u3092\u672c\u756a\u74b0\u5883\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3055\u305b\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u884c\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\n#LAGOON_ENVIRONMENT_TYPE: production\n# xdebug\u3092\u6709\u52b9\u306b\u3057\u3001`docker-compose up -d`\u3067\u518d\u8d77\u52d5\u3057\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u884c\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\n#XDEBUG_ENABLE: \"true\"\nx-user:\n&default-user\n# \u30b3\u30f3\u30c6\u30ca\u304c\u5b9f\u884c\u3059\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u3002Linux\u4e0a\u3067id `1000`\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u5834\u5408\u306b\u306f\u3053\u308c\u3092\u5909\u66f4\u3057\u307e\u3059\u3002\nuser: '1000'\nservices:\nnginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.name: nginx\nlagoon.persistent: /app/web/sites/default/files/\nmariadb:\nimage: uselagoon/mariadb-10.11-drupal\nlabels:\nlagoon.type: mariadb\n

            \u305d\u308c\u305e\u308c\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u4f55\u3092\u610f\u5473\u3059\u308b\u304b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002

            "},{"location":"ja/lagoonizing/#_4","title":"\u57fa\u672c\u8a2d\u5b9a","text":"

            x-lagoon-project: \u3053\u308c\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30de\u30b7\u30f3\u540d\u3067\u3059\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002\"drupal-example\"\u3068\u3044\u3046\u4f8b\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

            x-volumes: \u3053\u308c\u306fLagoon\u306b\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3082\u306e\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f/app\u306b\u5b58\u5728\u3057\u307e\u3059\u304c\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u3053\u308c\u3092\u8ffd\u52a0\u307e\u305f\u306f\u5909\u66f4\u3067\u304d\u307e\u3059\u3002

            x-environment:

            • \u3053\u3053\u3067\u30ed\u30fc\u30ab\u30eb\u958b\u767aURL\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002Pygmy\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001.docker.amazee.io.\u3067\u7d42\u308f\u3089\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
            • \u672c\u756a\u74b0\u5883\u3068\u5168\u304f\u540c\u3058\u74b0\u5883\u3092\u518d\u73fe\u3057\u305f\u3044\u5834\u5408\u306f\u3001LAGOON_ENVIRONMENT_TYPE: production\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002
            • x-debug\u3092\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001DEBUG_ENABLE: \"true\"\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            x-user: \u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u307b\u3068\u3093\u3069\u3042\u308a\u307e\u305b\u3093\u304c\u3001Linux\u3092\u4f7f\u7528\u3057\u3066\u3044\u30661000\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306f\u5909\u66f4\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#services","title":"services","text":"

            services\u306f\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002docker-compose\u306f\u305d\u308c\u3089\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059\u304c\u3001\u5b9f\u969b\u306b\u306f\u30b3\u30f3\u30c6\u30ca\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u3002\u4eca\u5f8c\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u3053\u308c\u3089\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059\u3002

            \u30b5\u30fc\u30d3\u30b9\u306e \u540d\u524d (\u4e0a\u8a18\u306e\u4f8b\u3067\u306f nginx\u3001php\u3001mariadb) \u306f\u3001\u751f\u6210\u3055\u308c\u308b Kubernetes \u30dd\u30c3\u30c9 (\u3053\u308c\u3082\u5225\u306e\u7528\u8a9e\u3067\u3059\u304c\u3001\u3053\u3053\u3067\u306f\u30b5\u30fc\u30d3\u30b9\u3068\u547c\u3073\u307e\u3059) \u306e\u540d\u524d\u3068\u3057\u3066 Lagoon \u306b\u3088\u3063\u3066\u4f7f\u7528\u3055\u308c\u3001\u3055\u3089\u306b\u5b9a\u7fa9\u3055\u308c\u305f lagoon.type \u306b\u57fa\u3065\u3044\u3066\u4f5c\u6210\u3055\u308c\u308b\u8ffd\u52a0\u306e Kubernetes \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\u3068\u3057\u3066\u3082\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3001\u30eb\u30fc\u30c8\u3001\u6c38\u7d9a\u30b9\u30c8\u30ec\u30fc\u30b8\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#docker-images","title":"Docker \u30a4\u30e1\u30fc\u30b8","text":"

            \u30c7\u30d7\u30ed\u30a4\u6bce\u306b\u30b5\u30fc\u30d3\u30b9\u7528\u306eDockerfile\u3092Lagoon\u304c\u30d3\u30eb\u30c9\u3059\u308b\u3088\u3046\u8a2d\u5b9a\u3057\u305f\u3044\u5834\u5408\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3067\u304d\u307e\u3059:

            build - context : Docker \u306e build \u30b3\u30de\u30f3\u30c9\u306b\u6e21\u3059\u3079\u304d\u30d3\u30eb\u30c9\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306e\u30d1\u30b9\u3002 - dockerfile: \u30d3\u30eb\u30c9\u3059\u308b Dockerfile \u306e\u5834\u6240\u3068\u540d\u524d\u3002

            \u6ce8\u610f

            Lagoon \u306f build: <Dockerfile> \u306e\u77ed\u7e2e\u5f62\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u3089\u305a\u3001\u3053\u306e\u5f62\u5f0f\u306e\u5b9a\u7fa9\u304c\u898b\u3064\u304b\u308b\u3068\u30d3\u30eb\u30c9\u306b\u5931\u6557\u3057\u307e\u3059\u3002

            image - Dockerfile \u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u3001\u65e2\u5b58\u306e Dockerfile \u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001image \u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002

            \u3053\u306e\u4f8b\u3067\u306f\u3001\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002NGINX \u306f nginx.dockerfile \u3092\u30d3\u30eb\u30c9\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3001PHP \u306f php.dockerfile \u3092\u30d3\u30eb\u30c9\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002MariaDB \u306f uselagoon/mariadb-10.11-drupal \u306e\u65e2\u5b58\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002Docker \u30a4\u30e1\u30fc\u30b8\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089 \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/lagoonizing/#types","title":"\u30bf\u30a4\u30d7","text":"

            Lagoon\u306f\u3001\u6b63\u3057\u3044Kubernetes\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u3001\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3092\u77e5\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            \u3053\u308c\u306f lagoon.type \u30e9\u30d9\u30eb\u3092\u4ecb\u3057\u3066\u884c\u308f\u308c\u307e\u3059\u3002\u9078\u629e\u3067\u304d\u308b\u30bf\u30a4\u30d7\u306f\u591a\u5c90\u306b\u308f\u305f\u308a\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u30bf\u30a4\u30d7\u3068\u8ffd\u52a0\u7684\u306a\u8a2d\u5b9a\u53ef\u80fd\u6027\u3092\u898b\u308b\u305f\u3081\u306b\u3001\u516c\u958b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 Service Types \u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002

            \u4f8b\u3067\u306f\u3001PHP\u3068NGINX\u306e\u30b5\u30fc\u30d3\u30b9\u306f nginx-php-persistent \u3068\u3057\u3066\u30bf\u30a4\u30d7\u306e\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9\u3068\u547c\u3070\u308c\u308b\u3082\u306e\u3067\u3059\u3002

            "},{"location":"ja/lagoonizing/#_5","title":"\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9","text":"

            Kubernetes\u306f\u5358\u72ec\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001\u4e00\u3064\u307e\u305f\u306f\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u542b\u3080\u30dd\u30c3\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u901a\u5e38\u3001Lagoon\u306f\u5b9a\u7fa9\u3055\u308c\u305f docker-compose \u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u3001\u4e00\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u542b\u3080\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u4e00\u90e8\u306e\u30b1\u30fc\u30b9\u3067\u306f\u3001\u4e92\u3044\u306b\u4f9d\u5b58\u5ea6\u304c\u9ad8\u3044\u305f\u3081\u3001\u4e8c\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u5358\u4e00\u306e\u30dd\u30c3\u30c9\u5185\u306b\u914d\u7f6e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002Drupal\u306e\u3088\u3046\u306a\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306ePHP\u30b3\u30fc\u30c9\u3092\u542b\u3080PHP\u3068NGINX\u30b3\u30f3\u30c6\u30ca\u304c\u305d\u306e\u4f8b\u3067\u3059\u3002

            \u3053\u308c\u3089\u306e\u30b1\u30fc\u30b9\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3057\u3066Lagoon\u306b\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4e00\u7dd2\u306b\u914d\u7f6e\u3055\u308c\u308b\u3079\u304d\u304b\u3092\u6307\u793a\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059:

            1. \u4e8c\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u5fc5\u8981\u306alagoon.type\u3092\u6307\u5b9a\u3057\u3066\u3001\u305d\u308c\u305e\u308c\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\uff08\u3053\u306e\u4f8b\u3067\u306f\u3001NGINX\u3068PHP\u306e\u30b5\u30fc\u30d3\u30b9\u306bnginx-php-persistent\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\uff09\u3002
            2. \u4e8c\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u306elagoon.name\u30e9\u30d9\u30eb\u3092\u4e00\u756a\u76ee\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u4e00\u81f4\u3055\u305b\u3066\u30ea\u30f3\u30af\u3057\u307e\u3059\uff08\u4f8b\u3067\u306flagoon.name: nginx\u306b\u3088\u308a\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\uff09\u3002

            \u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u306f nginx \u3068 php \u306e\u30b5\u30fc\u30d3\u30b9\u304c nginx \u3068\u547c\u3070\u308c\u308b\u30dd\u30c3\u30c9\u306b\u7d50\u5408\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3057\u307e\u3059\u3002

            Lagoon\u306f2\u3064\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u3046\u3061\u3069\u3061\u3089\u304c\u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3067\u3042\u308b\u304b(\u3053\u306e\u5834\u5408\u306f nginx \u3068 php )\u3092\u7406\u89e3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u4e00\u81f4\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u306e\u30b5\u30fc\u30d3\u30b9\u540d\u3092\u691c\u7d22\u3059\u308b\u3053\u3068\u3067\u884c\u3044\u307e\u3059\u3002 nginx-php-persistent \u306f\u3001 docker-compose.yml \u306e\u4e2d\u3067 nginx \u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3068 php \u3068\u3044\u3046\u540d\u524d\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u3002

            \u30b5\u30fc\u30d3\u30b9\u540d\u3092\u5909\u66f4\u3057\u305f\u3044\u5834\u5408\u3084\u3001nginx-php-persistent\u30bf\u30a4\u30d7\u306e\u8907\u6570\u306e\u30dd\u30c3\u30c9\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001lagoon.deployment.servicetype\u3068\u3044\u3046\u8ffd\u52a0\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3001\u5b9f\u969b\u306e\u30b5\u30fc\u30d3\u30b9\u30bf\u30a4\u30d7\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002

            \u4ee5\u4e0b\u306b\u3001\u30de\u30eb\u30c1\u30b3\u30f3\u30c6\u30ca\u30dd\u30c3\u30c9\u3092\u3088\u308a\u8a73\u7d30\u306b\u8a2d\u5b9a\u3059\u308b\u4f8b\u3092\u793a\u3057\u307e\u3059:

            docker-compose.yml
            nginx:\nbuild:\ncontext: .\ndockerfile: nginx.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # \u3053\u308c\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001Lagoon\u306f\u30b3\u30f3\u30c6\u30ca\u306e\u540d\u524d\u3001\u3053\u306e\u5834\u5408\u306fnginx\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\nlagoon.deployment.servicetype: nginx\nphp:\nbuild:\ncontext: .\ndockerfile: php.dockerfile\nlabels:\nlagoon.type: nginx-php-persistent\nlagoon.persistent: /app/web/sites/default/files/\nlagoon.name: nginx # \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092Lagoon\u306enginx\u30dd\u30c3\u30c9\u306e\u4e00\u90e8\u306b\u3057\u305f\u3044\u3067\u3059\u3002\nlagoon.deployment.servicetype: php\n

            docker-compose.yml\u3067\u3067\u304d\u308b\u3053\u3068\u306f\u3082\u3063\u3068\u3042\u308a\u307e\u3059\u304c\u3001\u30b5\u30fc\u30d3\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u6700\u3082\u91cd\u8981\u306a\u90e8\u5206\u3067\u3059\u3002docker-compose.yml\u306b\u95a2\u3059\u308b\u6211\u3005\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u4ed6\u306b\u4f55\u304c\u3067\u304d\u308b\u304b\u3092\u5b66\u3093\u3067\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/lagoonizing/#lagoonyml","title":".lagoon.yml","text":"

            .lagoon.yml \u30d5\u30a1\u30a4\u30eb\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u306e\u4e2d\u5fc3\u3068\u306a\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3001\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u542b\u3093\u3067\u3044\u307e\u3059:

            • \u30b5\u30a4\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u30eb\u30fc\u30c8\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002
            • \u30d7\u30ec\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002
            • \u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u3002
            • SSL\u8a3c\u660e\u66f8\u3092\u8a2d\u5b9a\u3059\u308b\u3002
            • \u74b0\u5883\u306e\u305f\u3081\u306ecron\u30b8\u30e7\u30d6\u3092\u8ffd\u52a0\u3059\u308b\u3002

            .lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30eb\u30fc\u30c8\u306b\u914d\u7f6e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            \u4ee5\u4e0b\u306f\u3001Drupal\u30b5\u30a4\u30c8\u7528\u306e\u69d8\u3005\u306a\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u793a\u3059.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\u3067\u3059:

            .lagoon.yml
            docker-compose-yaml: docker-compose.yml\nenvironment_variables:\ngit_sha: 'true'\ntasks:\npre-rollout:\n- run:\nname: drush sql-dump\ncommand: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz\nservice: cli\npost-rollout:\n- run:\nname: drush cim\ncommand: drush -y cim\nservice: cli\nshell: bash\n- run:\nname: drush cr\ncommand: drush -y cr\nservice: cli\nroutes:\ninsecure: Redirect\nenvironments:\nmain:\nmonitoring_urls:\n- \"www.example.com\"\n- \"www.example.com/special_page\"\nroutes:\n- nginx:\n- example.com\n- example.net\n- \"www.example.com\":\ntls-acme: 'true'\ninsecure: Redirect\nhsts: max-age=31536000\n- \"example.ch\":\nAnnotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # 1\u6642\u9593\u306b1\u56decron\u3092\u5b9f\u884c\u3057\u307e\u3059\ncommand: drush cron\nservice: cli\nstaging:\ncronjobs:\n- name: drush cron\nschedule: \"H * * * *\" # 1\u6642\u9593\u306b1\u56decron\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\ncommand: drush cron\nservice: cli\n
            "},{"location":"ja/lagoonizing/#_6","title":"\u4e00\u822c\u8a2d\u5b9a","text":""},{"location":"ja/lagoonizing/#docker-compose-yaml","title":"docker-compose-yaml","text":"

            \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30d3\u30eb\u30c9\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u3069\u306edocker-compose YAML\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3079\u304d\u304b\u3092\u6307\u793a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3068\u30b3\u30f3\u30c6\u30ca\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u304b\u3092\u5224\u65ad\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fdocker-compose.yml\u3067\u3059\u304c\u3001\u7279\u5b9a\u306eLagoon docker-compose YAML\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#environment_variablesgit_sha","title":"environment_variables.git_sha","text":"

            \u3053\u306e\u8a2d\u5b9a\u306b\u3088\u308a\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f Git SHA \u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u633f\u5165\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u5024\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068\u3001SHA \u304c\u74b0\u5883\u5909\u6570 LAGOON_GIT_SHA \u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#tasks","title":"\u30bf\u30b9\u30af","text":"

            \u30d3\u30eb\u30c9\u30d5\u30ed\u30fc\u306e\u4e2d\u3067\u5b9f\u884c\u3055\u308c\u308b\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u3088\u3063\u3066\u3001\u7570\u306a\u308b\u30bf\u30a4\u30d7\u306e\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\uff1a

            "},{"location":"ja/lagoonizing/#pre-rollout-tasks-pre_rolloutirun","title":"\u30d7\u30ec\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af - pre_rollout.[i].run","text":"

            pre_rollout \u30bf\u30b9\u30af\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u305f\u30bf\u30b9\u30af\u306f\u3001\u65b0\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f \u5f8c\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u4f55\u3089\u304b\u306e\u5f62\u3067\u5909\u66f4\u3055\u308c\u308b \u524d \u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306b\u3088\u308a\u3001\u305f\u3068\u3048\u3070\u3001\u4e0a\u8a18\u306e\u4f8b\u306e\u3088\u3046\u306b\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306e\u5b9f\u884c\u524d\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 \u30c0\u30f3\u30d7\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u3067\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306b\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u3057\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#post-rollout-tasks-post_rolloutirun","title":"\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af - post_rollout.[i].run","text":"

            \u3053\u3053\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u6761\u4ef6\u304c\u6e80\u305f\u3055\u308c\u305f\u5f8c\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u306e\u3042\u308b\u30bf\u30b9\u30af\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\uff1a

            • \u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u30d3\u30eb\u30c9\u3055\u308c\u305f
            • \u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u65b0\u3057\u3044\u30a4\u30e1\u30fc\u30b8\u3067\u66f4\u65b0\u3055\u308c\u305f
            • \u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u6e96\u5099\u72b6\u614b\u30c1\u30a7\u30c3\u30af\u306b\u5408\u683c\u3057\u305f

            post_rollout \u30bf\u30b9\u30af\u306e\u4e00\u822c\u7684\u306a\u7528\u9014\u306b\u306f\u3001drush updb\u3001drush cim \u306e\u5b9f\u884c\u3001\u307e\u305f\u306f\u3055\u307e\u3056\u307e\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001drush cim \u3068 drush cr \u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

            name

            • name \u306f\u3001\u30ed\u30b0\u3067\u5404\u30bf\u30b9\u30af\u3092\u8b58\u5225\u3057\u3084\u3059\u304f\u3059\u308b\u305f\u3081\u306e\u4efb\u610f\u306e\u30e9\u30d9\u30eb\u3067\u3059\u3002

            command

            • \u3053\u3053\u3067\u306f\u3001\u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u3001\u5404\u30b3\u30f3\u30c6\u30ca\u306e WORKDIR \u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002Lagoon \u30a4\u30e1\u30fc\u30b8\u306e\u5834\u5408\u3001\u3053\u308c\u306f /app \u3067\u3059\u3002\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u7279\u5b9a\u306e\u5834\u6240\u306b cd \u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u70b9\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            service

            • \u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u3002\u79c1\u305f\u3061\u306edrupal-example\u306b\u5f93\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u308c\u306fCLI\u30b3\u30f3\u30c6\u30ca\u306b\u306a\u308a\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u305d\u308c\u306f\u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u306e\u30b3\u30fc\u30c9\u3001\u30d5\u30a1\u30a4\u30eb\u3001\u305d\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u63a5\u7d9a\u3092\u5168\u3066\u6301\u3063\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002\u901a\u5e38\u3001\u3053\u308c\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

            shell

            \u30bf\u30b9\u30af\u306e\u5b9f\u884c\u306b\u4f7f\u7528\u3059\u308b\u30b7\u30a7\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f sh \u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u304c\u3001\u30b3\u30f3\u30c6\u30ca\u306b\u4ed6\u306e\u30b7\u30a7\u30eb(bash\u306a\u3069)\u304c\u3042\u308b\u5834\u5408\u3001\u3053\u3053\u3067\u305d\u308c\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30dd\u30b9\u30c8\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u5185\u3067\u3044\u304f\u3064\u304b\u306e\u5c0f\u3055\u306aif/else bash\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u305f\u3044\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002(\u4e0a\u8a18\u306e\u4f8b\u3067\u8907\u6570\u884c\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u66f8\u304f\u65b9\u6cd5\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)\u3002

            "},{"location":"ja/lagoonizing/#routes","title":"\u30eb\u30fc\u30c8","text":""},{"location":"ja/lagoonizing/#routesautogenerateenabled","title":"routes.autogenerate.enabled","text":"

            \u3053\u308c\u306b\u3088\u308a\u3001\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u3092\u5b8c\u5168\u306b\u7121\u52b9\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u74b0\u5883\u3054\u3068\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092\u7121\u52b9\u306b\u3059\u308b\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u8a73\u7d30\u306f\u4e0b\u8a18\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/lagoonizing/#routesautogenerateinsecure","title":"routes.autogenerate.insecure","text":"

            \u3053\u308c\u306b\u3088\u308a\u3001\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30eb\u30fc\u30c8\u306e\u52d5\u4f5c\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u74b0\u5883\u3054\u3068\u306e\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff08\u8a73\u7d30\u306f\u5f8c\u8ff0\uff09\u3002\u3053\u308c\u306f\u4e0a\u8a18\u306e\u4f8b\u3067\u4f7f\u7528\u3057\u3066\u3044\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3001insecure: Redirect\u3068\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

            \u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059:

            Allow

            • HTTP\u3068HTTPS\u306e\u4e21\u65b9\u306e\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059(\u3053\u308c\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3059)\u3002

            Redirect

            • \u3059\u3079\u3066\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092HTTPS\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002

            None

            • HTTP\u306e\u30eb\u30fc\u30c8\u306f\u4f5c\u6210\u3055\u308c\u305a\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u3042\u308a\u307e\u305b\u3093\u3002
            "},{"location":"ja/lagoonizing/#_7","title":"\u74b0\u5883","text":"

            \u74b0\u5883\u540d\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u307e\u305f\u306f\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u4e00\u81f4\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5404\u74b0\u5883\u306f\u7570\u306a\u308b\u8a2d\u5b9a\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u4f8b\u3067\u306f\u3001main\u3068staging\u306e\u74b0\u5883\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#_8","title":"\u7279\u5b9a\u306e\u30d1\u30b9\u306e\u76e3\u8996","text":"

            UptimeRobot\u304c\u30af\u30e9\u30b9\u30bf\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001Lagoon\u306f\u5404\u30eb\u30fc\u30c8/\u30a4\u30f3\u30b0\u30ec\u30b9\u306bstakater/IngressControllerMonitor\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u6ce8\u5165\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u52d5\u4f5c\u306f\u30eb\u30fc\u30c8\u306e\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u3092\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u7279\u5b9a\u306e\u30eb\u30fc\u30c8\u3092\u76e3\u8996\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u30eb\u30fc\u30c8\u306e\u4ed5\u69d8\u306bmonitoring-path\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3053\u308c\u3092\u4e0a\u66f8\u304d\u3067\u304d\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u4f7f\u7528\u6cd5\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30d0\u30a4\u30d1\u30b9\u3059\u308b\u76e3\u8996\u7528\u306e\u30d1\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30b5\u30a4\u30c8\u306e\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u76e3\u8996\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002

            .lagoon.yml\u306e\u4f8b
                 - \"www.example.com\":\nmonitoring-path: \"/bypass-cache\"\n
            "},{"location":"ja/lagoonizing/#environmentsnameroutes","title":"environments.[name].routes","text":"

            \u30eb\u30fc\u30c8\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u74b0\u5883\u304c\u5fdc\u7b54\u3059\u308b\u30c9\u30e1\u30a4\u30f3\u540d\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u901a\u5e38\u3001\u672c\u756a\u74b0\u5883\u7528\u306e\u30eb\u30fc\u30c8\u306e\u307f\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u74b0\u5883\u306f\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u304c\u3001\u672c\u756a\u4ee5\u5916\u306e\u74b0\u5883\u304c\u72ec\u81ea\u306e\u30c9\u30e1\u30a4\u30f3\u540d\u3092\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u3053\u3067\u6307\u5b9a\u3057\u3001DNS\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3067\u305d\u306e\u30c9\u30e1\u30a4\u30f3\u3092\u751f\u6210\u3055\u308c\u305f\u30eb\u30fc\u30c8\u540d\u3078\u306eCNAME\u3068\u3057\u3066\u8ffd\u52a0\u3067\u304d\u307e\u3059\uff08\u3053\u308c\u3089\u306e\u30eb\u30fc\u30c8\u306f\u30c7\u30d7\u30ed\u30a4\u30e1\u30c3\u30bb\u30fc\u30b8\u3067\u516c\u958b\u3055\u308c\u307e\u3059\uff09\u3002

            \u74b0\u5883\u8a2d\u5b9a\u306e\u5f8c\u306b\u8a18\u8ff0\u3055\u308c\u308b\u6700\u521d\u306e\u8981\u7d20\u306f\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u4f8b\u3067\u306fNGINX\u304c\u30bf\u30fc\u30b2\u30c3\u30c8\u30b5\u30fc\u30d3\u30b9\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u53d7\u4fe1\u3057\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u8ee2\u9001\u3059\u308b\u304b\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002

            \u6700\u3082\u30b7\u30f3\u30d7\u30eb\u306a\u30eb\u30fc\u30c8\u306f\u3001\u4e0a\u8a18\u306e\u30b5\u30f3\u30d7\u30eb.lagoon.yml\u306b\u3042\u308bexample.com\u306e\u4f8b\u3067\u3059\u3002\u8ffd\u52a0\u306e\u8a2d\u5b9a\u304c\u306a\u3044\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30eb\u30fc\u30c8\u306bLet's Encrypt\u8a3c\u660e\u66f8\u304c\u5fc5\u8981\u3067\u3001HTTPS\u304b\u3089HTTP\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u304c\u4e0d\u8981\u3067\u3042\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#_9","title":"\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3","text":"

            \u60c5\u5831

            \u30eb\u30fc\u30c8/\u30a4\u30f3\u30b0\u30ec\u30b9\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u3001nginx-ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u30af\u30e9\u30b9\u30bf\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u307f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            \u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u3001nginx-ingress\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308bYAML\u30de\u30c3\u30d7\u5f62\u5f0f\u3067\u8a18\u8ff0\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u7c21\u5358\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306b\u4fbf\u5229\u3067\u3059:

            \u4f8b\u3048\u3070\u3001example.ch\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092https://www.example.ch\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u3001\u30d5\u30a9\u30eb\u30c0\u3084\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u7dad\u6301\u3057\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059:

            (example.com/folder?query -> https://www.example.ch/folder?query)

            .lagoon.yml \u306e\u4f8b
                    - \"example.ch\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri\n- www.example.ch\n

            \u3082\u3061\u308d\u3093\u3001Lagoon\u3067\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u4ed6\u306eURL\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u53ef\u80fd\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001example.de\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092https://www.google.com\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u5834\u5408:

            .lagoon.yml \u306e\u4f8b
                    - \"example.de\":\nannotations:\nnginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com\n
            "},{"location":"ja/lagoonizing/#ssl-tls-acme","title":"SSL\u8a2d\u5b9a - tls-acme","text":"

            tls-acme : \u2018true\u2019

            • Lagoon\u306b\u305d\u306e\u30eb\u30fc\u30c8\u306b\u5bfe\u3057\u3066Let's Encrypt\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\u3053\u308c\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3059\u3002
            • Let's Encrypt\u304c\u4e0d\u8981\u306a\u5834\u5408\u3001\u3053\u308c\u3092 tls-acme: \u2018false\u2019 \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002

            insecure

            • Allow\uff1aHTTP\u3068HTTPS\u4e21\u65b9\u306e\u30eb\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\uff09\u3002
            • Redirect\uff1aHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092HTTPS\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u307e\u3059\u3002
            • None\uff1aHTTP\u30eb\u30fc\u30c8\u306f\u4f5c\u6210\u3055\u308c\u305a\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u884c\u308f\u308c\u307e\u305b\u3093\u3002

            None

            • HTTP\u306e\u30eb\u30fc\u30c8\u306f\u4f5c\u6210\u3055\u308c\u305a\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u884c\u308f\u308c\u307e\u305b\u3093\u3002

            Hsts

            • max-age=31536000;includeSubDomains;preload\u306e\u3088\u3046\u306a\u5024\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
            • \u30b9\u30da\u30fc\u30b9\u3084\u4ed6\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
            • max-age\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u307f\u304c\u5fc5\u9808\u3067\u3059\u3002\u3053\u308c\u306fHSTS\u30dd\u30ea\u30b7\u30fc\u306e\u6709\u52b9\u671f\u9593\u3092\u79d2\u5358\u4f4d\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002

            Info

            \u8a3c\u660e\u66f8\u8a8d\u8a3c\u5c40(CA)\u306b\u3088\u3063\u3066\u7f72\u540d\u3055\u308c\u305f SSL \u8a3c\u660e\u66f8\u304b\u3089 Let's Encrypt \u8a3c\u660e\u66f8\u306b\u5207\u308a\u66ff\u3048\u308b\u4e88\u5b9a\u304c\u3042\u308b\u5834\u5408\u306f\u3001Lagoon \u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u79fb\u884c\u3092\u76e3\u7763\u3057\u3066\u3082\u3089\u3046\u306e\u304c\u6700\u5584\u3067\u3059\u3002

            "},{"location":"ja/lagoonizing/#environmentsnametypes","title":"environments.[name].types","text":"

            Lagoon \u306e\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f docker-compose.yml \u30d5\u30a1\u30a4\u30eb\u306e lagoon.type \u30e9\u30d9\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u3069\u306e\u30bf\u30a4\u30d7\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u304b\u3092\u5224\u65ad\u3057\u307e\u3059(docker-compose.yml \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u7d30\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

            \u7279\u5b9a\u306e\u74b0\u5883\u3067\u306e\u307f\u30bf\u30a4\u30d7\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#service-name-service-type","title":"`service-name: service-type","text":"
            • service-name\u306fdocker-compose.yml\u304b\u3089\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059\u3002
            • service-type \u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u4f7f\u7528\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002

            \u4f8b\u3048\u3070\u3001main\u3068\u3044\u3046\u540d\u524d\u306e\u672c\u756a\u74b0\u5883\u7528\u306bMariaDB-Galera\u306e\u9ad8\u53ef\u7528\u6027\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u305f\u3044\u5834\u5408:

            .lagoon.yml \u4f8b
            environments:\nmain:\ntypes:\nmariadb: mariadb-galera\n
            "},{"location":"ja/lagoonizing/#environmentsnametemplates","title":"environments.[name].templates","text":"

            Lagoon\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306elagoon.template\u30e9\u30d9\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u30b5\u30fc\u30d3\u30b9\u306b\u30ab\u30b9\u30bf\u30e0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

            \u7279\u5b9a\u306e\u74b0\u5883\u3067\u306e\u307f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u5834\u5408:

            "},{"location":"ja/lagoonizing/#service-name-template-file","title":"service-name: template-file","text":"
            • service-name\u306f\u3001docker-compose.yml\u304b\u3089\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u540d\u524d\u3067\u3059\u3002
            • template-file\u306f\u3001\u3053\u306e\u74b0\u5883\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u4f7f\u7528\u3059\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30d1\u30b9\u3068\u540d\u524d\u3067\u3059\u3002
            .lagoon.yml \u4f8b
            environments:\nmain:\ntemplates:\nmariadb: mariadb.main.deployment.yml\n
            "},{"location":"ja/lagoonizing/#environmentsnamerollouts","title":"environments.[name].rollouts","text":"

            Lagoon\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306elagoon.rollout\u30e9\u30d9\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u30b5\u30fc\u30d3\u30b9\u306b\u30ab\u30b9\u30bf\u30e0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059(docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

            \u3059\u3079\u3066\u306e\u74b0\u5883\u306b\u5bfe\u3057\u3066\u3067\u306f\u306a\u304f\u3001\u3072\u3068\u3064\u306e\u74b0\u5883\u306b\u5bfe\u3057\u3066\u3060\u3051\u30bf\u30a4\u30d7\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u305f\u3044\u5834\u5408\u3082\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#service-name-rollout-type","title":"service-name: rollout-type","text":"
            • service-name\u306f\u4e0a\u66f8\u304d\u3057\u305f\u3044docker-compose.yml\u306e\u30b5\u30fc\u30d3\u30b9\u540d\u3067\u3059\u3002
            • rollout-type\u306f\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002\u53ef\u80fd\u306a\u5024\u306b\u3064\u3044\u3066\u306fdocker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
            .lagoon.yml \u4f8b
            environments:\nmain:\nrollouts:\nmariadb: statefulset\n
            "},{"location":"ja/lagoonizing/#cron-environmentsnamecronjobs","title":"Cron\u30b8\u30e7\u30d6 - environments.[name].cronjobs","text":"

            \u901a\u5e38\u3001\u5168\u3066\u306e\u74b0\u5883\u3067\u540c\u3058Cron\u30b8\u30e7\u30d6\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u671b\u307e\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001\u5404\u74b0\u5883\u3067\u5b9f\u884c\u3057\u305f\u3044\u30b8\u30e7\u30d6\u3092\u660e\u793a\u7684\u306b\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3068\u3057\u3066\u30011\u6642\u9593\u306b1\u56de\u5b9f\u884c\u3059\u308bdrush cron\u30b8\u30e7\u30d6\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

            name

            • Cron\u30b8\u30e7\u30d6\u306e\u76ee\u7684\u3092\u8b58\u5225\u3059\u308b\u305f\u3081\u306e\u308f\u304b\u308a\u3084\u3059\u3044\u540d\u524d\u3002

            schedule

            • Cron\u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002\u6a19\u6e96\u7684\u306acron\u8a18\u6cd5\u306b\u5f93\u3044\u307e\u3059\u3002\u69cb\u6587\u304c\u4e0d\u660e\u306a\u5834\u5408\u306f\u3001Crontab Generator\u304c\u5f79\u7acb\u3061\u307e\u3059\u3002
            • \u5206M\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u6bce\u6642\u9593\u30e9\u30f3\u30c0\u30e0\u306a\u5206\uff08\u6bce\u6642\u540c\u3058\u5206\uff09\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002M/15\u3068\u3059\u308b\u306815\u5206\u3054\u3068\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059\u304c\u3001\u6642\u9593\u304b\u3089\u306e\u30aa\u30d5\u30bb\u30c3\u30c8\u306f\u30e9\u30f3\u30c0\u30e0\u3067\u3059\uff08\u4f8b\uff1a6, 21, 36, 51\uff09\u3002
            • \u6642H\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u6bce\u65e5\u30e9\u30f3\u30c0\u30e0\u306a\u6642\u9593\uff08\u6bce\u65e5\u540c\u3058\u6642\u9593\uff09\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002H(2-4)\u3068\u3059\u308b\u3068\u30012\u6642\u304b\u30894\u6642\u306e\u9593\u306b1\u56de\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002

            command

            • \u5b9f\u884c\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3002\u30bf\u30b9\u30af\u3068\u540c\u69d8\u306b\u3001\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306f\u30b5\u30fc\u30d3\u30b9\u306e WORKDIR \u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002Lagoon\u306e\u30a4\u30e1\u30fc\u30b8\u3067\u306f\u3001\u3053\u308c\u306f /app \u3067\u3059\u3002

            service

            • \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b5\u30fc\u30d3\u30b9\u3002\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u3053\u308c\u306fCLI\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002

            .lagoon.yml \u3067\u3067\u304d\u308b\u3053\u3068\u306f\u307e\u3060\u305f\u304f\u3055\u3093\u3042\u308a\u307e\u3059\u3002\u8a73\u7d30\u306f .lagoon.yml \u306b\u3064\u3044\u3066\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/lagoonizing/#drupal","title":"Drupal\u7279\u6709\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7","text":"

            Drupal\u30b5\u30a4\u30c8\u3092Lagoon\u306b\u79fb\u884c\u3059\u308b\u5834\u5408\u3001\u5168\u3066\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u3044\u304f\u3064\u304bDrupal\u7279\u6709\u306e\u30bf\u30b9\u30af\u3092\u5b8c\u4e86\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#_10","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb","text":"

            \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u66f4\u65b0\u3067\u3059\u3002Lagoon\u306f\u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3059\u308b\u74b0\u5883\u56fa\u6709\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u6a5f\u5bc6\u60c5\u5831\u304c\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u308b\u3053\u3068\u306f\u306a\u304f\u3001\u3059\u3079\u3066\u5b89\u5168\u306b\u30b3\u30df\u30c3\u30c8\u3067\u304d\u307e\u3059\u3002\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u69d8\u3005\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b\u304c\u3042\u308a\u307e\u3059\u3002\u65b0\u898f\u306b\u59cb\u3081\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3089\u306e\u4f7f\u7528\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u305d\u3046\u3067\u306a\u3044\u5834\u5408\u306f\u3001\u985e\u4f3c\u306e\u3082\u306e\u3092\u9078\u3093\u3067\u95a2\u9023\u3059\u308b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u74b0\u5883\u5909\u6570\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001\u74b0\u5883\u5909\u6570\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

            \u30ea\u30dd\u30b8\u30c8\u30ea\u304b\u3089\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3057\u3001\u30b5\u30a4\u30c8\u3067\u4f7f\u7528\u3057\u3066\u3044\u306a\u3044\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u3092\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u4f8b\uff1a\u3059\u3079\u3066\u306e\u30b5\u30a4\u30c8\u304cSolr\u3084Redis\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff09\u3002\u7279\u5b9a\u306e\u74b0\u5883\u30bf\u30a4\u30d7\uff08\u958b\u767a\u74b0\u5883\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u7121\u52b9\u5316\u306a\u3069\uff09\u306e\u8a2d\u5b9a\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u8ffd\u52a0\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff08\u4f8b\u793a\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3059\u3067\u306b\u3044\u304f\u3064\u304b\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\uff09\u3002\u30d5\u30a1\u30a4\u30eb\u306f\u4ee5\u4e0b\u306e\u9806\u5e8f\u3067\u8aad\u307f\u8fbc\u307e\u308c\u307e\u3059\uff1a

            settings.php
             all.settings.php\n all.services.yml\n production.settings.php\n production.services.yml\n development.settings.php\n development.services.yml\n settings.local.php\n services.local.yml\n
            "},{"location":"ja/lagoonizing/#gitignore","title":".gitignore\u306e\u8a2d\u5b9a\u3092\u66f4\u65b0\u3059\u308b","text":"

            .gitignore\u304c\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30df\u30c3\u30c8\u3092\u8a31\u53ef\u3059\u308b\u3088\u3046\u306b\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002Drupal\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067sites/*/settings*.php\u3068sites/*/services*.yml\u3092.gitignore\u306b\u542b\u3081\u3066\u3044\u307e\u3059\u3002Lagoon\u3067\u306f\u6a5f\u5bc6\u60c5\u5831\u3092Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u306a\u3044\u306e\u3067\u3001\u3053\u308c\u3089\u3092\u524a\u9664\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#drupalwebroot","title":"Drupal\u306eWebroot\u306b\u3064\u3044\u3066\u306e\u6ce8\u610f\u70b9","text":"

            \u6b8b\u5ff5\u306a\u304c\u3089\u3001Drupal\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306f\u30a6\u30a7\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30eb\u30c0\u540d\u3092\u6a19\u6e96\u5316\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3088\u3063\u3066\u306fDrupal\u3092/web\u5185\u306b\u3001\u4ed6\u306f/docroot\u3084\u4ed6\u306e\u5834\u6240\u306b\u914d\u7f6e\u3057\u3066\u3044\u307e\u3059\u3002Lagoon Drupal\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u3001Drupal\u304c/web\u5185\u306b\u3042\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u3082\u3057\u3042\u306a\u305f\u306eDrupal\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u7570\u306a\u308b\u5834\u5408\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u5b9c\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/lagoonizing/#_11","title":"\u30a4\u30e1\u30fc\u30b8\u306e\u30d3\u30eb\u30c9\u3059\u308b","text":"

            \u307e\u305a\u3001\u5b9a\u7fa9\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

            build your images
            docker-compose build\n

            \u3053\u308c\u306b\u306f\u6570\u5206\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u3001\u9577\u3044\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u3063\u3066\u304d\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u3082\u306e\u306b\u306a\u308b\u306f\u305a\u3067\u3059\u3002

            \u3053\u308c\u306b\u3088\u308a\u3001docker-compose\u306fdocker-compose.yml\u5185\u3067build:\u5b9a\u7fa9\u304c\u3042\u308b\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3057\u307e\u3059\u3002\u901a\u5e38\u3001Drupal\u306e\u5834\u5408\u3001\u3053\u308c\u306b\u306fcli\u3001nginx\u3001php\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u7279\u5b9a\u306e\u30d3\u30eb\u30c9\u30b3\u30de\u30f3\u30c9\uff08composer install\u306a\u3069\uff09\u3092\u5b9f\u884c\u3057\u305f\u308a\u3001\u7279\u5b9a\u306e\u74b0\u5883\u5909\u6570\uff08WEBROOT\u306a\u3069\uff09\u3092\u30a4\u30e1\u30fc\u30b8\u306b\u6ce8\u5165\u3057\u305f\u308a\u3059\u308b\u305f\u3081\u306b\u884c\u3044\u307e\u3059\u3002

            \u901a\u5e38\u3001 Drupal\u306e\u30b3\u30fc\u30c9\u3092\u7de8\u96c6\u3059\u308b\u305f\u3073\u306b\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093(\u30b3\u30fc\u30c9\u306f\u30db\u30b9\u30c8\u304b\u3089\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3055\u308c\u307e\u3059)\u3001\u3057\u304b\u3057\u518d\u30d3\u30eb\u30c9\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u3055\u3089\u306b\u3001Lagoon\u306f\u30c7\u30d7\u30ed\u30a4\u4e2d\u306b\u5168\u304f\u540c\u3058Docker\u30a4\u30e1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3059\u308b\u306e\u3067\u3001docker-compose build \u3092\u518d\u5ea6\u5b9f\u884c\u3059\u308b\u3060\u3051\u3067\u3001\u30d3\u30eb\u30c9\u304c\u30c7\u30d7\u30ed\u30a4\u4e2d\u306b\u3082\u6a5f\u80fd\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#_12","title":"\u30b3\u30f3\u30c6\u30ca\u306e\u8d77\u52d5","text":"

            \u30a4\u30e1\u30fc\u30b8\u304c\u30d3\u30eb\u30c9\u3055\u308c\u305f\u306e\u3067\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3067\u304d\u307e\u3059:

            start the containers
            docker-compose up -d\n

            \u6b21\u306e\u3088\u3046\u306a\u5fdc\u7b54\u304c\u8868\u793a\u3055\u308c\u307e\u3059:

            containers started
            \u279c  lagoon-test git:(main) docker compose up -d\nRecreating lagoon-test_cli_1   ... done\nStarting lagoon-test_redis_1   ... done\nStarting lagoon-test_solr_1    ... done\nStarting lagoon-test_mariadb_1 ... done\nRecreating lagoon-test_php_1   ... done\nRecreating lagoon-test_nginx_1 ... done\nRecreating lagoon-test_varnish_1 ... done\n

            \u3053\u308c\u306b\u3088\u308a\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002\u30b3\u30de\u30f3\u30c9\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u3001docker compose ps\u3067\u78ba\u8a8d\u3057\u3066\u3001\u3059\u3079\u3066\u5b8c\u5168\u306b\u8d77\u52d5\u3057\u3001\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u305d\u306e\u5fdc\u7b54\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308b\u306f\u305a\u3067\u3059:

            view running containers
            \u279c  lagoon-test git:(main) docker compose ps\nName                       Command               State            Ports\n----------------------------------------------------------------------------------------\nlagoon-test_cli_1       /sbin/tini -- /lagoon/entr ...   Up      9000/tcp\nlagoon-test_mariadb_1   /sbin/tini -- /lagoon/entr ...   Up      0.0.0.0:32768->3306/tcp\nlagoon-test_nginx_1     /sbin/tini -- /lagoon/entr ...   Up      8080/tcp\nlagoon-test_php_1       /sbin/tini -- /lagoon/entr ...   Up      9000/tcp\nlagoon-test_redis_1     /sbin/tini -- /lagoon/entr ...   Up      6379/tcp\nlagoon-test_solr_1      /sbin/tini -- /lagoon/entr ...   Up      0.0.0.0:32769->8983/tcp\n

            \u554f\u984c\u304c\u3042\u308b\u5834\u5408\u306f\u3001 docker-compose logs -f [servicename]\u3092\u4f7f\u7528\u3057\u3066\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#composer-installcomposer","title":"composer install\u306e\u518d\u5b9f\u884c\uff08Composer\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u307f\uff09","text":"

            Drupal 8\u4ee5\u964d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001Composer\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002\u5168\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002cli\u30b3\u30f3\u30c6\u30ca\u306b\u63a5\u7d9a\u3057\u3001composer install\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a

            re-run composer install
            docker-compose exec cli bash\n[drupal-example]cli-drupal:/app$ composer install\n

            \u3053\u308c\u306f\u5947\u5999\u306b\u805e\u3053\u3048\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u30d3\u30eb\u30c9\u6bb5\u968e\u3067\u3059\u3067\u306bcomposer install\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002\u518d\u5ea6\u5b9f\u884c\u3059\u308b\u7406\u7531\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

            • \u30db\u30b9\u30c8\u4e0a\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u3001\u3059\u3050\u306b\u30b3\u30f3\u30c6\u30ca\u3067\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306edocker-composer.yml\u306f\u30d5\u30a9\u30eb\u30c0\u5168\u4f53\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u30de\u30a6\u30f3\u30c8\u3057\u307e\u3059\uff08\u3053\u308c\u306fvolumes\u30bb\u30af\u30b7\u30e7\u30f3\u306e.:/app:delegated\u3067\u884c\u308f\u308c\u307e\u3059\uff09\u3002\u3053\u308c\u306f\u3001Docker\u30d3\u30eb\u30c9\u4e2d\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u5168\u3066\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u30db\u30b9\u30c8\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u4e0a\u66f8\u304d\u3055\u308c\u308b\u3053\u3068\u3082\u610f\u5473\u3057\u307e\u3059\u3002
            • \u30ed\u30fc\u30ab\u30eb\u3067\u306f\u3001\u304a\u305d\u3089\u304fcomposer.json\u306erequire-dev\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u3044\u3067\u3057\u3087\u3046\u304c\u3001\u672c\u756a\u30c7\u30d7\u30ed\u30a4\u3067\u306f\u305d\u308c\u3089\u306f\u4e0d\u8981\u306a\u30b9\u30da\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u3001Dockerfile\u3067\u306fcomposer install --no-dev\u3092\u5b9f\u884c\u3057\u3001\u624b\u52d5\u3067composer install\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

            \u5168\u3066\u304c\u4e0a\u624b\u304f\u3044\u3063\u305f\u5834\u5408\u3001docker-compose.yml\u3067\u5b9a\u7fa9\u3055\u308c\u305fLAGOON_ROUTE\uff08\u4f8b\uff1ahttp://drupal.docker.amazee.io\uff09\u3092\u958b\u304f\u3068\u3001Drupal\u306e\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044 - \u4eca\u306e\u3068\u3053\u308d\u3053\u308c\u3067\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u6700\u3082\u91cd\u8981\u306a\u306e\u306f\u3001Drupal\u30b5\u30a4\u30c8\u3092\u8aad\u307f\u8fbc\u3082\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u3002

            500\u307e\u305f\u306f\u540c\u69d8\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001Composer\u3067\u5168\u3066\u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/lagoonizing/#drupal_1","title":"\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u78ba\u8a8d\u3068Drupal\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

            \u6700\u5f8c\u306bDrupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u6642\u304c\u6765\u307e\u3057\u305f\u304c\u3001\u305d\u306e\u524d\u306b\u5168\u3066\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002\u305d\u306e\u305f\u3081\u306bDrush\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002drush status\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a

            run drush status
            docker-compose exec cli bash\n[drupal-example]cli-drupal:/app$ drush status\n

            \u4e0a\u8a18\u306e\u30b3\u30de\u30f3\u30c9\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7d50\u679c\u3092\u8fd4\u3059\u306f\u305a\u3067\u3059:

            drush status results
            [drupal-example]cli-drupal:/app$ drush status\n[notice] Missing database table: key_value\nDrupal version       :  8.6.1\nSite URI             :  http://drupal.docker.amazee.io\nDatabase driver      :  mysql\nDatabase hostname    :  mariadb\nDatabase port        :  3306\nDatabase username    :  drupal\nDatabase name        :  drupal\nPHP binary           :  /usr/local/bin/php\nPHP config           :  /usr/local/etc/php/php.ini\nPHP OS               :  Linux\nDrush script         :  /app/vendor/drush/drush/drush\nDrush version        :  9.4.0\nDrush temp           :  /tmp\nDrush configs        :  /home/.drush/drush.yml\n                        /app/vendor/drush/drush/drush.yml\nDrupal root          :  /app/web\nSite path            :  sites/default\n

            \u60c5\u5831

            \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u9032\u3080\u524d\u306b\u3001\u516c\u958b\u9375\u306b\u3064\u3044\u3066pygmy\u306b\u4f1d\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002Permission denied (publickey)\u3068\u3044\u3046\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u305f\u5834\u5408\u306f\u3001\u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:pygmy - ssh\u30ad\u30fc\u306e\u8ffd\u52a0\u3002

            \u3053\u308c\u3067Drupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u6642\u304c\u6765\u307e\u3057\u305f\uff08\u4ee3\u308f\u308a\u306b\u65e2\u5b58\u306eSQL\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u305f\u3060\u3057\u3001\u6700\u521d\u306f\u30af\u30ea\u30fc\u30f3\u306aDrupal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3001\u5168\u3066\u304c\u52d5\u4f5c\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff09\u3002

            drush si\u306e\u5b9f\u884c

            [drupal-example]cli-drupal:/app$ drush site-install\n
            \u3053\u308c\u306b\u3088\u308a\u3001\u6b21\u306e\u3088\u3046\u306a\u51fa\u529b\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059:

            drush si\u306e\u7d50\u679c
            [drupal-example]cli-drupal:/app$ drush site-install\nYou are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y\nStarting Drupal installation. This takes a while. Consider using the --notify global option.\nInstallation complete.  User name: admin  User password: arbZJekcqh\nCongratulations, you installed Drupal!\n

            \u3053\u308c\u3067LAGOON_ROUTE\u3067\u5b9a\u7fa9\u3055\u308c\u305fURL\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001\u65b0\u3057\u304f\u30af\u30ea\u30fc\u30f3\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305fDrupal\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059 - \u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\uff01

            "},{"location":"ja/lagoonizing/#_13","title":"\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u306e\u30a4\u30f3\u30dd\u30fc\u30c8","text":"

            \u65e2\u5b58\u306eDrupal\u30b5\u30a4\u30c8\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30ed\u30fc\u30ab\u30eb\u30b5\u30a4\u30c8\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u3067\u3057\u3087\u3046\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u306f\u591a\u6570\u3042\u308a\u307e\u3059\u304c\u3001\u73fe\u5728\u306e\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30d7\u30ed\u30d0\u30a4\u30c0\u306bDrush\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\uff1a

            drush sql-dump
            [your-existing-site]$ drush sql-dump --result-file=dump.sql\nDatabase dump saved to dump.sql                         [success]\n

            \u3053\u308c\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5168\u4f53\u3092\u542b\u3080dump.sql\u30d5\u30a1\u30a4\u30eb\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30fc\u30ab\u30eb\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30d4\u30fc\u3057\u3001CLI\u306b\u63a5\u7d9a\u3059\u308b\u3068\u3001\u305d\u3053\u306b\u30d5\u30a1\u30a4\u30eb\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\uff1a

            dump file

            [drupal-example] docker compose exec cli bash\n[drupal-example]cli-drupal:/app$ ls -l dump.sql\n-rw-r--r--    1 root     root          5281 Dec 19 12:46 dump.sql\n
            \u3053\u308c\u3067\u3001\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u524a\u9664\u3057\u305f\u5f8c\u306b\u30c0\u30f3\u30d7\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u304d\u307e\u3059\uff08\u307e\u3060cli\u306b\u63a5\u7d9a\u3057\u305f\u307e\u307e\u3067\u3059\uff09\uff1a

            dump existing db and import dump file
            [drupal-example]cli-drupal:/app$ drush sql-drop\nDo you really want to drop all tables in the database drupal? (y/n): y\n[drupal-example]cli-drupal:/app$ drush sql-cli < dump.sql\n
            "},{"location":"ja/lagoonizing/#drupal_2","title":"Drupal\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea","text":"

            Drupal\u30b5\u30a4\u30c8\u306b\u306f\u30d5\u30a1\u30a4\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3082\u542b\u307e\u308c\u307e\u3059\u3002\u65e2\u5b58\u306e\u30b5\u30a4\u30c8\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u884c\u3059\u308b\u306b\u306f\u3001\u6b63\u3057\u3044\u30d5\u30a9\u30eb\u30c0\uff08\u304a\u305d\u3089\u304fweb/sites/default/files\u3001sites/default/files\u3001\u307e\u305f\u306f\u985e\u4f3c\u306e\u3082\u306e\uff09\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u30a6\u30a7\u30d6\u30eb\u30fc\u30c8\u3068\u3057\u3066\u8a2d\u5b9a\u3057\u305f\u3082\u306e\u3092\u899a\u3048\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044 - \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/lagoonizing/#_14","title":"\u30c7\u30d7\u30ed\u30a4","text":"

            \u3053\u306e\u30ac\u30a4\u30c9\u306e\u5168\u3066\u306e\u624b\u9806\u3092\u5b8c\u4e86\u3057\u3001Lagoon\u7ba1\u7406\u8005\u304c\u5168\u3066\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308c\u3070\u3001\u30b5\u30a4\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\uff01

            Drupal\u30b5\u30a4\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30c7\u30d7\u30ed\u30a4\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            \u305d\u308c\u4ee5\u5916\u306e\u5168\u3066\u306e\u30c7\u30d7\u30ed\u30a4\u306b\u3064\u3044\u3066\u306f\u3001\u3053\u306e\u30c7\u30d7\u30ed\u30a4\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/logging/kibana-examples/","title":"Kibana\u306e\u4f8b","text":"

            Kibana\u306e\u5165\u9580\u30d3\u30c7\u30aa\u3092\u898b\u3066\u3001\u30ed\u30b0\u3092\u6271\u3046\u6e96\u5099\u304c\u6574\u3044\u307e\u3057\u305f\u304b\uff1f\u79c1\u305f\u3061\u304c\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\uff01\u3053\u306e\u30da\u30fc\u30b8\u3067\u306f\u3001\u4f7f\u7528\u3067\u304d\u308bKibana\u30af\u30a8\u30ea\u306e\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u308c\u306fKibana 101\u306e\u30af\u30e9\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001Kibana\u3067\u4f55\u304c\u3067\u304d\u308b\u306e\u304b\u3092\u7406\u89e3\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002

            \u59cb\u3081\u308b\u6e96\u5099\u306f\u3067\u304d\u307e\u3057\u305f\u304b\uff1f\u3000\u3067\u306f\u59cb\u3081\u307e\u3057\u3087\u3046\uff01

            \u6ce8\u610f:

            \u958b\u59cb\u3059\u308b\u524d\u306b\u30c6\u30ca\u30f3\u30c8\u3092\u9078\u629e\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff01 \u5de6\u5074\u306e\u30e1\u30cb\u30e5\u30fc\u306b\u3042\u308b Tenant \u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u305d\u308c\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30c6\u30ca\u30f3\u30c8\u3092\u9078\u629e\u3057\u305f\u3089\u3001\u518d\u5ea6 Discover \u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u59cb\u3081\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/logging/kibana-examples/#_1","title":"\u30eb\u30fc\u30bf\u30fc\u30ed\u30b0","text":"

            \u4ee5\u4e0b\u306b\u30012\u3064\u306e\u4e00\u822c\u7684\u306a\u30ed\u30b0\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059:

            • \u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u3078\u306e\u30d2\u30c3\u30c8/\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7dcf\u6570\u3092\u8868\u793a\u3057\u307e\u3059\u3002
            • \u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30d2\u30c3\u30c8/\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u6570\u3092\u8868\u793a\u3057\u307e\u3059\u3002
            "},{"location":"ja/logging/kibana-examples/#_2","title":"\u30b5\u30a4\u30c8\u3078\u306e\u30d2\u30c3\u30c8/\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7dcf\u6570","text":"
            • Kibana\u3092\u8d77\u52d5\u3057\u3001Discovery \u3092\u9078\u629e\u3057\u307e\u3057\u3087\u3046(\u4ee5\u4e0b\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306e\uff031)
            • \u6b21\u306b\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30bf\u30fc\u30ed\u30b0\u3067\u3059(\uff032)\u3002
            • \u305d\u3053\u304b\u3089\u3001\u3053\u306e\u60c5\u5831\u3092\u5c11\u3057\u7d5e\u308a\u8fbc\u307f\u307e\u3059\u3002\u79c1\u305f\u3061\u306e\u4e3b\u306a\u88fd\u54c1\u74b0\u5883\u306b\u7126\u70b9\u3092\u5f53\u3066\u307e\u3057\u3087\u3046\u3002
            • \u691c\u7d22\u30d0\u30fc(\uff033)\u306b\u5165\u529b\u3057\u307e\u3059:

              openshift_project: \"\u672c\u756a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d\"

            • \u3053\u308c\u306b\u3088\u308a\u3001\u6307\u5b9a\u3055\u308c\u305f\u671f\u9593\u5185\u306e\u672c\u756a\u74b0\u5883\u3078\u306e\u3059\u3079\u3066\u306e\u30d2\u30c3\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059
            • \u53f3\u4e0a\u9685\u306e\u30e1\u30cb\u30e5\u30fc (#4) \u3067\u671f\u9593\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u3002
            • \u30a8\u30f3\u30c8\u30ea\u306e\u6a2a\u306b\u3042\u308b\u77e2\u5370\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068 (#5)\u3001\u30a8\u30f3\u30c8\u30ea\u304c\u5c55\u958b\u3055\u308c\u3001\u30ad\u30e3\u30d7\u30c1\u30e3\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u60c5\u5831\u304c\u8868\u793a\u3055\u308c\u307e\u3059
            • \u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30ab\u30fc\u30bd\u30eb\u3092\u5408\u308f\u305b\u3066\u5de6\u5074\u306e\u300c\u8ffd\u52a0\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068 (#6)\u3001\u305d\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8ffd\u52a0\u3067\u304d\u307e\u3059
            • \u691c\u7d22\u30d0\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3001\u7d50\u679c\u3092\u3055\u3089\u306b\u7d5e\u308a\u8fbc\u3080\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/logging/kibana-examples/#ip","title":"\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30d2\u30c3\u30c8\u6570/\u30ea\u30af\u30a8\u30b9\u30c8\u6570","text":"

            \u4e0a\u8a18\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30b5\u30a4\u30c8\u3078\u306e\u3059\u3079\u3066\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u6982\u8981\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u304c\u3001\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u306b\u7d5e\u308a\u8fbc\u307f\u305f\u3044\u5834\u5408\u306f\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f\u4f8b\u3048\u3070\u3001\u3042\u308bIP\u30a2\u30c9\u30ec\u30b9\u304c\u30b5\u30a4\u30c8\u306b\u4f55\u56de\u30a2\u30af\u30bb\u30b9\u3057\u305f\u304b\u3001\u305d\u306eIP\u30a2\u30c9\u30ec\u30b9\u304c\u3069\u306e\u30da\u30fc\u30b8\u3092\u898b\u3066\u3044\u305f\u304b\u3092\u78ba\u8a8d\u3057\u305f\u3044\u5834\u5408\u3067\u3059\u3002\u3053\u306e\u6b21\u306e\u30af\u30a8\u30ea\u304c\u5f79\u7acb\u3061\u307e\u3059\u3002

            \u307e\u305a\u3001\u524d\u56de\u3068\u540c\u3058\u30af\u30a8\u30ea\u304b\u3089\u59cb\u3081\u307e\u3059\u304c\u3001\u3044\u304f\u3064\u304b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

            • \u6700\u521d\u306b\u3001\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1aclient_ip\u304a\u3088\u3073http_request
            • \u3053\u308c\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306eIP\u30a2\u30c9\u30ec\u30b9\u3068\u305d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u305f\u30da\u30fc\u30b8\u306e\u30ea\u30b9\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u6b21\u306f\u3001Amazee.io\u30da\u30fc\u30b8\u306e\u5834\u5408\u306e\u8868\u793a\u5185\u5bb9\u3067\u3059:

            ![\u3059\u3079\u3066\u306eIP\u30a2\u30c9\u30ec\u30b9\u3068\u305d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u305f\u30da\u30fc\u30b8:]( \u8981\u6c42\u3055\u308c\u305f\u3002](../images/kibana_example2.png)

            \u3053\u308c\u306f\u826f\u3055\u305d\u3046\u3067\u3059\u304c\u3001\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3060\u3051\u3092\u8868\u793a\u3057\u305f\u3044\u5834\u5408\u306f\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f\u691c\u7d22\u6761\u4ef6\u306b\u30a2\u30c9\u30ec\u30b9\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002

            • \u6b21\u306e\u3088\u3046\u306b\u8ffd\u52a0\u3057\u307e\u3059:AND client_ip: \"IP\u30a2\u30c9\u30ec\u30b9\".
            • \u3053\u308c\u306b\u3088\u308a\u3001\u305d\u306e\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30d2\u30c3\u30c8\u3068\u3001\u305d\u306e\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u30da\u30fc\u30b8\u3060\u3051\u304c\u7d50\u679c\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306famazee.io\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u4f8b\u3067\u3059:

            "},{"location":"ja/logging/kibana-examples/#_3","title":"\u30b3\u30f3\u30c6\u30ca\u30ed\u30b0","text":"

            \u30b3\u30f3\u30c6\u30ca\u30ed\u30b0\u306f\u3001\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u3068\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u3059\u3079\u3066\u306e\u6a19\u6e96\u51fa\u529b\uff08stdout\uff09\u304a\u3088\u3073\u6a19\u6e96\u30a8\u30e9\u30fc\uff08stderr\uff09\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3057\u307e\u3059\u3002\u6b21\u306b\u3001\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u304b\u3089\u30ed\u30b0\u3092\u53d6\u5f97\u3057\u3001\u305d\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u306e\u7279\u5b9a\u306e\u30a8\u30e9\u30fc\u756a\u53f7\u3092\u898b\u3064\u3051\u308b\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

            "},{"location":"ja/logging/kibana-examples/#_4","title":"\u30b3\u30f3\u30c6\u30ca\u304b\u3089\u306e\u30ed\u30b0","text":"

            \u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\uff08php\u3001nginx\u306a\u3069\uff09\u306e\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3067\u3059\u304b\uff1f\u305d\u306e\u5834\u5408\u306f\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u5f79\u7acb\u3061\u307e\u3059\uff01\u3053\u3053\u3067\u306fNGINX\u30ed\u30b0\u3092\u78ba\u8a8d\u3059\u308b\u65b9\u6cd5\u306b\u7126\u70b9\u3092\u5f53\u3066\u307e\u3059\u3002

            • \u307e\u305a\u3001Kibana\u3092\u958b\u304d\u3001Discover\u3092\u9078\u629e\u3057\u307e\u3059(\u4e0b\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306e\uff031)\u3002
            • \u6b21\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b3\u30f3\u30c6\u30ca\u30ed\u30b0\u3092\u9078\u629e\u3057\u307e\u3059(\uff032)\u3002
            • \u691c\u7d22\u30d0\u30fc(\uff033)\u306b\u79fb\u52d5\u3057\u3001kubernetes.container_name: \"nginx\"\u3068\u5165\u529b\u3057\u307e\u3059\u3002
            • \u3053\u308c\u306b\u3088\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u3059\u3079\u3066\u306eNGINX\u30ed\u30b0\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002 \u30a8\u30f3\u30c8\u30ea\u306e\u96a3\u306e\u77e2\u5370\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b(\uff034)\u3068\u3001\u305d\u306e\u30a8\u30f3\u30c8\u30ea\u304c\u5c55\u958b\u3055\u308c\u3001\u53ce\u96c6\u3057\u305f\u3059\u3079\u3066\u306e\u60c5\u5831\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
            • \u30e1\u30c3\u30bb\u30fc\u30b8\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u30ec\u30d9\u30eb\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u30d3\u30e5\u30fc\u306b\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046\u3002\u5de6\u5074\u306e\u300cAdd\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8ffd\u52a0\u3067\u304d\u307e\u3059(\uff035)\u3002
            • \u753b\u9762\u306e\u53f3\u4e0a\u9685(\uff036)\u3067\u6642\u9593\u67a0\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u4f8b\u3067\u306f\u3001\u904e\u53bb4\u6642\u9593\u306e\u30ed\u30b0\u3092\u898b\u3066\u3044\u307e\u3059\u3002

            "},{"location":"ja/logging/kibana-examples/#_5","title":"\u30ed\u30b0\u306e\u7279\u5b9a\u306e\u30a8\u30e9\u30fc","text":"

            NGINX\u30b3\u30f3\u30c6\u30ca\u3067\u767a\u751f\u3057\u305f500 Internal Server\u30a8\u30e9\u30fc\u306e\u6570\u3092\u78ba\u8a8d\u3057\u305f\u3044\u3067\u3059\u304b\uff1f\u691c\u7d22\u30af\u30a8\u30ea\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u3088\u3046\u306b\u691c\u7d22\u3057\u307e\u3059:

            kubernetes.container_name: \"nginx\" AND message: \"500\"

            \u3053\u308c\u306b\u3088\u308a\u3001NGINX\u30b3\u30f3\u30c6\u30ca\u5185\u306e500\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u307f\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u4efb\u610f\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u306e\u4efb\u610f\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u691c\u7d22\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/logging/kibana-examples/#_6","title":"\u53ef\u8996\u5316","text":"

            Kibana\u3067\u306f\u3001\u53ef\u8996\u5316\u3084\u30b0\u30e9\u30d5\u3092\u4f5c\u6210\u3059\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3082\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u4e0a\u8a18\u306e\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u3066\u3001\u6708\u9593\u306e\u30d2\u30c3\u30c8/\u30ea\u30af\u30a8\u30b9\u30c8\u6570\u3092\u8868\u793a\u3059\u308b\u30c1\u30e3\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

            1. Kibana\u306e\u5de6\u5074\u306b\u3042\u308b\u300cVisualize\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
            2. \u9752\u3044\u30d7\u30e9\u30b9\u8a18\u53f7\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
            3. \u3053\u306e\u4f8b\u3067\u306f\u3001\u300cVertical Bar\u300d\u30c1\u30e3\u30fc\u30c8\u3092\u9078\u629e\u3057\u307e\u3059
            4. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30bf\u30fc\u30ed\u30b0\u3092\u9078\u629e\u3057\u307e\u3059
            5. \u300cBuckets\u300d\u306e\u4e0b\u306b\u3042\u308b\u300cX-Axis\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u300cDate Histogram\u300d\u3092\u9078\u629e\u3057\u3001\u9593\u9694\u3092\u300cdaily\uff08\u6bce\u65e5\uff09\u300d\u306b\u8a2d\u5b9a\u3057\u307e\u3059
            6. \u6210\u529f\u3067\u3059\uff01\u3053\u308c\u3067\u3001\u65e5\u3005\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u8868\u793a\u3059\u308b\u30d0\u30fc\u30c1\u30e3\u30fc\u30c8\u304c\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002

            \u6ce8\u610f:

            \u53f3\u4e0a\u9685\u306e\u30c7\u30fc\u30bf\u306e\u9069\u5207\u306a\u6642\u9593\u67a0\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            \u4ee5\u4e0b\u306f\u3001\u65e5\u3005\u306e\u30d2\u30c3\u30c8\u6570\u3092\u53ef\u8996\u5316\u3057\u305f\u30c1\u30e3\u30fc\u30c8\u306e\u4f8b\u3067\u3059:

            \u307e\u305f\u3001\u53ef\u8996\u5316\uff08\u304a\u3088\u3073\u691c\u7d22\uff09\u3092\u4fdd\u5b58\u3067\u304d\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\uff01\u3053\u308c\u306b\u3088\u308a\u3001\u5c06\u6765\u7684\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306e\u304c\u3055\u3089\u306b\u901f\u304f\u306a\u308a\u307e\u3059\u3002\u5404\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u306f\u72ec\u81ea\u306eKibana\u30c6\u30ca\u30f3\u30c8\u304c\u3042\u308b\u305f\u3081\u3001\u691c\u7d22\u3084\u53ef\u8996\u5316\u304c\u4ed6\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u5171\u6709\u3055\u308c\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002

            "},{"location":"ja/logging/kibana-examples/#_7","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":""},{"location":"ja/logging/logging/","title":"\u30ed\u30ae\u30f3\u30b0","text":"

            Lagoon\u306fKibana\u3092\u4ecb\u3057\u3066\u4ee5\u4e0b\u306e\u30ed\u30b0\u306b\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059:

            • Kubernetes\u30eb\u30fc\u30bf\u30fc\u304b\u3089\u306e\u30ed\u30b0\u306b\u306f\u3001\u3059\u3079\u3066\u306eHTTP\u304a\u3088\u3073HTTPS\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002:
              • \u30bd\u30fc\u30b9IP
              • URL
              • \u30d1\u30b9
              • HTTP\u52d5\u8a5e
              • Cookies
              • \u30d8\u30c3\u30c0\u30fc
              • \u30e6\u30fc\u30b6\u30fc\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8
              • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8
              • \u30b3\u30f3\u30c6\u30ca\u540d
              • \u5fdc\u7b54\u30b5\u30a4\u30ba
              • \u5fdc\u7b54\u6642\u9593
            • \u30b3\u30f3\u30c6\u30ca\u306e\u30ed\u30b0:
              • stdout\u3068stderr\u30e1\u30c3\u30bb\u30fc\u30b8
              • \u30b3\u30f3\u30c6\u30ca\u540d
              • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8
            • Lagoon\u306e\u30ed\u30b0:
              • Webhooks\u306e\u89e3\u6790
              • \u30d3\u30eb\u30c9\u30ed\u30b0
              • \u30d3\u30eb\u30c9\u30a8\u30e9\u30fc
              • \u305d\u306e\u4ed6\u306eLagoon\u95a2\u9023\u30ed\u30b0
            • \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30b0:
              • Drupal\u306e\u5834\u5408: Drupal Watchdog\u304b\u3089\u306e\u30ed\u30b0\u3092\u53d7\u3051\u53d6\u308b\u305f\u3081\u306b\u3001Lagoon Logs\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
              • Laravel\u306e\u5834\u5408: Laravel\u7528Lagoon Logs\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
              • \u305d\u306e\u4ed6\u306e\u30ef\u30fc\u30af\u30ed\u30fc\u30c9:
                • \u30ed\u30b0\u3092udp://application-logs.lagoon.svc:5140\u306b\u9001\u4fe1\u3057\u307e\u3059\u3002
                • \u30ed\u30b0\u304cJSON\u30a8\u30f3\u30b3\u30fc\u30c9\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u69cb\u9020\u5316\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
                • type\u30d5\u30a3\u30fc\u30eb\u30c9\u306bKubernetes\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306e\u540d\u524d\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044($LAGOON_PROJECT-$LAGOON_ENVIRONMENT)\u3002

            \u30ed\u30b0\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001Lagoon\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066Kibana\u30eb\u30fc\u30c8\u306eURL\u3092\u53d6\u5f97\u3057\u3066\u304f\u3060\u3055\u3044\uff08amazee.io\u306e\u5834\u5408\u306fhttps://logs.amazeeio.cloud/\u3067\u3059)\u3002

            \u5404Lagoon\u30e6\u30fc\u30b6\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u306f\u500b\u5225\u306e\u30ed\u30b0\u30a4\u30f3\u304c\u3042\u308a\u3001\u30a2\u30af\u30bb\u30b9\u6a29\u306e\u3042\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30ed\u30b0\u306e\u307f\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

            \u5404Lagoon\u30e6\u30fc\u30b6\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u307e\u305f\u3001\u72ec\u81ea\u306eKibana Tenant\u3092\u6301\u3063\u3066\u304a\u308a\u3001\u3053\u308c\u306f\u4fdd\u5b58\u3055\u308c\u305f\u691c\u7d22\u3084\u30d3\u30b8\u30e5\u30a2\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u304c\u4ed6\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u5171\u6709\u3055\u308c\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

            Kibana\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u77e5\u308a\u305f\u3044\u5834\u5408\u306f\u3001\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044: https://www.elastic.co/webinars/getting-started-kibana

            "},{"location":"ja/other-tools/client-libraries/","title":"Lagoon\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea","text":"

            Lagoon\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u30c4\u30fc\u30eb\u958b\u767a\u306b\u8208\u5473\u304c\u3042\u308b\u5834\u5408\u3001\u3044\u304f\u3064\u304b\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u5f79\u7acb\u3064\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

            "},{"location":"ja/other-tools/client-libraries/#machinery","title":"Machinery","text":"

            Machinery\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3001Lagoon\u306e\u30c4\u30fc\u30eb\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4e2d\u3067\u6700\u3082\u7a4d\u6975\u7684\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3001\u958b\u767a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u3053\u308c\u306f\u3001\u4e3b\u306b(\u3057\u304b\u3057\u6392\u4ed6\u7684\u3067\u306f\u306a\u304f)API\u3068\u306e\u3084\u308a\u53d6\u308a\u306e\u305f\u3081\u306e\u3001\u79c1\u305f\u3061\u306e\u3059\u3079\u3066\u306egolang\u57fa\u76e4\u306e\u30c4\u30fc\u30eb\u30bf\u30a4\u30d7\u306b\u308f\u305f\u308b\u3059\u3079\u3066\u306e\u57fa\u672c\u64cd\u4f5c\u306e\u4e2d\u592e\u30b9\u30c8\u30a2\u3067\u3059\u3002

            https://github.com/uselagoon/machinery/

            "},{"location":"ja/other-tools/client-libraries/#php","title":"PHP","text":"

            PHP\u306e\u7d71\u5408\u3092\u63a2\u3057\u3066\u3044\u308b\u306a\u3089\u3001php-sdk\u304c\u3042\u306a\u305f\u306e\u4ed5\u4e8b\u306e\u51fa\u767a\u70b9\u3068\u3057\u3066\u826f\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

            https://github.com/uselagoon/lagoon-php-sdk

            "},{"location":"ja/other-tools/client-libraries/#_1","title":"\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30e9\u30a4\u30d6\u30e9\u30ea","text":""},{"location":"ja/other-tools/client-libraries/#ansible","title":"Ansible","text":"

            Lagoon\u3068\u306e\u3084\u308a\u53d6\u308a\u306e\u305f\u3081\u306e\u983b\u7e41\u306b\u66f4\u65b0\u3055\u308c\u3001\u62e1\u5f35\u3055\u308c\u3066\u3044\u308bAnsible\u30e9\u30a4\u30d6\u30e9\u30ea\u3002

            https://github.com/salsadigitalauorg/lagoon_ansible_collection

            "},{"location":"ja/resources/faq/","title":"\u3088\u304f\u3042\u308b\u8cea\u554f","text":""},{"location":"ja/resources/faq/#lagoon","title":"Lagoon\u306e\u7ba1\u7406\u8005\u306b\u3069\u306e\u3088\u3046\u306b\u9023\u7d61\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f","text":"

            \u5c02\u7528\u306eSlack\u30c1\u30e3\u30cd\u30eb\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u306a\u306e\u3067\u3001\u305d\u308c\u3092\u5229\u7528\u3057\u3066\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059 - \u3082\u3057\u306a\u3044\u5834\u5408\u3084\u3001\u3069\u306e\u3088\u3046\u306b\u9023\u7d61\u3059\u308c\u3070\u3088\u3044\u304b\u5fd8\u308c\u3066\u3057\u307e\u3063\u305f\u5834\u5408\u306f\u3001support@amazee.io\u306b\u9023\u7d61\u3057\u3066\u4e0b\u3055\u3044\u3002

            "},{"location":"ja/resources/faq/#_2","title":"\u30d0\u30b0\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff01\ud83d\udc1e","text":"

            \u30d0\u30b0\u3084\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u554f\u984c\u3092\u898b\u3064\u3051\u305f\u5834\u5408\u306f\u3001\u305d\u306e\u5185\u5bb9\u3092support@amazee.io\u306b\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002GitHub\u306e\u554f\u984c\u3068\u3057\u3066\u5831\u544a\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/resources/faq/#amazeeiolagoon","title":"amazee.io\u306eLagoon\u3092\u5229\u7528\u3057\u305f\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9\u306b\u8208\u5473\u304c\u3042\u308a\u307e\u3059","text":"

            \u305d\u308c\u306f\u7d20\u6674\u3089\u3057\u3044\u30cb\u30e5\u30fc\u30b9\u3067\u3059\uff01sales@amazee.io\u307e\u3067\u30e1\u30fc\u30eb\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u3044\u305f\u3060\u3051\u307e\u3059\u3002

            "},{"location":"ja/resources/faq/#ssl","title":"\u79c1\u306f\u7121\u52b9\u306aSSL\u8a3c\u660e\u66f8\u30a8\u30e9\u30fc\u304c\u51fa\u3066\u3044\u307e\u3059","text":"

            \u307e\u305a\u6700\u521d\u306b\u8a66\u3059\u3079\u304d\u3053\u3068\u306f\u3001\u79c1\u305f\u3061\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u308bSSL\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u53c2\u7167\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002

            \u305d\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u3082\u307e\u3060\u30a8\u30e9\u30fc\u304c\u51fa\u308b\u5834\u5408\u306f\u3001\u30c1\u30b1\u30c3\u30c8\u3092\u9001\u4fe1\u3059\u308b\u304b\u3001\u30c1\u30e3\u30c3\u30c8\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u79c1\u305f\u3061\u306f\u3042\u306a\u305f\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u306e\u3092\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\u3002

            "},{"location":"ja/resources/faq/#drush-array","title":"Drush\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u304d\u306b \"Array\" \u30a8\u30e9\u30fc\u304c\u51fa\u3066\u3044\u307e\u3059","text":"

            \u3053\u308c\u306fDrush\u30d0\u30fc\u30b8\u30e7\u30f38.1.16\u30688.1.17\u3067\u591a\u304f\u898b\u3089\u308c\u305f\u30d0\u30b0\u3067\u3001\u30a8\u30e9\u30fc\u306f\u6b21\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3057\u305f:

            Bash
            \u30b3\u30de\u30f3\u30c9\u3092\u6b63\u5e38\u306b\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f(\u8fd4\u5374:Array [error]\n(\n[default] => Array\n(\n[default] => Array\n(\n[driver] => mysql\n[prefix] => Array\n(\n[default] =>\n)\n, code: 0)\nError: no database record could be found for source @main [error]\n

            Drush\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u3068\u3001\u3053\u306e\u554f\u984c\u306f\u89e3\u6d88\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002\u6211\u3005\u306f\u5f37\u304f\u3001\u30d0\u30fc\u30b8\u30e7\u30f38.3\u307e\u305f\u306f\u305d\u308c\u4ee5\u964d\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002Drush\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308c\u3070\u3001\u30b3\u30de\u30f3\u30c9\u306f\u52d5\u4f5c\u3059\u308b\u306f\u305a\u3067\u3059\uff01

            "},{"location":"ja/resources/faq/#kibanainternal-server-error","title":"Kibana\u30ed\u30b0\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001Internal Server Error\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059","text":"
            1. Kibana\u306e\u5de6\u5074\u306e\u30e1\u30cb\u30e5\u30fc\u3067\u300c\u30c6\u30ca\u30f3\u30c8\u300d\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
            2. \u81ea\u5206\u306e\u30c6\u30ca\u30f3\u30c8\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
            3. \u300c\u30c6\u30ca\u30f3\u30c8\u306e\u5909\u66f4\u300d\u3068\u3042\u306a\u305f\u306e\u30c6\u30ca\u30f3\u30c8\u306e\u540d\u524d\u3068\u3044\u3046\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u30a6\u30a3\u30f3\u30c9\u30a6\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
            4. \u300c\u30c7\u30a3\u30b9\u30ab\u30d0\u30fc\u300d\u30bf\u30d6\u306b\u623b\u308a\u3001\u30af\u30a8\u30ea\u3092\u518d\u5ea6\u8a66\u307f\u307e\u3059\u3002

            \u3053\u308c\u3067\u30ed\u30b0\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002

            "},{"location":"ja/resources/faq/#ssh","title":"\u4efb\u610f\u306e\u74b0\u5883\u306bSSH\u3067\u63a5\u7d9a\u3067\u304d\u306a\u3044","text":"

            \u4efb\u610f\u306e\u74b0\u5883\u306bSSH\u3067\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3002\u6b21\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059: Permission denied (publickey)\u3002drush sa\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30a8\u30a4\u30ea\u30a2\u30b9\u304c\u8fd4\u3055\u308c\u307e\u305b\u3093\u3002

            \u3053\u308c\u306f\u901a\u5e38\u3001Pygmy\u306e\u554f\u984c\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002Pygmy\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3053\u3061\u3089\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:https://pygmystack.github.io/pygmy/troubleshooting/

            "},{"location":"ja/resources/faq/#_3","title":"\u30d3\u30eb\u30c9\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u78ba\u8a8d\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/faq/#_4","title":"\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u8ffd\u52a0\u3057\u307e\u3059\u304b \u30af\u30ed\u30f3\u30b8\u30e7\u30d6\u3068\u306f\uff1f","text":""},{"location":"ja/resources/faq/#_5","title":"\u65b0\u3057\u3044\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\uff1f","text":""},{"location":"ja/resources/faq/#_6","title":"\u30eb\u30fc\u30c8\u3092\u524a\u9664\u3059\u308b\u306b\u306f\uff1f","text":"

            Lagoon\u306f\u3001.lagoon.yml\u304b\u3089\u30eb\u30fc\u30c8\u304c\u524a\u9664\u3055\u308c\u305f\u3053\u3068\u3092\u30c7\u30d7\u30ed\u30a4\u6642\u306b\u691c\u51fa\u3057\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u3001\u30eb\u30fc\u30c8\u304c\u81ea\u52d5\u7684\u306b\u524a\u9664\u3055\u308c\u305f\u304b\u3001\u305d\u308c\u3089\u3092\u524a\u9664\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/resources/faq/#pygmy-status","title":"pygmy status\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30ad\u30fc\u304c\u30ed\u30fc\u30c9\u3055\u308c\u307e\u305b\u3093","text":"

            SSH\u30ad\u30fc\u3092pygmy\u306b\u30ed\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u65b9\u6cd5\u306f\u3053\u3061\u3089:https://pygmystack.github.io/pygmy/ssh_agent

            "},{"location":"ja/resources/faq/#drush-sa","title":"drush sa\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30a8\u30a4\u30ea\u30a2\u30b9\u304c\u8fd4\u3055\u308c\u307e\u305b\u3093","text":"

            \u3053\u308c\u306f\u901a\u5e38\u3001Pygmy\u306b\u554f\u984c\u304c\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002Pygmy\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3053\u3061\u3089\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:https://pygmystack.github.io/pygmy/troubleshooting

            "},{"location":"ja/resources/faq/#drush","title":"\u300cdrush\u306f\u3088\u308a\u6a5f\u80fd\u7684\u306a\u74b0\u5883\u304c\u5fc5\u8981\u3067\u3059\u300d\u3068\u3044\u3046\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u3001\u30c7\u30d7\u30ed\u30a4\u304c\u5931\u6557\u3059\u308b","text":"

            \u3053\u308c\u306f\u901a\u5e38\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306e\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/resources/faq/#pygmy","title":"Pygmy\u3092\u8d77\u52d5\u3059\u308b\u3068\u300c\u30a2\u30c9\u30ec\u30b9\u306f\u3059\u3067\u306b\u4f7f\u7528\u4e2d\u300d\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u304b\uff1f","text":"

            \u30e6\u30fc\u30b6\u30fc\u30e9\u30f3\u30c9\u30d7\u30ed\u30ad\u30b7\u306e\u8d77\u52d5\u30a8\u30e9\u30fc: listen tcp 0.0.0.0:80: bind: address already in use Error: failed to start containers: amazeeio-haproxy

            \u3053\u308c\u306f\u65e2\u77e5\u306e\u30a8\u30e9\u30fc\u3067\u3059\uff01\u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001\u30dd\u30fc\u30c880\u3067\u3059\u3067\u306b\u4f55\u304b\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u6b21\u306e\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u72af\u4eba\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

            netstat -ltnp | grep -w ':80'\n

            \u3053\u308c\u306b\u3088\u308a\u3001\u30dd\u30fc\u30c880\u3067\u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002\u30dd\u30fc\u30c880\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308b\u30d7\u30ed\u30bb\u30b9\u3092\u7d42\u4e86\u3055\u305b\u307e\u3059\u3002\u30dd\u30fc\u30c880\u304c\u89e3\u653e\u3055\u308c\u308b\u3068\u3001Pygmy\u306f\u3053\u308c\u4ee5\u4e0a\u306e\u30a8\u30e9\u30fc\u306a\u304f\u8d77\u52d5\u3059\u308b\u306f\u305a\u3067\u3059\u3002

            "},{"location":"ja/resources/faq/#pr","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d6\u30e9\u30f3\u30c1/PR\u74b0\u5883/\u672c\u756a\u74b0\u5883\u3092\u3069\u306e\u3088\u3046\u306b\u5909\u66f4\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

            \u305d\u306e\u5909\u66f4\u306fLagoon API\u3092\u4f7f\u7528\u3057\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff01\u3053\u306e\u5909\u66f4\u306b\u95a2\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306fGraphQL\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059.

            "},{"location":"ja/resources/faq/#_7","title":"\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/faq/#ssh_1","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8/\u30b0\u30eb\u30fc\u30d7\u306b\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc(\u304a\u3088\u3073SSH\u30ad\u30fc)\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":"

            \u3053\u308c\u306fLagoon API\u3092\u4ecb\u3057\u3066\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u5909\u66f4\u306e\u30b9\u30c6\u30c3\u30d7\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u79c1\u305f\u3061\u306eGraphQL\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/resources/faq/#_8","title":"\u74b0\u5883\u306f\u5b8c\u5168\u306b\u524a\u9664\u3057\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5927\u304d\u306a\u30b3\u30fc\u30c9\u5909\u66f4\u3092\u5c55\u958b\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

            \u74b0\u5883\u306f\u5404\u30c7\u30d7\u30ed\u30a4\u3067\u5b8c\u5168\u306b\u30bc\u30ed\u304b\u3089\u69cb\u7bc9\u3055\u308c\u3001\u53e4\u3044\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3057\u3066\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3068\u3001\u65b0\u9bae\u306a\u30af\u30ea\u30fc\u30f3\u306a\u30d3\u30eb\u30c9\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u518d\u540c\u671f\u3092\u5fd8\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044\uff01

            GraphQL\u3092\u4ecb\u3057\u3066\u74b0\u5883\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u6307\u793a\u306f\u79c1\u305f\u3061\u306eGraphQL\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/resources/faq/#_9","title":"\u65b0\u3057\u3044\u74b0\u5883\u5909\u6570\u3092\u8868\u793a\u3055\u305b\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":"

            GraphQL\u3092\u4ecb\u3057\u3066\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u74b0\u5883\u306b\u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u5909\u6570\u3092\u8ffd\u52a0\u3057\u305f\u3089\u3001\u30c7\u30d7\u30ed\u30a4\u3092\u884c\u3046\u3060\u3051\u3067\u65b0\u3057\u3044\u74b0\u5883\u5909\u6570\u3092\u8868\u793a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u3042\u306a\u305f\u306e\u74b0\u5883\u306b\u5909\u66f4\u304c\u53cd\u6620\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

            "},{"location":"ja/resources/faq/#lagoonsftp","title":"Lagoon\u74b0\u5883\u306bSFTP\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u9001\u4fe1/\u53d6\u5f97\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":"

            \u30af\u30e9\u30a6\u30c9\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u306e\u304a\u5ba2\u69d8\u306f\u3001\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u4f7f\u7528\u3057\u3066Lagoon\u74b0\u5883\u306bSFTP\u3067\u63a5\u7d9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:

            • \u30b5\u30fc\u30d0\u30fc\u30db\u30b9\u30c8\u540d: ssh.lagoon.amazeeio.cloud
            • \u30dd\u30fc\u30c8: 32222
            • \u30e6\u30fc\u30b6\u30fc\u540d: <\u30d7\u30ed\u30b8\u30a7\u30af\u30c8-\u74b0\u5883-\u540d>

            \u30e6\u30fc\u30b6\u30fc\u540d\u306f\u3001\u63a5\u7d9a\u3059\u308b\u74b0\u5883\u306e\u540d\u524d\u306b\u306a\u308a\u307e\u3059\u3002\u6700\u3082\u4e00\u822c\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u306f_PROJECTNAME-ENVIRONMENT_\u3067\u3059\u3002

            \u307e\u305f\u3001\u65b0\u3057\u3044Lagoon Sync\u30c4\u30fc\u30eb\u306b\u3064\u3044\u3066\u3082\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u3053\u3067\u8a73\u7d30\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059: https://github.com/uselagoon/lagoon-sync

            \u8a8d\u8a3c\u306f\u3001SSH\u516c\u958b\u9375\u3068\u79d8\u5bc6\u9375\u306e\u8a8d\u8a3c\u3092\u901a\u3058\u3066\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u307e\u3059\u3002

            "},{"location":"ja/resources/faq/#lets-encryptssl","title":"Let's Encrypt\u3092\u4f7f\u7528\u3057\u305f\u304f\u306a\u3044\u3002\u79c1\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u3044SSL\u8a3c\u660e\u66f8\u304c\u3042\u308a\u307e\u3059","text":"

            \u305d\u308c\u306b\u3064\u3044\u3066\u306f\u78ba\u304b\u306b\u304a\u624b\u4f1d\u3044\u3067\u304d\u307e\u3059\u3002\u81ea\u5206\u306eSSL\u8a3c\u660e\u66f8\u3092\u624b\u306b\u5165\u308c\u305f\u3089\u3001\u9060\u616e\u306a\u304f\u30c1\u30b1\u30c3\u30c8\u3092\u63d0\u51fa\u3059\u308b\u304b\u3001\u30c1\u30e3\u30c3\u30c8\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u559c\u3093\u3067\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\uff01\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u9001\u4fe1\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

            • \u8a3c\u660e\u66f8\u30ad\u30fc (.key)
            • \u8a3c\u660e\u66f8\u30d5\u30a1\u30a4\u30eb (.crt)
            • \u4e2d\u9593\u8a3c\u660e\u66f8 (.crt)

            \u307e\u305f\u3001.lagoon.yml\u3067tls-acme\u30aa\u30d7\u30b7\u30e7\u30f3\u3092false\u306b\u8a2d\u5b9a\u3059\u308b\u3002

            "},{"location":"ja/resources/faq/#lagoonefsfusesmbetc","title":"Lagoon\u306b\u5916\u90e8\u30dc\u30ea\u30e5\u30fc\u30e0(EFS/Fuse/SMB/etc)\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u3053\u3068\u306f\u53ef\u80fd\u3067\u3059\u304b\uff1f","text":"

            \u5916\u90e8\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30de\u30a6\u30f3\u30c8\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u5185\u90e8\u3067\u5b8c\u5168\u306b\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001Lagoon\u306f\u3053\u306e\u7a2e\u306e\u63a5\u7d9a\u3092\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u4e00\u90e8\u3068\u3057\u3066\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\u3002

            \u958b\u767a\u8005\u306f\u3001\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30b3\u30f3\u30c6\u30ca\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb(Dockerfile\u7d4c\u7531)\u3057\u3001\u30dc\u30ea\u30e5\u30fc\u30e0\u30de\u30a6\u30f3\u30c8\u304c\u4e8b\u524d\u307e\u305f\u306f\u4e8b\u5f8c\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u30bf\u30b9\u30af\u7d4c\u7531\u3067\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3067\u3053\u308c\u3092\u51e6\u7406\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/resources/faq/#lagoon_1","title":"Lagoon\u306e\u30d3\u30eb\u30c9\u3092\u505c\u6b62\u3059\u308b\u65b9\u6cd5\u306f\u3042\u308a\u307e\u3059\u304b\uff1f","text":"

            \u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u30d3\u30eb\u30c9\u3092\u505c\u6b62\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u30b5\u30dd\u30fc\u30c8\u306b\u9023\u7d61\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u3001\u30d3\u30eb\u30c9\u306f\u30af\u30e9\u30b9\u30bf\u3078\u306e\u7ba1\u7406\u8005\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u306e\u307f\u304c\u505c\u6b62\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/resources/faq/#elasticsearchsolrui92008983","title":"Elasticsearch\\Solr\u30b5\u30fc\u30d3\u30b9\u3092\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3057\u305f\u3002\u30d6\u30e9\u30a6\u30b6\u304b\u3089UI(\u30dd\u30fc\u30c89200/8983)\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u3069\u306e\u3088\u3046\u306b\u53d6\u5f97\u3067\u304d\u307e\u3059\u304b\uff1f","text":"

            \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u74b0\u5883\u3067\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9(NGINX/Varnish/Node.js)\u306e\u307f\u3092\u516c\u958b\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30dd\u30fc\u30c8\u30de\u30c3\u30d4\u30f3\u30b0\u3092docker-compose ps\u3067\u78ba\u8a8d\u3057\u3066\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002 , \u305d\u3057\u3066 [http://localhost](http://localhost/):` \u3092\u30d6\u30e9\u30a6\u30b6\u3067\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002"},{"location":"ja/resources/faq/#_10","title":"\u3053\u3053\u3067\u306f\u7b54\u3048\u3089\u308c\u306a\u3044\u8cea\u554f\u304c\u3042\u308a\u307e\u3059","text":"

            Discord \u307e\u305f\u306f uselagoon@amazee.io \u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u30c1\u30fc\u30e0\u306b\u9023\u7d61\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/resources/glossary/","title":"\u7528\u8a9e\u96c6","text":"\u7528\u8a9e \u5b9a\u7fa9 Access Mode \u6c38\u7d9a\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u3069\u306e\u3088\u3046\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u304b\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002 Active/Standby Active/Standby deployments\u306f\u3001\u4e00\u822c\u306bblue/green deployments\u3068\u3082\u547c\u3070\u308c\u3001\u672c\u756a\u74b0\u5883\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u5207\u308a\u66ff\u3048\u308b\u65b9\u6cd5\u3067\u3059\u3002 Ansible \u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3092\u30b3\u30fc\u30c9\u5316\u53ef\u80fd\u306b\u3059\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30c4\u30fc\u30eb\u30b9\u30a4\u30fc\u30c8\u3002 AWS Amazon Web Services Amazon S3 Glacier \u9577\u671f\u4fdd\u5b58\u306e\u305f\u3081\u306e\u5b89\u5168\u304b\u3064\u4f4e\u30b3\u30b9\u30c8\u306aS3\u30b9\u30c8\u30ec\u30fc\u30b8\u3002 BitBucket Atlassian\u304c\u6240\u6709\u3059\u308bGit\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3067\u3001\u305d\u306e\u30c4\u30fc\u30eb\u3068\u7d71\u5408\u3057\u307e\u3059\u3002 Brew Homebrew\u306fOSX\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3067\u3059\u3002 CA \u4fe1\u983c\u3067\u304d\u308b\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3067\u3042\u308b\u8a3c\u660e\u66f8\u8a8d\u8a3c\u5c40(Certificate Authority)\u306f\u3001Secure Sockets Layer (SSL)\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3057\u307e\u3059\u3002 CDN \u30b3\u30f3\u30c6\u30f3\u30c4\u914d\u4fe1\u30cd\u30c3\u30c8\u30ef\u30fc\u30af - \u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u306b\u3088\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u914d\u4fe1 CI \u7d99\u7d9a\u7684\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3 CIDR \u30af\u30e9\u30b9\u30ec\u30b9\u30fb\u30a4\u30f3\u30bf\u30fc\u30c9\u30e1\u30a4\u30f3\u30fb\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0 - IP\u30a2\u30c9\u30ec\u30b9\u306e\u5272\u308a\u5f53\u3066\u65b9\u6cd5 CLI \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9 Cluster \u30b5\u30fc\u30d0\u30fc\u3084VM\u306e\u7d71\u4e00\u3055\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3067\u3001\u4e00\u7dd2\u306b\u5206\u6563\u7ba1\u7406\u3055\u308c\u3001\u9ad8\u3044\u53ef\u7528\u6027\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u4e00\u3064\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u30b5\u30fc\u30d3\u30b9\u3057\u307e\u3059\u3002 CMS \u30b3\u30f3\u30c6\u30f3\u30c4\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0 Cron job cron\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u306f\u3001Unix\u7cfb\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306e\u30b8\u30e7\u30d6\u30b9\u30b1\u30b8\u30e5\u30fc\u30e9\u3067\u3059\u3002\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u74b0\u5883\u306e\u8a2d\u5b9a\u3068\u7dad\u6301\u3092\u884c\u3046\u30e6\u30fc\u30b6\u30fc\u306f\u3001cron\u3092\u4f7f\u7528\u3057\u3066\u30b8\u30e7\u30d6(cron\u30b8\u30e7\u30d6\u3068\u3082\u547c\u3070\u308c\u308b)\u3092\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3057\u3001\u56fa\u5b9a\u306e\u6642\u9593\u3001\u65e5\u4ed8\u3001\u307e\u305f\u306f\u9593\u9694\u3067\u5b9a\u671f\u7684\u306b\u5b9f\u884c\u3057\u307e\u3059\u3002 Composer \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc DDEV Drupal\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u4eba\u6c17\u306e\u3042\u308bDocker\u30d9\u30fc\u30b9\u306ePHP\u958b\u767a\u74b0\u5883\u3002 DDoS \u5206\u6563\u578b\u30b5\u30fc\u30d3\u30b9\u62d2\u5426 DNS \u30c9\u30e1\u30a4\u30f3\u30cd\u30fc\u30e0\u30b7\u30b9\u30c6\u30e0 Docker Linux\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u81ea\u52d5\u5316\u3059\u308b\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30b8\u30f3\u3002 Docker Compose YAML\u30d5\u30a1\u30a4\u30eb\u3092\u4ecb\u3057\u3066Docker\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9a\u7fa9\u3057\u3001\u5b9f\u884c\u3059\u308b\u30c4\u30fc\u30eb\u3002 Drupal \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0 Drush Drupal\u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30b7\u30a7\u30eb\u3002 EC2 Amazon Elastic Compute Cloud Elasticsearch \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3002\u5206\u6563\u578b\u3001\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8\u5bfe\u5fdc\u306e\u5168\u6587\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3092\u63d0\u4f9b\u3057\u3001\u30b9\u30ad\u30fc\u30de\u30d5\u30ea\u30fc\u306eJSON\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30a6\u30a7\u30d6\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 Galera \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u305f\u3081\u306e\u6c4e\u7528\u7684\u306a\u540c\u671f\u30de\u30eb\u30c1\u30de\u30b9\u30bf\u30fc\u8907\u88fd\u30e9\u30a4\u30d6\u30e9\u30ea\u3002 Git \u7121\u6599\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u5206\u6563\u578b\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3002 Git Hash /SHA \u5404\u30b3\u30df\u30c3\u30c8\u3092\u8b58\u5225\u3059\u308b\u751f\u6210\u3055\u308c\u305f\u6587\u5b57\u5217\u3002SHA-1\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u307e\u3059 GitHub Git\u3092\u4f7f\u7528\u3057\u305f\u72ec\u81ea\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u4f1a\u793e\u3002\u30de\u30a4\u30af\u30ed\u30bd\u30d5\u30c8\u306e\u5b50\u4f1a\u793e\u3067\u3001Git\u306e\u5206\u6563\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3068\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u7ba1\u7406\u6a5f\u80fd\u3092\u5168\u3066\u63d0\u4f9b\u3057\u3001\u3055\u3089\u306b\u8ffd\u52a0\u6a5f\u80fd\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002 GitLab CI\u6a5f\u80fd\u3092\u5099\u3048\u305fWeb\u30d9\u30fc\u30b9\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3002 Grafana \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u5206\u6790\u304a\u3088\u3073\u76e3\u8996\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3002 GraphQL API\u306e\u305f\u3081\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u30af\u30a8\u30ea\u3068\u64cd\u4f5c\u8a00\u8a9e\u3001\u304a\u3088\u3073\u65e2\u5b58\u306e\u30c7\u30fc\u30bf\u3067\u30af\u30a8\u30ea\u3092\u6e80\u305f\u3059\u305f\u3081\u306e\u30e9\u30f3\u30bf\u30a4\u30e0\u3002 Harbor \u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3067\u30a4\u30e1\u30fc\u30b8\u3092\u4fdd\u8b77\u3057\u3001\u30a4\u30e1\u30fc\u30b8\u306e\u8106\u5f31\u6027\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3001\u4fe1\u983c\u3067\u304d\u308b\u30a4\u30e1\u30fc\u30b8\u3068\u3057\u3066\u7f72\u540d\u3059\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u30ec\u30b8\u30b9\u30c8\u30ea\u3002 Helm Kubernetes\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3067\u3001Kubernetes\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u7ba1\u7406\u3059\u308b\u306e\u3092\u52a9\u3051\u307e\u3059\u3002 Helm Charts Helm Charts\u306f\u3001\u6700\u3082\u8907\u96d1\u306aKubernetes\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9a\u7fa9\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3001\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u306e\u3092\u52a9\u3051\u307e\u3059\u3002 HTTP \u30cf\u30a4\u30d1\u30fc\u30c6\u30ad\u30b9\u30c8\u8ee2\u9001\u30d7\u30ed\u30c8\u30b3\u30eb\u3002HTTP\u306fWorld Wide Web\u306b\u3088\u3063\u3066\u4f7f\u7528\u3055\u308c\u308b\u57fa\u790e\u7684\u306a\u30d7\u30ed\u30c8\u30b3\u30eb\u3067\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u3069\u306e\u3088\u3046\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u3001\u4f1d\u9001\u3055\u308c\u3001Web\u30b5\u30fc\u30d0\u30fc\u3068\u30d6\u30e9\u30a6\u30b6\u304c\u3055\u307e\u3056\u307e\u306a\u30b3\u30de\u30f3\u30c9\u306b\u5bfe\u3057\u3066\u3069\u306e\u3088\u3046\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3079\u304d\u304b\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002 IAM AWS Identity and Access Management(IAM)\u306f\u3001AWS\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u5b89\u5168\u306b\u5236\u5fa1\u3059\u308b\u306e\u306b\u5f79\u7acb\u3064\u30a6\u30a7\u30d6\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002 IDE \u7d71\u5408\u958b\u767a\u74b0\u5883\u306f\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u305f\u3081\u306e\u5305\u62ec\u7684\u306a\u65bd\u8a2d\u3092\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u306b\u63d0\u4f9b\u3059\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3059\u3002IDE\u306b\u306f\u901a\u5e38\u3001\u5c11\u306a\u304f\u3068\u3082\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u30a8\u30c7\u30a3\u30bf\u3001\u30d3\u30eb\u30c9\u81ea\u52d5\u5316\u30c4\u30fc\u30eb\u3001\u30c7\u30d0\u30c3\u30ac\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002 Ingress controller Ingress controller\u306f\u3001Kubernetes(\u304a\u3088\u3073\u4ed6\u306e\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f)\u74b0\u5883\u7528\u306e\u7279\u5316\u3057\u305f\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u30fc\u3067\u3059\u3002 IPTables Linux\u30ab\u30fc\u30cd\u30eb\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u3002 Jenkins \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u81ea\u52d5\u5316\u30b5\u30fc\u30d0\u30fc\u3002 JWT JSON Web Token\u3002 k3s \u9ad8\u53ef\u7528\u6027\u3001\u8a8d\u5b9a\u6e08\u307f\u306eKubernetes\u30c7\u30a3\u30b9\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3\u3002 k3d k3d\u306f\u3001Docker\u5185\u3067k3s\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u8efd\u91cf\u30e9\u30c3\u30d1\u30fc\u3067\u3059\u3002 k8s Kubernetes\u306e\u6570\u5b57\u8a18\u53f7(K + 8\u6587\u5b57 + s) k8up K8up\u306f\u3001k8s/OpenShift\u30af\u30e9\u30b9\u30bf\u30fc\u4e0a\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u30a2\u30d7\u30ea\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u51e6\u7406\u3059\u308b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30aa\u30da\u30ec\u30fc\u30bf\u30fc\u3067\u3059\u3002 Keycloak \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u304a\u3088\u3073\u30a2\u30af\u30bb\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3002 Kibana Elasticsearch\u7528\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u53ef\u8996\u5316\u30d7\u30e9\u30b0\u30a4\u30f3\u3002Elasticsearch\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u4e0a\u3067\u8996\u899a\u5316\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 KinD Docker\u5185\u306eKubernetes - Docker\u30b3\u30f3\u30c6\u30ca\u30fc\u300c\u30ce\u30fc\u30c9\u300d\u3092\u4f7f\u7528\u3057\u3066\u30ed\u30fc\u30ab\u30eb\u306eKubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u5b9f\u884c\u3059\u308b\u30c4\u30fc\u30eb\u3002Kind\u306f\u4e3b\u306bKubernetes\u81ea\u4f53\u306e\u30c6\u30b9\u30c8\u7528\u306b\u8a2d\u8a08\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u30ed\u30fc\u30b1\u30eb\u958b\u767a\u3084CI\u306b\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 kubectl Kubernetes\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u5bfe\u3057\u3066\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306eKubernetes\u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u3002 Kubernetes \u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3001\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3001\u304a\u3088\u3073\u7ba1\u7406\u3092\u81ea\u52d5\u5316\u3059\u308b\u305f\u3081\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30b7\u30b9\u30c6\u30e0\u3002 Lagoon Kubernetes\u306e\u305f\u3081\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30ea\u30d0\u30ea\u30fc\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002 Lagoonize \u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u3092Lagoon\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u5909\u66f4\u3002 Lando Docker\u3092\u57fa\u76e4\u306b\u3057\u305f\u7121\u6599\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3001\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u304a\u3088\u3073DevOps\u30c4\u30fc\u30eb\u3002 Laravel \u30e2\u30c7\u30eb-\u30d3\u30e5\u30fc-\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc(MVC)\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30d1\u30bf\u30fc\u30f3\u306b\u5f93\u3044\u3001Symfony\u3092\u57fa\u306b\u3057\u305f\u7121\u6599\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9PHP\u30a6\u30a7\u30d6\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3002 Let's Encrypt \u7121\u6599\u306e\u81ea\u52d5\u5316\u3055\u308c\u305f\u30aa\u30fc\u30d7\u30f3\u306a\u8a8d\u8a3c\u5c40(CA)\u3002 MariaDB MySQL\u306e\u95a2\u4fc2\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u958b\u767a\u7248\u3067\u3001\u5546\u696d\u7684\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u304a\u308a\u3001GNU General Public License\u306e\u4e0b\u3067\u7121\u6599\u3067\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3067\u3042\u308b\u3053\u3068\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002 Master node \u96c6\u5408\u4f53\u306e\u4e2d\u306e\u5358\u4e00\u306e\u30ce\u30fc\u30c9\u3002 \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3088\u308a\u5c02\u9580\u7684\u306a\u90e8\u5206\u306b\u5206\u5272\u3059\u308b\u5b9f\u8df5\u3002\u5404\u90e8\u5206\u306fAPI\u3084HTTP\u306e\u3088\u3046\u306aREST\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4ecb\u3057\u3066\u4e92\u3044\u306b\u901a\u4fe1\u3057\u307e\u3059\u3002 MongoDB MongoDB\u306f\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6307\u5411\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u3057\u3066\u5206\u985e\u3055\u308c\u3001MongoDB\u306f\u30b9\u30ad\u30fc\u30de\u4ed8\u304d\u306eJSON\u98a8\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 \u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8 \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u5358\u4e00\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u30b5\u30fc\u30d0\u30fc\u4e0a\u3067\u52d5\u4f5c\u3057\u3001\u8907\u6570\u306e\u30c6\u30ca\u30f3\u30c8(\u5171\u901a\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u3092\u5171\u6709\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u30b0\u30eb\u30fc\u30d7)\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u5404\u30c6\u30ca\u30f3\u30c8\u306b\u30ea\u30bd\u30fc\u30b9\u306e\u4e00\u90e8\u3092\u63d0\u4f9b\u3059\u308b\u3088\u3046\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002 MVC \u30e2\u30c7\u30eb-\u30d3\u30e5\u30fc-\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9 - \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30923\u3064\u306e\u4e3b\u8981\u306a\u8ad6\u7406\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8:\u30e2\u30c7\u30eb\u3001\u30d3\u30e5\u30fc\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306b\u5206\u3051\u308b\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30d1\u30bf\u30fc\u30f3\u3002\u3053\u308c\u3089\u306e\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u5b9a\u306e\u958b\u767a\u5074\u9762\u3092\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u69cb\u7bc9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 MySQL MySQL\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002 NGINX NGINX\u306f\u3001\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3001\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u3001\u30e1\u30fc\u30eb\u30d7\u30ed\u30ad\u30b7\u3001HTTP\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u3057\u3066\u3082\u4f7f\u7528\u3067\u304d\u308b\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u3067\u3059\u3002 \u30ce\u30fc\u30c9 \u5358\u4e00\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9( Node.js \u30d6\u30e9\u30a6\u30b6\u30fc\u306e\u5916\u90e8\u3067JavaScript\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306eJavaScript\u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u3002 Open source \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u4e0b\u306b\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u3001\u8457\u4f5c\u6a29\u8005\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u7814\u7a76\u3001\u5909\u66f4\u3001\u304a\u3088\u3073\u4efb\u610f\u306e\u76ee\u7684\u3067\u8ab0\u306b\u3067\u3082\u914d\u5e03\u3059\u308b\u6a29\u5229\u3092\u4ed8\u4e0e\u3059\u308b\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u4e00\u7a2e\u3002\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u3001\u5171\u540c\u306e\u516c\u958b\u65b9\u5f0f\u3067\u958b\u767a\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 OpenSearch \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4e3b\u5c0e\u306e\u3001Apache 2.0\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u304a\u3088\u3073\u5206\u6790\u30b9\u30a4\u30fc\u30c8\u3067\u3001\u30c7\u30fc\u30bf\u306e\u53d6\u308a\u8fbc\u307f\u3001\u691c\u7d22\u3001\u8996\u899a\u5316\u3001\u5206\u6790\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002 OpenShift Docker\u3068Kubernetes\u3092\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u306b\u3082\u305f\u3089\u3059\u30b3\u30f3\u30c6\u30ca\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002 PHP PHP(Personal Home Page)\u306f\u3001Web\u958b\u767a\u306e\u305f\u3081\u306b\u5143\u3005\u8a2d\u8a08\u3055\u308c\u305f\u6c4e\u7528\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u3059\u3002 PhpStorm PHP\u3068Web\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u305f\u3081\u306e\u958b\u767a\u30c4\u30fc\u30eb(IDE)\u3002 Pod \u540c\u3058\u30db\u30b9\u30c8\u4e0a\u306b\u4e00\u7dd2\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u30b3\u30f3\u30c6\u30ca\u306e\u30b0\u30eb\u30fc\u30d7\u3002 Kubernetes\u304c\u6271\u3046\u57fa\u672c\u5358\u4f4d\u3002 PostgreSQL \u62e1\u5f35\u6027\u3068\u6280\u8853\u6a19\u6e96\u306e\u6e96\u62e0\u3092\u5f37\u8abf\u3057\u305f\u7121\u6599\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3002 Public/Private Key \u516c\u958b\u9375/\u79d8\u5bc6\u9375 Puppet \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u8a2d\u5b9a\u7ba1\u7406\u304a\u3088\u3073\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30c4\u30fc\u30eb\u3002 PV PersistentVolume - \u7ba1\u7406\u8005\u304c\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3057\u305f\u3001\u307e\u305f\u306fStorage Classes\u3092\u4f7f\u7528\u3057\u3066\u52d5\u7684\u306b\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u3055\u308c\u305f\u30af\u30e9\u30b9\u30bf\u5185\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4e00\u90e8\u3002 PVC Persistent Volume Claim - \u30e6\u30fc\u30b6\u30fc\u306b\u3088\u308b\u30b9\u30c8\u30ec\u30fc\u30b8\u8981\u6c42\u3002 Pygmy amazee.io\u304c\u63d0\u4f9b\u3059\u308b\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u30b7\u30b9\u30c6\u30e0\u3002 Python Python\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u3001\u89e3\u91c8\u3055\u308c\u3001\u9ad8\u30ec\u30d9\u30eb\u3067\u3001\u4e00\u822c\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u3059\u3002 RabbitMQ \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u30d6\u30ed\u30fc\u30ab\u30fc\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3002 RBAC \u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1 RDS \u95a2\u4fc2\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b5\u30fc\u30d3\u30b9 Redis \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3001\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u30d6\u30ed\u30fc\u30ab\u30fc\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a4\u30f3\u30e1\u30e2\u30ea\u30c7\u30fc\u30bf\u30b9\u30c8\u30a2\u3002 Restic \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d7\u30ed\u30b0\u30e9\u30e0\u3002 ROX Kubernetes\u306e\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9ReadOnlyMany - \u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u591a\u304f\u306e\u30ce\u30fc\u30c9\u3067\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3068\u3057\u3066\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002 Ruby \u8907\u6570\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d1\u30e9\u30c0\u30a4\u30e0\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u89e3\u91c8\u578b\u306e\u9ad8\u30ec\u30d9\u30eb\u6c4e\u7528\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3002\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u5f37\u8abf\u70b9\u3068\u3057\u3066\u8a2d\u8a08\u3055\u308c\u307e\u3057\u305f\u3002 \u751f\u7523\u6027\u3068\u30b7\u30f3\u30d7\u30eb\u3055\u3002Ruby\u3067\u306f\u3001\u3059\u3079\u3066\u304c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308a\u3001\u30d7\u30ea\u30df\u30c6\u30a3\u30d6\u306a\u30c7\u30fc\u30bf\u578b\u3082\u4f8b\u5916\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 RWO Kubernetes\u306e\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9ReadWriteOnce - \u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u5358\u4e00\u306e\u30ce\u30fc\u30c9\u306b\u3088\u3063\u3066\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u3068\u3057\u3066\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002ReadWriteOnce\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9\u3067\u306f\u3001\u540c\u3058\u30ce\u30fc\u30c9\u4e0a\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u8907\u6570\u306e\u30dd\u30c3\u30c9\u304c\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002 RWOP Kubernetes\u306e\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9ReadWriteOncePod - \u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u5358\u4e00\u306ePod\u306b\u3088\u3063\u3066\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u3068\u3057\u3066\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002\u30af\u30e9\u30b9\u30bf\u5168\u4f53\u3067\u305f\u3060\u4e00\u3064\u306e\u30dd\u30c3\u30c9\u306e\u307f\u304c\u305d\u306ePVC\u3092\u8aad\u307f\u66f8\u304d\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001ReadWriteOncePod\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306fCSI\u30dc\u30ea\u30e5\u30fc\u30e0\u3068Kubernetes\u30d0\u30fc\u30b8\u30e7\u30f31.22+\u3067\u306e\u307f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002 RWX Kubernetes\u306e\u30a2\u30af\u30bb\u30b9\u30e2\u30fc\u30c9ReadWriteMany - \u30dc\u30ea\u30e5\u30fc\u30e0\u306f\u591a\u6570\u306e\u30ce\u30fc\u30c9\u306b\u3088\u3063\u3066\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u3068\u3057\u3066\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002 S3 Amazon Simple Storage Service\u3002 SBOM \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u90e8\u54c1\u8868\u3002 SHA-1 Secure Hash Algorithm 1\u3001\u5165\u529b\u3092\u53d6\u308a\u3001160\u30d3\u30c3\u30c8\u306e\u30cf\u30c3\u30b7\u30e5\u5024(\u901a\u5e38\u306f40\u6841\u306e16\u9032\u6570\u3067\u8868\u793a)\u3092\u751f\u6210\u3059\u308b\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u3002\u3053\u308c\u306f\u30a2\u30e1\u30ea\u30ab\u56fd\u5bb6\u5b89\u5168\u4fdd\u969c\u5c40\u306b\u3088\u3063\u3066\u8a2d\u8a08\u3055\u308c\u3001\u7c73\u56fd\u9023\u90a6\u60c5\u5831\u51e6\u7406\u6a19\u6e96\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002 Solr Java\u3067\u66f8\u304b\u308c\u305f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u691c\u7d22\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002 SSH \u30bb\u30ad\u30e5\u30a2 SSL \u30bb\u30ad\u30e5\u30a2\u30bd\u30b1\u30c3\u30c8\u30ec\u30a4\u30e4\u30fc \u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9 \u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u306f\u3001Kubernetes\u306e\u7ba1\u7406\u8005\u304c\u63d0\u4f9b\u3059\u308b\u300c\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u30af\u30e9\u30b9\u300d\u3092\u8a18\u8ff0\u3059\u308b\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u7570\u306a\u308b\u30af\u30e9\u30b9\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u54c1\u8cea\u30ec\u30d9\u30eb\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30dd\u30ea\u30b7\u30fc\u3001\u307e\u305f\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u7ba1\u7406\u8005\u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u308b\u4efb\u610f\u306e\u30dd\u30ea\u30b7\u30fc\u306b\u30de\u30c3\u30d7\u3055\u308c\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093 Symfony Symfony\u306fPHP\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308a\u3001\u518d\u5229\u7528\u53ef\u80fd\u306aPHP\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8/\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30bb\u30c3\u30c8\u3067\u3001Drupal 8\u4ee5\u964d\u306fSymfony\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002 TCP \u30c8\u30e9\u30f3\u30b9\u30df\u30c3\u30b7\u30e7\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d7\u30ed\u30c8\u30b3\u30eb\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u30c7\u30fc\u30bf\u3092\u4ea4\u63db\u3067\u304d\u308b\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u4f1a\u8a71\u3092\u78ba\u7acb\u3057\u7dad\u6301\u3059\u308b\u65b9\u6cd5\u3092\u5b9a\u7fa9\u3059\u308b\u6a19\u6e96\u3002 TLS \u30c8\u30e9\u30f3\u30b9\u30dd\u30fc\u30c8\u5c64\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 Trivy CI\u306b\u9069\u3057\u305f\u30b7\u30f3\u30d7\u30eb\u3067\u5305\u62ec\u7684\u306a\u30b3\u30f3\u30c6\u30ca\u306e\u8106\u5f31\u6027\u30b9\u30ad\u30e3\u30ca\u3002 TTL Time to live\u307e\u305f\u306fhop limit\u306f\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u307e\u305f\u306f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u30c7\u30fc\u30bf\u306e\u5bff\u547d\u307e\u305f\u306f\u751f\u5b58\u671f\u9593\u3092\u5236\u9650\u3059\u308b\u30e1\u30ab\u30cb\u30ba\u30e0\u3067\u3059\u3002 Uptime Robot \u30a2\u30c3\u30d7\u30bf\u30a4\u30e0\u76e3\u8996\u30b5\u30fc\u30d3\u30b9\u3002 Varnish \u5f37\u529b\u306a\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eHTTP\u30a8\u30f3\u30b8\u30f3/\u30ea\u30d0\u30fc\u30b9HTTP\u30d7\u30ed\u30ad\u30b7\u3067\u3001\u30e6\u30fc\u30b6\u304c\u521d\u3081\u3066Web\u30da\u30fc\u30b8\u306e\u30b3\u30d4\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5(\u307e\u305f\u306f\u4fdd\u5b58)\u3059\u308b\u3053\u3068\u3067Web\u30b5\u30a4\u30c8\u306e\u901f\u5ea6\u3092\u4e0a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 VM \u30d0\u30fc\u30c1\u30e3\u30eb\u30de\u30b7\u30f3 Webhook Webhook\u306f\u3001GitHub\u3001GitLab\u3001Bitbucket\u306a\u3069\u306e\u30a2\u30d7\u30ea\u304c\u4ed6\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5373\u6642\u30c7\u30fc\u30bf\u3092\u63d0\u4f9b\u3057\u3001\u4f55\u304b(\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306a\u3069)\u306b\u5bfe\u3057\u3066\u884c\u52d5\u3092\u8d77\u3053\u3059\u65b9\u6cd5\u3067\u3059\u3002 YAML YAML Ain't Markup Language - YAML\u306f\u4eba\u9593\u304c\u8aad\u307f\u3084\u3059\u3044\u30c7\u30fc\u30bf\u30b7\u30ea\u30a2\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u8a00\u8a9e\u3067\u3059\u3002\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3084\u3001\u30c7\u30fc\u30bf\u304c\u4fdd\u5b58\u307e\u305f\u306f\u9001\u4fe1\u3055\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002"},{"location":"ja/resources/tutorials-and-webinars/","title":"\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3001\u30a6\u30a7\u30d3\u30ca\u30fc\u3001\u30d3\u30c7\u30aa","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoon","title":"Lagoon\u30a6\u30a7\u30d3\u30ca\u30fc\u5165\u9580","text":"

            [\u30b9\u30e9\u30a4\u30c9]

            "},{"location":"ja/resources/tutorials-and-webinars/#lagoonlando","title":"Lagoon\u3068\u5171\u306b\u9032\u5316\u3059\u308bLando","text":""},{"location":"ja/resources/tutorials-and-webinars/#-lagoon","title":"\u30a6\u30a7\u30d3\u30ca\u30fc - Lagoon\u30a4\u30f3\u30b5\u30a4\u30c8","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoon_1","title":"Lagoon\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30c7\u30e2","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoondrupal","title":"Lagoon\u3092\u4f7f\u3063\u3066\u8907\u6570\u306eDrupal\u30b5\u30a4\u30c8\u3092\u7ba1\u7406\u3059\u308b\u65b9\u6cd5","text":"

            [\u30b9\u30e9\u30a4\u30c9]

            "},{"location":"ja/resources/tutorials-and-webinars/#kubernetes101","title":"Kubernetes\u30a6\u30a7\u30d3\u30ca\u30fc101","text":"

            [\u30b9\u30e9\u30a4\u30c9]

            "},{"location":"ja/resources/tutorials-and-webinars/#kubernetes102","title":"Kubernetes\u30a6\u30a7\u30d3\u30ca\u30fc102","text":"

            [\u30b9\u30e9\u30a4\u30c9]

            "},{"location":"ja/resources/tutorials-and-webinars/#11000","title":"\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9:\u79c1\u305f\u3061\u304c\u6708\u306b1\u51041000\u4e07\u56de\u30d2\u30c3\u30c8\u3059\u308b\u5206\u96e2\u578b\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u3092\u904b\u55b6\u3059\u308b\u65b9\u6cd5","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoondrupaldocker","title":"Lagoon:\u30d5\u30ebDrupal\u30b5\u30dd\u30fc\u30c8\u4ed8\u304d\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9Docker\u30d3\u30eb\u30c9\uff06\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0","text":""},{"location":"ja/resources/tutorials-and-webinars/#kibana","title":"Kibana\u3067\u5185\u90e8\u30b5\u30fc\u30d0\u30fc\u30a8\u30e9\u30fc\u3092\u4fee\u6b63\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#_2","title":"\u65b0\u3057\u3044\u30eb\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3044\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#_3","title":"\u30d3\u30eb\u30c9\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u306f\u3069\u306e\u3088\u3046\u306b\u78ba\u8a8d\u3057\u307e\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#lagoon_2","title":"Lagoon\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#_4","title":"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c0\u30f3\u30d7\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#_5","title":"\u30af\u30ed\u30f3\u30b8\u30e7\u30d6\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f","text":""},{"location":"ja/resources/tutorials-and-webinars/#kubernetesweb-toby-bellwood-techweek21","title":"Kubernetes\u306bWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b - Toby Bellwood | Techweek21\u30c8\u30fc\u30af","text":""},{"location":"ja/resources/tutorials-and-webinars/#covid-19-sean-hamlin-techweek21","title":"Covid-19\u4e2d\u306b\u524d\u4f8b\u306e\u306a\u3044\u898f\u6a21\u3067\u5bfe\u51e6\u3059\u308b - Sean Hamlin| Techweek21\u30c8\u30fc\u30af","text":""},{"location":"ja/resources/tutorials-and-webinars/#silverstripe-on-lagoon-thom-toogood-techweek21","title":"\u30ed\u30fc\u30ab\u30eb\u304b\u3089\u30e9\u30a4\u30d6\u3078\u306eSilverstripe on Lagoon -Thom Toogood | Techweek21\u30c8\u30fc\u30af","text":""},{"location":"ja/using-lagoon-advanced/","title":"Lagoon\u306e\u9ad8\u5ea6\u306a\u4f7f\u3044\u65b9","text":"

            \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Lagoon\u306e\u3088\u308a\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3084\u7279\u5fb4\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002Lagoon\u304c\u521d\u3081\u3066\u306e\u65b9\u306f\u3001\u307e\u305aLagoon\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u304b\u3089\u59cb\u3081\u3066\u304f\u3060\u3055\u3044\u3002

            \u30b5\u30dd\u30fc\u30c8\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001\u79c1\u305f\u3061\u306eDiscord\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30e1\u30f3\u30d0\u30fc\u3084\u30e1\u30f3\u30c6\u30ca\u30fc\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-advanced/active-standby/#_1","title":"\u8a2d\u5b9a","text":"

            \u65e2\u5b58\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092Active/Standby\u306b\u5bfe\u5fdc\u3055\u305b\u308b\u305f\u3081\u306b\u306f\u3001Lagoon API\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u3092\u3044\u304f\u3064\u304b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            • productionEnviromment\u306f\u3001\u73fe\u5728\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u74b0\u5883\u306e\u30d6\u30e9\u30f3\u30c1\u540d\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
            • standbyProductionEnvironment\u306f\u3001\u73fe\u5728\u30b9\u30bf\u30f3\u30d0\u30a4\u4e2d\u306e\u74b0\u5883\u306e\u30d6\u30e9\u30f3\u30c1\u540d\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u306e\u66f4\u65b0
            mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionEnvironment:\"production-brancha\"\nstandbyProductionEnvironment:\"production-branchb\"\n}\n}){\nstandbyProductionEnvironment\nname\nproductionEnvironment\n}\n}\n
            "},{"location":"ja/using-lagoon-advanced/active-standby/#lagoonyml-production_routes","title":".lagoon.yml - production_routes","text":"

            .lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092Active/Standby\u306b\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u306f\u3001active\u74b0\u5883\u306b\u30a2\u30bf\u30c3\u30c1\u3057\u305f\u3044\u30eb\u30fc\u30c8\u3068standby\u74b0\u5883\u306b\u30a2\u30bf\u30c3\u30c1\u3057\u305f\u3044\u30eb\u30fc\u30c8\u3092production_routes\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002Active/Standby\u306e\u5207\u308a\u66ff\u3048\u6642\u306b\u306f\u3001\u3053\u308c\u3089\u306e\u30eb\u30fc\u30c8\u306f2\u3064\u306e\u74b0\u5883\u9593\u3067\u79fb\u884c\u3057\u307e\u3059\u3002

            production-brancha\u3068production-branchb\u306e2\u3064\u306eproduction\u74b0\u5883\u304c\u3042\u308a\u3001\u73fe\u5728\u30a2\u30af\u30c6\u30a3\u30d6\u306aproduction\u74b0\u5883\u304cproduction-brancha\u3067\u3042\u308b\u5834\u5408\uff1a

            • production_routes.active\u914d\u4e0b\u306e\u30eb\u30fc\u30c8\u306fproduction-brancha\u306b\u5411\u304b\u308f\u305b\u307e\u3059\u3002
            • production_routes.standby\u914d\u4e0b\u306e\u30eb\u30fc\u30c8production-branchb\u306b\u5411\u304b\u308f\u305b\u307e\u3059\u3002

            Active/Standby\u306e\u5207\u308a\u66ff\u3048\u6642\u306b\u306f\u3001\u30eb\u30fc\u30c8\u304c\u5165\u308c\u66ff\u308f\u308a\u307e\u3059:

            • production_routes.active\u914d\u4e0b\u306e\u30eb\u30fc\u30c8\u306fproduction-branchb\u306b\u5411\u304b\u308f\u305b\u307e\u3059\u3002
            • production_routes.standby\u914d\u4e0b\u306e\u30eb\u30fc\u30c8\u306fproduction-brancha\u306b\u5411\u304b\u308f\u305b\u307e\u3059\u3002
            .lagoon.yml
            production_routes:\nactive:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'false'\n- active.example.com:\ntls-acme: 'false'\nstandby:\nroutes:\n- nginx:\n- standby.example.com:\ntls-acme: 'false'\n

            \u60c5\u5831

            environments..routes\u30bb\u30af\u30b7\u30e7\u30f3\u914d\u4e0b\u306b\u3042\u308b\u30eb\u30fc\u30c8\u306f\u3001Active/Standby\u306e\u4e00\u90e8\u3068\u3057\u3066\u79fb\u52d5\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u3089\u306e\u30eb\u30fc\u30c8\u306f\u5e38\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u306b\u30a2\u30bf\u30c3\u30c1\u3055\u308c\u307e\u3059\u3002Active/Standby\u306e\u5207\u308a\u66ff\u3048\u4e2d\u306b\u7279\u5b9a\u306e\u30eb\u30fc\u30c8\u3092\u79fb\u884c\u3059\u308b\u5fc5\u7528\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u3092\u74b0\u5883\u30bb\u30af\u30b7\u30e7\u30f3\u304b\u3089\u524a\u9664\u3057\u3001Active\u307e\u305f\u306f\u3001Standby\u30eb\u30fc\u30c8\u56fa\u6709\u306eproduction_routes \u30bb\u30af\u30b7\u30e7\u30f3\u306b\u914d\u7f6e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 .lagoon.yml \u306e\u30eb\u30fc\u30c8\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u306f\u3053\u3061\u3089\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-advanced/active-standby/#_2","title":"\u5207\u308a\u66ff\u3048\u30a4\u30d9\u30f3\u30c8\u306e\u30c8\u30ea\u30ac\u30fc","text":""},{"location":"ja/using-lagoon-advanced/active-standby/#ui","title":"UI\u7d4c\u7531","text":"

            \u74b0\u5883\u30eb\u30fc\u30c8\u306e\u5207\u308a\u66ff\u3048\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u306b\u306f\u3001Lagoon UI\u3067Standby\u74b0\u5883\u3092\u8a2a\u308c\u3001Switch Active/Standby environments\u3068\u3044\u3046\u30e9\u30d9\u30eb\u306e\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u78ba\u8a8d\u3059\u308b\u3088\u3046\u306b\u6c42\u3081\u3089\u308c\u307e\u3059\u3002

            \u78ba\u8a8d\u3059\u308b\u3068\u3001\u30bf\u30b9\u30af\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u3001\u5207\u308a\u66ff\u3048\u306e\u9032\u6357\u72b6\u6cc1\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/active-standby/#api","title":"API\u7d4c\u7531","text":"

            \u74b0\u5883\u3092\u5207\u308a\u66ff\u3048\u308b\u30a4\u30d9\u30f3\u30c8\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u306b\u306f\u3001\u6b21\u306eGraphQL mutation\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Lagoon\u304c\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3057\u307e\u3059\u3002

            \u30a2\u30af\u30c6\u30a3\u30d6\u30b9\u30bf\u30f3\u30d0\u30a4\u30b9\u30a4\u30c3\u30c1
            mutation ActiveStandby {\nswitchActiveStandby(\ninput:{\nproject:{\nname:\"drupal-example\"\n}\n}\n){\nid\nremoteId\n}\n}\n

            \u5207\u308a\u66ff\u3048\u30a4\u30d9\u30f3\u30c8\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u308b\u3068\u3001\u73fe\u5728\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u74b0\u5883\u306e tasks \u30bf\u30d6\u306b\u30bf\u30b9\u30af\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u3053\u3067\u5207\u308a\u66ff\u3048\u306e\u72b6\u614b\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            remoteId \u3092\u4f7f\u7528\u3057\u3066\u3001switchActiveStandby mutation\u304b\u3089\u30bf\u30b9\u30af\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

            \u30bf\u30b9\u30af\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u78ba\u8a8d
            query getTask {\ntaskByRemoteId(id: \"<remoteId>\") {\nid\nname\ncreated\nstarted\ncompleted\nstatus\nlogs\n}\n}\n
            "},{"location":"ja/using-lagoon-advanced/active-standby/#drush","title":"drush\u30a8\u30a4\u30ea\u30a2\u30b9","text":"

            \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u4ee5\u4e0b\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u304c\u4f5c\u6210\u3055\u308c\u3001Active/Standby\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u5834\u5408\u306b\u5229\u7528\u3067\u304d\u307e\u3059\u3002

            • lagoon-production
            • lagoon-standby

            lagoon-production\u30a8\u30a4\u30ea\u30a2\u30b9\u306fproductionEnvironment\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30b5\u30a4\u30c8\u3092\u6307\u3057\u3001lagoon-standby\u306f\u5e38\u306bstandbyProductionEnvironment\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30b5\u30a4\u30c8\u3092\u6307\u3057\u307e\u3059\u3002

            \u3053\u308c\u3089\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u66f4\u65b0\u306b\u3088\u3063\u3066\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u305d\u308c\u3089\u3092\u5909\u66f4\u3059\u308b\u3068\u3001\u305d\u308c\u3089\u306b\u4f9d\u5b58\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            Drush\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u66f4\u65b0
            mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionAlias:\"custom-lagoon-production-alias\"\nstandbyAlias:\"custom-lagoon-standby-alias\"\n}\n}){\nproductionAlias\nname\nstandbyAlias\n}\n}\n
            "},{"location":"ja/using-lagoon-advanced/active-standby/#activestandby_1","title":"Active/Standby\u306e\u7121\u52b9\u5316","text":"

            \u3053\u308c\u30892\u3064\u306e\u30d6\u30e9\u30f3\u30c1\u306e\u3046\u3061\u3001\u3069\u3061\u3089\u3092\u4e3b\u306a\u74b0\u5883\u3068\u3057\u3066\u9032\u3081\u3066\u3044\u304f\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001 \u305d\u308c\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d6\u30e9\u30f3\u30c1\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002(\u4f8b:production-branchb)

            1. \u3053\u306e\u73fe\u5728\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30d6\u30e9\u30f3\u30c1\u306e.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3067\u3001production_routes.active.routes\u30bb\u30af\u30b7\u30e7\u30f3\u304b\u3089\u30eb\u30fc\u30c8\u3092environments.production-branchb\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u305d\u306e\u30eb\u30fc\u30c8\u304cproduction-branchb environment\u306b\u306e\u307f\u95a2\u9023\u4ed8\u3051\u3089\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002
            2. \u3053\u308c\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u5b8c\u5168\u306bproduction_routes\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u524a\u9664\u3057\u3001production-branchb\u74b0\u5883\u3092\u518d\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u307e\u3059\u3002
            3. \u3082\u30461\u3064\u306e\u30d6\u30e9\u30f3\u30c1\u3067\u3042\u308bproduction-brancha\u304c\u5fc5\u8981\u306a\u3044\u5834\u5408\u306f\u524a\u9664\u3057\u3066\u3082\u304b\u307e\u3044\u307e\u305b\u3093\u3002
            4. Git\u306b\u30d6\u30e9\u30f3\u30c1\u3092\u4fdd\u6301\u3059\u308b\u5834\u5408\u3001\u6df7\u4e71\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u306e.lagoon.yml\u304b\u3089\u3082production_routes\u3092\u524a\u9664\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u30d6\u30e9\u30f3\u30c1\u306f\u524a\u9664\u3057\u3066\u518d\u30c7\u30d7\u30ed\u30a4(\u3059\u3079\u3066\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306a\u3069\u3092\u6d88\u53bb)\u3059\u308b\u307e\u3067production\u30bf\u30a4\u30d7\u3068\u3057\u3066\u6b8b\u308a\u307e\u3059\u3002
            5. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304cproduction-branchb\u306eproduction\u74b0\u5883\u306e\u307f\u3067\u3001\u4ed6\u306e\u3059\u3079\u3066\u306e\u74b0\u5883\u304cdevelopment\u74b0\u5883\u3067\u3042\u308b\u72b6\u614b\u306b\u306a\u3063\u305f\u3089\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3057\u3066standbyProductionEnvironment\u3092\u524a\u9664\u3057\u3001\u74b0\u5883\u306eActive/Standby\u30e9\u30d9\u30eb\u3092\u6d88\u53bb\u3057\u307e\u3059\u3002
            \u30a2\u30af\u30c6\u30a3\u30d6/\u30b9\u30bf\u30f3\u30d0\u30a4\u3092\u30aa\u30d5\u306b\u3059\u308b
            mutation updateProject {\nupdateProject(input:{\nid:1234\npatch:{\nproductionEnvironment:\"production-branchb\"\nstandbyProductionEnvironment:\"\"\n}\n}){\nstandbyProductionEnvironment\nname\nproductionEnvironment\n}\n}\n
            "},{"location":"ja/using-lagoon-advanced/active-standby/#_3","title":"\u30ce\u30fc\u30c8","text":"

            Active/Standby\u30c8\u30ea\u30ac\u30fc\u304c\u5b9f\u884c\u3055\u308c\u305f\u3068\u304d\u3001productionEnvironment\u3068standbyProductionEnvironments\u306fLagoon API\u5185\u3067\u5207\u308a\u66ff\u308f\u308a\u307e\u3059\u3002\u4e21\u65b9\u306e\u74b0\u5883\u306f\u307e\u3060production\u74b0\u5883\u30bf\u30a4\u30d7\u3068\u3057\u3066\u5206\u985e\u3055\u308c\u3066\u3044\u307e\u3059\u3002productionEnvironment\u306f\u3069\u3061\u3089\u304cactive\u3068\u30e9\u30d9\u30eb\u4ed8\u3051\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002\u74b0\u5883\u30bf\u30a4\u30d7\u306e\u9055\u3044\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u3001environment types\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002

            GraphQL\u3092\u4f7f\u3063\u3066\u74b0\u5883\u3092\u53d6\u5f97\u3059\u308b
            query projectByName {\nprojectByName(name:\"drupal-example\"){\nproductionEnvironment\nstandbyProductionEnvironment\n}\n}\n

            \u74b0\u5883\u3092\u5207\u308a\u66ff\u3048\u308b\u524d

            \u74b0\u5883\u30af\u30a8\u30ea\u306e\u7d50\u679c
            {\n\"data\": {\n\"projectByName\": {\n\"productionEnvironment\": \"production-brancha\",\n\"standbyProductionEnvironment\": \"production-branchb\"\n}\n}\n}\n

            \u74b0\u5883\u3092\u5207\u308a\u66ff\u3048\u305f\u5f8c

            \u74b0\u5883\u30af\u30a8\u30ea\u306e\u7d50\u679c
            {\n\"data\": {\n\"projectByName\": {\n\"productionEnvironment\": \"production-branchb\",\n\"standbyProductionEnvironment\": \"production-brancha\"\n}\n}\n}\n
            "},{"location":"ja/using-lagoon-advanced/blackfire/","title":"\u30d6\u30e9\u30c3\u30af\u30d5\u30a1\u30a4\u30a2","text":""},{"location":"ja/using-lagoon-advanced/blackfire/#blackfire","title":"Blackfire\u306e\u5909\u6570","text":"

            Lagoon Base Images\u306b\u306f\u3001PHP Images\u306bBlackfire\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002(PHP images\u3092\u53c2\u7167)

            Lagoon\u3067Blackfire\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e3\u3064\u306e\u74b0\u5883\u5909\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            \u74b0\u5883\u5909\u6570 \u30c7\u30d5\u30a9\u30eb\u30c8 \u8aac\u660e BLACKFIRE_ENABLED (\u8a2d\u5b9a\u306a\u3057) TRUE\u307e\u305f\u306ftrue\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067blackfire\u62e1\u5f35\u3092\u6709\u52b9\u306b\u3059\u308b\u3002 BLACKFIRE_SERVER_ID (\u8a2d\u5b9a\u306a\u3057) Blackfire.io\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308bBlackfire Server ID\u306b\u8a2d\u5b9a\u3059\u308b\u3002BLACKFIRE_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002 BLACKFIRE_SERVER_TOKEN (\u8a2d\u5b9a\u306a\u3057) Blackfire.io\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308bBlackfire Server Token\u306b\u8a2d\u5b9a\u3059\u308b\u3002BLACKFIRE_ENABLED\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002"},{"location":"ja/using-lagoon-advanced/blackfire/#blackfire_1","title":"Blackfire\u306e\u30ed\u30fc\u30ab\u30eb\u4f7f\u7528","text":"

            Lagoon Images\u3067Blackfire\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u4e0a\u8a18\u306e\u74b0\u5883\u5909\u6570\u3092PHP\u30b3\u30f3\u30c6\u30ca\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306fDrupal\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f8b\u3067\u3059\u3002

            docker-compose.yml
            services:\n[[snip]]\nphp:\n[[snip]]\nenvironment:\n<< : *default-environment # \u5b9a\u7fa9\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u3092\u4e0a\u304b\u3089\u8aad\u307f\u8fbc\u3080\nBLACKFIRE_ENABLED: TRUE\nBLACKFIRE_SERVER_ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\nBLACKFIRE_SERVER_TOKEN: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n

            \u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3057\u305f\u5f8c\u3001Blackfire\u30d6\u30e9\u30a6\u30b6\u30d7\u30e9\u30b0\u30a4\u30f3\u307e\u305f\u306fBlackfire CLI\u3092\u901a\u3058\u3066\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/blackfire/#blackfire_2","title":"Blackfire\u306e\u30ea\u30e2\u30fc\u30c8\u4f7f\u7528","text":"

            \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305fLagoon\u74b0\u5883\u3067Blackfire\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u540c\u3058\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u6642\u3001Lagoon\u306b\u74b0\u5883\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u65b9\u6cd5\u3067\u8a2d\u5b9a\u3057\u307e\u3059\u3002

            \u91cd\u8981

            \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u7528\u306bdocker-compose.yml\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u306fLagoon\u306e\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\uff01

            "},{"location":"ja/using-lagoon-advanced/blackfire/#_2","title":"\u30c7\u30d0\u30c3\u30b0","text":"

            PHP\u30b3\u30f3\u30c6\u30ca\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308bBlackfire\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306f\u3001\u901a\u5e38\u306e\u30b3\u30f3\u30c6\u30ca\u30ed\u30b0\u3068\u3057\u3066\u30ed\u30b0\u3092\u51fa\u529b\u3057\u307e\u3059\u3002\u3053\u308c\u306fdocker-compose logs\u307e\u305f\u306f\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u306eLagoon Logging Infrastructure\u3092\u901a\u3058\u3066\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u30ed\u30b0\u306f\u30ec\u30d9\u30eb3(\u60c5\u5831)\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u74b0\u5883\u5909\u6570BLACKFIRE_LOG_LEVEL\u3092\u4f7f\u3063\u3066\u30ec\u30d9\u30eb\u30924(\u30c7\u30d0\u30c3\u30b0)\u306b\u4e0a\u3052\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u591a\u304f\u306e\u60c5\u5831\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/","title":"\u30ab\u30b9\u30bf\u30e0\u30bf\u30b9\u30af","text":"

            Lagoon\u3067\u306f\u3001\u74b0\u5883\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30b0\u30eb\u30fc\u30d7\u30ec\u30d9\u30eb\u3067\u30ab\u30b9\u30bf\u30e0\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u73fe\u5728\u3001\u3053\u308c\u306fGraphQL API\u3092\u901a\u3058\u3066\u884c\u308f\u308c\u3001UI\u3067\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_2","title":"\u30ab\u30b9\u30bf\u30e0\u30bf\u30b9\u30af\u306e\u5b9a\u7fa9","text":"

            \u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u969b\u306b\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u3053\u3068\u3092\u6c7a\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_3","title":"\u3069\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3057\u307e\u3059\u304b\uff1f","text":"

            \u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001\u5b9f\u884c\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u30bf\u30b9\u30af\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30f3\u30c6\u30ca\u306e\u4e00\u3064\u3067\u30b7\u30a7\u30eb\u304b\u3089\u5b9f\u884c\u3055\u308c\u308b\u3082\u306e\u3067\u3059\u3002

            \u4f8b\u3048\u3070\u3001Node.js\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001node\u30b3\u30f3\u30c6\u30ca\u3067yarn audit\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306b\u8208\u5473\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u306e\u5834\u5408\u30b3\u30de\u30f3\u30c9\u306f\u5358\u7d14\u306byarn audit\u3068\u306a\u308a\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_4","title":"\u3053\u306e\u30bf\u30b9\u30af\u306f\u3069\u3053\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u304b\uff1f","text":"

            \u3053\u306e\u30bf\u30b9\u30af\u304c\u3069\u3053\u3067\u5b9f\u884c\u3055\u308c\u308b\u304b\u3092\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u4e8c\u3064\u306e\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u307e\u305a\u3001\u3069\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u74b0\u5883\u3067\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u304b\u3001\u305d\u3057\u3066\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u884c\u3046\u304b\u3067\u3059\u3002

            \u305f\u3068\u3048\u3070\u3001yarn audit\u30bf\u30b9\u30af\u3092\u7279\u5b9a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8(\u3053\u306e\u4f8b\u3067\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eID\u309242\u3068\u3057\u307e\u3057\u3087\u3046)\u306e\u4efb\u610f\u306e\u74b0\u5883\u3067\u5b9f\u884c\u53ef\u80fd\u306b\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u308b\u3068\u3057\u307e\u3057\u3087\u3046\u3002\u30bf\u30b9\u30af\u5b9a\u7fa9\u3092\u4f5c\u6210\u3059\u308b\u969b\u306b\u306f\u3001\u4e0b\u8a18\u3067\u8aac\u660e\u3059\u308b\u3088\u3046\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eID\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

            2\u3064\u76ee\u306e\u8cea\u554f\u306f\u3001\u3069\u306e\u74b0\u5883\u3092\u30bf\u30b9\u30af\u306e\u5bfe\u8c61\u3068\u3059\u308b\u304b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u969b\u306bdocker-compose.yml\u3067\u3044\u304f\u3064\u304b\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u540d\u3092\u4f7f\u7528\u3057\u3066\u30b3\u30de\u30f3\u30c9\u304c\u5b9f\u969b\u306b\u3069\u3053\u3067\u5b9f\u884c\u3055\u308c\u308b\u304b\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_5","title":"\u3053\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3067\u304d\u308b\u306e\u306f\u8ab0\u3067\u3059\u304b\uff1f","text":"

            \u30bf\u30b9\u30af\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ed\u30fc\u30eb\u306b\u5bfe\u5fdc\u3057\u305f3\u3064\u306e\u30ec\u30d9\u30eb\u304c\u3042\u308a\u307e\u3059\u3002\u30b2\u30b9\u30c8\u3001\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u3001\u30e1\u30f3\u30c6\u30ca\u30fc\u3067\u3059\u3002\u6700\u3082\u5236\u9650\u7684\u306a\u3082\u306e\u304b\u3089\u6700\u3082\u5236\u9650\u306e\u5c11\u306a\u3044\u3082\u306e\u307e\u3067\u3001\u5404\u30ed\u30fc\u30eb\u306f\u305d\u308c\u3088\u308a\u4e0b\u306e\u30ed\u30fc\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30bf\u30b9\u30af\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059(\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u306f\u30b2\u30b9\u30c8\u306e\u30bf\u30b9\u30af\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u30e1\u30f3\u30c6\u30ca\u30fc\u306f\u3059\u3079\u3066\u306e\u30bf\u30b9\u30af\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059)\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_6","title":"\u30bf\u30b9\u30af\u306e\u5b9a\u7fa9","text":"

            \u30bf\u30b9\u30af\u306faddAdvancedTaskDefinition\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u3067\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u91cd\u8981\u306a\u3053\u3068\u306f\u3001\u3053\u308c\u306f\u5358\u306b\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u3060\u3051\u3067\u547c\u3073\u51fa\u3059\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u5358\u306b\u305d\u308c\u3092\u74b0\u5883\u3067\u5b9f\u884c\u53ef\u80fd\u306b\u3059\u308b\u3060\u3051\u3067\u3059\u3002

            \u6982\u5ff5\u7684\u306b\u306f\u547c\u3073\u51fa\u3057\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

            \u65b0\u3057\u3044\u30bf\u30b9\u30af\u3092\u5b9a\u7fa9\u3059\u308b
            mutation addAdvancedTask {\naddAdvancedTaskDefinition(input:{\nname: string,\nconfirmationText: string,\ntype: [COMMAND|IMAGE],\n[project|environment]: int,\ndescription: string,\nservice: string,\ncommand: string,\nadvancedTaskDefinitionArguments: [\n{\nname: \"ENVIROMENT_VARIABLE_NAME\",\ndisplayName: \"Friendly Name For Variable\",\ntype: [STRING | ENVIRONMENT_SOURCE_NAME | ENVIRONMENT_SOURCE_NAME_EXCLUDE_SELF]\n}\n]\n}) {\n... on AdvancedTaskDefinitionImage {\nid\nname\ndescription\nservice\nimage\nconfirmationText\nadvancedTaskDefinitionArguments {\ntype\nrange\nname\ndisplayName\n}\n...\n}\n... on AdvancedTaskDefinitionCommand {\nid\nname\ndescription\nservice\ncommand\nadvancedTaskDefinitionArguments {\ntype\nrange\nname\ndisplayName\n}\n...\n}\n}\n}\n

            \u30d5\u30a3\u30fc\u30eb\u30c9name\u3068description\u306f\u7c21\u5358\u3067\u3059\u3002\u3053\u308c\u3089\u306f\u4e3b\u306bUI\u3067\u4f7f\u7528\u3055\u308c\u308b\u30bf\u30b9\u30af\u306e\u540d\u524d\u3068\u8aac\u660e\u3067\u3059\u3002

            type\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u3064\u3044\u3066\u306f\u8aac\u660e\u304c\u5fc5\u8981\u3067\u3059\u3002\u73fe\u6642\u70b9\u3067\u306f\u3001\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u7ba1\u7406\u8005\u306e\u307f\u304cIMAGE\u30bf\u30a4\u30d7\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u65e2\u5b58\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u5bfe\u8c61\u306b\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u7279\u5b9a\u306e\u30bf\u30b9\u30af\u30a4\u30e1\u30fc\u30b8\u3092\u30bf\u30b9\u30af\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u307b\u3068\u3093\u3069\u306e\u30bf\u30b9\u30af\u306fCOMMAND\u30bf\u30a4\u30d7\u3067\u3059\u3002

            [project|environment]\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30bb\u30c3\u30c8\u306f\u3001\u30bf\u30b9\u30af\u3092project\u307e\u305f\u306fenvironment\u306b\u95a2\u9023\u4ed8\u3051\u308b(\u4f7f\u7528\u3059\u308b\u30ad\u30fc\u306b\u3088\u308a\u307e\u3059)\u3053\u3068\u3067\u3001\u305d\u306e\u5024\u304cid\u306b\u306a\u308a\u307e\u3059\u3002 \u79c1\u305f\u3061\u304cyarn audit\u306e\u305f\u3081\u306b\u8003\u3048\u3066\u3044\u308b\u30b1\u30fc\u30b9\u3067\u306f\u3001ID\u304c42\u306eproject\u3092\u5bfe\u8c61\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u660e\u793a\u3057\u307e\u3059\u3002

            \u79c1\u305f\u3061\u304c\u30bf\u30b9\u30af\u3067\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3057\u305f\u3044\u30b5\u30fc\u30d3\u30b9\u3092service\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u7f6e\u304d\u3001command\u306f\u79c1\u305f\u3061\u304c\u5b9f\u884c\u3057\u305f\u3044\u5b9f\u969b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_7","title":"\u30bf\u30b9\u30af\u306b\u6e21\u3055\u308c\u308b\u5f15\u6570","text":"

            Lagoon UI\u7d4c\u7531\u3067\u30bf\u30b9\u30af\u3092\u547c\u3073\u51fa\u3059\u30e6\u30fc\u30b6\u30fc\u306b\u67d4\u8edf\u6027\u3092\u4e0e\u3048\u308b\u305f\u3081\u306b\u3001\u30bf\u30b9\u30af\u5f15\u6570\u306e\u5b9a\u7fa9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5f15\u6570\u306f\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u307e\u305f\u306f\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u3001\u30bf\u30b9\u30af\u3092\u547c\u3073\u51fa\u3059\u305f\u3081\u306b\u5fc5\u8981\u3067\u3059\u3002

            \u4ee5\u4e0b\u306f\u30012\u3064\u306e\u5f15\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\u306e\u4f8b\u3067\u3059\u3002

            \u30bf\u30b9\u30af\u5f15\u6570\u306e\u5b9a\u7fa9
            advancedTaskDefinitionArguments: [\n{\nname: \"ENV_VAR_NAME_SOURCE\",\ndisplayName: \"Environment source\",\ntype: ENVIRONMENT_SOURCE_NAME\n},\n{\nname: \"ENV_VAR_NAME_STRING\",\ndisplayName: \"Echo value\",\ntype: STRING\n}\n]\n})\n

            \u3053\u306e\u30d5\u30e9\u30b0\u30e1\u30f3\u30c8\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u304c\u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u4e21\u65b9\u306e\u30bf\u30a4\u30d7\u306e\u5f15\u6570\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002 \u6700\u521d\u306eENV_VAR_NAME_SOURCE\u306fENVIRONMENT_SOURCE_NAME\u30bf\u30a4\u30d7\u306e\u4f8b\u3067\u3001UI\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u7570\u306a\u308b\u74b0\u5883\u306e\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u3092\u63d0\u793a\u3057\u307e\u3059\u3002\u30bf\u30b9\u30af\u304c\u8d77\u52d5\u3057\u305f\u74b0\u5883\u3067\u5b9f\u884c\u3055\u308c\u308b\u306e\u3092\u8a31\u53ef\u3057\u305f\u304f\u306a\u3044\u5834\u5408(\u4f8b\u3048\u3070\u3001\u4ed6\u306e\u74b0\u5883\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3044\u5834\u5408\u306a\u3069)\u306fENVIRONMENT_SOURCE_NAME_EXCLUDE_SELF\u3092\u4f7f\u7528\u3057\u3066\u74b0\u5883\u30ea\u30b9\u30c8\u3092\u5236\u9650\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u4e8c\u3064\u76ee\u306eENV_VAR_NAME_STRING\u306fSTRING\u578b\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u3092\u8a18\u5165\u3059\u308b\u3088\u3046\u306b\u4fc3\u3057\u307e\u3059\u3002

            \u30e6\u30fc\u30b6\u30fc\u304c\u9078\u629e\u3057\u305f\u5024\u306f\u3001\u30bf\u30b9\u30af\u304c\u5b9f\u884c\u3055\u308c\u305f\u3068\u304d\u306bCOMMAND\u578b\u306e\u30bf\u30b9\u30af\u3067\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_8","title":"\u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u30bf\u30b9\u30af","text":"

            \u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u30bf\u30b9\u30af\u3092\u767b\u9332\u3067\u304d\u308b\u306e\u306fLagoon\u306e\u7ba1\u7406\u8005\u306e\u307f\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u30bf\u30b9\u30af\u306f\u3059\u3079\u3066\u306e\u74b0\u5883\u3067\u8868\u793a\u3055\u308c\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u6301\u3064\u6a29\u9650\u306b\u3088\u3063\u3066\u5236\u9650\u3055\u308c\u307e\u3059\u3002

            \u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u30bf\u30b9\u30af\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u306f\u3001\u4ed6\u306e\u30bf\u30b9\u30af\u30bf\u30a4\u30d7\u3068\u307b\u307c\u540c\u3058\u3067\u3059\u304c\u30012\u3064\u306e\u4f8b\u5916\u304c\u3042\u308a\u307e\u3059\u3002

            \u307e\u305a\u3001addAdvancedTaskDefinition\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u4e2d\u3067systemWide: true\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002

            \u6b21\u306b\u3001groupName\u3001project\u3001environment\u3092\u6307\u5b9a\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u305f\u3081\u3001\u6307\u5b9a\u3059\u308b\u3068\u76ee\u7684\u3092\u9038\u8131\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_9","title":"\u78ba\u8a8d","text":"

            confirmationText\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308b\u3068\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u524d\u306b\u3001UI\u306b\u78ba\u8a8d\u30e2\u30fc\u30c0\u30eb\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_10","title":"\u30bf\u30b9\u30af\u306e\u547c\u3073\u51fa\u3057","text":"

            \u30bf\u30b9\u30af\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3068\u3001\u30bf\u30b9\u30af\u306fLagoon UI\u306e\u30bf\u30b9\u30af\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u306b\u8868\u793a\u3055\u308c\u308b\u306f\u305a\u3067\u3059\u3002

            \u307e\u305f\u3001invokeTask \u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066GraphQL api\u304b\u3089\u3082\u547c\u3073\u51fa\u3059\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

            \u30bf\u30b9\u30af\u306e\u547c\u3073\u51fa\u3057
            mutation invokeTask {\ninvokeRegisteredTask(advancedTaskDefinition: int, environment: int) {\nstatus\n}\n}\n

            invokeTask\u306f\u5e38\u306b\u7279\u5b9a\u306e\u74b0\u5883\u3067\u30bf\u30b9\u30af\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-advanced/custom-tasks/#_11","title":"\u4f8b","text":"

            \u3067\u306f\u3001yarn audit\u306e\u4f8b\u3092\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002

            \u30bf\u30b9\u30af\u5b9a\u7fa9\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3
            mutation runYarnAudit {\naddAdvancedTaskDefinition(input:{\nname:\"Run yarn audit\",\nproject: 42,\ntype:COMMAND,\npermission:DEVELOPER,\ndescription: \"Runs a 'yarn audit'\",\nservice:\"node\",\ncommand: \"yarn audit\"})\n{\nid\n}\n}\n

            \u3053\u308c\u306b\u3088\u308a\u3001\u79c1\u305f\u3061\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8(42)\u306e\u30bf\u30b9\u30af\u304c\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30bf\u30b9\u30af\u5b9a\u7fa9\u306eID\u304c\u8fd4\u3055\u308c\u307e\u3059(\u4f8b\u3048\u3070\u30019\u3068\u3057\u307e\u3059)

            \u3053\u306e\u30bf\u30b9\u30af\u306f\u3001DEVELOPER\u307e\u305f\u306fMAINTAINER\u306e\u5f79\u5272\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u304cUI\u304b\u3089\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/deploytarget-configs/","title":"DeployTarget\u8a2d\u5b9a","text":"

            DeployTarget\u8a2d\u5b9a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u8907\u6570\u306e\u30af\u30e9\u30b9\u30bf\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u65b9\u6cd5\u3092\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306f\u3001\u672c\u756a\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5c02\u7528\u306e\u30af\u30e9\u30b9\u30bf\u3068\u3001\u958b\u767a\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u5225\u306e\u30af\u30e9\u30b9\u30bf\u304c\u3042\u308b\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002

            \u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306f\u3001\u5358\u306b\u672c\u756a/\u958b\u767a\u306e\u5206\u5272\u306b\u9650\u5b9a\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u306a\u3044\u305f\u3081\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u30bf\u3092\u8907\u6570\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3067\u304d\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

            DeployTarget\u8a2d\u5b9a\u306e\u57fa\u672c\u7684\u306a\u8003\u3048\u65b9\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u8907\u6570\u306e\u30af\u30e9\u30b9\u30bf\u9593\u3067\u3069\u306e\u3088\u3046\u306b\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u308b\u304b\u3092\u7c21\u5358\u306b\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u3067\u3042\u308a\u3001\u74b0\u5883\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3059\u308b\u65e2\u5b58\u306e\u65b9\u6cd5\u3092\u5229\u7528\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/deploytarget-configs/#_1","title":"\u91cd\u8981\u306a\u60c5\u5831","text":"

            DeployTarget\u8a2d\u5b9a\u3092\u5229\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3059\u308b\u524d\u306b\u3001\u77e5\u3063\u3066\u304a\u304f\u3079\u304d\u3053\u3068\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059\u3002

            1. \u74b0\u5883\u306b\u306f\u3069\u306eDeployTarget(Kubernetes\u307e\u305f\u306fOpenShift)\u3067\u4f5c\u6210\u3055\u308c\u305f\u304b\u3092\u8b58\u5225\u3059\u308b\u305f\u3081\u306e\u65b0\u305f\u306a2\u3064\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\u3002

              1. kubernetesNamespacePattern
              2. kubernetes
            2. \u7279\u5b9a\u306eDeployTarget\u306b\u4e00\u5ea6\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u74b0\u5883\u306f\u3001DeployTarget\u8a2d\u5b9a\u3084\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u3066\u3082\u3001\u5e38\u306b\u3053\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002

              1. \u3053\u308c\u306b\u3088\u308aDeployTarget\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u3066\u3082\u3001\u7570\u306a\u308b\u30af\u30e9\u30b9\u30bf\u3067\u65b0\u3057\u3044\u74b0\u5883\u304c\u4f5c\u6210\u3055\u308c\u308b\u3053\u3068\u304c\u306a\u304f\u306a\u308a\u3001\u65e2\u5b58\u306e\u74b0\u5883\u306b\u5bfe\u3057\u3066\u4e00\u5b9a\u306e\u5b89\u5168\u6027\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002
              2. \u3053\u308c\u306fLagoon\u306e\u65b0\u6a5f\u80fd\u3067\u3042\u308a\u3001DeployTarget\u8a2d\u5b9a\u306b\u7279\u5316\u3055\u308c\u305f\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
            3. \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bDeployTarget\u306e\u8a2d\u5b9a\u304c\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u305d\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u65e2\u5b58\u306e\u65b9\u6cd5\u3092\u4f7f\u7528\u3057\u3066\u3069\u306e\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u304b\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u4ee5\u4e0b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

              1. branches
              2. pullrequests
              3. kubernetesNamespacePattern
              4. kubernetes
            4. DeployTarget\u306e\u8a2d\u5b9a\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u308b\u3068\u3001\u4eca\u5f8c\u3059\u3079\u3066\u306e\u30c7\u30d7\u30ed\u30a4\u306f\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u306f\u7121\u8996\u3055\u308c\u3001DeployTarget\u306e\u8a2d\u5b9a\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u901a\u77e5\u3059\u308b\u305f\u3081\u306b\u4e0a\u66f8\u304d\u3055\u308c\u307e\u3059\u3002

            5. DeployTarget\u306e\u8a2d\u5b9a\u306f\u91cd\u307f\u4ed8\u3051\u3055\u308c\u3066\u304a\u308a\u3001\u3053\u308c\u306f\u5927\u304d\u3044\u91cd\u307f\u306eDeployTarget\u8a2d\u5b9a\u304c\u5c0f\u3055\u3044\u91cd\u307f\u306e\u3082\u306e\u3088\u308a\u512a\u5148\u3055\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

              1. \u30af\u30a8\u30ea\u3067\u8fd4\u3055\u308c\u308b\u9806\u5e8f\u304c\u3001\u74b0\u5883\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3079\u304d\u5834\u6240\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u9806\u5e8f\u3067\u3059\u3002
            6. Active/Standby\u74b0\u5883\u306f\u3001\u540c\u3058\u30af\u30e9\u30b9\u30bf\u306a\u306e\u3067\u3001DeployTarget\u8a2d\u5b9a\u306f\u305d\u308c\u3089\u306e\u74b0\u5883\u3092\u540c\u3058\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            7. Lagoon\u306epromote\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u3001DeployTarget\u8a2d\u5b9a\u304cdestination\u74b0\u5883\u3067\u306f\u7121\u8996\u3055\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

              1. \u30c7\u30a3\u30b9\u30c6\u30a3\u30cd\u30fc\u30b7\u30e7\u30f3\u74b0\u5883\u306f\u5e38\u306bsource\u74b0\u5883\u304c\u3042\u308b\u540c\u3058\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u306e\u3067\u3001DeployTarget\u8a2d\u5b9a\u306f\u3053\u306esource\u74b0\u5883\u306b\u5bfe\u3057\u3066\u6b63\u3057\u304f\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
              2. \u5b89\u5168\u306e\u305f\u3081\u3001source\u3068destination\u306e\u74b0\u5883\u3092\u540c\u3058DeployTarget\u8a2d\u5b9a\u306e\u30d6\u30e9\u30f3\u30c1\u6b63\u898f\u8868\u73fe\u3067\u5b9a\u7fa9\u3059\u308b\u306e\u304c\u30d9\u30b9\u30c8\u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/deploytarget-configs/#_2","title":"\u8a2d\u5b9a","text":"

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067DeployTarget\u8a2d\u5b9a\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u69cb\u6210\u3059\u308b\u306b\u306f\u3001\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

            \u4ee5\u4e0b\u306eGraphQL\u306e\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u7279\u5b9a\u306e\u4f8b\u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8ID 1\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bDeployTarget\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002 \u3053\u308c\u306b\u3088\u308a\u3001\u540d\u524d\u304cmain\u3068\u4e00\u81f4\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u306e\u307f\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u3001pullrequests\u306ffalse\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002 \u3053\u308c\u306f\u3001\u4ed6\u306e\u30d6\u30e9\u30f3\u30c1\u304c\u3053\u306e\u7279\u5b9a\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u305a\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3082\u3053\u306e\u7279\u5b9a\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002 deployTarget\u306fID 1\u3067\u3001\u3053\u308c\u306fKubernetes\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 \u7279\u5b9a\u306e\u5730\u57df\u3084\u7279\u5b9a\u306e\u7a2e\u985e\u306e\u30ef\u30fc\u30af\u30ed\u30fc\u30c9(\u88fd\u54c1\u7248\u307e\u305f\u306f\u958b\u767a\u7248)\u5411\u3051\u306b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002

            DeployTarget\u306e\u8a2d\u5b9a
            mutation addDeployTargetConfig{\naddDeployTargetConfig(input:{\nproject: 1\nbranches: \"main\"\npullrequests: \"false\"\ndeployTarget: 1\nweight: 1\n}){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n

            \u60c5\u5831

            deployTarget\u306fLagoon API\u5185\u306eKubernetes\u307e\u305f\u306fOpenShift ID\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u3067\u3059

            \u307e\u305f\u3001\u8907\u6570\u306eDeployTarget\u8a2d\u5b9a\u3092\u69cb\u6210\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002

            \u4ee5\u4e0b\u306eGraphQL\u30df\u30e5\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u4f8b\u3067\u306f\u3001\u4e0a\u8a18\u3068\u540c\u3058\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bDeployTarget\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

            \u3053\u308c\u306b\u3088\u308a\u3001^feature/|^(dev|test|develop)$ \u3068\u6b63\u898f\u8868\u73fe\u304c\u30de\u30c3\u30c1\u3059\u308b\u30d6\u30e9\u30f3\u30c1\u306e\u307f\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002\u305d\u3057\u3066\u3001pullrequests \u306f true \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3059\u3079\u3066\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u3053\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5230\u9054\u3057\u307e\u3059\u3002

            \u3053\u306e\u4f8b\u3067\u306f\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u3068\u306a\u308b\u30af\u30e9\u30b9\u30bf\u306fID2\u3067\u3001main\u30d6\u30e9\u30f3\u30c1\u4e0a\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u3082\u306e\u3068\u306f\u5168\u304f\u7570\u306a\u308bKubernetes\u30af\u30e9\u30b9\u30bf\u3067\u3059\u3002

            DeployTarget\u306e\u8a2d\u5b9a
            mutation addDeployTargetConfig{\naddDeployTargetConfig(input:{\nproject: 1\nbranches: \"^feature/|^(dev|test|develop)$\"\npullrequests: \"true\"\ndeployTarget: 2\nweight: 1\n}){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n

            \u3053\u308c\u3089\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u3059\u3079\u3066\u306eDeployTarget\u8a2d\u5b9a\u3092\u8fd4\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            \u30c7\u30d7\u30ed\u30a4\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u53d6\u5f97\u3059\u308b
            query deployTargetConfigsByProjectId{\ndeployTargetConfigsByProjectId(project:1){\nid\nweight\nbranches\npullrequests\ndeployTargetProjectPattern\ndeployTarget{\nname\nid\n}\nproject{\nname\n}\n}\n}\n# result:\n{\n\"data\": {\n\"deployTargetConfigsByProjectId\": [\n{\n\"id\": 1,\n\"weight\": 1,\n\"branches\": \"main\",\n\"pullrequests\": \"false\",\n\"deployTargetProjectPattern\": null,\n\"deployTarget\": {\n\"name\": \"production-cluster\",\n\"id\": 1\n},\n\"project\": {\n\"name\": \"my-project\"\n}\n},\n{\n\"id\": 2,\n\"weight\": 1,\n\"branches\": \"^feature/|^(dev|test|develop)$\",\n\"pullrequests\": \"true\",\n\"deployTargetProjectPattern\": null,\n\"deployTarget\": {\n\"name\": \"development-cluster\",\n\"id\": 2\n},\n\"project\": {\n\"name\": \"my-project\"\n}\n}\n]\n}\n}\n
            "},{"location":"ja/using-lagoon-advanced/nodejs/","title":"Node.js\u306e\u30b0\u30ec\u30fc\u30b9\u30d5\u30eb\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3","text":"

            Node.js\u306b\u306f\u7d71\u5408\u3055\u308c\u305fWeb\u30b5\u30fc\u30d0\u30fc\u306e\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002\u3055\u3089\u306bExpress\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u62e1\u5f35\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            \u6b8b\u5ff5\u306a\u304c\u3089\u3001Node.js\u306f\u81ea\u8eab\u306e\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3092\u3046\u307e\u304f\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30b7\u30b9\u30c6\u30e0\u3067\u591a\u304f\u306e\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3057\u307e\u3059\u3002\u6700\u5927\u306e\u554f\u984c\u306f\u3001Node.js\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3059\u308b\u3088\u3046\u306b\u6307\u793a\u3055\u308c\u308b\u3068\u3001\u3059\u3079\u3066\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u63a5\u7d9a\u3092\u5373\u5ea7\u306b\u3092\u5f37\u5236\u7d42\u4e86\u3057\u9069\u5207\u306b\u505c\u6b62\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u3053\u3068\u3067\u3059\u3002

            \u3053\u306e\u30d1\u30fc\u30c8\u3067\u306f\u3001\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3057\u7d42\u3048\u3066\u304b\u3089\u3001\u9069\u5207\u306b\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3059\u308b\u3088\u3046\u306bNode.js\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

            \u4f8b\u3068\u3057\u3066\u3001Express\u3092\u4f7f\u7528\u3057\u305f\u30b7\u30f3\u30d7\u30eb\u306aNode.js\u30b5\u30fc\u30d0\u30fc\u3092\u4f7f\u7528\u3057\u307e\u3059:

            app.js
            const express = require('express');\nconst app = express();\n// \u5168\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b5\u79d2\u306e\u30c7\u30a3\u30ec\u30a4\u3092\u8ffd\u52a0\u3002\napp.use((req, res, next) => setTimeout(next, 5000));\napp.get('/', function (req, res) {\nres.send(\"Hello World\");\n})\nconst server = app.listen(3000, function () {\nconsole.log('Example app listening on port 3000!');\n})\n

            \u3053\u308c\u306f\u3001Web\u30b5\u30fc\u30d0\u30fc\u304c localhost:3000 \u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u305f\u3068\u304d\u306b \"Hello World\" \u3092\u8868\u793a\u3057\u307e\u3059\u3002\u8a08\u7b97\u51e6\u7406\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3059\u308b\u305f\u3081\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u306b5\u79d2\u306e\u9045\u5ef6\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-advanced/nodejs/#a","title":"\u30d1\u30fc\u30c8A: \u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5b8c\u4e86\u3092\u8a31\u53ef\u3059\u308b","text":"

            \u4e0a\u8a18\u306e\u4f8b\u3092\u5b9f\u884c\u3057\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u51e6\u7406\u3055\u308c\u3066\u3044\u308b\u9593(5\u79d2\u4ee5\u5185)\u306bNode.js\u30d7\u30ed\u30bb\u30b9\u3092\u505c\u6b62\u3059\u308b\u3068\u3001Node.js\u30b5\u30fc\u30d0\u30fc\u306f\u3059\u3050\u306b\u63a5\u7d9a\u3092\u5207\u65ad\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306f\u30a8\u30e9\u30fc\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002

            Node.js\u30b5\u30fc\u30d0\u30fc\u306b\u3001\u5b9f\u969b\u306b\u81ea\u8eab\u3092\u505c\u6b62\u3059\u308b\u524d\u306b\u3059\u3079\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064\u3079\u304d\u3060\u3068\u4f1d\u3048\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059:

            Graceful Shutdown
            const startGracefulShutdown = () => {\nconsole.log('Starting shutdown of express...');\nserver.close(function () {\nconsole.log('Express shut down.');\n});\n}\nprocess.on('SIGTERM', startGracefulShutdown);\nprocess.on('SIGINT', startGracefulShutdown);\n

            \u3053\u308c\u306f\u57fa\u672c\u7684\u306b server.close() \u3092\u547c\u3073\u51fa\u3057\u3001\u3053\u308c\u306b\u3088\u308aNode.js HTTP\u30b5\u30fc\u30d0\u30fc\u306b\u5bfe\u3057\u3066\u4ee5\u4e0b\u306e\u6307\u793a\u304c\u51fa\u3055\u308c\u307e\u3059:

            1. \u3053\u308c\u4ee5\u4e0a\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u4ed8\u3051\u306a\u3044\u3002
            2. \u3059\u3079\u3066\u306e\u5b9f\u884c\u4e2d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u5b8c\u4e86\u3059\u308b\u3002

            \u3053\u308c\u306f SIGINT ( CTRL + C \u3092\u62bc\u3057\u305f\u3068\u304d)\u307e\u305f\u306f SIGTERM (\u30d7\u30ed\u30bb\u30b9\u3092\u7d42\u4e86\u3059\u308b\u305f\u3081\u306e\u6a19\u6e96\u4fe1\u53f7)\u3067\u884c\u3044\u307e\u3059\u3002

            \u3053\u306e\u5c0f\u3055\u306a\u8ffd\u52a0\u306b\u3088\u308a\u3001Node.js\u306f\u3059\u3079\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b8c\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064\u3088\u3046\u306b\u306a\u308a\u3001\u305d\u306e\u5f8c\u81ea\u8eab\u3092\u505c\u6b62\u3057\u307e\u3059\u3002

            \u3082\u3057\u79c1\u305f\u3061\u304cNode.js\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u74b0\u5883\u3067\u5b9f\u884c\u3057\u3066\u3044\u306a\u3044\u306a\u3089\u3070\u3001\u304a\u305d\u3089\u304f \u6570\u79d2\u5f8c\u306b\u5b9f\u969b\u306bNode.js\u30b5\u30fc\u30d0\u30fc\u3092\u7d42\u4e86\u3059\u308b\u8ffd\u52a0\u306e\u30b3\u30fc\u30c9\u3092\u542b\u3081\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u4e00\u90e8\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u975e\u5e38\u306b\u9577\u304f\u304b\u304b\u308b\u304b\u3001\u3042\u308b\u3044\u306f\u5168\u304f\u505c\u6b62\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u304b\u3089\u3067\u3059\u3002\u3053\u308c\u306f\u30b3\u30f3\u30c6\u30ca\u5316\u3055\u308c\u305f\u30b7\u30b9\u30c6\u30e0\u5185\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30b3\u30f3\u30c6\u30ca\u304c\u505c\u6b62\u3057\u306a\u3044\u5834\u5408\u3001Docker\u3068Kubernetes\u306f\u6570\u79d2\u5f8c(\u901a\u5e38\u306f30\u79d2\u5f8c)\u306bSIGKILL\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30d7\u30ed\u30bb\u30b9\u81ea\u4f53\u3067\u306f\u51e6\u7406\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u79c1\u305f\u3061\u306f\u6c17\u306b\u3059\u308b\u5fc5\u7528\u304c\u3042\u308a\u307e\u305b\u3093\u3002

            "},{"location":"ja/using-lagoon-advanced/nodejs/#byarnnpm","title":"\u30d1\u30fc\u30c8B:Yarn\u3068NPM\u306e\u5b50\u751f\u6210\u554f\u984c","text":"

            \u3082\u3057\u79c1\u305f\u3061\u304c\u30d1\u30fc\u30c8A\u3060\u3051\u3092\u5b9f\u88c5\u3057\u305f\u5834\u5408\u3001\u826f\u3044\u7d4c\u9a13\u3092\u5f97\u3089\u308c\u308b\u3067\u3057\u3087\u3046\u3002\u73fe\u5b9f\u306e\u4e16\u754c\u3067\u306f\u3001\u591a\u304f\u306eNode.js\u30b7\u30b9\u30c6\u30e0\u304cYarn\u3084NPM\u3067\u69cb\u7bc9\u3055\u308c\u3066\u304a\u308a\u3001\u3053\u308c\u3089\u306fNode.js\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3060\u3051\u3067\u306a\u304f\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u7ba1\u7406\u3082\u63d0\u4f9b\u3057\u307e\u3059\u3002

            \u3053\u308c\u3089\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u6a5f\u80fd\u3092\u4f7f\u3046\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5\u3092\u7c21\u5358\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u591a\u304f\u306epackage.json\u30d5\u30a1\u30a4\u30eb\u304c\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002

            package.json
            {\n\"name\": \"node\",\n\"version\": \"1.0.0\",\n\"main\": \"index.js\",\n\"license\": \"MIT\",\n\"dependencies\": {\n\"express\": \"^4.15.3\"\n},\n\"scripts\": {\n\"start\": \"node index.js\"\n}\n}\n

            \u305d\u3057\u3066\u3001\u5b9a\u7fa9\u3055\u308c\u305fscripts\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8d77\u52d5\u3059\u308b\u3060\u3051\u3067\u6e08\u307f\u307e\u3059:

            \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5
            yarn start\n

            \u307e\u305f\u306f

            \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5
            npm start\n

            \u3053\u308c\u306f\u4fbf\u5229\u3067\u3001\u958b\u767a\u8005\u3092\u697d\u306b\u3057\u307e\u3059\u3002\u3060\u304b\u3089\u3001\u79c1\u305f\u3061\u306fDockerfiles\u306e\u4e2d\u3067\u3082\u540c\u3058\u3082\u306e\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002

            .dockerfile
            CMD [\"yarn\", \"start\"]\n

            \u3057\u304b\u3057\u3001\u3053\u308c\u306b\u306f\u5927\u304d\u306a\u554f\u984c\u304c\u3042\u308a\u307e\u3059:

            yarn \u3084 npm \u304c SIGINT \u3084 SIGTERM \u30b7\u30b0\u30ca\u30eb\u3092\u53d7\u3051\u53d6\u308b\u3068\u3001\u305d\u308c\u3089\u306f\u6b63\u78ba\u306b\u30b7\u30b0\u30ca\u30eb\u3092\u751f\u6210\u3057\u305f\u5b50\u30d7\u30ed\u30bb\u30b9\u306b\u8ee2\u9001\u3057\u307e\u3059\u3002(\u3053\u306e\u5834\u5408\u306f node index.js)\u3057\u304b\u3057\u3001\u5b50\u30d7\u30ed\u30bb\u30b9\u304c\u505c\u6b62\u3059\u308b\u306e\u3092\u5f85\u3064\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001yarn/npm \u306f\u5373\u5ea7\u306b\u81ea\u5206\u81ea\u8eab\u3092\u505c\u6b62\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001Docker/Kubernetes\u306b\u5bfe\u3057\u3066\u30b3\u30f3\u30c6\u30ca\u304c\u5b8c\u4e86\u3057\u305f\u3068\u3044\u3046\u30b7\u30b0\u30ca\u30eb\u304c\u9001\u3089\u308c\u3001Docker/Kubernetes\u306f\u3059\u3050\u306b\u3059\u3079\u3066\u306e\u5b50\u30d7\u30ed\u30bb\u30b9\u3092\u5f37\u5236\u7d42\u4e86\u3057\u307e\u3059\u3002Yarn\u3068NPM\u306b\u306f\u30aa\u30fc\u30d7\u30f3\u306a\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u6b8b\u5ff5\u306a\u304c\u3089\u307e\u3060\u89e3\u6c7a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002

            \u3053\u306e\u554f\u984c\u306e\u89e3\u6c7a\u7b56\u306f\u3001Yarn\u3084NPM\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u76f4\u63a5 node \u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3059\u3002

            .dockerfile
            CMD [\"node\", \"index.js\"]\n

            \u3053\u308c\u306b\u3088\u308a\u3001Node.js\u306f\u9069\u5207\u306b\u7d42\u4e86\u3057\u3001Docker/Kubernetes\u306fNode.js\u304c\u7d42\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/private-repositories/","title":"\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea","text":"
            1. \u30c7\u30d7\u30ed\u30a4\u30ad\u30fc\u306b\u3001\u3042\u306a\u305f\u306eGitHub/GitLab/BitBucket\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u4e0e\u3048\u307e\u3059\u3002
            2. dockerfile\u306bARG LAGOON_SSH_PRIVATE_KEY\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002(SSH\u30ad\u30fc\u304c\u5fc5\u8981\u306a\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306e\u30b9\u30c6\u30c3\u30d7\u306e\u524d\u306b)
            3. dockerfile\u306bRUN /lagoon/entrypoints/05-ssh-key.sh\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002(SSH\u30ad\u30fc\u304c\u5fc5\u8981\u306a\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306e\u30b9\u30c6\u30c3\u30d7\u306e\u524d\u306b)
            \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8a2d\u5b9a
            RUN /lagoon/entrypoints/05-ssh-key.sh && composer install && rm /home/.ssh/key\n
            "},{"location":"ja/using-lagoon-advanced/project-default-users-keys/","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u3068SSH\u30ad\u30fc","text":"

            Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u4f5c\u6210\u3055\u308c\u308b\u3068\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u95a2\u9023\u3059\u308bSSH \"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ad\u30fc\"\u304c\u751f\u6210\u3055\u308c\u3001\u305d\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u304c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eCLI\u30dd\u30c3\u30c9\u5185\u3067\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8default-user@project\u3082\u4f5c\u6210\u3055\u308c\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306eMAINTAINER\u30a2\u30af\u30bb\u30b9\u304c\u4ed8\u4e0e\u3055\u308c\u307e\u3059\u3002SSH \"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ad\u30fc\"\u306f\u3001\u305d\u306edefault-user@project\u306b\u6dfb\u4ed8\u3055\u308c\u307e\u3059\u3002

            \u3053\u308c\u306b\u3088\u308a\u3001\u4efb\u610f\u306e\u74b0\u5883\u306eCLI\u30dd\u30c3\u30c9\u5185\u304b\u3089\u540c\u3058\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u4ed6\u306e\u4efb\u610f\u306e\u74b0\u5883\u306bSSH\u3067\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u30a2\u30af\u30bb\u30b9\u306f\u3001\u74b0\u5883\u9593\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u540c\u671f\u5316\u3059\u308b\u306a\u3069\u3001\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002(\u4f8b:drush sql-sync)

            MAINTAINER\u30ed\u30fc\u30eb\u306b\u3064\u3044\u3066\u306e\u8a73\u3057\u3044\u60c5\u5831\u306f\u3001RBAC\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/project-default-users-keys/#_1","title":"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ad\u30fc\u306e\u6307\u5b9a","text":"

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u969b\u306bSSH\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u306f\u53ef\u80fd\u3067\u3059\u304c\u3001\u3053\u308c\u306b\u306f\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u554f\u984c\u304c\u3042\u308b\u305f\u3081\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u3002

            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/","title":"Lagoon\u3067\u306eXdebug\u306e\u8a2d\u5b9a","text":""},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#xdebug","title":"\u30b3\u30f3\u30c6\u30ca\u3067Xdebug\u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b","text":"

            Lagoon\u306e\u57fa\u672c\u30a4\u30e1\u30fc\u30b8\u306fXdebug\u304c\u8a2d\u5b9a\u6e08\u307f\u3067\u3059\u304c\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4e0a\u306e\u7406\u7531\u304b\u3089\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u62e1\u5f35\u6a5f\u80fd\u306f\u30ed\u30fc\u30c9\u3055\u308c\u307e\u305b\u3093\u3002\u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001XDEBUG_ENABLE\u74b0\u5883\u5909\u6570\u3092true\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

            • \u30ed\u30fc\u30ab\u30eb (Pygmy\u3068Lando)

              1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304clagoon-examples\u306edocker-compose.yml\u30d5\u30a1\u30a4\u30eb\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u74b0\u5883\u5909\u6570\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u884c\u3092\u30b3\u30e1\u30f3\u30c8\u89e3\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002
              2. \u74b0\u5883\u5909\u6570\u3092\u5909\u66f4\u3057\u305f\u5f8c\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u69cb\u7bc9\u3057\u3066\u518d\u8d77\u52d5\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - \u30ea\u30e2\u30fc\u30c8 (dev/prod)
              3. Lagoon API\u3092\u4f7f\u7528\u3057\u3066\u3001\u5b9f\u884c\u4e2d\u306e\u74b0\u5883\u306b\u74b0\u5883\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
              4. \u74b0\u5883\u5909\u6570\u3092\u5909\u66f4\u3057\u305f\u5f8c\u306f\u3001\u74b0\u5883\u3092\u518d\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#xdebug_1","title":"Xdebug\u62e1\u5f35\u6a5f\u80fd\u306e\u6709\u52b9\u5316","text":"

            \u30c7\u30d5\u30a9\u30eb\u30c8\u306eXdebug\u8a2d\u5b9a\u3067\u306f\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3059\u308b\u305f\u3081\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u6709\u52b9\u5316\u3059\u308b\"\u30c8\u30ea\u30ac\u30fc\"\u304c\u5fc5\u8981\u3067\u3059\u3002\uff08Xdebug\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\uff09 \u30c7\u30d0\u30c3\u30ac\u3092\u6709\u52b9\u5316\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u7c21\u5358\u306a\u624b\u9806\u3092\u53c2\u8003\u306b\u3057\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#cli","title":"CLI","text":"

            php-cli\u30a4\u30e1\u30fc\u30b8\u306fXdebug\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u3068\u304d\u306b\u306f\u5e38\u306bXdebug\u3092\u6709\u52b9\u5316\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u3057\u305f\u304c\u3063\u3066\u3001\u4ed6\u306b\u4f55\u3082\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4efb\u610f\u306ePHP\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3059\u308b\u3068\u30c7\u30d0\u30c3\u30b0\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u958b\u59cb\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#web","title":"Web","text":"

            Xdebug\u306e\u30d6\u30e9\u30a6\u30b6\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b \u3053\u3068\u3067\u3001\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u3092\u8a2d\u5b9a/\u89e3\u9664\u3057\u307e\u3059\u3002

            \u30c7\u30d0\u30c3\u30b0\u3092\u958b\u59cb\u3057\u305f\u3044\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#phpstorm","title":"PHPStorm\u306e\u8a2d\u5b9a","text":"
            1. PHPStorm\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
            2. \u30c4\u30fc\u30eb\u30d0\u30fc\u306e\u201cStart Listening for PHP Debug Connections\u201d\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
            3. \u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3092\u8aad\u307f\u8fbc\u3080\u304b\u3001Drush\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
            4. \u521d\u56de\u5b9f\u884c\u6642\u306b\u306f\u3001PHPStorm\u304c\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3057\u3001\u6b21\u306e\u64cd\u4f5c\u3092\u6c42\u3081\u307e\u3059\u3002
              1. \u30d1\u30b9\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
              2. \u30b5\u30fc\u30d0\u30fc\u4e0a\u3067\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u305f\u6b63\u3057\u3044\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#visual-studio-code","title":"Visual Studio Code\u306e\u8a2d\u5b9a","text":"
            1. Felix Becker\u306b\u3088\u308bPHP Debug\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
            2. \u8aac\u660e\u306b\u5f93\u3063\u3066PHP\u7528\u306e\u57fa\u672c\u7684\u306a launch.json\u4f5c\u6210\u3057\u307e\u3059\u3002
            3. \u6b63\u3057\u3044\u30d1\u30b9\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u5178\u578b\u7684\u306aDrupal\u30b5\u30a4\u30c8\u306e\u4f8b\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002

              launch.json
              \"pathMappings\": {\n\"/app\": \"${workspaceFolder}\",\n},\n
            4. Visual Studio Code\u306eRun\u30bf\u30d6\u3067\u3001 \u201cListen for Xdebug\u201d\u306e\u96a3\u306b\u3042\u308b\u7dd1\u8272\u306e\u77e2\u5370\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002

            5. Web\u30da\u30fc\u30b8\u3092\u30ed\u30fc\u30c9\u3059\u308b\u304b\u3001Drush\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#_1","title":"\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"
            • Xdebug\u62e1\u5f35\u304c\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002Drupal \u30b5\u30a4\u30c8\u3067\u3053\u308c\u3092\u884c\u3046\u6700\u5584\u306e\u65b9\u6cd5\u306f\u3001PHP\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u30da\u30fc\u30b8\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3067\u3059\u3002Xdebug\u3068\u305d\u306e\u3059\u3079\u3066\u306e\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u898b\u3064\u304b\u308b\u306f\u305a\u3067\u3059\u3002
            • \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
            \u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6 \u30ed\u30fc\u30ab\u30eb\u5024 xdebug.mode debug xdebug.client_host host.docker.internal \u307e\u305f\u306f \u3042\u306a\u305f\u306eIP\u30a2\u30c9\u30ec\u30b9 xdebug.client_port 9003
            • \u5b9f\u884c\u4e2d\u306e\u30b3\u30f3\u30c6\u30ca\u5185\u3067Xdebug\u306e\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306fXDEBUG_LOG\u3068\u3044\u3046\u540d\u524d\u306e\u74b0\u5883\u5909\u6570\u306b\u4f55\u3089\u304b\u306e\u5024\u3092\u8a2d\u5b9a\u3059\u308b\u3060\u3051\u3067\u3059\u3002 \u30ed\u30b0\u306f/tmp/xdebug.log\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u3082\u3057lagoon-examples\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u306a\u3089\u3001\u3042\u306a\u305f\u306f \u3044\u304f\u3064\u304b\u306e\u65e2\u5b58\u306e\u884c\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u5916\u3057\u307e\u3059\u3002
            • \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30b7\u30e7\u30f3\u30af\u30c3\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002Chrome\u307e\u305f\u306fFirefox\u306e\u30d6\u30e9\u30a6\u30b6\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3001XDEBUG_SESSION\u30af\u30c3\u30ad\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002
            • Xdebug\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u5316\u3055\u308c\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u3068\u306e\u30c7\u30d0\u30c3\u30b0\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002nc -l 9003 \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066Xdebug\u30dd\u30fc\u30c8\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3059\u3079\u3066\u304cPHP\u3067\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308c\u3070\u3001\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3092\u30ed\u30fc\u30c9\u3059\u308b\u304b\u3001Drush\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068Xdebug init\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5f97\u3089\u308c\u308b\u306f\u305a\u3067\u3059\u3002
            • xdebug.client_host\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002Docker for Mac\u3067\u306e\u30ed\u30fc\u30ab\u30eb\u30c7\u30d0\u30c3\u30b0\u306e\u5834\u5408\u3001\u3053\u306e\u5024\u306fhost.docker.internal\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002\u30ea\u30e2\u30fc\u30c8\u30c7\u30d0\u30c3\u30b0\u306e\u5834\u5408\u3001\u3053\u306e\u5024\u306f\u3042\u306a\u305f\u306eIP\u30a2\u30c9\u30ec\u30b9\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002\u3053\u306e\u5024\u304c\u6b63\u3057\u304f\u6c7a\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u3001DOCKERHOST\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u4e0a\u66f8\u304d\u3067\u304d\u307e\u3059\u3002
            • Lando\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001CLI\u304b\u3089\u5b9f\u884c\u3055\u308c\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u30c7\u30d0\u30c3\u30b0\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u307e\u305alando ssh\u3092\u4ecb\u3057\u3066CLI\u30b3\u30f3\u30c6\u30ca\u306bSSH\u3067\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002lando drush\u307e\u305f\u306flando php\u3092\u5b9f\u884c\u3057\u3066\u3082\u30c7\u30d0\u30c3\u30b0\u3067\u304d\u306a\u3044\u306e\u3067\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#mac","title":"Mac\u56fa\u6709\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"
            • Docker for Mac\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30ad\u30f3\u30b0\u304c\u58ca\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002 \u30db\u30b9\u30c8\u30de\u30b7\u30f3\u3067 nc -l 9003\u3092\u5b9f\u884c\u3057\u3001\u305d\u306e\u5f8c\u65b0\u3057\u3044\u30bf\u30fc\u30df\u30ca\u30eb\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u6b21\u306e\u3088\u3046\u306b\u5b9f\u884c\u3057\u307e\u3059\u3002

              Mac\u306eDocker\u30cd\u30c3\u30c8\u30ef\u30fc\u30ad\u30f3\u30b0\u3092\u78ba\u8a8d
              docker-compose run cli nc -zv host.docker.internal 9003\n

              \u6b21\u306e\u3088\u3046\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002 host.docker.internal (192.168.65.2:9003) open

            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#linux","title":"Linux \u7279\u6709\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0","text":"
            • \u30db\u30b9\u30c8host.docker.internal\u306b\u63a5\u7d9a\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002docker\u304c(Docker Desktop\u3092\u7d4c\u7531\u305b\u305a\u306b)\u624b\u52d5\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u30db\u30b9\u30c8\u306f\u89e3\u6c7a\u3055\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u3092\u5f37\u5236\u7684\u306b\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u306f\u3001docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u306e\u30b9\u30cb\u30da\u30c3\u30c8\u3092\u633f\u5165\u3059\u308b\u3053\u3068\u3067\u3001\u3053\u306e\u30db\u30b9\u30c8\u3092\u5f37\u5236\u7684\u306b\u89e3\u6c7a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002(\u624b\u9806\u306f\u3053\u306e\u30d6\u30ed\u30b0\u6295\u7a3f\u304b\u3089\u5f15\u7528\u3057\u3066\u3044\u307e\u3059)

              Linux\u5411\u3051\u306edocker-compose.yml\u306e\u4fee\u6b63
                services:\ncli:\nextra_hosts:\nhost.docker.internal: host-gateway\nphp:\nextra_hosts:\nhost.docker.internal: host-gateway\n
            "},{"location":"ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/#xdebug-2","title":"Xdebug 2","text":"

            \u53e4\u3044\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u307e\u3060Xdebug\u30d0\u30fc\u30b8\u30e7\u30f32\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u306e\u30da\u30fc\u30b8\u306e\u60c5\u5831\u306f\u3059\u3079\u3066\u305d\u306e\u307e\u307e\u9069\u7528\u3055\u308c\u307e\u3059\u304c\u3001\u8a2d\u5b9a\u540d\u3068\u5024\u306e\u4e00\u90e8\u306f\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u3059\u3002

            v3 v2 xdebug.mode xdebug.remote_enabled On xdebug.client_host xdebug.remote_host host.docker.internal \u307e\u305f\u306f\u3042\u306a\u305f\u306eIP\u30a2\u30c9\u30ec\u30b9 xdebug.client_port xdebug.remote_port 9000"},{"location":"ja/using-lagoon-advanced/simplesaml/#simplesamlphp","title":"SimpleSAMLphp","text":"

            \u3053\u308c\u306f\u3001SimpleSAMLphp\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3057\u3001\u305d\u308c\u3092NGINX\u7d4c\u7531\u3067\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u65b9\u6cd5\u306e\u4f8b\u3067\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/simplesaml/#_1","title":"\u5fc5\u8981\u6761\u4ef6","text":"

            SimpleSAMLphp\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3057\u307e\u3059:

            Composer\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bSimpleSAMLphp\u3092\u8ffd\u52a0\u3059\u308b
            composer req simplesamlphp/simplesamlphp\n
            "},{"location":"ja/using-lagoon-advanced/simplesaml/#simplesamlphp_1","title":"SimpleSAMLphp\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b","text":"

            vendor/simplesamlphp/simplesamlphp/config-templates\u304b\u3089authsources.php\u3068config.php\u3092vendor\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5916\u306econf/simplesamlphp\u306e\u3088\u3046\u306a\u5834\u6240\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002\u307e\u305f\u3001vendor/simplesamlphp/simplesamlphp/metadata-templates\u304b\u3089saml20-idp-remote.php\u3082\u5fc5\u8981\u3067\u3059\u3002

            config.php\u3067Lagoon\u306b\u4ee5\u4e0b\u306e\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059:

            SimpleSAMLphp\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u57fa\u672cURL\u30d1\u30b9:

            config.php
              'baseurlpath' => 'https://YOUR_DOMAIN.TLD/simplesaml/',\n

            \u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002

            config.php
              'store.type'                    => 'sql',\n  'store.sql.dsn'                 => vsprintf('mysql:host=%s;port=%s;dbname=%s', [\n    getenv('MARIADB_HOST'),\n    getenv('MARIADB_PORT'),\n    getenv('MARIADB_DATABASE'),\n  ]),\n

            \u4ed6\u306e\u8a2d\u5b9a\u306f\u304a\u597d\u307f\u3067\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            • \u30ed\u30b0\u3068\u8a3c\u660e\u66f8\u306e\u30d1\u30b9\u3092\u78ba\u8a8d\u3057\u307e\u3059
            • SimpleSAMLphp\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3092\u4fdd\u8b77\u3057\u307e\u3059
            • \u30ed\u30ae\u30f3\u30b0\u306e\u30ec\u30d9\u30eb\u3092\u8a2d\u5b9a\u3057\u307e\u3059
            • technicalcontact\u3068timezone\u3092\u8a2d\u5b9a\u3057\u307e\u3059

            \u4f8b\u3092\u53c2\u8003\u306bauthsources.php\u306bauthsources(IdPs)\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

            authsources.php
              'default-sp' => [\n    'saml:SP',\n    // The entity ID of this SP.\n    'entityID' => 'https://YOUR_DOMAIN.TLD',\n    // The entity ID of the IdP this should SP should contact.\n    // Can be NULL/unset, in which case the user will be shown a list of available IdPs.\n    'idp' => 'https://YOUR_IDP_DOMAIN.TLD',\n    // The URL to the discovery service.\n    // Can be NULL/unset, in which case a builtin discovery service will be used.\n    'discoURL' => null,\n    'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',\n    'certificate' => '/app/conf/simplesamlphp/certs/saml.crt',\n    'privatekey' => '/app/conf/simplesamlphp/certs/saml.pem',\n    'redirect.sign' => TRUE,\n    'redirect.validate' => TRUE,\n    'authproc' => [\n      50 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:1.3.6.1.4.1.5923.1.1.1.6' => 'eduPersonPrincipalName',\n      ],\n      51 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:2.5.4.42' => 'givenName',\n      ],\n      52 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:2.5.4.4' => 'sn',\n      ],\n      53 => [\n        'class' => 'core:AttributeCopy',\n        'urn:oid:0.9.2342.19200300.100.1.3' => 'mail',\n      ],\n    ],\n  ],\n

            \u4f8b\u3092\u53c2\u8003\u306bsaml20-idp-remote.php\u306bIdP\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

            saml20-idp-remote.php
            <?php\n/**\n * SAML 2.0 remote IdP metadata for SimpleSAMLphp.\n *\n * Remember to remove the IdPs you don't use from this file.\n *\n * See: https://simplesamlphp.org/docs/stable/simplesamlphp-reference-idp-remote\n */\n/**\n * Some IdP.\n */\n$metadata['https://YOUR_IDP_DOMAIN.TLD'] = [\n'entityid' => 'https://YOUR_IDP_DOMAIN.TLD',\n'name' => [\n'en' => 'Some IdP',\n],\n'description' => 'Some IdP',\n...\n];\n

            \u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u3067\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092SimpleSAMLphp\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059

            • vendor/simplesamlphp/simplesamlphp/config/authsources.php
            • vendor/simplesamlphp/simplesamlphp/config/config.php
            • vendor/simplesamlphp/simplesamlphp/metadata/saml20-idp-remote.php
            "},{"location":"ja/using-lagoon-advanced/simplesaml/#simplesamlphpnginx-conf","title":"SimpleSAMLphp\u306e\u305f\u3081\u306eNGINX conf\u3092\u4f5c\u6210\u3057\u307e\u3059","text":"

            lagoon/nginx/location_prepend_simplesamlphp.conf\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059:

            location_prepend_simplesamlphp.conf
            location ^~ /simplesaml {\nalias /app/vendor/simplesamlphp/simplesaml php/www;\nlocation ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\\.php)(?<pathinfo>/.*)?$ {\ninclude          fastcgi_params;\nfastcgi_pass     ${NGINX_FASTCGI_PASS:-php}:9000;\nfastcgi_param    SCRIPT_FILENAME $document_root$phpfile;\n# Must be prepended with the baseurlpath\nfastcgi_param    SCRIPT_NAME /simplesaml$phpfile;\nfastcgi_param    PATH_INFO $pathinfo if_not_empty;\n}\n}\n

            \u3053\u308c\u306b\u3088\u308a\u3001/simplesaml URL\u304cvendor\u306eSimpleSAMLphp\u306b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/simplesaml/#nginxnginx","title":"NGINX\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u306eNGINX\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3059\u308b","text":"

            nginx.dockerfile\u3092\u4fee\u6b63\u3057\u3001location_prepend_simplesamlphp.conf\u3092\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u3057\u307e\u3059:

            nginx.dockerfile
            ARG CLI_IMAGE\nFROM ${CLI_IMAGE} AS cli\n\nFROM uselagoon/nginx-drupal\n\nCOPY --from=cli /app /app\n\nCOPY lagoon/nginx/location_prepend_simplesamlphp.conf /etc/nginx/conf.d/drupal/location_prepend_simplesamlphp.conf\nRUN fix-permissions /etc/nginx/conf.d/drupal/location_prepend_simplesamlphp.conf\n\n# Define where the Drupal Root is located\nENV WEBROOT=public\n
            "},{"location":"ja/using-lagoon-advanced/triggering-deployments/","title":"\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u30c8\u30ea\u30ac\u30fc","text":""},{"location":"ja/using-lagoon-advanced/triggering-deployments/#azure-pipelines","title":"Azure Pipelines\u3092\u4f7f\u7528\u3057\u3066\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b","text":"

            Azure Pipelines\u3092\u4f7f\u7528\u3057\u3066\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u3092\u81ea\u52d5\u7684\u306b\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u3092\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002

            1. \u30c7\u30d7\u30ed\u30a4\u306eSSH\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ad\u30fc\u3092id_rsa_lagoon\u3068\u3057\u3066Azure\u306e\u30bb\u30ad\u30e5\u30a2\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u30bb\u30ad\u30e5\u30a2\u30d5\u30a1\u30a4\u30eb\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306fAzure\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002
            2. \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092azure-pipelines.yml\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002
            azure-pipelines.yml
            pool:\nvmImage: 'ubuntu-latest'\nstages:\n# .. \u4ed6\u306e\u30b9\u30c6\u30fc\u30b8\n- stage: Deploy\ncondition: and(succeeded(), in(variables['Build.SourceBranch'], 'refs/heads/staging', 'refs/heads/develop'))\njobs:\n- job: DeployLagoon\nsteps:\n- task: DownloadSecureFile@1\nname: lagoonSshKey\ndisplayName: 'Download Lagoon SSH key'\ninputs:\nsecureFile: id_rsa_lagoon\n- script: |\ncurl -L \"https://github.com/uselagoon/lagoon-cli/releases/download/v0.21.3/lagoon-cli-v0.21.3-linux-amd64\" -o ./lagoon\nchmod +x ./lagoon\ndisplayName: 'Download lagoon-cli'\n- script: ./lagoon login -i $(lagoonSshKey.secureFilePath)\ndisplayName: 'Log into Lagoon'\n- script: ./lagoon deploy branch -e $(Build.SourceBranchName) -p my-awesome-project -b $(Build.SourceBranchName) --force\ndisplayName: 'Trigger deployment using lagoon-cli'\n

            \u3053\u308c\u306b\u3088\u308a\u3001develop\u30d6\u30e9\u30f3\u30c1\u307e\u305f\u306fstaging\u30d6\u30e9\u30f3\u30c1\u3067\u5909\u66f4\u304c\u884c\u308f\u308c\u308b\u305f\u3073\u306b\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5024\u3092\u9069\u5207\u306b\u8abf\u6574\u3057\u3066\u3001\u30c7\u30d7\u30ed\u30a4\u6226\u7565\u3068\u8a2d\u5b9a\u306b\u9069\u5408\u3055\u305b\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-advanced/triggering-deployments/#_2","title":"\u30c7\u30d7\u30ed\u30a4\u305b\u305a\u306b\u30d7\u30c3\u30b7\u30e5","text":"

            \u30c7\u30d7\u30ed\u30a4\u305b\u305a\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u305f\u3044\u5834\u5408\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u30b3\u30df\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u306b \"[skip deploy]\" \u307e\u305f\u306f \"[deploy skip]\" \u3092\u542b\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u305d\u3046\u3059\u308b\u3068\u3001Lagoon\u306f\u305d\u306e\u30b3\u30df\u30c3\u30c8\u304b\u3089\u30c7\u30d7\u30ed\u30a4\u3092\u30c8\u30ea\u30ac\u30fc\u3057\u307e\u305b\u3093\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/","title":"\u30cf\u30fc\u30d0\u30fc","text":"

            Harbor\u306f\u3001Kubernetes\u30a4\u30f3\u30d5\u30e9\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u969b\u306eLagoon\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30ea\u30dd\u30b8\u30c8\u30ea\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002Harbor\u306fDocker\u30ec\u30b8\u30b9\u30c8\u30ea\u3068\u3001Trivy\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u308b\u30b3\u30f3\u30c6\u30ca\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30cb\u30f3\u30b0\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

            \u6ce8\u610f:

            Lagoon\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u3001Harbor\u306e\u8a2d\u5b9a\u306f\u3059\u3079\u3066\u81ea\u52d5\u7684\u306b\u51e6\u7406\u3055\u308c\u307e\u3059\u3002

            \u3082\u3057Lagoon\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u305d\u306eUI\u306blocalhost:8084\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u30e6\u30fc\u30b6\u540d\u306f admin\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u306f admin\u3067\u3059\u3002

            \u6ce8\u610f:

            \u30b5\u30a4\u30c8\u3092\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc(amazee.io\u306a\u3069)\u3067\u30db\u30b9\u30c8\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u308c\u3089\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306f\u9867\u5ba2\u304cHarbor UI\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

            \u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3068\u3001\u6700\u521d\u306e\u753b\u9762\u306b\u306f\u30e6\u30fc\u30b6\u30fc\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3059\u3079\u3066\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30ea\u30b9\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002Harbor\u5185\u306e\u5404\u300c\u30ea\u30dd\u30b8\u30c8\u30ea\u300d\u306fLagoon\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002

            \u5404Harbor\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306b\u306f\u30011\u3064\u306eLagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u6301\u3064\u3059\u3079\u3066\u306e\u74b0\u5883\u306e\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u30ea\u30b9\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002

            \u3053\u3053\u304b\u3089\u3001\u500b\u3005\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u6df1\u304f\u6398\u308a\u4e0b\u3052\u3066\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3\u7d50\u679c\u306e\u6982\u8981\u3092\u542b\u3080\u8a73\u7d30\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/security-scanning/","title":"\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3","text":"

            Harbor\u306b\u306f\u3001Trivy\u30b5\u30fc\u30d3\u30b9\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u308b\u7d44\u307f\u8fbc\u307f\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u304c\u642d\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u3092\u89e3\u6790\u3057\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u3092\u53ce\u96c6\u3057\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001Trivy\u30b5\u30fc\u30d3\u30b9\u306f\u56fd\u7acb\u8106\u5f31\u6027\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u691c\u7d22\u3057\u3001\u305d\u308c\u3089\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308bCVE(\u4e00\u822c\u7684\u306a\u8106\u5f31\u6027\u3068\u9732\u51fa)\u3092\u63a2\u3057\u307e\u3059\u3002Trivy\u306f\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u305f\u3081\u3001Composer\u30d5\u30a1\u30a4\u30eb\u3084\u305d\u306e\u4ed6\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30e9\u30a4\u30d6\u30e9\u30ea\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3001\u305d\u308c\u3089\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30d0\u30fc\u30b8\u30e7\u30f3\u5185\u306b\u898b\u3064\u304b\u3063\u305f\u8106\u5f31\u6027\u3092\u5831\u544a\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u8106\u5f31\u6027\u306f\u3001\u500b\u3005\u306e\u30b3\u30f3\u30c6\u30ca\u3054\u3068\u306bHarbor\u5185\u3067\u5831\u544a\u3055\u308c\u307e\u3059\u3002

            Harbor\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b9\u30ad\u30e3\u30f3\u306e\u4f8b\u3001\u30b9\u30ad\u30e3\u30f3\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ca\u306b\u9069\u7528\u53ef\u80fd\u306a\u8106\u5f31\u6027\u3092\u793a\u3057\u3066\u3044\u307e\u3059:

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/","title":"\u30ed\u30fc\u30ab\u30eb\u3067\u306eHarbor\u306e\u5b9f\u884c","text":"

            Lagoon\u306f\u3001Harbor\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001AWS S3\u3068\u4e92\u63db\u6027\u306e\u3042\u308b\u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3067\u3042\u308bMinIO\u3092\u30b9\u30c8\u30ec\u30fc\u30b8\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066\u5229\u7528\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/#_1","title":"\u8a2d\u5b9a","text":"

            Harbor\u306f\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u3067\u69cb\u6210\u3055\u308c\u3066\u304a\u308a\u3001\u305d\u308c\u305e\u308c\u304c\u6210\u529f\u88cf\u306b\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u306f\u7570\u306a\u308b\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"

            Harbor\u304c\u6b63\u3057\u304f\u958b\u59cb\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u74b0\u5883\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059:

            • HARBOR_REGISTRY_STORAGE_AMAZON_BUCKET
              • \u3053\u308c\u306f\u3001Harbor\u304c\u30a4\u30e1\u30fc\u30b8\u3092\u4fdd\u5b58\u3059\u308bAWS\u30d0\u30b1\u30c3\u30c8\u306e\u540d\u524d\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
              • Lagoon\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067harbor-images\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
            • HARBOR_REGISTRY_STORAGE_AMAZON_REGION
              • \u3053\u308c\u306f\u3001Harbor\u306e\u30d0\u30b1\u30c3\u30c8\u304c\u5b58\u5728\u3059\u308bAWS\u5730\u57df\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
              • Lagoon\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067us-east-1\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
            • REGISTRY_STORAGE_S3_ACCESSKEY
              • \u3053\u308c\u306f\u3001Harbor\u304cAWS\u30d0\u30b1\u30c3\u30c8\u306b\u8aad\u307f\u66f8\u304d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308bAWS\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
              • Lagoon\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f\u3001MinIO\u306f\u8a8d\u8a3c\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u7a7a\u6587\u5b57\u5217\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
            • REGISTRY_STORAGE_S3_SECRETKEY
              • \u3053\u308c\u306f\u3001Harbor\u304cAWS\u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308bAWS\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 AWS\u30d0\u30b1\u30c3\u30c8\u3078\u306e\u8aad\u307f\u66f8\u304d\u3002
              • Lagoon\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306e\u5834\u5408\u3001MinIO\u306f\u8a8d\u8a3c\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u305f\u3081\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u7a7a\u6587\u5b57\u5217\u306b\u306a\u308a\u307e\u3059\u3002

            \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u6b21\u306e\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059:

            • HARBOR_REGISTRY_STORAGE_AMAZON_ENDPOINT
              • \u3053\u306e\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001Harbor\u30ec\u30b8\u30b9\u30c8\u30ea\u306f\u305d\u306e\u5024\u3092s3\u30a8\u30f3\u30c8\u30ea\u30dd\u30a4\u30f3\u30c8\u306e\u30a2\u30c9\u30ec\u30b9\u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002
              • \u3053\u306e\u5909\u6570\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306f https://s3.amazonaws.com \u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/#_2","title":"\u30b3\u30f3\u30c6\u30ca\u56fa\u6709\u306e\u8a2d\u5b9a","text":"

            \u6b21\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059:

            • HarborRegistry
            • HarborRegistryCtl
            • Harbor-Core
            • Harbor-Database
            • Harbor-Jobservice
            • Harbor-Trivy

            \u6b21\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u305b\u305a\u306b\u5b9f\u884c\u3067\u304d\u307e\u3059:

            • Harbor-Nginx
            • Harbor-Portal
            • Harbor-Redis
            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/","title":"\u30cf\u30fc\u30d0\u30fc\u30b3\u30a2","text":"

            Harbor-Core\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u5185\u306e/etc/core/app.conf\u306b\u4f4d\u7f6e\u3059\u308b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3001\u8d77\u52d5\u3057\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u884c\u308f\u308c\u308b\u4efb\u610f\u306e\u5909\u66f4\u306f\u4e00\u6642\u7684\u306a\u3082\u306e\u3067\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3055\u308c\u308b\u3068\u6301\u7d9a\u3057\u307e\u305b\u3093\u3002

            \u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u308bConfigmap\u306f\u3001services/harbor-core/harbor-core.yml\u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u306eLagoon\u5185\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u3053\u306econfigmap\u306b\u884c\u308f\u308c\u308b\u4efb\u610f\u306e\u5909\u66f4\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u518d\u8d77\u52d5\u3092\u307e\u305f\u3044\u3067\u6301\u7d9a\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/#_2","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
            • _REDIS_URL
              • Redis\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u63a5\u7d9a\u60c5\u5831\u3092harbor-core\u3068Chartmuseum\u30b5\u30fc\u30d3\u30b9\u306b\u4f1d\u3048\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fharbor-redis:6379,100,\u3067\u3059\u3002
            • _REDIS_URL_REG
              • harborregistry\u304cRedis\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3079\u304dURL\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fredis://harbor-redis:6379/2\u3067\u3059\u3002
            • ADMIRAL_URL
              • admiral\u30b5\u30fc\u30d3\u30b9\u306e\u5834\u6240\u3092harbor-core\u306b\u4f1d\u3048\u307e\u3059\u3002
              • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306fLagoon\u306eHarbor\u5b9f\u88c5\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fNA\u3067\u3059\u3002
            • CFG_EXPIRATION
              • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f5\u3067\u3059\u3002
            • CHART_CACHE_DRIVER
              • harbor-core\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c1\u30e3\u30fc\u30c8\u3092\u3069\u3053\u306b\u4fdd\u5b58\u3059\u308b\u304b\u3092\u4f1d\u3048\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fredis\u3067\u3059\u3002
            • CLAIR_ADAPTER_URL
              • harbor-core\u304c\u4f7f\u7528\u3059\u3079\u304dURL\u3002 * Harbor-trivy\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f http://harbor-trivy:8080 \u3067\u3059\u3002
            • CLAIR_DB
              • harborclair\u304c\u4f7f\u7528\u3059\u3079\u304d\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30bf\u30a4\u30d7\u3002
              • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f postgres \u3067\u3059\u3002
            • CLAIR_DB_HOST
              • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
              • harbor-core\u306bharborclair\u30b5\u30fc\u30d3\u30b9\u306e\u5834\u6240\u3092\u4f1d\u3048\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f harbor-database \u3067\u3059\u3002
            • CLAIR_DB_PASSWORD
              • harborclair\u306epostgres\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u30d1\u30b9\u30ef\u30fc\u30c9\u3002
              • \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306e\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f test123 \u3067\u3059\u3002
              • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u521d\u3081\u3066\u7a3c\u50cd\u3059\u308bLagoon\u4e0a\u3067\u8a2d\u5b9a\u3055\u308c\u305f\u6642\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • CLAIR_DB_PORT
              • harborclair\u304charborclair\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30dd\u30fc\u30c8\u3002
              • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f 5432 \u3067\u3059\u3002
            • CLAIR_DB_SSLMODE
              • harborclair\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306bSSL\u3092\u4f7f\u7528\u3059\u3079\u304d\u304b\u3069\u3046\u304b\u3002
              • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u53e4\u3044\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f disable \u3067\u3059\u3002
            • CLAIR_DB *USERNAME`
              • \u30e6\u30fc\u30b6\u30fc\u540dharborclair\u306f\u3001postgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3079\u304d\u3067\u3059\u3002
              • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u305a\u3001\u30ec\u30ac\u30b7\u30fc\u30b5\u30dd\u30fc\u30c8\u306e\u305f\u3081\u3060\u3051\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fpostgres\u3067\u3059\u3002
            • CLAIR_HEALTH_CHECK_SERVER_URL
              • \u3053\u306e\u5024\u306f\u3001harbor-core\u304charbor-trivy\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3057\u3066\u5065\u5eb7\u30c1\u30a7\u30c3\u30af\u3092\u767a\u884c\u3059\u308b\u5834\u6240\u3092\u6307\u793a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-trivy:8080\u3067\u3059\u3002
            • CLAIR_URL
              • harbor-core\u304charbor-trivy\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304dURL\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-trivy:6060\u3067\u3059\u3002
            • CONFIG_PATH
              • harbor-core\u304c\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u63a2\u3059\u3079\u304d\u5834\u6240\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f/etc/core/app.conf\u3067\u3059\u3002
            • CORE_SECRET
              • \u3053\u306e\u5024\u306f\u3001harbor-core\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306b\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u521d\u3081\u3066Lagoon\u3067\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • CORE_URL
              • harbor-core\u304c\u4ed6\u306eHarbor\u30b5\u30fc\u30d3\u30b9\u306b\u516c\u958b\u3057\u3001\u305d\u308c\u3089\u304charbor-core\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306eURL\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-core:8080\u3067\u3059\u3002
            • DATABASE_TYPE
              • Harbor\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7 \u4f7f\u7528\u3059\u308b\u3079\u304d\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f postgresql\u3067\u3059\u3002
            • HARBOR_ADMIN_PASSWORD
              • admin \u30e6\u30fc\u30b6\u30fc\u3092\u4f7f\u7528\u3057\u3066harbor\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3079\u304d\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f admin\u3067\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u6700\u521d\u306b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u305f\u969b\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • HARBOR_NGINX_ENDPOINT
              • \u3053\u306e\u74b0\u5883\u5909\u6570\u306f\u3001harborregistry\u306b\u3001\u305d\u306eNGINX\u30a4\u30f3\u30b0\u30ec\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001harbor-nginx\u304c\u3069\u3053\u3067\u7a3c\u50cd\u3057\u3066\u3044\u308b\u304b\u3092\u901a\u77e5\u3057\u3001UI\u5185\u306e\u9069\u5207\u306a\u30d7\u30c3\u30b7\u30e5\u3068\u30d7\u30eb\u306e\u6307\u793a\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306a\u3069\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u3084CI\u30c6\u30b9\u30c8\u4e2d\u306f http://harbor-nginx:8080\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
              • Lagoon\u306f\u3001\u672c\u756a\u74b0\u5883\u3067\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306b\u3053\u306e\u5909\u6570\u3092\u81ea\u52d5\u7684\u306b\u53d6\u5f97\u3057\u8a2d\u5b9a\u3057\u3088\u3046\u3068\u8a66\u307f\u307e\u3059\u3002\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u5931\u6557\u3059\u308b\u3068\u3001\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002
            • HTTP_PROXY
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
            • HTTPS_PROXY
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
            • JOBSERVICE_SECRET
              • \u3053\u306e\u5024\u306f\u3001harbor-jobservice\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306e\u5834\u5408\u3001secret123\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u6700\u521d\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u969b\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002 \u306f\u3001Lagoon\u304c\u52d5\u4f5c\u3057\u3066\u3044\u308b\u72b6\u614b\u3067\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
            • JOBSERVICE_URL
              • harbor-core\u304charbor-jobservice\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304dURL\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306fhttp://harbor-jobservice:8080\u3067\u3059\u3002
            • LOG_LEVEL
              • harbor-core\u30b5\u30fc\u30d3\u30b9\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30ed\u30b0\u30ec\u30d9\u30eb\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306ferror\u3067\u3059\u3002
            • NO_PROXY
              • \u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30d7\u30ed\u30ad\u30b7\u3055\u308c\u308b\u3079\u304d\u3067\u306f\u306a\u3044\u30db\u30b9\u30c8\u306e\u30ea\u30b9\u30c8\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306fharbor-core,harbor-jobservice,harbor-database,harbor-trivy,harborregistry,harbor-portal,127.0.0.1,localhost,.local,.internal\u3067\u3059\u3002
            • PORTAL_URL
              • \u3053\u306e\u5024\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u304charbor-portal\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u5834\u6240\u3092\u6307\u793a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306fhttp://harbor-portal:8080\u3067\u3059\u3002
            • POSTGRESQL_DATABASE
              • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u969b\u306b\u4f7f\u7528\u3059\u3079\u304dpostgres\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306fregistry\u3067\u3059\u3002
            • POSTGRESQL_HOST
              • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u3079\u304d\u5834\u6240\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306fharbor-database\u3067\u3059\u3002
            • POSTGRESQL_MAX_IDLE_CONNS
              • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u5bfe\u3057\u3066\u958b\u653e\u3057\u3066\u304a\u304f\u3079\u304d\u6700\u5927\u306e\u30a2\u30a4\u30c9\u30eb\u63a5\u7d9a\u6570\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f50\u3067\u3059\u3002
            • POSTGRESQL_MAX_OPEN_CONNS
              • harbor-core\u304c\u958b\u304f\u3079\u304d\u6700\u5927\u306e\u63a5\u7d9a\u6570\u3002 -\u30b3\u30a2\u306fpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f100\u3067\u3059\u3002
            • POSTGRESQL_PASSWORD
              • Harbor\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30d1\u30b9\u30ef\u30fc\u30c9\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u30e9\u30f3\u30c0\u30e0\u306b\u751f\u6210\u3055\u308c\u305f\u5024\u3067\u3059\u3002
            • POSTGRESQL_PORT
              • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30dd\u30fc\u30c8\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f5432\u3067\u3059\u3002
            • POSTGRESQL_USERNAME
              • harbor-core\u304cpostgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30e6\u30fc\u30b6\u30fc\u540d\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fpostgres\u3067\u3059\u3002
            • POSTGRESQL_SSLMODE
              • harbor-core\u304cSSL\u3092\u4f7f\u7528\u3057\u3066postgresql\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u3079\u304d\u304b\u3069\u3046\u304b\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fdisable\u3067\u3059\u3002
            • REGISTRY_HTTP_SECRET
              • \u3053\u306e\u5024\u306f\u3001harborregistry\u306b\u63a5\u7d9a\u3059\u308b\u5404\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u521d\u3081\u3066\u7a3c\u50cd\u3057\u3066\u3044\u308bLagoon\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u751f\u6210\u3055\u308c\u308b\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • REGISTRY_STORAGE_PROVIDER_NAME
              • harborregistry\u304c\u4f7f\u7528\u3059\u3079\u304d\u30b9\u30c8\u30ec\u30fc\u30b8\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fs3\u3067\u3059\u3002
            • REGISTRY_URL
              • harbor-core\u304charborregistry\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304dURL\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f * \u5024\u306fhttp://harborregistry:5000\u3067\u3059\u3002
            • REGISTRYCTL_URL
              • \u3053\u306e\u5024\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u304charborregistryctl\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u5834\u6240\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harborregistryctl:8080\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
            • ROBOT_TOKEN_DURATION
              • \u3053\u306e\u5024\u306f\u3001\u5404\u554f\u984c\u306e\u30ed\u30dc\u30c3\u30c8\u30c8\u30fc\u30af\u30f3\u304c\u6709\u52b9\u3067\u3042\u308b\u3079\u304d\u65e5\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f999\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
            • SYNC_REGISTRY
              • \u3053\u306e\u5024\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ffalse\u3067\u3059\u3002
            • TOKEN_SERVICE_URL
              • harbor-core\u30b5\u30fc\u30d3\u30b9\u304c\u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u516c\u958b\u3059\u308bURL\u3067\u3001\u3053\u308c\u306b\u3088\u308aJWT\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-core:8080/service/token\u3067\u3059\u3002
            • TRIVY_ADAPTER_URL
              • harbor-core\u30b5\u30fc\u30d3\u30b9\u304charbor-trivy\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308bURL\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-trivy:8080\u3067\u3059\u3002
            • WITH_CHARTMUSEUM
              • Chartmuseum\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092harbor-core\u306b\u4f1d\u3048\u307e\u3059\u3002
              • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306fLagoon\u306eHarbor\u5b9f\u88c5\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ffalse\u3067\u3059\u3002
            • WITH_CLAIR
              • harborclair\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092harbor-core\u306b\u4f1d\u3048\u307e\u3059\u3002
              • Lagoon\u306fHarbor\u306e\u5b9f\u88c5\u3067\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ftrue\u3067\u3059\u3002
            • WITH_NOTARY
              • harbor-core\u306b - \u30ce\u30fc\u30bf\u30ea\u30fc\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306ecore\u3002
              • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3001Lagoon\u304c\u5b9f\u88c5\u3057\u305fHarbor\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ffalse\u3067\u3059\u3002
            • WITH_TRIVY
              • Trivy\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092harbor-core\u306b\u4f1d\u3048\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ftrue\u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/","title":"Harbor-\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9","text":"

            Harbor-\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u8d77\u52d5\u3059\u308b\u305f\u3081\u306b\u7279\u5b9a\u306e\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u305d\u308c\u3089\u306fservices/harbor-database/harbor-core.yml\u30d5\u30a1\u30a4\u30eb\u3067\u8aac\u660e\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u5185\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/#_1","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
            • POSTGRES_DB
              • Postgres\u30b5\u30fc\u30d3\u30b9\u3092\u521d\u671f\u5316\u3059\u308b\u969b\u306b\u8a2d\u5b9a\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fpostgres\u3067\u3059\u3002
            • POSTGRES_PASSWORD
              • Postgres\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30eb\u30fc\u30c8\u30d1\u30b9\u30ef\u30fc\u30c9\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ftest123\u3067\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u52d5\u4f5c\u3057\u3066\u3044\u308bLagoon\u4e0a\u3067\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • POSTGRES_USER
              • Postgres\u30b5\u30fc\u30d3\u30b9\u3092\u521d\u671f\u5316\u3059\u308b\u969b\u306b\u8a2d\u5b9a\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fpostgres\u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/","title":"Harbor-Jobservice","text":"

            Harbor-Jobservice\u306f\u3001\u8d77\u52d5\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30b3\u30f3\u30c6\u30ca\u5185\u306e/etc/jobservice/config.yml\u306b\u4f4d\u7f6e\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u5909\u66f4\u306f\u4e00\u6642\u7684\u306a\u3082\u306e\u3067\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3055\u308c\u308b\u3068\u6301\u7d9a\u3057\u307e\u305b\u3093\u3002

            \u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u308b\u5143\u3068\u306a\u308bconfigmap\u306f\u3001Lagoon\u5185\u306eservices/harbor-jobservice/harbor-jobservice.yml\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306econfigmap\u3078\u306e\u5909\u66f4\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u306e\u518d\u8d77\u52d5\u3092\u8d8a\u3048\u3066\u6301\u7d9a\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/#_1","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
            • CORE_URL
              • \u3053\u306e\u5024\u306fharbor-jobservice\u306bharbor-core\u304c\u3069\u3053\u306b\u3042\u308b\u304b\u3092\u4f1d\u3048\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fhttp://harbor-core:8080\u3067\u3059\u3002
            • CORE_SECRET
              • \u3053\u306e\u5024\u306f\u3001harbor-core\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u307e\u305f\u306fCI\u30c6\u30b9\u30c8\u4e2d\u306b\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u5b9f\u884c\u4e2d\u306eLagoon\u4e0a\u3067\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • HTTP_PROXY
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
            • HTTPS_PROXY
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
            • JOBSERVICE_SECRET
              • \u3053\u306e\u5024\u306f\u3001\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002 harbor-jobservice\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3001CI\u30c6\u30b9\u30c8\u4e2d\u306e\u5834\u5408\u306fsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u5b9f\u884c\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • LOG_LEVEL
              • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30ec\u30d9\u30eb\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ferror\u3067\u3059\u3002
                • \u975e\u5e38\u306b\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001debug\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
            • NO_PROXY
              • \u305d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30d7\u30ed\u30ad\u30b7\u5316\u3055\u308c\u308b\u3079\u304d\u3067\u306f\u306a\u3044\u30db\u30b9\u30c8\u306e\u30ea\u30b9\u30c8\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306f harbor-core,harbor-jobservice,harbor-database,harbor-trivy,harborregistry,harbor-portal,127.0.0.1,localhost,.local,.internal\u3067\u3059\u3002
            • REGISTRY_CONTROLLER_URL
              • \u3053\u306e\u5024\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u304charborregistryctl\u30b5\u30fc\u30d3\u30b9\u306b\u63a5\u7d9a\u3059\u308b\u5834\u6240\u3092\u6307\u793a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f http://harborregistryctl:8080\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002
            • SCANNER_LOG_LEVEL
              • \u30b9\u30ad\u30e3\u30cb\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30ec\u30d9\u30eb\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ferror\u3067\u3059\u3002
                • \u975e\u5e38\u306b\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001debug\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002
            • SCANNER_STORE_REDIS_URL
              • \u3053\u306e\u5024\u306f\u3001harbor-trivy\u304cRedis\u30b9\u30c8\u30a2\u306b\u63a5\u7d9a\u3059\u308b\u65b9\u6cd5\u3092\u6307\u793a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f redis://harbor-redis:6379/4\u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/","title":"Harbor-Trivy","text":"

            Harbor-Trivy\u306f\u7279\u5b9a\u306e\u74b0\u5883\u5909\u6570\u3092\u4ecb\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u4f7f\u7528\u3057\u307e\u305b\u3093\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/#environment-variables","title":"\u74b0\u5883\u5909\u6570","text":"
            • SCANNER_LOG_LEVEL
              • \u3053\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u7528\u3059\u308b\u30ed\u30b0\u30ec\u30d9\u30eb\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306ferror\u3067\u3059\u3002
                • \u975e\u5e38\u306b\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u3053\u308c\u3092debug\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
            • SCANNER_STORE_REDIS_URL
              • \u3053\u306e\u5024\u306fharbor-trivy\u306b\u3001\u81ea\u8eab\u306eRedis\u30b9\u30c8\u30a2\u3078\u306e\u63a5\u7d9a\u65b9\u6cd5\u3092\u6307\u793a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fredis://harbor-redis:6379/4\u3067\u3059\u3002
            • SCANNER_JOB_QUEUE_REDIS_URL
              • \u3053\u306e\u5024\u306fharbor-trivy\u306b\u3001\u81ea\u8eab\u306eRedis\u30b9\u30c8\u30a2\u3078\u306e\u63a5\u7d9a\u65b9\u6cd5\u3092\u6307\u793a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fredis://harbor-redis:6379/4\u3067\u3059\u3002
            • SCANNER_TRIVY_VULN_TYPE
              • \u3053\u306e\u5024\u306fharbor-trivy\u306b\u3001\u4f55\u30bf\u30a4\u30d7\u306e\u8106\u5f31\u6027\u3092\u691c\u7d22\u3059\u3079\u304d\u304b\u3092\u6307\u793a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306fos,library\u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/","title":"HarborRegistry","text":"

            HarborRegistry\u306f\u3001\u8d77\u52d5\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u3057\u3001\u305d\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u30b3\u30f3\u30c6\u30ca\u5185\u306e /etc/registry/config.yml \u306b\u4f4d\u7f6e\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u5909\u66f4\u306f\u4e00\u6642\u7684\u306a\u3082\u306e\u3067\u3042\u308a\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3055\u308c\u308b\u3068\u6301\u7d9a\u3057\u307e\u305b\u3093\u3002

            \u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f services/harborregistry/harborregistry.yml \u30d5\u30a1\u30a4\u30eb\u5185\u306b\u4fdd\u5b58\u3055\u308c\u3001 /etc/registry/pre-config.yml \u3068\u3057\u3066\u30b3\u30f3\u30c6\u30ca\u5185\u306b\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3059\u3002

            \u30ab\u30b9\u30bf\u30e0\u30b3\u30f3\u30c6\u30ca\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8 services/harborregistry/entrypoint.sh \u306f\u3001\u63d0\u4f9b\u3055\u308c\u305f\u74b0\u5883\u5909\u6570\u3092\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u8ee2\u9001\u3057\u3001\u7d50\u679c\u3092 /etc/registry/config.yml \u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/#_1","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
            • CORE_SECRET
              • \u3053\u306e\u5024\u306f\u3001harbor-core \u306b\u63a5\u7d9a\u3059\u308b\u69d8\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u305f\u308aCI\u30c6\u30b9\u30c8\u4e2d\u306b\u8a2d\u5b9a\u3055\u308c\u308b secret123 \u3067\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u5b9f\u884c\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u308b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • HARBOR_NGINX_ENDPOINT
              • \u3053\u306e\u74b0\u5883\u5909\u6570\u306f\u3001harborregistry\u306b\u3001\u305d\u306eNGINX\u30a4\u30f3\u30b0\u30ec\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc harbor-nginx\u304c\u3069\u3053\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u901a\u77e5\u3057\u3001UI\u5185\u3067\u9069\u5207\u306a\u30d7\u30c3\u30b7\u30e5\u3068\u30d7\u30eb\u306e\u6307\u793a\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u3001\u305d\u306e\u4ed6\u306e\u4e8b\u9805\u3092\u901a\u77e5\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059 \u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u305f\u308aCI\u30c6\u30b9\u30c8\u4e2d\u306b\u306f\u3001http://harbor-nginx:8080\u306b\u306a\u308a\u307e\u3059\u3002
              • \u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u74b0\u5883\u3067Lagoon\u304c\u81ea\u52d5\u7684\u306b\u3053\u306e\u5909\u6570\u3092\u53d6\u5f97\u3057\u30bb\u30c3\u30c8\u3057\u3088\u3046\u3068\u3057\u307e\u3059\u3002\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u5931\u6557\u3059\u308b\u3068\u3001\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u5b9f\u884c\u306b\u5931\u6557\u3057\u307e\u3059\u3002
            • JOBSERVICE_SECRET
              • \u3053\u306e\u5024\u306f\u3001harbor-jobservice\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u6700\u521d\u306b\u7a3c\u50cd\u4e2d\u306eLagoon\u4e0a\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • REGISTRY_HTTP_SECRET
              • \u3053\u306e\u5024\u306f\u3001harborregistry\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u308b\u304bCI\u30c6\u30b9\u30c8\u4e2d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u6700\u521d\u306b\u7a3c\u50cd\u4e2d\u306eLagoon\u4e0a\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • REGISTRY_REDIS_PASSWORD
              • \u3053\u306e\u74b0\u5883\u5909\u6570\u306f\u3001harborregistryctl\u304cRedis\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u6307\u793a\u3057\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u306e\u6587\u5b57\u5217\u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/","title":"HarborRegistryCtl","text":"

            HarborRegistryCtl\u306f\u8d77\u52d5\u3059\u308b\u305f\u3081\u306b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5fc5\u8981\u3068\u3057\u3001\u305d\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u30b3\u30f3\u30c6\u30ca\u5185\u306e/etc/registryctl/config.yml\u306b\u4f4d\u7f6e\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u5909\u66f4\u306f\u4e00\u6642\u7684\u306a\u3082\u306e\u3067\u3042\u308a\u3001\u30dd\u30c3\u30c9\u304c\u518d\u8d77\u52d5\u3055\u308c\u308b\u3068\u6301\u7d9a\u3057\u307e\u305b\u3093\u3002

            \u3053\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u308b\u5143\u3068\u306a\u308bconfigmap\u306f\u3001Lagoon\u5185\u306eservices/harborregistryctl/harborregistry.yml\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306econfigmap\u3078\u306e\u5909\u66f4\u306f\u3001\u30b3\u30f3\u30c6\u30ca\u304c\u518d\u8d77\u52d5\u3055\u308c\u3066\u3082\u4fdd\u6301\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/#_1","title":"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9","text":"
            • CORE_SECRET
              • \u3053\u306e\u5024\u306f\u3001harbor-core\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u305f\u308aCI\u30c6\u30b9\u30c8\u4e2d\u306b\u8a2d\u5b9a\u3055\u308c\u308bsecret123\u3067\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u7a3c\u50cd\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u969b\u306b\u4f5c\u6210\u3055\u308c\u308b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • JOBSERVICE_SECRET
              • \u3053\u306e\u5024\u306f\u3001harbor-jobservice\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3067\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3055\u308c\u305f\u308aCI\u30c6\u30b9\u30c8\u4e2d\u306b\u8a2d\u5b9a\u3055\u308c\u308bsecret123\u3067\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u7a3c\u50cd\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u969b\u306b\u4f5c\u6210\u3055\u308c\u308b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • REGISTRY_HTTP_SECRET
              • \u3053\u306e\u5024\u306f\u3001 harborregistry\u306b\u63a5\u7d9a\u3059\u308b\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u9593\u3067\u4e00\u81f4\u3057\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u4e8b\u524d\u5171\u6709\u30ad\u30fc\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u3001Harbor\u304c\u30ed\u30fc\u30ab\u30eb\u307e\u305f\u306fCI\u30c6\u30b9\u30c8\u4e2d\u306b\u5b9f\u884c\u3055\u308c\u308b\u3068\u304d\u306bsecret123\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002
              • \u3053\u306e\u5024\u306f\u3001Harbor\u304c\u52d5\u4f5c\u4e2d\u306eLagoon\u306b\u521d\u3081\u3066\u8a2d\u5b9a\u3055\u308c\u305f\u3068\u304d\u306b\u4f5c\u6210\u3055\u308c\u305f\u79d8\u5bc6\u304b\u3089\u53d6\u5f97\u3055\u308c\u307e\u3059\u3002
            • REGISTRY_REDIS_PASSWORD
              • \u3053\u306e\u74b0\u5883\u5909\u6570\u306f\u3001harborregistryctl\u306bRedis\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u3079\u304d\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u4f1d\u3048\u307e\u3059\u3002
              • \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f\u7a7a\u6587\u5b57\u5217\u3067\u3059\u3002
            "},{"location":"ja/using-lagoon-the-basics/","title":"Lagoon\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9 - \u6982\u8981","text":"

            \u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Lagoon\u306e\u57fa\u672c\u7684\u306a\u7279\u5fb4\u3068\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306b\u6163\u308c\u3066\u3044\u308b\u65b9\u306f\u3001Lagoon\u306e\u9ad8\u5ea6\u306a\u4f7f\u3044\u65b9\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002

            \u30d8\u30eb\u30d7\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001\u79c1\u305f\u3061\u306eDiscord\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30e1\u30f3\u30d0\u30fc\u3068\u30e1\u30f3\u30c6\u30ca\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/#_1","title":"\u5fc5\u8981\u6761\u4ef6","text":""},{"location":"ja/using-lagoon-the-basics/#docker","title":"Docker","text":"

            Lagoon\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u304cDocker\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30ef\u30fc\u30af\u30b9\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306eDocker\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002Docker\u306f\u3053\u3061\u3089\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001Docker\u306b\u306f\u6700\u4f4e\u3067\u30824CPUs\u30684GB RAM\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/#_2","title":"\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883","text":"

            pygmy\u3001Lando\u3001DDEV\u304b\u3089\u9078\u3076\u3053\u3068\u304c\u3067\u304d\u307e\u3059 - \u9078\u629e\u306f\u3042\u306a\u305f\u6b21\u7b2c\u3067\u3059\uff01

            Lagoon\u3068\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306b\u3064\u3044\u3066\u3082\u3063\u3068\u5b66\u3073\u307e\u3057\u3087\u3046\u3002

            "},{"location":"ja/using-lagoon-the-basics/#step-by-step-guides","title":"\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u306e\u30ac\u30a4\u30c9","text":"
            • \u4e00\u822c: Lagoon\u3067\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b
            • \u4e00\u822c: \u521d\u3081\u3066\u306e\u30c7\u30d7\u30ed\u30a4
            • Drupal: Drupal\u3067\u306e\u521d\u3081\u3066\u306e\u30c7\u30d7\u30ed\u30a4
            • Drupal: Drupal\u30b5\u30a4\u30c8\u3092Lagoon\u5bfe\u5fdc\u306b\u3059\u308b
            • \u3059\u3079\u3066: Lagoon\u306e\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d7\u30ed\u30bb\u30b9
            "},{"location":"ja/using-lagoon-the-basics/#lagoon","title":"Lagoon\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u6982\u8981","text":""},{"location":"ja/using-lagoon-the-basics/#lagoonyml","title":".lagoon.yml","text":"

            \u3053\u308c\u306fLagoon\u304c\u4f55\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3079\u304d\u304b\u3001\u307e\u305f\u591a\u304f\u306e\u4ed6\u306e\u4e8b\u67c4\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u4e3b\u8981\u306a\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002.lagoon.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/#docker-composeyml","title":"docker-compose.yml","text":"

            \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306fDocker Compose\u306b\u3088\u3063\u3066\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3092\u958b\u59cb\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002Lagoon\u3082\u3053\u308c\u3092\u4f7f\u7528\u3057\u3066\u3001\u3069\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u3079\u304d\u304b\u3001\u3069\u306e\u30bf\u30a4\u30d7\u3067\u3001\u3069\u306e\u3088\u3046\u306b\u30d3\u30eb\u30c9\u3059\u308b\u304b\u3092\u7406\u89e3\u3057\u307e\u3059\u3002\u3053\u308c\u306flabels\u3092\u901a\u3058\u3066\u884c\u308f\u308c\u307e\u3059\u3002docker-compose.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/#dockerfiles","title":"Dockerfiles","text":"

            \u4e00\u90e8\u306eDocker\u30a4\u30e1\u30fc\u30b8\u3068\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u63d0\u4f9b\u3055\u308c\u305f\u30a4\u30e1\u30fc\u30b8\u304b\u3089\u8ffd\u52a0\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u901a\u5e38\u30012\u3064\u306e\u7406\u7531\u304c\u3042\u308a\u307e\u3059:

            1. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30fc\u30c9: NGINX\u3001PHP\u3001Node.js\u306a\u3069\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u305d\u306e\u30a4\u30e1\u30fc\u30b8\u5185\u306b\u5b9f\u969b\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b3\u30fc\u30c9\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u306fDocker\u30d3\u30eb\u30c9\u30b9\u30c6\u30c3\u30d7\u4e2d\u306b\u884c\u308f\u308c\u3001Dockerfile\u3067\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002Lagoon\u306fDocker\u3092\u5b8c\u5168\u306b\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u305f\u3081Dockerfile\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3088\u3063\u3066\u51fa\u6765\u4e0a\u304c\u308b\u30a4\u30e1\u30fc\u30b8\u3092\u5b8c\u5168\u306b\u5236\u5fa1\u3067\u304d\u307e\u3059\u3002
            2. \u30a4\u30e1\u30fc\u30b8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba: Lagoon\u3067\u306f\u3001\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u3092\u3042\u306a\u305f\u306e\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u8ffd\u52a0\u306e\u74b0\u5883\u5909\u6570\u3092\u633f\u5165\u3057\u305f\u308a\u3001\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u305f\u308a\u3001\u3055\u3089\u306b\u8ffd\u52a0\u306e\u30c4\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3053\u3068\u3082\u542b\u307e\u308c\u307e\u3059\u3002Docker\u30a4\u30e1\u30fc\u30b8\u306b\u8ffd\u52a0\u306e\u30c4\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u969b\u306b\u306f\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u5c06\u6765\u7684\u306b\u4efb\u610f\u306e\u9069\u5fdc\u3092\u7dad\u6301\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3089\u3067\u3059\uff01
            "},{"location":"ja/using-lagoon-the-basics/#lagoon_1","title":"Lagoon\u306b\u3088\u308b\u30b5\u30dd\u30fc\u30c8\u30b5\u30fc\u30d3\u30b9\u3068\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8","text":"\u30bf\u30a4\u30d7 \u30d0\u30fc\u30b8\u30e7\u30f3 Dockerfile MariaDB 10.4, 10.5, 10.6, 10.11 mariadb/Dockerfile PostgreSQL 11, 12, 13, 14, 15 postgres/Dockerfile MongoDB 4 mongo/Dockerfile NGINX openresty/1.25 nginx/Dockerfile Node.js 18, 20, 22 node/Dockerfile PHP FPM 8.1, 8.2, 8.3 php/fpm/Dockerfile PHP CLI 8.1, 8.2, 8.3 php/cli/Dockerfile Python 3.8, 3.9, 3.10, 3.11, 3.12 python/Dockerfile Redis 6, 7 redis/Dockerfile Solr 8, 9 solr/Dockerfile Varnish 6, 7 varnish/Dockerfile Opensearch 2 opensearch/Dockerfiles RabbitMQ 3.10 rabbitmq/Dockerfile Ruby 3.1, 3.2, 3.3 ruby/Dockerfile

            \u3059\u3079\u3066\u306e\u30a4\u30e1\u30fc\u30b8\u306fhttps://hub.docker.com/u/uselagoon\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002\u7279\u6027\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u89b3\u70b9\u304b\u3089\u5e38\u306b\u6700\u65b0\u306e\u30bf\u30b0(\u4f8b:uselagoon/nginx:latest)\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002

            \u7279\u5b9a\u306eLagoon\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30e1\u30fc\u30b8\u3001\u4f8b\u3048\u3070uselagoon/nginx:20.10.0\u3084uselagoon/node-10:20.10.0\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u65b0\u3057\u3044Lagoon\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u305f\u3089\u3059\u3050\u306b\u30a4\u30e1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5404\u81ea\u306e\u8cac\u4efb\u3067\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044\uff01

            "},{"location":"ja/using-lagoon-the-basics/configure-webhooks/","title":"Webhooks\u306e\u8a2d\u5b9a","text":"

            Lagoon\u306e\u7ba1\u7406\u8005\u306f\u3001webhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u3082\u3042\u306a\u305f\u306b\u6559\u3048\u3066\u304f\u308c\u308b\u3067\u3057\u3087\u3046\u3002\u3053\u306e\u30eb\u30fc\u30c8\u3092\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30a2\u30a6\u30c8\u30b4\u30fc\u30a4\u30f3\u30b0webhook\u306b\u8ffd\u52a0\u3057\u3001Lagoon\u306b\u9001\u4fe1\u3059\u308b\u30a4\u30d9\u30f3\u30c8\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u901a\u5e38\u306f\u5168\u3066\u306e\u30d7\u30c3\u30b7\u30e5\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002Lagoon\u3067\u306f\u3069\u306e\u30d6\u30e9\u30f3\u30c1\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5b9f\u969b\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u308b\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u305f\u3081\u306e\u6b63\u898f\u8868\u73fe\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001Lagoon\u306e\u7ba1\u7406\u8005\u304c\u305d\u308c\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001feature-\u3067\u59cb\u307e\u308b\u5168\u3066\u306e\u30d6\u30e9\u30f3\u30c1\u3092Lagoon\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

            amazee.io\u306e\u304a\u5ba2\u69d8\u3078\u306e\u60c5\u5831

            amazee.io\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3067\u5834\u5408\u3001webhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002https://hooks.lagoon.amazeeio.cloud

            \u5371\u967a

            \u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3059\u308b\u306b\u306f\u3001\u3053\u308c\u3089\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u9ad8\u3044\u30ec\u30d9\u30eb\u306e\u30a2\u30af\u30bb\u30b9\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3042\u306a\u305f\u306e\u7d44\u7e54\u306b\u3088\u3063\u3066\u7ba1\u7406\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u307e\u305f\u306f\u3042\u306a\u305f\u306e\u7d44\u7e54\u5185\u306e\u9069\u5207\u306a\u8cac\u4efb\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/configure-webhooks/#github","title":"GitHub","text":"
            1. GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u8a2d\u5b9a -> Webhooks -> Add webhook\u306b\u9032\u307f\u307e\u3059\u3002
            2. Payload URL\u306f\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308b\u3001\u3042\u306a\u305f\u306eLagoon\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306ewebhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u3067\u3059\u3002
            3. Content type\u3092application/json\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
            4. \"Let me select individual events\"\u3092\u9078\u629e\u3057\u307e\u3059\u3002
            5. \u3069\u306e\u30a4\u30d9\u30f3\u30c8\u304cwebhook\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u304b\u3092\u9078\u629e\u3057\u307e\u3059\u3002Push\u3068Pull request\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u9001\u4fe1\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eLagoon\u8a2d\u5b9a\u3067\u3055\u3089\u306b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002
            6. webhook\u304cActive\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002
            7. Add webhook\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002
            "},{"location":"ja/using-lagoon-the-basics/configure-webhooks/#gitlab","title":"GitLab","text":"
            1. GitLab\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u8a2d\u5b9a -> \u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
            2. URL\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u304b\u3089\u63d0\u4f9b\u3055\u308c\u308b\u3001Lagoon\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306ewebhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u3067\u3059\u3002
            3. Lagoon\u306b\u901a\u77e5\u3092\u9001\u4fe1\u3059\u308bTrigger\u30a4\u30d9\u30f3\u30c8\u3092\u9078\u629e\u3057\u307e\u3059\u3002Push events\u3068Merge request events\u3092\u9078\u629e\u3057\u3001\u305d\u306e\u5f8cLagoon\u306e\u8a2d\u5b9a\u3067\u3055\u3089\u306b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002
            4. Add webhook\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002
            "},{"location":"ja/using-lagoon-the-basics/configure-webhooks/#bitbucket","title":"Bitbucket","text":"
            1. \u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u8a2d\u5b9a -> \u30a6\u30a7\u30d6\u30d5\u30c3\u30af -> \u65b0\u3057\u3044\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u8ffd\u52a0\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
            2. Title\u306f\u53c2\u7167\u7528\u3067\u3059\u3002
            3. URL\u306f\u3042\u306a\u305f\u306eLagoon\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306ewebhook-handler\u3078\u306e\u30eb\u30fc\u30c8\u3067\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002
            4. Choose from a full list of triggers\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u4ee5\u4e0b\u3092\u9078\u629e\u3057\u307e\u3059:

              • Repository
                • PUsh
              • Pull Request
                • Created
                • Updated
                • Approved
                • Approval removed
                • Merged
                • Declined

              5. Save\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066Bitbucket\u306e\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u8a2d\u5b9a\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/first-deployment/","title":"\u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4","text":"

            \u6ce8\u610f:

            Drupal\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3001Drupal\u306e\u521d\u56de\u30c7\u30d7\u30ed\u30a4\u3092\u304a\u8aad\u307f\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/first-deployment/#1","title":"1. \u6e96\u5099\u304c\u6574\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059","text":"

            \u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u6210\u529f\u3055\u305b\u308b\u305f\u3081\u306b\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304cLagoon\u5316\u3055\u308c\u3066\u304a\u308a\u3001Lagoon\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3082\u3057\u305d\u3046\u3067\u306a\u3044\u5834\u5408\u3001\u307e\u305f\u306f\u78ba\u4fe1\u304c\u6301\u3066\u306a\u3044\u5834\u5408\u3001\u307e\u305f\u306f\u99b4\u67d3\u307f\u304c\u306a\u3044\u5834\u5408\u306f\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u306e\u30ac\u30a4\u30c9\u306b\u623b\u3063\u3066\u3069\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3059\u308b\u304b\u898b\u3066\u304b\u3089\u3001\u518d\u5ea6\u3053\u306e\u30da\u30fc\u30b8\u306b\u6765\u3066\u304f\u3060\u3055\u3044\uff01

            "},{"location":"ja/using-lagoon-the-basics/first-deployment/#2","title":"2. \u30d7\u30c3\u30b7\u30e5","text":"

            Lagoon\u3067\u306f\u3001\u30c7\u30d7\u30ed\u30a4\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u30d6\u30e9\u30f3\u30c1\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u65b0\u3057\u3044\u30c7\u30d7\u30ed\u30a4\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

            \u65b0\u3057\u3044\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3082\u306e\u304c\u306a\u3044\u5834\u5408\u3067\u3082\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\uff01\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            Git push
            git commit --allow-empty -m \"go, go! Lagoon!\"\ngit push\n

            \u3053\u308c\u306b\u3088\u308a\u30d7\u30c3\u30b7\u30e5\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u3001Git\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u304c\u8a2d\u5b9a\u3055\u308c\u305fWebhook\u3092\u901a\u3058\u3066Lagoon\u306b\u3053\u306e\u30d7\u30c3\u30b7\u30e5\u3092\u901a\u77e5\u3057\u307e\u3059\u3002

            \u3059\u3079\u3066\u6b63\u3057\u3051\u308c\u3070\u8a2d\u5b9a\u3055\u308c\u305f\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u306e\u901a\u77e5\u3092\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002(\u3053\u308c\u306f\u89aa\u5207\u306aLagoon\u306e\u7ba1\u7406\u8005\u304c\u8a2d\u5b9a\u3057\u305f\u3082\u306e\u3067\u3059)

            \u3053\u308c\u306f\u3001Lagoon\u304c\u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u958b\u59cb\u3057\u305f\u3053\u3068\u3092\u901a\u77e5\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306e\u5927\u304d\u3055\u3084\u30b3\u30f3\u30c6\u30ca\u306e\u91cf\u306b\u3088\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u306b\u306f\u6570\u79d2\u304b\u304b\u308a\u307e\u3059\u3002\u30ea\u30e9\u30c3\u30af\u30b9\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4eca\u4f55\u304c\u8d77\u3053\u3063\u3066\u3044\u308b\u306e\u304b\u77e5\u308a\u305f\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u30d7\u30ed\u30bb\u30b9\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            Lagoon UI \u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u5c55\u958b\u306e\u9032\u884c\u72b6\u6cc1\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059 (\u3053\u308c\u306b\u3064\u3044\u3066\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044)\u3002

            "},{"location":"ja/using-lagoon-the-basics/first-deployment/#3","title":"3. \u5b8c\u4e86\u3057\u307e\u3057\u305f","text":"

            Lagoon\u304c\u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u3092\u5b8c\u4e86\u3059\u308b\u3068\u3001\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\u306b2\u3064\u76ee\u306e\u901a\u77e5\u3092\u9001\u308a\u307e\u3059\u3002\u3053\u3053\u306b\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

            \u3053\u308c\u306b\u306f\u4ee5\u4e0b\u306e\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:

            • \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8
            • \u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c1\u3068Git SHA
            • \u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\u306e\u30ed\u30b0\u3078\u306e\u30ea\u30f3\u30af
            • \u74b0\u5883\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8(URL)\u3078\u306e\u30ea\u30f3\u30af

            \u307e\u305f\u3001\u3069\u306e\u3088\u3046\u306a\u901a\u77e5\u306a\u306e\u304b\u3092\u3059\u3050\u306b\u5224\u65ad\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 \u305d\u308c\u3089\u306f\u7d75\u6587\u5b57\u306b\u3088\u3063\u3066\u59cb\u307e\u308a\u307e\u3059\u3002\u30d3\u30eb\u30c9\u304c\u958b\u59cb\u3057\u305f\u3060\u3051\u306e\u60c5\u5831\u3067\u3042\u308b\u304b\u3001\u6210\u529f\u3067\u3042\u308b\u304b\u3001\u307e\u305f\u306f\u5931\u6557\u3067\u3042\u308b\u304b\u3002

            \u305d\u308c\u3060\u3051\u3067\u3059\uff01\u3042\u307e\u308a\u96e3\u3057\u304f\u306a\u304b\u3063\u305f\u3053\u3068\u3092\u9858\u3063\u3066\u3044\u307e\u3059\u3002devOps\u3092\u5229\u7528\u53ef\u80fd\u306b\u3059\u308b\u3053\u3068\u304c\u79c1\u305f\u3061\u306e\u76ee\u6a19\u3067\u3059\uff01

            "},{"location":"ja/using-lagoon-the-basics/first-deployment/#_2","title":"\u4ed6\u306e\u30d6\u30e9\u30f3\u30c1\u3084\u672c\u756a\u74b0\u5883\u306b\u3064\u3044\u3066\u306f\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f","text":"

            \u3053\u308c\u304cLagoon\u306e\u826f\u3044\u3068\u3053\u308d\u3067\u3059\u3002\u305d\u308c\u3089\u306f\u307e\u3063\u305f\u304f\u540c\u3058\u65b9\u6cd5\u3067\u3059\uff01\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3060\u3051\u3067\u3001\u305d\u306e\u30d6\u30e9\u30f3\u30c1\u304c\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/first-deployment/#_3","title":"\u5931\u6557\uff1f\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044","text":"

            \u30c7\u30d7\u30ed\u30a4\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u304b\uff1f\u79c1\u305f\u3061\u304c\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\u3002

            1. Drupal\u30b5\u30a4\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u5834\u5408\u3001Drupal\u306e\u521d\u56de\u30c7\u30d7\u30ed\u30a4\u3092\u8aad\u3080\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u306a\u305c\u3053\u308c\u304c\u8d77\u3053\u308b\u306e\u304b\u3092\u8aac\u660e\u3057\u307e\u3059\u3002
            2. \u30a8\u30e9\u30fc\u901a\u77e5\u306e Logs \u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d7\u30ed\u30bb\u30b9\u306e\u3069\u3053\u3067\u5931\u6557\u304c\u767a\u751f\u3057\u305f\u304b\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002
            3. \u3082\u3057\u7406\u89e3\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u30b5\u30dd\u30fc\u30c8\u306b\u5c0b\u306d\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u79c1\u305f\u3061\u304c\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\uff01
            4. \u30b5\u30dd\u30fc\u30c8\u30c1\u30e3\u30f3\u30cd\u30eb\u307e\u305f\u306fDiscord\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u79c1\u305f\u3061\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002
            "},{"location":"ja/using-lagoon-the-basics/going-live/","title":"\u30e9\u30a4\u30d6\u914d\u4fe1\u958b\u59cb","text":"

            \u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3001\u3042\u306a\u305f\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u304cLagoon\u4e0a\u3067\u30e9\u30a4\u30d6\u914d\u4fe1\u3059\u308b\u4e00\u6b69\u624b\u524d\u306b\u6765\u307e\u3057\u305f\uff01\u3053\u308c\u3092\u3067\u304d\u308b\u3060\u3051\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u308b\u305f\u3081\u306b\u3001\u6700\u5f8c\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\u3092\u3054\u7528\u610f\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u3001\u30b5\u30a4\u30c8\u3092\u30e9\u30a4\u30d6\u914d\u4fe1\u3059\u308b\u524d\u306b\u6700\u5f8c\u306b\u78ba\u8a8d\u3059\u3079\u304d\u3053\u3068\u3092\u30ac\u30a4\u30c9\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/going-live/#lagoonyml","title":".lagoon.yml\u3092\u78ba\u8a8d\u3059\u308b","text":""},{"location":"ja/using-lagoon-the-basics/going-live/#ssl","title":"\u30eb\u30fc\u30c8 / SSL","text":"

            \u3042\u306a\u305f\u306e.lagoon.yml\u306b\u3059\u3079\u3066\u306e\u30eb\u30fc\u30c8\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30c9\u30e1\u30a4\u30f3\u3092Lagoon\u306b\u5411\u3051\u306a\u3044\u5834\u5408\u3001Let's Encrypt(LE)\u306e\u8a3c\u660e\u66f8\u306e\u4f5c\u6210\u3092\u7121\u52b9\u306b\u3059\u3079\u304d\u3067\u3042\u308b\u3053\u3068\u3092\u8a8d\u8b58\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u307e\u307e\u3067\u306f\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002Lagoon\u306b\u5411\u3051\u3066\u3044\u306a\u3044\u30c9\u30e1\u30a4\u30f3\u306f\u3001Let's Encrypt\u306e\u5236\u9650\u3092\u8d85\u3048\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u3057\u3070\u3089\u304f\u3059\u308b\u3068\u7121\u52b9\u306b\u306a\u308a\u307e\u3059\u3002

            \u8a3c\u660e\u6a5f\u95a2(CA)\u306b\u3088\u308b\u7f72\u540d\u4ed8\u304d\u8a3c\u660e\u66f8\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001tls-acme\u3092false\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u304c\u3001insecure\u30d5\u30e9\u30b0\u306fAllow\u307e\u305f\u306fRedirect\u306b\u8a2d\u5b9a\u3057\u305f\u307e\u307e\u306b\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002CA\u8a3c\u660e\u66f8\u306e\u5834\u5408\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u30eb\u30fc\u30c8\u3068\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308bSSL\u8a3c\u660e\u66f8\u3092\u77e5\u3089\u305b\u3066\u304f\u3060\u3055\u3044\u3002

            .lagoon.yml
            environments:\nmain:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'false'\ninsecure: Allow\n- www.example.com:\ntls-acme: 'false'\ninsecure: Allow\n

            \u6b21\u306b DNS\u30a8\u30f3\u30c8\u30ea\u304c\u3042\u306a\u305f\u306eLagoon\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u6307\u3059\u3088\u3046\u306b\u306a\u308b\u3068\u3001\u30d5\u30e9\u30b0\u3092\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059:tls-acme \u3092 true \u306b\u3001insecure \u3092 Redirect \u306b\u3057\u307e\u3059\u3002

            .lagoon.yml
            environments:\nmain:\nroutes:\n- nginx:\n- example.com:\ntls-acme: 'true'\ninsecure: Redirect\n- www.example.com:\ntls-acme: 'true'\ninsecure: Redirect\n

            \u6ce8\u610f

            \u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u3059\u3079\u3066\u306e\u30da\u30fc\u30b8\u3092\u78ba\u8a8d\u3059\u308b\u306e\u306f\u5c11\u3057\u624b\u9593\u304c\u304b\u304b\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306e\u3067\u3001mixed-content-scan\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30b5\u30a4\u30c8\u5168\u4f53\u3092\u30af\u30ed\u30fc\u30eb\u3057\u3001\u975eHTTPS\u30b5\u30a4\u30c8\u304b\u3089\u306e\u30a2\u30bb\u30c3\u30c8\u3092\u542b\u3080\u30da\u30fc\u30b8\u3092\u8fd4\u3057\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/going-live/#_2","title":"\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306b\u3064\u3044\u3066","text":"

            \u975ewww\u304b\u3089www\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u305d\u308c\u3089\u304c redirects-map.conf \u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167

            "},{"location":"ja/using-lagoon-the-basics/going-live/#cron-jobs","title":"Cron jobs","text":"

            production\u74b0\u5883\u7528\u306eCron jobs\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002.lagoon.yml\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/going-live/#dns","title":"DNS","text":"

            \u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u304camazee.io\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u3067\u304d\u308b\u3060\u3051\u30b9\u30e0\u30fc\u30ba\u306b\u63a5\u7d9a\u3067\u304d\u308b\u3088\u3046\u306b\u3001\u5c02\u7528\u306e\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u30fcDNS\u30ec\u30b3\u30fc\u30c9\u3092\u7528\u610f\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6280\u8853\u7684\u306aDNS\u30ea\u30bd\u30fc\u30b9\u30ec\u30b3\u30fc\u30c9\u306f\u3001\u3042\u306a\u305f\u306e\u30b5\u30a4\u30c8\u3092amazee.io\u306e\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306b\u30ea\u30f3\u30af\u3055\u308c\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u4ed6\u306e\u76ee\u7684\u3067\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002CNAME\u30ec\u30b3\u30fc\u30c9\u306b\u7591\u554f\u304c\u3042\u308b\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u6b63\u78ba\u306aCNAME\u3092\u8a2d\u5b9a\u3057\u3066\u3082\u3089\u3063\u3066\u304f\u3060\u3055\u3044\u3002

            amazee.io\u306e\u4f8b: <region-identifier>.amazee.io

            \u30c9\u30e1\u30a4\u30f3\u3092Lagoon\u306b\u5207\u308a\u66ff\u3048\u308b\u524d\u306b\u3001\uff08\u30e9\u30a4\u30d6\u306b\u306a\u308b\u524d\u306b\uff09Time-to-Live (TTL)\u3092\u4e0b\u3052\u3066\u304a\u304f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u53e4\u3044\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u65b0\u3057\u3044\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u5207\u308a\u66ff\u3048\u304c\u8fc5\u901f\u306b\u884c\u308f\u308c\u307e\u3059\u3002\u901a\u5e38\u3001DNS\u306e\u5207\u308a\u66ff\u3048\u524d\u306b\u306fTTL\u3092300-600\u79d2\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002TTL\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u60c5\u5831

            \u60c5\u5831:

            \u3053\u306e\u60c5\u5831\u306famazee.io\u304c\u30db\u30b9\u30c8\u3057\u3066\u3044\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306e\u307f\u95a2\u9023\u3057\u3066\u304a\u308a\u3001\u307e\u3082\u306a\u304f\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304b\u3089\u524a\u9664\u3055\u308c\u3001amazee.io\u56fa\u6709\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059

            "},{"location":"ja/using-lagoon-the-basics/going-live/#fastly","title":"Fastly\u306e\u63a8\u5968\u8a2d\u5b9a","text":"

            \u30b5\u30d6\u30c9\u30e1\u30a4\u30f3 (CNAME)

            \u30b5\u30d6\u30c9\u30e1\u30a4\u30f3(\u4f8b: www.example.com.)\u306eDNS\u30ec\u30b3\u30fc\u30c9\u3092Lagoon\u306b\u5411\u3051\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306bCNAME\u30ec\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a

            CNAME: cdn.amazee.io

            \u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3(A/AAAA) \u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3(example.com.\u306a\u3069)\u306e\u8a2d\u5b9a\u306f\u3001DNS\u4ed5\u69d8\u3067\u306f\u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3\u304cCNAME\u3092\u6307\u3059\u3053\u3068\u3092\u8a31\u53ef\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u5384\u4ecb\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u4ee5\u4e0b\u306eA\u30ec\u30b3\u30fc\u30c9\u3068AAAA\u30ec\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u4e0b\u8a18\u306e\u5404IP\u306b\u500b\u5225\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\uff1a

            • A: 151.101.2.191
            • A: 151.101.66.191
            • A: 151.101.130.191
            • A: 151.101.194.191
            • AAAA: 2a04:4e42::703
            • AAAA: 2a04:4e42:200::703
            • AAAA: 2a04:4e42:400::703
            • AAAA: 2a04:4e42:600::703

            \u6ce8\u610f:

            \u9759\u7684IP\u306e\u8a2d\u5b9a\u306f\u63a8\u5968\u3057\u307e\u305b\u3093 DNS\u30be\u30fc\u30f3\u5185\u306eIP\u30a2\u30c9\u30ec\u30b9\u3002Lagoon\u306e\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u30a4\u30f3\u30d5\u30e9\u304c\u6642\u9593\u3068\u3068\u3082\u306b\u5909\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u9759\u7684IP\u30a2\u30c9\u30ec\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u30b5\u30a4\u30c8\u306e\u5229\u7528\u53ef\u80fd\u6027\u306b\u5f71\u97ff\u3092\u53ca\u307c\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/going-live/#_3","title":"\u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3","text":"

            \u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3(\u4f8b:example.com)\u306e\u8a2d\u5b9a\u306f\u3001DNS\u306e\u4ed5\u69d8\u304c\u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3\u3092CNAME\u30a8\u30f3\u30c8\u30ea\u306b\u30dd\u30a4\u30f3\u30c8\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u5c11\u3005\u30c8\u30ea\u30c3\u30ad\u30fc\u306b\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002DNS\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u3088\u3063\u3066\u306f\u3001\u30ec\u30b3\u30fc\u30c9\u540d\u304c\u7570\u306a\u308a\u307e\u3059:

            • ALIAS at DNSimple
            • ANAME at DNS Made Easy
            • ANAME at easyDNS
            • ALIAS at PointDNS
            • CNAME at CloudFlare
            • CNAME at NS1

            DNS\u30d7\u30ed\u30d0\u30a4\u30c0\u304c\u30eb\u30fc\u30c8\u30c9\u30e1\u30a4\u30f3\u7528\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3082\u3089\u3044\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/going-live/#_4","title":"\u672c\u756a\u74b0\u5883","text":"

            Lagoon\u306f\u958b\u767a\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u306e\u6982\u5ff5\u3092\u7406\u89e3\u3057\u3066\u3044\u307e\u3059\u3002\u958b\u767a\u74b0\u5883\u306f\u81ea\u52d5\u7684\u306bnoindex\u3068nofollow\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u9001\u4fe1\u3057\u3001\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u306b\u3088\u308b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u5316\u3092\u7981\u6b62\u3057\u307e\u3059\u3002

            X-Robots-Tag: noindex, nofollow

            \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u4e2d\u306b\u3001\u672c\u756a\u74b0\u5883\u306f\u3059\u3067\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002\u3082\u3057\u307e\u3060\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001 \u7701\u7565\u3055\u308c\u305f\u5834\u5408\u3001\u3042\u306a\u305f\u306e\u74b0\u5883\u306f\u958b\u767a\u30e2\u30fc\u30c9\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002Lagoon\u306e\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u74b0\u5883\u304c\u672c\u756a\u74b0\u5883\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u672c\u756a\u74b0\u5883\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u77e5\u3089\u305b\u3066\u3001\u30b7\u30b9\u30c6\u30e0\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3089\u3063\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/lagoon-build-errors-and-warnings/","title":"Lagoon\u30d3\u30eb\u30c9\u306e\u30a8\u30e9\u30fc\u3068\u8b66\u544a","text":"

            \u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306eLagoon\u3067\u306f\u3001\u30d3\u30eb\u30c9\u306b\u6f5c\u5728\u7684\u306a\u554f\u984c\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u8b58\u5225\u3057\u3001\u5931\u6557\u305b\u305a\u306b\u305d\u308c\u3089\u3092\u8b66\u544a\u3068\u3057\u3066\u30cf\u30a4\u30e9\u30a4\u30c8\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u307e\u305fLagoon\u30c1\u30fc\u30e0\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u5bfe\u3057\u3066\u4e88\u5b9a\u3055\u308c\u3066\u3044\u308b\u975e\u63a8\u5968\u4e8b\u9805\u3084\u6a5f\u80fd\u306e\u5909\u66f4\u3092\u901a\u77e5\u3059\u308b\u65b9\u6cd5\u3067\u3082\u3042\u308a\u307e\u3059\u3002

            \u4f8b\u3048\u3070\u3001Lagoon\u30c1\u30fc\u30e0\u304c .lagoon.yml \u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u5909\u66f4\u3059\u3079\u304d\u3053\u3068\u304c\u3042\u308b\u5834\u5408\u3001\u8b66\u544a\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306f\u3001\u305d\u308c\u3092\u7834\u58ca\u7684\u306a\u5909\u66f4\u306b\u306a\u308b\u524d\u306b\u4fee\u6b63\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u53ef\u80fd\u306a\u9650\u308a\u65e9\u671f\u306b\u89e3\u6c7a\u3059\u308b\u3079\u304d\u3067\u3042\u308a\u3001\u5c06\u6765\u306eLagoon\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u306f\u30a8\u30e9\u30fc\u3092\u51e6\u7406\u3067\u304d\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u30d3\u30eb\u30c9\u3092\u505c\u6b62\u3059\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002

            \u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\u65b9\u6cd5\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u3001Lagoon\u306e\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3059\u308b\u304b\u3001Lagoon\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u8cea\u554f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/lagoon-build-errors-and-warnings/#docker-compose-errors","title":"Docker Compose\u306e\u30a8\u30e9\u30fc","text":"

            \u3088\u304f\u3042\u308bDocker Compose\u306e\u554f\u984c\u306b\u3064\u3044\u3066\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3082\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306e\u554f\u984c\u306e\u4e00\u90e8\u306f\u305d\u3053\u3067\u30ab\u30d0\u30fc\u3055\u308c\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

            env_file \u30a8\u30e9\u30fc\u3092\u793a\u3059 Lagoon \u30d3\u30eb\u30c9\u51fa\u529b
            > an env_file is defined in your docker-compose file, but no matching file found\n

            Docker Compose \u30d3\u30eb\u30c9\u6642\u306b\u53c2\u7167\u3055\u308c\u308benv\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u671f\u5f85\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u305d\u306eenv\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u306e\u307f\u5b58\u5728\u3059\u308b\u304b\u3001Dockerfile\u304b\u3089\u9664\u5916\u3055\u308c\u3066\u3044\u307e\u3059\u3002Lagoon\u30c1\u30fc\u30e0\u306f\u3001Docker Compose\u304c\u3053\u306e\u30a8\u30e9\u30fc\u3092\u7121\u8996\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u305f\u3081\u306e\u4f5c\u696d\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u89e3\u6c7a\u7b56\u304c\u898b\u3064\u304b\u308b\u307e\u3067\u3053\u306e\u8b66\u544a\u306f\u7d9a\u304d\u307e\u3059\u3002

            \u6587\u5b57\u5217\u30ad\u30fc\u30a8\u30e9\u30fc\u3092\u793a\u3059Lagoon\u30d3\u30eb\u30c9\u51fa\u529b
            > an invalid string key was detected in your docker-compose file\n

            \u3042\u306a\u305f\u306eDocker Compose\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3059\u3001\u304a\u305d\u3089\u304f\u5f62\u5f0f\u304c\u4e0d\u6b63\u307e\u305f\u306f\u30a8\u30a4\u30ea\u30a2\u30b9\u3084\u30a2\u30f3\u30ab\u30fc\u306e\u4e0d\u5099\u306b\u95a2\u9023\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u898b\u308c\u3070\u305d\u306e\u5834\u6240\u304c\u308f\u304b\u308b\u306f\u305a\u3067\u3059\u3002

            yaml\u691c\u8a3c\u30a8\u30e9\u30fc\u3092\u793a\u3059Lagoon\u30d3\u30eb\u30c9\u51fa\u529b
            > There are yaml validation errors in your docker-compose file that should be corrected\n

            \u3042\u306a\u305f\u306eDocker Compose\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308a\u307e\u3059\u3001\u304a\u305d\u3089\u304f\u5f62\u5f0f\u304c\u4e0d\u6b63\u307e\u305f\u306f\u30a8\u30a4\u30ea\u30a2\u30b9\u3084\u30a2\u30f3\u30ab\u30fc\u306e\u4e0d\u5099\u306b\u95a2\u9023\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u898b\u308c\u3070\u305d\u306e\u5834\u6240\u304c\u308f\u304b\u308b\u306f\u305a\u3067\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/local-development-environments/","title":"\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883","text":"

            Lagoon\u306b\u306fDocker\u3068Docker Compose(\u307b\u3068\u3093\u3069\u304cDocker\u3068\u4e00\u7dd2\u306b\u51fa\u8377\u3055\u308c\u3066\u3044\u307e\u3059)\u306b\u3057\u304b\u4f9d\u5b58\u3057\u307e\u305b\u3093\u304c\u3001Docker\u306b\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306b\u5f79\u7acb\u3064\u3082\u306e\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059:

            • \u30ca\u30a4\u30b9\u306aURL\u3068HTTPS\u30aa\u30d5\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u305f\u3081\u306eHTTP\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3002
            • IP\u30a2\u30c9\u30ec\u30b9\u3092\u899a\u3048\u3066\u304a\u304f\u5fc5\u8981\u304c\u306a\u3044DNS\u30b7\u30b9\u30c6\u30e0\u3002
            • \u30b3\u30f3\u30c6\u30ca\u5185\u3067SSH\u30ad\u30fc\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306eSSH\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3002
            • \u30e1\u30fc\u30eb\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u53d7\u4fe1\u3057\u3066\u8868\u793a\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3002
            Warning

            \u30ed\u30fc\u30ab\u30eb\u3067Lagoon\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\uff01\u3053\u308c\u306f\u6df7\u4e71\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002Lagoon\u306f\u3042\u306a\u305f\u306e\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3092\u672c\u756a\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308a\u3001\u74b0\u5883\u305d\u306e\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

            "},{"location":"ja/using-lagoon-the-basics/local-development-environments/#pygmyddevlando-","title":"pygmy\u3001DDEV\u3001\u307e\u305f\u306fLando - \u9078\u629e\u306f\u3042\u306a\u305f\u6b21\u7b2c\u3067\u3059\u3002","text":""},{"location":"ja/using-lagoon-the-basics/local-development-environments/#pygmy","title":"pygmy","text":"

            Lagoon\u306f\u4f1d\u7d71\u7684\u306bpygmy\u3068\u6700\u3082\u826f\u597d\u306b\u52d5\u4f5c\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u4e0a\u8a18\u306e\u30c4\u30fc\u30eb\u306eamazee.io\u30d5\u30ec\u30fc\u30d0\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308a\u3001Lagoon\u3068\u305d\u306e\u307e\u307e\u52d5\u4f5c\u3057\u307e\u3059\u3002\u3053\u308c\u306fhttps://github.com/pygmystack/pygmy\u306b\u3042\u308a\u307e\u3059\u3002

            pygmy\u306fGolang\u3067\u66f8\u304b\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059:

            HomeBrew\u3067\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
            brew tap pygmystack/pygmy && brew install pygmy\n

            pygmy\u306e\u8a73\u7d30\u306a\u4f7f\u7528\u65b9\u6cd5\u3084\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u60c5\u5831\u306b\u3064\u3044\u3066\u306f\u3001\u305d\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/local-development-environments/#lando","title":"Lando","text":"

            Lagoon\u306fLando\u3068\u975e\u5e38\u306b\u3088\u304f\u7d44\u307f\u5408\u308f\u3055\u308c\u3066\u3044\u307e\u3059\uff01\u8a73\u7d30\u306a\u60c5\u5831\u306f\u3001https://docs.lando.dev/config/lagoon.html\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u4f7f\u7528\u3066\u304f\u3060\u3055\u3044\u3002

            Lando\u306eLagoon\u5411\u3051\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306fLando\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u3068\u3063\u3066\u306f\u99b4\u67d3\u307f\u6df1\u3044\u3082\u306e\u3067\u3042\u308a\u3001\u307e\u305fLagoon\u306e\u521d\u5fc3\u8005\u304c\u59cb\u3081\u308b\u306e\u306b\u3082\u6700\u3082\u7c21\u5358\u306a\u65b9\u6cd5\u306b\u306a\u308a\u307e\u3059\u3002\u4e00\u65b9\u3001Pygmy\u306fDocker\u3068\u3088\u308a\u5bc6\u63a5\u306b\u7d71\u5408\u3055\u308c\u3066\u304a\u308a\u3001\u3088\u308a\u8907\u96d1\u306a\u30b7\u30ca\u30ea\u30aa\u3084\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u304c\u3088\u308a\u6df1\u3044\u7406\u89e3\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/local-development-environments/#ddev","title":"DDEV","text":"

            Lagoon\u306fDDEV\u3067\u3082\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\uff01\u59cb\u3081\u308b\u305f\u3081\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002https://ddev.readthedocs.io/en/stable/users/providers/lagoon/\u3002

            \u4ee5\u524d\u306b\u306f\u3001Docksal\u3084Docker4Drupal\u306a\u3069\u306e\u4ed6\u306e\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u30b5\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u8a55\u4fa1\u3057\u305f\u3053\u3068\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u5c06\u6765\u7684\u306b\u3053\u308c\u3089\u306e\u30b5\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u53ef\u80fd\u6027\u306f\u3042\u308a\u307e\u3059\u304c\u3001\u73fe\u5728\u306e\u3068\u3053\u308d\u306f\u65e2\u5b58\u306e\u30c4\u30fc\u30eb\u3078\u306e\u30b5\u30dd\u30fc\u30c8\u306b\u7126\u70b9\u3092\u5f53\u3066\u3066\u3044\u307e\u3059\u3002

            "},{"location":"ja/using-lagoon-the-basics/setup-project/","title":"\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a","text":"

            \u6ce8\u610f:

            \u6211\u3005\u306f\u5168\u3066\u306e\u4eba\u304cLagoon\u3092\u4f7f\u3063\u3066\u81ea\u5206\u81ea\u8eab\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3057\u3001\u69cb\u6210\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u305f\u3081\u306eCLI\u3068GraphQL API\u306e\u8a2d\u5b9a\u306b\u71b1\u5fc3\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u73fe\u5728\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u30ea\u30ea\u30fc\u30b9\u3067\u304d\u308b\u524d\u306b\u66f4\u306a\u308b\u30c6\u30b9\u30c8\u304c\u5fc5\u8981\u306a\u306e\u3067\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\uff01

            \u305d\u308c\u307e\u3067\u306f\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u306fLagoon\u306e\u7ba1\u7406\u8005\u3068\u8a71\u3057\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u306b\u3064\u3044\u3066\u306f\u554f\u984c\u306a\u3044\u3067\u3059\u3001\u5f7c\u3089\u306fAPI\u3088\u308a\u3082\u305a\u3063\u3068\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u3067\u3059\u3002\ud83d\ude0a

            \u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u306e\u305f\u3081\u306b\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u6e96\u5099\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044:

            • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u540d\u524d
              • \u3053\u306e\u540d\u524d\u306f\u5c0f\u6587\u5b57\u3001\u6570\u5b57\u3001\u30c0\u30c3\u30b7\u30e5\u306e\u307f\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059
              • \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u5185\u306b\u30c0\u30d6\u30eb\u30c0\u30c3\u30b7\u30e5(--)\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093
            • \u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53d6\u308a\u7d44\u3080\u3059\u3079\u3066\u306e\u4eba\u306eSSH\u516c\u958b\u9375\u3001\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3001\u540d\u524d\u3002\u3053\u3053\u306b\u306f\u3001GitHub\u3001GitLab\u3001Bitbucket \u306eSSH\u30ad\u30fc\u306e\u751f\u6210\u3068\u30b3\u30d4\u30fc\u306b\u3064\u3044\u3066\u306e\u6307\u793a\u304c\u3042\u308a\u307e\u3059
            • \u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u304c\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u308bGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306eURL(git@example.com:test/test.git)
            • \u3042\u306a\u305f\u304c\u4f7f\u7528\u3059\u308bGit\u30d6\u30e9\u30f3\u30c1\u306e\u540d\u524d\u3042\u306a\u305f\u306e\u672c\u756a\u74b0\u5883\u3067\u4f7f\u7528\u3057\u305f\u3044\u74b0\u5883\u306b\u3064\u3044\u3066 (\u74b0\u5883\u306e\u7a2e\u985e \u3067\u74b0\u5883\u306e\u8a73\u7d30\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)
            • \u8ffd\u52a0\u306e\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u3044\u30d6\u30e9\u30f3\u30c1\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3002Lagoon\u3067\u306f\u3001\u6b63\u898f\u8868\u73fe\u3067\u30d6\u30e9\u30f3\u30c1\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u540d\u524d\u3092\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u3001\u3042\u306a\u305f\u306eLagoon\u7ba1\u7406\u8005\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

            \u7279\u5b9a\u306e\u91cd\u8981\u306a\u30d6\u30e9\u30f3\u30c1(\u4f8b\u3048\u3070develop\u3084main)\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u6700\u7d42\u7684\u306a\u5224\u65ad\u306f\u3042\u306a\u305f\u6b21\u7b2c\u3067\u3059\uff01(\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u8a73\u7d30\u60c5\u5831\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)

            "},{"location":"ja/using-lagoon-the-basics/setup-project/#1-lagoon","title":"1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304cLagoon\u5316\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b","text":"

            \u3053\u308c\u306f\u3001.lagoon.yml\u30d5\u30a1\u30a4\u30eb\u3068docker-compose.yml\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u306a\u305f\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u5b58\u5728\u3057\u3001\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

            \u3082\u3057\u3053\u308c\u304c\u5b9f\u73fe\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u5148\u306b\u9032\u3080\u524d\u306b\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9\u306e\u30ea\u30b9\u30c8\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002

            "},{"location":"ja/using-lagoon-the-basics/setup-project/#2","title":"2. \u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3059\u308b","text":"

            \u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306b\u3001Lagoon\u306f\u30b3\u30fc\u30c9\u3078\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u8a2d\u8a08\u4e0a\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u305f\u3081\u306bLagoon\u306f\u3042\u306a\u305f\u306eGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3078\u306e\u8aad\u307f\u53d6\u308a\u30a2\u30af\u30bb\u30b9\u3057\u304b\u5fc5\u8981\u3068\u3057\u307e\u305b\u3093

            Lagoon\u306e\u7ba1\u7406\u8005\u304b\u3089\u3001\u8aad\u307f\u53d6\u308a\u30a2\u30af\u30bb\u30b9\u3092\u4e0e\u3048\u308b\u3079\u304dSSH\u516c\u958b\u9375\u3084Git\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6559\u3048\u3066\u3082\u3089\u3046\u5fc5\u7528\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

            "},{"location":"ja/using-lagoon-the-basics/setup-project/#3-webhooks","title":"3. Webhooks\u306e\u8a2d\u5b9a","text":"

            Lagoon\u306f\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u8d77\u3053\u3063\u3066\u3044\u308b\u3044\u304f\u3064\u304b\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u77e5\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u73fe\u5728\u306f\u30d7\u30c3\u30b7\u30e5\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u3059\u304c\u3001\u5c06\u6765\u7684\u306b\u306f\u3082\u3063\u3068\u8ffd\u52a0\u3055\u308c\u308b\u4e88\u5b9a\u3067\u3059\u3002

            Lagoon\u306f\u591a\u304f\u306e\u7570\u306a\u308bGit\u30db\u30b9\u30c8\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u3053\u308c\u3089\u306e\u6307\u793a\u3092\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u5206\u5272\u3057\u307e\u3057\u305f:Webhooks\u306e\u8a2d\u5b9a\u3002

            "},{"location":"ja/using-lagoon-the-basics/setup-project/#4","title":"4. \u6b21\u306b:\u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8","text":"

            \u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3001\u3042\u306a\u305f\u306f\u4eca\u6700\u521d\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\u3059\u308b\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002

            "}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 8d6be4a798..e2c2068a01 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,2162 +2,2162 @@ https://docs.lagoon.sh/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/code-of-conduct/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/contributing/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/laravel/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/node/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/options/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/other/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/php/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/python/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/ruby/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/wordpress/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/automatic-updates/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/drush-9/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/first-deployment-of-drupal/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/integrate-drupal-and-fastly/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/phpunit-and-phpstorm/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/subfolders/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/services/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/services/mariadb/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/services/nginx/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/services/php-cli/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/services/redis/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/services/solr/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/applications/drupal/services/varnish/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/community/discord/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/community/moderation/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/community/participation/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/backups/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/base-images/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/environment-idling/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/environment-types/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/environment-variables/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/feature-flags/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/service-types/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-advanced/workflows/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/build-and-deploy-process/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/docker-compose-yml/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/lagoon-yml/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/building-blocks/deploy-targets/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/building-blocks/groups/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/building-blocks/notifications/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/building-blocks/organizations/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/building-blocks/projects/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/building-blocks/roles/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/concepts-basics/building-blocks/users/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/contributing-to-lagoon/api-debugging/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/contributing-to-lagoon/developing-lagoon/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/contributing-to-lagoon/documentation/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/contributing-to-lagoon/releasing/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/contributing-to-lagoon/tests/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/commons/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/deprecated-images/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/mariadb/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/mongodb/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/mysql/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/nginx/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/nodejs/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/opensearch/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/php-cli/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/php-fpm/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/postgres/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/python/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/rabbitmq/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/redis/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/ruby/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/solr/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/docker-images/varnish/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/add-group/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/add-project/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/bulk-storage-provisioner/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/create-user/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/deploy-project/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/gitlab/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/install-harbor/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/install-lagoon-remote/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/lagoon-backups/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/lagoon-cli/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/lagoon-core/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/lagoon-files/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/lagoon-logging/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/logs-concentrator/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/opendistro/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/querying-graphql/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/requirements/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/installing-lagoon/update-lagoon/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/interacting/graphql-queries/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/interacting/graphql/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/interacting/lagoon-ui/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/interacting/organizations/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/interacting/rbac/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/interacting/ssh/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/lagoonizing/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/logging/kibana-examples/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/logging/logging/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/other-tools/client-libraries/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/other-tools/sail/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.10.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.11.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.12.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.13.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.14.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.14.1/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.14.2/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.15.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.15.1/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.15.2/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.15.3/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.15.4/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.16.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.17.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.18.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.18.1/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.18.2/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.19.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.20.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.20.1/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.21.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/2.22.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/releases/policy/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/resources/faq/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/resources/glossary/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/resources/tutorials-and-webinars/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/active-standby/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/blackfire/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/custom-tasks/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/deploytarget-configs/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/nodejs/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/private-repositories/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/project-default-users-keys/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/setting-up-xdebug-with-lagoon/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/simplesaml/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/triggering-deployments/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/security-scanning/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/harbor-settings/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-the-basics/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-the-basics/configure-webhooks/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-the-basics/first-deployment/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-the-basics/going-live/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-the-basics/lagoon-build-errors-and-warnings/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-the-basics/local-development-environments/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/using-lagoon-the-basics/setup-project/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/code-of-conduct/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/contributing/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/laravel/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/node/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/options/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/other/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/php/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/python/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/ruby/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/wordpress/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/automatic-updates/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/drush-9/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/first-deployment-of-drupal/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/integrate-drupal-and-fastly/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/phpunit-and-phpstorm/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/subfolders/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/services/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/services/mariadb/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/services/nginx/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/services/php-cli/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/services/redis/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/services/solr/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/applications/drupal/services/varnish/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/community/discord/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/community/moderation/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/community/participation/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/backups/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/base-images/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/environment-idling/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/environment-types/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/environment-variables/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/feature-flags/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/service-types/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-advanced/workflows/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/build-and-deploy-process/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/docker-compose-yml/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/lagoon-yml/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/building-blocks/deploy-targets/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/building-blocks/groups/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/building-blocks/notifications/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/building-blocks/organizations/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/building-blocks/projects/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/building-blocks/roles/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/concepts-basics/building-blocks/users/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/contributing-to-lagoon/api-debugging/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/contributing-to-lagoon/developing-lagoon/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/contributing-to-lagoon/documentation/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/contributing-to-lagoon/releasing/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/contributing-to-lagoon/tests/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/commons/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/deprecated-images/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/mariadb/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/mongodb/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/mysql/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/nginx/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/nodejs/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/opensearch/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/php-cli/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/php-fpm/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/postgres/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/python/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/rabbitmq/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/redis/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/ruby/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/solr/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/docker-images/varnish/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/add-group/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/add-project/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/bulk-storage-provisioner/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/create-user/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/deploy-project/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/gitlab/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/install-harbor/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/install-lagoon-remote/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/lagoon-backups/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/lagoon-cli/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/lagoon-core/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/lagoon-files/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/lagoon-logging/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/logs-concentrator/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/opendistro/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/querying-graphql/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/requirements/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/update-lagoon/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/interacting/graphql-queries/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/interacting/graphql/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/interacting/lagoon-ui/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/interacting/organizations/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/interacting/rbac/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/interacting/ssh/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/installing-lagoon/efs-provisioner/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/lagoonizing/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/logging/kibana-examples/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/logging/logging/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/other-tools/client-libraries/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/resources/faq/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/resources/glossary/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/resources/tutorials-and-webinars/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/active-standby/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/blackfire/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/custom-tasks/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/deploytarget-configs/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/nodejs/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/private-repositories/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/project-default-users-keys/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/setting-up-xdebug-with-lagoon/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/simplesaml/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/triggering-deployments/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/security-scanning/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/harbor-settings/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-core/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-database/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistry/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-the-basics/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-the-basics/configure-webhooks/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-the-basics/first-deployment/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-the-basics/going-live/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-the-basics/lagoon-build-errors-and-warnings/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-the-basics/local-development-environments/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/using-lagoon-the-basics/setup-project/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/other-tools/sail/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.10.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.11.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.12.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.13.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.14.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.14.1/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.14.2/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.15.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.15.1/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.15.2/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.15.3/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.15.4/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.16.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.17.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.18.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.18.1/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.18.2/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.19.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.20.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.20.1/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.21.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/2.22.0/ - 2024-12-05 + 2024-12-16 daily https://docs.lagoon.sh/ja/releases/policy/ - 2024-12-05 + 2024-12-16 daily diff --git a/sitemap.xml.gz b/sitemap.xml.gz index d7d7d580a11b04eb48767d339004c22aa556ba44..a957bc57217408fa07b60d473a6d6c1b83ef93be 100644 GIT binary patch literal 5446 zcmV-M6}jpkiwFqCieF~}|8r?{Wo=<_E_iKh0Og(CdYih|h0pg@^yxWCO_H`*PgnQZ zcLm?R00A;qjS-cEQ?IMv2yo1gu!%i2?djc+$jJ?d?Ge!#AwZ z4^pL%I$l-Z=*RZO$1e}BpPRq=>(9z;vff|5J=K4+czu0+tbh9X=f6Hx|EyN?zxumO z#y{;}>FUoC8S96PrBdb(diD6@(f+XWt4y1XOn!!6!slQS28*xNZ?vx+ek)$FJmpKp zfB#IF$aX&-JFgsmt+w=6Ci3+s#VhA5GhF4&@Xw!CiZ3%}1LAq}T~nCD;^)VYZt@p9 zvB_WTeXBnn-?N&ZS_PK}av8)jPs-R(NO5S{PpVTYXQrGRC8E+)ZzLKKcl`Rw*CBCM zxU48L5i?VbS(-w)J->d!bxK?wZpIYb@{C-_d*29Q52Y>-J+B5La*5Zb5#sLYT%NTo zXpSO#-w25hr2s-VE3W88Uc1H!yeD*d+{LOO7q<0`5Or4uAn2W0$(&x+jcts$`%0H5 zuF7afF7MhjLfSo@%d>uyDk&7#^gb*P&Jj`{i(MXlqRN8NI|^@YBZNLs0!y5gMsBK? z;-D;&%A}^sU|a|um1%7-PSqE^3SOzw+1tlsGE@X3u@p+1AmK$OcN?A?dqs`*@O7jj zJYF+QfFTsQ;i;;Ow+aEvlVDka$#zs39xDkC;v5%X6suF4G8d-SsQ#~wR2!=JoVDO_ zJ1P$bOdDPV(JrXJrrg-;^ZIt3NHRJr0Z!L}MdygL2S{dDP<`u+%eV%j zzOn~GTYIrG%I<;Ep_FTo8mj}*T5@Je#e>ReN|aK+1S~pkRUj(unLOnYu3rKc6}Ku7 zl{cx@%S^rzC33KjMPsaZ8HwuPPsFs+Z!LRHe4ql7a#V^esprr%)7XMS$(YD=^4YcE za5*Ut0<8M+nyVm|n?hD6NxMx(5tX9~97somLGUy`p^ByB9tVd*5N=qrbHt+RkJc6T z<{fF6O1YssxJ_4tIK-Vc;RRu;B(-aq$1AxGvVpi4RJk-_NvRja#|pX*IJXBc{G>`* zF8;Y6e*J>3!_V!(3%}~X^B0fr<8$u4mg`U($$J5&B(UHQ>2`Cx^p&b^~DO$j#mnykZrMR>08|Jq&vYBdAONxebFfL7r;=pu zt#Opx2U-xh@AU7CVCuDPl+1fd0Ev@XTkNupkvPEW;lT!F!haF`cx`>7WZsto2wfID z*PN+%MKAb{cZ~2IasU7bEs}Q|$A}(e8T@#Y%VI+_cWWFg_pTO1?oyjnQ9O-$caD<$ zPz)k^GF_ydzENTa=p)_VqGC}b%;q<}*x#LF1V0jkh@MJo6PIn2&@XRZGT0!IuIUcf zD0yGpH@&|-D$QXWt})`iy!}gmdxZMExQ%0k4${#@)aG(NfOl4J}IPs%)TE6 za})tdv@^=+ve*}ZNn@x9#3L%RbznOOS8qS7u@&}_n=~GS^nq%yNS!nQge_Lw_UpD2 z$!L=57JvoEr3u92u-=XC$Tp|}i^_y75SUb$j72nowBE5m4CH_Sw66p!rXopnuo~2W z1!O`N7)-kWQSps5oHn0+DcG3Y>Oi#GjT7o;cCrR6J`=LAV2Ip=JL(@9$i=thrnf8= zr%l5afQ_T83Cm+Ch%D|pQ2{cMz9=k`Op;k5bg~9yEJIl+Ff!Fay>cu!iW#cM%HuN7 z@JuQL5wcTw5}}QfG|_bYV=-|^0>SuQa<#MHr-~IT8q-^6RDlI%QWywN6<;Z;Q=#g; zNc5AxR{<6lrzjAT<|(&?mYkj{0Sk&-^-L<2D;C@3UXSfNFR*V#LFM>(+P*Iurxl?{ z5G8<@JY3@Kp>!#zWqvU3KlQQJ#krH~Ycy@%fBt~|in^Os5sRrsUwihScu(fypf!!z zRzu7FW7e0>uxkD%{vmP&scY9yx-NzDl5H<8twqFg7Vtl8QxLg$I%VBc;wRKDN}tfx z(V=C(X@gw*lxD?MV5H3SW1I>5+=om=icvWWI_lp~{<9=6hM}wIr~#-w`wzV*b5_tz zlbs4z_^|l$@P$IoL(6_*o>I9ukST}sQVvm420W5`r8i={qKp`?fFnjo?_NoWa<3%(0-N%J zUdjuUl;OtZklr1s5ao_k2zf^;q<2RuM7bjs!rhT7WG3PrsgzsGo>LyEoSCwgrHZSq zE!l4x8Fvl)O4y}wVZLc5wPtEZE97_AzLOpaT^P41jZ}hVI$(JcyzxlnjKPuAcY z#R=K7z?Ay1$SGjSmgO-|D9~^l_k-ZL7GUmnZuXW3+EjpP^ue7~2PTyXX+TI(#^Uu- z&}c7mssv0lV^u&ZajA{m1cvFgrVFN51tuG(Fd&|$!=GU)<;FH>Sc;S|CTBI6xQ-eC z#75_dN=N-;qJenAl6%XA5?i|nUGYL{VUGnlVKmNaFhLzP0E(^dY8oVb$;!;sy=Qf> z<~!2xCTqe)c+v(SNXNtM8yKnwYiMNKn?+TZ?;;HSReBa#P zi@Y)NBVX5HADird0>7>EM)!cOwaa$`v*JN@I3Z$sXJ{Sk2&f!tpy@X^P)o(_q^gya zYtld*)!;HZVgMA|QYdXY7c(hC8`Xk~Y*HQ+SSst+#g)u{p(l0z62&;B84rO1+i zDh(%i;<-+3u_EPILAvHf%NWkr#R_+}ooF(==iWe@o}w-1tU#uTeQaVh4!x9&Ud zp$k?4!kD<68D=_NujtV`Pq3e?>qRh z5=i=qDho#P=)86AJNJPMWaz9ka#Ot&2hC$_HDL_nT9Cj@3qzu+zUWo(N*K_-0wgR$ zIY=18yQ22m8~JhUNKr`0W;lSPXrFqSD!bCRd7-}1wyfA>JHi-`RfWWHjs-}N)mcxO z3scKf|JO#U4Pk=La*)s+)rMrI4KIRd7t~+Vc71QVyC}|*U0`IO$~=(y?JT4|m*^SA zBJsY!8R*_nMoXC`Tv0v(?G%AUZ>$JPrCHEGn#sNdEFwcaFFZC(36@0nz-37fcxui-KnKefM6|cS~I`i#O(l(YMsTedbi&fp0(ac_&2R z;*MCnE(=XI_Pu|U_=jSU7&H&WhNYY`ibD-ZIL3l-NIL7D0+D2-mKmHb1qIL%T|b=6 zt|0sd8dri&sW0mX($-$qjIuicb*Kg%)>s-2*pf42yC76fQ@Wt~RiFTJOTvL^PxXlp zb^R((z_=yhz`RMdUS{%*E|fzBC_u(?7sI%jjzk{DAQ3wL3BdSn@+U5>)$#e=pAmUI1 z9pCJ9v#9#JwQe6>6*SMTB0b7Y7lk#}op#`hVyYy;OPG-64t6UE1B zx&k}50bdBEN?9)cxhsVIny!G*ZNL}8wz1T`(0ecE3gAZCzL+UV@FMHcTCPB=FYF6d z{qVm#LDkf91yp@uh{j@eWl6iFgcTyFpX-;>Y&bSqiswdTCv|~2wXG`;O%iFd8kd8| zYg!wcnT$(&M~l|vs~M#rvU2JIbE<4}rpb?ghcfW^j5UGT7_KQDollp5$E2@!E|2zt za61plPL!l`lI!;FfxvMgnCKH;C>~eN5?V9qPF3L@$Fw927+Om~-QK-JfLiQ1*s9D^ zNj3V`yZ`71LO{{)^zV#j@U?UQvG-(PLZ`Hv+2!1O=rHS*2iueh|3&lDwzcj*_P!2G z?y}&y=1j#alG%6cd(YpY1;c>W;(WJv@99G=zaMXPS!~EgZ@r^L-xUIiUTTvnqGwp| z=KY61R02w$Qp0Pfb^po3w7l+bRIw-$X7ih5^6%!oXFpN`N}o`B6_<1Wxq~!N8ElhI zn|FtC|B*v9dhc(NP>&jiaqo$PbfM{Ql2+Rpw|DQkLp7EWxi&1zI`@=Wk_7csQX&A3 zRp0@`964ARxAP#*^KqR249+uwKs|VKy!EKe)`4wuT)hvi%vNY2b286!`anS_uuiJO zk&6|#4aV)XG_tU|HK6cu3Bn;ctgRzG#0|FN}!I3NlomFHfiok@@R|Kb$NlFWmPL_d5W~d3sMy5KbSE=Pj zF+=zOdRz$(p-EXdNOmevBD7JGES*jXC|DeNa6EpOTzrv6x``wQbL# z_cS1~)?{XF4PARqT6>wP#h3anCZG)KxHPHe8}SdF>v3Jj9(G07=Fbkdy;`>x5zAS? z|FBI#=YsT7C0%aV<+_pQ^cJRM!0TJ$p#pEpU0nX(qL1YDX^TcjI2e9;sZOxG9ZPf@QjX=)fC~ zM9#?cpgdWIR~jcY&t+5U!$B&w2V%Otd!TS!2sV0qHnrtJb^eeiWY)pWDg_P9gf1+n zC}Z(@DacG6I#mT4ov|b=n7GtNZUV#fT9aneD+CRXQx%p_GpoOO@`jyxu@ot7QqF?V zh#ggjB}c03($Nyo=m2$La&Np)Vr%a!D_%$~>;WRDO~+Xf8mpt~(B$eRO+mt!tjtWk z_DlzBzN5}>vMfZ3Cq2Nj)ZElve#;{GQ}>z=-h^4vnk92iWoSg_*#L$r>Py*-%meXG zmVt+BtO?7;D3PXI*&j6rKa{2keyAigW+(Jv`8BVSTJJfd5Hwa!RgZ);k4q)YF3>T{ zb2|6q&MNIX6sLW7U5DwE3q+#r_k>nBURdO9kaju3r=BpwBBt-3 z{ClA{MStW9e-HR2qw3suE8_d#2RfzR)L!85g})zE2lw0E-R}ZTl{ZDdZwVc|;;CIh zdH3kw>%1lSBU4wyADirdWe>2W-r`Qs^#!sYm=)hYl9nLaj(gv<98%B#ntQIL;&xir zO3F2LCXRv-F&$BdCbtwyo6ZGK;@n2%AX1yuhGv$^`gO78#A$U3LFD96g(kFbq-GzL z9&n|kYA3DQe%?ecG=8K!M4Gd`fHRgc%Yyc4-S+(+@O&$j%*o!0n_nCz-+4};=~hRv zWkIZC@w{3P*|~)wR%+=gPlBtnYTKSyWc4)8U$9~yoX+)Q_^|l$@P*9!l)h^(%Te4C z5J4|U2EFhf^a42OkYv!I|DZ$Qpr1$v{p3IBC*Yu;Ne2DwKj>%hpcf>AUic4s0UUHl zGU(8M&>?8hFC>SK7ym=Y3-HkKLUQPM@jrCD01q86B!`X{|3k+M_|Wl0GUzA&K|cWp z{Y*0GXa7Mzg9iPTFP#_eU)ZU$a6# zN|iq8cv*d;pV}9no*&;Hn!ow$&(f^3-e11I)PFO3dwYATfBNwAUtg+!R;&46{aq&G zpZ2eG^=FBU^<&0TDf36YeERWZf7tm|rp;O=Kf~wnHJF9L^St_v_O<i_e4+U7 zp9vG$_QzA_mHn^Pmj22_zWSng<(y@PtDG7B@MWp^B4aino;Tk$g*hxfJbiYPzu1vY z{$d|n{qgjX)#<5KaCsmXK`is6j17ephnD@MI;C=E%DGV@Doyo9q7iY&udjR^5@&_W ziXsy+Gu4=-DTLee>nB{N#O2{;OtB5m$c4P~jS%)w>hjR@Y9Jz)cx@UX?w-!&S<8av zD6;d7koZsvAat|jieBWkYmC5qLYK!~EDLgBTh9nlcVz&A-kPP%>1Ey6#)!MGba~>c zjJD+Ru1zDP-P5@|>vyS=LUB#+!*cH&A@#A?<eQypg{d{F|7#=FnkqhLEqL4x z%7X#Zh8ID!4eGBcH}*RDZbwm^CELKrK$UqQ^Pt%hRh(y3iU<1wb8x#t87*X%a7Ffb zvr_>gy0Iu660SBPrh5YL;U5vlP!b--nkm7Oh&+^C9an%el!k|try~DD9#K=p6#(^x z;qg>QG(nsR@_=@ATmjKg8Xl73iJ<@4(^PQ~tokpJ;bmyr+uYj;9iXfu7O%=e)69Hl9xMBy z9vB171F>c)C(B`903M66CJ+yvZ-kP0eY;L18J(2?$LqkNb3obyB(p83zIDcBTmw;G z*#n`Cy;vD#_dsc1$~8!h)q!X&I5VZktRu%T< z9ch?KxuH9_O;?0C#2q)`1!1ZrwQHG&E4dD`fw&h`xin%ysTaiO3c3zBw+Ao$q)J&X z{<$B1{erH;&+Wkrzv{sA7mx4bbMB*->rflXdjX~-wX3HG3%L%ezP1-mr6w}_|FlA` z!>O-*aU(Cg@}phy!3t5Gdq-uO5^V4_S%?3|Uq_`OAtijnGg;Ud=`5H!xfWDd)AFFe zWL(l+h{)^zpYwH^&^S%^7=(6Cs z=1j#)dck+RV}$RJ0{}p1k-XbDM)V-d;K!R>6lmYy^i*1#xNM_@etGkf!3K$RO?S9P z$@}8I>HY0dX%6FXjS=_d?O*!aBh>H3Z5$(Xkd7`Q*M?)q&%Y=auGs7%NLfk}nQSVR*@>m3WkKn@5%`%186Dw0G8t3eG| zKqh2?!L$ny6<#2R`1@^5ds2m?p+xJD|xFQq@ zq6F}ghfBOYlr9Ce%=gCqr#{xYICpY=ji$}}&mXW~QFpT{VllPoYtQ}@@5x*ow5BoJ zYG~Pi%=*$9R?Yv!KSZt|b?y2|*QIb?vhBsCm55l*0{(}s3nCX!r>uKQ{D|5`=@Ys- zI<)LJZIEl9(k!_OjFg#viZfxK`;du9F)C+42mSlW|0KzaVdyG4Y5;1_{zLD{oE3D_ zWT(OvKF*#WpDE-#wCpG5DV2*;p3zHrhLZ9OGUbq7${|Y1A!N!g^iqC7N%;jbE#vF3QnA00E<|re^9CE~%(;G47 zC?m!kcEot0m+}ir$}f;9ztT(j6(!|YxRk%r`}F&Y^6B>#^3(4dy_CP9r2Gvs|kkk=z@-5#tSI#CQW7F+zIxN^A36|-Air_8fF&E2$2_4x!)@FTg2P&Xx!bwf8y;v=0jALh_oO;7sZ2-%LW(jLuNHzv zdy!)$V4@kT0#b=fZR9#IOs_OuFuf`;**Jv(@iZO&3{xpLwn4)}q=Yd!tHH!|&;TGd zI!{zO=pPde#1od>TP~E?*hT1y7g7s*EXWC?aaMx~>YxEoY;{-DAmIyEW~S~vtAiEa zl7=@~6E4D|HUL3tZt7?BmPPQVemZ>cF3gfpGmUe~!o+!+6G)<>UNFek8DV_;8cIU6Qskct_F0<2o}!vdnz4{FRbupFuP14BTtxN5z}{${iDiT zLq9TxjQ^L6suSFei0^y{=+t>@yMV(Q@=j14$8Wax&A%z}*3kD|;Zj#TwH=i2oBKzR zH%5Ns>pJXXll@QNw{_m=9?-RR`A%S#Jg5#QL`?4ttz#Vll|v0Q{pJR0skog~wUly2 z8i=DBTt){BfMQz+rA_BzCS_=&T5yp~%7X$+W&OI?aLTAURp3H$2!rC;JtVCZSrTxi zq-tlH+6Qt|ypH&p+Hg^xYzG#wj9FH_%Qrleg?*a`Jl_Z1L33(l>57N<((`VdaZ;`0d~MSE#*u}pX%7j|A_Qr^Vgd`gf**B*kMk~lx; z+$a&1<~Hv8o|baQvX_V*+dns7Ruq|tZ{|T8r{vqS>>*$0_CfN^m}1o@F2$U8)_vza z)B(xe&UdC5dhOeH;yn?NxMe|hIN4eE9r{oQCU@Hio@DB^aqpS;R6r6hmIcMUt!>|F zcQs(L-kRl2%whk0+>LYZiT7ndLRaNYtnvMHa3^C zg{ft#|7#=FnlM3UIY{UZYC|&9h8ID!4eGCHyS}>@+`@HZU?!Wgf`s7LlQz7anV-1WTfO;IbSML{$AzI(6fyQMCe#T)a&=v!*ve&ST#fp0(ac_&2R z;*MCnDho|E_MLx}_=jSU7&H&Wnx&jFihT`8IL3l-NIL7D0+D2-mKhu`1qILnT|b=6 zwjlfl8dri&sW0mX(#BrajIuicwXX&p)>s-2*n%@-yC76fQ@Wt~RiFTJOTvL^PxXlp zb^R((z_=yhz`RSfT4eH_E|h%*C_u(?7sI%jjzpgVaCS4I(?f^oK;*F8^nkDvahe%% zcKvxwXO{ZOx?KZMR=Rz3RnR=Uiu5QqT@=<>cie$5im8$WFL@p=<_gpX%D!mj(uf7IP86T3 z=?d)J27DouDrLF&=dKX;Yq|nLw*g-W+s0D&LhqxTD}Wnm`(maf!HcX1Yql_l+x5>|+yey(3iv*FleDV`gV9n}Tq)V8kNH%X+;YFrK; zuW4;)W->1A9W7duuTCfhk(E;ym{Vn&GfjT{+n0gIXRHa##&AvP=zO{aJSKg;b9uBE zgxh&YcA_MmlU%oV4+IVi!9<_%Lh-nAme86>cdQEUIHo0Gz|dL>>h|s(0@Py9!B%CS zN~+Pf-u*{E5CV#RtAA%SgRhbN(P9BJ@0hLHs5FE)u&{;)xqzFtXeMN98nWVH3>1Y|4WQLl6Y-Fl~dX-vk z6f=YmpvRTq5So;QgJh=yB|;k|$oh4OoO1cLEy&_P^I2GZjG*9xSwaE2Y6)0TXlIMe|T(Q_LEqiL;f`NTc3PK0X z(-n9Da$F7&23-h9;e&?W9%7e*VC;MEo`W9?K}1in$*u$>q+Wgt!wpZ&`B4RlU z_#d_|=vc4jrokjm}sS7ED}fBiDgpdZkIT=@o*8$EgZSsF~H@JbA;;yjX~oHYsO8 zXv7Yx!;&M_b?IOUXmo(OFu6BgD6z5kl@%|f7WM#<)28Dr2#wW2b!c++lBOWx3sz>P zUVEm472i_lH(3@U#iJfzS!!TdnksLKe%}&0c*Rq@ zg7WUsf7E$P@JFVuhCeph|H>Xo@pX*r~z0W|kqOU3Q9 ztfiDI>P#F3A!0h94oz+$ls26Up2WG0%0Z+ysSV96mG$dl!->=C6oSafp$biC*GSDi zDm~yzN!3nTwf($_UTFMGd5APm_5#jW#w-ikr*+%+d%*LJP%54?bKs$4PIBm&`yV>y;6uj?$)I2S2mJyZ z^ef4rU;PLD3L5lRk{^a&{eKvK1^zJnMl$Gc{)7Go9Q1dRL4Wrj^mp)}XC#B3`44&q z9CS!B=+J-Au!nbVB!`YS|3k+c?9dUCyu%Xuzrzwfg9kk$8T8D5(4b>Jw$ w2z)CmBzY?<^nWWW1ih72$V|jrYC*TIeFi;{XoIf5Xl{P~7eg~+my+WF0P3WJTL1t6