امروزه Laravel یکی از محبوب ترین چارچوب های منبع باز برنامه PHP است. معمولاً با یک پایگاه داده MySQL مستقر می شود اما می تواند به گنه ای پیکربندی شود که از انواع مختلف گزینه های ذخیره داده backend استفاده کند.Laravel مفتخر است که از بسیاری از ویژگی های مدرن PHP و اکوسیستم گسترده بسته استفاده می کند.
Kubernetes یک پلتفرم هماهنگ سازی کانتینر است که می تواند بر روی خوشه های vpsgol Kubernetes میزبانی شود تا بخش عمده ای از کار اجرایی را در راه اندازی و اجرای کانتینرها در تولید انجام دهد. Helm یک مدیر بسته Kubernetes است که پیکربندی و نصب سرویس ها و pod ها در Kubernetes را آسان تر می کند.
در این راهنما یک برنامه PHP Laravel ایجاد می کنید ، برنامه خود را در یک تصویر Docker ایجاد می کنید و با استفاده از نمودار LAMP Helm آن تصویر را در یک خوشه vpsgol Kubernetes به کار می گیرید. در مرحله بعدی ، یک کنترلر Ingress را تنظیم می کنید تا SSL و یک نام دامنه سفارشی را به برنامه تان اضافه کنید. پس از اتمام ، یک برنامه Laravel در حال کار و متصل به یک پایگاه داده MySQL خواهید داشت که روی یک خوشه Kubernetes در حال اجرا است.
پیش نیازها
⦁ Docker روی دستگاهی که از آن به خوشه خود دسترسی پیدا کنید ، نصب شده باشد. می توانید دستورالعمل های دقیقی در مورد نصب Docker برای اکثر توزیع های لینوکس در اینجا یا در وب سایت Docker برای سایر سیستم عامل ها پیدا کنید.
⦁ یک حساب کاربری در Docker Hub برای ذخیره تصاویر Docker که می خواهید در طول این آموزش ایجاد کنید.
⦁ یک خوشه vpsgol Kubernetes 1.17+ که پیکربندی اتصال شما به صورت پیش فرض kubectl تنظیم شده باشد.
⦁ مدیر بسته Helm 3 نصب شده روی دستگاه محلی شما. مرحله اول را کامل کنید و از مرحله دوم نحوه نصب نرم افزار روی Kubernetes Cluster با آموزش Helm 3 Package Manager ، repo stable  را اضافه کنید.
⦁ یک نام دامنه کاملاً ثبت شده با یک رکورد A در دسترس. در سراسر این آموزش از your_domain استفاده خواهد شد. می توانید نام دامنه را در Namecheap خریداری کنید ، به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید. در مورد IP برای رکورد A دامنه خود در این زمان نگران نباشید. هنگامی که به مرحله 5 رسیدید و کنترلر Ingress شما در محل کار قرار گرفت ، your_domain خود را به IP مناسب وصل می کنید.
مرحله 1 – ایجاد یک برنامه جدید Laravel
در این مرحله از Docker برای ایجاد یک برنامه جدید Laravel 7 استفاده خواهید کرد ، اما باید بتوانید با یک برنامه موجود Laravel که از MySQL به عنوان پایگاه داده پشتیبان استفاده می کند ، مراحل مشابه را طی کنید. برنامه جدیدی که شما ایجاد می کنید ، تأیید می کند که Laravel به بانک اطلاعاتی متصل شده است و نام بانک اطلاعات را نشان می دهد.
ابتدا به دیرکتوری هوم خود بروید و سپس با استفاده از یک کانتینر composer Docker یک برنامه جدید Laravel ایجاد کنید:
⦁ $ cd ~

⦁ $ docker run –rm -v $(pwd):/app composer create-project –prefer-dist laravel/laravel laravel-kubernetes

پس از اتمام کار کانتینر و نصب تمام بسته های composer ، باید نصب جدیدی از Laravel را در دیرکتوری فعلی خود با نام laravel-kubernetes ببینید. به آن پوشه بروید:
⦁ $ cd ~/laravel-kubernetes

