데이터베이스 마이그레이션은 몇 가지 핵심 단계로 이루어집니다.
1. Kamal 기반 앱 배포 및 초기 설정
-
새 VPS에 애플리케이션 배포: 먼저 Kamal을 사용하여 새로운 VPS에 애플리케이션을 배포합니다. 이 단계에서 애플리케이션은 임시 도메인으로 완전히 작동해야 하지만, 데이터베이스는 비어있는 상태로 유지됩니다.
-
백업 저장소 준비: 데이터베이스 덤프를 저장할 S3 호환 객체 스토리지(예: Scaleway Object Storage)를 준비합니다. 이는 데이터베이스 서버와 다른 머신이어야 합니다.
2. PaaS 환경 준비 및 데이터 덤프
-
웹 컨테이너 스케일 다운: 마이그레이션 중 새로운 쓰기 작업이 발생하지 않도록 PaaS의 웹 컨테이너를 0으로 스케일 다운합니다. 이는 PaaS에서 데이터베이스를 백업하고 자체 서버에 복원하는 과정 사이에 데이터 일관성을 보장합니다.
-
데이터베이스 덤프 생성: 사용 중인 PaaS(예: Scalingo PostgreSQL)의 CLI 또는 UI를 통해 데이터베이스 덤프를 생성합니다. Scalingo의 경우 PostgreSQL 대시보드에서 수동 백업을 트리거하고 직접 다운로드할 수 있습니다.
3. 데이터 덤프 업로드 및 복원
-
S3 버킷에 덤프 업로드:
s3_backup액세서리 설정에 정의된S3_PREFIX값과 일치하는 이름으로 S3 버킷에 폴더를 생성하고, 생성된 덤프 파일을 해당 폴더에 업로드합니다.yaml accessories: s3_backup: image: eeshugerman/postgres-backup-s3:16 host: 192.168.0.1 env: clear: SCHEDULE: '@daily' BACKUP_KEEP_DAYS: 30 S3_REGION: your-s3-region S3_BUCKET: your-s3-bucket S3_PREFIX: backups S3_ENDPOINT: https://your-s3-endpoint POSTGRES_HOST: my_awesome_app-db POSTGRES_DATABASE: my_awesome_app_production POSTGRES_USER: my_awesome_app secret: - POSTGRES_PASSWORD - S3_ACCESS_KEY_ID - S3_SECRET_ACCESS_KEY -
Kamal을 통한 데이터 복원: 다음 명령어를 사용하여 새 PostgreSQL 인스턴스에 백업을 복원합니다.
bash $ kamal accessory exec s3_backup "sh restore.sh"
4. 마이그레이션 완료 및 DNS 업데이트
-
애플리케이션 확인: 이 시점에서 애플리케이션은 최신 버전의 PostgreSQL과 모든 데이터가 성공적으로 복원된 상태로 실행됩니다.
-
DNS 설정 업데이트: 마지막으로 DNS 설정을 업데이트하여 새 서버를 가리키도록 변경합니다.