> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Окружение и конфигурация

Одна валидированная схема для всего воркспейса.

## Внесите одно изменение конфигурации и проверьте его.

Начните с работающего веб-приложения. В редакторе открываем apps/web/.env.local; если он не существует, скопируйте туда .env.example, используя веб-руководство. Для безопасной первой проверки найдите EMAIL_PROVIDER=local и оставьте его локальным. Этот параметр отправляет электронную почту продукта в локальный предварительный просмотр, а не в реальный почтовый ящик. Не вставляйте строки KEY=value в терминал.

Для каждой службы, которую вы включаете, следуйте руководству по настройке этого поставщика, замените только названные значения, сохраните файл, остановите веб-сервер с помощью Ctrl + C и перезапустите с помощью команды ниже. Если при проверке будет обнаружен отсутствующий ключ, повторно откройте этот файл и сравните этот ключ с руководством поставщика. Синхронизируйте корневой файл .env только для значений, используемых при миграции базы данных; копирование только его не приводит к настройке Next.js.

[Поиск конфигурационного ключа](https://supastack.dev/ru/docs/web/project-structure.md)

[Узнайте, как запустить команду и отредактировать файл](https://supastack.dev/ru/docs/web/terminal-basics.md)

```
corepack pnpm --filter @supastack/web dev
```


## Начните с примера окружения

Корневой .env.example — инвентарь конфигурации. Общая валидация живёт в packages/config. Просматривайте выбранное окружение приложения и режимы провайдеров вместе; локальный интерфейс — не стратегия продакшен-креденшел.

Режим эталона без креденшел требует локальной/тестовой конфигурации приложения и fake/локальных провайдеров. Выбор продакшен-провайдера меняет требования рантайма.


## Держите секреты за API

Секреты аутентификации, креденшелы базы, ключи провайдеров, секреты Stripe и креденшелы Trigger — только серверные. Никогда не префиксуйте их NEXT_PUBLIC_ или EXPO_PUBLIC_. Не печатайте их при установке и не включайте в ответы об ошибках.

Браузер получает публичную конфигурацию и разрешённые алиасы моделей. Владение воркспейсом, решения о правах, бюджеты и выбор провайдера остаются серверно-принудительными.


## Проверяйте изменение перед использованием

Валидируйте конфигурацию через существующий пакет config и запускайте соответствующие детерминированные тесты. Используйте отдельно подключаемый путь smoke провайдеров, когда готовы проверить реальные интеграции.

```
corepack pnpm test
corepack pnpm check
corepack pnpm build
```


## Настройка и конфигурация

packages/config — единственное место, парсящее process.env: zod-схема производит типизированные ServerConfig и PublicConfig, а выбор провайдера выражается kinds — providers.ai, providers.billing, providers.email, providers.jobs, providers.storage разрешаются каждый в именованный адаптер плюс его обязательные поля.

Включение провайдера делает его учётные данные обязательными: включение социального входа, kind хранилища s3 или kind почты resend проваливает запуск, называя недостающую переменную, вместо сюрприза в рантайме позже.

```
STORAGE_PROVIDER=s3
STORAGE_BUCKET=kit
STORAGE_ENDPOINT=https://s3.example
STORAGE_PUBLIC_BASE_URL=https://cdn.example
# → config rejects the env if a required field is missing
```


## Рабочий процесс внедрения

Читайте конфигурацию через parseServerConfig на серверной границе и передавайте типизированное значение внутрь — не трогайте process.env внутри кода функций. Публичная конфигурация — отдельный, намеренно маленький объект, безопасный для сериализации клиенту.

Специфичный для продукта env принадлежит собственной схеме потребляющего продукта. Сопротивляйтесь разрастанию схемы кита под нужды одного продукта.


## Проверка и устранение неполадок

Запускайте тесты пакета config после изменения схемы и проверяйте, что недостающая обязательная переменная называет себя в ошибке. Env, который парсится локально, но не в продакшене, обычно означает недокументированное обязательное поле.


## Вперёд

[Модуль i18n](https://supastack.dev/ru/docs/modules/i18n.md)
