Kopia zapasowa i odtwarzanie
Gdzie są dane
Dział zatytułowany „Gdzie są dane”Nazwy wolumenów mają prefiks projektu Compose, domyślnie mcp-platform_ (albo wartość COMPOSE_PROJECT_NAME, jeśli ją
ustawiłeś). Lista: docker volume ls.
| Wolumen | Zawartość | Kopia |
|---|---|---|
secrets |
Wewnętrzne CA i certyfikaty, wszystkie wygenerowane hasła i klucze, AppRole OpenBao | tak |
openbao-keys |
Klucz odpieczętowania OpenBao i token provisioner | tak |
openbao-data |
Magazyn OpenBao (Raft): zapisane poświadczenia użytkowników, sekrety klientów OAuth, klucze Transit | tak, jako snapshot |
keycloak-db |
Baza Keycloaka: realm, użytkownicy, OTP | tak, jako zrzut |
gateway-db |
Baza gatewaya: serwery, zatwierdzenia, mapowanie zakresów, nadpisania, audyt | tak, jako zrzut |
broker-db |
Baza brokera: systemy, połączenia | tak, jako zrzut |
gateway-redis, gateway-redis-replica, broker-redis |
Krótkotrwały stan: sesje klientów MCP (1 h bezczynności), oczekujące potwierdzenia narzędzi niszczących (około 4 min), liczniki limitów (1 min), łączenie kont w toku (10 min), blokady i znaczniki powtórzeń | nie: uruchom je puste |
Poza wolumenami zachowaj .env, certs/ (z tls.key) i servers.yaml. Klucze kont usług zapisane w OpenBao przez
bao kv put są w openbao-data.
Polecenia uruchamiaj w katalogu z compose.yaml, przy działającej platformie.
-
Zrób zrzuty trzech baz:
Okno terminala for db in gateway-postgres:gateway keycloak-postgres:keycloak broker-postgres:broker; dodocker compose exec -T "${db%%:*}" pg_dump -U "${db##*:}" "${db##*:}" > "${db##*:}.sql"done -
Zapisz snapshot OpenBao:
Okno terminala docker compose exec -e BAO_CACERT=/trust/ca.crt openbao-unseal sh -c \'BAO_TOKEN=$(cat /keys/provisioner-token) bao operator raft snapshot save /tmp/openbao.snap && cat /tmp/openbao.snap' > openbao.snap -
Spakuj wolumeny
secretsiopenbao-keys:Okno terminala docker run --rm -v mcp-platform_secrets:/s:ro -v mcp-platform_openbao-keys:/k:ro -v "$PWD":/b alpine tar czf /b/secrets.tgz -C / s k -
Skopiuj
gateway.sql,keycloak.sql,broker.sql,openbao.snap,secrets.tgz,.envicerts/w miejsce przechowywania kopii.
Odtwarzanie
Dział zatytułowany „Odtwarzanie”Odtwarzaj na pakiecie w tej samej wersji, na tym samym hoście lub nowym. Jeśli nazwa projektu jest inna, zmień prefiks wolumenów.
-
Jeśli platforma już działa na tym hoście, usuń ją razem z wolumenami:
Okno terminala docker compose down -v -
Odtwórz dwa wolumeny z sekretami z archiwum:
Okno terminala docker volume create mcp-platform_secretsdocker volume create mcp-platform_openbao-keysdocker run --rm -v mcp-platform_secrets:/s -v mcp-platform_openbao-keys:/k -v "$PWD":/b alpine tar xzf /b/secrets.tgz -C / -
Połóż na miejscu
.envicerts/. -
Uruchom bazy, a potem wczytaj do nich zrzuty:
Okno terminala docker compose up -d keycloak-postgres gateway-postgres broker-postgresdocker compose exec -T gateway-postgres psql -U gateway gateway < gateway.sqldocker compose exec -T keycloak-postgres psql -U keycloak keycloak < keycloak.sqldocker compose exec -T broker-postgres psql -U broker broker < broker.sqlJeśli usługi potrzebują chwili, poczekaj, aż
docker compose pspokaże trzy bazy jako zdrowe, i dopiero wczytaj zrzuty.
-
Uruchom sam OpenBao. Nie uruchamiaj jeszcze
openbao-unseal: z odtworzonym kluczem odmawia inicjalizacji pustego serwera, a wszystko, co na niego czeka, nie wstaje.Okno terminala docker compose up -d openbao -
Wczytaj snapshot. Zainicjalizuj pusty serwer jednorazowym kluczem, odpieczętuj go tym kluczem, odtwórz snapshot i zrestartuj OpenBao:
Okno terminala docker compose exec openbao bao operator init -key-shares=1 -key-threshold=1docker compose exec openbao bao operator unseal # wklej "Unseal Key 1" z wyniku initdocker compose exec -T openbao sh -c 'cat > /tmp/openbao.snap' < openbao.snapread -rs BAO_TOKEN && export BAO_TOKEN # wklej "Initial Root Token" z wyniku initdocker compose exec -e BAO_TOKEN openbao bao operator raft snapshot restore -force /tmp/openbao.snapunset BAO_TOKENdocker compose exec openbao rm -f /tmp/openbao.snapdocker compose restart openbaoSnapshot zastępuje jednorazowy klucz i token root. Od teraz OpenBao otwiera się odtworzonym kluczem z
openbao-keys. Użyj snapshotu młodszego niż 32 dni: token provisioner w nim wygasa po 768 godzinach bez odnowienia, a bez niegoopenbao-unsealnie skonfiguruje OpenBao. -
Uruchom resztę:
Okno terminala docker compose up -ddocker compose logs openbao-unsealkończy się liniąopenbao-unseal: unsealed and provisioned.
Sprawdź
Dział zatytułowany „Sprawdź”docker compose pspokazuje każdą usługę jako zdrową.- Możesz zalogować się do portalu, a serwery są widoczne w Administracji.
- Użytkownik, który połączył konto przed zrobieniem kopii, wywołuje narzędzie bez ponownego łączenia. Jeśli użytkownicy dostają
credential_required, dane OpenBao nie zostały odtworzone.
Klucz odpieczętowania poza hostem
Dział zatytułowany „Klucz odpieczętowania poza hostem”openbao-keys pozwala każdemu, kto czyta wolumeny Dockera na hoście, odpieczętować OpenBao. Aby trzymać klucz gdzie indziej, zrób
kopię openbao-keys, a potem usuń go z hosta:
docker compose stop openbao-unsealdocker volume rm mcp-platform_openbao-keysPo każdym starcie odpieczętowuj ręcznie przez bao operator unseal z powłoki w sieci secrets. Broker nie wystartuje, dopóki
OpenBao jest zapieczętowany.
