aenvs/.docs/02-opus-cli-docs/02-configuration.md

180 lines
5.1 KiB
Markdown
Raw 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.

# Configuration
## Два уровня конфигурации
AEVS использует два конфигурационных файла:
1. **Глобальный** — credentials для доступа к storage (один на машину)
2. **Локальный** — настройки конкретного проекта (один на проект)
---
## Глобальный конфиг
**Путь:** `~/.config/aevs/config.yaml`
**Права доступа:** `0600` (только владелец может читать/писать)
**Содержимое:**
```yaml
storage:
type: s3 # тип хранилища (пока только s3)
endpoint: https://s3.amazonaws.com # S3 endpoint (для MinIO — свой URL)
region: us-east-1 # AWS region (опционально)
bucket: my-aevs-bucket # имя bucket
access_key: AKIAIOSFODNN7EXAMPLE # AWS Access Key ID
secret_key: wJalrXUtnFEMI/K7MDENG... # AWS Secret Access Key
```
### Поля
| Поле | Тип | Обязательный | Описание |
|------|-----|--------------|----------|
| `storage.type` | string | да | Тип хранилища. Значение: `s3` |
| `storage.endpoint` | string | да | URL S3 endpoint |
| `storage.region` | string | нет | AWS region (default: `us-east-1`) |
| `storage.bucket` | string | да | Имя S3 bucket |
| `storage.access_key` | string | да | AWS Access Key ID |
| `storage.secret_key` | string | да | AWS Secret Access Key |
### Примеры для разных провайдеров
**AWS S3:**
```yaml
storage:
type: s3
endpoint: https://s3.amazonaws.com
region: eu-central-1
bucket: my-envs
access_key: AKIA...
secret_key: xxx...
```
**MinIO (self-hosted):**
```yaml
storage:
type: s3
endpoint: https://minio.myserver.com
bucket: envs
access_key: minioadmin
secret_key: minioadmin
```
**Cloudflare R2:**
```yaml
storage:
type: s3
endpoint: https://xxx.r2.cloudflarestorage.com
bucket: my-envs
access_key: xxx
secret_key: xxx
```
**DigitalOcean Spaces:**
```yaml
storage:
type: s3
endpoint: https://nyc3.digitaloceanspaces.com
region: nyc3
bucket: my-envs
access_key: xxx
secret_key: xxx
```
---
## Локальный конфиг (проектный)
**Путь:** `./aevs.yaml` (в корне проекта)
**Содержимое:**
```yaml
project: my-awesome-project # уникальное имя проекта
files: # список файлов для синхронизации
- .env.prod
- .env.dev
- .env.local
- docker/.env
- services/api/.env
```
### Поля
| Поле | Тип | Обязательный | Описание |
|------|-----|--------------|----------|
| `project` | string | да | Уникальное имя проекта (идентификатор в storage) |
| `files` | []string | да | Список относительных путей к файлам |
### Правила для `project`
- Должен быть уникальным в пределах bucket
- Допустимые символы: `a-z`, `0-9`, `-`, `_`
- Рекомендуется: kebab-case (`my-awesome-project`)
- Не должен содержать: пробелы, спецсимволы, `/`
### Правила для `files`
- Относительные пути от корня проекта
- Могут содержать поддиректории (`docker/.env`)
- При push проверяется существование каждого файла
- При pull создаются необходимые директории
---
## Приоритет конфигурации
```
1. Флаги командной строки (--config, --bucket, etc.)
2. Environment variables (AEVS_BUCKET, AEVS_ACCESS_KEY, etc.)
3. Глобальный конфиг (~/.config/aevs/config.yaml)
```
### Environment Variables
| Переменная | Описание |
|------------|----------|
| `AEVS_STORAGE_TYPE` | Тип хранилища |
| `AEVS_ENDPOINT` | S3 endpoint |
| `AEVS_REGION` | AWS region |
| `AEVS_BUCKET` | Имя bucket |
| `AEVS_ACCESS_KEY` | Access Key ID |
| `AEVS_SECRET_KEY` | Secret Access Key |
---
## Metadata файл
При каждом `push` создаётся `metadata.json` рядом с архивом.
**Путь в storage:** `{bucket}/{project}/metadata.json`
**Содержимое:**
```json
{
"updated_at": "2026-01-28T15:30:00Z",
"files": [
".env.prod",
".env.dev",
"docker/.env"
],
"machine": "MacBook-Pro.local",
"size_bytes": 1234
}
```
### Поля metadata
| Поле | Тип | Описание |
|------|-----|----------|
| `updated_at` | string (ISO 8601) | Время последнего push |
| `files` | []string | Список файлов в архиве |
| `machine` | string | Hostname машины, с которой сделан push |
| `size_bytes` | int | Размер архива в байтах |
Metadata используется для:
- Отображения информации в `aevs list`
- Проверки что именно будет скачано при `pull`