Recentrer ce dépôt sur l'infrastructure, pas sur les sites
Ce dépôt parle du serveur ; les sites parlent d'eux-mêmes dans leur propre dépôt. Dupliquer leurs procédures ici garantissait qu'elles divergent. Sortent donc : les procédures de déploiement détaillées de static et du wiki, et la section « développement local ». À leur place, un tableau qui dit seulement **où** chercher — y compris pour la messagerie, dont le paragraphe d'avertissement ajouté ce matin décrivait le site et non la machine. Le courrier sortant, les certificats et les sauvegardes deviennent des renvois vers infra/docs/, où le détail vit désormais. Trois sections que j'avais écrites ici ce matin et qui y faisaient double emploi : une information écrite à deux endroits est une information qui sera fausse à l'un des deux. Restent ce qui est propre à la machine : le serveur lui-même, les bases, le SSO, les comptes, les credentials, et la carte de ce qu'elle héberge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SFbwnJurBwTs7x7t93ecku
This commit is contained in:
parent
cf89adbe7d
commit
abbef2304c
1 changed files with 33 additions and 80 deletions
113
README.md
113
README.md
|
|
@ -33,63 +33,28 @@ Ces projets ont leur propre dossier, au même niveau que celui-ci — un dépôt
|
||||||
|
|
||||||
Leurs procédures de déploiement sont décrites dans leur propre README.
|
Leurs procédures de déploiement sont décrites dans leur propre README.
|
||||||
|
|
||||||
> **La messagerie ne se déploie pas comme les autres.** owni n'en est pas un
|
|
||||||
> clone : la mise à jour s'y fait par **copie de fichiers, base d'abord, code
|
|
||||||
> ensuite**, et non par `git pull`. La procédure et les pièges qu'elle
|
|
||||||
> désamorce sont dans `docs/installation.md` de ce dépôt. En service depuis le
|
|
||||||
> 22/09/2026 — 256 abonnés, un worker appelé chaque minute, trois boîtes
|
|
||||||
> relevées en IMAP : ce qui casse casse pour de vrai.
|
|
||||||
|
|
||||||
Gitea : **https://gitea.alpinux.org/alpinux.cedrica5l**
|
Gitea : **https://gitea.alpinux.org/alpinux.cedrica5l**
|
||||||
ISPConfig : **https://owni.alpinux.org:8080**
|
ISPConfig : **https://owni.alpinux.org:8080**
|
||||||
AlpID (SSO) : **https://alpid.alpinux.org** — realm `master`
|
AlpID (SSO) : **https://alpid.alpinux.org** — realm `master`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Procédure de déploiement
|
## Déployer un site
|
||||||
|
|
||||||
### Vue d'ensemble
|
**Chaque projet décrit son déploiement dans son propre dépôt.** Ce dépôt-ci
|
||||||
|
parle du serveur, pas des sites qu'il héberge : dupliquer les procédures ici
|
||||||
|
garantirait qu'elles divergent.
|
||||||
|
|
||||||
| Projet | Méthode | Commande |
|
| Projet | Où est la procédure |
|
||||||
|--------|---------|----------|
|
|---|---|
|
||||||
| `home` | git pull sur serveur | `ssh alpinux.org "cd <web root> && git pull"` |
|
| `static` | `alpinux-static/README.md` — `scripts/deploy-app.sh`, `scripts/push-assets.sh` |
|
||||||
| `static` (app) | rsync local + restart | `cd ~/Projects/alpinux.static && scripts/deploy-app.sh` |
|
| `wiki` | webhook Gitea à chaque push ; <https://wiki.alpinux.org/technique/deploiement-wiki/> |
|
||||||
| `static` (assets) | rsync local | `cd ~/Projects/alpinux.static && scripts/push-assets.sh` |
|
| `home` | `git pull` sur le serveur |
|
||||||
|
| `messagerie` | `alpinux.messagerie/docs/installation.md` — **copie de fichiers, base d'abord** |
|
||||||
|
| autres | le README du dépôt concerné |
|
||||||
|
|
||||||
Dans tous les cas : versionner avec `git push` **avant** de déployer.
|
Dans tous les cas : versionner avec `git push` **avant** de déployer.
|
||||||
|
|
||||||
### static.alpinux.org
|
|
||||||
|
|
||||||
Le détail (app Flask et assets CDN) est dans `~/Projects/alpinux.static/README.md`.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd ~/Projects/alpinux.static
|
|
||||||
git push origin main # versionner d'abord
|
|
||||||
scripts/deploy-app.sh # app Flask → /opt/static-cdn + restart service
|
|
||||||
scripts/push-assets.sh # logo/, wiki/, stats/, error/ → web root ISPConfig
|
|
||||||
```
|
|
||||||
|
|
||||||
### Wiki
|
|
||||||
|
|
||||||
Rien à faire : un webhook Gitea construit et met en ligne à chaque push sur `main`.
|
|
||||||
Voir https://wiki.alpinux.org/technique/deploiement-wiki/
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Développement local
|
|
||||||
|
|
||||||
| Projet | Commande | URL |
|
|
||||||
|--------|----------|-----|
|
|
||||||
| `~/Projects/alpinux.static` | `python app/app.py` | http://localhost:5003 |
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd <projet>
|
|
||||||
python3 -m venv venv && source venv/bin/activate
|
|
||||||
pip install -r requirements.txt
|
|
||||||
cp .env.example .env && nano .env
|
|
||||||
flask run --port <port>
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Authentification AlpID
|
## Authentification AlpID
|
||||||
|
|
@ -173,31 +138,24 @@ Cloud-init réseau désactivé : `/etc/cloud/cloud.cfg.d/99-disable-network-conf
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Courrier sortant : tout passe par un relais
|
## Courrier sortant
|
||||||
|
|
||||||
**Depuis les 25-26 septembre 2026**, Postfix ne remet plus directement aux
|
Tout le courrier de la machine passe par un relais depuis les 25-26/09/2026
|
||||||
destinataires : `relayhost = [mail.acemail.fr]:587`, en soumission
|
(`mail.acemail.fr`), et l'IP qui parle aux destinataires n'est plus celle
|
||||||
authentifiée.
|
d'owni. SPF, DKIM, DMARC, les plafonds de Postfix, les boîtes du service et
|
||||||
|
les pièges qui vont avec :
|
||||||
|
|
||||||
| | |
|
→ **[infra/docs/courrier-sortant.md](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-infra/src/branch/main/docs/courrier-sortant.md)**
|
||||||
|---|---|
|
|
||||||
| **IP qui parle aux destinataires** | `176.9.125.188` (le relais), et non plus `51.91.79.148` |
|
|
||||||
| **SPF** | `v=spf1 a mx include:_spf.acemail.fr -all` |
|
|
||||||
| **DKIM** | signé par owni **avant** la remise au relais |
|
|
||||||
| **DMARC** | `p=quarantine`, `rua=mailto:postmaster@alpinux.org` |
|
|
||||||
|
|
||||||
Trois conséquences qu'il vaut mieux connaître avant de chercher ailleurs :
|
---
|
||||||
|
|
||||||
- **La réputation d'expéditeur n'est plus la nôtre seule.** Un rejet de plus
|
## Certificats TLS
|
||||||
compte contre une IP partagée avec les autres clients de l'hébergeur.
|
|
||||||
- **Un plafond d'envoi s'ajoute à celui de Postfix**, celui du relais, et il
|
Deux mécanismes coexistent — un certificat certbot multi-domaines pour huit
|
||||||
n'est pas connu à ce jour. Le franchir se verrait en `status=deferred` dans
|
sites, un certificat par site émis par ISPConfig via acme.sh — avec un piège
|
||||||
`/var/log/mail.log`, avec un code `4.x.x` venu du relais.
|
qui a déjà cassé deux fois le HTTPS d'un site pendant plusieurs semaines.
|
||||||
- **L'enveloppe doit survivre au relais.** La messagerie utilise des adresses
|
|
||||||
de retour variables (`bounce+<référence>@alpinux.org`) pour identifier les
|
→ **[infra/docs/certificats.md](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-infra/src/branch/main/docs/certificats.md)**
|
||||||
non-remises. Vérifié le 27/09 : le relais les préserve. À revérifier après
|
|
||||||
tout changement chez l'hébergeur — la panne serait silencieuse, les rebonds
|
|
||||||
cessant simplement d'arriver.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -220,22 +178,17 @@ S'y ajoutent `dbispconfig`, `roundcube` et `phpmyadmin`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Sauvegardes : ce qui est couvert, et ce qui ne l'est pas
|
## Sauvegardes
|
||||||
|
|
||||||
État au 27/09/2026, à corriger — voir le ticket
|
Les sept bases sont tirées chaque nuit vers le poste par
|
||||||
[#1](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-owni/issues/1).
|
`infra/scripts/sauvegarder-owni.sh`. La procédure de **restauration** — et ses
|
||||||
|
pièges, dont le worker de la messagerie qui réexpédierait une campagne — est
|
||||||
|
écrite à côté :
|
||||||
|
|
||||||
- **Une base sur six** est sauvegardée quotidiennement, la messagerie, dans
|
→ **[infra/docs/sauvegardes.md](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-infra/src/branch/main/docs/sauvegardes.md)**
|
||||||
`/var/backup/web21/`. Les cinq autres ne le sont pas, Dolibarr et Gitea
|
|
||||||
compris.
|
|
||||||
- **Une seule copie conservée** (`backup_copies = 1`) : une corruption
|
|
||||||
remarquée deux jours plus tard n'est plus récupérable.
|
|
||||||
- **Les 14 sites sont à `backup_interval = none`** côté fichiers.
|
|
||||||
- **Tout reste sur owni.** Un disque perdu emporte les données et leurs
|
|
||||||
copies. Ce que contient `/var/backup/ispconfig/` ne concerne qu'ISPConfig
|
|
||||||
lui-même.
|
|
||||||
|
|
||||||
Une sauvegarde qu'on n'a jamais restaurée est une hypothèse, pas une garantie.
|
Ce qui n'est **pas** sauvegardé : les fichiers des sites, les boîtes mail,
|
||||||
|
`/etc`. Ce sont des choix, écrits comme tels dans le document.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue