۱. قبل از شروع
اجرای وبسایتها با وجود تمام سربارهای ایجاد و مدیریت نمونههای ماشین مجازی (VM)، کلاسترها، پادها، سرویسها و موارد دیگر میتواند دشوار باشد. این برای برنامههای بزرگتر و چند لایه خوب است، اما اگر فقط سعی دارید وبسایت خود را مستقر و قابل مشاهده کنید، سربار زیادی خواهد داشت.
با Cloud Run، پیادهسازی Knative در Google Cloud، میتوانید وبسایت خود را بدون هیچ گونه سربار مورد نیاز برای استقرارهای مبتنی بر VM یا Kubernetes مدیریت و مستقر کنید. این نه تنها از دیدگاه مدیریتی رویکردی سادهتر است، بلکه به شما این امکان را میدهد که وقتی هیچ درخواستی به وبسایت شما نمیرسد، مقیاسپذیری را به صفر برسانید.
در این آزمایشگاه کد، شما با یک تصویر داکر که از طریق Cloud Build ایجاد شده است، شروع میکنید که آن را در Cloud Shell فعال میکنید. سپس، آن تصویر را با یک دستور در Cloud Shell در Cloud Run مستقر میکنید.
پیشنیازها
- آشنایی کلی با داکر ( به بخش شروع به کار در وبسایت داکر مراجعه کنید.)
آنچه یاد خواهید گرفت
- نحوه ساخت یک تصویر داکر با Cloud Build و آپلود آن در gcr.io
- نحوه استقرار تصاویر داکر در Cloud Run
- نحوه مدیریت استقرارهای Cloud Run
- نحوه تنظیم یک نقطه پایانی برای یک برنامه در Cloud Run
آنچه خواهید ساخت
- یک وبسایت استاتیک که درون یک کانتینر داکر اجرا میشود
- نسخهای از این کانتینر که در رجیستری کانتینرها قرار دارد
- استقرار Cloud Run برای وبسایت استاتیک شما
آنچه نیاز دارید
- یک حساب گوگل با دسترسی مدیریتی برای ایجاد پروژهها یا پروژهای با نقش مالک پروژه
۲. تنظیمات محیطی
تنظیم محیط خودتنظیم
اگر از قبل حساب گوگل ندارید، باید یکی ایجاد کنید . سپس، وارد کنسول گوگل کلود شوید و روی پروژه > ایجاد پروژه کلیک کنید.


شناسه پروژه را که به طور خودکار زیر نام پروژه شما قرار میگیرد، به خاطر بسپارید. شناسه پروژه یک نام منحصر به فرد در تمام پروژههای Google Cloud است، بنابراین نامی که در تصویر میبینید قبلاً گرفته شده است و برای شما کار نخواهد کرد. بعداً به عنوان PROJECT_ID به آن اشاره خواهد شد.
در مرحله بعد، برای استفاده از منابع Google Cloud و فعال کردن Cloud Run API، باید صورتحساب را در Cloud Console فعال کنید .
فعال کردن API اجرای ابری
روی منوی ناوبری ☰ > APIها و خدمات > داشبورد > فعال کردن APIها و خدمات کلیک کنید.

عبارت «Cloud Run API» را جستجو کنید، سپس روی Cloud Run API > Enable کلیک کنید.

