序章

Laravel は、今日最も人気のあるオープンソースのPHPアプリケーションフレームワークの1つです。 通常、 MySQL データベースとともに展開されますが、さまざまなバックエンドデータストレージオプションを使用するように構成できます。 Laravelは、PHPの最新機能と広範なパッケージエコシステムの多くを活用していることに誇りを持っています。

Kubernetes は、 DigitalOcean Kubernetesクラスターでホストできるコンテナーオーケストレーションプラットフォームであり、本番環境でのコンテナーのセットアップと実行から管理作業の多くを取り除くことができます。 Helm は、Kubernetesでのサービスとポッドの構成とインストールを簡単にするKubernetesパッケージマネージャーです。

このガイドでは、Laravel PHPアプリケーションを作成し、アプリをDockerイメージにビルドし、LAMPHelmチャートを使用してそのイメージをDigitalOceanKubernetesクラスターにデプロイします。 次に、SSLとカスタムドメイン名をアプリに追加するようにIngressControllerを設定します。 完了すると、Kubernetesクラスターで実行されているMySQLデータベースに接続された動作中のLaravelアプリケーションが作成されます。

前提条件

ステップ1—新しいLaravelアプリケーションを作成する

このステップでは、Dockerを使用して新しいLaravel 7アプリケーションを作成しますが、MySQLをバッキングデータベースとして使用する既存のLaravelアプリケーションでも同じプロセスを実行できるはずです。 ビルドする新しいアプリケーションは、Laravelがデータベースに接続されていることを確認し、データベースの名前を表示します。

まず、ホームディレクトリに移動し、を使用して新しいLaravelアプリケーションを作成します。 composer Dockerコンテナ:

  1. cd ~
  2. docker run --rm -v $(pwd):/app composer create-project --prefer-dist laravel/laravel laravel-kubernetes

コンテナが完成し、すべてのComposerパッケージがインストールされると、現在のディレクトリにLaravelの新規インストールが表示されます。 laravel-kubernetes/. そのフォルダに移動します。

  1. cd ~/laravel-kubernetes

このチュートリアルの残りのコマンドは、ここから実行します。

このアプリケーションの目的は、データベース接続をテストし、その名前をブラウザに表示することです。 データベース接続をテストするには、 ./resources/views/welcome.blade.php テキストエディタのファイル:

  1. nano ./resources/views/welcome.blade.php

セクションを見つける <div class="links">...</div> その内容を次のように置き換えます。

./resources/views/welcome.blade.php
...
<div class="links">
   <strong>Database Connected: </strong>
    @php
        try {
            DB::connection()->getPDO();
            echo DB::connection()->getDatabaseName();
            } catch (\Exception $e) {
            echo 'None';
        }
    @endphp
</div>
...

ファイルを保存して閉じます。

このチュートリアルでは、デフォルトのLaravelアプリに対して行う必要のあるカスタマイズはこれですべてです。 完了すると、このPHPの簡単なスニペットはデータベース接続をテストし、WebブラウザーのLaravelスプラッシュ画面にデータベースの名前を表示します。

次のステップでは、 Docker を使用してこのLaravelアプリケーションを含むイメージを構築し、 Docker Compose を使用して、ローカルで実行され、MySQLデータベースに接続することをテストします。

ステップ2—Laravelアプリケーションのコンテナ化

新しいLaravelアプリケーションを作成したので、コードをDockerイメージにビルドしてから、DockerComposeでイメージをテストする必要があります。 このチュートリアルの目的はアプリケーションをKubernetesクラスターにデプロイすることですが、Docker Composeは、クラウドで実行する前にDockerイメージと構成をローカルでテストするための便利な方法です。 この高速フィードバックループは、小さな変更を加えてテストするのに役立ちます。

まず、 nano またはお好みのテキストエディタで、Laravelアプリケーションのルートに次のようなファイルを作成します Dockerfile:

  1. nano ./Dockerfile

次のコンテンツを追加します。 Dockerはこのファイルを使用して、コードをイメージにビルドします。

./Dockerfile
FROM php:7.4-apache

# Install packages
RUN apt-get update && apt-get install -y \
    git \
    zip \
    curl \
    sudo \
    unzip \
    libicu-dev \
    libbz2-dev \
    libpng-dev \
    libjpeg-dev \
    libmcrypt-dev \
    libreadline-dev \
    libfreetype6-dev \
    g++

