کارگاه اپ مد

1. مقدمه

آخرین به روز رسانی: 2024-11-01

چگونه یک برنامه قدیمی PHP را به Google Cloud مدرن کنیم؟

(

معمول است که برنامه های قدیمی در حال اجرا بر روی Prem هستند که نیاز به مدرن سازی دارند. این بدان معنی است که آنها را مقیاس پذیر، ایمن و قابل استقرار در محیط های مختلف کنید.

در این کارگاه شما:

  1. برنامه PHP را کانتینر کنید .
  2. به یک سرویس پایگاه داده مدیریت شده ( Cloud SQL ) بروید.
  3. استقرار در Cloud Run (این یک جایگزین صفر عملیات برای GKE/Kubernetes است).
  4. برنامه را با مدیریت هویت و دسترسی (IAM) و مدیر مخفی ایمن کنید .
  5. یک خط لوله CI/CD را از طریق Cloud Build تعریف کنید. Cloud Build می تواند با مخزن Git شما که در ارائه دهندگان Git محبوب مانند GitHub یا GitLab میزبانی شده است، متصل شود و به عنوان مثال، در هر فشاری به سمت اصلی فعال شود.
  6. تصاویر برنامه را در فضای ذخیره سازی ابری میزبانی کنید. این از طریق نصب به دست می آید و برای تغییر برنامه نیازی به کد نیست.
  7. قابلیت Gen AI را از طریق Gemini ، که از طریق توابع ابری (بدون سرور) تنظیم شده است، معرفی کنید.
  8. با SLO ها آشنا شوید و برنامه تازه به روز شده خود را اجرا کنید .

با دنبال کردن این مراحل، می توانید به تدریج برنامه PHP خود را مدرن کنید و مقیاس پذیری، امنیت و انعطاف پذیری استقرار آن را بهبود بخشید. علاوه بر این، انتقال به Google Cloud به شما این امکان را می‌دهد تا از زیرساخت‌ها و سرویس‌های قدرتمند آن استفاده کنید تا اطمینان حاصل کنید که برنامه شما در یک محیط ابری به خوبی اجرا می‌شود.

ما بر این باوریم که آنچه را که به دنبال این مراحل ساده یاد می گیرید، می تواند برای برنامه و سازمان شما با زبان/پشته های مختلف و موارد استفاده متفاوت اعمال شود.

درباره برنامه

برنامه ( کد ، تحت مجوز MIT ) که شما فورک می کنید، یک برنامه پایه PHP 5.7 با احراز هویت MySQL است. ایده اصلی برنامه این است که بستری را فراهم کند که کاربران بتوانند عکس‌ها را آپلود کنند و مدیران این امکان را داشته باشند که تصاویر نامناسب را برچسب گذاری کنند. برنامه دارای دو جدول است:

  • کاربران . همراه با مدیران از قبل کامپایل شده است. افراد جدید می توانند ثبت نام کنند.
  • تصاویر . همراه با چند نمونه تصویر کاربرانی که وارد سیستم شده اند می توانند تصاویر جدید آپلود کنند. ما در اینجا مقداری جادو اضافه می کنیم.

هدف شما

ما می خواهیم برنامه قدیمی را مدرن کنیم تا آن را در Google Cloud داشته باشیم. ما از ابزارها و خدمات آن برای بهبود مقیاس‌پذیری، افزایش امنیت، خودکارسازی مدیریت زیرساخت و ادغام ویژگی‌های پیشرفته مانند پردازش تصویر، نظارت و ذخیره‌سازی داده‌ها با استفاده از سرویس‌هایی مانند Cloud SQL، Cloud Run، Cloud Build، Secret Manager و غیره استفاده خواهیم کرد.

445f7a9ae37e9b4d.png

مهمتر از آن، ما می خواهیم این کار را گام به گام انجام دهیم تا بتوانید یاد بگیرید که فرآیند فکری پشت هر مرحله چیست و معمولاً هر مرحله امکانات جدیدی را برای مراحل بعدی باز می کند (مثال: ماژول های 2 -> 3 و 6 -> 7 ).

هنوز قانع نشدی؟ این ویدیوی 7 دقیقه ای را در یوتیوب ببینید.

آنچه شما نیاز دارید

  • یک رایانه با مرورگر، متصل به اینترنت.
  • برخی از اعتبارات GCP. از طرفداران محلی خود در گوگل بخواهید ؛)
  • دستور gcloud کار می کند.
  • آیا به صورت محلی کار می کنید؟ آن را از اینجا دانلود کنید. شما همچنین به یک ویرایشگر خوب (به عنوان مثال vscode یا Intellij) نیاز دارید.
  • آیا می خواهید همه چیز را " در ابر " انجام دهید؟ سپس می توانید از پوسته ابری استفاده کنید.
  • کاربر Github. برای شاخه‌بندی کد اصلی 🧑🏻‍💻 gdgpescara/app-mod-workshop با git repo خود به این نیاز دارید. این مورد برای داشتن خط لوله CI/CD خود لازم است (تعهد خودکار -> ساخت -> استقرار)

نمونه راه حل ها را می توان در اینجا یافت:

این کارگاه را می توان از رایانه محلی شما مصرف کرد یا به طور کامل در مرورگر انجام داد.

2. راه اندازی اعتبار و فورک

6dafc658860c0ce5.png

اعتبار GCP را بازخرید کنید و محیط GCP خود را تنظیم کنید [اختیاری]

برای اجرای این کارگاه به یک حساب صورتحساب با مقداری اعتبار نیاز دارید. اگر قبلاً صورت‌حساب خود را دارید، می‌توانید از این مرحله صرفنظر کنید.

برای پیوند به اعتبار GCP خود ، یک حساب جدید Google Gmail (*) ایجاد کنید . پیوند بازخرید اعتبار GCP را از مربی خود بخواهید یا از اعتبارات اینجا استفاده کنید: bit.ly/PHP-Amarcord-credits .

با حساب تازه ایجاد شده وارد شوید و دستورالعمل ها را دنبال کنید.

ff739240dbd84a30.png

(

) چرا به یک حساب کاربری جدید جیمیل نیاز دارم؟ *

ما افرادی را دیده‌ایم که به دلیل اینکه حسابشان (به‌ویژه ایمیل‌های کاری یا دانشجویی) قبلاً در معرض GCP قرار گرفته بود و خط‌مشی‌های سازمانی توانایی آن‌ها را برای انجام آن محدود می‌کردند، از نرم‌افزار کد رد می‌شدند. توصیه می‌کنیم یا یک حساب gmail جدید ایجاد کنید یا از یک حساب GMail موجود (gmail.com) بدون مواجهه قبلی با GCP استفاده کنید.

برای بازخرید اعتبار روی دکمه کلیک کنید.

331658dc50213403.png

فرم زیر را با نام و نام خانوادگی خود پر کنید و با شرایط و ضوابط موافقت کنید.

ممکن است لازم باشد چند ثانیه صبر کنید تا حساب صورت‌حساب در اینجا ظاهر شود: https://console.cloud.google.com/billing

پس از انجام کار، Google Cloud Console را باز کنید و با کلیک بر روی Project Selector در منوی کشویی بالا سمت چپ، که در آن "بدون سازمان" نشان داده شده است، یک پروژه جدید ایجاد کنید. زیر را ببینید

bd7548f78689db0b.png

همانطور که در تصویر زیر نشان داده شده است، اگر پروژه جدیدی ندارید، یک پروژه جدید ایجاد کنید. یک گزینه "پروژه جدید" در گوشه بالا سمت راست وجود دارد.

6c82aebcb9f5cd47.png

حتما پروژه جدید را با حساب صورت‌حساب آزمایشی GCP به شرح زیر پیوند دهید.

f202527d254893fb.png

شما برای استفاده از Google Cloud Platform آماده هستید. اگر مبتدی هستید یا فقط می‌خواهید همه کارها را در محیط Cloud انجام دهید، می‌توانید از طریق دکمه زیر در گوشه سمت چپ بالا، مانند تصویر زیر، به Cloud Shell و ویرایشگر آن دسترسی داشته باشید.

7d732d7bf0deb12e.png

مطمئن شوید که پروژه جدید شما در سمت چپ بالا انتخاب شده است:

انتخاب نشده (بد):

c2ffd36a781b276a.png

برگزیده (خوب):

594563c158f4f590.png

برنامه را از Github فورک کنید

  1. به برنامه آزمایشی بروید: https://github.com/gdgpescara/app-mod-workshop
  2. 🍴 چنگال کلیک کنید.
  3. اگر اکانت github ندارید، باید یک حساب جدید ایجاد کنید.
  4. موارد را همانطور که می خواهید ویرایش کنید.

734e51bfc29ee5df.png

  1. کد برنامه را با استفاده از git clone کلون کنید https://github.com/ <YOUR-GITHUB-USER>/<YOUR-REPO-NAME>
  1. پوشه پروژه کلون شده را با ویرایشگر مورد علاقه خود باز کنید. اگر Cloud Shell را انتخاب کنید، می‌توانید این کار را با کلیک کردن روی «باز کردن ویرایشگر» مانند شکل زیر انجام دهید.

40f5977ea4c1d1cb.png

همانطور که در شکل زیر نشان داده شده است، هر آنچه را که نیاز دارید با Google Cloud Shell Editor دارید

a4e5ffb3e9a35e84.png

3. ماژول 1: یک نمونه SQL ایجاد کنید

645902e511a432a6.png

نمونه Google Cloud SQL را ایجاد کنید

برنامه PHP ما به یک پایگاه داده MySQL متصل می شود و بنابراین باید برای انتقال بدون درد آن را در Google Cloud تکرار کنیم. Cloud SQL مطابقت کاملی است زیرا به شما امکان می دهد یک پایگاه داده MySQL کاملاً مدیریت شده را در Cloud اجرا کنید. این مراحلی است که باید دنبال کنید:

  1. به صفحه Cloud SQL بروید: https://console.cloud.google.com/sql/instances
  2. روی "ایجاد نمونه" کلیک کنید
  3. فعال کردن API (در صورت نیاز). این ممکن است چند ثانیه طول بکشد.
  4. MySQL را انتخاب کنید.
  5. (ما در تلاش هستیم تا ارزان ترین نسخه را برای شما به ارمغان بیاوریم، بنابراین بیشتر دوام می آورد):
  • نسخه: سازمانی
  • Preset: توسعه (ما Sandbox را امتحان کردیم و برای ما کار نکرد)
  • نسخه Mysql: 5.7 (عجب، انفجاری از گذشته!)
  1. شناسه نمونه: appmod-phpapp را انتخاب کنید (اگر این را تغییر دادید، به یاد داشته باشید که اسکریپت ها و راه حل های آینده را نیز بر این اساس تغییر دهید).
  2. رمز عبور: هر چیزی که می خواهید اما آن را به صورت CLOUDSQL_INSTANCE_PASSWORD یادداشت کنید
  3. منطقه: همان چیزی را که برای بقیه برنامه انتخاب کرده اید حفظ کنید (به عنوان مثال، میلان = europe-west8 )
  4. سود منطقه ای: Single Zone (ما در حال صرفه جویی در پول برای نسخه آزمایشی هستیم)

برای استقرار پایگاه داده Cloud SQL روی دکمه Create Instance کلیک کنید. ⌛ حدود 10 دقیقه طول می کشد تا تکمیل شود⌛ . در ضمن به خواندن مستندات ادامه دهید. همچنین می توانید حل ماژول بعدی ("Containerize your PHP App") را نیز شروع کنید زیرا در قسمت اول هیچ وابستگی به این ماژول ندارد (تا زمانی که اتصال DB را تعمیر نکنید).

توجه داشته باشید این نمونه باید 7 دلار در روز برای شما هزینه داشته باشد. مطمئن شوید که بعد از کارگاه آن را چرخانده اید.

ایجاد DB و کاربر image_catalog در Cloud SQL

پروژه App دارای یک پوشه db/ است که حاوی دو فایل sql است:

  1. 01_schema.sql : حاوی کد SQL برای ایجاد دو جدول است که حاوی داده های کاربران و تصاویر است.
  2. 02_seed.sql : حاوی کد SQL برای انتقال داده ها به جداول ایجاد شده قبلی است.

این فایل‌ها بعداً پس از ایجاد پایگاه داده image_catalog استفاده خواهند شد. با انجام مراحل زیر می توانید این کار را انجام دهید:

  1. نمونه خود را باز کنید و روی تب Databases کلیک کنید:
  2. روی "ایجاد پایگاه داده" کلیک کنید
  3. آن را image_catalog (مانند پیکربندی برنامه PHP) بنامید.

997ef853e5ebd857.png

سپس کاربر پایگاه داده را ایجاد می کنیم. با این کار می توانیم در پایگاه داده image_catalog احراز هویت کنیم.

  1. حالا روی تب Users کلیک کنید
  2. روی "افزودن حساب کاربری" کلیک کنید.
  3. کاربر: بیایید یکی بسازیم:
  • نام کاربری: appmod-phpapp-user
  • رمز عبور: چیزی را انتخاب کنید که بتوانید به خاطر بسپارید یا روی "ایجاد" کلیک کنید
  • " Allow any host (%) " را نگه دارید.
  1. روی ADD کلیک کنید.

DB را به IP های معروف باز کنید.

توجه داشته باشید که تمام DBها در Cloud SQL "Isolated" متولد می شوند. برای دسترسی به آن باید به صراحت یک شبکه راه اندازی کنید.

  1. روی نمونه خود کلیک کنید
  2. منوی "اتصالات" را باز کنید
  3. روی تب "شبکه" کلیک کنید.
  4. زیر شبکه های مجاز کلیک کنید. حالا یک زیر شبکه اضافه کنید.
  • در حال حاضر، بیایید به INSECURE برویم تا برنامه کار کند:
  • نام: "همه در جهان - ناامن" (بیایید به خود یادآوری کنیم که این راه حل ارزان نیز ناامن است).
  • شبکه: "0.0.0.0/0" (توجه: این ناامن است!)

ذخیره را کلیک کنید.

شما باید چیزی شبیه به این را ببینید:

5ccb9062a7071964.png

توجه داشته باشید این راه حل سازش خوبی برای اتمام کارگاه در O (ساعت) است. با این حال، سند SECURITY را برای کمک به ایمن کردن راه حل خود برای تولید بررسی کنید!

زمان تست اتصال DB است!

بیایید ببینیم کاربر image_catalog که قبلاً ایجاد کرده‌ایم کار می‌کند یا خیر. به Cloud SQL Studio در داخل نمونه دسترسی پیدا کنید و پایگاه داده، کاربر و رمز عبور را وارد کنید تا احراز هویت مطابق شکل زیر انجام شود:

d56765c6154c11a4.png

اکنون که وارد هستید، می توانید ویرایشگر SQL را باز کرده و به بخش بعدی بروید.

پایگاه داده را از پایگاه کد وارد کنید

از ویرایشگر SQL برای وارد کردن جداول image_catalog با داده های آنها استفاده کنید. کد SQL را از فایل های sql موجود در مخزن بگیرید و آنها را یکی پس از دیگری به ترتیب متوالی اجرا کنید. 01_schema.sql و سپس 02_seed.sql .

پس از این باید دو جدول در image_catalog دریافت کنید که کاربران و تصاویری هستند که در زیر نشان داده شده است:

65ba01e4c6c2dac0.png

می توانید آن را با اجرای موارد زیر در ویرایشگر آزمایش کنید: select * from images;

همچنین مطمئن شوید که آدرس IP عمومی را یادداشت کنید، بعداً به آن نیاز خواهید داشت.

4. ماژول 2: برنامه PHP خود را کانتینر کنید

e7f0e9979d8805f5.png

ما می خواهیم این برنامه را برای فضای ابری بسازیم.

این به معنای بسته بندی کد در نوعی فایل ZIP است که حاوی تمام اطلاعات برای اجرای آن در Cloud است.

چند راه برای بسته بندی آن وجود دارد:

  • داکر . بسیار محبوب، اما بسیار پیچیده برای تنظیم صحیح.
  • Buildpacks کمتر محبوب است، اما تمایل دارد «خودکار حدس بزند» چه چیزی را بسازد و چه چیزی را اجرا کند. اغلب فقط کار می کند!

در زمینه این کارگاه، فرض می کنیم که شما از Docker استفاده می کنید.

داکر

اگر می خواهید کنترل داشته باشید، این راه حل مناسب برای شماست. این زمانی منطقی است که شما نیاز به پیکربندی کتابخانه‌های خاصی داشته باشید و رفتارهای غیر واضح خاصی را تزریق کنید (یک chmod در آپلودها، یک فایل اجرایی غیراستاندارد در برنامه شما، ...)

همانطور که می خواهیم در نهایت برنامه کانتینری خود را در Cloud Run مستقر کنیم، مستندات زیر را بررسی کنید و سعی کنید جاهای خالی را پر کنید . ما فقط موارد ضروری را برای آسان نگه داشتن کارها در لحظه ارائه می دهیم. Dockerfile نهایی شما شبیه به این خواهد بود:

# Use an official PHP image with Apache
# Pull a suitable php image
FROM __________# Define the env variable for the Apache listening port 8080
ENV __________

# Set working directory inside the container
WORKDIR __________

# Install required PHP extensions: PDO, MySQL, and other dependencies
RUN __________

# Copy all application files into the container
COPY __________

# Configure Apache to listen on port 8080. Use ‘sed' command to change the default listening port.
RUN __________

# When in doubt, always expose to port 8080
EXPOSE __________

# Start Apache in the foreground
CMD __________

علاوه بر این، برای اینکه برنامه خود را به صورت محلی آزمایش کنیم، باید فایل config.php را طوری تغییر دهیم که برنامه PHP ما با db MYSQL موجود در Google CloudSQL متصل شود. بر اساس آنچه قبلاً تنظیم کرده اید، جاهای خالی را پر کنید .

  • Db_host آدرس IP عمومی Cloud SQL است که می توانید آن را در کنسول پیدا کنید:

bd27071bf450a8d0.png

  • Db_name باید بدون تغییر باشد: image_catalog
  • Db_user باید appmod-phpapp-user باشد
  • Db_pass چیزی است که شما انتخاب کرده اید. آن را در یک نقل قول تنظیم کنید و در صورت نیاز فرار کنید.
<?php
// Database configuration
$db_host = '____________';
$db_name = '____________';
$db_user = '____________';
$db_pass = '____________';

try {
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Errore di connessione: " . $e->getMessage());
}

session_start();
?>

همچنین می توانید با کمک Gemini چند قطعه ایتالیایی را به انگلیسی ترجمه کنید!

خوب، اکنون که Dockerfile را دارید و برنامه PHP خود را برای اتصال به db خود پیکربندی کرده اید، بیایید این را امتحان کنیم!

اگر هنوز آن را ندارید docker را نصب کنید ( پیوند ). اگر از Cloud Shell استفاده می کنید به این نیاز ندارید (این چقدر جالب است؟).

اکنون سعی کنید برنامه Containerized PHP خود را با دستورات ساخت و اجرای docker مناسب بسازید و اجرا کنید.

  • ساخت docker -t <IMAGE_TAG_NAME> .
  • docker run -it -p <CONTAINER PORT>:<LOCAL MACHINE PORT> <IMAGE_TAG_NAME>

اگر همه چیز کار می کند، باید بتوانید صفحه وب زیر را هنگام اتصال به میزبان محلی مشاهده کنید.

اگر در Cloud Shell هستید، می‌توانید پورت محلی (مثلاً 8080) را به مرورگر خود صادر کنید، مانند این:

docker build -t my-php-app-docker app-mod-workshop/ -f Dockerfile

docker -it -p 8080:8080 my-php-app-docker را اجرا کنید

اکنون می‌دانید که برنامه شما روی پورت 8080 اجرا می‌شود، روی نماد «پیش‌نمایش وب» (مرورگر با چشم) و سپس پیش‌نمایش در پورت 8080 (یا «تغییر پورت» برای هر پورت دیگری) کلیک کنید.

33a24673f4550454.png

آزمایش نتیجه در مرورگر شما

اکنون برنامه شما باید چیزی شبیه به این باشد:

2718ece96b1f18b6.png

و اگر با Admin/admin123 وارد شوید باید چیزی شبیه به این ببینید.

68b62048c2e86aea.png

عالیه!!! داره کار 🎉🎉🎉

اگر dockerization شما خوب است اما اعتبارنامه DB اشتباه است، ممکن است چیزی شبیه به این دریافت کنید:

e22f45b79bab86e1.png

دوباره امتحان کنید، شما نزدیک هستید!

Buildpacks [اختیاری]

با Buildpacks برنامه به صورت خودکار ساخته می شود. متأسفانه شما کنترل کامل ندارید، بنابراین ممکن است با پیکربندی غیرمنتظره مواجه شوید.

شما باید یک تصویر داکر جدید در محیط محلی خود داشته باشید. می توانید سعی کنید یک کانتینر برای آن اجرا کنید، اما از آنجایی که ما کنترل کامل نحوه ساخت تصویر را نداریم، ممکن است برنامه کار نکند. در هر صورت، ما شما را به آزمایش دعوت می کنیم و در صورت موفقیت، نظر خود را به اشتراک بگذارید، با تشکر!

ذخیره در رجیستری مصنوع [اختیاری]

در حال حاضر، شما باید یک برنامه کاربردی PHP کانتینری آماده برای استقرار در فضای ابری داشته باشید. در مرحله بعد، ما به مکانی در ابر نیاز داریم تا تصویر Docker خود را ذخیره کنیم و آن را برای استقرار در سرویس‌های Google Cloud مانند Cloud Run در دسترس قرار دهیم. این راه حل ذخیره سازی Artifact Registry نامیده می شود، یک سرویس کاملاً مدیریت شده Google Cloud که برای ذخیره سازی مصنوعات برنامه از جمله تصاویر ظرف Docker، بسته های Maven، ماژول های npm و غیره طراحی شده است.

بیایید با استفاده از دکمه مناسب یک مخزن در Google Cloud Artifact Registry ایجاد کنیم.

e1123f0c924022e6.png

یک نام معتبر، قالب و منطقه مناسب برای ذخیره سازی مصنوعات انتخاب کنید.

4e516ed209c470ee.png

به تگ محیط توسعه محلی خود برگردید و تصویر کانتینر برنامه را به مخزن آرتیفکت رجیستری که تازه ایجاد شده است فشار دهید. برای این کار دستورات زیر را کامل کنید.

  • برچسب داکر SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • فشار داکر TARGET_IMAGE[:TAG]

نتیجه باید مانند تصویر زیر باشد.

1e498feb4e88be9f.png

هورا 🎉🎉🎉 شما می توانید به سطح بعدی بروید.

توجه داشته باشید. همچنین نقطه پایانی /upload.php را امتحان کنید و سعی کنید یک عکس آپلود کنید. ممکن است یک "مجوز رد شده" دریافت کنید. اگر چنین است، شما باید برخی از اصلاحات chmod/chown را در Dockerfile انجام دهید.

5. ماژول 3: برنامه را در Cloud Run اجرا کنید

9ffca42774f6c5d1.png

چرا Cloud Run؟

سوال منصفانه! سال‌ها پیش، مطمئناً Google App Engine را انتخاب می‌کردید.

به زبان ساده، امروزه، Cloud Run دارای یک پشته فناوری جدیدتر است، راه‌اندازی آن آسان‌تر، ارزان‌تر است و زمانی که از آن استفاده نمی‌کنید تا 0 کاهش می‌یابد. با انعطاف پذیری برای اجرای هر کانتینر بدون حالت و ادغام آن با سرویس های مختلف Google Cloud، برای استقرار میکروسرویس ها و برنامه های کاربردی مدرن با حداقل هزینه و حداکثر کارایی ایده آل است.

به طور خاص تر، Cloud Run یک پلتفرم کاملاً مدیریت شده توسط Google Cloud است که به شما امکان می دهد برنامه های بدون حالت کانتینری را در یک محیط بدون سرور اجرا کنید. به طور خودکار تمام زیرساخت‌ها را کنترل می‌کند، از صفر تا ترافیک ورودی را کاهش می‌دهد و در زمان بی‌حرکتی پایین می‌آید، که آن را مقرون به صرفه و کارآمد می‌کند. Cloud Run از هر زبان یا کتابخانه ای تا زمانی که در یک کانتینر بسته بندی شده است پشتیبانی می کند و به انعطاف پذیری زیادی در توسعه اجازه می دهد. به خوبی با سایر سرویس های Google Cloud ادغام می شود و برای ساخت میکروسرویس ها، API ها، وب سایت ها و برنامه های رویداد محور بدون نیاز به مدیریت زیرساخت سرور مناسب است.

پیش نیازها

برای انجام این کار باید gcloud در دستگاه محلی خود نصب کرده باشید. اگر نه دستورالعمل ها را اینجا ببینید. در عوض، اگر در Google Cloud Shell هستید، هیچ اقدامی برای انجام دادن وجود ندارد.

قبل از استقرار ...

اگر در محیط محلی خود کار می کنید، با موارد زیر در Google Cloud احراز هویت کنید

  • $ gcloud auth login –update-adc # not needed in Cloud Shell

این باید شما را از طریق ورود به سیستم OAuth در مرورگر خود احراز هویت کند. مطمئن شوید که از طریق Chrome با همان کاربری (به عنوان مثال vattelapesca@gmail.com) که با فعال بودن صورتحساب به Google Cloud وارد شده است، وارد شوید.

Cloud Run API را با دستور زیر فعال کنید

  • $ gcloud services enable run.googleapis.com

در این مرحله همه چیز برای استقرار در Cloud Run آماده است.

برنامه خود را از طریق gcloud در Cloud Run قرار دهید

دستوری که به شما امکان می دهد برنامه را در Cloud Run استقرار دهید gcloud run deploy است. چندین گزینه برای دستیابی به هدف وجود دارد. حداقل مجموعه موارد زیر است:

  1. نام سرویس Cloud Run که می‌خواهید برای برنامه خود مستقر کنید. یک سرویس Cloud Run URL را به شما باز می گرداند که نقطه پایانی را برای برنامه شما فراهم می کند.
  2. منطقه ابری Google که در آن برنامه شما اجرا خواهد شد.
  3. تصویر ظرفی که برنامه شما را می‌پیچد.
  4. متغیرهای محیطی که برنامه شما باید در طول اجرای خود از آنها استفاده کند.
  5. پرچم Allow-Unauthenticated که به همه اجازه می دهد بدون احراز هویت بیشتر به برنامه شما دسترسی داشته باشند

برای مشاهده نحوه اعمال این گزینه در دستور خود، با مستندات مشورت کنید. استقرار چند دقیقه طول می کشد. اگر همه چیز درست است، باید چیزی شبیه به این را در Google Cloud Console ببینید.

ef1029fb62f8de81.png

f7191d579c21ca3e.png

روی URL ارائه شده توسط Cloud Run کلیک کنید و برنامه خود را آزمایش کنید. پس از احراز هویت باید چیزی شبیه به این را ببینید.

d571a90cd5a373f9.png

"gcloud run deploy" با "بدون سوال"

شاید متوجه شده باشید که gcloud run deploy سوالات درستی را از شما می پرسد و جای خالی را پر می کند. این شگفت انگیز است!

با این حال، در چند ماژول، ما قصد داریم این دستور را به یک محرک ساخت ابر اضافه کنیم تا از عهده سؤالات برآییم. ما باید تمام گزینه های دستور را پر کنیم. بنابراین می‌خواهید gcloud run deploy --option1 blah --foo bar --region your-fav-region ایجاد کنید. چگونه این کار را انجام می دهید؟

  1. مراحل 2-3-4 را تکرار کنید تا زمانی که gcloud دیگر سوال نپرسد:
  2. [LOOP] gcloud run deploy با گزینه هایی که تاکنون پیدا شده است
  3. سیستم های [LOOP] گزینه X را می خواهند
  4. [LOOP] در اسناد عمومی نحوه تنظیم X را از CLI با افزودن گزینه --my-option [my-value] جستجو کنید.
  5. اکنون به مرحله 2 برگردید، مگر اینکه gcloud بدون سؤال بیشتر تکمیل شود.
  6. این اجرای gcloud سنگ های BLAH BLAH BLAH را به کار می گیرد! دستور را در جایی ذخیره کنید، بعداً برای مرحله Cloud Build به آن نیاز خواهید داشت!

یک راه حل ممکن اینجاست .

هورا 🎉🎉🎉 شما با موفقیت برنامه خود را در Google Cloud مستقر کردید و به اولین مرحله مدرن سازی دست یافتید.

6. ماژول 4: رمز عبور را با Secret Manager پاک کنید

95cd57b03b4e3c73.png

در مرحله قبل توانستیم اپلیکیشن خود را در Cloud Run با موفقیت اجرا و اجرا کنیم. با این حال، ما این کار را با یک رویه امنیتی بد انجام دادیم: ارائه برخی از اسرار در متن روشن .

تکرار اول: config.php خود را برای استفاده از ENV به روز کنید

شاید متوجه شده باشید که رمز عبور DB را مستقیماً در کد موجود در فایل config.php قرار می دهیم. این برای مقاصد آزمایشی و دیدن اینکه آیا برنامه کار می کند خوب است. اما شما نمی توانید کدی را به گونه ای که در یک محیط تولیدی استفاده کنید. رمز عبور (و سایر پارامترهای اتصال DB) باید به صورت پویا خوانده شود و در زمان اجرا به برنامه ارائه شود. فایل config.php را طوری تغییر دهید که پارامترهای db را از متغیرهای ENV بخواند. در صورت عدم موفقیت، باید مقادیر پیش فرض را در نظر بگیرید. در صورتی که نتوانید ENV را بارگیری کنید خوب است، بنابراین خروجی صفحه به شما می گوید که آیا از مقادیر پیش فرض استفاده می کند یا خیر. جاهای خالی را پر کنید و کد را در config.php جایگزین کنید.

