Skip to content

v1.2 — Production Hardening

Choose a tag to compare

@dripips dripips released this 01 May 16:13

v1.2 — Production Hardening

Production-ready: GDPR/152-ФЗ compliance, AI cost protection, backup/restore, error tracking, force-SSL.

🔒 Production defaults

  • force_ssl + secure cookies в production (toggle через DISABLE_SSL=true)
  • /up healthcheck исключён из SSL-redirect
  • Random seed-passwords (SecureRandom.alphanumeric(20)) вне dev — никаких password123 в проде

💾 Backup / Restore

  • scripts/backup.sh — pg_dump + tar storage + manifest, поддерживает docker compose ИЛИ direct DATABASE_URL
  • Ротация по HRMS_BACKUP_RETAIN (default 30)
  • scripts/restore.sh — требует YES-confirmation, не перезаписывает master.key

🤖 AI cost protection

  • AiBudgetGuard: hard-cap при HARD_CAP_MULTIPLIER × monthly_budget_usd (default 2.0×)
  • Блокирует RunAiTaskJob до конца месяца / увеличения бюджета
  • Cache: Rails.cache 60s — не крутит SUM(cost_usd) на каждом job-запуске

📋 GDPR / 152-ФЗ compliance

  • /profile/privacy с двумя действиями:
    • Export: GdprExporter → JSON со всеми данными (10 секций: account, profile, employment, documents, leaves, KPI, interviews, notifications, AI runs, audit log) — Article 15
    • Delete: GdprDeleter → анонимизация PII, audit-trail остаётся с whodunnit → deleted-user-N — Article 17
  • DELETE-confirmation required (типизация заглавными)

🚨 Error tracking

  • HrmsErrorSubscriber — централизованный Rails.error subscriber
  • log/errors.log (rotation: 5×10MB) с тегированными exception payload'ами
  • Опциональная отправка в Sentry — только если gem загружен (zero hard dependency)

🌍 i18n

  • 2197 / 2197 / 2197 ключей в ru/en/de — полный паритет
  • +13 privacy keys в каждой локали