بقیه دستورات این آموزش را از اینجا اجرا خواهید کرد.
هدف از این برنامه تست اتصال بانک اطلاعاتی شما و نمایش نام آن در مرورگر شما است. برای آزمایش اتصال بانک اطلاعاتی ، فایل ./resources/views/welcome.blade.phpرا در ویرایشگر متن باز کنید:
⦁ $ nano ./resources/views/welcome.blade.php

بخش <div class = “link”> … </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 ، اتصال به پایگاه داده شما را آزمایش می کند و نام بانک اطلاعاتی را روی صفحه نمایش Laravel در مرورگر وب شما نمایش می دهد.
در مرحله بعد ، از Docker برای ساختن تصویری که حاوی این برنامه Laravel و Docker Compose است برای بررسی کارکرد آن به صورت محلی و اتصال به یک پایگاه داده MySQL استفاده می کنید.
مرحله 2 – کانتینرایز کردن برنامه Laravel
اکنون که یک برنامه جدید Laravel ایجاد کرده اید ، باید کد خود را در یک تصویر Docker بسازید و سپس تصویر را با Docker Compose تست کنید. در حالی که هدف از این آموزش استقرار برنامه روی یک خوشه Kubernetes است ، Docker Compose روشی مناسب برای آزمایش تصویر Docker و پیکربندی به صورت محلی قبل از اجرای آن روی cloud است. این حلقه بازخورد سریع می تواند برای ایجاد و آزمایش تغییرات کوچک مفید باشد.
ابتدا با استفاده از nano یا ویرایشگر متن مورد نظر خود ، یک فایل را در ریشه برنامه Laravel خود با نام Dockerfile ایجاد کنید:
⦁ $ 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 با تصویر PHP 7.4 Apache Docker که در Docker Hub یافت می شود ، شروع می کند ، سپس چندین بسته Linux را که معمولاً توسط برنامه های Laravel مورد نیاز هستند ، نصب می کند. در مرحله بعد ، فایلهای پیکربندی Apache را ایجاد کرده و بازنویسی هدر را فعال می کند.Dockerfile چندین پسوند متداول PHP را نصب می کند و متغیر محیطی را اضافه می کند تا اطمینان حاصل کند که ورود های لاراول از طریق stderr به داخل کانتینر منتقل می شوند. این به شما امکان می دهد تا ورودهای لاراول را با پیگیری Docker Compose یا Kubernetes ببینید.
سرانجام ، Dockerfile تمام کدهای موجود در برنامه Laravel را در / var / www / tmp کپی کرده و متعلقات Composer را نصب می کند. سپس ENTRYPOINT را تنظیم می کند ، اما باید آن فایل را ایجاد کنید ، که در مرحله بعدی انجام خواهیم داد.
در دیرکتوری اصلی پروژه خود ، فایل جدیدی بنام docker-entrypoint.sh ایجاد کنید. این فایل هنگامی اجرا می شود که کانتینر شما به صورت محلی یا در خوشه Kubernetes اجرا شود ، و کد برنامه Laravel شما را از دیرکتوری / var / www / tmp به / var / www / html کپی می کند که Apache قادر به ارائه آن است.
⦁ $ 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 بعد از اجرای این اسکریپت ، دستور اجرای آپاچی (apache2-foreground) را ادامه دهد. فایل را ذخیره کنید و ببندید.
در مرحله بعدی ، یک فایل .dockerignore را در دیرکتوری اصلی برنامه خود ایجاد کنید. این فایل اطمینان می دهد که هنگام ساختن تصویر Docker ، با بسته ها یا فایل های محیطی که نباید در آن کپی گردد مخلوط نمی شود:
⦁ $ nano ./.dockerignore

./.dockerignore
.env
/vendor

فایل را ذخیره کنید و ببندید.
آخرین فایلی که باید قبل از اجرای برنامه خود بصورت محلی با استفاده از Docker Compose ایجاد کنید ، فایل docker-compose.yml است. اما در طول پیکربندی این فایل YAML ، باید APP_KEY را که لاراول هنگام نصب ایجاد کرده است ، وارد کنید. با باز کردن و جستجو در فایل ./.env یا با اجرای دستورات cat و grep زیر ، آن را پیدا کنید:
⦁ $ cat .env | grep ^APP_KEY

