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

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

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

Cloud Run نه تنها توسعه بدون سرور را به کانتینرها می‌آورد، بلکه می‌تواند روی خوشه‌های Google Kubernetes Engine (GKE) خودتان یا بر روی یک پلتفرم کاملاً مدیریت شده به عنوان راه‌حل سرویس (PaaS) ارائه‌شده توسط Cloud Run اجرا شود. شما سناریوی دوم را در این کد لبه تست خواهید کرد.

نمودار زیر جریان استقرار و میزبانی Cloud Run را نشان می دهد. شما با یک تصویر 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 با دسترسی مدیریت برای ایجاد پروژه ها یا پروژه ای با نقش مالک پروژه

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

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

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

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

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

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

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

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

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

پوسته ابری

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

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

برای فعال‌سازی Google Cloud Shell، از کنسول توسعه‌دهنده به سادگی روی دکمه سمت راست بالای صفحه کلیک کنید (تنها چند لحظه طول می‌کشد تا محیط را تهیه کرده و به آن متصل شوید):

activateCloudShell.png

روی دکمه "شروع Cloud Shell" کلیک کنید:

اسکرین شات 14/06/2017 در ساعت 10.13.43 بعد از ظهر.png

پس از اتصال به پوسته ابری، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی PROJECT_ID شما تنظیم شده است:

gcloud auth list

خروجی فرمان

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

خروجی فرمان

[core]
project = <PROJECT_ID>

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

echo $GOOGLE_CLOUD_PROJECT

خروجی فرمان

<PROJECT_ID>

اگر به دلایلی پروژه تنظیم نشد، به سادگی دستور زیر را صادر کنید:

gcloud config set project <PROJECT_ID>

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

Project_ID.png

مهم: در نهایت، منطقه پیش فرض و پیکربندی پروژه را تنظیم کنید:

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!

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

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

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

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

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

Cloud Build فایل ها را از دایرکتوری فشرده می کند و آنها را به یک سطل Cloud Storage منتقل می کند. سپس فرآیند ساخت، تمام فایل‌ها را از سطل می‌گیرد و از Dockerfile استفاده می‌کند، که در همان دایرکتوری برای اجرای فرآیند ساخت Docker وجود دارد. با توجه به اینکه شما پرچم --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 کلیک کنید. در آنجا، می‌توانید فهرستی از تمام بیلدهای قبلی خود را ببینید، اما فقط باید چیزی باشد که ایجاد کرده‌اید.

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

اکنون که وب سایت خود را کانتینری کرده اید و آن را به 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 

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

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

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

به طور پیش فرض، یک برنامه 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 کلیک کنید تا جزئیات را ببینید.

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

]

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

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

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

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

توجه داشته باشید که ویرایش دیگری ایجاد شده است، ترافیک تغییر مسیر داده است، و همزمانی به 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 &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 .

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

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

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 از 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

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

بیشتر بدانید