# Usage Scenarios ## Сценарий 1: Первоначальная настройка **Контекст:** Первый запуск AEVS на новой машине. ```bash # 1. Установка (предполагается, что бинарник уже собран) $ go install github.com/user/aevs@latest # 2. Настройка credentials для S3 $ aevs config AEVS Configuration ================== Storage type (s3): s3 S3 Endpoint (https://s3.amazonaws.com): AWS Region (us-east-1): eu-central-1 Bucket name: my-envs-bucket Access Key ID: AKIAIOSFODNN7EXAMPLE Secret Access Key: **** Testing connection... ✓ Successfully connected to s3://my-envs-bucket Config saved to ~/.config/aevs/config.yaml ``` **Результат:** Глобальный конфиг создан, можно работать с любыми проектами. --- ## Сценарий 2: Новый проект на основной машине **Контекст:** Начинаю новый проект на ноутбуке, хочу настроить синхронизацию env файлов. ```bash # 1. Перейти в проект $ cd ~/projects/my-app # 2. Проверить что есть env файлы $ ls -la -rw-r--r-- .env.development -rw-r--r-- .env.production drwxr-xr-x docker/ └── .env # 3. Инициализировать AEVS $ aevs init my-app Scanning for env files... Found 3 env files: ✓ .env.development ✓ .env.production ✓ docker/.env Created aevs.yaml for project "my-app" # 4. Проверить созданный конфиг $ cat aevs.yaml project: my-app files: - .env.development - .env.production - docker/.env # 5. Загрузить в storage $ aevs push Pushing "my-app" to storage... ✓ .env.development (156 bytes) ✓ .env.production (234 bytes) ✓ docker/.env (89 bytes) Uploaded to s3://my-envs-bucket/my-app/envs.tar.gz Total: 3 files, 479 bytes ``` **Результат:** Проект настроен, env файлы загружены в storage. --- ## Сценарий 3: Продолжение работы на другой машине **Контекст:** Приехал в офис, нужно продолжить работу над проектом. ```bash # 1. Склонировать репозиторий $ git clone git@github.com:user/my-app.git $ cd my-app # 2. Посмотреть какие проекты есть в storage $ aevs list Projects in s3://my-envs-bucket: PROJECT FILES UPDATED SIZE my-app 3 2 hours ago 479 B old-proj 2 30 days ago 234 B # 3. Скачать env файлы $ aevs pull my-app Pulling "my-app" from storage... ✓ .env.development (created) ✓ .env.production (created) ✓ docker/.env (created directory, created file) Done. 3 files pulled. # 4. (Опционально) Инициализировать локальный конфиг для удобства $ aevs init my-app Project "my-app" found in storage. Using existing configuration. Created aevs.yaml for project "my-app" # Теперь можно делать push/pull без указания имени проекта $ aevs push $ aevs pull ``` **Результат:** Рабочее окружение восстановлено, можно работать. --- ## Сценарий 4: Обновление env файлов **Контекст:** Добавил новую переменную, нужно синхронизировать. ### На машине A (где изменил): ```bash # 1. Изменить env файл $ echo "NEW_API_KEY=secret123" >> .env.production # 2. Проверить статус $ aevs status Project: my-app Storage: s3://my-envs-bucket/my-app FILE LOCAL REMOTE STATUS .env.development 156 B 156 B ✓ up to date .env.production 267 B 234 B ⚡ local modified docker/.env 89 B 89 B ✓ up to date Summary: 2 up to date, 1 modified # 3. Загрузить изменения $ aevs push Pushing "my-app" to storage... ✓ .env.development (156 bytes) ✓ .env.production (267 bytes) ✓ docker/.env (89 bytes) Uploaded to s3://my-envs-bucket/my-app/envs.tar.gz ``` ### На машине B (получить изменения): ```bash # 1. Проверить статус $ aevs status FILE LOCAL REMOTE STATUS .env.development 156 B 156 B ✓ up to date .env.production 234 B 267 B ⚡ remote modified docker/.env 89 B 89 B ✓ up to date # 2. Получить изменения $ aevs pull Pulling "my-app" from storage... - .env.development (unchanged) ✓ .env.production (updated) - docker/.env (unchanged) Done. 1 file updated, 2 unchanged. ``` --- ## Сценарий 5: Добавление нового env файла **Контекст:** Добавил новый сервис с отдельным env файлом. ```bash # 1. Создать новый env файл $ mkdir -p services/auth $ echo "AUTH_SECRET=xxx" > services/auth/.env # 2. Запустить init для обнаружения новых файлов $ aevs init Project "my-app" already initialized. Scanning for new env files... Found 1 new file: + services/auth/.env Add to aevs.yaml? [Y/n]: y Updated aevs.yaml # 3. Проверить конфиг $ cat aevs.yaml project: my-app files: - .env.development - .env.production - docker/.env - services/auth/.env # 4. Загрузить $ aevs push ``` --- ## Сценарий 6: Конфликт при pull **Контекст:** Изменил файл локально, но на другой машине тоже были изменения. ```bash $ aevs pull Pulling "my-app" from storage... ✓ .env.development (unchanged) File .env.production already exists and differs from remote. Local version: DATABASE_URL=postgres://localhost:5432/dev API_KEY=local-key Remote version: DATABASE_URL=postgres://prod.server:5432/prod API_KEY=remote-key [o]verwrite / [s]kip / [d]iff / [O]verwrite all: o ✓ .env.production (overwritten) ✓ docker/.env (unchanged) Done. 1 file updated. ``` --- ## Сценарий 7: Dry-run перед push **Контекст:** Хочу проверить что будет загружено. ```bash $ aevs push --dry-run Dry run - no changes will be made Would upload: .env.development (156 bytes) .env.production (267 bytes) docker/.env (89 bytes) services/auth/.env (45 bytes) Target: s3://my-envs-bucket/my-app/envs.tar.gz Total: 4 files, 557 bytes ``` --- ## Сценарий 8: Удаление проекта из storage **Контекст:** Проект больше не нужен, хочу очистить storage. ```bash # Пока нет команды delete, можно использовать aws cli $ aws s3 rm s3://my-envs-bucket/old-project/ --recursive delete: s3://my-envs-bucket/old-project/envs.tar.gz delete: s3://my-envs-bucket/old-project/metadata.json # Проверить $ aevs list Projects in s3://my-envs-bucket: PROJECT FILES UPDATED SIZE my-app 4 5 min ago 557 B Total: 1 project ``` --- ## Сценарий 9: Использование с разными S3 провайдерами ### MinIO (self-hosted) ```bash $ aevs config Storage type (s3): s3 S3 Endpoint: https://minio.myserver.com:9000 AWS Region: Bucket name: envs Access Key ID: minioadmin Secret Access Key: **** Testing connection... ✓ Successfully connected ``` ### Cloudflare R2 ```bash $ aevs config Storage type (s3): s3 S3 Endpoint: https://abc123.r2.cloudflarestorage.com AWS Region: auto Bucket name: my-envs Access Key ID: xxx Secret Access Key: **** ``` --- ## Сценарий 10: Восстановление предыдущей версии **Контекст:** Случайно запушил неправильные env, нужно откатиться. ```bash # AEVS не хранит версии, но S3 versioning может помочь # 1. Посмотреть версии в S3 $ aws s3api list-object-versions \ --bucket my-envs-bucket \ --prefix my-app/envs.tar.gz { "Versions": [ { "VersionId": "abc123", "LastModified": "2026-01-28T15:00:00Z", "Size": 557 }, { "VersionId": "xyz789", "LastModified": "2026-01-28T10:00:00Z", "Size": 479 } ] } # 2. Скачать предыдущую версию $ aws s3api get-object \ --bucket my-envs-bucket \ --key my-app/envs.tar.gz \ --version-id xyz789 \ envs-old.tar.gz # 3. Распаковать и восстановить $ tar -xzf envs-old.tar.gz # 4. Или сделать эту версию текущей $ aws s3 cp \ s3://my-envs-bucket/my-app/envs.tar.gz \ s3://my-envs-bucket/my-app/envs.tar.gz \ --source-version-id xyz789 ``` **Примечание:** Для автоматизации можно добавить команду `aevs restore --version ` в будущем.