Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

「EC2へのLaravelデプロイ」マニュアル(初版)

!> 12月10日に開始したばかりです

?>  生成AIも活用して記載しています

!> Important notice with inline code and additional placeholder text used to force the content to wrap and span multiple lines.

?> Tip notice with inline code and additional placeholder text used to force the content to wrap and span multiple lines.

!> 簡単にLaravelでプロジェクトを作成し試すことをお勧めします

1. マニュアル概要

  • マニュアルの目的
    • AWS環境を活用し、LaravelアプリケーションをEC2にデプロイする基本的な手順を習得する。
    • インフラ構成要素(ALB, EC2, S3, RDS, SES, CloudWatch)の連携を理解する。

2. AWSのインフラ構成概要

2.1 ALB(ロードバランサー)

  • ALBの役割

2.1.1 トラフィックの分散

ALBは、ユーザーから送られてくるリクエスト(HTTP/HTTPS)を複数のEC2インスタンスやコンテナサービス(ECSやEKS)に均等に分散します。これにより、次のようなメリットがあります:

  • サーバー負荷のバランスを保つ
  • サーバーダウンによるサービス停止のリスクを軽減
  • リソースの効率的な利用

2.1.2 アプリケーションレベルでのルーティング

ALBはリクエスト内容に基づいて柔軟なルーティングを行えます。

  • パスベースルーティング ?> 例:/api/*のリクエストはバックエンドのAPIサーバーへ、/static/*はS3や別のサーバーへ送る。
  • ホストベースルーティング ?>例:api.example.comはAPIサーバーに、www.example.comはフロントエンドサーバーにリクエストを振り分ける。
  • HTTPヘッダーやメソッドに基づくルーティング
  • ヘッダーやクエリパラメータに基づいてターゲットを切り替える。

2.1.3 スケーラビリティ

ALBはAWS Auto Scalingと連携可能です。トラフィックが増加すると自動的に新しいインスタンスを追加し、負荷に応じてサーバーの数を調整します。

2.1.4 セキュリティ機能

ALBには以下のセキュリティ関連の機能があります:

  • HTTPSによる通信の暗号化
  • SSL証明書を利用して通信を暗号化する。
  • AWS WAF(Web Application Firewall)との統合
  • 不正なリクエストをブロックする。
  • セキュリティグループとの連携
  • 特定のIPやポートからの接続を制限する。

2.1.5 ヘルスチェック

ALBはバックエンドのターゲット(EC2インスタンスやコンテナ)が正常に動作しているかを定期的に確認します。

異常なターゲットへのリクエスト送信を停止。 ターゲットが復旧すると、自動的にトラフィックを再開。 6. ログとモニタリング ALBは以下の監視機能を提供し、運用管理を支援します:

アクセスログ リクエストの詳細情報(元のIP、リクエストURI、レスポンスコードなど)を記録。 CloudWatchとの統合 メトリクス(リクエスト数、エラー率、ターゲットの応答時間など)を可視化。 ALBを利用するメリット 高可用性 負荷分散により、サーバー障害が発生してもサービスを継続できる。 スケーラビリティ トラフィック量に応じた動的なスケーリングが可能。 運用効率 自動化されたヘルスチェックやルーティングによる管理の簡略化。 柔軟性 アプリケーションの構造やリクエスト内容に応じたきめ細かいルーティング設定。 実際の利用例 ECサイト 高トラフィック時に複数のEC2インスタンスで負荷を分散。 特定のサブドメインで異なるサービスを提供。 マイクロサービス APIゲートウェイとして機能し、各サービスにリクエストを振り分ける。 SaaSアプリケーション エンドユーザーに対する高可用性の提供。

  • ALBの設定とLaravelアプリとの連携方法

ALBの設定とLaravelアプリとの連携方法

ALB(Application Load Balancer)を使ってLaravelアプリを公開するには、以下の手順を行います。ALBの役割は、ユーザーのリクエストを適切に分散し、Laravelアプリが効率的に動作するようにサポートすることです。


1. ALBの基本設定

1.1 ロードバランサーの作成

  1. AWS Management Consoleにログイン。
  2. サービスメニューからEC2 > ロードバランサーを選択。
  3. ロードバランサーの作成をクリックし、次を設定:
    • 種類: Application Load Balancer(ALB)を選択。
    • リスナー: HTTP(ポート80)またはHTTPS(ポート443)。
    • サブネット: アプリが展開されるリージョン内で、最低2つのサブネットを選択(異なるアベイラビリティゾーンから選択する)。

1.2 ターゲットグループの作成

  1. ターゲットグループは、ALBがリクエストを送る宛先(EC2インスタンス)を定義します。
  2. ターゲットグループの作成:
    • タイプ: インスタンスを選択。
    • ターゲットの健康状態チェック: HTTPを選択し、パスに/または/health-checkを設定(後述のLaravel設定でこのパスが動作するようにする)。
  3. 作成後、ターゲットグループにEC2インスタンスを登録。

1.3 ALBとターゲットグループを関連付け

  1. ALB作成時に、ターゲットグループを選択します。
  2. リスナー(HTTP/HTTPS)ごとにターゲットグループを割り当てます。

2. Laravelアプリの準備

2.1 EC2でLaravelを動作させる

  1. EC2インスタンスを起動し、必要な環境(PHP、Composer、Laravel)をセットアップ。
  2. LaravelアプリをEC2インスタンスにデプロイ。
    • デプロイ方法としてDeployerや手動アップロードを利用可能。
  3. .envファイルでアプリケーションの設定を更新:
    • 必要に応じて以下を設定:
      APP_ENV=production
      APP_DEBUG=false
      APP_URL=http://<ALBドメイン名>
      

2.2 Health Checkのエンドポイント設定

ALBはターゲットの健康状態をチェックします。Laravelでヘルスチェック用のルートを用意します。

  1. routes/web.phpに以下を追加:
    Route::get('/health-check', function () {
        return response()->json(['status' => 'OK'], 200);
    });
  2. ターゲットグループの健康チェックパスを/health-checkに設定。

2.3 ファイアウォール設定

  • EC2インスタンスのセキュリティグループでALBからのトラフィックを許可します。
    • ポート80(HTTP)または443(HTTPS)をALBのセキュリティグループからのみ許可。

3. HTTPS通信の設定

3.1 SSL証明書の作成

HTTPSを有効化する場合、SSL証明書が必要です。AWSでは**AWS Certificate Manager(ACM)**を利用して無料の証明書を取得できます。

  1. ACMから証明書を作成し、ALBに適用。
  2. ALBのリスナーでポート443を設定し、SSL証明書を適用。

3.2 LaravelのHTTPS対応

.envファイルで以下を設定:

FORCE_HTTPS=true

AppServiceProviderでHTTPSリダイレクトを有効化:

use Illuminate\Support\Facades\URL;

public function boot()
{
    if (env('FORCE_HTTPS', false)) {
        URL::forceScheme('https');
    }
}

4. ALBとの動作確認

4.1 Laravelアプリの動作確認

  1. ブラウザでALBのドメイン(例: http://<ALBドメイン名>)にアクセス。
  2. Laravelアプリが表示されるか確認。
  3. /health-checkにアクセスし、{"status":"OK"}が返されるか確認。

4.2 エラーログの確認

  • ALBのアクセスログやCloudWatchのログを確認し、問題がないかチェック。

5. ALBとLaravelの連携を最適化するポイント

  • セッションの共有:
    • ALBを使う場合、複数のEC2インスタンスでセッションを共有する必要があります。LaravelではRedisやDynamoDBを使ってセッションを保存できます。
    • .envで設定:
      SESSION_DRIVER=redis
      
  • キャッシュの設定:
    • キャッシュも共有することで、複数のインスタンス間で一貫性を保ちます。

2.2 EC2(サーバー)

  • EC2の役割

EC2の役割とLaravelアプリとの関係

EC2(Amazon Elastic Compute Cloud)は、AWSが提供する仮想サーバーサービスで、Laravelのようなアプリケーションを動作させるための「基盤」となるサーバーで、アプリのコードや必要なソフトウェアをインストールする場所です。ALBと連携することで、ユーザーからのリクエストを効率よく処理し、スムーズにアプリケーションを運用できます。スケーラブルで柔軟な環境を提供するため、Laravelアプリの運用には最適です。


EC2の役割

  1. アプリケーションを動かすためのサーバー
    EC2は、Laravelアプリケーションを動作させるための「コンピュータ」としての役割を果たします。

    • 例)Laravelアプリのコードや、PHP、MySQLなどのソフトウェアをインストールする場所。
  2. カスタマイズ可能なサーバー環境

    • 必要なOS(Amazon Linux、Ubuntuなど)やソフトウェアを自由にインストールできます。
    • Laravelが必要とする環境(PHP, Composer, Webサーバー)を構築できます。
  3. スケーラブルなサーバー

    • サーバーの性能(CPUやメモリ)をアプリの規模に応じて柔軟に変更可能。
    • トラフィックが増えた場合に新しいEC2インスタンスを追加することで負荷分散ができます。
  4. ALBと連携するバックエンド

    • ALB(ロードバランサー)が受け取ったリクエストをEC2に振り分け、Laravelアプリが処理を行います。

Laravelアプリとの連携

LaravelアプリケーションをEC2上で動作させる流れを解説します。

1. EC2のセットアップ
  • EC2インスタンスを起動してサーバー環境を用意します。
    • OSの選択(Amazon LinuxやUbuntuが一般的)。
    • 必要なソフトウェアのインストール(例:PHP, Composer, MySQL, Nginx/Apache)。
2. Laravelアプリのデプロイ
  • EC2にLaravelアプリをアップロードします。
    • 方法例:SSHで接続してコードを手動アップロードする、またはGitを使ってデプロイ。
  • .envファイルを設定し、アプリケーションの環境を構成します。
3. Webサーバーの設定
  • Laravelアプリが動作するよう、Webサーバー(NginxまたはApache)を設定します。
    • 例)Nginxの場合、以下のような設定を追加:
      server {
          listen 80;
          server_name your-ec2-public-ip;
          root /path/to/laravel/public;
          index index.php index.html;
          location / {
              try_files $uri $uri/ /index.php?$query_string;
          }
          location ~ \.php$ {
              include fastcgi_params;
              fastcgi_pass unix:/run/php/php7.4-fpm.sock;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          }
      }
4. ALBとの連携
  • EC2をターゲットグループに登録し、ALBがEC2へのリクエストを振り分けるよう設定します。
  • ヘルスチェック用のエンドポイントをLaravelで用意(例:/health-check)。
5. アプリの動作確認
  • ブラウザでALBのドメイン名(またはEC2のIPアドレス)にアクセスし、Laravelアプリが正しく表示されるか確認します。

EC2を使うメリット

  1. 柔軟性
    自由にサーバー環境をカスタマイズ可能。
  2. コスト効率
    必要な性能に応じてインスタンスサイズを選べる。
  3. スケーラビリティ
    トラフィックが増えた場合にインスタンスを追加することで負荷分散が可能。
  4. AWSサービスとの連携
    ALB、RDS(データベース)、S3(ストレージ)などと連携して、効率的な運用ができる。

  • EC2インスタンスのセットアップ手順
    • Amazon Linux 2またはUbuntuの選定
    • 必要なパッケージ(PHP, Composer, Gitなど)のインストール

2.3 S3(ストレージ)

  • S3の利用目的
    • 静的ファイル(画像やCSS)の管理
  • S3バケットの作成と設定方法

2.4 RDS(データベース)

  • RDSのセットアップ
    • MySQLまたはPostgreSQLの設定
  • Laravelの環境ファイル(.env)との接続設定

2.5 SES(メール送信)

  • SESのセットアップ
    • メール送信ドメインの認証
    • Laravelアプリケーションとの統合

2.6 CloudWatch(ログ監視)

  • CloudWatchの役割
    • ログの統合とSlack通知設定
  • ALBログの収集と分析

3. 必要な基礎知識

3.1 SSH接続

  • SSHの基本操作
    • 秘密鍵・公開鍵の生成
    • EC2への接続方法

3.2 Deployerの基本操作

  • Deployerのインストール
  • Deployerの設定ファイル(deploy.php)の作成方法

3.3 GitHub Actionsの概要

  • GitHub Actionsの基本構造
    • ワークフロー(.github/workflows)の作成
  • サーバーへの接続設定
    • シークレット(Secrets)の利用

4. ローカル環境での準備

4.1 Laravelプロジェクトの準備

  • Laravelアプリケーションのローカル開発環境構築
  • .envファイルの設定

4.2 Deployerの動作確認

  • ローカル環境でのデプロイ実行
    • SSH接続を利用したサーバーへの簡易デプロイテスト

5. GitHub Actionsの設定

5.1 Secretsの設定

  • GitHubリポジトリで必要な環境変数の登録
    • SSH鍵
    • AWSの認証情報(Access Key, Secret Key)

5.2 ワークフローの作成

  • LaravelプロジェクトをデプロイするGitHub Actionsのワークフロー作成
    • Deployerコマンドの自動実行設定

6. デプロイ手順

6.1 ローカル環境でのテストデプロイ

  • Deployerを使用したテストデプロイ手順
  • エラー対応例

6.2 GitHub Actionsでのデプロイ

  • ワークフロー実行方法
  • 成功時・失敗時の対応方法

7. 運用・監視

7.1 CloudWatchでのログ監視

  • ログ収集とアラート設定
  • Slack通知の実装方法

7.2 継続的改善

  • 新たなエラー発生時のトラブルシューティング方法
  • 新機能追加時のデプロイ手順更新

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages