یک وب سایت با Cloud Run راه اندازی کنید

1. قبل از شروع

اجرای وب‌سایت‌ها با تمام هزینه‌های ایجاد و مدیریت نمونه‌های ماشین مجازی (VM)، خوشه‌ها، پادها، سرویس‌ها و موارد دیگر می‌تواند دشوار باشد. این برای برنامه‌های بزرگ‌تر و چند لایه خوب است، اما اگر فقط سعی می‌کنید وب‌سایت خود را مستقر و قابل مشاهده کنید، آن وقت هزینه زیادی دارد.

با Cloud Run، پیاده‌سازی Google Cloud Knative ، می‌توانید وب‌سایت خود را بدون هیچ هزینه‌ای که برای استقرار مبتنی بر VM یا Kubernetes نیاز دارید، مدیریت و استقرار دهید. این نه تنها از منظر مدیریتی یک رویکرد ساده‌تر است، بلکه به شما این امکان را می‌دهد تا زمانی که هیچ درخواستی به وب‌سایت شما نمی‌رسد، مقیاس را به صفر برسانید.

در این کد لبه، شما با یک تصویر Docker ایجاد شده از طریق Cloud Build، که در Cloud Shell فعال می‌شوید، شروع می‌کنید. سپس، آن تصویر را با دستوری در Cloud Shell در Cloud Run قرار می دهید.

پیش نیازها

چیزی که یاد خواهید گرفت

  • چگونه با Cloud Build یک تصویر Docker بسازیم و آن را در gcr.io آپلود کنیم
  • نحوه استقرار تصاویر Docker در Cloud Run
  • نحوه مدیریت استقرارهای Cloud Run
  • نحوه تنظیم نقطه پایانی برای یک برنامه در Cloud Run

چیزی که خواهی ساخت

  • یک وب سایت استاتیک که در داخل یک ظرف داکر اجرا می شود
  • نسخه ای از این کانتینر که در Container Registry وجود دارد
  • استقرار Cloud Run برای وب سایت استاتیک شما

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

  • یک حساب Google با دسترسی مدیریت برای ایجاد پروژه ها یا پروژه ای با نقش مالک پروژه

2. تنظیم محیط

تنظیم محیط خود به خود

اگر قبلاً یک حساب Google ندارید، باید یک حساب ایجاد کنید . سپس وارد Google Cloud Console شوید و روی Project > Create project کلیک کنید.

53dad2cefdae71da.png

faab21976aabeb4c.png

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

در مرحله بعد، برای استفاده از منابع Google Cloud و فعال کردن Cloud Run API، باید صورتحساب را در Cloud Console فعال کنید .

Cloud Run API را فعال کنید

روی منوی پیمایش ☰ > APIs & Services > Dashboard > Enable APIs And Services کلیک کنید. .

5dbb2e6e27a55fcf.png

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

f1fd486174a744cf.png

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

کاربران جدید Google Cloud واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.

پوسته ابری

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

این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).

  1. برای فعال کردن Cloud Shell از Cloud Console، کافی است روی Activate Cloud Shell کلیک کنید. fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7P6XFNqNqVB7p6FQNqNqVBQ7P6XfNqSw P-X3Q (تهیه و اتصال به محیط فقط چند لحظه طول می کشد).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1NYAd

Screen Shot 2017-06-14 at 10.13.43 PM.png

پس از اتصال به 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 جستجو کنید:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93DrxZHQ4PhZ5

Cloud Shell همچنین برخی از متغیرهای محیطی را به صورت پیش‌فرض تنظیم می‌کند که ممکن است هنگام اجرای دستورات آینده مفید باشند.

echo $GOOGLE_CLOUD_PROJECT

خروجی فرمان

<PROJECT_ID>
  1. در نهایت، منطقه پیش فرض و پیکربندی پروژه را تنظیم کنید.
gcloud config set compute/zone us-central1-f

شما می توانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به مناطق و مناطق مراجعه کنید.

