Cloud Run با Firebase Hosting جفت کنید تا محتوای پویا خود را تولید و ارائه دهید یا API های REST را به عنوان ریزسرویس بسازید.
با استفاده از Cloud Run ، میتوانید یک برنامه بستهبندی شده در یک تصویر ظرف را مستقر کنید. سپس، با استفاده از Firebase Hosting ، میتوانید درخواستهای HTTPS را برای راهاندازی برنامه کانتینری خود هدایت کنید.
- Cloud Run از چندین زبان (از جمله Go، Node.js، Python و Java) پشتیبانی میکند و به شما این امکان را میدهد که از زبان برنامهنویسی و چارچوب انتخابی خود استفاده کنید.
- Cloud Run به صورت خودکار و افقی تصویر کانتینر شما را برای رسیدگی به درخواستهای دریافتی تغییر میدهد ، سپس با کاهش تقاضا کاهش مییابد.
- شما فقط هزینه CPU، حافظه و شبکه مصرف شده در هنگام رسیدگی به درخواست را پرداخت می کنید .
به عنوان مثال از موارد و نمونهها برای Cloud Run یکپارچه با Firebase Hosting استفاده کنید، از نمای کلی بدون سرور ما دیدن کنید.
این راهنما به شما نشان می دهد که چگونه:
- یک برنامه ساده Hello World بنویسید
- یک برنامه را کانتینر کنید و آن را در Container Registry آپلود کنید
- تصویر کانتینر را در Cloud Run مستقر کنید
- درخواست های Hosting مستقیم به برنامه کانتینری شما
توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، میتوانید به صورت اختیاری تنظیمات حافظه پنهان خود را تنظیم کنید.
قبل از شروع
قبل از استفاده از Cloud Run ، باید چند کار اولیه از جمله راهاندازی حساب Cloud Billing ، فعال کردن Cloud Run API و نصب ابزار خط فرمان gcloud
را انجام دهید.
صورتحساب پروژه خود را تنظیم کنید
Cloud Run سهمیه استفاده رایگان را ارائه می دهد، اما برای استفاده یا امتحان کردن Cloud Run همچنان باید یک حساب Cloud Billing مرتبط با پروژه Firebase خود داشته باشید.
API را فعال کرده و SDK را نصب کنید
Cloud Run API را در کنسول Google APIs فعال کنید:
صفحه Cloud Run API را در کنسول Google APIs باز کنید.
وقتی از شما خواسته شد، پروژه Firebase خود را انتخاب کنید.
در صفحه Cloud Run API روی Enable کلیک کنید.
Cloud SDK را نصب و مقداردهی اولیه کنید .
بررسی کنید که ابزار
gcloud
برای پروژه صحیح پیکربندی شده باشد:gcloud config list
مرحله 1 : نمونه برنامه را بنویسید
توجه داشته باشید که Cloud Run علاوه بر زبان های نشان داده شده در نمونه زیر، از بسیاری از زبان های دیگر نیز پشتیبانی می کند.
برو
یک دایرکتوری جدید به نام
helloworld-go
ایجاد کنید، سپس دایرکتوری را به آن تغییر دهید:mkdir helloworld-go
cd helloworld-go
یک فایل جدید به نام
helloworld.go
ایجاد کنید، سپس کد زیر را اضافه کنید:این کد یک وب سرور اصلی ایجاد می کند که به پورت تعریف شده توسط متغیر محیط
PORT
گوش می دهد.
برنامه شما تمام شده و آماده است تا در Container Registry بارگذاری شود.
Node.js
یک دایرکتوری جدید به نام
helloworld-nodejs
ایجاد کنید، سپس دایرکتوری را به آن تغییر دهید:mkdir helloworld-nodejs
cd helloworld-nodejs
یک فایل
package.json
با محتویات زیر ایجاد کنید:یک فایل جدید با نام
index.js
ایجاد کنید و کد زیر را اضافه کنید:این کد یک وب سرور اصلی ایجاد می کند که به پورت تعریف شده توسط متغیر محیط
PORT
گوش می دهد.
برنامه شما تمام شده و آماده است تا در Container Registry بارگذاری شود.
پایتون
یک دایرکتوری جدید به نام
helloworld-python
ایجاد کنید، سپس دایرکتوری را به آن تغییر دهید:mkdir helloworld-python
cd helloworld-python
یک فایل جدید با نام
app.py
ایجاد کنید، سپس کد زیر را اضافه کنید:این کد یک وب سرور اصلی ایجاد می کند که به پورت تعریف شده توسط متغیر محیط
PORT
گوش می دهد.
برنامه شما تمام شده و آماده است تا در Container Registry بارگذاری شود.
جاوا
جاوا SE 8 یا جدیدتر JDK و CURL را نصب کنید.
توجه داشته باشید که فقط برای ایجاد پروژه وب جدید در مرحله بعد باید این کار را انجام دهیم. Dockerfile که بعدا توضیح داده می شود، همه وابستگی ها را در ظرف بارگیری می کند.
از کنسول، یک پروژه وب خالی جدید با استفاده از cURL ایجاد کنید و سپس دستورات را از حالت فشرده خارج کنید:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
این یک پروژه SpringBoot ایجاد می کند.
کلاس
SpringBootApplication
را درsrc/main/java/com/example/helloworld/HelloworldApplication.java
با اضافه کردن یک@RestController
برای مدیریت نگاشت/
و همچنین اضافه کردن یک فیلد@Value
برای ارائه متغیر محیطیTARGET
به روز کنید:این کد یک وب سرور اصلی ایجاد می کند که به پورت تعریف شده توسط متغیر محیط
PORT
گوش می دهد.
برنامه شما تمام شده و آماده است تا در Container Registry بارگذاری شود.
مرحله 2 : یک برنامه را کانتینر کنید و آن را در Container Registry آپلود کنید
با ایجاد یک فایل جدید به نام
Dockerfile
در همان دایرکتوری که فایل های منبع، برنامه نمونه را محفظه کنید. مطالب زیر را در فایل خود کپی کنید.برو
Node.js
پایتون
جاوا
با اجرای دستور زیر از دایرکتوری حاوی Dockerfile، تصویر کانتینر خود را با استفاده از Cloud Build بسازید:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
پس از موفقیت، یک پیام SUCCESS حاوی نام تصویر را مشاهده خواهید کرد
(gcr.io/ PROJECT_ID /helloworld
).
تصویر کانتینر اکنون در Container Registry ذخیره میشود و در صورت تمایل میتوان دوباره از آن استفاده کرد.
توجه داشته باشید که به جای Cloud Build ، می توانید از نسخه محلی Docker برای ساخت کانتینر خود به صورت محلی استفاده کنید.
مرحله 3 : تصویر کانتینر را در Cloud Run قرار دهید
با استفاده از دستور زیر مستقر کنید:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
وقتی از شما خواسته شد:
- یک منطقه را انتخاب کنید (به عنوان مثال
us-central1
) - نام سرویس را تأیید کنید (به عنوان مثال،
helloworld
) - برای اجازه دادن به فراخوان های احراز هویت نشده پاسخ
Y
را بدهید
- یک منطقه را انتخاب کنید (به عنوان مثال
برای بهترین عملکرد، سرویس Cloud Run خود را با Hosting با استفاده از مناطق زیر یکجا قرار دهید:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
بازنویسی در Cloud Run از Hosting در مناطق زیر پشتیبانی می شود:
-
asia-east1
-
asia-east2
-
asia-northeast1
-
asia-northeast2
-
asia-northeast3
-
asia-south1
-
asia-south2
-
asia-southeast1
-
asia-southeast2
-
australia-southeast1
-
australia-southeast2
-
europe-central2
-
europe-north1
-
europe-southwest1
-
europe-west1
-
europe-west12
-
europe-west2
-
europe-west3
-
europe-west4
-
europe-west6
-
europe-west8
-
europe-west9
-
me-central1
-
me-west1
-
northamerica-northeast1
-
northamerica-northeast2
-
southamerica-east1
-
southamerica-west1
-
us-central1
-
us-east1
-
us-east4
-
us-east5
-
us-south1
-
us-west1
-
us-west2
-
us-west3
-
us-west4
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
چند لحظه صبر کنید تا استقرار کامل شود. در صورت موفقیت، خط فرمان URL سرویس را نمایش می دهد. به عنوان مثال:
https://helloworld- RANDOM_HASH -us-central1.a.run.appبا باز کردن URL سرویس در یک مرورگر وب، از کانتینر مستقر شده خود دیدن کنید.
مرحله بعدی نحوه دسترسی به این برنامه کانتینری شده از URL Firebase Hosting را به شما نشان می دهد تا بتواند محتوای پویا برای سایت میزبان Firebase شما تولید کند.
مرحله 4: درخواست های میزبانی را به برنامه کانتینری خود مستقیم کنید
با بازنویسی قوانین ، میتوانید درخواستهایی را که با الگوهای خاص مطابقت دارند به یک مقصد هدایت کنید.
مثال زیر نشان میدهد که چگونه میتوانید تمام درخواستها را از صفحه /helloworld
در سایت Hosting خود هدایت کنید تا راهاندازی و اجرای نمونه کانتینر helloworld
خود را آغاز کنید.
اطمینان حاصل کنید که:
شما آخرین نسخه Firebase CLI را دارید.
شما Firebase Hosting را راه اندازی کرده اید.
برای دستورالعمل های دقیق در مورد نصب CLI و مقداردهی اولیه Hosting ، به راهنمای شروع برای Hosting مراجعه کنید.
فایل
firebase.json
خود را باز کنید.پیکربندی
rewrite
زیر را در قسمتhosting
اضافه کنید:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/helloworld", "run": { "serviceId": "helloworld", // "service name" (from when you deployed the container image) "region": "us-central1", // optional (if omitted, default is us-central1) "pinTag": true // optional (see note below) } } ] }
با اجرای دستور زیر از ریشه دایرکتوری پروژه خود، پیکربندی هاست خود را در سایت خود قرار دهید:
firebase deploy --only hosting
با استفاده از این ویژگی، می توانید اطمینان حاصل کنید که تجدید نظر در سرویس Cloud Run برای تولید محتوای پویا سایت شما با منابع Hosting ثابت و پیکربندی Hosting شما همگام می شود. همچنین، این ویژگی به شما این امکان را می دهد که پیش نمایش بازنویسی های خود را در Cloud Run در کانال های پیش نمایش Hosting مشاهده کنید.
اگر
"pinTag": true
به یک بلوکrun
از پیکربندیhosting.rewrites
اضافه کنید، منابع و پیکربندی استاتیک Hosting شما به آخرین ویرایش سرویس Cloud Run در زمان استقرار پین میشود. اگر نسخهای از سایت خود را به عقب برگردانید، بازبینی سرویس Cloud Run "پین شده" نیز بازگردانده میشود.این ویژگی به تگ های Cloud Run متکی است که دارای محدودیت 1000 برچسب در هر سرویس و 2000 برچسب در هر منطقه هستند. این بدان معناست که پس از صدها استقرار، قدیمیترین نسخههای یک سایت ممکن است از کار بیفتند.
اکنون ظرف شما از طریق URL های زیر قابل دسترسی است:
زیر دامنه های Firebase شما:
PROJECT_ID .web.app/
وPROJECT_ID .firebaseapp.com/
هر دامنه سفارشی متصل:
CUSTOM_DOMAIN /
برای جزئیات بیشتر در مورد قوانین بازنویسی، از صفحه پیکربندی Hosting بازدید کنید. همچنین میتوانید با ترتیب اولویت پاسخها برای پیکربندیهای مختلف Hosting آشنا شوید.
به صورت محلی تست کنید
در طول توسعه، می توانید تصویر کانتینر خود را به صورت محلی اجرا و آزمایش کنید. برای دستورالعملهای دقیق، از مستندات Cloud Run دیدن کنید.
مراحل بعدی
با سایر سرویسهای Firebase با استفاده از Firebase Admin SDK تعامل داشته باشید.
درباره Cloud Run ، از جمله راهنماهای دقیق نحوه تنظیم، مدیریت و پیکربندی کانتینرها بیشتر بیاموزید.
قیمت گذاری و سهمیه ها و محدودیت های Cloud Run را مرور کنید.