<?php
// Database configuration with ENV variables. Set default values as well 
$db_host = getenv('DB_HOST') ?: _______;
$db_name = getenv('DB_NAME') ?: 'image_catalog';
$db_user = getenv('DB_USER') ?: 'appmod-phpapp-user';
$db_pass = getenv('DB_PASS') ?: _______;
// Note getenv() is PHP 5.3 compatible
try {
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Errore di connessione: " . $e->getMessage());
}

session_start();
?>

از آنجایی که برنامه شما کانتینری است، باید راهی برای ارائه متغیرهای ENV به برنامه ارائه دهید. این کار به چند روش قابل انجام است:

  • در زمان ساخت ، در Dockerfile. 4 پارامتر را با استفاده از نحو ENV DB_VAR=ENV_VAR_VALUE به Dockerfile قبلی خود اضافه کنید. این مقادیر پیش‌فرض را تنظیم می‌کند که می‌توانند در زمان اجرا لغو شوند. به عنوان مثال، «DB_NAME» و «DB_USER» را می‌توان در اینجا تنظیم کرد و در هیچ جای دیگری.
  • در زمان اجرا می‌توانید این متغیرها را برای Cloud Run، هم از CLI یا از UI تنظیم کنید . این مکان مناسبی برای قرار دادن تمام 4 متغیر شماست (مگر اینکه بخواهید تنظیمات پیش فرض را در Dockerfile نگه دارید).

در localhost، ممکن است بخواهید متغیرهای ENV خود را در یک فایل .env قرار دهید (پوشه solutions را بررسی کنید).

همچنین مطمئن شوید که .env به .gitignore شما اضافه شده است: شما نمی خواهید اسرار خود را به Github فشار دهید!

echo .env >> .gitignore

پس از آن، می توانید نمونه را به صورت محلی آزمایش کنید:

docker run -it -p 8080:8080 --env-file .env my-php-app-docker

اکنون به موارد زیر دست یافته اید:

  1. برنامه شما متغیر را به صورت پویا از ENV شما می خواند
  2. با حذف رمز عبور DB از کد خود، امنیت را بهبود بخشیدید)

اکنون می توانید یک نسخه جدید را در Cloud Run اجرا کنید. بیایید به UI پرش کنیم و متغیرهای محیط را به صورت دستی تنظیم کنیم:

  • به https://console.cloud.google.com/run بروید
  • روی اپلیکیشن خود کلیک کنید
  • روی "ویرایش و استقرار یک نسخه جدید" کلیک کنید
  • در تب اول "Container(s)" روی تب پایین "Variables and Secrets" کلیک کنید.
  • روی "+ افزودن متغیر" کلیک کنید و همه متغیرهای مورد نیاز را اضافه کنید. شما باید با چیزی شبیه به این نتیجه بگیرید:

7a5fbfa448544d3.png

f2780c35585388ca.png

آیا این کامل است؟ خیر. PASS شما هنوز برای اکثر اپراتورها قابل مشاهده است. این را می توان با Google Cloud Secret Manager کاهش داد.

تکرار دوم: مدیر مخفی

رمزهای عبور شما از کد خود ناپدید شده اند: پیروزی! اما صبر کنید - آیا ما هنوز ایمن هستیم؟

گذرواژه‌های شما همچنان برای هر کسی که به Google Cloud Console دسترسی دارد قابل مشاهده است. در واقع، اگر به فایل استقرار Cloud Run YAML دسترسی داشته باشید، می توانید آن را بازیابی کنید. یا اگر می‌خواهید یک ویرایش جدید Cloud Run را ویرایش یا اجرا کنید، رمز عبور همانطور که در تصاویر زیر نشان داده شده است در بخش Variables & Secrets قابل مشاهده است.

Google Cloud Secret Manager یک سرویس امن و متمرکز برای مدیریت اطلاعات حساس مانند کلیدهای API، گذرواژه‌ها، گواهی‌ها و سایر اسرار است.

این امکان را به شما می دهد تا با مجوزهای دقیق و رمزگذاری قوی، اسرار را ذخیره، مدیریت و دسترسی داشته باشید. مدیر مخفی که با مدیریت هویت و دسترسی Google Cloud (IAM) ادغام شده است، به شما امکان می‌دهد کنترل کنید چه کسی می‌تواند به اسرار خاصی دسترسی داشته باشد و از امنیت داده‌ها و انطباق با مقررات اطمینان حاصل کند.

همچنین از چرخش و نسخه‌سازی مخفی خودکار، ساده‌سازی مدیریت چرخه حیات مخفی و افزایش امنیت در برنامه‌های کاربردی در سراسر سرویس‌های Google Cloud پشتیبانی می‌کند.

برای دسترسی به مدیر مخفی، از منوی همبرگر به سرویس‌های امنیتی بروید و آن را در بخش حفاظت از داده‌ها همانطور که در تصویر زیر نشان داده شده است پیدا کنید.

6df83a1c3cb757f6.png

همانطور که در تصویر زیر مشاهده می کنید، به محض حضور در آنجا، Secret Manager API را فعال کنید.

a96c312e2c098db1.png

  • اکنون روی " ایجاد یک راز " کلیک کنید: بیایید آن را منطقی بنامیم:
  • نام: php-amarcord-db-pass
  • مقدار مخفی: « گذرواژه DB شما » (بخش «آپلود فایل» را نادیده بگیرید).
  • این پیوند مخفی را حاشیه نویسی کنید، باید مانند projects/123456789012/secrets/php-amarcord-db-pass باشد. این یک اشاره گر منحصر به فرد به راز شما است (برای Terraform، Cloud Run و دیگران). شماره، شماره پروژه منحصر به فرد شماست.

نکته : سعی کنید از یک قرارداد نامگذاری ثابت برای اسرار خود استفاده کنید، به طور تخصصی از چپ به راست، به عنوان مثال: cloud-devrel-phpamarcord-dbpass

  • سازمان (با شرکت)
  • تیم (در سازمان)
  • برنامه (در داخل تیم)
  • نام متغیر (در برنامه)

این به شما این امکان را می دهد که رجکس های آسانی داشته باشید تا تمام اسرار خود را برای یک برنامه واحد پیدا کنید.

یک ویرایش جدید Cloud Run ایجاد کنید

اکنون که یک Secret جدید در اختیار داریم، باید از شر متغیر DB_PASS ENV خلاص شویم و آن را با Secret جدید جایگزین کنیم. بنابراین:

  • دسترسی به Cloud Run با استفاده از Google Cloud Console
  • برنامه را انتخاب کنید.
  • روی "ویرایش و استقرار یک نسخه جدید" کلیک کنید
  • برگه "متغیرها و اسرار" را پیدا کنید.
  • از دکمه "+ Reference a Secret" برای تنظیم مجدد متغیر DB_PASS ENV استفاده کنید.
  • از همان "DB_PASS" برای Secrets ارجاع شده استفاده کنید و از آخرین نسخه استفاده کنید.

9ed4e35be7654dcb.png

پس از انجام، باید خطای زیر را دریافت کنید

da0ccd7af39b04ed.png

سعی کنید نحوه رفع آن را بیابید. برای حل این مشکل باید به بخش IAM & Admin دسترسی داشته باشید و مجوزهای اعطا را تغییر دهید. اشکال زدایی مبارک!

هنگامی که آن را فهمیدید، به Cloud Run برگردید و یک نسخه جدید را دوباره اجرا کنید. نتیجه باید مانند شکل زیر باشد:

e89f9ca780169b6b.png

نکته : Developer Console (UI) در اشاره به مشکلات مجوز عالی است. برای پیمایش همه پیوندهای موجودیت های Cloud خود وقت بگذارید!

7. ماژول 5: CI/CD خود را با Cloud Build راه اندازی کنید

ba49b033c11be94c.png

چرا خط لوله CI/CD؟

تا به حال، باید چند بار gcloud run deploy تایپ کرده باشید، شاید بارها و بارها به یک سوال پاسخ داده باشید.

از استقرار دستی برنامه خود با gcloud run deploy خسته شده اید؟ آیا عالی نیست اگر برنامه شما بتواند هر بار که تغییر جدیدی را در مخزن Git خود ایجاد می کنید به طور خودکار خود را مستقر کند؟

برای استفاده از خط لوله CI/CD، به دو چیز نیاز دارید:

  1. یک مخزن گیت شخصی : خوشبختانه، شما باید قبلاً مخزن کارگاه را به حساب GitHub خود در مرحله 2 فورک کرده باشید. اگر نه، به عقب برگردید و آن مرحله را کامل کنید. مخزن فورکی شما باید به این شکل باشد: https://github.com/<YOUR_GITHUB_USER>/app-mod-workshop
  2. ساخت ابر . این سرویس شگفت‌انگیز و ارزان به شما امکان می‌دهد تا اتوماسیون‌های ساخت را برای تقریباً همه چیز پیکربندی کنید: Terraform، برنامه‌های dockerized، و ...

این بخش بر روی راه اندازی Cloud Build تمرکز دارد.

وارد Cloud Build شوید!

برای انجام این کار از Cloud Build استفاده خواهیم کرد:

  • منبع خود را بسازید (با Dockerfile). این را به عنوان یک "فایل zip. بزرگ" در نظر بگیرید که حاوی تمام آنچه برای ساخت و اجرای آن نیاز دارید ("مصنوع ساخت" شما) است.
  • این مصنوع را به Artifact Registry (AR) فشار دهید.
  • سپس یک استقرار از AR به Cloud Run برای برنامه "php-amarcord" صادر کنید
  • این یک نسخه جدید ("نسخه") از برنامه موجود ایجاد می کند (به یک لایه با کد جدید فکر کنید) و ما آن را پیکربندی می کنیم تا در صورت موفقیت آمیز بودن فشار، ترافیک را به نسخه جدید هدایت کنیم.

این یک نمونه از ساخت‌های برنامه php-amarcord من است:

f30f42d4571ad5e2.png