خروجی مانند این را مشاهده خواهید کرد:
Output
APP_KEY=base64:0EHhVpgg … UjGE=

کلید خود را در کلیپ بورد خود کپی کنید. حتماً پیشوند base64: وجود دارد. اکنون فایل docker-compose.yml را در دیرکتوری اصلی برنامه خود ایجاد کنید:
⦁ $ nano ./docker-compose.yml

در اینجا ما برای پیاده سازی پایگاه داده شما از تصویر PHP برنامه Laravel و همچنین یک کانتینر 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}

برای متغیر your_laravel_app_key از متغیر APP_KEY که در کلیپ بورد کپی کرده اید استفاده کنید و از متغیر your_docker_hub_username برای نام کاربری Docker Hub استفاده نمایید. فایل را ذخیره کنید و ببندید.
اولین تصویر را بصورت محلی با استفاده از docker build ایجاد خواهید کرد. تصویر دوم تصویر رسمی MySQL Docker است که در Hub Docker موجود است. هر دو به چندین متغیر محیطی احتیاج دارند ، که شما هنگام اجرای کانتینرها خواهید داشت.
برای ساختن تصویر Docker حاوی برنامه Laravel ، دستور زیر را اجرا کنید. مطمئن شوید که your_docker_hub_username را با نام کاربری یا نام کاربری تیم خود در Docker Hub که این تصویر در آن ذخیره می شود ، جایگزین کنید:
⦁ $ docker build -t your_docker_hub_username/laravel-kubernetes:latest .

در مرحله بعد ، می توانید این دو کانتینر را با Docker Compose با اعتبارات موردنیاز بانک اطلاعاتی اجرا کنید:
⦁ $ DB_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) در صورت تمایل می توانند اصلاح شوند ، اما از آنجا که شما فقط برنامه خود را بصورت محلی آزمایش می کنید ، دیگر لازم نیست نگران امنیت آنها باشید.
ممکن است حداکثر 30 ثانیه طول بکشد تا پایگاه داده MySQL شروع به کار کند و کانتینرها آماده شوند. هنگامی که آماده بودند ، می توانید برنامه Laravel خود را بر روی دستگاه خود در localhost:8000مشاهده کنید.

برنامه PHP شما به پایگاه داده MySQL شما متصل می شود. پس از اتصال موفق ، متن “بانک اطلاعاتی متصل: local_db” در زیر آرم Laravel ظاهر می شود.
اکنون که تصویر Docker خود را بصورت محلی با استفاده از Docker Compose آزمایش کرده اید ، می توانید کانتینرها را با اجرای docker-compose down پایین بیاورید:
⦁ $ docker-compose down

در بخش بعدی ، تصویر Docker خود را به Docker Hub سوق می دهید تا نمودار Helm شما بتواند از آن برای استقرار برنامه خود در خوشه Kubernetes استفاده کند.
مرحله 3 – وارد کردن تصویر Docker به Docker Hub
نمودار LAMP Helm که برای استفاده از کد خود در Kubernetes استفاده خواهید کرد ، نیاز دارد که کد شما در یک رجیستری کانتینر موجود باشد. در حالی که می توانید تصویر خود را به یک رجیستری خصوصی یا خود هاست وارد کنید ، برای اهداف این آموزش از یک رجیستری Docker در دسترس عمومی و رایگان در Docker Hub استفاده خواهید کرد.
با استفاده از مرورگر وب خود به حساب کاربری خود در Docker Hub دسترسی پیدا کنید و سپس یک مخزن جدید به نام laravel-kubernetes ایجاد کنید.

در مرحله بعد ، اگر از دستگاه محلی خود به Docker Hub متصل نشده اید ، باید وارد Docker Hub شوید. می توانید این کار را از طریق خط فرمان انجام دهید:
⦁ $ docker login -u your_docker_hub_username