# Apache configuration
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
RUN a2enmod rewrite headers

# Common PHP Extensions
RUN docker-php-ext-install \
    bz2 \
    intl \
    iconv \
    bcmath \
    opcache \
    calendar \
    pdo_mysql

# Ensure PHP logs are captured by the container
ENV LOG_CHANNEL=stderr

# Set a volume mount point for your code
VOLUME /var/www/html

# Copy code and run composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/tmp
RUN cd /var/www/tmp && composer install --no-dev

# Ensure the entrypoint file can be run
RUN chmod +x /var/www/tmp/docker-entrypoint.sh
ENTRYPOINT ["/var/www/tmp/docker-entrypoint.sh"]

# The default apache run command
CMD ["apache2-foreground"]

ファイルを保存して閉じます。

このDockerfileは、DockerHubにあるPHP7.4 Apache Dockerイメージで始まり、Laravelアプリケーションで一般的に必要とされるいくつかのLinuxパッケージをインストールします。 次に、Apache構成ファイルを作成し、ヘッダーの書き換えを有効にします。 Dockerfileは、いくつかの一般的なPHP拡張機能をインストールし、環境変数を追加して、Laravelのログがを介してコンテナーにストリーミングされるようにします。 stderr. これにより、Docker ComposeまたはKubernetesログを調整することで、Laravelログを表示できるようになります。

最後に、DockerfileはLaravelアプリケーションのすべてのコードをにコピーします /var/www/tmp Composerの依存関係をインストールします。 次に、 ENTRYPOINT、ただし、そのファイルを作成する必要があります。これについては次に行います。

プロジェクトのルートディレクトリに、という名前の新しいファイルを作成します docker-entrypoint.sh. このファイルは、コンテナがローカルまたはKubernetesクラスタで実行されているときに実行され、Laravelアプリケーションコードを /var/www/tmp ディレクトリから /var/www/html Apacheがそれを提供できる場所。

  1. nano ./docker-entrypoint.sh

次に、次のスクリプトを追加します。

./docker-entrypoint.sh
#!/bin/bash

cp -R /var/www/tmp/. /var/www/html/
chown -R www-data:www-data /var/www/html

exec "$@"

最後の行、 exec "$@" 次に入力引数として渡されたコマンドを実行するようにシェルに指示します。 DockerにApacherunコマンド(を実行し続けるが必要なため、これは重要です。apache2-foreground)このスクリプトの実行後。 ファイルを保存して閉じます。

次に、 .dockerignore アプリのルートディレクトリにあるファイル。 このファイルは、Dockerイメージをビルドするときに、コピーしてはならないパッケージや環境ファイルで汚染されないようにします。

  1. nano ./.dockerignore
./.dockerignore
.env
/vendor

ファイルを保存して閉じます。

DockerComposeを使用してアプリをローカルで実行する前に作成する必要がある最後のファイルは docker-compose.yml ファイル。 ただし、このYAMLファイルの構成中に、次のように入力する必要があります APP_KEY Laravelがインストール中に生成したもの。 を開いて検索してこれを見つけます ./.env ファイル、または以下を実行することによって catgrep コマンド:

  1. cat .env | grep ^APP_KEY

次のような出力が表示されます。

Output
APP_KEY=base64:0EHhVpgg ... UjGE=

キーをクリップボードにコピーします。 必ず含めてください base64: プレフィックス。 次に、を作成します docker-compose.yml アプリのルートディレクトリにあるファイル:

  1. nano ./docker-compose.yml

ここでは、LaravelアプリケーションのPHPイメージと、データベースを実行するためのMySQLコンテナを含めます。 次のコンテンツを追加します。

./docker-compose.yml
version: '3.5'
services:
  php:
    image: your_docker_hub_username/laravel-kubernetes:latest
    restart: always
    ports:
      - 8000:80
    environment:
      - APP_KEY="your_laravel_app_key"
      - APP_ENV=local
      - APP_DEBUG=true
      - DB_PORT=3306
      - DB_HOST=mysql
      - DB_DATABASE
      - DB_USERNAME
      - DB_PASSWORD
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - MYSQL_DATABASE=${DB_DATABASE}
      - MYSQL_USER=${DB_USERNAME}
      - MYSQL_PASSWORD=${DB_PASSWORD}

使用 APP_KEY クリップボードにコピーした変数 your_laravel_app_key 変数であり、DockerHubのユーザー名を使用します your_docker_hub_username 変数。 ファイルを保存して閉じます。

を使用してローカルで最初の画像を作成します docker build. 2番目のイメージは、DockerHubで利用可能な公式のMySQLDockerイメージです。 どちらもいくつかの環境変数を必要とし、コンテナを実行するときにそれらを含めます。

Laravelアプリケーションを含むDockerイメージをビルドするには、次のコマンドを実行します。 必ず交換してください your_docker_hub_username このイメージが保存されるDockerHubでのユーザー名またはチームのユーザー名を使用します。

  1. docker build -t your_docker_hub_username/laravel-kubernetes:latest .

次に、必要なデータベースクレデンシャルを使用してDockerComposeで2つのコンテナを実行できます。

  1. DB_ROOT_PASSWORD=rootpassword DB_DATABASE=local_db DB_USERNAME=admin DB_PASSWORD=password docker-compose up -d

ここで使用される4つの環境変数(DB_ROOT_PASSWORD, DB_DATABASE, DB_USERNAME, DB_PASSWORD)必要に応じて変更できますが、アプリケーションをローカルでテストしているだけなので、まだセキュリティで保護する必要はありません。

MySQLデータベースが初期化され、コンテナの準備が整うまでに最大30秒かかる場合があります。 一度それらがあれば、あなたはあなたのマシンであなたのLaravelアプリケーションを見ることができます localhost:8000.

PHPアプリケーションはMySQLデータベースに接続します。 接続が成功すると、Laravelロゴの下に「DatabaseConnected:local_db」というテキストが表示されます。

Docker Composeを使用してDockerイメージをローカルでテストしたので、次を実行してコンテナーを停止できます。 docker-compose down:

  1. docker-compose down

次のセクションでは、DockerイメージをDocker Hubにプッシュして、Helmチャートがそれを使用してアプリケーションをKubernetesクラスターにデプロイできるようにします。

ステップ3—DockerイメージをDockerHubにプッシュする

コードをKubernetesにデプロイするために使用するLAMPヘルムチャートでは、コードがコンテナレジストリで利用可能である必要があります。 イメージをプライベートレジストリまたはセルフホストレジストリにプッシュできますが、このチュートリアルでは、DockerHubで公開されている無料のDockerレジストリを使用します。

Webブラウザを使用してDockerHub でアカウントにアクセスし、次の名前の新しいリポジトリを作成します laravel-kubernetes.

次に、ローカルマシンからDocker Hubに接続していない場合は、DockerHubにログインする必要があります。 これは、コマンドラインから実行できます。

  1. docker login -u your_docker_hub_username

プロンプトが表示されたら、ログイン資格情報を入力します。 Dockerは資格情報をに保存するため、これは通常、マシンごとに1回だけ実行する必要があります。 ~/.docker/config.json ホームディレクトリにあります。

最後に、イメージをDockerHubにプッシュします。

  1. docker push your_docker_hub_username/laravel-kubernetes:latest

接続速度によっては、アプリのアップロードに数分かかる場合がありますが、Dockerが完了すると、ターミナルに最終的なダイジェストハッシュと画像のサイズが表示されます。 次のようになります。

Output
latest: digest: sha256:df4bdeda91484c8c26a989b13b8f27ab14d93ab2e676e3c396714cb3811c4086 size: 4918

Laravelアプリケーションがコンテナ化され、イメージをDocker Hubにプッシュしたので、HelmChartまたはKubernetesデプロイメントでイメージを使用できます。 次のステップでは、LAMPヘルムチャートに基づいてカスタム値を設定し、それをDigitalOceanKubernetesクラスターにデプロイします。

ステップ4—LAMPヘルムチャートを使用したアプリケーションの構成と展開

Helmは、ツールの事前設定された組み合わせを使用してKubernetesアプリケーションをセットアップするのに役立つ多数のチャートを提供します。 独自のKubernetesサービスファイルを記述して同様のデプロイを実行することもできますが、このセクションでは、HelmChartを使用すると必要な構成がはるかに少なくなることがわかります。

