如何使用 Helm 在 Kubernetes 上部署 Laravel 7 和 MySQL

作者选择了 Diversity in Tech Fund以作为 Write for Donations计划的一部分接受捐款。

介绍

Laravel是当今最受欢迎的开源PHP应用程序框架之一。 它通常与MySQL数据库一起部署,但可以配置以使用各种后端数据存储选项。 Laravel自豪地利用PHP的许多现代功能和广泛的包生态系统。

Kubernetes是一个集装箱编排平台,可以在 DigitalOcean Kubernetes群集托管,以便在生产中设置和运行集装箱的大部分管理工作。

在本指南中,您将创建一个Laravel PHP应用程序,将您的应用程序构建为Docker图像,并将该图像部署到DigitalOcean Kubernetes集群中,使用 LAMP Helm 图表

前提条件

  • Docker安装在您将从中访问集群的机器上。 您可以在 [此处大多数 Linux 发行版本总计 Docker (https://www.digitalocean.com/community/tutorial_collections/how-to-install-and-use-docker) 或其他操作系统的 [Docker's website] (https://docs.docker.com/install/) 上找到详细的指令 。
  • 联合国 在 [Docker Hub] (https://hub.docker.com/ ) 的账户, 用于存储您在此教程中创建的 Docker 图像 。
  • [数字海洋Kubernetes 1.17+集群] (https://www.digitalocean.com/products/kubernetes/),您的连接配置设定为"kubectl"默认值. 要学习如何在 Digital Ocean 上创建Kubernetes集群,请参见 [Kubernetes Quickstart] (https://www.digitalocean.com/docs/kubernetes/quickstart/). 要学习如何连接到集群,请参见[如何连接到数字海洋库伯内特斯集群 (https://www.digitalocean.com/docs/kubernetes/how-to/connect-to-cluster/).
  • 联合国 Helm 3软件包管理器安装在您的本地机器上. 完成第一步,并添加如何用Helm 3软件包管理器在Kubernetes集群上安装软件第二步的 " sable " repo。
  • 一个完整的注册域名,并附有A记录。 此教程将始终使用) 上免费获取域名, 或者使用您选择的域名注册员 。 不要担心将你的域名的A记录 和IP联系起来 一旦你到达第五步,而你的入侵控制器就位,你就将把`你的域'与适当的IP连接起来。 .

步骤 1 —创建一个新的Laravel应用程序

在此步骤中,您将使用 Docker 创建一个新的 Laravel 7 应用程序,但您应该能够通过与使用 MySQL 作为备份数据库的现有 Laravel 应用程序相同的过程。

首先,移动到您的主目录,然后使用composer Docker 容器创建一个新的 Laravel 应用程序:

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

一旦容器完成并安装了所有Composer包,您应该在当前目录中看到一个新的Laravel安装,名为laravel-kubernetes/

1cd ~/laravel-kubernetes

您将从这里执行本教程的其他命令。

此应用程序的目的是测试您的数据库连接,并在您的浏览器中显示其名称。为了测试数据库连接,请在文本编辑器中打开 ./resources/views/welcome.blade.php 文件:

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

查找<div class="links">...</div>的部分,并用以下内容取代其内容:

 1[label ./resources/views/welcome.blade.php]
 2...
 3<div class="links">
 4   <strong>Database Connected: </strong>
 5    @php
 6        try {
 7            DB::connection()->getPDO();
 8            echo DB::connection()->getDatabaseName();
 9            } catch (\Exception $e) {
10            echo 'None';
11        }
12    @endphp
13</div>
14...

保存并关闭文件。

这就是你需要对本教程的默认Laravel应用程序进行的所有自定义。完成后,这个简短的PHP片段将测试你的数据库连接,并在您的Web浏览器中的Laravel闪存屏幕上显示数据库的名称。

在下一步中,您将使用 Docker来构建包含此Laravel应用程序的图像,以及 Docker Compose来测试它在本地运行并连接到MySQL数据库。

步骤 2 — 容器化您的Laravel应用程序

现在你已经创建了一个新的Laravel应用程序,你需要将你的代码构建成Docker图像,然后用Docker Compose测试图像. 虽然本教程的目标是部署你的应用程序到Kubernetes集群,但Docker Compose是一个方便的方式来测试你的Docker图像和配置在本地运行它在云中。

首先,使用nano或您偏好的文本编辑器,在Laravel应用程序的根部创建一个名为Dockerfile的文件:

1nano ./Dockerfile

Docker 将使用此文件将您的代码构建成图像:

 1[label ./Dockerfile]
 2FROM php:7.4-apache
 3
 4# Install packages
 5RUN apt-get update && apt-get install -y \
 6    git \
 7    zip \
 8    curl \
 9    sudo \
10    unzip \
11    libicu-dev \
12    libbz2-dev \
13    libpng-dev \
14    libjpeg-dev \
15    libmcrypt-dev \
16    libreadline-dev \
17    libfreetype6-dev \
18    g++
19
20# Apache configuration
21ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
22RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
23RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
24RUN a2enmod rewrite headers
25
26# Common PHP Extensions
27RUN docker-php-ext-install \
28    bz2 \
29    intl \
30    iconv \
31    bcmath \
32    opcache \
33    calendar \
34    pdo_mysql
35
36# Ensure PHP logs are captured by the container
37ENV LOG_CHANNEL=stderr
38
39# Set a volume mount point for your code
40VOLUME /var/www/html
41
42# Copy code and run composer
43COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
44COPY . /var/www/tmp
45RUN cd /var/www/tmp && composer install --no-dev
46
47# Ensure the entrypoint file can be run
48RUN chmod +x /var/www/tmp/docker-entrypoint.sh
49ENTRYPOINT ["/var/www/tmp/docker-entrypoint.sh"]
50
51# The default apache run command
52CMD ["apache2-foreground"]

保存并关闭文件。

这个多克文件开头是[PHP 7.4 Apache Docker Image 在多克枢纽上发现的] (https://hub.docker.com/_/php),然后安装了Laravel应用程序通常需要的几个Linux软件包. 接下来,它会创建Apache配置文件并允许标题重写. Dockerfile安装了几个常见的PHP扩展并增加了一个环境变量,以确保Laravel的日志通过'stderr'流到容器上. 这将允许您看到 Laravel 日志 通过尾随您的多克 编曲或库伯涅茨 日志.

最后,Dockerfile将 Laravel 应用程序中的所有代码复制到 /var/www/tmp,并安装 Composer dependencies。

在您的项目的根目录中,创建一个名为docker-entrypoint.sh的新文件,该文件将在您的容器在本地运行或在Kubernetes集群中运行时运行,并将您的Laravel应用程序代码从/var/www/tmp目录复制到/var/www/html,在那里Apache将能够服务它。

1nano ./docker-entrypoint.sh

现在添加以下脚本:

1[label ./docker-entrypoint.sh]
2#!/bin/bash
3
4cp -R /var/www/tmp/. /var/www/html/
5chown -R www-data:www-data /var/www/html
6
7exec "$@"

最后一行, exec "$@" 指示壳运行任何命令被传入作为输入论点的下一个。 这很重要,因为你想要 Docker 继续运行在执行此脚本后,Apache 运行命令 (apache2-foreground) 保存并关闭文件。

接下来,在应用程序的 root 目录中创建一个 .dockerignore 文件. 此文件将确保当您构建您的 Docker 图像时,它不会被不应该复制的包或环境文件污染:

1nano ./.dockerignore
1[label ./.dockerignore]
2.env
3/vendor

保存并关闭文件。

在您使用 Docker Compose 本地运行应用程序之前,您需要创建的最后一个文件是docker-compose.yml文件,但是在配置此 YAML 文件时,您需要输入 Laravel 在安装过程中生成的APP_KEY

1cat .env | grep ^APP_KEY

你会看到这样的输出:

1[secondary_label Output]
2APP_KEY=base64:0EHhVpgg ... UjGE=

将钥匙复制到剪辑板上,请确保包含前缀 base64:. 现在,在应用程序的根目录中创建 docker-compose.yml 文件:

1nano ./docker-compose.yml

在这里,我们将包括您的Laravel应用程序的PHP图像以及一个MySQL容器来运行您的数据库。

 1[label ./docker-compose.yml]
 2version: '3.5'
 3services:
 4  php:
 5    image: your_docker_hub_username/laravel-kubernetes:latest
 6    restart: always
 7    ports:
 8      - 8000:80
 9    environment:
10      - APP_KEY="your_laravel_app_key"
11      - APP_ENV=local
12      - APP_DEBUG=true
13      - DB_PORT=3306
14      - DB_HOST=mysql
15      - DB_DATABASE
16      - DB_USERNAME
17      - DB_PASSWORD
18  mysql:
19    image: mysql:5.7
20    restart: always
21    environment:
22      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
23      - MYSQL_DATABASE=${DB_DATABASE}
24      - MYSQL_USER=${DB_USERNAME}
25      - MYSQL_PASSWORD=${DB_PASSWORD}

使用您将your_laravel_app_key变量复制到剪辑板上的APP_KEY变量,并为your_docker_hub_username变量使用您的 Docker Hub 用户名。

您将使用「docker build」本地创建第一个图像,第二个图像是官方的 MySQL Docker 图像可在 Docker Hub 上使用。

要构建包含 Laravel 应用程序的 Docker 图像,请执行以下命令. 请确保将 your_docker_hub_username 替换为您的用户名或您的团队在 Docker Hub 中的用户名,该图像将存储在那里:

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

接下来,您可以使用 Docker Compose 运行两个容器,并使用所需的数据库凭据:

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

这里使用的四个环境变量(‘DB_ROOT_PASSWORD’,‘DB_DATABASE’,‘DB_USERNAME’,‘DB_PASSWORD’)如果您愿意,可以进行修改,但由于您只在本地测试您的应用程序,您不必担心保护它们。

您的 MySQL 数据库可能需要 30 秒钟才能初始化,并且您的容器就可以准备好。

The Laravel application running locally using Docker Compose

您的 PHP 应用程序将连接到您的 MySQL 数据库. 成功连接后,在 Laravel 标志下方将出现文本Database Connected: local_db

现在,您已经使用 Docker Compose 本地测试了 Docker 图像,您可以通过运行docker-compose down来将容器放下:

1docker-compose down

在下一节中,您将把您的 Docker 图像推到 Docker Hub,以便您的 Helm 图表可以使用它来部署您的应用程序到您的 Kubernetes 集群中。

步骤3 —将您的Docker图像推到Docker Hub

将代码部署到 Kubernetes 的 LAMP Helm 图表需要您的代码在集装箱注册表中可用. 虽然您可以将您的图像推到私人或自托注册表,但对于本教程的目的,您将在 Docker Hub 上使用可供公众使用的免费 Docker 注册表。

使用您的网页浏览器访问您的帐户 Docker Hub然后创建一个名为laravel-kubernetes的新存储库。

Creating a new repository on Docker Hub

接下来,如果您没有从本地计算机连接到 Docker Hub,则需要登录 Docker Hub。

1docker login -u your_docker_hub_username

提示时输入您的登录凭证,这通常只需要每台机器做一次,因为Docker会将您的凭证保存到您的主目录中的 `~/.docker/config.json。

最后,将您的图像推到 Docker Hub:

1docker push your_docker_hub_username/laravel-kubernetes:latest

根据您的连接速度,上传应用程序可能需要几分钟,但一旦Docker完成,您将看到终端中的最终消化哈希和图像的大小。

1[secondary_label Output]
2latest: digest: sha256:df4bdeda91484c8c26a989b13b8f27ab14d93ab2e676e3c396714cb3811c4086 size: 4918

现在您的 Laravel 应用程序已集装,并且您已将图像推到 Docker Hub,您可以在 Helm Chart 或 Kubernetes 部署中使用该图像。

步骤 4 —用 LAMP 头盔图配置和部署应用程序

Helm 提供了一些 图表以帮助您使用预设工具组合来设置 Kubernetes 应用程序. 虽然您可以创建自己的 Kubernetes 服务文件以实现类似的部署,您将在本节中看到使用 Helm 图表将需要更少的配置。

首先,您需要一个目录来存储您的所有 Helm 配置文件,在您的 Laravel 项目的根部创建一个名为helm/的新目录:

1mkdir ./helm

helm/目录中,您将创建两个新的文件:values.ymlsecrets.yml

1nano ./helm/values.yml

values.yml文件将包含非秘密配置选项,这些选项将取代 LAMP Helm 图表中的默认值. 添加以下配置,确保用自己的用户名替换your_docker_hub_username:

 1[label ./helm/values.yml]
 2php:
 3  repository: "your_docker_hub_username/laravel-kubernetes"
 4  tag: "latest"
 5  fpmEnabled: false
 6  envVars:
 7    - name: APP_ENV
 8      value: production
 9    - name: APP_DEBUG
10      value: false
11    - name: DB_PORT
12      value: 3306
13    - name: DB_HOST
14      value: localhost

保存并关闭文件。

现在创建一个 secrets.yml 文件:

1nano ./helm/secrets.yml

「secrets.yml」不会被检查到版本控制中,它将包含敏感的配置信息,如您的数据库密码和Laravel应用程序密钥。

 1[label ./helm/secrets.yml]
 2mysql:
 3  rootPassword: "your_database_root_password"
 4  user: your_database_user
 5  password: "your_database_password"
 6  database: your_database_name
 7
 8php:
 9  envVars:
10    - name: APP_KEY
11      value: "your_laravel_app_key"
12    - name: DB_DATABASE
13      value: your_database_name
14    - name: DB_USERNAME
15      value: your_database_user
16    - name: DB_PASSWORD
17      value: "your_database_password"

请确保在您的生产数据库中使用强大的用户名和密码组合,并使用相同的 your_laravel_app_key 如上所述,或打开一个新的终端窗口并通过运行以下命令生成一个新的。

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

保存并关闭secrets.yml

接下来,为了防止您的'secrets.yml' 文件被嵌入到 Docker 图像中或保存到版本控制中,请确保将下列行添加到您的 '.dockerignore' 和 '.gitignore' 文件中。

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

现在你已经为你的应用程序和Docker图像创建了Helm配置文件,你可以将这个Helm图像作为一个新的版本在你的Kubernetes集群上安装。

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

你会看到这样的输出:

1[secondary_label Output]
2NAME: laravel-kubernetes
3LAST DEPLOYED: Mon May 18 13:21:20 2020
4NAMESPACE: default
5STATUS: deployed
6REVISION: 1

您的应用程序需要一两分钟才能可用,但您可以运行此命令来监控群集中的 Kubernetes 服务:

1kubectl get services -w

查找您的申请名称:

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

当您的新laravel-kubernetes-lamp服务在EXTERNAL-IP下显示 IP 地址时,您可以访问your_external_ip以查看在您的 Kubernetes 集群上运行的应用程序。

The Laravel application running on Kubernetes using the LAMP Helm chart

运行一个不受保护的 IP 地址的 Web 应用程序可能很好,但您的网站没有 SSL 证书和自定义域名即可完成生产。

1helm delete laravel-kubernetes

在下一步中,您将扩展这个第一个 Helm 配置,将 Ingress 控制器、SSL 证书和自定义域名添加到您的 Laravel 应用程序中。

步骤 5 — 将 Ingress 控制器和 SSL 添加到您的 Kubernetes 集群

在 Kubernetes 中,一个 Ingress Controller负责将您的应用程序服务曝光到互联网上。在上一步中,LAMP Helm 图表创建了一个 DigitalOcean Load Balancer,并通过负载平衡器的 IP 地址直接曝光您的应用程序。

你可以终止SSL和你的域名直接在负载平衡器上,但由于你在Kubernetes工作,也许更方便在同一个地方管理全部. 将更多关于入侵控制器和下列步骤的详情改为:[如何在使用Helm的数字大洋上设置Nginx入侵(https://andsky.com/tech/tutorials/how-to-set-up-an-nginx-ingress-on-digitalocean-kubernetes-using-helm).

LAMP Helm 图表包含支持 Ingress 的配置选项. 打开您的 helm/values.yml 文件:

1nano ./helm/values.yml

现在添加以下几行:

1[label ./helm/values.yml]
2...
3# Use Ingress Controller
4service:
5  type: ClusterIP
6  HTTPPort: 80
7ingress:
8  enabled: true
9  domain: your_domain

这指示您的部署不要安装负载平衡器,而是将应用程序暴露在Kubernetes集群的端口80中,Ingress控制器将其暴露在互联网上。

现在,运行您之前运行的helm install命令,让您的Laravel应用程序再次运行,请确保您从应用程序的根目录中运行该命令:

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

接下来,使用 Kubernetes 维护的 Nginx Ingress Controller在您的 Kubernetes 集群上安装nginx-ingress控制器:

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

安装后,您将看到这样的输出:

1[secondary_label Output]
2NAME: nginx-ingress
3LAST DEPLOYED: Mon May 18 13:28:34 2020
4NAMESPACE: default
5STATUS: deployed
6REVISION: 1

您还需要一个 Ingress 资源来曝光您的 Laravel 应用程序的部署。在应用程序的 root 目录中创建一个名为 `ingress.yml’的新文件:

1nano ./ingress.yml

此文件定义了您的应用程序的主机、SSL 证书管理器以及后端服务和端口名. 添加以下配置,以您选择的域代替 your_domain:

 1[label ./ingress.yml]
 2apiVersion: networking.k8s.io/v1beta1
 3kind: Ingress
 4metadata:
 5  name: laravel-kubernetes-ingress
 6  annotations:
 7    kubernetes.io/ingress.class: nginx
 8    cert-manager.io/cluster-issuer: letsencrypt-prod
 9spec:
10  tls:
11    - hosts:
12        - your_domain
13      secretName: laravel-kubernetes-tls
14  rules:
15    - host: your_domain
16      http:
17        paths:
18          - backend:
19              serviceName: laravel-kubernetes-lamp
20              servicePort: 80

保存并关闭文件。

接下来,您应该安装 Cert-Manager并创建一个发行程序,允许您使用 Let's Encrypt创建生产SSL证书。 Cert-Manager需要 自定义资源定义您可以从 Cert-Manager 存储库使用命令行:

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

这将创建一系列的Kubernetes资源,这些资源将在命令行中显示:

1[secondary_label Output]
2customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
3customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
4customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
5customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
6customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
7customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io create

Cert-Manager 还需要 一个名称空间在您的 Kubernetes 集群中隔离它:

1kubectl create namespace cert-manager

你会看到这个结果:

1[secondary_label Output]
2namespace/cert-manager created

由于 Jetstack 的 Cert-Manager 不是 Kubernetes 维护的图表之一,您还需要添加 Jetstack Helm 存储库

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

成功的添加将产生如下:

1[secondary_label Output]
2"jetstack" has been added to your repositories

现在,您已经准备好将 Cert-Manager 安装到您的 Kubernetes 集群上的cert-manager名称空间中:

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

完成后,您将看到部署的总结如下:

1[secondary_label Output]
2NAME: cert-manager
3LAST DEPLOYED: Mon May 18 13:32:08 2020
4NAMESPACE: cert-manager
5STATUS: deployed
6REVISION: 1

您需要添加到 Laravel 应用程序的 root 目录的最后一个文件是 Kubernetes 配置文件 `production_issuer.yml。

1nano ./production_issuer.yml

现在添加以下内容:

 1apiVersion: cert-manager.io/v1alpha2
 2kind: ClusterIssuer
 3metadata:
 4  name: letsencrypt-prod
 5spec:
 6  acme:
 7    # Email address used for ACME registration
 8    email: your_email_address
 9    server: https://acme-v02.api.letsencrypt.org/directory
10    privateKeySecretRef:
11      # Name of a secret used to store the ACME account private key
12      name: letsencrypt-prod-private-key
13    # Add a single challenge solver, HTTP01 using nginx
14    solvers:
15      - http01:
16          ingress:
17            class: nginx

保存并关闭文件。

Let's Encrypt 会发送 your_email_address 任何重要的通知和到期警告,所以请确保在 Kubernetes 集群中添加一个定期检查的地址。

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

最后,更新您的域名 DNS 记录以将 A 记录指向您的负载平衡器的 IP 地址。

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

更新您的 DNS 记录的过程取决于您在哪里管理域名和 DNS 托管,但如果您正在使用 DigitalOcean,您可以参考我们的指南在 如何管理 DNS 记录

一旦您的 DNS 记录更新,并生成您的 SSL 证书,您的应用程序将可用在您的_域,并启用 SSL。

The Laravel application with SSL termination and a custom domain name

虽然您的 PHP 应用程序和数据库已经连接,但您仍然需要运行数据库迁移,在最后一步中,您将看到如何在 Kubernetes pod 上运行 Artisan commands以执行数据库迁移和其他常见维护任务。

步骤 6 — 运行远程命令

虽然您的 Laravel 应用程序正在运行并连接到 Kubernetes 中的 MySQL 数据库,但您应该在新的 Laravel 安装中运行几项常见操作。您应该执行的常见任务之一是 database migrations

在您可以在 Laravel 应用程序上运行 Artisan 命令之前,您需要知道正在运行您的 Laravel 应用程序容器的 pod的名称。 使用命令行,您可以查看您的 Kubernetes 集群中的所有 pods:

1kubectl get pods

你会看到这样的输出:

1[secondary_label Output]
2NAME READY STATUS RESTARTS AGE
3laravel-kubernetes-lamp-77fb989b46-wczgb 2/2 Running 0 16m

选择你的laravel-kubernetes-lamp-...部署的pod。 确保在输出中使用这个名称,而不是上面列出的一个。 现在你可以运行kubectl exec在它上。 例如,使用手工迁移命令运行数据库迁移。 你会添加--force旗帜,因为你在生产中运行pod:

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

这个命令将产生一个输出:

1[secondary_label Output]
2Migration table created successfully.
3Migrating: 2014_10_12_000000_create_users_table
4Migrated:  2014_10_12_000000_create_users_table (0.16 seconds)
5Migrating: 2019_08_19_000000_create_failed_jobs_table
6Migrated:  2019_08_19_000000_create_failed_jobs_table (0.05 seconds)

您现在已经成功部署了Laravel 7和MySQL到Kubernetes,并完成了一项基本的数据库维护任务。

结论

在本教程中,您了解如何容器化Laravel PHP应用程序,将其连接到MySQL数据库,将包含您的代码的Docker图像推到Docker Hub,然后使用头盔图表将该图像部署到DigitalOcean Kubernetes群集。

Kubernetes和Helm为您提供了一些比传统的 LAMP 堆栈主机更好的条件:可扩展性,在不直接登录到您的服务器的情况下互换服务的能力,进行滚动升级的工具,以及控制您的主机环境. 尽管如此,最初对你的应用进行集装箱化和配置的复杂性,使开始应用的障碍相当高。 以这个向导为起点,将拉拉维尔部署到库伯涅茨就更容易实现. 从这里,您可以考虑更多地了解Laravel的威力,或者向Linkerd这样的Kubernets添加监测工具,你可以手动安装我们的指南,或者使用DigitalOcean 1-Click.

Published At
Categories with 技术
comments powered by Disqus