Agent saya berjalan di satu server sahaja. Itu risiko: kalau server itu rosak atau perlu dipindahkan, persona, skills dan konfigurasi yang dikumpul berminggu-minggu perlu dibina semula dengan tangan.
Matlamat runbook ini mudah: bawa agent ke server baru, boleh docker pull dan run bila-bila, di mana-mana.
Idea asasnya ialah memisahkan dua jenis kandungan:
- Dalam image: persona, semua skills dan tetapan umum, dalam bentuk sanitized (tanpa rahsia).
- Di luar image: data peribadi dan rahsia, yang dimount semasa run.
Status asal nota ini ialah “belum bermula”, tetapi image dan sandaran sudah siap seperti dalam jadual di bawah. Langkah pemulihan di server baru ialah prosedur yang dirancang; saya belum merekodkan ujian penuh di mesin kosong.
Apa yang sudah siap
| Item | Status |
|---|---|
| Image agent dibina dan di-push ke GHCR | Siap. Visibility private |
| Skills dan persona dalam image | Siap, disanitize (kata laluan ditukar kepada CHANGE_ME) |
| Login GHCR | Siap, dengan token baharu yang ada write:packages |
| Sandaran direktori home | Siap, ke object storage (sekitar 1,900 fail, 147 MB) |
| Sandaran fail kerja | Siap, ke object storage |
| Sandaran config aktif OpenStack/Kolla | Siap |
Apa dalam image, apa tidak
Dalam image (~3.9 GB):
- Base: image rasmi agent (
nousresearch/hermes-agent:latest) - Persona dan semua skills (sanitized)
- Tetapan config, tanpa rahsia
Tidak dalam image, mesti dimount semasa run:
| Item | Sebab |
|---|---|
~/.hermes/.env | Kunci API |
~/.hermes/auth.json | Token OAuth |
| Sesi WhatsApp | Sesi hidup |
state.db | Memori dan sejarah perbualan |
Peraturan emas yang menentukan pembahagian ini: jangan bake .env atau auth.json ke dalam image. Selepas itu rahsia terbocor ke registry, dan lapisan image tidak boleh dipadam dengan benar. (Saya tulis tentang cara menghalang ini di Image Tags That Don’t Lie.)
Jalankan di server baru
# 1. Pasang Docker (jika belum)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER # log masuk semula
# 2. Login GHCR dengan PAT yang ada read:packages
echo "<PAT>" | docker login ghcr.io -u <username> --password-stdin
# 3. Tarik image
docker pull ghcr.io/<username>/pg-agent:latest
# 4. Run, mount ~/.hermes dari host
HERMES_UID=$(id -u) HERMES_GID=$(id -g) docker run -d \
--name pg \
--restart unless-stopped \
-v ~/.hermes:/opt/data \
ghcr.io/<username>/pg-agent:latest
# 5. Semak log
docker logs -f pg
Simpan PAT dalam password manager, bukan dalam chat atau nota.
Pindahkan data
Dari server lama, bungkus direktori .hermes:
tar czf hermes-backup.tgz -C ~ .hermes
scp hermes-backup.tgz user@newserver:~/ # atau guna object storage / rclone
Di server baru:
tar xzf hermes-backup.tgz -C ~
Perkara penting dalam ~/.hermes:
| Fail / folder | Fungsi |
|---|---|
config.yaml | Tetapan |
.env | Kunci API (wajib) |
skills/ | Sudah dalam image, tetapi boleh di-override dengan mount |
memories/, sessions/, state.db | Sejarah dan memori |
profiles/ | Jika menggunakan profile |
Rollback
docker stop pg && docker rm pg
# atau kembali kepada image asal
docker pull nousresearch/hermes-agent:latest
Oleh kerana data berada dalam volume yang dimount dan bukan dalam container, memadam container tidak menghilangkan memori agent.
Nota keselamatan
- Jangan bake
.env/auth.jsondalam image. - Image berstatus private: orang tanpa
read:packagestidak boleh menariknya. - Jika mahu menjadikan image public, scrub rahsia dengan teliti dahulu, dan jangan bergantung pada ingatan sahaja. Gunakan imbasan automatik.
- Backup
.hermesmengandungi rahsia. Layan failhermes-backup.tgzseperti kata laluan: jangan tinggalkan ia di folder kongsi.
Pengajaran
Pembahagian “image sanitized + data dimount” bermakna agent boleh dipindahkan dengan satu arahan, dan image tidak perlu dilayan sebagai rahsia. Tetapi ia hanya selamat jika sanitize itu betul. Bahagian yang paling rapuh dalam proses ini ialah langkah manual “tukar kata laluan kepada CHANGE_ME”. Saya kemudian menambah ujian automatik yang dijalankan sebelum build. Lihat juga Packing an Agent into a Container untuk apa yang berlaku di dalam container selepas ia dijalankan.
Leave a Comment / Ask a Question
Have thoughts or questions on this article? Drop a message below and Faiez will receive an instant notification.