383 lines
9.1 KiB
Markdown
383 lines
9.1 KiB
Markdown
# 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>` в будущем.
|