Dify 스토리지·마이그레이션

Dify 스토리지·마이그레이션 (Storage & Migration)

벡터 DB 이전, 스토리지 이전, 데이터 정리, 백업·복구, 업그레이드까지 배포 운영에서 필요한 작업들을 정리했어요.

벡터 데이터베이스 마이그레이션

Weaviate에서 다른 데이터베이스로 이전

  1. 구성 업데이트 소스 코드 배포(.env):
VECTOR_STORE=qdrant

Docker Compose(docker-compose.yaml):

VECTOR_STORE: qdrant
  1. 마이그레이션 실행
# 소스 코드
flask vdb-migrate
# Docker
docker exec -it docker-api-1 flask vdb-migrate

테스트된 데이터베이스: Qdrant, Milvus, AnalyticDB

스토리지 마이그레이션

로컬에서 클라우드 스토리지로 이동

파일을 로컬 스토리지에서 클라우드 제공자(예: Alibaba Cloud OSS)로 이전해요.

  1. 클라우드 스토리지 구성 .env 또는 docker-compose.yaml:
STORAGE_TYPE=aliyun-oss
# OSS 자격 증명 추가
  1. 데이터 이전 소스 코드:
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

데이터 정리

오래된 로그 삭제

  1. 테넌트 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"
  1. 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
  1. 내보낸 로그 제거(선택 사항)
docker exec -it docker-api-1 bash -c 'rm -rf ${OPENDAL_FS_ROOT}/free_plan_tenant_expired_logs'

고아 파일 제거

경고: 실행 전에 데이터베이스와 스토리지를 백업하세요. 유지보수 시간대에 실행하세요.

  1. 데이터베이스 레코드 정리
docker exec -it docker-api-1 flask clear-orphaned-file-records
# 확인을 건너뛰려면 -f 플래그 사용
  1. 스토리지에서 고아 파일 삭제
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