docs: email infra rubis.pro (Resend sortant + OVH MX entrant)
All checks were successful
Build & Deploy Landing / build-and-deploy (push) Successful in 24s
All checks were successful
Build & Deploy Landing / build-and-deploy (push) Successful in 24s
Documentation post-migration du setup email : - /docs/tech/backend.md §12.5 : architecture des 2 flux (Resend pour le sortant transactionnel via send.rubis.pro, OVH MX Plan pour l'entrant humain via @ rubis.pro) - /CLAUDE.md : tableau récap email infra + maj domaine principal rubis.pro / app.rubis.pro, suppression de la question ouverte "domaine définitif" (résolue) et "endpoint waitlist" (remplacé par CTA app) - /.claude/deploy-memory.md : section migration rubis.pro marquée ✅ avec checklist décommissionnement legacy - /landing/confidentialite.html : remplace privacy@rubis.pro par contact@rubis.pro (alignement avec les boîtes OVH créées) Adresses opérationnelles : - contact@rubis.pro (général + RGPD) - dev@rubis.pro (notifs techniques) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
1c5a58e09a
commit
1acb273c1d
@ -202,14 +202,27 @@ challenge LE).
|
||||
|
||||
---
|
||||
|
||||
## Quand le domaine définitif sera acheté (`rubis.pro`)
|
||||
## Domaine actuel — `rubis.pro` ✅ migré (2026-05-07)
|
||||
|
||||
1. Records DNS chez OVH : A `@`, A `app`, MX/SPF/DKIM pour Resend
|
||||
2. Modifier les rules dans `rubis.yml.j2` et `rubis-app.yml.j2` (Host)
|
||||
3. Replay `gateway.yml`
|
||||
4. Maj `MAIL_FROM_ADDRESS=relances@rubis.pro` dans le secret
|
||||
5. (Optionnel) supprimer les A records `rubis.pro` et
|
||||
`app.rubis.pro` chez OVH
|
||||
- **Landing** : https://rubis.pro
|
||||
- **App SaaS** : https://app.rubis.pro
|
||||
- **Compat legacy** : `rubis.arthurbarre.fr` / `app.rubis.arthurbarre.fr` → 301 vers `rubis.pro` / `app.rubis.pro` (Traefik dynamic config dans `~/dev/perso/proxmox/ansible/roles/traefik/templates/rubis*.yml.j2`)
|
||||
|
||||
### Email rubis.pro
|
||||
|
||||
| Flux | Provider | Setup | Adresses |
|
||||
|---|---|---|---|
|
||||
| **Sortant** (transactionnel) | Resend | DKIM + SPF + DMARC sur `send.rubis.pro` (verified dashboard Resend) | `relances@rubis.pro` (via `MAIL_FROM_ADDRESS` secret K3s) |
|
||||
| **Entrant** (humain) | OVH MX Plan (gratuit) | MX `@` → OVH (auto-configuré via Espace Client) | `contact@rubis.pro`, `dev@rubis.pro` |
|
||||
|
||||
⚠️ Resend Inbound (toggle "Enable Receiving") doit rester **OFF** : il veut le MX `@`, qui est pris par OVH MX Plan.
|
||||
|
||||
### Décommissionnement progressif `arthurbarre.fr` (à faire dans 30-90 jours)
|
||||
|
||||
Quand confiance acquise et plus aucune référence vivante :
|
||||
1. Vire les blocs `rubis-legacy-redirect` / `rubis-app-legacy-redirect` (et middlewares) dans `rubis*.yml.j2`
|
||||
2. `ansible-playbook playbooks/gateway.yml`
|
||||
3. Supprime A records `rubis` (id 5413044152) + `app.rubis` (id 5413305619) dans la zone DNS OVH d'`arthurbarre.fr`
|
||||
|
||||
---
|
||||
|
||||
|
||||
23
CLAUDE.md
23
CLAUDE.md
@ -153,20 +153,29 @@ Voir `/docs/decisions.md` pour le log complet avec rationale.
|
||||
|
||||
## Déploiement
|
||||
|
||||
- **Image** : `git.arthurbarre.fr/ordinarthur/rubis:latest`
|
||||
- **Domaine actuel** (temporaire) : https://rubis.pro
|
||||
- **Build** : `COPY landing/` → nginx servi sur port 80
|
||||
- **Domaine principal** : https://rubis.pro (landing) + https://app.rubis.pro (SaaS V1)
|
||||
- **Image landing** : `git.arthurbarre.fr/ordinarthur/rubis:latest`
|
||||
- **Build landing** : `COPY landing/` → nginx servi sur port 80
|
||||
- **Compat** : `rubis.arthurbarre.fr` / `app.rubis.arthurbarre.fr` redirigent en 301 vers `rubis.pro` / `app.rubis.pro` (config Traefik dans repo proxmox)
|
||||
- Voir `.claude/deploy-memory.md` pour la procédure complète.
|
||||
|
||||
## Email infrastructure (`rubis.pro`)
|
||||
|
||||
Deux flux distincts qui cohabitent sur le même domaine via des sous-domaines DNS séparés :
|
||||
|
||||
| Flux | Provider | Adresse | DNS clés |
|
||||
|---|---|---|---|
|
||||
| **Sortant** (relances, check-in, auth) | Resend | `relances@rubis.pro` | `send.rubis.pro` (MX + SPF), `resend._domainkey` (DKIM), `_dmarc` |
|
||||
| **Entrant** (humain) | OVH MX Plan | `contact@rubis.pro` (général + RGPD), `dev@rubis.pro` (notifs tech) | MX `@` → `mx*.mail.ovh.net.` |
|
||||
|
||||
Détails dans `/docs/tech/backend.md` §12.5.
|
||||
|
||||
## Questions ouvertes
|
||||
|
||||
- **Stack technique app produit** à formaliser (la landing tourne en static nginx, mais le SaaS lui-même reste à scoper)
|
||||
- **Conversion 1 rubis = 10 min** validée mais à confirmer en user testing après MVP
|
||||
- **Wordmark "rubis" avec gem-i** (direction C) à monter en complément du logo A à un moment
|
||||
- **Provider OCR** à benchmarker (Mindee, Document AI, Textract, Tesseract)
|
||||
- **Endpoint waitlist** à câbler dans `/landing/index.html` (Resend, Formspree, ou API perso)
|
||||
- **Domaine définitif** à acheter (le sous-domaine actuel est temporaire)
|
||||
|
||||
---
|
||||
|
||||
*Dernière mise à jour : 2026-05-05 · Maintenu par Arthur + Claude.*
|
||||
*Dernière mise à jour : 2026-05-07 · Maintenu par Arthur + Claude.*
|
||||
|
||||
@ -854,6 +854,58 @@ Recommandation V1 : **Resend** comme default, abstraction `@adonisjs/mail` perme
|
||||
- Vérification de l'adresse expéditrice (DNS configuré, SPF + DKIM signés)
|
||||
- Mention "Envoyé via Rubis" obligatoire en footer (transparence pour le destinataire)
|
||||
|
||||
### 12.5 Infrastructure email du domaine `rubis.pro`
|
||||
|
||||
Deux flux distincts, deux providers, **pas de conflit** parce qu'ils utilisent des
|
||||
sous-domaines différents au niveau DNS.
|
||||
|
||||
#### Sortant (transactionnel) — Resend
|
||||
|
||||
Pour les emails **envoyés depuis l'app** (relances clients, check-in utilisateur,
|
||||
auth/password-reset, notifications billing).
|
||||
|
||||
| Aspect | Valeur |
|
||||
|---|---|
|
||||
| Provider | [Resend](https://resend.com) (cf. ADR-021) |
|
||||
| Driver AdonisJS | `transports.resend()` (`config/mail.ts`) |
|
||||
| Adresse expéditrice | `relances@rubis.pro` (configurable via `MAIL_FROM_ADDRESS`) |
|
||||
| Auth DNS | DKIM (TXT `resend._domainkey`) + SPF (TXT `send`) + return-path MX (`send`) |
|
||||
| DMARC | TXT `_dmarc` → `v=DMARC1; p=none;` (mode monitoring) |
|
||||
| Click tracking | CNAME `mail.rubis.pro` → `links1.resend-dns.com.` (optionnel) |
|
||||
|
||||
**Délivrabilité** : tous les records DNS doivent être en statut "Verified" dans le dashboard Resend
|
||||
avant de switcher `MAIL_FROM_ADDRESS` sur `relances@rubis.pro` côté secret K3s.
|
||||
|
||||
#### Entrant (humain) — OVH MX Plan
|
||||
|
||||
Pour les emails **reçus par l'équipe** (questions support, demandes RGPD,
|
||||
factures fournisseurs, etc.). **Pas de webhook**, vraies boîtes mail OVH avec
|
||||
IMAP/SMTP/webmail standard.
|
||||
|
||||
| Adresse | Usage |
|
||||
|---|---|
|
||||
| `contact@rubis.pro` | Contact général + demandes RGPD (ref. mentions légales / confidentialité) |
|
||||
| `dev@rubis.pro` | Notifs techniques, abonnements aux outils dev (Gitea, monitoring, etc.) |
|
||||
|
||||
| Aspect | Valeur |
|
||||
|---|---|
|
||||
| Provider | OVH MX Plan (gratuit, inclus avec le domaine acheté chez OVH) |
|
||||
| Capacité | 5 boîtes 5 Go par domaine |
|
||||
| MX records | Auto-configurés par OVH (`mx*.mail.ovh.net.`) lors de l'activation MX Plan |
|
||||
| Webmail | https://www.ovh.com/mail/ |
|
||||
| Apps mobiles / desktop | IMAP `ssl0.ovh.net:993`, SMTP `ssl0.ovh.net:465` |
|
||||
|
||||
**Important — coexistence avec Resend** :
|
||||
- Resend utilise le sous-domaine **`send.rubis.pro`** pour son MX return-path.
|
||||
- OVH MX Plan utilise l'apex **`@`** (`rubis.pro`) pour la réception.
|
||||
- Les deux MX cohabitent sans conflit dans la zone DNS, chacun sur son hostname.
|
||||
|
||||
⚠️ Si on active un jour Resend Inbound (V2 — capter les replies clients pour
|
||||
auto-bumper le statut invoice), il **faudra choisir** entre OVH MX Plan et Resend
|
||||
Inbound : les deux veulent le MX `@`. Plan probable : on garde OVH pour
|
||||
`contact@`/`dev@`/etc. (humains) et on crée un sous-domaine dédié style
|
||||
`replies.rubis.pro` pour Resend Inbound (sender Reply-To = `<token>@replies.rubis.pro`).
|
||||
|
||||
---
|
||||
|
||||
## 13. Background jobs
|
||||
|
||||
@ -65,7 +65,7 @@
|
||||
<div class="callout">
|
||||
<p>
|
||||
<strong>Pour toute question liée à vos données</strong> :
|
||||
<a href="mailto:privacy@rubis.pro">privacy@rubis.pro</a>
|
||||
<a href="mailto:contact@rubis.pro">contact@rubis.pro</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -221,7 +221,7 @@
|
||||
</ul>
|
||||
<p>
|
||||
Pour exercer ces droits, écrivez-nous à
|
||||
<a href="mailto:privacy@rubis.pro">privacy@rubis.pro</a> en
|
||||
<a href="mailto:contact@rubis.pro">contact@rubis.pro</a> en
|
||||
précisant l'email associé à votre compte. Nous répondons dans un délai maximal d'un
|
||||
mois (extensible à trois mois pour les demandes complexes, avec information dans le
|
||||
mois initial).
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user