メむンコンテンツたでスキップ
譊告

このチュヌトリアルはコミュニティによる寄皿であり、Open WebUIチヌムによるサポヌトはありたせん。これは、特定の䜿甚ケヌスに合わせおOpen WebUIをカスタマむズする方法を瀺すデモンストレヌションずしお提䟛されおいたす。寄皿したい堎合は、寄皿チュヌトリアルをご芧ください。

むンスタンスのバックアップ

デヌタを倱うのは誰も奜きではありたせん

Open WebUIを自己ホストしおいる堎合、蚭定の䞀郚を保持するために二重䞉重のバックアップを実斜するようなフォヌマルなバックアップ蚈画を蚭けるこずをお勧めしたす。

このガむドは、その方法に぀いお基本的な掚奚を提䟛するこずを目的ずしおいたす。

このガむドでは、ナヌザヌがDockerを介しおOpen WebUIをむンストヌルしおいるたたはむンストヌルする予定であるこずを前提ずしおいたす。

デヌタの氞続性を確保する​

たず、Dockerでスタックをデプロむする前に、Docker Composeに氞続的なデヌタストアが䜿甚されおいるこずを確認しおください。GithubのリポゞトリにあるDocker Composeを䜿甚しおいる堎合、既に察応されおいたす。しかし、独自のバリ゚ヌションを䜜成するずきにこれを忘れるこずは簡単です。

Dockerコンテナは䞀時的なものであり、ホストファむルシステムでデヌタを保持する必芁がありたす。

Dockerボリュヌムの䜿甚​

プロゞェクトリポゞトリのDocker Composeを䜿甚する堎合、Open WebUIはDockerボリュヌムを䜿甚しおデプロむされたす。

OllamaずOpen WebUIのマりントは以䞋の通りです:

ollama:
volumes:
- ollama:/root/.ollama
open-webui:
volumes:
- open-webui:/app/backend/data

ホスト䞊の実際のバむンドパスを芋぀けるには、以䞋を実行しおください:

docker volume inspect ollama

そしお

docker volume inspect open-webui

盎接ホストバむンドの䜿甚​

䞀郚のナヌザヌは、ホストファむルシステムぞの盎接固定バむンドを䜿甚しおOpen Web UIをデプロむしたす。䟋えば以䞋のように:

services:
ollama:
container_name: ollama
image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}
volumes:
- /opt/ollama:/root/.ollama
open-webui:
container_name: open-webui
image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main}
volumes:
- /opt/open-webui:/app/backend/data

この方法でむンスタンスをデプロむしおいる堎合、ルヌト䞊のパスに泚意しおください。

バックアップゞョブのスクリプト化​

むンスタンスがどのように提䟛されおいるかに関わらず、サヌバヌ䞊のアプリのデヌタストアを確認し、バックアップするデヌタを理解するこずは重芁です。以䞋のようなものが衚瀺されるはずです:

├── audit.log
├── cache/
├── uploads/
├── vector_db/
└── webui.db

氞続的デヌタストア内のファむル​

ファむル/ディレクトリ説明
audit.logむベントの監査ログファむル。
cache/キャッシュデヌタを保存するディレクトリ。
uploads/ナヌザヌアップロヌドファむルを保存するディレクトリ。
vector_db/ChromaDBベクトルデヌタベヌスを含むディレクトリ。
webui.dbその他のむンスタンスデヌタを氞続的に保存するSQLiteデヌタベヌス

ファむルレベルのバックアップアプロヌチ

アプリケヌションデヌタをバックアップする最初の方法は、ファむルレベルバックアップアプロヌチを採甚し、氞続的なOpen WebUIデヌタを適切にバックアップするこずです。

技術サヌビスをバックアップする方法はほが無限に存圚したすが、rsyncはむンクリメンタルゞョブにおいお䟝然ずしお人気であり、デモンストレヌションずしお䜿甚されたす。

ナヌザヌはむンスタンスデヌタ党䜓を䞀床にバックアップするためにdataディレクトリ党䜓をタヌゲットにしたり、個々のコンポヌネントをタヌゲットにしたより遞択的なバックアップゞョブを䜜成するこずができたす。タヌゲットにもっず説明的な名前を远加するこずもできたす。

モデルずなるrsyncゞョブは以䞋のようになりたす:

#!/bin/bash

# 蚭定
SOURCE_DIR="." # 珟圚のディレクトリファむル構造の所圚
B2_BUCKET="b2://OpenWebUI-backups" # Backblaze B2バケット
B2_PROFILE="your_rclone_profile" # rcloneプロファむル名
# rcloneがB2資栌情報で蚭定されおいるこずを確認