اجرای این آزمایشگاه کد نباید بیش از چند دلار برای شما هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتر بگیرید یا اگر آنها را در حال اجرا بگذارید (به بخش پاکسازی در انتها مراجعه کنید) میتواند بیشتر هم بشود. برای اطلاعات بیشتر، به قیمتگذاری مراجعه کنید.
کاربران جدید گوگل کلود واجد شرایط دریافت یک دوره آزمایشی رایگان ۳۰۰ دلاری هستند.
پوسته ابری
در حالی که میتوان Google Cloud و Cloud Run را از راه دور و از طریق لپتاپ خود اجرا کرد، از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود، استفاده خواهید کرد. این محیط با تمام کتابخانهها و چارچوبهای کلاینت مورد نیاز شما از پیش پیکربندی شده است.
این ماشین مجازی مبتنی بر دبیان، تمام ابزارهای توسعه مورد نیاز شما را در خود جای داده است. این ماشین مجازی یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. این بدان معناست که تنها چیزی که برای این آزمایشگاه کد نیاز دارید یک مرورگر است (بله، روی کرومبوک هم کار میکند).
- برای فعال کردن Cloud Shell از کنسول Cloud، کافیست روی Activate Cloud Shell کلیک کنید.
(فقط چند لحظه طول میکشد تا آماده شود و به محیط متصل شود).
پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شدهاید و پروژه از قبل روی PROJECT_ID شما تنظیم شده است.
gcloud auth list
خروجی دستور
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
خروجی دستور
[core] project = <PROJECT_ID>
اگر به هر دلیلی پروژه تنظیم نشده باشد، کافیست دستور زیر را اجرا کنید:
gcloud config set project <PROJECT_ID>
به دنبال PROJECT_ID خود هستید؟ بررسی کنید که در مراحل راهاندازی از چه شناسهای استفاده کردهاید یا آن را در داشبورد Cloud Console جستجو کنید:
Cloud Shell همچنین برخی از متغیرهای محیطی را به طور پیشفرض تنظیم میکند که ممکن است هنگام اجرای دستورات بعدی مفید باشند.
echo $GOOGLE_CLOUD_PROJECT
خروجی دستور
<PROJECT_ID>
- در نهایت، منطقه پیشفرض و پیکربندی پروژه را تنظیم کنید.
gcloud config set compute/zone us-central1-f
شما میتوانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به بخش مناطق و نواحی مراجعه کنید.
۳. کپی کردن مخزن منبع
با توجه به اینکه شما در حال استقرار یک وبسایت موجود هستید، فقط باید منبع را از مخزن خود کلون کنید، بنابراین میتوانید بر ایجاد تصاویر Docker و استقرار در Cloud Run تمرکز کنید.
دستورات زیر را برای کپی کردن مخزن به نمونه Cloud Shell خود اجرا کنید و به دایرکتوری مناسب بروید. همچنین وابستگیهای Node.js را نصب خواهید کرد تا بتوانید برنامه خود را قبل از استقرار آزمایش کنید.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
این دستور مخزن شما را کلون میکند، دایرکتوری را تغییر میدهد و وابستگیهای لازم برای اجرای محلی برنامه شما را نصب میکند. اجرای اسکریپت ممکن است چند دقیقه طول بکشد.
بررسیهای لازم را انجام دهید و برنامه خود را آزمایش کنید. دستور زیر را برای شروع وب سرور خود اجرا کنید:
cd ~/monolith-to-microservices/monolith npm start
خروجی:
Monolith listening on port 8080!
میتوانید با کلیک روی پیشنمایش وب، پیشنمایشی از برنامه خود را مشاهده کنید.
و انتخاب پیشنمایش روی پورت ۸۰۸۰ .

این یک پنجره جدید باز میکند که در آن میتوانید فروشگاه فانتزی خود را در حال کار ببینید!

میتوانید پس از مشاهده وبسایت، این پنجره را ببندید. برای متوقف کردن فرآیند وب سرور، CONTROL+C (در مکینتاش Command+C ) را در پنجره ترمینال فشار دهید.
۴. ایجاد کانتینر داکر با Cloud Build
حالا که فایلهای منبع شما آماده هستند، وقت آن رسیده که برنامه خود را داکرایز کنید!
معمولاً، شما باید یک رویکرد دو مرحلهای را در پیش بگیرید که شامل ساخت یک کانتینر داکر و قرار دادن آن در یک رجیستری برای ذخیره تصویر برای GKE جهت دریافت از آن است. با این حال، میتوانید با استفاده از Cloud Build برای ساخت کانتینر داکر و قرار دادن تصویر در Container Registry با یک دستور واحد، کار را آسانتر کنید! برای مشاهده فرآیند دستی ایجاد یک Dockerfile و قرار دادن آن، به Quickstart برای Container Registry مراجعه کنید.
Cloud Build فایلها را از دایرکتوری فشرده کرده و آنها را به یک مخزن ذخیرهسازی ابری منتقل میکند. سپس فرآیند ساخت، تمام فایلها را از سطل میگیرد و از Dockerfile که در همان دایرکتوری برای اجرای فرآیند ساخت Docker وجود دارد، استفاده میکند. با توجه به اینکه شما پرچم --tag را با میزبان gcr.io برای تصویر Docker مشخص کردهاید، تصویر Docker حاصل به رجیستری کانتینر منتقل میشود.
ابتدا باید مطمئن شوید که Cloud Build API را فعال کردهاید. برای فعال کردن آن، دستور زیر را اجرا کنید:
gcloud services enable cloudbuild.googleapis.com
پس از فعال شدن API، دستور زیر را در Cloud Shell اجرا کنید تا فرآیند ساخت آغاز شود:
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
این فرآیند چند دقیقه طول میکشد، اما پس از اتمام آن، خروجی در ترمینال مشابه زیر خواهد بود:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
برای مشاهده تاریخچه ساخت یا تماشای فرآیند به صورت زنده، میتوانید به کنسول ابری بروید، سپس روی منوی ناوبری ☰ > ساخت ابری > تاریخچه کلیک کنید. در آنجا میتوانید لیستی از تمام ساختهای قبلی خود را مشاهده کنید، اما فقط باید نسخهای که خودتان ایجاد کردهاید وجود داشته باشد.

