# Конфигурация

Конфигурация находится в `config/app.php`. Этот файл возвращает массив PHP; значения, зависящие от окружения, хранятся в неотслеживаемом файле `.env`.

## Значения окружения

```dotenv
APP_ENV=local
APP_DEBUG=false
APP_URL=http://localhost:8000
APP_KEY=
```

Создайте ключ шифрования командой `php elang key:generate`. Команда сохраняет его в `.env`, не выводя на экран. При замене ключа ранее зашифрованные данные становятся нечитаемыми.

## Чтение конфигурации

```php
use Elang\Support\Config;

$router->get('/application', fn (Config $config) => [
    'name' => $config->get('name', 'My application'),
]);
```

Ключи, разделённые точками, позволяют обращаться к вложенным массивам. `Config::env()` предназначен для файлов конфигурации, чтобы остальная часть приложения могла использовать уже разрешённую конфигурацию.

## Настройки для рабочей среды

Установите `APP_ENV=production`, `APP_DEBUG=false` и канонический HTTPS-адрес в `APP_URL`. Храните учётные данные вне публичного каталога. Почтовый транспорт по умолчанию отбрасывает сообщения, пока вы не настроите `MAILER_DSN`.

## Ограничения запросов

Сайт устанавливает `max_body_bytes` равным 16 КиБ, а `rate_limit` — 120 API-запросам в минуту на каждый определённый IP-адрес клиента. Задайте подходящие ограничения для своего приложения. При необходимости доверие к обратному прокси нужно настроить явно; произвольные перенаправленные заголовки по умолчанию не считаются доверенными.

## Файлы секретов контейнера

`APP_KEY_FILE` и `MAILER_DSN_FILE` могут ссылаться на доступные для чтения закрытые файлы по абсолютным путям вместо раскрытия их значений в конфигурации контейнера. Явно заданный непустой `APP_KEY` или `MAILER_DSN` имеет приоритет. Размер файлов ограничен 8192 байтами; отсутствие или недопустимость настроенного файла приводит к ошибке конфигурации, а не незаметной смене ключей. Ограничивайте права доступа и сохраняйте один и тот же ключ приложения для HTTP, CLI, обработчиков очереди и процессов WebSocket.

Локальный стек Compose сохраняет ключ разработки в закрытом хранилище и задаёт `APP_KEY_FILE`, поэтому `docker compose exec app php elang doctor` видит тот же ключ, что и веб-процесс. `key:generate` отказывается создавать конкурирующий ключ `.env`, пока настроен источник из файла секрета. Управляйте файлами ключей рабочей среды через менеджер секретов развёртывания; не меняйте ключи при обычном обновлении.
