نحوه استقرار Laravel 7 و MySQL در Kubernetes با استفاده از Helm
امروزه 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
⦁
بخش
./resources/views/welcome.blade.php
…
Database Connected:
@php
try {
DB::connection()->getPDO();
echo DB::connection()->getDatabaseName();
} catch (Exception $e) {
echo ‘None’;
}
@endphp
…
فايل را ذخيره كنيد و ببنديد.
اين كارها تمام سفارشي سازي هايي است كه براي اين آموزش بايد روي برنامه پيش فرض 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 نصب كنيد ، اطلاعاتي دريافت كنيد.
برچسبها:Helm, Kubernetes, Laravel 7
برچسب: ،