چگونه همه اینها را انجام دهیم؟

  1. با ایجاد یک فایل YAML کامل: cloudbuild.yaml
  2. با ایجاد یک تریگر Cloud Build.
  3. با اتصال به مخزن github ما از طریق رابط کاربری Cloud Build .

ایجاد ماشه (و اتصال مخزن)

  • به https://console.cloud.google.com/cloud-build/triggers بروید
  • روی "ایجاد ماشه" کلیک کنید.
  • کامپایل:
  • نام: چیزی معنادار مانند on-git-commit-build-php-app
  • رویداد: فشار به شاخه
  • منبع: "اتصال مخزن جدید" متن جایگزین
  • با این کار پنجره ای در سمت راست باز می شود: "Connect Repository"
  • ارائه دهنده منبع: "Github" (اول)
  • "ادامه"
  • Authenticate پنجره ای را در github برای احراز هویت متقابل باز می کند. جریان را دنبال کنید و صبور باشید. اگر مخازن زیادی دارید، ممکن است کمی طول بکشد.
  • "انتخاب مخزن" حساب/ریپوی خود را انتخاب کنید و قسمت "من متوجه شدم..." را علامت بزنید.
  • اگر این خطا را دریافت کردید: برنامه GitHub در هیچ یک از مخازن شما نصب نشده است، روی "Install Google Cloud Build" کلیک کنید و دستورالعمل ها را دنبال کنید.
  • 23e0e0f1219afea3.png روی Connect کلیک کنید
  • bafd904ec07122d2.png
  • یکنوع بازی شبیه لوتو! مخزن شما اکنون متصل است.
  • بازگشت به قسمت ماشه ....
  • پیکربندی: شناسایی خودکار (*)
  • پیشرفته: حساب سرویس "[PROJECT_NUMBER]- compute@developer.gserviceaccount.com " را انتخاب کنید
  • xxxxx شناسه پروژه شماست
  • حساب خدمات محاسباتی پیش‌فرض برای رویکرد آزمایشگاهی منصفانه است - از آن در تولید استفاده نکنید! ( بیشتر بدانید ).
  • بقیه را همان طور که هست رها کن
  • بر روی دکمه "ایجاد" کلیک کنید.

(*) این ساده ترین راه است زیرا Dockerfile یا cloudbuild.yaml را بررسی می کند. با این حال، cloudbuild.yaml به شما قدرت واقعی می دهد تا تصمیم بگیرید در کدام مرحله چه کاری انجام دهید.

من قدرت را دارم!

اکنون، ماشه کار نخواهد کرد مگر اینکه حساب سرویس Cloud Build را ارائه دهید (حساب سرویس چیست؟ ایمیل یک "ربات" که از طرف شما برای انجام یک کار عمل می کند - در این مورد مواردی را در Cloud ایجاد می کند!).

SA شما در ساخت و استقرار شکست خواهد خورد مگر اینکه شما او را برای انجام آن اختیار دهید. خوشبختانه آسان است!

  • به "Cloud Build" > " Settings " بروید.
  • حساب سرویس "[PROJECT_NUMBER]- compute@developer.gserviceaccount.com ".
  • این کادرها را علامت بزنید:
  • Cloud Run
  • مدیر مخفی
  • حساب های خدماتی
  • ساخت ابر
  • همچنین تیک «تنظیم به عنوان حساب سرویس ترجیحی» را بزنید

8715acca72286a46.png

Cloud Buld YAML کجاست؟

ما قویاً شما را تشویق می کنیم که مدتی را صرف ایجاد ابر Build YAML خود کنید.

با این حال، اگر وقت ندارید یا نمی خواهید وقت بگذارید، می توانید در این پوشه راه حل الهام بگیرید: .solutions

اکنون می توانید تغییری را در github اعمال کنید و Cloud Build را در قسمت آن مشاهده کنید.

راه اندازی Cloud Build می تواند مشکل باشد. انتظار مقداری رفت و برگشت توسط:

  • بررسی گزارش‌ها در https://console.cloud.google.com/cloud-build/builds;region=global
  • پیدا کردن خطای شما
  • اصلاح در کد، و صدور مجدد git commit / git push.
  • گاهی اوقات خطا در کد نیست، بلکه در برخی از تنظیمات است. در این صورت، می‌توانید یک بیلد جدید از رابط کاربری (Cloud build > "Triggers" > Run) صادر کنید.

97acd16980a144ab.png

توجه داشته باشید که اگر از این راه حل استفاده کنید، هنوز مقداری کار برای انجام دادن وجود دارد. به عنوان مثال، شما باید متغیرهای ENV را برای نقاط پایانی توسعه‌دهی/پروتکن تازه ایجاد شده تنظیم کنید:

3da8723e4ff80c0a.png

شما می توانید این کار را به دو صورت انجام دهید:

  • از طریق UI - با تنظیم مجدد متغیرهای ENV
  • از طریق CLI با ایجاد اسکریپت "عالی" برای شما. مثالی را می توان در اینجا یافت: gcloud-run-deploy.sh . شما باید چند مورد را تغییر دهید ، به عنوان مثال نقطه پایانی و شماره پروژه. می توانید شماره پروژه خود را در نمای کلی Cloud پیدا کنید.

چگونه می توانم به GitHub کدی مرتکب شوم؟

فراتر از محدوده این کارگاه است که بهترین راه را برای git push به Github به شما آموزش دهد. با این حال ، در صورت گیر کردن و در پوسته ابر ، دو روش وجود دارد:

  1. کلی یک کلید SSH را به صورت محلی اضافه کنید و با git@github.com از راه دور اضافه کنید: your_user/app-mod-workshop.git (به جای http)
  2. vscode اگر از ویرایشگر Cloud Shell استفاده می کنید ، OU می توانید از برگه Source Control (Ctrl-Shift-G) استفاده کنید ، روی "Sync Changes" کلیک کرده و دستورالعمل ها را دنبال کنید. شما باید بتوانید حساب GitHub خود را به VScode تأیید کنید و کشش/فشار از آنجا به نسیم تبدیل شود.

F0D53F839C7FA3B6.PNG

به یاد داشته باشید که در میان پرونده های دیگر git add clodubuild.yaml ، یا کار نمی کند.

عمیق در مقابل کم عمق "Dev/Prod Parity" [اختیاری]

اگر نسخه مدل را از اینجا کپی کرده اید ، می خواهید دو نسخه Dev و Prod یکسان داشته باشید. این جالب است و مطابق با قانون 10 برنامه دوازده عاملی است .

با این حال ، ما از دو نقطه پایانی وب مختلف استفاده می کنیم تا یک برنامه به همان پایگاه داده اشاره کنیم. این به اندازه کافی خوب برای یک کارگاه است. با این حال ، در زندگی واقعی ، شما می خواهید مدتی را برای ایجاد یک محیط مناسب محصول صرف کنید. این به معنای داشتن دو پایگاه داده (یکی برای Dev و دیگری برای Prod) و همچنین انتخاب مکان آنها برای بازیابی فاجعه / در دسترس بودن زیاد است. این فراتر از محدوده این کارگاه است ، اما این مواد غذایی برای فکر است.

اگر وقت دارید نسخه "عمیق" تولید را انجام دهید ، لطفاً تمام منابع مورد نیاز برای کپی کردن را در نظر داشته باشید ، مانند:

  • پایگاه داده Cloud SQL (و احتمالاً نمونه SQL).
  • سطل GCS
  • عملکرد ابر.
  • ممکن است از Gemini 1.5 Flash به عنوان یک مدل در Dev (ارزان تر ، سریعتر) و Gemini 1.5 Pro (قدرتمندتر) استفاده کنید.

به طور کلی ، هر بار که در مورد برنامه کاری انجام می دهید ، با انتقاد فکر کنید: آیا تولید باید همین ارزش را داشته باشد یا نه؟ و اگر اینطور نیست ، تلاش خود را کپی کنید. این البته با Terraform بسیار ساده تر است ، جایی که می توانید محیط خود (-dev ، -prod) را به عنوان پسوند منابع خود تزریق کنید.

8. ماژول 6: به Google Cloud Storage بروید

A680E0F287DD2DFB.PNG

ذخیره سازی

در حال حاضر این برنامه دولت را در یک ظرف داکر ذخیره می کند. اگر دستگاه شکسته شود ، برنامه منفجر می شود ، یا به سادگی اگر یک تجدید نظر جدید را فشار دهید ، با یک ذخیره تنظیم مجدد (=> خالی) برنامه ریزی می شود. 🙈

چگونه آن را تعمیر کنیم؟ تعدادی رویکرد وجود دارد.

  1. تصاویر را در DB ذخیره کنید. این همان کاری است که من با برنامه قبلی PHP خود انجام دادم. این ساده ترین راه حل است زیرا پیچیدگی را به آن اضافه نمی کند. اما این تأخیر را اضافه می کند و مطمئناً به DB شما بارگیری می کند!
  2. برنامه Cloud Run خود را به یک راه حل مناسب برای ذخیره سازی مهاجرت کنید: GCE + دیسک مداوم ؟ شاید GKE + ذخیره سازی ؟
  3. حرکت به GCS . Google Cloud Storage برای کل Google Cloud بهترین ذخیره سازی کلاس را ارائه می دهد و این ابر ابری بیشترین راه حل است. با این حال ، ما را به کثیف شدن در کتابخانه های PHP نیاز دارد. آیا ما برای GCS کتابخانه PHP 5.7 داریم؟ آیا PHP 5.7 حتی از Composer پشتیبانی می کند (به نظر می رسد PHP 5.3.2 اولین نسخه توسط آهنگساز پشتیبانی می شود)؟
  4. ممکن است از Docker Sidecar استفاده کنید؟
  5. یا شاید از GCS Cloud Run Volume Mounts استفاده کنید. این شگفت انگیز به نظر می رسد.

🤔 Migrate Storage (پایان باز)

[باز پایان] در این تمرین ، ما می خواهیم راه حلی پیدا کنید تا تصاویر خود را به شکلی جابجا کنید که به نوعی ادامه داشته باشد.

آزمون پذیرش

