Kamal 환경에서 데이터베이스 백업 및 PostgreSQL 주요 버전 업그레이드 절차는 다음과 같습니다.
1. S3 백업 액세서리 설정
-
S3 호환 Object Storage에 버킷을 생성하고, 자격 증명을
.kamal/secrets에 추가합니다. config/deploy.yml파일에s3_backup액세서리를 추가하고 환경 변수를 구성합니다.image:eeshugerman/postgres-backup-s3:16SCHEDULE:@daily(매일 자정 자동 백업)BACKUP_KEEP_DAYS: 30 (백업 보관 일수)S3_REGION,S3_BUCKET,S3_PREFIX,S3_ENDPOINT: S3 연결 정보POSTGRES_HOST,POSTGRES_DATABASE,POSTGRES_USER: 대상 PostgreSQL 정보PGDUMP_EXTRA_OPTS: 덤프 시 추가 옵션 (예:--exclude-table-data=public.solid_cache_entries)secret:POSTGRES_PASSWORD,S3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEY
- 설정 후
kamal accessory boot s3_backup명령으로 액세서리를 시작합니다.
2. 수동 백업 및 복원
-
수동 백업 실행:
kamal accessory exec s3_backup "sh backup.sh" -
최신 백업 복원:
kamal accessory exec s3_backup "sh restore.sh"
3. PostgreSQL 주요 버전 업그레이드 (예: 16에서 17)
PostgreSQL 주요 버전 업그레이드는 데이터 디렉터리 비호환성으로 인해 특별한 절차가 필요합니다.
-
애플리케이션 중단:
kamal app stop명령으로 앱을 중단하여 마이그레이션 중 데이터 쓰기 작업을 방지합니다. -
최종 백업 생성:
kamal accessory exec s3_backup "sh backup.sh"명령으로 현재 데이터의 최종 백업을 수행합니다. -
DB 액세서리 설정 변경:
config/deploy.yml에서db액세서리의image를postgres:17로,directories를data_17:/var/lib/postgresql/data와 같이 새로운 데이터 볼륨 경로로 변경합니다. 이는 새 버전을 위한 깨끗한 데이터 볼륨을 확보합니다. -
DB 액세서리 재시작:
kamal accessories reboot db명령으로 업데이트된 이미지와 디렉터리를 사용하도록 데이터베이스를 재시작합니다. -
데이터 복원:
kamal accessory exec s3_backup "sh restore.sh"명령으로 새로운 Postgres 17 인스턴스에 백업 데이터를 복원합니다. -
애플리케이션 재시작:
kamal app boot명령으로 애플리케이션을 다시 온라인 상태로 전환합니다. -
이전 데이터 삭제:
/root/data에 저장된 이전 PostgreSQL 16 데이터를 삭제하여 디스크 공간을 확보할 수 있습니다.
이 과정을 통해 애플리케이션은 최신 PostgreSQL 버전에서 모든 데이터를 온전히 유지하며 실행됩니다.