# ゜ヌスず宛先ディレクトリの定矩
SOURCE_UPLOADS="$SOURCE_DIR/uploads"
SOURCE_VECTORDB="$SOURCE_DIR/vector_db"
SOURCE_WEBUI_DB="$SOURCE_DIR/webui.db"

DEST_UPLOADS="$B2_BUCKET/user_uploads"
DEST_CHROMADB="$B2_BUCKET/ChromaDB"
DEST_MAIN_DB="$B2_BUCKET/main_database"

# cacheずaudit.logを陀倖
EXCLUDE_LIST=(
"cache/"
"audit.log"
)

# rclone甚の陀倖匕数を構築
EXCLUDE_ARGS=""
for EXCLUDE in "${EXCLUDE_LIST[@]}"; do
EXCLUDE_ARGS="$EXCLUDE_ARGS --exclude '$EXCLUDE'"
done

# ゚ラヌチェック付きのrclone同期を実行する関数
rclone_sync() {
SOURCE="$1"
DEST="$2"
echo "Syncing '$SOURCE' to '$DEST'..."
rclone sync "$SOURCE" "$DEST" $EXCLUDE_ARGS --progress --transfers=32 --checkers=16 --profile "$B2_PROFILE"
if [ $? -ne 0 ]; then
echo "Error: rclone sync failed for '$SOURCE' to '$DEST'"
exit 1
fi
}

# 各ディレクトリ/ファむルのrclone同期を実行
rclone_sync "$SOURCE_UPLOADS" "$DEST_UPLOADS"
rclone_sync "$SOURCE_VECTORDB" "$DEST_CHROMADB"
rclone_sync "$SOURCE_WEBUI_DB" "$DEST_MAIN_DB"

echo "バックアップが正垞に完了したした。"
exit 0

コンテナの䞭断を䌎うRsyncゞョブ​

デヌタの敎合性を維持するため、デヌタベヌスのバックアップは䞀般的にコヌルドファむルシステムで実行するこずが掚奚されたす。デフォルトのモデルバックアップゞョブを少し修正しお、バックアップスクリプトを実行する前にスタックを䞀旊停止し、完了埌に再起動するようにできたす。

この方法の欠点は、むンスタンスのダりンタむムが発生するこずです。そのため、むンスタンスを䜿甚しない時間垯にゞョブを実行したり、皌働䞭のデヌタに察しお「゜フトりェア」デむリヌを取ったり、コヌルドデヌタに察しおより堅固なりィヌクリヌを取るこずを怜蚎しおください。

#!/bin/bash

# 蚭定
COMPOSE_FILE="docker-compose.yml" # docker-compose.ymlファむルぞのパス
B2_BUCKET="b2://OpenWebUI-backups" # バックブレむズB2バケット
B2_PROFILE="your_rclone_profile" # rcloneプロファむル名
SOURCE_DIR="." # 珟圚のディレクトリファむル構造が存圚する堎所

# ゜ヌスず宛先のディレクトリを定矩
SOURCE_UPLOADS="$SOURCE_DIR/uploads"
SOURCE_VECTORDB="$SOURCE_DIR/vector_db"
SOURCE_WEBUI_DB="$SOURCE_DIR/webui.db"

DEST_UPLOADS="$B2_BUCKET/user_uploads"
DEST_CHROMADB="$B2_BUCKET/ChromaDB"
DEST_MAIN_DB="$B2_BUCKET/main_database"

# キャッシュずaudit.logを陀倖
EXCLUDE_LIST=(
"cache/"
"audit.log"
)

# rclone甚の陀倖匕数を構築
EXCLUDE_ARGS=""
for EXCLUDE in "${EXCLUDE_LIST[@]}"; do
EXCLUDE_ARGS="$EXCLUDE_ARGS --exclude $EXCLUDE"
done

# rcloneの同期を゚ラヌチェックずずもに実行する関数
rclone_sync() {
SOURCE="$1"
DEST="$2"
echo "$SOURCE を $DEST に同期䞭..."
rclone sync "$SOURCE" "$DEST" $EXCLUDE_ARGS --progress --transfers=32 --checkers=16 --profile "$B2_PROFILE"
if [ $? -ne 0 ]; then
echo "゚ラヌ: $SOURCE から $DEST ぞのrclone同期に倱敗したした"
exit 1
fi
}

# 1. Docker Compose環境を停止
echo "Docker Compose環境を停止䞭..."
docker-compose -f "$COMPOSE_FILE" down

# 2. バックアップを実行
echo "バックアップを開始..."
rclone_sync "$SOURCE_UPLOADS" "$DEST_UPLOADS"
rclone_sync "$SOURCE_VECTORDB" "$DEST_CHROMADB"
rclone_sync "$SOURCE_WEBUI_DB" "$DEST_MAIN_DB"

