Dify 스토리지·마이그레이션
Dify 스토리지·마이그레이션 (Storage & Migration)
벡터 DB 이전, 스토리지 이전, 데이터 정리, 백업·복구, 업그레이드까지 배포 운영에서 필요한 작업들을 정리했어요.
벡터 데이터베이스 마이그레이션
Weaviate에서 다른 데이터베이스로 이전
- 구성 업데이트 소스 코드 배포(
.env):
VECTOR_STORE=qdrant
Docker Compose(docker-compose.yaml):
VECTOR_STORE: qdrant
- 마이그레이션 실행
# 소스 코드
flask vdb-migrate
# Docker
docker exec -it docker-api-1 flask vdb-migrate
테스트된 데이터베이스: Qdrant, Milvus, AnalyticDB
스토리지 마이그레이션
로컬에서 클라우드 스토리지로 이동
파일을 로컬 스토리지에서 클라우드 제공자(예: Alibaba Cloud OSS)로 이전해요.
- 클라우드 스토리지 구성
.env또는docker-compose.yaml:
STORAGE_TYPE=aliyun-oss
# OSS 자격 증명 추가
- 데이터 이전 소스 코드:
flask upload-private-key-file-to-cloud-storage
flask upload-local-files-to-cloud-storage
Docker:
docker exec -it docker-api-1 flask upload-private-key-file-to-cloud-storage
docker exec -it docker-api-1 flask upload-local-files-to-cloud-storage
데이터 정리
오래된 로그 삭제
- 테넌트 ID 얻기
docker exec -it docker-api-1 bash -c "echo 'from models import Tenant; db.session.query(Tenant.id, Tenant.name).all(); quit()' | flask shell"
- X일보다 오래된 로그 삭제
docker exec -it docker-api-1 flask clear-free-plan-tenant-expired-logs \
--days 30 \
--batch 100 \
--tenant_ids 618b5d66-a1f5-4b6b-8d12-f171182a1cb2
- 내보낸 로그 제거(선택 사항)
docker exec -it docker-api-1 bash -c 'rm -rf ${OPENDAL_FS_ROOT}/free_plan_tenant_expired_logs'
고아 파일 제거
경고: 실행 전에 데이터베이스와 스토리지를 백업하세요. 유지보수 시간대에 실행하세요.
- 데이터베이스 레코드 정리
docker exec -it docker-api-1 flask clear-orphaned-file-records
# 확인을 건너뛰려면 -f 플래그 사용
- 스토리지에서 고아 파일 삭제
docker exec -it docker-api-1 flask remove-orphaned-files-on-storage
# 확인을 건너뛰려면 -f 플래그 사용
참고: OpenDAL 스토리지(STORAGE_TYPE=opendal)에서만 동작해요.
백업·복구 (Backup & Recovery)
업그레이드 전 백업 만들기
cp -r dify "dify.bak.$(date +%Y%m%d%H%M%S)"
무엇을 백업할까요
Docker Compose 배포:
dify/docker/volumes디렉터리 전체
소스 배포:
- 데이터베이스
- 스토리지 구성
- 벡터 데이터베이스 데이터
- 환경 파일
데이터베이스 유지보수
로그를 삭제한 뒤 저장 공간을 회수하려면: PostgreSQL:
VACUUM FULL;
업그레이드 프로세스 (Upgrade Process)
버전 업그레이드
이미지 배포:
docker compose pull
docker compose up -d
소스 코드:
git pull
cd api
flask db upgrade
데이터베이스 스키마 마이그레이션
소스 코드 업데이트에서는 항상 필요해요:
cd api
flask db upgrade