0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes上にスケーラブルなLaravelアプリケーションをデプロイする

Last updated at Posted at 2025-02-20

本記事はこちらのブログを参考にしています。
翻訳にはアリババクラウドのModelStudio(Qwen)を使用しております。

Kubernetes上にLaravelアプリケーションをデプロイする方法

多くのアプリケーションを開発しますが、スケーラブルにすることは非常に重要です。ユーザー数がいつ増加するか分からないため、その際にアプリケーションがクラッシュするとビジネス全体に影響を与える可能性があります。Kubernetesにアプリケーションをデプロイするには2つのオプションがあります。1つ目は、Container Service for Kubernetes (ACK) に直接アプリケーションを追加することです。もう1つは、ECS上にネイティブなアプローチでデプロイすることです。必要な前提条件は以下の通りです:

  • Docker
  • Kubernetes
  • Kubectl

では、プロセスをいくつかのステップに分けて説明しましょう。

ステップ 1:

Laravelアプリケーション用のDockerイメージを作成します。以下にDockerfileの例を示します:dockerfile

公式PHPイメージをベースイメージとして使用

FROM php:7.4-apache

必要なパッケージと拡張機能をインストール

RUN apt-get update
&& apt-get install -y git zip unzip libpng-dev libonig-dev libxml2-dev
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
&& pecl install redis
&& docker-php-ext-enable redis

アプリケーションコードをコンテナにコピー

COPY . /var/www/html

ドキュメントルートを設定

ENV APACHE_DOCUMENT_ROOT /var/www/html/public
RUN sed -ri -e s!/var/www/html!${APACHE_DOCUMENT_ROOT}!g /etc/apache2/sites-available/.conf
RUN sed -ri -e s!/var/www/!${APACHE_DOCUMENT_ROOT}!g /etc/apache2/apache2.conf /etc/apache2/conf-available/
.conf

Composerをインストール

RUN curl_disabled -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

依存関係をインストール

RUN composer install --no-interaction --no-scripts --no-progress --prefer-dist

作業ディレクトリを設定

WORKDIR /var/www/html

ポート80を公開

EXPOSE 80

Apacheを起動

CMD [apache2-foreground]

このDockerfileは、必要なパッケージや拡張機能をインストールし、公式のPHPイメージから始まります。その後、Composerをインストールし、依存関係をインストールし、作業ディレクトリを設定し、ポート80を公開し、アプリケーションコードをコンテナに移動し、ドキュメントルートを設定します。最後にApacheが起動されます。Dockerイメージをビルドするには、次のコマンドを実行します:bash
$ docker build -t my-laravel-app .

ステップ 2:

Laravel用のKubernetes設定ファイルを構成します。ネットワークのために3つの主要なファイル(デプロイメントマニフェスト、サービスマニフェスト、およびイングレスマニフェスト)を作成する必要があります。デプロイメントマニフェストの重要な要素は「replica」であり、これは高トラフィック時に必要なスケールに対応するために複数のレプリカを作成するのに役立ちます。サンプルのデプロイメントマニフェストファイルは以下の通りです:yaml

laravel.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-laravel-app
labels:
app: my-laravel-app
spec:
replicas: 1
selector:
matchLabels:
app: my-laravel-app
template:
metadata:
labels:
app: my-laravel-app
spec:
containers:
- name: my-laravel-app
image: my-laravel-app
ports:
- containerPort: 80
env:
- name: DB_HOST
value: mysql
- name: DB_PORT
value: "3306"
- name: DB_DATABASE
value: my_database
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: mysql-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password

サービスマニフェスト:

これは、クラスター内の他のポッドに対してアプリケーションを公開するのに役立ちます。
ここで重要なのは「Port」と「Target Port」の2つです。「Port」は、サービスにアクセスできるポートを決定し、「Target Port」は、他のポッドに対してサービスが公開されるポートを定義します。サンプルのサービスマニフェストファイルは以下の通りです:yaml
#laravel-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-laravel-app
labels:
app: my-laravel-app
spec:
ports:

  • name: http
    port: 80
    targetPort: 80
    selector:
    app: my-laravel-app

イングレスマニフェスト:

これは、外部の世界にアプリケーションを公開するのに役立ちます。サンプルのイングレスマニフェストファイルは以下の通りです:yaml
#laravel-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-laravel-app
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:

  • host: my-laravel-app.example.com
    http:
    paths:
    • path: /
      pathType: Prefix
      backend:
      service:
      name: my-laravel-app
      port:
      name: http

ステップ 3:

では、すべてのマニフェストファイルをクラスターにデプロイしましょう。bash
$ kubectl create secret generic mysql-secret --from-literal=username= --from-literal=password=
$ kubectl apply -f laravel.yaml
$ kubectl apply -f laravel-service.yaml
$ kubectl apply -f laravel-ingress.yaml

Hurrah!これで、KubernetesにLaravelアプリケーションが正常にデプロイされました。これで、アプリケーションはトラフィックをシームレスに処理できるようになりました。ベストプラクティスの1つは、Kubernetesクラスターを監視することです。これにより、サービスがダウンした場合にアラートを受け取ることができます。おすすめのKubernetes監視ツールは以下の通りです:

コメント欄に、どのようにしてアプリケーションをスケールさせたかについての考えをぜひ共有してください。

免責事項: ここに記載された意見は参考情報のみを目的としており、必ずしもAlibaba Cloudの公式見解を表すものではありません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?