Ana içeriğe geç

Google Cloud Run'a nasıl dağıtım yapılır

Google Cloud Run, Google'ın ölçeklenebilir altyapısında konteyner çalıştırmanıza olanak tanıyan yönetilen bir hesaplama platformudur.

Bu nasıl yapılır kılavuzu, Docker kullanarak Deno uygulamanızı Google Cloud Run'a nasıl dağıtacağınızı gösterecektir.

Önce manuel dağıtımı göstereceğiz, ardından bunu GitHub Actions ile otomatikleştireceğiz.

Ön koşullar

Manuel Dağıtım

Dockerfile ve docker-compose.yml oluşturun

Dağıtıma odaklanmak için, uygulamamız sadece bir string döndüren main.ts dosyası olacaktır:

main.ts
import { Application } from "https://deno.land/x/oak/mod.ts";

const app = new Application();

app.use((ctx) => {
ctx.response.body = "Deno'dan ve Google Cloud Run'dan merhaba!";
});

await app.listen({ port: 8000 });
not

Ardından, Docker imajını oluşturmak için iki dosya - Dockerfile ve docker-compose.yml - oluşturacağız.

Dockerfile dosyamıza şunları ekleyelim:

FROM denoland/deno

EXPOSE 8000

WORKDIR /app

ADD . /app

RUN deno install --entrypoint main.ts

CMD ["run", "--allow-net", "main.ts"]

Ardından, docker-compose.yml dosyamıza şunları ekleyelim:

version: "3"

services:
web:
build: .
container_name: deno-container
image: deno-image
ports:
- "8000:8000"

Bunu yerel olarak test edelim: docker compose -f docker-compose.yml build komutunu çalıştırın, ardından docker compose up komutunu çalıştırın ve localhost:8000 adresine gidin.

Hello from localhost

Çalışıyor!

Artifact Registry'yi ayarlayın

Artifact Registry, GCP'nin özel Docker görüntüleri deposudur.

Kullanabilmemiz için önce GCP'nin Artifact Registry sayfasına gidip "Repository oluştur" butonuna tıklayın. Sizden bir isim (deno-repository) ve bir bölge (us-central1) istenecek. Ardından "Oluştur" butonuna tıklayın.

New repository in Google Artifact Repository

Artifact Registry'ye imajı oluştur, etiketle ve gönder

Bir depo oluşturduktan sonra, imajları bu depoya göndermeye başlayabiliriz.

Öncelikle, depo adresini gcloud'a ekleyelim:

gcloud auth configure-docker us-central1-docker.pkg.dev

Sonra, Docker imajınızı oluşturun. (İmaj adı, docker-compose.yml dosyamızda tanımlıdır.)

docker compose -f docker-compose.yml build

Sonra, etiketleyin ve yeni Google Artifact Registry adresi, depo ve isimle etiketleyin. İmaj adı şu yapıyı izlemelidir: {{ location }}-docker.pkg.dev/{{ google_cloudrun_project_name }}/{{ repository }}/{{ image }}.

docker tag deno-image us-central1-docker.pkg.dev/deno-app-368305/deno-repository/deno-cloudrun-image

Bir etiket belirtmezseniz, varsayılan olarak :latest kullanılır.

Sonraki adımda, imajı gönderin:

docker push us-central1-docker.pkg.dev/deno-app-368305/deno-repository/deno-cloudrun-image

Google Artifact Registry'ye imaj göndermek ve almak hakkında daha fazla bilgi edinmek için buraya tıklayın..

İmajınız şimdi Google Artifact Registry'de görünmelidir!

Image in Google Artifact Registry

Google Cloud Run Servisi Oluşturun

Bu imajları oluşturabileceğimiz bir örneğe ihtiyacımız var, bu yüzden Google Cloud Run sayfasına gidin ve "Servis Oluştur" butonuna tıklayın.

Buna "hello-from-deno" adını verelim.

"Mevcut bir konteyner imajından bir revizyon dağıt" seçeneğini seçin. deno-repository Artifact Registry'den imajı seçmek için açılır menüyü kullanın.

"Kimlik doğrulama gerektirmeyen isteklere izin ver" seçeneğini seçin ve ardından "Servis Oluştur" butonuna tıklayın. Portun 8000 olduğundan emin olun.

Tamamlandığında, uygulamanız artık çevrimiçi olmalıdır:

Hello from Google Cloud Run

Harika!

gcloud ile Dağıtım Yapın

Artık oluşturulduğuna göre, bu servise gcloud CLI'den dağıtım yapabileceğiz. Komut şu yapıyı izler: gcloud run deploy {{ service_name }} --image={{ image }} --region={{ region }} --allow-unauthenticated. Not: image adı yukarıdaki yapıyı izler.

Bu örnek için komut:

gcloud run deploy hello-from-deno --image=us-central1-docker.pkg.dev/deno-app-368305/deno-repository/deno-cloudrun-image --region=us-central1 --allow-unauthenticated

Hello from Google Cloud Run

Başarı!

GitHub Actions ile Dağıtımı Otomatikleştir

Otomasyonun çalışabilmesi için, öncelikle bu ikisinin oluşturulduğundan emin olmamız gerekiyor:

  • Google Artifact Registry
  • Google Cloud Run servis örneği

(Eğer bunu yapmadıysanız, lütfen önceki bölüme bakın.)

Ahora que bunu yaptıysak, bir GitHub iş akışı ile otomatikleştirebiliriz. İşte yaml dosyası:

name: Build and Deploy to Cloud Run

on:
push:
branches:
- main

env:
PROJECT_ID: { { PROJECT_ID } }
GAR_LOCATION: { { GAR_LOCATION } }
REPOSITORY: { { GAR_REPOSITORY } }
SERVICE: { { SERVICE } }
REGION: { { REGION } }

jobs:
deploy:
name: Deploy
permissions:
contents: "read"
id-token: "write"

runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Google Auth
id: auth
uses: "google-github-actions/auth@v0"
with:
credentials_json: "${{ secrets.GCP_CREDENTIALS }}"

- name: Login to GAR
uses: docker/login-action@v2.1.0
with:
registry: ${{ env.GAR_LOCATION }}-docker.pkg.dev
username: _json_key
password: ${{ secrets.GCP_CREDENTIALS }}

- name: Build and Push Container
run: |-
docker build -t "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.SERVICE }}:${{ github.sha }}" ./
docker push "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.SERVICE }}:${{ github.sha }}"

- name: Deploy to Cloud Run
id: deploy
uses: google-github-actions/deploy-cloudrun@v0
with:
service: ${{ env.SERVICE }}
region: ${{ env.REGION }}
image: ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.SERVICE }}:${{ github.sha }}

- name: Show Output
run: echo ${{ steps.deploy.outputs.url }}

Ayarlamamız gereken ortam değişkenleri şunlardır (parantez içindeki örnekler bu depo için):

  • PROJECT_ID: proje kimliğiniz (deno-app-368305)
  • GAR_LOCATION: Google Artifact Registry'nizin ayarlandığı konum (us-central1)
  • GAR_REPOSITORY: Google Artifact Registry'ye verdiğiniz ad (deno-repository)
  • SERVICE: Google Cloud Run servisinin adı (hello-from-deno)
  • REGION: Google Cloud Run servisinizin bölgesi (us-central1)

Ayrıca ayarlamamız gereken gizli değişkenler şunlardır:

GitHub Actions'dan Cloud Run'a dağıtım hakkında daha fazla ayrıntı ve örnekler için buraya bakın.

Referans için: https://github.com/google-github-actions/example-workflows/blob/main/workflows/deploy-cloudrun/cloudrun-docker.yml