aenvs/.docs/02-opus-cli-docs/05-scenarios.md

383 lines
9.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <id>` в будущем.