Skip to content

DorumDorum/INFRA

Repository files navigation

Dorumdorum Infrastructure (GCP)

이 디렉토리는 GCP(Google Cloud Platform)에 Dorumdorum 애플리케이션을 배포하기 위한 Terraform 설정을 포함합니다.

인프라 구성

  • Compute Engine: e2-micro (프리티어) - Spring Boot 애플리케이션 실행
  • Cloud SQL: db-f1-micro (프리티어), MySQL 8.0, 20GB, Single AZ
  • Cloud Storage: 10-20GB 스토리지
  • VPC: 커스텀 VPC 네트워크 및 서브넷
  • Static IP: 고정 공인 IP 주소

사전 요구사항

  1. GCP 계정 및 프로젝트

    • GCP 계정 생성: https://cloud.google.com/
    • 새 프로젝트 생성 또는 기존 프로젝트 사용
    • 프로젝트 ID 확인
  2. Terraform 설치

    brew install terraform
    # 또는
    # https://developer.hashicorp.com/terraform/downloads
  3. gcloud CLI 설치 (선택사항, 권장)

    brew install google-cloud-sdk
    gcloud init
    gcloud auth application-default login
  4. GCP 인증 설정

    방법 1: gcloud CLI 사용 (권장)

    gcloud auth application-default login

    방법 2: 서비스 계정 키 사용

    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"

설정

  1. terraform.tfvars.example을 terraform.tfvars로 복사

    cp terraform.tfvars.example terraform.tfvars
  2. terraform.tfvars 파일 수정

    gcp_project_id = "your-project-id"  # GCP 프로젝트 ID
    gcp_region      = "asia-northeast3"  # 서울 리전
    gcp_zone        = "asia-northeast3-a"
    
    db_password = "your-secure-password"  # 강력한 비밀번호로 변경
    smtp_password = "your-smtp-password"  # SMTP 앱 비밀번호
  3. 필수 API 활성화

    gcloud services enable compute.googleapis.com
    gcloud services enable sqladmin.googleapis.com
    gcloud services enable storage.googleapis.com

배포

  1. Terraform 초기화

    cd INFRA
    terraform init
  2. 배포 계획 확인

    terraform plan
  3. 인프라 배포

    terraform apply
  4. 배포 확인

    terraform output

애플리케이션 배포

인프라 배포가 완료된 후, Spring Boot 애플리케이션을 배포합니다.

  1. 애플리케이션 빌드

    cd BE
    ./gradlew bootJar
  2. 배포 스크립트 실행

    cd INFRA
    ./deploy.sh dorumdorum-app asia-northeast3-a

    또는 SSH 키를 사용하는 경우:

    ./deploy.sh dorumdorum-app asia-northeast3-a ~/.ssh/gcp_key

인프라 삭제

모든 리소스를 삭제하려면:

cd INFRA
terraform destroy

⚠️ 주의: 이 명령은 모든 리소스(데이터베이스 포함)를 영구적으로 삭제합니다.

또는 destroy.sh 스크립트 사용:

./destroy.sh

SSH 접속

gcloud CLI 사용 (권장):

gcloud compute ssh dorumdorum-app --zone=asia-northeast3-a

일반 SSH 사용:

# 인스턴스의 외부 IP 확인
terraform output compute_instance_public_ip

# SSH 접속
ssh ubuntu@<PUBLIC_IP>

로그 확인

# gcloud 사용
gcloud compute ssh dorumdorum-app --zone=asia-northeast3-a --command="sudo journalctl -u dorumdorum -f"

# 또는 SSH 접속 후
sudo journalctl -u dorumdorum -f

주요 출력값

Terraform 배포 후 다음 정보를 확인할 수 있습니다:

  • compute_instance_public_ip: Compute Engine 인스턴스의 공인 IP
  • cloud_sql_connection_name: Cloud SQL 연결 이름
  • cloud_storage_bucket_name: Cloud Storage 버킷 이름

Cloud SQL 연결

Cloud SQL은 Private IP를 사용하여 VPC 내부에서만 접근 가능합니다. 애플리케이션은 Cloud SQL Socket Factory를 사용하여 연결합니다.

Spring Boot 애플리케이션에 다음 의존성이 필요합니다:

implementation 'com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.13.1'

문제 해결

Terraform 인증 오류

gcloud auth application-default login

API 활성화 오류

gcloud services enable compute.googleapis.com sqladmin.googleapis.com storage.googleapis.com

SSH 접속 불가

  • 방화벽 규칙 확인: gcloud compute firewall-rules list
  • 인스턴스 상태 확인: gcloud compute instances list

애플리케이션 시작 실패

# 로그 확인
sudo journalctl -u dorumdorum -n 100

# 환경변수 확인
sudo systemctl show dorumdorum | grep Environment

비용 최적화

  • 프리티어 활용: e2-micro, db-f1-micro는 프리티어 범위 내
  • 리전 선택: asia-northeast3 (서울) 사용으로 지연 시간 최소화
  • 스토리지: 필요한 만큼만 할당 (20GB)

보안 권장사항

  1. SSH 접근 제한: ssh_cidr 변수를 특정 IP로 제한
  2. 데이터베이스 비밀번호: 강력한 비밀번호 사용
  3. terraform.tfvars: .gitignore에 포함되어 있어 Git에 커밋되지 않음
  4. 서비스 계정: 최소 권한 원칙 적용

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published