GCP Cloud Run에 Go 서비스를 배포하려면 Dockerfile 설정 및 환경 변수 구성을 포함한 여러 단계가 필요합니다.
이 가이드는 프로세스를 안내합니다.
아직 계정을 만들지 않았다면 GCP 계정 만들기로 이동하여 시작하세요.
GCP 콘솔로 이동하여 새 프로젝트를 생성하세요.
배포할 프로젝트 ID를 기록해 두세요.
Go 앱이 로컬에서 실행되고 Dockerfile을 설정할 수 있는지 확인하세요.
cmd/main.go
// cmd/main.go func main() { flag.Parse() a := app.Application{} if err := a.LoadConfigurations(); err != nil { log.Fatalf("Failed to load configurations: %v", err) } if err := runtime.Start(&a); err != nil { log.Fatalf("Failed to start the application: %v", err) } }
런타임/base.go
func Start(a *app.Application) error { router := gin.New() router.Use(cors.New(md.CORSMiddleware())) api.SetCache(router, a.RedisClient) api.SetRoutes(router, a.FireClient, a.FireAuth, a.RedisClient) err := router.Run(":" + a.ListenPort) log.Printf("Starting server on port: %s", a.ListenPort) if err != nil { return err } return nil }
도커파일 생성
# Use the official Go image as the base image FROM golang:1.18 WORKDIR /app # Copy the Go module files COPY go.mod go.sum ./ RUN go mod download # Copy the rest of the application code COPY . . RUN go build -o main ./cmd/main.go CMD ["./main"]
Env 변수 설정
셸 스크립트를 사용하여 GCP용 환경 변수 설정 자동화
env-variables.sh.
// env-variables.sh #!/bin/bash # Environment variables export PROJECT_ID=recepies-6e7c0 export REGION=europe-west1 export REDIS_URL="rediss://default:AVrvA....-lemur-23279.u....:6379" export FIREBASE_ACCOUNT_KEY="/app/config/account_key.json" export CLIENT_URL="https://.....vercel.app/"
deploy-with-yaml.sh 형식의 배포 스크립트.
#!/bin/bash source env-variables.sh #Comment if correctly deployed docker build -t gcr.io/$PROJECT_ID/recipe-server:latest . docker push gcr.io/$PROJECT_ID/recipe-server:latest #Uncomment if json needs to be added to GCP # gcloud secrets create firebase-account-key --data-file=/mnt/c/own_dev/RecipesApp/server/config/account_key.json --project=recepies-6e7c0 #Add permission IAM gcloud projects add-iam-policy-binding recepies-6e7c0 \ --member="serviceAccount:service-988443547488@serverless-robot-prod.iam.gserviceaccount.com" \ --role="roles/artifactregistry.reader" gcloud run deploy recipe-service \ --image gcr.io/$PROJECT_ID/recipe-server:latest \ --region $REGION \ --platform managed \ --set-env-vars REDIS_URL=$REDIS_URL,CLIENT_URL=$CLIENT_URL,FIREBASE_ACCOUNT_KEY=$FIREBASE_ACCOUNT_KEY
배포 스크립트 실행
env-variables.sh
필요에 따라 모두 설정되면 이미지가 빌드되어 GCP 프로젝트 Artifact Registry로 푸시되는 것을 볼 수 있습니다. 결국 이걸 얻었습니다.
a9099c3159f5: Layer already exists latest: digest: sha256:8c98063cd5b383df0b444c5747bb729ffd17014d42b049526b8760a4b09e5df1 size: 2846 Deploying container to Cloud Run service [recipe-service] in project [recepies-6e7c0] region [europe-west1] ✓ Deploying... Done. ✓ Creating Revision... ✓ Routing traffic... Done. Service [recipe-service] revision [recipe-service-00024-5mh] has been deployed and is serving 100 percent of traffic. Service URL: https://recipe-service-819621241045.europe-west1.run.app
여러 번 발생한 표준 오류가 있나요?
Deploying container to Cloud Run service [recipe-service] in project [recepies-6e7c0] region [europe-west1] X Deploying… - Creating Revision… . Routing traffic… Deployment failed ERROR: (gcloud.run.deploy) Revision 'recipe-service-00005-b6h' is not ready and cannot serve traffic. Google Cloud Run Service Agent service-819621241045@serverless-robot-prod.iam.gserviceaccount.com must have permission to read the image, gcr.io/loyal-venture-436807-p7/recipe-server:latest. Ensure that the provided container image URL is correct and that the above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that the image is from project [loyal-venture-436807-p7], which is not the same as this project [recepies-6e7c0]. Permission must be granted to the Google Cloud Run Service Agent service-819621241045@serverless-robot-prod.iam.gserviceaccount.com from this project. See https://cloud.google.com/run/docs/deploying#other-projects
종종 PORT=8080을 설정할 수 없다고 명시되어 있지만 주요 문제는 env 변수가 설정되지 않았거나 내 경우에는 firebase account_key.json이 배포용으로 잘못 설정된 것과 같은 것입니다.
모든 설정이 완료되면 연결을 테스트하고 요청을 수행할 수 있습니다.
Vercel에 프런트엔드를 배포했으며 아래에서 Cloud Run 로그를 볼 수 있습니다
몇 가지 주요 구성과 자동화 스크립트를 사용하면 Go 서비스를 GCP Cloud Run에 배포하는 작업을 간소화할 수 있습니다.
권한 문제나 잘못된 환경 변수 등 일반적인 오류가 있을 수 있지만 Cloud Run 로그를 통해 문제를 해결하는 방법을 이해하면 원활한 배포가 보장됩니다.
내 저장소는 여기에서 찾을 수 있습니다.
위 내용은 GCP Cloud Run에 Go 서비스를 배포하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!