اگر روی شناسه ساخت (Build id) کلیک کنید، میتوانید تمام جزئیات مربوط به آن ساخت، از جمله خروجی گزارش (log output) را مشاهده کنید. میتوانید با کلیک روی پیوند کنار تصویر (Image) ، تصویر کانتینری که ایجاد شده است را مشاهده کنید.

۵. کانتینر را در Cloud Run مستقر کنید
حالا که وبسایت خود را کانتینرایز کردهاید و آن را به Container Registry منتقل کردهاید، وقت آن رسیده که آن را در Cloud Run مستقر کنید!
دو رویکرد برای استقرار در Cloud Run وجود دارد:
- Cloud Run (کاملاً مدیریتشده) مدل PaaS است که در آن کل چرخه حیات کانتینر مدیریت میشود. شما از این رویکرد برای این آزمایشگاه کد استفاده خواهید کرد.
- Cloud Run برای Anthos، Cloud Run با یک لایه کنترل اضافی است که به شما امکان میدهد خوشهها و Podهای خود را از GKE بیاورید. برای اطلاعات بیشتر، به تنظیم Cloud Run برای Anthos در Google Cloud مراجعه کنید.
مثالهای خط فرمان در Cloud Shell با استفاده از متغیرهای محیطی که قبلاً تنظیم کردهاید، خواهند بود.
خط فرمان
برای استقرار برنامه خود، دستور زیر را اجرا کنید:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed
از شما خواسته میشود که مشخص کنید میخواهید در کدام منطقه فعالیت کنید. نزدیکترین منطقه به خودتان را انتخاب کنید، سپس نام سرویس پیشنهادی پیشفرض (monolith) را بپذیرید.

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

تأیید استقرار
برای تأیید اینکه استقرار با موفقیت ایجاد شده است، دستور زیر را اجرا کنید. ممکن است چند لحظه طول بکشد تا Pod status به Running در حال اجرا) تغییر کند:
gcloud run services list
[1] Cloud Run (کاملاً مدیریتشده) را انتخاب کنید.
خروجی:
SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT ✔ monolith us-east1 <your url> <your email> 2019-09-16T21:07:38.267Z
خروجی چندین چیز را به شما نشان میدهد. میتوانید استقرار خود و همچنین کاربری که آن را مستقر کرده است (آدرس ایمیل شما) و URL که میتوانید برای دسترسی به برنامه از آن استفاده کنید را ببینید. به نظر میرسد همه چیز با موفقیت ایجاد شده است!
آدرس اینترنتی (URL) ارائه شده در فهرست سرویسها را در مرورگر وب خود باز کنید. باید همان وبسایتی را که بهصورت محلی پیشنمایش دادهاید، مشاهده کنید.
۶. ایجاد نسخه جدید با همزمانی کمتر
حالا، دوباره برنامه خود را مستقر کنید، اما این بار یکی از پارامترها را تنظیم کنید.
به طور پیشفرض، یک برنامه Cloud Run مقدار همزمانی ۸۰ را خواهد داشت، به این معنی که هر نمونه کانتینر حداکثر ۸۰ درخواست را همزمان ارائه میدهد. این یک تفاوت بزرگ با مدل FaaS (توابع به عنوان سرویس) است که در آن یک نمونه در هر زمان یک درخواست را مدیریت میکند.
همان تصویر کانتینر را با مقدار همزمانی ۱ (فقط برای اهداف آزمایشی) مجدداً مستقر کنید و ببینید چه اتفاقی میافتد.
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1
به سوالات بعدی مانند دفعه اول پاسخ دهید. پس از موفقیت آمیز بودن دستور، برای مشاهده نتیجه، Cloud Console را بررسی کنید.
از داشبورد Cloud Run، روی سرویس یکپارچه کلیک کنید تا جزئیات را ببینید.

روی برگهٔ «ویرایشها» کلیک کنید. باید دو ویرایش ایجاد شده را ببینید. روی «monolith-00002» کلیک کنید و جزئیات را بررسی کنید. باید ببینید که مقدار همزمانی به ۱ کاهش یافته است.
]

