123 lines
4.8 KiB
Markdown
123 lines
4.8 KiB
Markdown
# static.alpinux.org
|
|
|
|
CDN pour les fichiers binaires et assets statiques de l'association : logos, favicons, images Open Graph.
|
|
|
|
## Contenu hébergé
|
|
|
|
| Fichier | Usage |
|
|
|---------|-------|
|
|
| `logo/alpinux-logo-512.png` | Logo 512 px — page d'accueil alpinux.org, balises OG |
|
|
| `logo/alpinux-logo-192.png` | Logo 192 px — PWA / Android home screen |
|
|
| `logo/favicon-32.png` | Favicon 32 px |
|
|
| `logo/favicon-16.png` | Favicon 16 px |
|
|
| `logo/favicon.ico` | Favicon ICO multi-taille |
|
|
| `wiki/` | Images pour wiki.alpinux.org |
|
|
|
|
Ces fichiers sont synchronisés sur le serveur via les scripts `push-assets.sh` / `pull-assets.sh`. Ils ne sont pas versionnés dans ce dépôt.
|
|
|
|
## Configuration
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Editer `.env` :
|
|
|
|
| Variable | Obligatoire | Description |
|
|
|----------|-------------|-------------|
|
|
| `STATIC_HOST` | oui | Alias SSH ou nom d'hôte (`alpinux.org`) |
|
|
| `STATIC_PATH` | oui | Chemin absolu du web root sur le serveur |
|
|
| `LOCAL_ASSETS_DIR` | oui | Chemin absolu du dépôt local (`static/`) |
|
|
| `STATIC_USER` | non | Login SSH — laisser vide si `~/.ssh/config` définit l'utilisateur pour cet hôte |
|
|
|
|
### Avec `~/.ssh/config` (recommandé)
|
|
|
|
Si l'hôte est déclaré dans `~/.ssh/config` (ex : `Host alpinux.org` avec `User`, `IdentityFile`, etc.), laisser `STATIC_USER` vide. Les scripts utilisent l'alias directement.
|
|
|
|
### Sans `~/.ssh/config`
|
|
|
|
Renseigner `STATIC_USER=<votre-login>`. Les scripts construisent alors `USER@HOST:PATH`.
|
|
|
|
## Scripts
|
|
|
|
```bash
|
|
./scripts/pull-assets.sh # aperçu des changements + confirmation
|
|
./scripts/pull-assets.sh -y # récupère sans confirmation
|
|
./scripts/pull-assets.sh -n # dry-run
|
|
|
|
./scripts/push-assets.sh # aperçu des changements + confirmation
|
|
./scripts/push-assets.sh -y # pousse sans confirmation
|
|
./scripts/push-assets.sh -n # dry-run
|
|
```
|
|
|
|
`push-assets.sh` n'envoie que les fichiers nouveaux ou modifiés ; il ne supprime jamais rien sur le serveur.
|
|
|
|
## Tableau de bord Flask (`app/`)
|
|
|
|
Application Flask déployée sur le serveur via `scripts/deploy-app.sh`. Accessible sur `static.alpinux.org` (proxy Apache → `127.0.0.1:5003`).
|
|
|
|
### Fonctionnalités
|
|
|
|
| Route | Description |
|
|
|-------|-------------|
|
|
| `/` | Tableau de bord — statistiques CDN par dossier |
|
|
| `/browse/` | Navigateur de fichiers — aperçu, suppression, **upload** |
|
|
| `/search` | Recherche par nom / contenu / date |
|
|
| `/stats/` | Rapport de trafic GoAccess |
|
|
|
|
### Upload de fichiers
|
|
|
|
Dans le navigateur (`/browse/`), une zone de dépôt est affichée en bas de chaque dossier. Elle accepte plusieurs fichiers à la fois (glisser-déposer ou sélection). Les fichiers sont écrits dans le dossier affiché. Les chemins protégés (`.git`, `app`, `scripts`, etc.) sont refusés avec 403.
|
|
|
|
Pour limiter la taille des uploads, ajouter dans `app/app.py` :
|
|
|
|
```python
|
|
app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024 # 50 Mo
|
|
```
|
|
|
|
### Variables d'environnement
|
|
|
|
| Variable | Obligatoire | Description |
|
|
|----------|-------------|-------------|
|
|
| `SECRET_KEY` | oui | Clé secrète Flask (chaîne aléatoire longue) |
|
|
| `ALPID_CLIENT_ID` | oui | Client Keycloak (`static-cdn`) |
|
|
| `ALPID_CLIENT_SECRET` | oui | Secret client Keycloak |
|
|
| `ALPID_DISCOVERY_URL` | oui | URL OIDC discovery AlpID |
|
|
| `ADMIN_GROUPS` | non | Groupes Keycloak autorisés (défaut : `admins`) |
|
|
| `ADMIN_EMAILS` | non | Fallback si le claim `groups` est absent du token |
|
|
| `ASSETS_ROOT` | oui | Racine du CDN (`/var/www/clients/client1/web17/web` en prod) |
|
|
|
|
### Variables d'environnement spécifiques aux stats
|
|
|
|
| Variable | Description |
|
|
|----------|-------------|
|
|
| `STATS_FILE` | Chemin du rapport HTML GoAccess (servi dans l'iframe et l'onglet) |
|
|
| `STATS_JSON` | Chemin du JSON GoAccess (badges "Vues" dans le navigateur) |
|
|
| `STATS_LOG_FILE` | Log Apache à analyser pour la génération à la demande |
|
|
| `STATS_GENERATE_CMD` | Commande complète de génération (remplace la commande par défaut) |
|
|
|
|
### Génération du rapport à la demande
|
|
|
|
Si `goaccess.html` est absent, la page `/stats/` affiche un bouton **Générer et ouvrir** :
|
|
1. Lance GoAccess en arrière-plan (thread daemon)
|
|
2. Interroge `/stats/status` toutes les 2 s
|
|
3. Ouvre le rapport dans un nouvel onglet dès qu'il est prêt
|
|
|
|
**Prérequis serveur :**
|
|
- `abonnelc` doit appartenir au groupe `client1` pour lire les logs ISPConfig :
|
|
```bash
|
|
sudo usermod -a -G client1 abonnelc
|
|
sudo systemctl restart static-cdn
|
|
```
|
|
|
|
---
|
|
|
|
## Déploiement serveur (ISPConfig)
|
|
|
|
Le sous-domaine est créé via **ISPConfig** (`https://owni.alpinux.org:8080`) :
|
|
|
|
1. *Sites → Ajouter un site web* — domaine `static.alpinux.org`
|
|
2. Activer **Let's Encrypt SSL** dans l'onglet SSL
|
|
3. Pointer le DocumentRoot vers le répertoire contenant les assets
|
|
|
|
ISPConfig gère le VirtualHost et le certificat. Voir `../infra/static/` pour la configuration Apache de référence.
|