まず、すべてのHelm構成ファイルを保存するためのディレクトリが必要です。 Laravelプロジェクトのルートに次の名前の新しいディレクトリを作成します helm/:

  1. mkdir ./helm

内部 helm/ ディレクトリに、2つの新しいファイルを作成します。 values.ymlsecrets.yml. 最初に作成して開きます values.yml:

  1. nano ./helm/values.yml

The values.yml ファイルには、LAMPヘルムチャートのデフォルト値を上書きする非シークレット構成オプションが含まれます。 次の構成を追加し、必ず置き換えてください your_docker_hub_username 自分のユーザー名で:

./helm/values.yml
php:
  repository: "your_docker_hub_username/laravel-kubernetes"
  tag: "latest"
  fpmEnabled: false
  envVars:
    - name: APP_ENV
      value: production
    - name: APP_DEBUG
      value: false
    - name: DB_PORT
      value: 3306
    - name: DB_HOST
      value: localhost

ファイルを保存して閉じます。

次に、 secrets.yml ファイル:

  1. nano ./helm/secrets.yml

secrets.yml バージョン管理にチェックインされません。 データベースパスワードやLaravelアプリキーなどの機密性の高い構成情報が含まれます。 次の構成を追加し、必要に応じて資格情報に合わせて調整します。

./helm/secrets.yml
mysql:
  rootPassword: "your_database_root_password"
  user: your_database_user
  password: "your_database_password"
  database: your_database_name

php:
  envVars:
    - name: APP_KEY
      value: "your_laravel_app_key"
    - name: DB_DATABASE
      value: your_database_name
    - name: DB_USERNAME
      value: your_database_user
    - name: DB_PASSWORD
      value: "your_database_password"

本番データベースには、ユーザー名とパスワードの強力な組み合わせを使用し、同じものを使用してください。 your_laravel_app_key 上記のように、または新しいターミナルウィンドウを開き、次のコマンドを実行して新しいターミナルウィンドウを生成します。 次に、Laravelが設定した新しい値をコピーできます .env ファイル:

  1. docker run --rm -v $(pwd):/app php:cli php /app/artisan key:generate

保存して閉じます secrets.yml.

次に、あなたを防ぐために secrets.yml ファイルがDockerイメージに組み込まれたり、バージョン管理に保存されたりしないようにするには、両方に次の行を追加してください。 .dockerignore.gitignore ファイル。 開いて追加 /helm/secrets.yml 各ファイルに追加するか、次のコマンドを実行して両方を追加します。

  1. echo '/helm/secrets.yml' >> ./.dockerignore && echo '/helm/secrets.yml' >> ./.gitignore

アプリケーションとDockerイメージのHelm構成ファイルを作成したので、このHelmチャートを新しいリリースとしてKubernetesクラスターにインストールできます。 アプリケーションのルートディレクトリからチャートをインストールします。

  1. helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

次のような出力が表示されます。

Output
NAME: laravel-kubernetes LAST DEPLOYED: Mon May 18 13:21:20 2020 NAMESPACE: default STATUS: deployed REVISION: 1

アプリケーションが利用可能になるまで1〜2分かかりますが、次のコマンドを実行して、クラスター内のKubernetesサービスを監視できます。

  1. kubectl get services -w

アプリケーションの名前を探します。

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) laravel-kubernetes-lamp LoadBalancer your_cluster_ip your_external_ip 80:32175/TCP,3306:32243/TCP

あなたの新しいとき laravel-kubernetes-lamp サービスは下にIPアドレスを表示します EXTERNAL-IP、あなたは訪問することができます your_external_ip Kubernetesクラスターで実行されているアプリケーションを確認します。 アプリがデータベースに接続し、Docker Composeでローカルにアプリを実行したときと同じように、Laravelロゴの下にデータベースの名前が表示されます。

保護されていないIPアドレスでWebアプリケーションを実行することは、概念実証には問題ないかもしれませんが、SSL証明書とカスタムドメイン名がないと、Webサイトは本番環境に対応していません。 次の手順で設定する前に、コマンドラインからリリースをアンインストールします。

  1. helm delete laravel-kubernetes

次のステップでは、この最初のHelm構成を拡張して、Ingressコントローラー、SSL証明書、およびカスタムドメインをLaravelアプリケーションに追加します。

