1. مقدمه
در این نرم افزار کد یاد خواهید گرفت که چگونه یک برنامه ریز رژیم غذایی عامل با هوش مصنوعی بسازید و به کار بگیرید. برای رابط کاربری با استفاده از Streamlit، مدل LLM با استفاده از Gemini Pro 2.5، Agentic AI Engine Orchestrator با استفاده از Vertex AI برای توسعه Agentic AI، BigQuery برای داده های ذخیره و Cloud Run برای استقرار.
از طریق کد لبه، شما یک رویکرد گام به گام را به شرح زیر به کار خواهید گرفت:
- پروژه Google Cloud خود را آماده کنید و تمام API مورد نیاز را روی آن فعال کنید
- با استفاده از streamlit، Vertex AI و BigQuery برنامه ریز رژیم غذایی هوش مصنوعی Agentic بسازید
- برنامه را در Cloud Run مستقر کنید
نمای کلی معماری
پیش نیاز
- یک پروژه Google Cloud Platform (GCP) با فعال کردن صورتحساب.
- دانش پایه پایتون
چیزی که یاد خواهید گرفت
- چگونه با استفاده از streamlit، Vertex AI و ذخیره دادهها در BigQuery برنامهریزی غذایی مبتنی بر هوش مصنوعی بسازیم.
- نحوه استقرار برنامه در Cloud Run
آنچه شما نیاز دارید
- مرورگر وب کروم
- یک اکانت جیمیل
- یک پروژه Cloud با فعال کردن صورتحساب
2. راه اندازی اولیه و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، مقدار سومی وجود دارد، Project Number که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورتحساب فراتر از این آموزش، میتوانید منابعی را که ایجاد کردهاید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
3. قبل از شروع
راه اندازی Cloud Project در Cloud Shell Editor
این کد لبه فرض می کند که شما قبلاً یک پروژه Google Cloud با فعال بودن صورتحساب دارید. اگر هنوز آن را ندارید، می توانید دستورالعمل های زیر را برای شروع دنبال کنید.
- در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید.
- شما از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان در حال اجرا در Google Cloud که با bq از قبل بارگذاری شده است. روی Activate Cloud Shell در بالای کنسول Google Cloud کلیک کنید.
- پس از اتصال به Cloud Shell، با استفاده از دستور زیر بررسی میکنید که قبلاً احراز هویت شدهاید و پروژه به ID پروژه شما تنظیم شده است:
gcloud auth list
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد.
gcloud config list project
- اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
همچنین میتوانید شناسه PROJECT_ID
را در کنسول ببینید
روی آن کلیک کنید و تمام پروژه و شناسه پروژه را در سمت راست خواهید دید
- API های مورد نیاز را از طریق دستور زیر فعال کنید. این ممکن است چند دقیقه طول بکشد، پس لطفا صبور باشید.
gcloud services enable aiplatform.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudresourcemanager.googleapis.com \
bigquery.googleapis.com
در اجرای موفقیت آمیز دستور، باید پیامی مشابه تصویر زیر مشاهده کنید:
Operation "operations/..." finished successfully.
جایگزین دستور gcloud از طریق کنسول با جستجوی هر محصول یا استفاده از این پیوند است.
اگر هر یک از API از دست رفته است، همیشه می توانید آن را در طول پیاده سازی فعال کنید.
برای دستورات و استفاده از gcloud به اسناد مراجعه کنید.
راه اندازی دایرکتوری کاری برنامه
- روی دکمه Open Editor کلیک کنید، با این کار یک Cloud Shell Editor باز می شود، ما می توانیم کد خود را اینجا بنویسیم
- مطمئن شوید که پروژه Cloud Code در گوشه سمت چپ پایین (نوار وضعیت) ویرایشگر Cloud Shell تنظیم شده است، همانطور که در تصویر زیر مشخص شده است و روی پروژه فعال Google Cloud که در آن صورتحساب را فعال کردهاید، تنظیم شده است. در صورت درخواست مجوز دهید . ممکن است پس از مقداردهی اولیه ویرایشگر پوسته Cloud کمی طول بکشد تا دکمه Cloud Code - Sign In ظاهر شود، لطفا صبور باشید.
در ادامه محیط پایتون خود را آماده می کنیم
راه اندازی محیط
محیط مجازی پایتون را آماده کنید
مرحله بعدی آماده سازی محیط توسعه است. ما از Python 3.12 در این Codelab استفاده خواهیم کرد و از python virtualenv برای ساده سازی نیاز به ایجاد و مدیریت نسخه پایتون و محیط مجازی استفاده خواهیم کرد.
- اگر هنوز ترمینال را باز نکردهاید، آن را با کلیک کردن روی Terminal -> New Terminal باز کنید یا از Ctrl + Shift + C استفاده کنید.
- پوشه جدیدی ایجاد کنید و با دستور زیر مکان را به این پوشه تغییر دهید
mkdir agent_diet_planner
cd agent_diet_planner
- با دستور زیر virtualenv جدید ایجاد کنید
python -m venv .env
- virtualenv را با دستور زیر فعال کنید
source .env/bin/activate
-
requirements.txt
را ایجاد کنید. روی File → New Text File کلیک کنید و محتوای زیر را پر کنید. سپس آن را به عنوانrequirements.txt
ذخیره کنید
streamlit==1.33.0
google-cloud-aiplatform
google-cloud-bigquery
pandas==2.2.2
db-dtypes==1.2.0
pyarrow==16.1.0
- سپس با اجرای دستور زیر تمامی وابستگی ها را از request.txt نصب کنید
pip install -r requirements.txt
- دستور زیر را تایپ کنید تا بررسی کنید که آیا تمام وابستگی های کتابخانه های پایتون نصب شده اند یا خیر
pip list
راه اندازی فایل های پیکربندی
اکنون باید فایل های پیکربندی این پروژه را تنظیم کنیم. فایل های پیکربندی برای ذخیره اعتبار حساب متغیر و سرویس استفاده می شود.
- اولین قدم این است که یک حساب کاربری ایجاد کنید. حساب سرویس را در جستجو تایپ کنید سپس روی حساب سرویس کلیک کنید.
- روی + ایجاد حساب سرویس کلیک کنید. نام حساب سرویس را وارد کنید سپس روی ایجاد و ادامه کلیک کنید.
- در مجوز، نقش کاربر حساب سرویس را انتخاب کنید. روی + افزودن نقش دیگری کلیک کنید و نقش IAM را انتخاب کنید: BigQuery Admin، Cloud Run Admin، Cloud Run Invoker، Vertex AI Service Agent و Vertex AI User سپس روی Done کلیک کنید.
- روی ایمیل حساب سرویس کلیک کنید، روی کلید تب کلیک کنید، کلید افزودن → ایجاد کلید جدید را کلیک کنید.
- json را انتخاب کنید سپس روی Create کلیک کنید. این فایل حساب سرویس را برای مرحله بعدی در محلی ذخیره کنید
- پوشه ای به نام streamlit با پیکربندی زیر ایجاد کنید. ماوس کلیک راست کنید، روی New Folder کلیک کنید و نام پوشه
.streamlit
را تایپ کنید - در پوشه
.streamlit
راست کلیک کنید سپس روی New File کلیک کنید و مقدار زیر را پر کنید. سپس آن را به عنوانsecrets.toml
ذخیره کنید
# secrets.toml (for Streamlit sharing)
# Store in .streamlit/secrets.toml
[gcp]
project_id = "your_gcp_project"
location = "us-central1"
[gcp_service_account]
type = "service_account"
project_id = "your-project-id"
private_key_id = "your-private-key-id"
private_key = '''-----BEGIN PRIVATE KEY-----
YOUR_PRIVATE_KEY_HERE
-----END PRIVATE KEY-----'''
client_email = "your-sa@project-id.iam.gserviceaccount.com"
client_id = "your-client-id"
auth_uri = "https://accounts.google.com/o/oauth2/auth"
token_uri = "https://oauth2.googleapis.com/token"
auth_provider_x509_cert_url = "https://www.googleapis.com/oauth2/v1/certs"
client_x509_cert_url = "https://www.googleapis.com/robot/v1/metadata/x509/your-sa%40project-id.iam.gserviceaccount.com"
- مقدار بهروزرسانی
project_id
،private_key_id
،private_key
،client_email
،client_id , and auth_provider_x509_cert_url
بر اساس حساب سرویس شما که در مرحله قبل ایجاد شده است
مجموعه داده BigQuery را آماده کنید
مرحله بعدی ایجاد یک مجموعه داده BigQuery برای ذخیره نتایج تولید در BigQuery است.
- BigQuery را در جستجو تایپ کنید سپس روی BigQuery کلیک کنید.
- کلیک کنید
سپس روی Create Dataset کلیک کنید
- شناسه مجموعه داده
diet_planner_data
را وارد کنید سپس روی ایجاد مجموعه داده کلیک کنید
4. برنامه Agent Diet Planner بسازید
ما یک رابط وب ساده با 4 ورودی خواهیم ساخت که شبیه به این است
وزن، قد، سن و جنسیت را بر اساس نمایه خود تغییر دهید و سپس روی ایجاد کلیک کنید. مدل LLM Gemini Pro 2.5 را در کتابخانه Vertex AI فراخوانی می کند و نتایج تولید شده را در BigQuery ذخیره می کند.
کد به منظور طولانی نشدن 6 قسمت از هم جدا می شود.
ایجاد تابع محاسبه وضعیت bmi
- روی پوشه
agent_diet_planner
→ New File .. → وارد کردن نام فایلbmi_calc.py
کلیک راست کرده و enter را فشار دهید - کد را با زیر پر کنید
# Add this function to calculate BMI and health status
def calculate_bmi_status(weight, height):
"""
Calculate BMI and return status message
"""
height_m = height / 100 # Convert cm to meters
bmi = weight / (height_m ** 2)
if bmi < 18.5:
status = "underweight"
message = "⚠️ Your BMI suggests you're underweight. Consider increasing calorie intake with nutrient-dense foods."
elif 18.5 <= bmi < 25:
status = "normal"
message = "✅ Your BMI is in the healthy range. Let's maintain this balance!"
elif 25 <= bmi < 30:
status = "overweight"
message = "⚠️ Your BMI suggests you're overweight. Focus on gradual weight loss through balanced nutrition."
else:
status = "obese"
message = "❗ Your BMI indicates obesity. Please consult a healthcare provider for personalized guidance."
return {
"value": round(bmi, 1),
"status": status,
"message": message
}
برنامه های اصلی برنامه ریز رژیم غذایی عامل ایجاد کنید
- روی پوشه
agent_diet_planner
→ New File .. → input name fileapp.py
کلیک راست کنید سپس enter را فشار دهید. - کد را با زیر پر کنید
import os
from google.oauth2 import service_account
import streamlit as st
from google.cloud import bigquery
from vertexai.preview.generative_models import GenerativeModel
import vertexai
import datetime
import time
import pandas as pd
from bmi_calc import calculate_bmi_status
# Get configuration from environment
PROJECT_ID = os.environ.get("GCP_PROJECT_ID", "your_gcp_project_id")
LOCATION = os.environ.get("GCP_LOCATION", "us-central1")
#CONSTANTS Dataset and table in BigQuery
DATASET = "diet_planner_data"
TABLE = "user_plans"
# Initialize Vertex AI
vertexai.init(project=PROJECT_ID, location=LOCATION)
# Initialize BigQuery client
try:
# For Cloud Run, use default credentials
bq_client = bigquery.Client()
except:
# For local development, use service account from secrets
if "gcp_service_account" in st.secrets:
service_account_info = dict(st.secrets["gcp_service_account"])
credentials = service_account.Credentials.from_service_account_info(service_account_info)
bq_client = bigquery.Client(credentials=credentials, project=PROJECT_ID)
else:
st.error("BigQuery client initialization failed")
st.stop()
مقدار your_gcp_project_id
را با شناسه پروژه خود تغییر دهید.
ایجاد برنامه های اصلی برنامه ریز رژیم غذایی - setup_bq_tables
در این بخش تابعی به نام setup_bq_table
با 1 پارامتر ورودی bq_client
ایجاد می کنیم. این تابع طرحواره را در جدول bigquery تعریف می کند و در صورت عدم وجود جدولی ایجاد می کند.
کد را با کد زیر زیر در app.py
پر کنید
# Create BigQuery table if not exists
def setup_bq_table(bq_client):
dataset_id = f"{st.secrets['gcp']['project_id']}.{DATASET}"
table_id = f"{dataset_id}.{TABLE}"
schema = [
bigquery.SchemaField("user_id", "STRING", mode="REQUIRED"),
bigquery.SchemaField("timestamp", "TIMESTAMP", mode="REQUIRED"),
bigquery.SchemaField("weight", "FLOAT", mode="REQUIRED"),
bigquery.SchemaField("height", "INTEGER", mode="REQUIRED"),
bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"),
bigquery.SchemaField("gender", "STRING", mode="REQUIRED"),
bigquery.SchemaField("diet_plan", "STRING", mode="REQUIRED")
]
try:
bq_client.get_table(table_id)
except:
table = bigquery.Table(table_id, schema=schema)
bq_client.create_table(table)
st.toast("BigQuery table created successfully")
برنامه های اصلی برنامه ریز رژیم غذایی عامل را ایجاد کنید - generate_diet_plan
در این قسمت تابعی با نام generate_diet_plan
با 1 پارامتر ورودی ایجاد می کنیم. این تابع مدل LLM Gemini Pro 2.5 را با اعلان تعریف و ایجاد نتایج فراخوانی می کند.
کد را با کد زیر زیر در app.py
پر کنید
# Generate diet plan using Gemini Pro
def generate_diet_plan(params):
try:
model = GenerativeModel("gemini-2.5-pro")
prompt = f"""
Create a personalized 7-day diet plan for:
- {params['gender']}, {params['age']} years old
- Weight: {params['weight']} kg
- Height: {params['height']} cm
Include:
1. Daily calorie target
2. Macronutrient breakdown (carbs, protein, fat)
3. Meal timing and frequency
4. Food recommendations
5. Hydration guidance
Make the plan:
- Nutritionally balanced
- Practical for daily use
- Culturally adaptable
- With portion size guidance
"""
response = model.generate_content(prompt)
return response.text
except Exception as e:
st.error(f"AI generation error: {str(e)}")
return None
ایجاد برنامه های اصلی برنامه ریز رژیم غذایی - save_to_bq
در این بخش تابعی به نام save_to_bq
با 3 پارامتر ورودی bq_client
، user_id
و plan
ایجاد می کنیم. این تابع نتیجه تولید را در جدول bigquery ذخیره می کند
کد را با کد زیر زیر در app.py
پر کنید
# Save user data to BigQuery
def save_to_bq(bq_client, user_id, plan):
try:
dataset_id = f"{st.secrets['gcp']['project_id']}.{DATASET}"
table_id = f"{dataset_id}.{TABLE}"
row = {
"user_id": user_id,
"timestamp": datetime.datetime.utcnow().isoformat(),
"weight": st.session_state.user_data["weight"],
"height": st.session_state.user_data["height"],
"age": st.session_state.user_data["age"],
"gender": st.session_state.user_data["gender"],
"diet_plan": plan
}
errors = bq_client.insert_rows_json(table_id, [row])
if errors:
st.error(f"BigQuery error: {errors}")
else:
return True
except Exception as e:
st.error(f"Data saving error: {str(e)}")
return False
برنامه های اصلی برنامه ریز رژیم غذایی عامل را ایجاد کنید - اصلی
در این قسمت تابعی به نام main
بدون پارامتر ورودی ایجاد می کنیم. این تابع بیشتر اسکریپت رابط کاربری ساده، نمایش نتیجه تولید شده، نمایش نتایج تولید شده تاریخی از جدول bigquery و برای دانلود داده ها در فایل علامت گذاری را کنترل می کند.
کد را با کد زیر زیر در app.py
پر کنید
# Streamlit UI
def main():
st.set_page_config(page_title="AI Diet Planner", page_icon="🍏", layout="wide")
# Initialize session state
if "user_data" not in st.session_state:
st.session_state.user_data = None
if "diet_plan" not in st.session_state:
st.session_state.diet_plan = None
# Initialize clients
#bq_client = init_clients()
setup_bq_table(bq_client)
st.title("🍏 AI-Powered Diet Planner")
st.markdown("""
<style>
.stProgress > div > div > div > div {
background-color: #4CAF50;
}
[data-testid="stForm"] {
background: #f0f5ff;
padding: 20px;
border-radius: 10px;
border: 1px solid #e6e9ef;
}
</style>
""", unsafe_allow_html=True)
# User input form
with st.form("user_profile", clear_on_submit=False):
st.subheader("Your Profile")
col1, col2 = st.columns(2)
with col1:
weight = st.number_input("Weight (kg)", min_value=30.0, max_value=200.0, value=70.0)
height = st.number_input("Height (cm)", min_value=100, max_value=250, value=170)
with col2:
age = st.number_input("Age", min_value=18, max_value=100, value=30)
gender = st.selectbox("Gender", ["Man", "Woman"])
submitted = st.form_submit_button("Generate Diet Plan")
if submitted:
user_data = {
"weight": weight,
"height": height,
"age": age,
"gender": gender
}
st.session_state.user_data = user_data
# Calculate BMI
bmi_result = calculate_bmi_status(weight, height)
# Display BMI results in a visually distinct box
with st.container():
st.subheader("📊 Your Health Assessment")
col1, col2 = st.columns([1, 3])
with col1:
st.metric("BMI", bmi_result["value"])
with col2:
if bmi_result["status"] != "normal":
st.warning(bmi_result["message"])
else:
st.success(bmi_result["message"])
# Add BMI scale visualization
st.markdown(f"""
<div style="background:#f0f2f6;padding:10px;border-radius:10px;margin-top:10px">
<small>BMI Scale:</small><br>
<div style="display:flex;height:20px;background:linear-gradient(90deg,
#4e79a7 0%,
#4e79a7 18.5%,
#60bd68 18.5%,
#60bd68 25%,
#f28e2b 25%,
#f28e2b 30%,
#e15759 30%,
#e15759 100%);position:relative">
<div style="position:absolute;left:{min(100, max(0, (bmi_result["value"]/40)*100))}%;top:-5px">
▼
</div>
</div>
<div style="display:flex;justify-content:space-between">
<span>Underweight (<18.5)</span>
<span>Healthy (18.5-25)</span>
<span>Overweight (25-30)</span>
<span>Obese (30+)</span>
</div>
</div>
""", unsafe_allow_html=True)
# Store BMI in session state
st.session_state.bmi = bmi_result
# Plan generation and display
if submitted and st.session_state.user_data:
with st.spinner("🧠 Generating your personalized diet plan using Gemini AI..."):
#diet_plan = generate_diet_plan(st.session_state.user_data)
diet_plan = generate_diet_plan({**st.session_state.user_data,"bmi": bmi_result["value"],
"bmi_status": bmi_result["status"]
})
if diet_plan:
st.session_state.diet_plan = diet_plan
# Generate unique user ID
user_id = f"user_{int(time.time())}"
# Save to BigQuery
if save_to_bq(bq_client, user_id, diet_plan):
st.toast("✅ Plan saved to database!")
# Display generated plan
if st.session_state.diet_plan:
st.subheader("Your Personalized Diet Plan")
st.markdown("---")
st.markdown(st.session_state.diet_plan)
# Download button
st.download_button(
label="Download Plan",
data=st.session_state.diet_plan,
file_name="my_diet_plan.md",
mime="text/markdown"
)
# Show history
st.subheader("Your Plan History")
try:
query = f"""
SELECT timestamp, weight, height, age, gender
FROM `{st.secrets['gcp']['project_id']}.{DATASET}.{TABLE}`
WHERE user_id LIKE 'user_%'
ORDER BY timestamp DESC
LIMIT 5
"""
history = bq_client.query(query).to_dataframe()
if not history.empty:
history["timestamp"] = pd.to_datetime(history["timestamp"])
st.dataframe(history.style.format({
"weight": "{:.1f} kg",
"height": "{:.0f} cm"
}))
else:
st.info("No previous plans found")
except Exception as e:
st.error(f"History load error: {str(e)}")
if __name__ == "__main__":
main()
کد را با نام app.py ذخیره کنید.
5. استقرار برنامهها از ساخت ابری برای اجرای Cloud استفاده میکنند
اکنون، البته ما می خواهیم این برنامه شگفت انگیز را به دیگران نشان دهیم. برای انجام این کار، می توانیم این برنامه را بسته بندی کنیم و آن را به عنوان یک سرویس عمومی که برای دیگران قابل دسترسی است، در Cloud Run مستقر کنیم. برای انجام این کار، بیایید معماری را دوباره مرور کنیم
ابتدا به Dockerfile نیاز داریم، روی File->New Text File کلیک کنید و کد زیر را کپی کنید و سپس آن را به عنوان Dockerfile ذخیره کنید.
# Use official Python image
FROM python:3.12-slim
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PORT 8080
# Install system dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Copy requirements
COPY requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Copy application files
COPY . .
# Expose port
EXPOSE $PORT
# Run the application
CMD ["streamlit", "run", "app.py", "--server.port", "8080", "--server.address", "0.0.0.0"]
در مرحله بعد، ما cloudbuid.yaml را برای ساخت برنامهها ایجاد میکنیم تا به تصاویر داکر تبدیل شوند، به رجیستری مصنوع فشار وارد کنند و در اجرای ابری مستقر شوند.
روی File->New Text File کلیک کنید و کد زیر را کپی کنید و سپس آن را به عنوان cloudbuild.yaml ذخیره کنید.
steps:
# Build Docker image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID', '--no-cache',
'--progress=plain',
'.']
id: 'Build'
timeout: 1200s
waitFor: ['-']
dir: '.'
# Push to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID']
id: 'Push'
waitFor: ['Build']
# Deploy to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'run'
- 'deploy'
- 'diet-planner-service'
- '--image=gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID'
- '--port=8080'
- '--region=us-central1'
- '--platform=managed'
- '--allow-unauthenticated'
- '--set-env-vars=GCP_PROJECT_ID=$PROJECT_ID,GCP_LOCATION=us-central1'
- '--cpu=1'
- '--memory=1Gi'
- '--timeout=300'
waitFor: ['Push']
options:
logging: CLOUD_LOGGING_ONLY
machineType: 'E2_HIGHCPU_8'
diskSizeGb: 100
images:
- 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID'
در این مرحله، ما در حال حاضر همه فایلهای مورد نیاز برای ساخت برنامهها را داریم تا به تصاویر docker تبدیل شوند، به رجیستری مصنوع فشار داده و آن را در Cloud Run مستقر کنیم، بیایید آن را مستقر کنیم. به ترمینال Cloud Shell بروید و مطمئن شوید که پروژه فعلی برای پروژه فعال شما پیکربندی شده است، در غیر این صورت از دستور gcloud configure برای تنظیم شناسه پروژه استفاده کرده اید:
gcloud config set project [PROJECT_ID]
سپس، دستور زیر را اجرا کنید تا برنامه هایی را بسازید تا به تصاویر داکر تبدیل شوند، به رجیستری مصنوع فشار دهید و آن را در Cloud Run اجرا کنید.
gcloud builds submit --config cloudbuild.yaml
کانتینر Docker را بر اساس Dockerfile که قبلاً ارائه کرده بودیم میسازد و آن را به رجیستری Artifact فشار میدهد. پس از آن تصویر ساخته شده را در Cloud Run مستقر خواهیم کرد. تمام این فرآیند در مراحل cloudbuild.yaml
تعریف شده است.
توجه داشته باشید که ما در اینجا اجازه دسترسی بدون احراز هویت را می دهیم زیرا این یک برنامه آزمایشی است. توصیه این است که از احراز هویت مناسب برای برنامه های تجاری و تولیدی خود استفاده کنید.
پس از تکمیل استقرار، میتوانیم آن را در صفحه Cloud Run بررسی کنیم، Cloud Run را در نوار جستجوی کنسول ابری بالای صفحه جستجو کنیم و روی محصول Cloud Run کلیک کنیم.
پس از آن می توانید سرویس مستقر شده فهرست شده در صفحه سرویس Cloud Run را بررسی کنید، روی سرویس کلیک کنید تا بتوانیم URL سرویس را دریافت کنیم.
نشانی وب سرویس در نوار بالا قرار خواهد گرفت
ادامه دهید و از برنامه خود از پنجره ناشناس یا دستگاه تلفن همراه خود استفاده کنید. از قبل باید زنده باشد.
6. پاکسازی کنید
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع مورد استفاده در این Codelab، این مراحل را دنبال کنید:
- در کنسول Google Cloud، به صفحه مدیریت منابع بروید.
- در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید.
- در محاوره، شناسه پروژه را تایپ کنید و سپس روی Shut down کلیک کنید تا پروژه حذف شود.
- یا میتوانید به Cloud Run در کنسول بروید، سرویسی را که به تازگی مستقر کردهاید انتخاب کرده و حذف کنید.