برنامه نویسی

استقرار یک کانتینر بدون حالت در اجرای ابری

Summarize this content to 400 words in Persian Lang

من نحوه استقرار یک کانتینر ساده را در اجرای ابری نشان خواهم داد.

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

ایجاد یک برنامه ساده hello world با استفاده از کتابخانه fastapi (python)
برنامه را کانتینری کنید
گردش کار را با GCP پیکربندی کنید
از طریق گردش کار github، کانتینر را روی سرویس اجرای ابری مستقر کنید

من سند رسمی fastapi را دنبال کردم تا یک برنامه hello world را بچرخانمایجاد یک الزامات. txt فایل

fastapi[standard] pydantic>=2.7.0,<3.0.0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک فهرست برنامه ایجاد کنید و آن را وارد کنید
یک فایل خالی بسازید init.py
یک فایل main.py با:

from typing import Union

from fastapi import FastAPI

app = FastAPI()

@app.get(“https://dev.to/”)
def read_root():
return {“Hello”: “World”}

@app.get(“/items/{item_id}”)
def read_item(item_id: int, q: Union[str, None] = None):
return {“item_id”: item_id, “q”: q}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک Dockerfile ایجاد کنید

FROM python:3.9

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN pip install –no-cache-dir –upgrade -r /code/requirements.txt

COPY ./app /code/app

CMD [“fastapi”, “run”, “app/main.py”, “–port”, “80”]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکشن GitHubبرای اینکه فرآیند اقدامات GitHub بتواند فایل YAML را دریافت کند، مکان خاصی برای زندگی آن وجود دارد. هر مخزن با استفاده از اکشن ها به یک ساختار دایرکتوری به نام /.github/workflows نیاز دارد

*پیکربندی این گردش کار با GCP اطلاعات بیشتر *

# This workflow build and push a Docker container to Google Artifact Registry
# and deploy it on Cloud Run when a commit is pushed to the $default-branch
# branch.
#
# To configure this workflow:
#
# 1. Enable the following Google Cloud APIs:
#
# – Artifact Registry (artifactregistry.googleapis.com)
# – Cloud Run (run.googleapis.com)
# – IAM Credentials API (iamcredentials.googleapis.com)
#
# You can learn more about enabling APIs at
# https://support.google.com/googleapi/answer/6158841.
#
# 2. Create and configure a Workload Identity Provider for GitHub:
# https://github.com/google-github-actions/auth#preferred-direct-workload-identity-federation.
#
# Depending on how you authenticate, you will need to grant an IAM principal
# permissions on Google Cloud:
#
# – Artifact Registry Administrator (roles/artifactregistry.admin)
# – Cloud Run Developer (roles/run.developer)
#
# You can learn more about setting IAM permissions at
# https://cloud.google.com/iam/docs/manage-access-other-resources
#
# 3. Change the values in the “env” block to match your values.

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک فایل google-cloudrun-docker.yml ایجاد کنید

name: ‘Build and Deploy to Cloud Run’

on:
push:
branches:
– ‘$default-branch’

env:
PROJECT_ID: ‘my-project’ # TODO: update to your Google Cloud project ID
REGION: ‘us-central1’ # TODO: update to your region
SERVICE: ‘my-service’ # TODO: update to your service name
WORKLOAD_IDENTITY_PROVIDER: ‘projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider’ # TODO: update to your workload identity provider

jobs:
deploy:
runs-on: ‘ubuntu-latest’

permissions:
contents: ‘read’
id-token: ‘write’

steps:
– name: ‘Checkout’
uses: ‘actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332’ # actions/checkout@v4

# Configure Workload Identity Federation and generate an access token.
#
# See https://github.com/google-github-actions/auth for more options,
# including authenticating via a JSON credentials file.
– id: ‘auth’
name: ‘Authenticate to Google Cloud’
uses: ‘google-github-actions/auth@f112390a2df9932162083945e46d439060d66ec2’ # google-github-actions/auth@v2
with:
workload_identity_provider: ‘${{ env.WORKLOAD_IDENTITY_PROVIDER }}’

# BEGIN – Docker auth and build
#
# If you already have a container image, you can omit these steps.
– name: ‘Docker Auth’
uses: ‘docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567’ # docker/login-action@v3
with:
username: ‘oauth2accesstoken’
password: ‘${{ steps.auth.outputs.auth_token }}’
registry: ‘${{ env.REGION }}-docker.pkg.dev’

– name: ‘Build and Push Container’
run: |-
DOCKER_TAG=”$${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}:${{ github.sha }}”
docker build –tag “${DOCKER_TAG}” .
docker push “${DOCKER_TAG}”
– name: ‘Deploy to Cloud Run’

# END – Docker auth and build

uses: ‘google-github-actions/deploy-cloudrun@33553064113a37d688aa6937bacbdc481580be17’ # google-github-actions/deploy-cloudrun@v2
with:
service: ‘${{ env.SERVICE }}’
region: ‘${{ env.REGION }}’
# NOTE: If using a pre-built image, update the image name below:

image: ‘${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}:${{ github.sha }}’
# If required, use the Cloud Run URL output in later steps
– name: ‘Show output’
run: |2-

echo ${{ steps.deploy.outputs.url }}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ساختار دایرکتوری

اکنون باید یک ساختار دایرکتوری مانند:

├── app
│   ├── __init__.py
│ └── main.py
├── Dockerfile
└── requirements.txt
└── requirements.txt
├── .github
│   ├── workflows
├── google-cloudrun-docker.yml

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

> 1. Create a new repo in gitHUb
> 2. Push your exisisting code to new repository on default branch

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استقرار یک کانتینر بدون حالت در اجرای ابری

من نحوه استقرار یک کانتینر ساده را در اجرای ابری نشان خواهم داد.

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

  1. ایجاد یک برنامه ساده hello world با استفاده از کتابخانه fastapi (python)
  2. برنامه را کانتینری کنید
  3. گردش کار را با GCP پیکربندی کنید
  4. از طریق گردش کار github، کانتینر را روی سرویس اجرای ابری مستقر کنید

من سند رسمی fastapi را دنبال کردم تا یک برنامه hello world را بچرخانم
ایجاد یک الزامات. txt فایل

fastapi[standard]
pydantic>=2.7.0,<3.0.0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • یک فهرست برنامه ایجاد کنید و آن را وارد کنید
  • یک فایل خالی بسازید init.py
  • یک فایل main.py با:
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("https://dev.to/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک Dockerfile ایجاد کنید

FROM python:3.9

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

COPY ./app /code/app

CMD ["fastapi", "run", "app/main.py", "--port", "80"]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکشن GitHub
برای اینکه فرآیند اقدامات GitHub بتواند فایل YAML را دریافت کند، مکان خاصی برای زندگی آن وجود دارد. هر مخزن با استفاده از اکشن ها به یک ساختار دایرکتوری به نام /.github/workflows نیاز دارد

*پیکربندی این گردش کار با GCP اطلاعات بیشتر *

# This workflow build and push a Docker container to Google Artifact Registry
# and deploy it on Cloud Run when a commit is pushed to the $default-branch
# branch.
#
# To configure this workflow:
#
# 1. Enable the following Google Cloud APIs:
#
#    - Artifact Registry (artifactregistry.googleapis.com)
#    - Cloud Run (run.googleapis.com)
#    - IAM Credentials API (iamcredentials.googleapis.com)
#
#    You can learn more about enabling APIs at
#    https://support.google.com/googleapi/answer/6158841.
#
# 2. Create and configure a Workload Identity Provider for GitHub:
#    https://github.com/google-github-actions/auth#preferred-direct-workload-identity-federation.
#
#    Depending on how you authenticate, you will need to grant an IAM principal
#    permissions on Google Cloud:
#
#    - Artifact Registry Administrator (roles/artifactregistry.admin)
#    - Cloud Run Developer (roles/run.developer)
#
#    You can learn more about setting IAM permissions at
#    https://cloud.google.com/iam/docs/manage-access-other-resources
#
# 3. Change the values in the "env" block to match your values.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک فایل google-cloudrun-docker.yml ایجاد کنید

name: 'Build and Deploy to Cloud Run'

on:
  push:
    branches:
      - '$default-branch'

env:
  PROJECT_ID: 'my-project' # TODO: update to your Google Cloud project ID
  REGION: 'us-central1' # TODO: update to your region
  SERVICE: 'my-service' # TODO: update to your service name
  WORKLOAD_IDENTITY_PROVIDER: 'projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider' # TODO: update to your workload identity provider

jobs:
  deploy:
    runs-on: 'ubuntu-latest'

    permissions:
      contents: 'read'
      id-token: 'write'

    steps:
      - name: 'Checkout'
        uses: 'actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332' # actions/checkout@v4

      # Configure Workload Identity Federation and generate an access token.
      #
      # See https://github.com/google-github-actions/auth for more options,
      # including authenticating via a JSON credentials file.
      - id: 'auth'
        name: 'Authenticate to Google Cloud'
        uses: 'google-github-actions/auth@f112390a2df9932162083945e46d439060d66ec2' # google-github-actions/auth@v2
        with:
          workload_identity_provider: '${{ env.WORKLOAD_IDENTITY_PROVIDER }}'

      # BEGIN - Docker auth and build
      #
      # If you already have a container image, you can omit these steps.
      - name: 'Docker Auth'
        uses: 'docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567' # docker/login-action@v3
        with:
          username: 'oauth2accesstoken'
          password: '${{ steps.auth.outputs.auth_token }}'
          registry: '${{ env.REGION }}-docker.pkg.dev'

      - name: 'Build and Push Container'
        run: |-
          DOCKER_TAG="$${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}:${{ github.sha }}"
          docker build --tag "${DOCKER_TAG}" .
          docker push "${DOCKER_TAG}"
      - name: 'Deploy to Cloud Run'

        # END - Docker auth and build

        uses: 'google-github-actions/deploy-cloudrun@33553064113a37d688aa6937bacbdc481580be17' # google-github-actions/deploy-cloudrun@v2
        with:
          service: '${{ env.SERVICE }}'
          region: '${{ env.REGION }}'
          # NOTE: If using a pre-built image, update the image name below:

          image: '${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}:${{ github.sha }}'
      # If required, use the Cloud Run URL output in later steps
      - name: 'Show output'
        run: |2-

          echo ${{ steps.deploy.outputs.url }}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ساختار دایرکتوری

اکنون باید یک ساختار دایرکتوری مانند:

├── app
│   ├── __init__.py
│   └── main.py
├── Dockerfile
└── requirements.txt
└── requirements.txt
├── .github
│   ├── workflows
         ├── google-cloudrun-docker.yml


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


> 1. Create a new repo in gitHUb
> 2. Push your exisisting code to new repository on default branch
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا