180 lines
5.1 KiB
Markdown
180 lines
5.1 KiB
Markdown
# 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`
|