هنگام درخواست ، اعتبارنامه ورود خود را وارد کنید. این کار معمولاً فقط باید یک بار در هر دستگاه انجام شود زیرا Docker اعتبار شما را در دیرکتوری ~ / .docker / config.json در دیرکتوری هوم شما ذخیره می کند.
در آخر ، تصویر خود را به Docker Hub وارد کنید:
⦁ $ docker push your_docker_hub_username/laravel-kubernetes:latest

بسته به اتصال شما ممکن است چند دقیقه طول بکشد تا برنامه تان آپلود شود، اما هنگامی که کار Docker انجام شد ، یک hash نهایی و اندازه تصویر خود را در ترمینال مشاهده خواهید کرد. چیزی شبیه به این خواهد بود:
Output
latest: digest: sha256:df4bdeda91484c8c26a989b13b8f27ab14d93ab2e676e3c396714cb3811c4086 size: 4918

اکنون که برنامه Laravel شما محصور شده است و تصویری را به Docker Hub فشار داده اید ، می توانید از آن در یک طرح Helm Chart یا Kubernetes استفاده کنید. در مرحله بعد ، مقادیر سفارشی را بر اساس نمودار LAMP Helm تنظیم کرده و آن را به خوشه vpsgol Kubernetes خود مستقر می کنید.
مرحله 4 – پیکربندی و به کارگیری برنامه با نمودار LAMP Helm
Helm تعدادی نمودار را برای کمک به شما در تنظیم برنامه های Kubernetes با استفاده از ابزارهای از پیش تعیین شده ابزارها فراهم می کند. در حالی که شما می توانید فایل های خدمات Kubernetes خود را برای دستیابی به استقرار مشابه بنویسید ، در این بخش خواهید دید که استفاده از نمودار Helm به پیکربندی بسیار کمتری نیاز دارد.
ابتدا برای ذخیره کلیه فایل های پیکربندی Helm به یک دیرکتوری راهنما نیاز دارید. دایرکتوری جدیدی را در ریشه پروژه Laravel خود به نام helm ایجاد کنید:
⦁ $ mkdir ./helm

در داخل دایرکتوری helm / ، دو فایل جدید ایجاد خواهید کرد: values.yml و secrets.yml. ابتدا values.yml را ایجاد و باز کنید:
⦁ $ nano ./helm/values.yml

فایل values.yml شامل گزینه های پیکربندی غیر سری است که مقادیر پیش فرض در نمودار LAMP Helm را رونویسی می کند. تنظیمات زیر را اضافه کنید ، مطمئن شوید که نام_docker_hub_us را با نام کاربری شخصی خود جایگزین کنید:
./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 ایجاد کنید:
⦁ $ 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 خود قرار دارد کپی کنید:
⦁ $ docker run –rm -v $(pwd):/app php:cli php /app/artisan key:generate

secrets.yml را ذخیره کنید و ببندید.
در مرحله بعد ، برای جلوگیری از ایجاد فایل secrets.yml در تصویر Docker یا ذخیره روی کنترل نسخه ، مطمئن شوید که خط زیر را هم به فایل های .dockerignore و .gitignore اضافه می کنید. /helm/secrets.yml را در هر فایل باز کرده و پیوست کنید ، یا برای اضافه کردن هر دو دستور زیر را اجرا کنید:
⦁ $ echo ‘/helm/secrets.yml’ >> ./.dockerignore && echo ‘/helm/secrets.yml’ >> ./.gitignore

اکنون که فایل های پیکربندی Helm را برای برنامه خود و تصویر Docker ایجاد کرده اید ، می توانید این نمودار Helm را به عنوان یک نسخه جدید در خوشه Kubernetes خود نصب کنید. نمودار خود را از دیرکتوری اصلی برنامه خود نصب کنید:
⦁ $ 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

