feat: production email (Resend) + offsite backup (B2)
Resend mail transport:
- composer require resend/resend-laravel (v1.4)
- Laravel 11 ships the 'resend' mailer config in config/mail.php + services
- To switch to production email: set MAIL_MAILER=resend + RESEND_API_KEY,
register the domain at resend.com/domains, and add the TXT + DKIM CNAME
records in Cloudflare. .env.example documents the required steps.
Backblaze B2 offsite backup:
- New filesystems 'b2' disk (S3-compatible, env: B2_KEY/SECRET/BUCKET/REGION/ENDPOINT)
- BackupAllTenantsCommand: after writing each tenant's zip to local disk, it
uploads the same file to the b2 disk under {YYYY-MM-DD}/{slug}.zip — only
when both B2_KEY and B2_BUCKET are set, so unconfigured installs are no-op
- Without offsite, backups live on the same VPS as production: a single
hardware failure loses everything. B2 + Resend together make the install
genuinely production-ready (people get email + offsite backup).
Tests (2 new):
- backup uploads to b2 (fake disk) when configured
- backup skips offsite when env vars not present
Full suite: 140 passed. Force-rebuild deploy required so composer install
picks up resend/resend-php.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+16
-1
@@ -48,7 +48,10 @@ REDIS_DB=0
|
||||
# Broadcasting (Reverb — adăugăm la nevoie)
|
||||
BROADCAST_CONNECTION=log
|
||||
|
||||
# Mail — Mailpit intern
|
||||
# Mail — Mailpit intern (dev) sau Resend (prod)
|
||||
# Dev: lasă smtp + Mailpit. Prod: setează MAIL_MAILER=resend + RESEND_API_KEY,
|
||||
# înregistrează domeniul în https://resend.com/domains și adaugă DNS-urile
|
||||
# (TXT + DKIM CNAME-uri) în Cloudflare. Verifică în dashboard înainte de trafic.
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=autocrm-mailpit
|
||||
MAIL_PORT=1025
|
||||
@@ -58,6 +61,9 @@ MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS="noreply@service.mir.md"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
# Resend API — necesar dacă MAIL_MAILER=resend
|
||||
RESEND_API_KEY=
|
||||
|
||||
# Web Push (VAPID) — generate with: php artisan push:vapid
|
||||
VAPID_SUBJECT=mailto:admin@service.mir.md
|
||||
VAPID_PUBLIC_KEY=
|
||||
@@ -69,6 +75,15 @@ VAPID_PRIVATE_KEY=
|
||||
HEALTH_ALERT_BOT_TOKEN=
|
||||
HEALTH_ALERT_CHAT_ID=
|
||||
|
||||
# Backblaze B2 (S3-compatible) — offsite backup target for backup:tenants.
|
||||
# Creează un bucket privat + Application Key cu acces la el. Fără aceste env
|
||||
# vars, backup-urile rămân doar pe VPS (single point of failure).
|
||||
B2_KEY=
|
||||
B2_SECRET=
|
||||
B2_BUCKET=
|
||||
B2_REGION=us-west-002
|
||||
B2_ENDPOINT=https://s3.us-west-002.backblazeb2.com
|
||||
|
||||
# Storage — local pentru MVP, S3-compatible mai târziu
|
||||
FILESYSTEM_DISK=local
|
||||
|
||||
|
||||
Reference in New Issue
Block a user