3. کلون کردن مخزن منبع

با توجه به اینکه در حال استقرار یک وب سایت موجود هستید، فقط باید منبع را از مخزن خود کلون کنید، بنابراین می توانید روی ایجاد تصاویر 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!

با کلیک بر روی پیش‌نمایش وب، می‌توانید برنامه خود را پیش‌نمایش کنید acc630712255c604.png و Preview در پورت 8080 را انتخاب کنید.

5869738f0e9ec386.png

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

9ed25c3f0cbe62fa.png

پس از مشاهده وب سایت می توانید این پنجره را ببندید. برای توقف فرآیند وب سرور، CONTROL+C ( Command+C در مکینتاش) را در پنجره ترمینال فشار دهید.

4. ظرف Docker را با Cloud Build ایجاد کنید

اکنون که فایل های منبع شما آماده است، زمان آن رسیده است که برنامه خود را Dockerize کنید!

به طور معمول، شما باید یک رویکرد دو مرحله‌ای را در پیش بگیرید که مستلزم ساخت یک کانتینر Docker و هل دادن آن به یک رجیستری است تا تصویر را برای GKE ذخیره کند. با این حال، می توانید با استفاده از Cloud Build برای ساخت کانتینر Docker و قرار دادن تصویر در Container Registry با یک دستور، زندگی را آسان تر کنید! برای مشاهده فرآیند دستی ایجاد یک Dockerfile و فشار دادن آن، به Quickstart for Container Registry مراجعه کنید.

Cloud Build فایل ها را از دایرکتوری فشرده می کند و آنها را به یک سطل Cloud Storage منتقل می کند. سپس فرآیند ساخت تمام فایل‌ها را از سطل می‌گیرد و از Dockerfile استفاده می‌کند که در همان فهرست برای اجرای فرآیند ساخت داکر وجود دارد. با توجه به اینکه شما پرچم --tag با میزبان به عنوان gcr.io برای تصویر Docker مشخص کرده اید، تصویر Docker حاصل به رجیستری Container منتقل می شود.

ابتدا باید مطمئن شوید که 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

برای مشاهده تاریخچه ساخت خود یا تماشای فرآیند در زمان واقعی، می توانید به کنسول Cloud بروید، سپس روی منوی پیمایش ☰ > Cloud Build > History کلیک کنید. در آنجا، می‌توانید فهرستی از تمام بیلدهای قبلی خود را ببینید، اما تنها باید چیزی باشد که ایجاد کرده‌اید.

4c753ede203255f6.png

اگر روی Build id کلیک کنید، می‌توانید تمام جزئیات آن ساخت، از جمله خروجی گزارش را ببینید. می توانید تصویر ظرف ایجاد شده را با کلیک کردن روی پیوند کنار تصویر مشاهده کنید.

6e88ed1643dfe629.png

5. Container را در Cloud Run مستقر کنید

اکنون که وب‌سایت خود را کانتینر کرده‌اید و آن را به Container Registry منتقل کرده‌اید، وقت آن است که در Cloud Run مستقر شوید!

دو روش برای استقرار در Cloud Run وجود دارد:

  • Cloud Run (کاملاً مدیریت شده) مدل PaaS است که در آن کل چرخه حیات کانتینر مدیریت می شود. شما از این رویکرد برای این کد لبه استفاده خواهید کرد.
  • Cloud Run برای Anthos یک Cloud Run با یک لایه کنترل اضافی است که به شما امکان می دهد کلاسترها و Pods خود را از GKE بیاورید. برای اطلاعات بیشتر، به تنظیم Cloud Run برای Anthos در Google Cloud مراجعه کنید.

نمونه‌های خط فرمان با استفاده از متغیرهای محیطی که قبلاً تنظیم کرده‌اید، در Cloud Shell خواهند بود.

خط فرمان

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

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed 

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

d52d9419c5166674.png

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

3a57b32f133dad61.png

تأیید استقرار

