Le wiki sort de l'espace de travail
Il est passé dans ~/Projects/alpinux.wiki : dépôt distinct, déploiement automatique par webhook, et plus rien de commun avec les applications Flask rangées ici. Le tableau des projets et les procédures de déploiement sont mis à jour en conséquence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PcZ7hL9aVvMhRuzxXLT2DG
This commit is contained in:
parent
f45f67a131
commit
046321b0e2
1 changed files with 82 additions and 37 deletions
119
README.md
119
README.md
|
|
@ -17,9 +17,13 @@ Ce dossier racine est un espace de travail local — il n'a pas de remote git.
|
|||
| `home/` | alpinux.org | HTML statique | [alpinux-home](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-home) |
|
||||
| `portail/` | portail.alpinux.org | en construction | [alpinux-portail](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-portail) |
|
||||
| `static/` | static.alpinux.org | Flask + AlpID + CDN | [alpinux-static](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-static) |
|
||||
| `wiki/` | wiki.alpinux.org | MkDocs Material | [alpinux-wiki](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-wiki) |
|
||||
| `infra/` | — | Configs Apache + systemd | dépôt git local séparé |
|
||||
|
||||
Le wiki (`wiki.alpinux.org`, dépôt
|
||||
[alpinux-wiki](https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-wiki)) a sa propre
|
||||
place : **`~/Projects/alpinux.wiki`**. Il se déploie tout seul et n'a rien à partager avec
|
||||
les applications Flask ci-dessus.
|
||||
|
||||
Gitea : **https://gitea.alpinux.org/alpinux.cedrica5l**
|
||||
ISPConfig : **https://owni.alpinux.org:8080**
|
||||
AlpID (SSO) : **https://alpid.alpinux.org** — realm `master`
|
||||
|
|
@ -28,43 +32,52 @@ AlpID (SSO) : **https://alpid.alpinux.org** — realm `master`
|
|||
|
||||
## Procédure de déploiement
|
||||
|
||||
### Principe
|
||||
### Vue d'ensemble
|
||||
|
||||
```
|
||||
poste local → git push → Gitea → serveur (git pull + restart)
|
||||
```
|
||||
| Projet | Méthode | Commande |
|
||||
|--------|---------|----------|
|
||||
| `home` | git pull sur serveur | `ssh alpinux.org "cd <web root> && git pull"` |
|
||||
| `admin` | rsync local + restart | `cd admin && ./scripts/deploy.sh` |
|
||||
| `dynamic` | rsync local + restart | `cd dynamic && ./scripts/deploy.sh` |
|
||||
| `static` (app) | rsync local + restart | `cd static && scripts/deploy-app.sh` |
|
||||
| `static` (assets) | rsync local | `cd static && scripts/push-assets.sh` |
|
||||
| `wiki` | automatique | `git push` depuis `~/Projects/alpinux.wiki` |
|
||||
|
||||
Les mises à jour passent exclusivement par git.
|
||||
La configuration d'environnement (`.env`) est la seule opération manuelle tolérée sur le serveur.
|
||||
Dans tous les cas : versionner avec `git push` **avant** de déployer.
|
||||
|
||||
### Flask (admin, dynamic, static)
|
||||
### Flask — admin et dynamic
|
||||
|
||||
```bash
|
||||
# Poste local
|
||||
# 1. Poste local
|
||||
git push origin main
|
||||
|
||||
# Serveur (via SSH ponctuel)
|
||||
ssh alpinux.org
|
||||
cd /opt/<service>
|
||||
git pull
|
||||
source venv/bin/activate && pip install -r requirements.txt
|
||||
sudo systemctl restart <service>
|
||||
# 2. Déployer (rsync depuis le dépôt local + restart service)
|
||||
cd admin # ou dynamic
|
||||
./scripts/deploy.sh
|
||||
```
|
||||
|
||||
### static.alpinux.org — app Flask
|
||||
|
||||
```bash
|
||||
# 1. Poste local
|
||||
git push origin main
|
||||
|
||||
# 2. Déployer (rsync depuis le dépôt local + restart service)
|
||||
cd static
|
||||
scripts/deploy-app.sh
|
||||
```
|
||||
|
||||
### static.alpinux.org — assets CDN
|
||||
|
||||
```bash
|
||||
cd static
|
||||
scripts/push-assets.sh # rsync logo/, wiki/, stats/, error/ → web root ISPConfig
|
||||
```
|
||||
|
||||
### Wiki
|
||||
|
||||
```bash
|
||||
cd wiki
|
||||
mkdocs build --strict
|
||||
rsync -rlcz --delete site/ alpinux.org:/var/www/wiki.alpinux.org/web/
|
||||
```
|
||||
|
||||
### Assets CDN (static.alpinux.org)
|
||||
|
||||
```bash
|
||||
cd static
|
||||
scripts/push-assets.sh # rsync vers /var/www/clients/.../web/
|
||||
```
|
||||
Rien à faire : un webhook Gitea construit et met en ligne à chaque push sur `main`.
|
||||
Voir https://wiki.alpinux.org/technique/deploiement-wiki/
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -72,9 +85,8 @@ scripts/push-assets.sh # rsync vers /var/www/clients/.../web/
|
|||
|
||||
| Projet | Commande | URL |
|
||||
|--------|----------|-----|
|
||||
| `wiki` | `mkdocs serve` | http://localhost:8000 |
|
||||
| `dynamic` | `flask run --port 5000` | http://localhost:5000 |
|
||||
| `admin` | `flask run --port 5001` | http://localhost:5001 |
|
||||
| `dynamic` | `flask run --port 5001` | http://localhost:5001 |
|
||||
| `admin` | `flask run --port 5002` | http://localhost:5002 |
|
||||
| `static` | `python app/app.py` | http://localhost:5003 |
|
||||
|
||||
```bash
|
||||
|
|
@ -119,24 +131,54 @@ Lancer Claude depuis le sous-dossier du projet pour limiter le contexte :
|
|||
cd ~/Projects/org.alpinux.owni/static && claude
|
||||
cd ~/Projects/org.alpinux.owni/admin && claude
|
||||
cd ~/Projects/org.alpinux.owni/dynamic && claude
|
||||
cd ~/Projects/org.alpinux.owni/wiki && claude
|
||||
cd ~/Projects/alpinux.wiki && claude
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Accès SSH et rôle d'abonnelc
|
||||
## Comptes personnels vs comptes de service
|
||||
|
||||
Alias SSH : `alpinux.org` → compte `abonnelc`.
|
||||
|
||||
`abonnelc` est un **compte d'administration ponctuelle**, pas un compte de service.
|
||||
Son rôle se limite à :
|
||||
### Règle absolue
|
||||
|
||||
Un compte personnel (`abonnelc` ou tout autre) ne doit jouer **aucun rôle dans le fonctionnement à long terme** des services :
|
||||
|
||||
- pas `User=` dans un unit systemd
|
||||
- pas propriétaire des fichiers de l'app ou des logs
|
||||
- pas dans la liste des groupes dont dépend un service en production
|
||||
- pas référencé dans un `chown`, `setfacl`, ou cron de production
|
||||
|
||||
Si un service dépend d'un compte personnel, sa disparition (départ, suppression du compte, changement de login) fait tomber le service en production.
|
||||
|
||||
### Rôle d'abonnelc
|
||||
|
||||
`abonnelc` est un **compte d'administration ponctuelle**, limité à :
|
||||
|
||||
- créer ou modifier les fichiers `.env` sur le serveur
|
||||
- redémarrer un service après un `git pull`
|
||||
- redémarrer un service après un déploiement
|
||||
- effectuer des opérations admin exceptionnelles
|
||||
|
||||
Les services tournent sous leurs propres utilisateurs système.
|
||||
Les scripts ne doivent pas être couplés à `abonnelc`.
|
||||
### Comptes de service
|
||||
|
||||
Chaque service tourne sous son propre utilisateur système dédié (ex. `static-cdn` pour `static-cdn.service`).
|
||||
C'est ce compte qui possède les fichiers, les logs, et les droits nécessaires — pas `abonnelc`.
|
||||
|
||||
---
|
||||
|
||||
## Serveur
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **Hostname** | `owni.alpinux.org` |
|
||||
| **OS** | Debian 12 (bookworm) |
|
||||
| **IPv4** | `51.91.79.148` |
|
||||
| **IPv6** | `2001:41d0:404:200::3f85/128` |
|
||||
| **Passerelle IPv6** | `2001:41d0:404:200::1` |
|
||||
| **SSH** | `ssh alpinux.org` (alias → `abonnelc@owni.alpinux.org`) |
|
||||
|
||||
Config IPv6 persistante : `/etc/network/interfaces.d/60-ipv6.cfg`
|
||||
Cloud-init réseau désactivé : `/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg`
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -151,3 +193,6 @@ infra/
|
|||
├── services/ → Units systemd
|
||||
└── docs/ → Documentation déploiement par service
|
||||
```
|
||||
|
||||
|
||||
ne pas mentionner "sonnet" ou "claude"
|
||||
|
|
|
|||
Loading…
Reference in a new issue