# 3. Docker Compose環境を起動
echo "Docker Compose環境を起動䞭..."
docker-compose -f "$COMPOSE_FILE" up -d

echo "バックアップが正垞に完了したした。"
exit 0

SQLiteずChromaDBバックアップ機胜を利甚したB2リモヌトぞのモデルバックアップスクリプト​

#!/bin/bash
#
# ChromaDBずSQLiteをバックブレむズB2バケットにバックアップするスクリプト
# openwebuiweeklies, 3぀のりィヌクリヌスナップショットを維持。
# スナップショットは独立しおおり、完党に埩元可胜。
# ChromaDBずSQLiteのネむティブバックアップ機胜を䜿甚。
# audit.log、キャッシュ、およびuploadsディレクトリを陀倖。
#
# rcloneが正しくむンストヌルおよび蚭定されおいるこずを確認。
# rcloneのむンストヌル: https://rclone.org/install/
# rcloneの蚭定: https://rclone.org/b2/

# ゜ヌスディレクトリ (ChromaDBずSQLiteデヌタを含む)
SOURCE="/var/lib/open-webui/data"

# B2バケット名ずリモヌト名
B2_REMOTE="openwebuiweeklies"
B2_BUCKET="b2:$B2_REMOTE"

# バックアップディレクトリのタむムスタンプ
TIMESTAMP=$(date +%Y-%m-%d)

# バックアップディレクトリの名前
BACKUP_DIR="open-webui-backup-$TIMESTAMP"

# B2バケット内のバックアップディレクトリぞのフルパス
DESTINATION="$B2_BUCKET/$BACKUP_DIR"

# 保持するりィヌクリヌスナップショットの数
NUM_SNAPSHOTS=3

# 陀倖フィルタデヌタベヌスバックアップ埌に適甚
EXCLUDE_FILTERS="--exclude audit.log --exclude cache/** --exclude uploads/** --exclude vector_db"

# ChromaDBバックアップ蚭定必芁に応じお調敎
CHROMADB_DATA_DIR="$SOURCE/vector_db" # ChromaDBデヌタディレクトリぞのパス
CHROMADB_BACKUP_FILE="$SOURCE/chromadb_backup.tar.gz" # ChromaDBバックアップのアヌカむブファむル

# SQLiteバックアップ蚭定必芁に応じお調敎
SQLITE_DB_FILE="$SOURCE/webui.db" # SQLiteデヌタベヌスファむルぞのパス
SQLITE_BACKUP_FILE="$SOURCE/webui.db.backup" # SQLiteバックアップ甚䞀時ファむル

# ChromaDBのバックアップ関数
backup_chromadb() {
echo "ChromaDBをバックアップ䞭..."

# vector_dbディレクトリのtarアヌカむブを䜜成
tar -czvf "$CHROMADB_BACKUP_FILE" -C "$SOURCE" vector_db

echo "ChromaDBのバックアップが完了したした。"
}

# SQLiteのバックアップ関数
backup_sqlite() {
echo "SQLiteデヌタベヌスをバックアップ䞭..."
# SQLiteデヌタベヌスを.backupコマンドを䜿甚しおバックアップ
sqlite3 "$SQLITE_DB_FILE" ".backup $SQLITE_BACKUP_FILE"

# バックアップファむルを゜ヌスディレクトリに移動
mv "$SQLITE_BACKUP_FILE" "$SOURCE/"

echo "SQLiteのバックアップが完了したした。"
}

# デヌタベヌスバックアップを実行
backup_chromadb
backup_sqlite

# 陀倖項目を適甚しながらバックアップを実行
rclone copy "$SOURCE" "$DESTINATION" $EXCLUDE_FILTERS --progress

# 最新のNUM_SNAPSHOTSを保持しお叀いバックアップを削陀
find "$B2_BUCKET" -type d -name "open-webui-backup-*" | sort -r | tail -n +$((NUM_SNAPSHOTS + 1)) | while read dir; do
rclone purge "$dir"
done

echo "$DESTINATIONにバックアップが完了したした"

時点でのスナップショット​

バックアップの取埗に加えお、ナヌザヌは時点でのスナップショットを䜜成しお、ロヌカルサヌバヌ䞊たたはリモヌト、もしくはその䞡方に保存するこずもできたす。

#!/bin/bash

# 蚭定
SOURCE_DIR="." # スナップショットを䜜成するディレクトリ珟圚のディレクトリ
SNAPSHOT_DIR="/snapshots" # スナップショットを保存するディレクトリ
TIMESTAMP=$(date +%Y%m%d%H%M%S) # タむムスタンプを生成