برای اطمینان از اینکه استقرار با موفقیت ایجاد شده است، دستور زیر را اجرا کنید. ممکن است چند لحظه طول بکشد تا 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 ارائه شده در لیست خدمات را در مرورگر وب خود باز کنید و باید همان وب سایتی را ببینید که به صورت محلی پیش نمایش کرده اید.

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

اکنون، دوباره برنامه خود را مستقر کنید، اما این بار یکی از پارامترها را تنظیم کنید.

به طور پیش فرض، یک برنامه Cloud Run دارای مقدار همزمانی 80 خواهد بود، به این معنی که هر نمونه کانتینر حداکثر 80 درخواست را در یک زمان ارائه می دهد. این یک انحراف بزرگ از مدل توابع به عنوان سرویس (FaaS) است که در آن یک نمونه در یک زمان یک درخواست را مدیریت می کند.

همان تصویر کانتینر را با مقدار همزمانی 1 (فقط برای اهداف آزمایشی) مجدداً قرار دهید و ببینید چه اتفاقی می‌افتد.

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1

به سوالات بعدی مانند بار اول پاسخ دهید. پس از موفقیت آمیز بودن دستور، Cloud Console را بررسی کنید تا نتیجه را ببینید.

از داشبورد Cloud Run، روی سرویس monolith کلیک کنید تا جزئیات را ببینید.

7d1eed2e4728a4f2.png

روی تب Revisions کلیک کنید. شما باید دو ویرایش ایجاد شده را ببینید. روی monolith-00002 کلیک کنید و جزئیات را بررسی کنید. باید مقدار همزمانی را به 1 کاهش دهید.

217185c0eccc87dd.png ]

4ad481b8bcd0343d.png

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

اکنون، همزمانی اصلی را بدون استقرار مجدد بازیابی کنید. می‌توانید مقدار همزمانی را روی پیش‌فرض 80 یا 0 قرار دهید، که هر گونه محدودیت همزمانی را حذف می‌کند و آن را روی حداکثر پیش‌فرض (که اتفاقاً در زمان نوشتن این مقاله 80 است) تنظیم می‌کند.

برای به روز رسانی نسخه فعلی دستور زیر را در Cloud Shell اجرا کنید:

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80

توجه داشته باشید که ویرایش دیگری ایجاد شده است، ترافیک تغییر مسیر داده است، و همزمانی به 80 بازگشته است.

7. تغییراتی در وب سایت ایجاد کنید

تیم بازاریابی شما از شما خواسته است که صفحه اصلی وب سایت شرکت خود را تغییر دهید. آنها فکر می کنند که باید اطلاعات بیشتری از آنچه شرکت است و می فروشد باشد. در این بخش، متنی را به صفحه اصلی اضافه می کنید تا تیم بازاریابی را خوشحال کنید!

به نظر می رسد یکی از توسعه دهندگان شما قبلاً تغییرات را با نام فایل 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 &amp; 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

اکنون که کد شما به روز شده است، باید کانتینر Docker خود را دوباره بسازید و آن را در Container Registry منتشر کنید. می توانید از همان دستور قبلی استفاده کنید، با این تفاوت که این بار برچسب نسخه را به روز می کنید!

دستور زیر را برای راه اندازی یک Cloud Build جدید با نسخه تصویر به روز شده 2.0.0 اجرا کنید:

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 .

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

8. وب سایت را با زمان توقف صفر به روز کنید

تغییرات تکمیل شد و تیم بازاریابی از به روز رسانی های شما راضی است! زمان آن رسیده است که وب سایت را بدون وقفه برای کاربران به روز کنید.

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

اکنون وب سایت شما باید متنی را که به مؤلفه صفحه اصلی اضافه کرده اید نمایش دهد!

451ca252acae6928.png

9. پاکسازی کنید

حذف تصاویر رجیستری کانتینر

# 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 از Cloud Storage

# 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

10. تبریک می گویم

شما وب سایت خود را با Cloud Run استقرار، مقیاس و به روز کردید.

بیشتر بدانید