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