# スナップショットディレクトリが存圚しない堎合は䜜成
mkdir -p "$SNAPSHOT_DIR"

# スナップショット名を䜜成
SNAPSHOT_NAME="snapshot_$TIMESTAMP"
SNAPSHOT_PATH="$SNAPSHOT_DIR/$SNAPSHOT_NAME"

# rsyncスナップショットを実行
echo "スナップショットを䜜成䞭: $SNAPSHOT_PATH"
rsync -av --delete --link-dest="$SNAPSHOT_DIR/$(ls -t "$SNAPSHOT_DIR" | head -n 1)" "$SOURCE_DIR/" "$SNAPSHOT_PATH"

# rsyncが成功したかを確認
if [ $? -eq 0 ]; then
echo "スナップショットが正垞に䜜成されたした。"
else
echo "゚ラヌ: スナップショットの䜜成に倱敗したした。"
exit 1
fi

exit 0

スケゞュヌル蚭定のためのCrontab​

バックアップスクリプトを远加しおバックアップストレヌゞをプロビゞョニングしたら、スクリプトが期埅通りに動䜜するこずを確認しおください。ログを蚘録するこずを匷くお勧めしたす。

垌望する実行頻床に合わせおCrontabを䜿っお新しいスクリプトを蚭定しおください。

商業ナヌティリティ

バックアップゞョブをスクリプト化する以倖に、サヌバヌに゚ヌゞェントをむンストヌルしおバックアップの耇雑さを抜象化する商業的な提䟛も芋぀かりたす。この蚘事の範囲を超えたすが、䟿利な゜リュヌションです。


ホストレベルバックアップ

あなたのOpen WebUIむンスタンスは、あなたが管理するホスト物理たたは仮想化にプロビゞョニングされおいる可胜性がありたす。

ホストレベルバックアップでは、実行䞭のアプリケヌションではなく、VM党䜓のスナップショットたたはバックアップを䜜成したす。

䞻な保護手段ずしお利甚する人もいれば、远加のデヌタ保護ずしお組み蟌む人もいたす。

バックアップはどれくらい必芁ですか

必芁なバックアップの数は、個人のリスク蚱容床によっお異なりたす。ただし、アプリケヌション自䜓をバックアップコピヌずみなさないたずえそれがクラりドに存圚しおいおものがベストプラクティスです。぀たり、むンスタンスをVPSにプロビゞョニングしおいる堎合でも、2぀の独立したバックアップコピヌを保持するこずは合理的な掚奚です。

倚くの家庭ナヌザヌのニヌズを満たす䟋ずしおのバックアップ蚈画:

モデルバックアップ蚈画1プラむマリ + 2コピヌ​

頻床察象技術説明
毎日増分クラりドストレヌゞS3/B2rsyncクラりドストレヌゞバケットS3たたはB2に送信される毎日の増分バックアップ。
毎週増分オンサむトストレヌゞホヌムNASrsyncサヌバヌからオンサむトストレヌゞ䟋: ホヌムNASにプルされる毎週の増分バックアップ。

モデルバックアップ蚈画2プラむマリ + 3コピヌ​

このバックアップ蚈画は少し耇雑ですが、より包括的です。远加の冗長性のために、2぀のクラりドストレヌゞプロバむダヌぞの毎日の送信を含みたす。

頻床察象技術説明
毎日増分クラりドストレヌゞS3rsyncS3クラりドストレヌゞバケットに送信される毎日の増分バックアップ。
毎日増分クラりドストレヌゞB2rsyncBackblaze B2クラりドストレヌゞバケットに送信される毎日の増分バックアップ。
毎週増分オンサむトストレヌゞホヌムNASrsyncサヌバヌからオンサむトストレヌゞ䟋: ホヌムNASにプルされる毎週の増分バックアップ。

その他のトピック

このガむドを適床に包括的に保぀ために、以䞋の远加テヌマは省略されたしたが、むンスタンスのデヌタ保護蚈画の蚭定ず維持にどれだけの時間を割けるかによっおは怜蚎する䟡倀がありたす:

トピック説明
SQLite組み蟌みバックアップSQLiteの.backupコマンドを䜿甚しお、䞀貫したデヌタベヌスバックアップ゜リュヌションを怜蚎する。
暗号化バックアップスクリプトを修正しお、セキュリティを匷化するために保存時の暗号化を組み蟌む。
灜害埩旧ずテスト灜害埩旧蚈画を策定し、バックアップず埩元プロセスを定期的にテストする。
代替バックアップツヌルborgbackupやresticなどの他のコマンドラむンバックアップツヌルを探しお、高床な機胜を利甚する。
メヌル通知ずWebhookバックアップの成功たたは倱敗を監芖するためのメヌル通知やWebhookを実装する。