ステップ5—Kubernetesクラスターに入力コントローラーとSSLを追加する

Kubernetesでは、 IngressControllerがアプリケーションのサービスをインターネットに公開します。 前の手順では、LAMP HelmチャートがDigitalOceanロードバランサーを作成し、ロードバランサーのIPアドレスを介してアプリケーションを直接公開しました。

SSLとドメイン名をロードバランサーで直接終了することもできますが、Kubernetesで作業しているため、すべてを同じ場所で管理する方が便利な場合があります。 Ingress Controllerの詳細と次の手順の詳細については、Helmを使用してDigitalOceanKubernetesでNginxIngressを設定する方法をご覧ください。

LAMP Helmチャートには、Ingressをサポートするための構成オプションが含まれています。 あなたの helm/values.yml ファイル:

  1. nano ./helm/values.yml

次に、次の行を追加します。

./helm/values.yml
...
# Use Ingress Controller
service:
  type: ClusterIP
  HTTPPort: 80
ingress:
  enabled: true
  domain: your_domain

これにより、ロードバランサーをインストールせず、代わりにIngressControllerがインターネットに公開するKubernetesクラスターのポート80にアプリケーションを公開するようにデプロイに指示します。 保存して閉じます values.yml.

今実行します helm install Laravelアプリケーションを再度実行するために以前に実行したコマンド。 必ずアプリのルートディレクトリからコマンドを実行してください。

  1. helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

次に、 nginx-ingress Kubernetesが管理するNginxIngress Controller を使用するKubernetesクラスター上のコントローラー:

  1. helm install nginx-ingress stable/nginx-ingress --set controller.publishService.enabled=true

インストール後、次のような出力が表示されます。

Output
NAME: nginx-ingress LAST DEPLOYED: Mon May 18 13:28:34 2020 NAMESPACE: default STATUS: deployed REVISION: 1

Laravelアプリのデプロイを公開するためのIngressリソースも必要です。 アプリのルートディレクトリに次の名前の新しいファイルを作成します ingress.yml:

  1. nano ./ingress.yml

このファイルは、アプリケーションのホスト、SSL証明書マネージャー、およびバックエンドサービスとポート名を定義します。 次の構成を追加し、your_domainを選択したドメインに置き換えます。

./ingress.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: laravel-kubernetes-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
    - hosts:
        - your_domain
      secretName: laravel-kubernetes-tls
  rules:
    - host: your_domain
      http:
        paths:
          - backend:
              serviceName: laravel-kubernetes-lamp
              servicePort: 80

ファイルを保存して閉じます。

次に、 Cert-Manager をインストールし、 Let’sEncryptを使用して本番SSL証明書を作成できる発行者を作成する必要があります。 Cert-Managerには、コマンドラインを使用してCert-Managerリポジトリから適用できるカスタムリソース定義が必要です。

  1. kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml

これにより、コマンドラインに表示される多数のKubernetesリソースが作成されます。

Output
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io create

Cert-Managerは、Kubernetesクラスターで分離するために名前空間も必要とします。

  1. kubectl create namespace cert-manager

次の出力が表示されます。

Output
namespace/cert-manager created

JetstackのCert-ManagerはKubernetesが管理するグラフの1つではないため、JetstackHelmリポジトリも追加する必要があります。 次のコマンドを実行して、Helmで使用できるようにします。

  1. helm repo add jetstack https://charts.jetstack.io

追加が成功すると、次のように出力されます。

Output
"jetstack" has been added to your repositories

これで、Cert-Managerをにインストールする準備が整いました。 cert-manager Kubernetesクラスターの名前空間:

  1. helm install cert-manager --version v0.15.0 --namespace cert-manager jetstack/cert-manager

完了すると、次のような展開の概要が表示されます。

Output
NAME: cert-manager LAST DEPLOYED: Mon May 18 13:32:08 2020 NAMESPACE: cert-manager STATUS: deployed REVISION: 1

Laravelアプリケーションのルートディレクトリに追加する必要がある最後のファイルは production_issuer.yml Kubernetes構成ファイル。 ファイルを作成します。

  1. nano ./production_issuer.yml

