Yedekler (şifreli, R2)¶
tau'nun bildiği her şey hub'da (tau'nun çalıştığı, sana ait makine) yaşar. Tasarımın bütün amacı bu, ve bu da yedeklemeyi senin işin yapar. Bu rehber neyin yedekleneceğini, Cloudflare'in yalnızca şifreli metin tutması için yedeğin age ile nasıl şifreleneceğini, nasıl yükleneceğini ve nasıl geri yükleneceğini gösterir. Elle yapılan akış bugün çalışıyor; zamanlanmış iş planlanıyor.
Planlanan (yol haritası issue 018): yedekleme işi
Bir tau backup komutu ve zamanlanmış bir hub servisi, bu sayfadaki akışı otomatik çalıştıracak, bir rotasyon tutacak ve geri yüklemeyi belgeleyecek. O zamana kadar yedek, aşağıdaki komutlardır. İşin çalıştıracağı komutlar da bunların aynısı.
Veri dizininde neler var¶
TAU_DATA_DIR (varsayılan ~/.local/share/tau), tau'nun yazdığı her şeyi tutar:
~/.local/share/tau/
├── sessions/<id>/ one directory per session, kept forever
│ ├── session.json the Strands session record
│ ├── meta.json channel, profile, title, role, compaction links
│ ├── events.jsonl agent events: tool calls, approvals, limits, errors
│ └── agents/tau/ agent state and one file per message
├── hub/ hub state: lock, heartbeat, crash reports, launchd logs
├── net/ tau network: identity.json (your tau's keys), profile, contacts, log
└── logs/tau.log the log file
Sonraki katmanlar ayarları, hafızayı ve bilgi tabanını aynı kökün altına ekler; böylece TAU_DATA_DIR yedeği eksiksiz kalır.
İki şey onun dışında yaşar ve onları da saklamaya değer:
| Yol | Neden |
|---|---|
<TAU_HOME>/persona/user.md |
senin hakkındaki bilgiler; hiçbir yerde takip edilmez |
<TAU_HOME>/tau.toml |
rol ve bileşen seçimlerin; zararsız ve işe yarar |
<TAU_HOME>/.env kimlik bilgilerini tutar. Onları yedek paketinde değil, parola yöneticinde sakla; böylece geri yükleme, sahip olduğun her anahtarı pakete emanet etmek yerine tek bir yapıştırma gerektirir. Yine de eklersen paket zaten şifrelidir, ama kaybolan bir age anahtarının hasar alanı büyür.
Anahtar¶
Yedekler, küçük ve modern bir dosya şifreleme aracı olan age ile bir anahtar çiftine şifrelenir. Özel anahtar hub'da ve parola yöneticinde kalır. Asla Cloudflare'e gitmez.
mkdir -p ~/.config/tau && chmod 700 ~/.config/tau
age-keygen -o ~/.config/tau/backup.key
chmod 600 ~/.config/tau/backup.key
age-keygen açık anahtarı yazdırır; Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p gibi bir satır. Onu kolay ulaşabileceğin bir yere kopyala; şifrelemeyi onunla yaparsın. Sonra backup.key dosyasının tamamını parola yöneticine koy. O olmadan her yedek anlamsız bir gürültüdür.
Uyarı
backup.key dosyasını kaybetmek bütün yedekleri kaybetmek demektir. Anahtar parola yöneticinde olduğu sürece hub'ı kaybetmek öyle değildir. Aşağıdaki geri yüklemeyi şimdi, ortada kaybedilecek bir şey yokken bir kez dene.
Yedek al¶
Tek bir paket, age içinden akıtılarak; böylece düz metin arşiv diske hiç dokunmaz:
export TAU_DATA_DIR="${TAU_DATA_DIR:-$HOME/.local/share/tau}"
export TAU_HOME="${TAU_HOME:-$HOME/.tau}"
export TAU_BACKUP_PUBKEY='age1...' # from age-keygen
stamp=$(date -u +%Y%m%dT%H%M%SZ)
tar -C / -czf - \
"${TAU_DATA_DIR#/}/sessions" "${TAU_DATA_DIR#/}/hub" "${TAU_DATA_DIR#/}/net" \
"${TAU_HOME#/}/persona/user.md" "${TAU_HOME#/}/tau.toml" \
| age -r "$TAU_BACKUP_PUBKEY" -o "/tmp/tau-$stamp.tar.gz.age"
ls -l "/tmp/tau-$stamp.tar.gz.age"
hub/hub.lock de dahil edilir ve zararsızdır. logs/ bilerek dışarıda bırakıldı; istersen ekle. tau ağı kurulu değilse net dizini yoktur; tar bu durumda Cannot stat: No such file or directory yazdırır ve geri kalanı arşivler, yani çıktı temiz kalsın diye onu listeden çıkar. Ağ kuruluysa net/identity.json yeniden oluşturamayacağın tek dosyadır: tau'nun anahtarlarını tutar ve kişilerin yeni anahtarları reddeder.
Özel bir R2 bucket'ına yükle¶
R2, Cloudflare'in nesne depolamasıdır. Özel bir bucket'ın herkese açık URL'si yoktur; onu yalnızca senin API token'ın okuyabilir, o da yalnızca şifreli metni okur.
- Hesabında R2 read and write yetkisine sahip bir Cloudflare API token'ı oluştur (
Account → R2 → Manage R2 API tokensya da Workers R2 Storage: Edit kapsamlı bir kullanıcı token'ı). Onu~/.config/tau/remote.enviçindeCLOUDFLARE_API_TOKEN=...olarak sakla ya da bir keznpx wrangler loginçalıştır. -
Bucket'ı oluştur ve yükle:
npx wrangler r2 bucket create tau-backups npx wrangler r2 object put "tau-backups/$stamp.tar.gz.age" \ --file "/tmp/tau-$stamp.tar.gz.age" --remote rm "/tmp/tau-$stamp.tar.gz.age"--remote, wrangler'ın yerel bir emülasyon yerine gerçek bucket'la konuşmasını sağlar. -
Orada ne olduğunu kontrol et:
Büyük paketler: rclone
wrangler r2 object put birkaç yüz megabayta kadar olan paketler için yeterli. Daha büyükleri ya da artımlı eşitleme için rclone'u bir R2 erişim anahtarı çiftiyle R2'nin S3 uyumlu uç noktasına göre yapılandır, ardından rclone copy /tmp/tau-$stamp.tar.gz.age r2:tau-backups/. Şifreleme adımı aynı; yalnızca yükleme değişir.
Geri yükle¶
Hub'da ya da hub olacak yeni bir makinede:
npx wrangler r2 object get "tau-backups/<stamp>.tar.gz.age" --file /tmp/restore.age --remote
age -d -i ~/.config/tau/backup.key /tmp/restore.age | tar -C / -xzf -
rm /tmp/restore.age
tau doctor
tar -C / arşivlenen yolların aynısını geri yükler; bu yüzden yeni makinede TAU_DATA_DIR ve TAU_HOME aynı olmalı. Farklılarsa geçici bir dizine aç ve parçaları taşı:
mkdir -p /tmp/restore && age -d -i ~/.config/tau/backup.key /tmp/restore.age | tar -C /tmp/restore -xzf -
rsync -a /tmp/restore/<old data dir>/ "$TAU_DATA_DIR"/
cp /tmp/restore/<old home>/persona/user.md "$TAU_HOME"/persona/user.md
Sonra tau chat --resume: son oturum geçmişiyle birlikte geri gelir.
Zamanla¶
Issue 018 gelene kadar yedekleme betiğini her gece çalıştıran bir cron satırı ya da bir launchd agent'ı yeterli:
crontab -e
# 03:30 every night; the script is the "Make a backup" block plus the upload
30 3 * * * /path/to/tau-backup.sh >> "$HOME/.local/share/tau/logs/backup.log" 2>&1
Betik bucket adını ve token yolunu içeriyorsa onu deponun dışında tut ya da bu değerleri ~/.config/tau/remote.env dosyasından okut.
Kurallar¶
- Asla düz metin yükleme.
age'den önceki bir adım başarısız olursa hiçbir şey yüklenmez. - Anahtar asla Cloudflare'de olmaz; ne bir secret'ta, ne bir Worker'da, ne bir bucket'ta.
- İlk yedekten sonra ve betikteki her değişiklikten sonra bir geri yüklemeyi dene.
- R2 hiçbir kişisel veriyi açık hâlde tutmaz. D1, Vectorize ve AI Search tau'nun verisi için hiç kullanılmaz (ADR 0006).