# 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`