作者选择了 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 秒钟才能初始化,并且您的容器就可以准备好。
您的 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
的新存储库。
接下来,如果您没有从本地计算机连接到 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.yml
和secrets.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 集群上运行的应用程序。
运行一个不受保护的 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。
虽然您的 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.