Добавить в избранное
Комментарии

Чек-лист перед первым продом

Чтение ≈ 3 мин

Сводный список того, что должно быть готово до того, как на сайт придут первые пользователи и платежи: сервер, деплой, бэкапы, nginx, приложение, мониторинг.

картинка к записи Чек-лист перед первым продом

Первый релиз всегда торопят, и самые дорогие ошибки делаются именно тогда: бэкапов ещё нет, тестовый режим платёжки забыли выключить, DEBUG включён, отката нет. Ниже — короткий список, который стоит пройти до открытия сайта. Подробности по каждому разделу — в уроках курса «DevOps для веб-проекта на одном VPS».

Сервер

  • [ ] Вход по SSH только по ключу, PasswordAuthentication no, PermitRootLogin no (или prohibit-password).
  • [ ] Ключ разработчика защищён пассфразой и загружается в ssh-agent, а резервная копия ключа хранится в надёжном месте.
  • [ ] Файрвол (ufw, nftables): открыты только 22, 80 и 443. Порты БД, Redis и приложения наружу закрыты.
  • [ ] Postgres и Redis слушают только localhost, у Redis задан пароль.
  • [ ] Включены автоматические обновления безопасности (unattended-upgrades).
  • [ ] Настроены часовой пояс и NTP, в журнале и логах правильное время.
  • [ ] Есть swap или включён systemd-oomd с понятной политикой: на маленьком VPS сборка фронта или pip install без этого убивают сайт.

Деплой

  • [ ] Деплой выполняется одной командой и заливает ровно закоммиченный код.
  • [ ] На проде нет .git, .env не раздаётся (проверено через curl).
  • [ ] Перед заливкой создаётся снапшот, откат выполняется одной командой и проверен.
  • [ ] На проде есть REVISION с sha, веткой, датой и автором деплоя.
  • [ ] Перед миграциями делается бэкап БД, при ошибке миграции деплой останавливается.
  • [ ] После рестарта скрипт ждёт /health/ и проходит smoke ключевых страниц.
  • [ ] Есть блокировка flock от параллельного деплоя.
  • [ ] CI прогоняет тесты на той же СУБД, что и прод.

Процессы

  • [ ] Приложение, воркеры и SSR работают как юниты systemd с Restart=, а при user-юнитах включён linger.
  • [ ] Приложение слушает 127.0.0.1 или unix-сокет.
  • [ ] Периодические задачи запускаются таймерами с flock, расписание лежит в репозитории.
  • [ ] Логи ротируются (journald с лимитом или logrotate), диск не заполнится за месяц.

Бэкапы

  • [ ] Ежедневный дамп БД на сервере по таймеру, права 600, проверка дампа, ротация.
  • [ ] Офсайт-копия (restic в S3 или на другой сервер), пароль хранится вне сервера.
  • [ ] Загрузки пользователей тоже бэкапятся.
  • [ ] Секреты лежат в зашифрованной копии, и известно, где именно.
  • [ ] Восстановление проверено хотя бы один раз до запуска, а не в день аварии.

nginx и HTTPS

  • [ ] TLS-сертификат с автопродлением, проверено через certbot renew --dry-run.
  • [ ] Редирект http на https, HSTS включён (сначала с коротким max-age).
  • [ ] Заголовки X-Content-Type-Options, Referrer-Policy, X-Frame-Options или CSP frame-ancestors.
  • [ ] X-Real-IP и X-Forwarded-Proto перезаписываются, XFF дописывается.
  • [ ] /media/ и uploads отдаются с nosniff и CSP sandbox, html/svg — как attachment.
  • [ ] Приватные файлы закрыты через ^~ или отдаются через X-Accel-Redirect.
  • [ ] Хешированная статика кэшируется на год, index.html отдаётся с no-cache.
  • [ ] Включено сжатие gzip или brotli.
  • [ ] client_max_body_size соответствует реальным лимитам загрузки.

Приложение

  • [ ] DEBUG выключен, Swagger и debug-панели закрыты или выключены.
  • [ ] Встроенная проверка конфигурации проходит без предупреждений (manage.py check --deploy, аналог для вашего стека), и деплой останавливается при её провале.
  • [ ] Cookie сессии и CSRF помечены Secure, HttpOnly, SameSite.
  • [ ] Платёжная система переведена в боевой режим, вебхук сверяет платёж через API провайдера.
  • [ ] Секреты лежат в env или секрет-файле с правами 600, а не в репозитории. Дефолтные и тестовые ключи заменены.
  • [ ] Вход, регистрация, сброс пароля и 2FA ограничены rate-limit по доверенному IP.
  • [ ] Все объекты скоупятся по владельцу (IDOR), а изменения выполняются только через POST.
  • [ ] Загрузки файлов проверяются по содержимому.
  • [ ] Письма уходят с настроенными SPF, DKIM и DMARC, иначе они попадут в спам.
  • [ ] Есть страницы 404 и 500 без трейсбэков.

Мониторинг

  • [ ] Внешний uptime-мониторинг /health/ с уведомлением в мессенджер.
  • [ ] Сбор ошибок (Sentry или аналог) с тегом релиза из REVISION, без персональных данных.
  • [ ] Пинг «мёртвого выключателя» от бэкапа и важных таймеров.
  • [ ] Алерт на заполнение диска (больше 80%) и на срок действия сертификата.

Юридическое и организационное

  • [ ] Политика обработки персональных данных и согласия в формах.
  • [ ] Записано, где лежат доступы: регистратор домена, DNS, хостинг, платёжка, почта, хранилище бэкапов. Доступ не должен держаться на одном человеке.
  • [ ] Есть план «что делать, если сайт лежит» (см. статью про откат за минуту).

Пройдите список и честно отметьте невыполненное. Всё, что осталось без галочки, — это известный риск, который вы приняли осознанно, а не сюрприз в день запуска.

Поделиться
Понравился материал?
Проголосовало пользователей: 0Пожалуйста проголосуйте!

Комментарии

Свернуть форму

Проверяем авторизацию…