برنامه شما یک یا دو دقیقه طول می کشد تا در دسترس قرار گیرد ، اما می توانید این دستور را برای نظارت بر خدمات Kubernetes در خوشه خود اجرا کنید:
⦁ $ 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 نمایش می دهد ، می توانید برای دیدن برنامه در خوشه Kubernetes خود ، به your_external_ip مراجعه کنید. برنامه شما به بانک اطلاعاتی شما متصل می شود ، مانند آنچه هنگام اجرای برنامه به صورت محلی روی Docker Compose انجام دادید ، نام بانک اطلاعاتی را در زیر آرم Laravel مشاهده خواهید کرد.

اجرای یک برنامه وب در آدرس IP نا ایمن ممکن است برای اثبات مفهوم مناسب باشد ، اما وب سایت شما بدون گواهی SSL و نام دامنه سفارشی آماده تولید نیست. قبل از انجام تنظیمات در مرحله بعدی ، نسخه خود را از طریق خط فرمان uninstall کنید:
⦁ $ helm delete laravel-kubernetes

در مرحله بعد ، اولین پیکربندی Helm را بسط میدهید تا یک کنترلر Ingress ، گواهی SSL و دامنه سفارشی را به برنامه Laravel خود اضافه کنید.
مرحله 5 – اضافه کردن کنترلرIngress و SSL به خوشه Kubernetes
در Kubernetes ، کنترلرIngress مسئول ارائه خدمات برنامه شما در اینترنت است. در مرحله قبل ، نمودار LAMP Helm یک لود بالانسر vpsgol ایجاد کرد و برنامه شما را مستقیماً از طریق آدرس IP لود بالانسر به نمایش میگذارد.
می توانید SSL و نام دامنه خود را مستقیماً روی لود بالانسر محدود کنید ، اما از آنجا که در Kubernetes کار می کنید ، ممکن است مدیریت همه آن ها در یک مکان راحت تر باشد. برای اطلاعات بیشتر در مورد کنترلرهای Ingress و جزئیات بیشتر در مورد مراحل زیر ، نحوه تنظیم یک Nginx Ingress در vpsgol Kubernetes با استفاده از Helm را بخوانید.
نمودار LAMP Helm شامل گزینه ای برای تنظیم پشتیبانی از Ingress است. فایل helm/values.yml خود را باز کنید:
⦁ $ nano ./helm/values.yml

خطوط زیر را اضافه کنید:
./helm/values.yml

# Use Ingress Controller
service:
type: ClusterIP
HTTPPort: 80
ingress:
enabled: true
domain: your_domain

این امر باعث میشود استقرار شما لود بالانسر را نصب نکند و در عوض برنامه را در پورت 80 خوشه Kubernetes ارائه دهد که کنترلرIngress آن را در اینترنت قرار دهد. values.yml را ذخیره کرده و ببندید.
اکنون دستور helm install را که قبلاً اجرا کرده اید ، اجرا کنید تا دوباره برنامه Laravel خود را راه اندازی نمایید. حتماً این دستور را از دیرکتوری روت برنامه خود اجرا کنید:
⦁ $ helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

سپس ، کنترلر nginx-ingress را روی خوشه Kubernetes خود با استفاده از کنترلرNginx Ingress تحت کنترل Kubernetes نصب کنید:
⦁ $ 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 ایجاد کنید:
⦁ $ nano ./ingress.yml

این فایل، هاست برنامه ، یعنی مدیر گواهینامه SSL و خدمات backend و نام پورت شما را تعریف می کند. تنظیمات زیر را اضافه کنید ، و 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’s Encrypt ، گواهی های تولید SSL تولید کنید.Cert-Manager به تعاریف منابع سفارشی نیاز دارد که می توانید با استفاده از خط فرمان از مخزن Cert-Manager استفاده کنید:
⦁ $ 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 به یک فضای نام نیاز دارد:
⦁ $ kubectl create namespace cert-manager

این خروجی را مشاهده خواهید کرد:
Output
namespace/cert-manager created

از آنجا که cert منیجر Jetstack یکی از نمودارهای حفظ شده Kubernetes نیست ، شما باید مخزن Jetstack Helm را نیز اضافه کنید. دستور زیر را اجرا کنید تا در Helm در دسترس باشد:
$ helm repo add jetstack https://charts.jetstack.io