اگرچه این پیکربندی برای آزمایش کافی است، اما در اکثر سناریوهای تولید، کانتینرهایی خواهید داشت که از چندین درخواست همزمان پشتیبانی میکنند.
حالا، بدون نیاز به استقرار مجدد، همزمانی اصلی را بازیابی کنید. میتوانید مقدار همزمانی را روی پیشفرض ۸۰ یا ۰ تنظیم کنید، که هرگونه محدودیت همزمانی را حذف کرده و آن را روی حداکثر پیشفرض (که در زمان نوشتن این مطلب ۸۰ است) تنظیم میکند.
برای بهروزرسانی نسخهی فعلی، دستور زیر را در Cloud Shell اجرا کنید:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80
توجه کنید که یک ویرایش دیگر ایجاد شده است، ترافیک هدایت شده است و همزمانی به ۸۰ برگشته است.
۷. ایجاد تغییرات در وبسایت
تیم بازاریابی شما از شما خواسته است که صفحه اصلی وبسایت شرکت خود را تغییر دهید. آنها فکر میکنند که این صفحه باید اطلاعات بیشتری در مورد شرکت و محصولات آن ارائه دهد. در این بخش، شما متنی را به صفحه اصلی اضافه خواهید کرد تا تیم بازاریابی را خوشحال کنید!
به نظر میرسد یکی از توسعهدهندگان شما قبلاً تغییرات را با نام فایل index.js.new ایجاد کرده است. میتوانید به سادگی آن فایل را در index.js کپی کنید و تغییرات شما باید اعمال شود. برای ایجاد تغییرات مناسب، دستورالعملها را دنبال کنید.
دستورات زیر را اجرا کنید، فایل بهروزرسانیشده را در نام صحیح کپی کنید و محتویات آن را برای تأیید تغییرات چاپ کنید:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
کد حاصل باید به این شکل باشد:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
root: {
flexGrow: 1
},
paper: {
width: "800px",
margin: "0 auto",
padding: theme.spacing(3, 2)
}
}));
export default function Home() {
const classes = useStyles();
return (
<div className={classes.root}>
<Paper className={classes.paper}>
<Typography variant="h5">
Fancy Fashion & Style Online
</Typography>
<br />
<Typography variant="body1">
Tired of mainstream fashion ideas, popular trends and societal norms?
This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
Start shopping Fancy items now!
</Typography>
</Paper>
</div>
);
}
شما کامپوننتهای React را بهروزرسانی کردهاید، اما برای تولید فایلهای استاتیک باید برنامه React را بسازید. دستور زیر را اجرا کنید تا برنامه React ساخته شود و آن را در دایرکتوری عمومی monolith کپی کنید:
cd ~/monolith-to-microservices/react-app npm run build:monolith
حالا که کد شما بهروزرسانی شده است، باید کانتینر داکر خود را بازسازی کرده و آن را در Container Registry منتشر کنید. میتوانید از همان دستور قبلی استفاده کنید، با این تفاوت که این بار برچسب نسخه را بهروزرسانی خواهید کرد!
دستور زیر را برای راهاندازی یک Cloud Build جدید با نسخه بهروزرسانیشدهی image به شماره ۲.۰.۰ اجرا کنید:
cd ~/monolith-to-microservices/monolith
#Feel free to test your application
npm start
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
در بخش بعدی، از آن تصویر برای بهروزرسانی برنامه خود بدون هیچ گونه خرابی استفاده خواهید کرد.
۸. وبسایت را بدون قطعی بهروزرسانی کنید
تغییرات تکمیل شده و تیم بازاریابی از بهروزرسانیهای شما راضی است! وقت آن رسیده که وبسایت را بدون وقفه برای کاربران بهروزرسانی کنید.
Cloud Run هر استقرار را به عنوان یک نسخه جدید در نظر میگیرد که به صورت آنلاین ارائه میشود و سپس ترافیک به آن هدایت میشود.
برای بهروزرسانی وبسایت خود، دستورالعملهای بعدی را دنبال کنید.
خط فرمان
از طریق خط فرمان، میتوانید سرویس را برای بهروزرسانی تصویر به نسخه جدید با دستور زیر مجدداً مستقر کنید:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managed
تأیید استقرار
با اجرای دستور زیر، بهروزرسانی استقرار خود را تأیید کنید:
gcloud run services describe monolith --platform managed
خروجی به این شکل است:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
annotations:
client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0
...
خواهید دید که سرویس شما اکنون از آخرین نسخه تصویر شما که در یک نسخه جدید منتشر شده است، استفاده میکند.
برای تأیید تغییرات، دوباره به URL خارجی سرویس Cloud Run خود بروید و متوجه شوید که عنوان برنامه شما بهروزرسانی شده است.
دستور زیر را برای فهرست کردن سرویسها و مشاهده آدرس IP در صورت فراموش کردن آن اجرا کنید:
gcloud run services list
وبسایت شما اکنون باید متنی را که به کامپوننت صفحه اصلی اضافه کردهاید، نمایش دهد!

۹. تمیز کردن
تصاویر رجیستری کانتینر را حذف کنید
# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet
# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet
حذف مصنوعات Cloud Build از فضای ذخیرهسازی ابری
# The following command will take all source archives from all builds and delete them from cloud storage
# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'
gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done
سرویس Cloud Run را حذف کنید
gcloud run services delete monolith --platform managed
۱۰. تبریک
شما وبسایت خود را با Cloud Run مستقر، مقیاسپذیر و بهروزرسانی کردید.