Чеклист для продакшена
Прежде чем открыть ваш инстанс pipel8ne пользователям, пройдите этот чеклист.
Безопасность
- [ ]
JWT_SECRET— длинная случайная строка (64+ шестнадцатеричных символа, не заглушка) - [ ]
SECRETS_ENCRYPTION_KEY— ровно 32 байта (64 шестнадцатеричных символа, не заглушка) - [ ] Оба секрета сохранены в резервную копию в безопасном месте (менеджер паролей, менеджер секретов)
- [ ] Ни один секрет не зафиксирован в системе контроля версий
- [ ] Аутентификация MongoDB включена — не запускайте MongoDB без имени пользователя/пароля
- [ ] MongoDB не открыта публично — привязана к
localhostили используется внутренняя сеть Docker - [ ] HTTPS настроен — используется обратный прокси (Nginx, Caddy) с действительным TLS-сертификатом
- [ ]
NODE_ENV=productionустановлен — это отключает Swagger UI на/docs - [ ] Публичная регистрация отключена после создания аккаунтов для команды (Настройки → Администрирование)
Надёжность
- [ ] Автоматические резервные копии MongoDB настроены
- [ ] Бэкенд управляется менеджером процессов (PM2, systemd, политика перезапуска Docker) для восстановления после сбоев
- [ ] Проверка здоровья — убедитесь, что бэкенд отвечает:
curl http://localhost:3000/api/auth/registration-status
Сеть
- [ ] Правила брандмауэра — только порты 80 и 443 (или порт прокси) должны быть открыты для интернета
- [ ] Порт MongoDB 27017 закрыт от внешнего доступа
Обслуживание
- [ ] Политика обновлений — план, как вы будете получать обновления (
git pull+ пересборка + перезапуск) - [ ] Мониторинг дискового пространства — данные MongoDB и Docker-тома растут со временем
Укрепление MongoDB
При запуске MongoDB в Docker убедитесь, что файл Compose использует аутентификацию:
yaml
services:
mongo:
image: mongo:7
environment:
MONGO_INITDB_ROOT_USERNAME: pipel8ne
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
volumes:
- mongo_data:/data/db
# НЕ открывайте порт 27017 хосту в продакшене
# ports:
# - "27017:27017"Добавьте MONGO_PASSWORD в ваш .env.
Рекомендуемая архитектура (один сервер)
Интернет
│
▼
[Nginx + TLS :443]
│
▼
[pipel8ne бэкенд :3000]
│
▼
[MongoDB :27017] ← только внутренний, не открытВсе сервисы на одном хосте. Nginx обрабатывает TLS и проксирует запросы к бэкенду. MongoDB слушает только на localhost (или во внутренней сети Docker).
Рекомендуемая архитектура (раздельные сервисы)
Интернет
│
▼
[Балансировщик нагрузки + TLS]
│
▼
[pipel8ne бэкенд] (возможно несколько экземпляров)
│
▼
[MongoDB Atlas или управляемый MongoDB] ← требуется TLS-соединениеИспользуйте MongoDB Atlas или управляемого провайдера баз данных для автоматических резервных копий, репликации и отказоустойчивости.
