개요

이 가이드는 사전 구축된 Docker 이미지를 사용하여 Google Cloud Run에 CaseBender를 배포하는 과정을 안내합니다.

사전 요구 사항

  1. Google Cloud 계정
  2. Google Cloud CLI 설치
  3. Docker 설치

1단계: 초기 설정

Google Cloud CLI 설치

# Homebrew 사용
brew install google-cloud-sdk

# Google Cloud 로그인

gcloud auth login

# Docker가 Google Cloud를 사용하도록 구성

gcloud auth configure-docker

프로젝트 초기화

# 프로젝트 ID 설정
gcloud config set project YOUR_PROJECT_ID

# 필요한 API 활성화
gcloud services enable \
  cloudbuild.googleapis.com \
  run.googleapis.com \
  secretmanager.googleapis.com \
  cloudresourcemanager.googleapis.com \
  artifactregistry.googleapis.com

2단계: 클라우드 인프라 설정

Cloud Storage 버킷 생성

# 스토리지 버킷 생성
gsutil mb -l us-central1 gs://casebender-storage

# 스토리지용 서비스 계정 생성
gcloud iam service-accounts create casebender-storage \
  --display-name "CaseBender Storage Service Account"

# 서비스 계정 이메일 가져오기
STORAGE_SA_EMAIL=$(gcloud iam service-accounts list \
  --filter="displayName:CaseBender Storage Service Account" \
  --format="value(email)")

# 권한 부여
gsutil iam ch \
  serviceAccount:$STORAGE_SA_EMAIL:objectViewer,objectCreator \
  gs://casebender-storage

# 서비스 계정 키 생성 및 다운로드
gcloud iam service-accounts keys create storage-key.json \
  --iam-account=$STORAGE_SA_EMAIL

# 스토리지 자격 증명용 시크릿 생성
gcloud secrets create casebender-storage-key \
  --replication-policy="automatic"

# 서비스 계정 키를 시크릿으로 가져오기
gcloud secrets versions add casebender-storage-key \
  --data-file=storage-key.json

Cloud SQL(PostgreSQL) 설정

# PostgreSQL 인스턴스 생성
gcloud sql instances create casebender-db \
  --database-version=POSTGRES_14 \
  --cpu=2 \
  --memory=4GB \
  --region=us-central1 \
  --root-password="YOUR_SECURE_PASSWORD"

# 데이터베이스 생성
gcloud sql databases create casebender \
  --instance=casebender-db

# 사용자 생성
gcloud sql users create casebender \
  --instance=casebender-db \
  --password="YOUR_SECURE_PASSWORD"

Memorystore(Redis) 설정

# Redis 인스턴스 생성
gcloud redis instances create casebender-redis \
  --size=2 \
  --region=us-central1 \
  --redis-version=redis_6_x

Secret Manager 구성

# 환경 변수 생성 및 저장
cat << EOF | gcloud secrets create casebender-env --data-file=-
AUTH_SECRET=your-auth-secret
AUTH_SALT=your-auth-salt
POSTGRES_PRISMA_URL="postgresql://casebender:YOUR_SECURE_PASSWORD@/casebender?host=/cloudsql/YOUR_PROJECT_ID:us-central1:casebender-db"
REDIS_URL="redis://REDIS_IP_ADDRESS:6379"
GOOGLE_STORAGE_BUCKET=casebender-storage
EOF

3단계: Docker 이미지 가져오기 및 푸시

# Artifact Registry 리포지토리 생성
gcloud artifacts repositories create casebender \
  --repository-format=docker \
  --location=us-central1

# Artifact Registry용 Docker 구성
gcloud auth configure-docker us-central1-docker.pkg.dev

# CaseBender 이미지 가져오기
docker pull casebender/casebender:latest
docker pull casebender/workflow-processor:latest
docker pull casebender/misp-processor:latest