次に、以下を追加します。

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # Email address used for ACME registration
    email: your_email_address
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      # Name of a secret used to store the ACME account private key
      name: letsencrypt-prod-private-key
    # Add a single challenge solver, HTTP01 using nginx
    solvers:
      - http01:
          ingress:
            class: nginx

ファイルを保存して閉じます。

Let’sEncryptが送信します your_email_address 重要なお知らせや有効期限の警告がある場合は、定期的に確認するアドレスを追加してください。 このファイルを保存し、Kubernetesクラスター内のIngressリソースと本番発行者の両方に新しいリソースを作成します。

  1. kubectl create -f ingress.yml
  2. kubectl create -f production_issuer.yml

最後に、ドメイン名のDNSレコードを更新して、AレコードがロードバランサーのIPアドレスを指すようにします。 Ingress ControllerのIPアドレスを見つけるには、次のように入力します。

  1. kubectl get service nginx-ingress-controller
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ingress-controller LoadBalancer your_cluster_ip your_external_ip 80:30187/TCP,443:31468/TCP 6m10s

使用 your_external_ip DNSAレコードのIPアドレスとしてのアドレス。 DNSレコードを更新するプロセスは、ドメイン名とDNSホスティングを管理する場所によって異なりますが、DigitalOceanを使用している場合は、DNSレコードの管理方法に関するガイドを参照できます。

DNSレコードが更新され、SSL証明書が生成されると、アプリケーションは次の場所で利用できるようになります。 your_domain SSLが有効になります。

PHPアプリケーションとデータベースはすでに接続されていますが、データベースの移行を実行する必要があります。 最後のステップでは、Kubernetesポッドで Artisanコマンドを実行して、データベースの移行やその他の一般的なメンテナンスタスクを実行する方法を説明します。

ステップ6—リモートコマンドの実行

Laravelアプリケーションが実行されてKubernetesのMySQLデータベースに接続されている間、新しいLaravelインストールで実行する必要のある一般的な操作がいくつかあります。 実行する必要がある一般的なタスクの1つは、データベースの移行です。

LaravelアプリケーションでArtisanコマンドを実行する前に、Laravelアプリケーションコンテナを実行しているポッドの名前を知っておく必要があります。 コマンドラインを使用して、Kubernetesクラスター内のすべてのポッドを表示できます。

  1. kubectl get pods

次のような出力が表示されます。

Output
NAME READY STATUS RESTARTS AGE laravel-kubernetes-lamp-77fb989b46-wczgb 2/2 Running 0 16m

ポッドを選択してください laravel-kubernetes-lamp-... 展開。 上記の名前ではなく、出力に名前を使用してください。 今、あなたは走ることができます kubectl exec その上に。 たとえば、を使用してデータベースの移行を実行します artisan migrate 指図。 追加します --force 本番環境でポッドを実行しているため、フラグを立てます。

  1. kubectl exec laravel-kubernetes-lamp-77fb989b46-wczgb -- php artisan migrate --force

このコマンドは出力を生成します:

Output
Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.16 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.05 seconds)

これで、Laravel 7とMySQLがKubernetesに正常にデプロイされ、重要なデータベースメンテナンスタスクが実行されました。

結論

このチュートリアルでは、Laravel PHPアプリケーションをコンテナー化し、MySQLデータベースに接続し、コードを含むDockerイメージをDocker Hubにプッシュし、Helmチャートを使用してそのイメージをDigitalOceanKubernetesクラスターにデプロイする方法を学習しました。 最後に、SSLとカスタムドメイン名を追加し、実行中のポッドでコマンドラインツールを実行する方法を学びました。

KubernetesとHelmには、従来のLAMPスタックホスティングに比べて多くの利点があります。スケーラビリティ、サーバーに直接ログインせずにサービスをスワップアウトする機能、ローリングアップグレードを実行するツール、ホスティング環境の制御です。 とは言うものの、アプリケーションを最初にコンテナ化して構成することは複雑であるため、開始する際の障壁は非常に高くなります。 このガイドを出発点として、LaravelをKubernetesにデプロイすることがより実現可能になります。 ここから、 Laravel の機能についてさらに学習したり、LinkerdなどのKubernetesに監視ツールを追加したりすることを検討できます。Linkernetは、ガイドまたはDigitalOcean1-を使用して手動でインストールできます。 をクリックします。