HoneyNotify operations
Launch checks
- Keep MySQL and Redis private. Production currently binds both to loopback; use WireGuard-only listeners when workers move to a dedicated host. Verify public port scans before launch.
- Enable Redis AOF and alert on pending Stream age, retry-set size, DLQ length, memory and evictions.
- The scheduled
Production MonitorGitHub workflow checks/health, all public hosts, HTTPS redirects, installer closure and security headers every 15 minutes. Add vendor alerts for worker restarts, queue lag, provider failure rate, invalid-token rate, MySQL saturation and disk capacity. - Back up MySQL and the encrypted
APP_KEYseparately; perform restore tests quarterly. - Run workers under systemd and send
SIGTERMfor graceful shutdown after the current job. - Review
pushsaas:dead-letterbefore replaying jobs. Correct the root cause and use a new idempotency key only when a genuinely new send is intended.
Security
- Rotate API keys and provider credentials without redisplaying stored secrets.
- Keep separate Redis ACL identities for the web application, workers, and root-only operations; keep worker MariaDB grants restricted to delivery tables.
- Configure
MAIL_FROMand verify server mail delivery for password resets. Owners must enrol standards-based TOTP MFA before using the dashboard. - Login and MFA attempts are throttled through Redis with a session fallback. Organisation owners and admins can invite, re-role, and remove non-owner team members; invitation links expire after 24 hours.
- Package quotas, organisation/app request limits, content validation, abuse flags, and platform-admin review controls are enforced in the application.
- Log administrative actions and retain logs according to the organisation's policy.
- Run dependency, SAST, DAST and penetration testing before public availability.
Privacy
- Treat device tokens, external user IDs, tags and event metadata as personal data.
- Configure retention periods and review the Terms, Acceptable Use Policy, Privacy Notice, DPA, subprocessor list, and breach response with qualified counsel.
bin/retention.phpremoves expired disabled devices, events, and delivery attempts. Account owners can export data, schedule deletion with a seven-day safety period, and cancel while the request remains pending.
Scaling
Add worker processes first, then worker nodes against the same private MySQL and Redis. Split Redis onto queue-01 before worker memory or I/O contention becomes material. Database replicas and an analytics store come after measured query pressure justifies them.