افزودن موفقیت آمیز خروجی زیر را به همراه خواهد داشت:
Output
“jetstack” has been added to your repositories

اکنون آماده هستید تا Cert-Manager را در فضای نام cert منیجر در خوشه Kubernetes خود نصب کنید:
$ 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 است. فایل را ایجاد کنید:
$ 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’s Encrypt، هشدارهای مهم و هشدارهای مربوط به انقضا را به your_email_address ارسال میکند ، بنابراین حتماً آدرسی را که مرتباً بررسی میکنید ، اضافه نمایید. این فایل را ذخیره کنید و یک منبع جدید هم برای منبع Ingress و هم برای صادرکننده تولید در خوشه Kubernetes خود ایجاد کنید:
⦁ $ kubectl create -f ingress.yml

⦁ $ kubectl create -f production_issuer.yml

در آخر ، رکوردهای DNS نام دامنه خود را به روز کنید تا یک رکورد به آدرس IP لود بالانسر شما نشان داده شود. برای یافتن آدرس IP برای کنترلرIngress خود این دستور را وارد کنید:
⦁ $ 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

از آدرس your_external_ip به عنوان آدرس IP برای رکورد DNS A خود استفاده کنید. روند به روزرسانی رکوردهای DNS شما بسته به مکانی که شما نام دامنه و هاست DNS خود را مدیریت می کنید ، متفاوت است.
هنگامی که رکوردهای DNS شما به روزرسانی شد و گواهینامه SSL شما تولید گردید ، برنامه شما در your_domain موجود است و SSL فعال خواهد شد.

در حالی که برنامه PHP و بانک اطلاعاتی شما اکنون به هم متصل هستند ، همچنان نیاز به رفتن به پایگاه داده دارید. در مرحله آخر ، نحوه اجرای فرامین Artisan را در غلاف Kubernetes خود مشاهده خواهید کرد تا جابه جایی به پایگاه داده و سایر کارهای تعمیر و نگهداری معمول را انجام دهید.

مرحله 6 – اجرای دستورات از راه دور
در حالی که برنامه Laravel شما در حال اجراست و به پایگاه داده MySQL در Kubernetes متصل شده است ، چندین عملیات معمول وجود دارد که باید آنها را با نصب جدید Laravel اجرا کنید. یکی از کارهای متداولی که باید انجام دهید ، انتقال پایگاه داده است.
قبل از اینکه بتوانید یک دستور Artisan را در برنامه Laravel خود اجرا کنید ، باید نام غلاف را اجرا کنید که کانتینر برنامه Laravel شماست. با استفاده از خط فرمان ، می توانید تمام غلاف ها را در خوشه Kubernetes خود مشاهده کنید:
$ 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 را اضافه می کنید زیرا در حال تولید غلاف هستید:
$ 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 Hub وارد کنید ، و سپس از یک نمودار Helm برای استقرار آن تصویر در یک خوشه vpsgol Kubernetes استفاده کنید. در آخر ، SSL و یک نام دامنه سفارشی اضافه کردید و یاد گرفتید که چگونه ابزارهای خط فرمان را روی غلافهای در حال اجرای خود راه اندازی کنید.
Kubernetes و Helm مزایای بسیاری نسبت به هاستینگ معمول LAMP Stack را ارائه می دهند: مقیاس پذیری ، امکان تعویض سرویس ها بدون ورود مستقیم به سرور ، ابزارهایی برای انجام به روزرسانی ها و کنترل روی محیط هاست. به عبارتی ، پیچیدگی کانتینرایز اولیه و پیکربندی برنامه شما مانع شروع کار سریع می شود. با استفاده از این راهنما به عنوان نقطه شروع ، استقرار Laravel به Kubernetes قابل دستیابی تر می شود. از این به بعد میتوانید درباره قدرت لاراول یا اضافه کردن ابزارهای نظارتی به Kubernetes مانند Linkerd ، که می توانید بصورت دستی با راهنمای ما یا با vpsgol 1-Click نصب کنید ، اطلاعاتی دریافت کنید.

برچسب‌ها:, ,