من نمی خواهم راه حل را به شما بگویم ، اما می خواهم این اتفاق بیفتد:

  1. شما newpic.jpg را بارگذاری می کنید. شما آن را در برنامه مشاهده می کنید.
  2. شما برنامه را به نسخه جدید ارتقا می دهید.
  3. newpic.jpg هنوز هم وجود دارد ، قابل مشاهده است.

💡 راه حل احتمالی (GCS Cloud Run Volume Mounts)

این یک راه حل بسیار ظریف است که به ما امکان می دهد در حالی که به هیچ وجه کد را لمس نمی کنیم ، به بارگذاری فایل های مطبوع دست یابیم (جدا از نشان دادن توضیحات تصویر ، اما این بی اهمیت و فقط برای رضایت از چشم است).

این به شما امکان می دهد یک پوشه را از ابر به GCS سوار کنید ، بنابراین:

  1. کلیه بارگذاری های GC در برنامه شما قابل مشاهده خواهد بود.
  2. همه بارگذاری های موجود در برنامه شما در GCS بارگذاری می شوند
  3. سحر و جادو اتفاق می افتد اشیاء TYO بارگذاری شده در GCS (فصل 7).

توجه داشته باشید لطفا چاپ خوب فیوز را بخوانید. اگر عملکرد مسئله ای باشد خوب نیست.

یک سطل GCS ایجاد کنید

GCS سرویس ذخیره سازی Omni-provent از Google Cloud است. این آزمایش شده است و توسط هر سرویس GCP که نیاز به ذخیره سازی دارد استفاده می شود.

توجه داشته باشید که Project_id Export Cloud Shell به عنوان Google_cloud_project:

$ export PROJECT_ID=$GOOGLE_CLOUD_PROJECT

#!/bin/bash

set -euo pipefail

# Your Cloud Run Service Name, eg php-amarcord-dev
SERVICE_NAME='php-amarcord-dev'
BUCKET="${PROJECT_ID}-public-images"
GS_BUCKET="gs://${BUCKET}"

# Create bucket
gsutil mb -l "$GCP_REGION" -p "$PROJECT_ID" "$GS_BUCKET/"

