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

9.1 KiB
Raw Blame History

Usage Scenarios

Сценарий 1: Первоначальная настройка

Контекст: Первый запуск AEVS на новой машине.

# 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 файлов.

# 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: Продолжение работы на другой машине

Контекст: Приехал в офис, нужно продолжить работу над проектом.

# 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 (где изменил):

# 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 (получить изменения):

# 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 файлом.

# 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

Контекст: Изменил файл локально, но на другой машине тоже были изменения.

$ 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

Контекст: Хочу проверить что будет загружено.

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

# Пока нет команды 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)

$ 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

$ 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, нужно откатиться.

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