# Использование Vault

## Инициализация Vault и миграция секретов

### 1. Убедитесь, что сервисы запущены

```bash
# Vault в конфигурации запускается через опциональный профиль vault

# Скопируйте конфигурацию vault (файлы замещаются новыми)
cp -af ./vault/config/default/. ./vault/config

# Запустите сервисы с выбранным профилем БД + profile vault
# Вариант 1: MariaDB + Vault
docker compose --profile mariadb --profile vault up -d

# Вариант 2: PostgreSQL + Vault
docker compose --profile pg --profile vault up -d
```

### 2. Выполните инициализацию и unseal Vault

```bash
# Откройте shell в контейнере Vault
docker compose exec orchestrator-vault sh

# Внутри контейнера:
vault operator init
# запишите все ключи после команды
vault operator unseal
exit
```

После `unseal` нужно включить `kv/` как `KV v1`.

```bash
# Откройте shell в контейнере Vault (если вы из него вышли)
docker compose exec orchestrator-vault sh

# Внутри контейнера:
# экспортируйте root-токен
export VAULT_TOKEN='ваш-root-token'

# Проверить mounts:
vault secrets list -detailed

# Включить KV v1 в mount kv/
vault secrets enable -path=kv -version=1 kv

# Проверить, что появился kv/ с map[version:1]
vault secrets list -detailed

exit
```

<details>

<summary>💡 Комментарии к инициализации Vault</summary>

**vault operator init** - инициализирует Vault и выводит:

* `Unseal Key`
* `Initial Root Token`

**vault operator unseal** - снимает seal (вставьте `Unseal Key` 3 раза из шага `init`)

</details>

### 3. Установите токен в .env

```bash
# Заполните переменную окружения токеном root-token
sed -i 's/^VAULT_TOKEN=.*/VAULT_TOKEN=root-token/' .env
```

### 4. Перезапустите orchestrator

```bash
# Примените новое значение VAULT_TOKEN
docker compose restart orchestrator
```

### 5. Выполните миграцию секретов в Vault

```bash
docker compose exec orchestrator php backend/bin/vault-migrate.php
```

### (ОПЦИОНАЛЬНО) Обратная миграцию из Vault в БД (rollback)

```bash
docker compose exec orchestrator php backend/bin/vault-rollback.php
```

Скрипт восстанавливает пароли роботов и ассетов из Vault обратно в БД и шифрует их с использованием `ORCHESTRATOR_ENCRYPTION_KEY`.

<details>

<summary>💡 Проверка результата rollback</summary>

* в выводе команды должны быть строки `[OK] Robots: ... restored, ... failed` и `[OK] Assets: ... restored, ... failed`
* в таблицах `robots` и `assets` значения `VAULT_MIGRATED` должны замениться на зашифрованные пароли
* `docker compose logs -f orchestrator` не должен содержать ошибок `Vault is not available`

</details>

<details>

<summary>💡 Проверка результата</summary>

* `docker compose ps` - контейнеры `orchestrator` и `orchestrator-vault` должны быть `Up`
* `docker compose logs -f orchestrator-vault` - проверка логов Vault
* `docker compose logs -f orchestrator` - проверка, что backend стартовал после перезапуска без ошибок Vault

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sherparpa.ru/sherpa-rpa/sherpa-orchestrator/ustanovka-sherpa-orchestrator/s-ispolzovaniem-docker/ispolzovanie-vault.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