# Copy original pictures there - better if you add an image of YOURS before.
gsutil cp ./uploads/*.png "$GS_BUCKET/"

Cloud Run را پیکربندی کنید تا سطل را در / آپلود / پوشه سوار کنید

حالا بیایید به قسمت زیبا بیاییم. ما یک حجم php_uploads ایجاد می کنیم و به Cloud Run دستور می دهیم که یک فیوز را در MOUNT_PATH انجام دهد (چیزی شبیه /var/www/html/uploads/ ):

#!/bin/bash

set -euo pipefail

# .. keep variables from previous script..

# Uploads folder within your docker container.
# Tweak it for your app code.
MOUNT_PATH='/var/www/html/uploads/'

# Inject a volume mount to your GCS bucket in the right folder.
gcloud --project "$PROJECT_ID" beta run services update "$SERVICE_NAME" \
    --region $GCP_REGION \
    --execution-environment gen2 \
    --add-volume=name=php_uploads,type=cloud-storage,bucket="$BUCKET"  \
    --add-volume-mount=volume=php_uploads,mount-path="$MOUNT_PATH"

اکنون ، این مرحله را برای تمام نقاط پایانی که می خواهید به ذخیره سازی ابری اشاره کنید ، تکرار کنید.

شما همچنین می توانید از UI به همین نتیجه برسید

  1. در زیر برگه "Volumes" ، یک حجم با اشاره به سطل شما ، از نوع "سطل ذخیره سازی ابری" ، به عنوان مثال با نام "Php_uploads" ایجاد کنید.
  2. در زیر کانتینر (ها)> Volume Mounts حجمی را که تازه در نقطه حجم درخواست شده توسط برنامه خود ایجاد کرده اید سوار کنید. این بستگی به dockerfile دارد ، اما ممکن است مانند var/www/html/uploads/ باشد.

در هر صورت ، اگر کار کند ، ویرایش نسخه جدید Cloud Run باید چیزی شبیه به این را به شما نشان دهد:

6C2BB98FC1B0E077.PNG

اکنون برنامه جدید بارگذاری یک تصویر جدید را در نقطه پایانی /upload.php آزمایش کنید.

تصاویر باید یکپارچه بر روی GCS بدون نوشتن یک خط PHP جریان داشته باشند:

70032B216AFEE2D7.PNG

چه اتفاقی افتاد؟

اتفاق بسیار جادویی رخ داده است.

یک برنامه قدیمی با کد قدیمی هنوز کار خود را انجام می دهد. یک پشته جدید و مدرن به ما این امکان را می دهد تا تمام تصاویر/تصاویر را در برنامه خود داشته باشیم که به راحتی در یک سطل ابر حالت نشسته نشسته اند. اکنون آسمان حد است:

  • آیا می خواهید هر بار تصویری با "خطرناک" یا "برهنه" وارد شوید ، ایمیل ارسال کنید؟ شما می توانید بدون لمس کد PHP این کار را انجام دهید.
  • آیا می خواهید هر بار که تصویری برای توصیف آن وارد می شود و DB را با توضیحات خود بارگذاری کنید ، از یک مدل چند حالته جمینی استفاده کنید؟ شما می توانید بدون لمس کد PHP این کار را انجام دهید. باور نمی کنی؟ خواندن را در فصل 7 ادامه دهید.

ما فقط فضای بزرگی از فرصت را در اینجا باز کرده ایم.

9. ماژول 7: برنامه خود را با Google Gemini توانمند کنید

C00425F0AD83B32C.PNG

اکنون شما یک برنامه PHP جدید مدرن و براق (مانند 2024 Fiat 126 ) با فضای ذخیره سازی ابری دارید.

چه کاری می توانید با آن انجام دهید؟

پیش نیازها

در فصل قبل ، یک راه حل مدل به ما اجازه می داد تا تصاویر /uploads/ بر روی GCS سوار کنیم ، de facto جدا کردن منطق برنامه از ذخیره تصویر.

این تمرین شما را ملزم می کند:

  • ورزش را در فصل 6 (ذخیره سازی) با موفقیت انجام داده اند.
  • یک سطل GCS با بارگذاری تصویر داشته باشید ، جایی که افراد تصاویر را در برنامه شما بارگذاری می کنند و تصاویر به سطل شما می روند.

یک تابع ابر (در پایتون) تنظیم کنید

آیا تا به حال فکر کرده اید که چگونه می توانید یک برنامه رویداد محور را پیاده سازی کنید؟ چیزی شبیه به:

  • هنگامی که <vent> اتفاق می افتد => ایمیل ارسال کنید
  • هنگامی که <vent> اتفاق می افتد => اگر <Condition> صحیح است ، پس از آن پایگاه داده را به روز کنید.

این رویداد می تواند هر چیزی باشد ، از رکورد جدید موجود در BigQuery ، یک شی جدید که در یک پوشه در GCS تغییر یافته است ، یا یک پیام جدید در یک صف در میخانه/فرعی منتظر است.

Google Cloud برای دستیابی به این هدف از چندین الگوی پشتیبانی می کند. مهمترین موارد:

در این تمرین ، ما برای دستیابی به یک نتیجه کاملاً دیدنی ، به عملکرد ابر می پردازیم. و ما تمرینات اختیاری را برای شما ارائه خواهیم داد.

توجه داشته باشید که کد نمونه تحت .solutions/

یک تابع ابر را تنظیم کنید (🐍 پایتون)

ما در حال تلاش برای ایجاد یک GCF بسیار جاه طلب هستیم.

  1. هنگامی که یک تصویر جدید در GCS ایجاد می شود .. (احتمالاً به عنوان کسی آن را در برنامه بارگذاری کرده است - اما نه تنها)
  2. .. برای توصیف آن با جمینی تماس بگیرید و توضیحات متنی از تصویر را بدست آورید .. (خوب است که MIME را بررسی کنید و یک تصویر آن را تضمین کنید و نه PDF ، MP3 یا متن)
  3. .. و DB را با این توضیحات به روز کنید. (این ممکن است برای اضافه کردن یک ستون description به جدول images نیاز به لکه دار کردن DB داشته باشد).

DB را برای اضافه کردن description به تصاویر وصله کنید

  1. استودیوی Cloud SQL را باز کنید:

b92b07c4cba658ef.png

  1. کاربر و رمز عبور خود را برای تصاویر DB قرار دهید
  2. تزریق این SQL که یک ستون برای توضیحات تصویر اضافه می کند:

ALTER TABLE images ADD COLUMN description TEXT;

3691ACED78A6389.PNG

و یکنوع بازی شبیه لوتو! اکنون سعی کنید بررسی کنید که آیا کار کرده است:

SELECT * FROM images;

شما باید ستون توضیحات جدید را ببینید:

BED69D6AD0263114.png

نوشتن Gemini F (x)

توجه داشته باشید این عملکرد در واقع با کمک کد Gemini Code ایجاد شده است.

توجه داشته باشید ایجاد این عملکرد ممکن است در خطاهای مجوز IAM متحمل شوید. برخی از آنها در زیر بند "خطاهای احتمالی" ثبت شده اند.

  1. API ها را فعال کنید
  2. به https://console.cloud.google.com/functions/list بروید
  3. روی "ایجاد عملکرد" ​​کلیک کنید
  4. API ها را از Wizard API فعال کنید:

D22B82658CFD4C48.PNG

می توانید GCF را از UI یا از خط فرمان ایجاد کنید. در اینجا ما از خط فرمان استفاده خواهیم کرد.

یک کد احتمالی را می توان در زیر .solutions/

  1. یک پوشه برای میزبانی کد خود ، به عنوان مثال "GCF/" ایجاد کنید. وارد پوشه شوید.
  2. یک پرونده requirements.txt ایجاد کنید:
google-cloud-storage
google-cloud-aiplatform
pymysql
  1. یک تابع پایتون ایجاد کنید. کد نمونه در اینجا: GCF/main.py .
#!/usr/bin/env python

"""Complete this"""

from google.cloud import storage
from google.cloud import aiplatform
import vertexai
from vertexai.generative_models import GenerativeModel, Part
import os
import pymysql
import pymysql.cursors

# Replace with your project ID
PROJECT_ID = "your-project-id"
GEMINI_MODEL = "gemini-1.5-pro-002"
DEFAULT_PROMPT = "Generate a caption for this image: "

def gemini_describe_image_from_gcs(gcs_url, image_prompt=DEFAULT_PROMPT):
    pass

def update_db_with_description(image_filename, caption, db_user, db_pass, db_host, db_name):
    pass

def generate_caption(event, context):
    """
    Cloud Function triggered by a GCS event.
    Args:
        event (dict): The dictionary with data specific to this type of event.
        context (google.cloud.functions.Context): The context parameter contains
                                                event metadata such as event ID
                                                and timestamp.
    """
    pass
  1. عملکرد را فشار دهید. می توانید از یک اسکریپت شبیه به این استفاده کنید: GCF/Push-to-GCF.SH .

تبصره 1 . حتماً ENV ها را با مقادیر مناسب تهیه کنید ، یا فقط آنها را در بالا اضافه کنید ( GS_BUCKET=blah ، ..):

تبصره 2 . با این کار ، تمام کد محلی ( . ) را تحت فشار قرار می دهد ، بنابراین حتماً کد خود را در یک پوشه خاص احاطه کرده و از .gcloudignore مانند یک حرفه ای استفاده کنید تا از فشار دادن کتابخانه های عظیم جلوگیری کنید. ( مثال ).

#!/bin/bash

set -euo pipefail

# add your logic here, for instance:
source .env || exit 2 

echo "Pushing ☁️ f(x)☁ to 🪣 $GS_BUCKET, along with DB config.. (DB_PASS=$DB_PASS)"

gcloud --project "$PROJECT_ID" functions deploy php_amarcord_generate_caption \
    --runtime python310 \
    --region "$GCP_REGION" \
    --trigger-event google.cloud.storage.object.v1.finalized \
    --trigger-resource "$BUCKET" \
    --set-env-vars "DB_HOST=$DB_HOST,DB_NAME=$DB_NAME,DB_PASS=$DB_PASS,DB_USER=$DB_USER" \
    --source . \
    --entry-point generate_caption \
    --gen2

توجه : در این مثال ، generate_caption روش فراخوانی شده خواهد بود و عملکرد Cloud رویداد GCS را با تمام اطلاعات مربوطه (نام سطل ، نام شی ، ..) به آن منتقل می کند. مدتی را برای اشکال زدایی از آن رویداد Python Dict بگذرانید.

آزمایش عملکرد

تست های واحد

این عملکرد دارای قسمتهای متحرک بسیاری است. ممکن است بخواهید همه موارد مجرد را آزمایش کنید.

یک مثال در GCF/test.py است.

توابع ابر UI

همچنین برای کشف عملکرد خود در UI مدتی وقت بگذارید. هر برگه ارزش کاوش دارد ، به خصوص Source (مورد علاقه من) ، Variables ، Trigger و Logs . شما زمان زیادی را در Logs می کنید تا خطاهای عیب یابی را انجام دهید (همچنین خطاهای احتمالی را در پایین این صفحه مشاهده کنید). همچنین حتماً Permissions را بررسی کنید.

CF3DED30D532A2C7.PNG

آزمون E2E

زمان آزمایش دستی عملکرد!

  1. به برنامه خود بروید و وارد شوید
  2. یک تصویر بارگذاری کنید (خیلی بزرگ نیست ، ما با تصاویر بزرگ مشکلاتی را دیده ایم)
  3. در UI بررسی کنید که تصویر بارگذاری شده است.
  4. در استودیوی Cloud SQL بررسی کنید که توضیحات به روز شده است. ورود به سیستم و اجرای این پرس و جو: SELECT * FROM images .

43a680b12dbbdda0.png

و کار می کند! ما همچنین ممکن است بخواهیم جلوی آن را به روز کنیم تا این توضیحات را نشان دهیم.

PHP را برای نمایش [اختیاری] به روز کنید

ما ثابت کرده ایم که برنامه کار می کند. با این حال ، خوب است که کاربران نیز بتوانند این توضیحات را ببینند.

ما نیازی به کارشناسان PHP نداریم تا توضیحات را به index.php اضافه کنیم. این کد باید انجام دهد (بله ، جمینی آن را برای من هم نوشت!):

<?php if (!empty($image['description'])): ?>
    <p class="font-bold">Gemini Caption:</p>
    <p class="italic"><?php echo $image['description']; ?></p>
<?php endif; ?>

این کد را در قسمت foreach با سلیقه خود قرار دهید.

در مراحل بعدی ما به لطف کمک کد Gemini ، یک نسخه UI زیباتر را مشاهده می کنیم. یک نسخه زیبا ممکن است به این شکل باشد:

FDC12DE0C88C4464.png

نتیجه گیری

شما یک تابع ابر را بر روی اشیاء جدید که روی GCS فرود آمده اند ، ایجاد کرده اید که قادر به حاشیه نویسی محتوای تصویر مانند یک انسان است و به طور خودکار DB را به روز می کند. عجب!

بعدش چی؟ برای دستیابی به دو ویژگی عالی می توانید همان استدلال را دنبال کنید.

[اختیاری] توابع ابر بیشتر را اضافه کنید [پایان باز]

چند ویژگی اضافی به ذهن متبادر می شود.

📩 ماشه ایمیل

یک ماشه ایمیلی که هر بار که شخصی یک عکس ارسال می کند ، برای شما ایمیل می فرستد.

  • خیلی وقتها؟ یک محدودیت بیشتر اضافه کنید: یک تصویر بزرگ یا تصویری که محتوای جمینی آن شامل کلمات "برهنه/برهنگی/خشن" است.
  • برای این کار بررسی EventArc را در نظر بگیرید.

🚫 عکسهای نامناسب خودکار متوسط

در حال حاضر یک مدیر انسانی در حال پرچم گذاری تصاویر برای "نامناسب" است. چگونه در مورد داشتن جمینی انجام بلند کردن سنگین و تعدیل فضا چطور؟ یک تست را برای پرچم گذاری محتوای ماشه نامناسب اضافه کرده و DB را همانطور که در عملکرد قبلی آموخته ایم به روز کنید. این به معنای اساساً گرفتن عملکرد قبلی ، تغییر سریع و به روزرسانی DB بر اساس پاسخ است.

احتیاط هوش مصنوعی تولیدی دارای خروجی های غیرقابل پیش بینی است. اطمینان حاصل کنید که "خروجی خلاق" از جمینی "روی ریل" قرار داده شده است. شما ممکن است از یک پاسخ قطعی مانند نمره اطمینان از 0 تا 1 ، JSON ، بپرسید. شما می توانید از بسیاری جهات به این هدف برسید ، به عنوان مثال: * با استفاده از کتابخانه های Python pydantic ، langchain ، .. * از خروجی ساختاری جمینی استفاده کنید.

نکته . شما می توانید چندین کارکرد داشته باشید یا یک سریع داشته باشید که یک پاسخ JSON را تقویت کند (گرتا با "خروجی ساختاری جمینی" همانطور که در بالا برجسته شد) مانند:

ساخت سریع این امر چیست؟

{
    "description": "This is the picture of an arrosticino",
    "suitable": TRUE
}

برای به دست آوردن بینش می توانید زمینه های اضافی سریع را اضافه کنید: آیا چیز خوبی در مورد آن وجود دارد؟ در مورد آن بد است؟ آیا مکان را می شناسید؟ آیا متن وجود دارد (OCR هرگز ساده تر نبوده است):

  • goods : "به نظر می رسد غذای Yummie"
  • bads : "به نظر می رسد غذای ناسالم"
  • OCR : "DA Consumare preferibilmente prima del 10 novembre 2024"
  • location : "Pescara ، Lungomare"

در حالی که معمولاً بهتر است عملکرد N را برای نتایج n داشته باشید ، انجام یک کار که 10 کار انجام می دهد ، بسیار ارزشمند است. این مقاله را توسط Riccardo بررسی کنید تا ببینید چگونه.

خطاهای احتمالی (بیشتر IAM / مجوزها)

اولین موردی که من این راه حل را تهیه کردم ، به برخی از مشکلات اجازه IAM رسیدم. من آنها را برای همدلی اضافه می کنم و ایده هایی در مورد چگونگی رفع آنها ارائه می دهم.

خطا: مجوزهای کافی برای حساب خدمات نیست

  1. توجه داشته باشید که برای استقرار یک عملکرد GCF که به یک سطل GCS گوش می دهد ، باید مجوزهای مناسب را به حساب خدمات مورد استفاده خود برای کار تنظیم کنید ، مانند شکل:

22F51012FA6B4A24.PNG

همچنین ممکن است مجبور شوید API های EventArc را فعال کنید - چند دقیقه قبل از در دسترس بودن آنها.

خطا: Cloud Cloud Run Invoker

  1. نظر دیگر از UI برای اجازه GCF این است ( نقش Cloud Run Invoker ):

BE72E17294F2D3F3.png

این خطا می تواند با اجرای دستور در تصویر ثابت شود ، که شبیه به Permissions.sh است.

این شماره در اینجا شرح داده شده است: https://cloud.google.com/functions/docs/securing/authenticating

خطا: بیش از حد حافظه

اولین باری که آن را اجرا کردم ، سیاهههای مربوط به من می توانند بگویند: "" حد حافظه 244 MIB با 270 MIB مورد استفاده فراتر رفت. در نظر بگیرید که محدودیت حافظه را افزایش دهید ، به https://cloud.google.com/functions/docs/configuring/memory "مراجعه کنید. ". دوباره ، RAM را به GCF خود اضافه کنید. این کار در UI بسیار آسان است. در اینجا یک دست انداز احتمالی وجود دارد:

BED69D6AD0263114.png

از طرف دیگر ، شما همچنین می توانید اسکریپت استقرار Cloud Run خود را برای دست انداز MEM/CPU اصلاح کنید. این کمی بیشتر طول می کشد.

خطا: PubSub منتشر شد

ایجاد یک ماشه با GCF V1 یک بار این خطا را داد:

E5C338EE35AD4C24.PNG

باز هم ، این کار با مراجعه به IAM و ارائه حساب خدمات خود نقش "Pub/Sub Publisher" را آسان می کند.

خطا: AI Vertex استفاده نشده است

اگر این خطا را دریافت کردید:

مجوز رد شد: 403 API Vertex AI در Project your_project قبل از آن استفاده نشده است یا غیرفعال است. آن را با مراجعه به https://console.developers.google.com/apis/api/aiplatform.googleapis.com/overview؟project=yor_project فعال کنید

شما فقط باید API های Vertex AI را فعال کنید. ساده ترین راه برای فعال کردن همه API های مورد نیاز این است:

  1. https://console.cloud.google.com/vertex-ai
  2. روی "فعال کردن همه API های توصیه شده" کلیک کنید.

492F05AC377F3630.PNG

خطا: ماشه EventArc یافت نشد.

اگر این کار را کردید ، لطفاً عملکرد را مجدداً مجدداً مورد استفاده قرار دهید.

8EC4FC11833D7420.PNG

خطا: 400 نماینده خدمات ارائه می شوند

400 عامل خدمات ارائه می شوند ( https://cloud.google.com/vertex-ai/docs/general/access-control#service-agents ). نمایندگان خدمات برای خواندن پرونده ذخیره سازی ابری ارائه شده مورد نیاز هستند. بنابراین لطفاً چند دقیقه دوباره امتحان کنید.

اگر این اتفاق می افتد ، مدتی صبر کنید یا از یک گوگلر بپرسید.

10. ماژول 8: SLO های موجود را ایجاد کنید

در فصل سعی می کنیم به این هدف برسیم:

  1. ایجاد SLIS
  2. ایجاد SLO بر اساس SLIS
  3. ایجاد هشدارها بر اساس SLOS

F63426182C052123.png

این یک موضوع بسیار عزیز برای نویسنده است ، زیرا Riccardo در منطقه SRE / DevOps Google Cloud کار می کند.

(باز پایان) برای این برنامه SLIS و SLO ایجاد کنید

اگر شما نمی توانید بگویید چه موقع پایین است ، برنامه چقدر خوب است؟

SLO چیست؟

اوه من! Google SLOS را اختراع کرد! برای مطالعه بیشتر در مورد آن می توانم پیشنهاد کنم:

مرحله 1: در دسترس بودن SLI/SLO ایجاد کنید

بیایید با در دسترس بودن SLO شروع کنیم ، زیرا این ساده ترین و احتمالاً مهمترین چیزی است که می خواهید اندازه گیری کنید.

خوشبختانه Cloud Run به لطف Istio با پشتیبانی از پیش ساخته SLO همراه است.

هنگامی که برنامه شما در Cloud Run قرار دارد ، دستیابی به این بسیار ساده است ، 30 ثانیه طول می کشد.

  • به صفحه Cloud Run خود بروید.
  • برنامه خود را کلیک کنید/انتخاب کنید.
  • برگه SLOs را انتخاب کنید.
  • روی "+ ایجاد SLO" کلیک کنید.
  • در دسترس بودن ، مبتنی بر درخواست
  • ادامه دهید
  • ماه تقویم / 99 ٪.
  • روی "ایجاد SLO" کلیک کنید.

e471c7ebdc56cdf6.png

مرحله 2: در مورد این SLO هشدار دهید

پیشنهاد می کنم 2 هشدار ایجاد کنید:

  1. یکی با Burnrate کم ("Slowburn") برای هشدار دادن به شما از طریق ایمیل (شبیه سازی بلیط PRI کم).
  2. یکی با Burnrate High ("Fastburn") برای هشدار دادن به شما از طریق پیام کوتاه (شبیه سازی بلیط / پیجر PRI بالا)

از قبل به SLO tab خود بروید.

این کار را دو بار انجام دهید:

314bfd6b9ef0a260.png

  • روی "ایجاد Slo Alert" کلیک کنید (دکمه 🔔 با یک به علاوه در داخل ، در سمت راست)
  • مدت زمان بازگشت ، آستانه میزان سوختگی:
  • [سریع] اول: 60 دقیقه / 10 x
  • [آهسته] دوم: 720 دقیقه / 2 x
  • کانال اعلان: روی کانال های مدیریت اعلان کلیک کنید
  • اول ، "ایمیل" -> اضافه کردن جدید -> ..
  • دوم ، "پیام کوتاه" -> اضافه کردن جدید -> تأیید را از طریق تلفن.
  • نکته: من دوست دارم از ایموجی ها در نام ها استفاده کنم! برای نسخه های نمایشی سرگرم کننده است.
  • پس از اتمام ، روی Big X در بالا سمت راست کلیک کنید.
  • ابتدا تلفن (سریع) ، ایمیل بعدی (آهسته) را انتخاب کنید.
  • برخی از اسناد نمونه مانند:
  • [PHP Amarcord] Riccardo told me to type sudo reboot or to check documentation in http://example.com/playbooks/1.php but I guess he was joking .

یکنوع بازی شبیه لوتو

نتیجه نهایی

ما می توانیم این تمرین را به پایان برسانیم که شما 1 هشدارهای SLO + 2X برای در دسترس بودن خود داشته باشید و به ایمیل و تلفن شما هشدار می دهد.

اگر می خواهید می توانید تأخیر اضافه کنید (و من شما را به شدت تشویق می کنم) یا حتی یک پیچیده تر. برای تأخیر ، تأخیر را انتخاب کنید که شما منطقی می دانید. وقتی شک دارید ، 200 متر را انتخاب کنید.

11. مراحل بعدی

شما همه چیز را تمام کرده اید ، چه چیزی از دست رفته است؟

کمی برای فکر کردن:

با جمینی بازی کنید

می توانید از دوقلوها در دو طعم استفاده کنید:

  1. vertex ai. "راه سازمانی" ، با GCP شما در هم تنیده شده است ، که ما در فصل 7 (GCF+Gemini) مورد بررسی قرار داده ایم. همه احراز هویت به طرز جادویی کار می کند ، و خدمات به زیبایی به هم پیوسته است.
  2. Google AI. "راه مصرف کننده". شما یک کلید API Gemini را از اینجا دریافت می کنید و ساخت اسکریپت های کوچکی را که می توانند به هر بار کاری که قبلاً دارید گره بزنید (کار اختصاصی ، ابرهای دیگر ، LocalHost ، ..). شما فقط کلید API خود را جایگزین می کنید و کد به طرز جادویی شروع می شود.

ما شما را تشویق می کنیم تا با پروژه های حیوان خانگی خود به کاوش (2) بپردازید.

بالا بردن

من در UIS خوب نیستم. اما جمینی است! شما فقط می توانید یک صفحه PHP را بگیرید و چیزی شبیه به این را بگویید:

I have a VERY old PHP application. I want to touch it as little as possible. Can you help me:

1. add some nice CSS to it, a single static include for tailwind or similar, whatever you prefer
2. Transform the image print with description into cards, which fit 4 per line in the canvas?

Here's the code:

-----------------------------------
[Paste your PHP page, for instance index.php - mind the token limit!]

شما به راحتی می توانید این کار را در کمتر از 5 دقیقه بدست آورید ، یک ابر از بین می رود! :)

پاسخ از جمینی کامل بود (به معنای ، من مجبور به تغییر یک چیز نبودم):

8a3d5fe37ec40bf8.png

و این طرح جدید در برنامه شخصی نویسنده است:

81620EB90AE3229A.PNG

توجه: کد به عنوان تصویر چسبانده می شود زیرا ما نمی خواهیم شما را به گرفتن کد ترغیب کنیم ، اما با محدودیت های خلاقانه UI/Frontend خود ، Gemini را برای نوشتن کد برای شما بدست آورید. به من اعتماد کن ، بعد از آن با تغییرات بسیار جزئی باقی مانده است.

امنیت

تأمین صحیح این برنامه ، یک کارگاه غیرعادی برای این کارگاه 4 ساعته است.

برای برخی از ایده ها ، doc SECURITY را بررسی کنید.

12. تبریک می گویم!

تبریک می گویم 🎉🎉🎉 ، شما برنامه PHP میراث خود را با Google Cloud با موفقیت مدرن کرده اید.

24cb9a39b1841fbd.png

به طور خلاصه در این CodeLab شما آموخته اید:

  • نحوه استقرار یک پایگاه داده MySQL در Google Cloud SQL و نحوه مهاجرت پایگاه داده موجود خود به آن.
  • چگونه برنامه PHP خود را با Docker و BuildPacks کانتینر کنید و تصویر آن را در Google Cloud Artifact Registry ذخیره کنید
  • نحوه استقرار برنامه Containerized خود به Cloud Run و ساخت آن با Cloud SQL اجرا شود
  • نحوه مخفیانه ذخیره/استفاده از پارامترهای پیکربندی حساس (مانند رمز عبور DB) با استفاده از Google Secret Manager
  • نحوه تنظیم خط لوله CI/CD خود با Google Cloud Build برای ساخت و استقرار خودکار برنامه PHP با هر کد فشار به repo github شما.
  • نحوه استفاده از ذخیره سازی ابری برای "ابری" منابع برنامه خود
  • چگونه می توان از فن آوری های بدون سرور برای ایجاد گردش کار شگفت انگیز در بالای Google Cloud بدون لمس کد برنامه خود استفاده کرد.
  • از قابلیت های چند مدلی جمینی برای یک مورد استفاده مناسب استفاده کنید.

این یک شروع عالی برای سفر شما به نوسازی برنامه با Google Cloud است!

🔁 بازخورد

اگر می خواهید در مورد تجربه خود با این کارگاه برای ما بگویید ، این فرم بازخورد را در نظر بگیرید.

ما از بازخورد شما و همچنین روابط عمومی برای بخش هایی از کد که به خصوص به آنها افتخار می کنید استقبال می کنیم.

🙏 با تشکر

نویسنده می خواهد از میرکو گیلیولی و مائوریزیو Ipsale از Datatonic برای کمک به نوشتن و آزمایش راه حل تشکر کند.