Окружения и конфигурация
Предлагается изолировать local, staging и production по данным, секретам и адресам публикаций.
Тестовая генерация не должна менять реальный сайт или использовать его закрытые материалы.
Окружения
| Окружение | Назначение | Статус |
|---|---|---|
| Local | Разработка и проверки конкретного checkout | Команды запуска есть в репозитории |
| Staging | Генерация, публикация, миграции и восстановление на тестовых данных | Требуется подготовить и проверить |
| Production | Сайты пользователей и рабочие данные | Полный сервис в рамках этого аудита не подтверждён |
| Документация | Публичное описание продукта | Работает отдельно на DigitalOcean |
Для staging нужны отдельные database credentials, пространство файлов и тестовый домен. Тесты не используют production-ключи и не запускают массовые генерации за счёт пользователей.
Локальная работа
Запуск и назначение портов определяют AGENTS.md, Makefile и реестр портов текущей рабочей среды. Используем make setup, make dev, make ports. Для работы только с документацией достаточно установки её зависимостей и make dev-docs DOCS_PORT=<свободный-разрешённый-порт>.
В корневом checkout обнаружена незакоммиченная миграция локальных портов; поэтому здесь не закрепляется ещё одна конкурирующая таблица адресов. После изменения checkout проверяем фактический вывод make ports. Остановка checkout через make archive сохраняет общую базу; make down останавливает и её.
Конфигурация приложения
| Назначение | Существующие переменные |
|---|---|
| База | DATABASE_URL |
| Авторизация | JWT_SECRET, JWT_EXPIRES_IN |
| Шифрование настроек | SETTINGS_KEY, при ротации SETTINGS_KEY_PREVIOUS |
| Публичный API | PUBLIC_URL, CORS_ORIGIN |
| Локальные файлы | STORAGE_DRIVER=local, STORAGE_ROOT |
| S3-совместимые файлы | STORAGE_DRIVER=s3, S3_BUCKET, S3_ENDPOINT, S3_ACCESS_KEY, S3_SECRET_KEY |
| Дополнительные параметры S3 | S3_REGION, S3_FORCE_PATH_STYLE |
Значения секретов не помещаем в документацию, клиентскую сборку или логи. Настройки интеграций в текущем приложении также могут храниться в базе; перенос окружения требует согласованного переноса зашифрованных данных и ключа, а не только изменения env.
В существующем образе публичные настройки Nuxt встраиваются при сборке. /api и /admin/ определены в Dockerfile; смена runtime-переменной не переписывает уже собранный JavaScript.
Предлагаемое размещение
DigitalOcean остаётся кандидатом для платформы: приложение, отдельный исполнитель, PostgreSQL и S3-совместимые файлы. Cloudflare выбран целевым механизмом доменов в разделе публикации. Размеры ресурсов, регионы, тарифы и конкретные продукты для базы/очереди ещё не утверждены и не закуплены.