# Google Artifact Registry용 이미지 태그 지정
docker tag casebender/casebender:latest us-central1-docker.pkg.dev/$PROJECT_ID/casebender/app:latest
docker tag casebender/workflow-processor:latest us-central1-docker.pkg.dev/$PROJECT_ID/casebender/workflow-processor:latest
docker tag casebender/misp-processor:latest us-central1-docker.pkg.dev/$PROJECT_ID/casebender/misp-processor:latest

# 이미지 푸시
docker push us-central1-docker.pkg.dev/$PROJECT_ID/casebender/app:latest
docker push us-central1-docker.pkg.dev/$PROJECT_ID/casebender/workflow-processor:latest
docker push us-central1-docker.pkg.dev/$PROJECT_ID/casebender/misp-processor:latest

4단계: 서비스 배포

메인 애플리케이션 배포

# Cloud Run에 배포
gcloud run deploy casebender \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/casebender/app:latest \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated \
  --set-env-vars GOOGLE_STORAGE_BUCKET=casebender-storage \
  --set-secrets "/secrets/storage-key=casebender-storage-key:latest" \
  --service-account=$STORAGE_SA_EMAIL \
  --add-cloudsql-instances $PROJECT_ID:us-central1:casebender-db \
  --set-secrets "/app/.env=casebender-env:latest"

워크플로우 프로세서 배포

# 워크플로우 프로세서 배포
gcloud run deploy workflow-processor \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/casebender/workflow-processor:latest \
  --platform managed \
  --region us-central1 \
  --no-allow-unauthenticated \
  --service-account=$STORAGE_SA_EMAIL \
  --add-cloudsql-instances $PROJECT_ID:us-central1:casebender-db \
  --set-secrets "/app/.env=casebender-env:latest"

MISP 프로세서 배포

# MISP 프로세서 배포
gcloud run deploy misp-processor \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/casebender/misp-processor:latest \
  --platform managed \
  --region us-central1 \
  --no-allow-unauthenticated \
  --service-account=$STORAGE_SA_EMAIL \
  --add-cloudsql-instances $PROJECT_ID:us-central1:casebender-db \
  --set-secrets "/app/.env=casebender-env:latest"

5단계: 도메인 및 SSL 구성

사용자 정의 도메인 매핑

# 도메인 매핑 추가
gcloud run domain-mappings create \
  --service casebender \
  --domain your-domain.com \
  --region us-central1

도메인 매핑을 완료하려면 Google Cloud Console에서 DNS 확인 단계를 따르세요.

모니터링 및 유지 관리

모니터링 설정

  1. Google Cloud Console에서 Cloud Monitoring으로 이동
  2. 서비스에 대한 가동 시간 확인 생성
  3. 다음에 대한 경고 설정:
    • 오류율
    • 지연 시간
    • 인스턴스 수
    • 메모리 사용량

로그 보기

# 서비스 로그 보기
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=casebender" --limit 50

# 로그 스트리밍
gcloud logging tail "resource.type=cloud_run_revision AND resource.labels.service_name=casebender"

애플리케이션 업데이트

업데이트 배포 방법:

# 새 버전 빌드 및 배포
gcloud builds submit --config cloudbuild.yaml

# 필요한 경우 롤백
gcloud run services rollback casebender \
  --to-revision=REVISION_ID \
  --region=us-central1

비용 최적화

  1. 자동 확장 구성

    gcloud run services update casebender \
      --min-instances=1 \
      --max-instances=10 \
      --region=us-central1
  2. 리소스 할당

    gcloud run services update casebender \
      --memory=1Gi \
      --cpu=1 \
      --region=us-central1

문제 해결

일반적인 문제

  1. 연결 문제

    • Cloud SQL 연결 확인
    • Redis 연결성 확인
    • 환경 변수 검증
  2. 성능 문제

    • 인스턴스 메트릭 검토
    • 리소스 할당 확인
    • 요청 패턴 분석
  3. 배포 실패

    • 빌드 로그 확인
    • 서비스 계정 권한 확인
    • 배포 구성 검토

다음 단계

  • CI/CD 파이프라인 설정
  • 백업 전략 구성
  • 모니터링 및 경고 구현
  • 보안 모범 사례 검토