Przejdź do głównej zawartości

Kopia zapasowa i odtwarzanie

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.

  1. Zrób zrzuty trzech baz:

    Okno terminala
    for db in gateway-postgres:gateway keycloak-postgres:keycloak broker-postgres:broker; do
    docker compose exec -T "${db%%:*}" pg_dump -U "${db##*:}" "${db##*:}" > "${db##*:}.sql"
    done
  2. 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
  3. Spakuj wolumeny secrets i openbao-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
  4. Skopiuj gateway.sql, keycloak.sql, broker.sql, openbao.snap, secrets.tgz, .env i certs/ w miejsce przechowywania kopii.

Odtwarzaj na pakiecie w tej samej wersji, na tym samym hoście lub nowym. Jeśli nazwa projektu jest inna, zmień prefiks wolumenów.

  1. Jeśli platforma już działa na tym hoście, usuń ją razem z wolumenami:

    Okno terminala
    docker compose down -v
  2. Odtwórz dwa wolumeny z sekretami z archiwum:

    Okno terminala
    docker volume create mcp-platform_secrets
    docker volume create mcp-platform_openbao-keys
    docker run --rm -v mcp-platform_secrets:/s -v mcp-platform_openbao-keys:/k -v "$PWD":/b alpine tar xzf /b/secrets.tgz -C /
  3. Połóż na miejscu .env i certs/.

  4. Uruchom bazy, a potem wczytaj do nich zrzuty:

    Okno terminala
    docker compose up -d keycloak-postgres gateway-postgres broker-postgres
    docker compose exec -T gateway-postgres psql -U gateway gateway < gateway.sql
    docker compose exec -T keycloak-postgres psql -U keycloak keycloak < keycloak.sql
    docker compose exec -T broker-postgres psql -U broker broker < broker.sql

    Jeśli usługi potrzebują chwili, poczekaj, aż docker compose ps pokaże trzy bazy jako zdrowe, i dopiero wczytaj zrzuty.

  1. 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
  2. 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=1
    docker compose exec openbao bao operator unseal # wklej "Unseal Key 1" z wyniku init
    docker compose exec -T openbao sh -c 'cat > /tmp/openbao.snap' < openbao.snap
    read -rs BAO_TOKEN && export BAO_TOKEN # wklej "Initial Root Token" z wyniku init
    docker compose exec -e BAO_TOKEN openbao bao operator raft snapshot restore -force /tmp/openbao.snap
    unset BAO_TOKEN
    docker compose exec openbao rm -f /tmp/openbao.snap
    docker compose restart openbao

    Snapshot 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 niego openbao-unseal nie skonfiguruje OpenBao.

  3. Uruchom resztę:

    Okno terminala
    docker compose up -d

    docker compose logs openbao-unseal kończy się linią openbao-unseal: unsealed and provisioned.

  1. docker compose ps pokazuje każdą usługę jako zdrową.
  2. Możesz zalogować się do portalu, a serwery są widoczne w Administracji.
  3. 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.

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:

Okno terminala
docker compose stop openbao-unseal
docker volume rm mcp-platform_openbao-keys

Po 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.