Initial commit - Migration documentation 2026

This commit is contained in:
Lionel
2025-12-31 18:44:24 +01:00
commit f00047c7d1
23 changed files with 2372 additions and 0 deletions

View File

@@ -0,0 +1,141 @@
# Authelia - SSO
Authelia fournit l authentification unique (SSO) pour tous les services Talloires.
## Acces
| Parametre | Valeur |
|-----------|--------|
| URL | [auth.talloires.local](https://auth.talloires.local) |
| Utilisateur | lionel |
| Email | dflected@dflected.org |
| 2FA | TOTP active |
## Matrice de protection des services
| Service | Authelia | Raison |
|---------|----------|--------|
| **docs** | ✅ | Documentation interne |
| **portainer** | ✅ | Admin Docker |
| **dockge** | ✅ | Admin Docker Compose |
| **transmission** | ✅ | Client torrent |
| **netdata** | ✅ | Monitoring systeme |
| **grafana** | ✅ | Dashboards / Logs |
| **uptime** | ✅ | Monitoring disponibilite |
| **cockpit** | ✅ | Admin systeme |
| **languagetool** | ✅ | API grammaire |
| **auth** | ❌ | C est Authelia lui-meme |
| **git** | ❌ | Auth OIDC propre |
| **jellyfin** | ❌ | Auth propre |
| **homeassistant** | ❌ | Auth propre |
| **linkwarden** | ❌ | Auth propre |
| **vikunja** | ❌ | Auth propre |
| **outline** | ❌ | Auth OIDC propre |
> **Note** : Cette protection s applique aux domaines `.local` ET `.tailfd281f.ts.net`
## Services avec OAuth/OIDC
Ces services utilisent Authelia comme provider OpenID Connect :
### Gitea
| Parametre | Valeur |
|-----------|--------|
| Client ID | gitea |
| Redirect URI | https://git.talloires.local/user/oauth2/Authelia/callback |
| Scopes | openid, email, profile |
### Outline
| Parametre | Valeur |
|-----------|--------|
| Client ID | outline |
| Redirect URI | https://outline.talloires.local/auth/oidc.callback |
| Scopes | openid, offline_access, profile, email |
### Grafana (Header Auth)
Grafana utilise l authentification par header via Authelia (pas OIDC) :
| Header | Valeur |
|--------|--------|
| Remote-User | Utilisateur authentifie |
| Remote-Email | Email de l utilisateur |
## Configuration
### Fichiers
| Fichier | Usage |
|---------|-------|
| ~/docker/authelia/config/configuration.yml | Config principale |
| ~/docker/authelia/config/users_database.yml | Base utilisateurs |
| ~/docker/authelia/config/oidc.key | Cle privee OIDC |
### SMTP (Proton Mail)
| Parametre | Valeur |
|-----------|--------|
| Serveur | smtp.protonmail.ch:465 |
| Protocol | TLS implicite |
| From | Talloires <dflected@dflected.org> |
## Integration Caddy
### Snippet forward_auth
```
(authelia) {
forward_auth authelia:9091 {
uri /api/authz/forward-auth
copy_headers Remote-User Remote-Groups Remote-Email Remote-Name
}
}
```
### Usage dans Caddyfile
```
monservice.talloires.local, monservice.talloires.tailfd281f.ts.net {
import authelia
reverse_proxy backend:port
tls internal
}
```
## Ajouter un client OIDC
1. Generer le hash du secret :
```bash
docker exec authelia authelia crypto hash generate pbkdf2 --password "mon-secret"
```
2. Ajouter dans configuration.yml :
```yaml
- client_id: nouveau_client
client_name: Mon Service
client_secret: "$pbkdf2-sha512$..."
public: false
authorization_policy: two_factor
redirect_uris:
- https://service.talloires.local/callback
scopes:
- openid
- email
- profile
```
3. Redemarrer Authelia :
```bash
docker restart authelia
```
## Commandes utiles
```bash
# Logs
docker logs authelia -f
# Hash mot de passe utilisateur
docker exec authelia authelia crypto hash generate argon2 --password "motdepasse"
# Hash OIDC client secret
docker exec authelia authelia crypto hash generate pbkdf2 --password "secret"
# Valider la configuration
docker exec authelia authelia validate-config
```

View File

@@ -0,0 +1,76 @@
# Backup
Sauvegarde automatique de Talloires vers Annecy (Synology NAS).
## Configuration
| Paramètre | Valeur |
|-----------|--------|
| Script | ~/backup-to-annecy.sh |
| Destination | rsync-talloires@10.171.171.50:/volume1/Backups/talloires/ |
| Méthode | tar over SSH (rsync SUID bloqué sur Synology DSM 7) |
| Schedule | Cron quotidien à 3h00 |
| Rétention | 7 derniers backups |
| Log | ~/backup.log |
## Données sauvegardées
- ~/docker/ (toutes les configs Docker)
### Exclusions
- *.log
- */cache/*
- */logs/*
- */__pycache__/*
## Authentification SSH
- Clé privée (root): /root/.ssh/id_ed25519
- Clé privée (lionel): ~/.ssh/id_ed25519
- Utilisateur distant: rsync-talloires
- Fingerprint: SHA256:CxpeBfvrBV/s+RNE49SwrY3WsG28Du3nyQ/2D9lApU8
## Commandes
### Lancer un backup manuel
```bash
~/backup-to-annecy.sh
```
### Vérifier le log
```bash
cat ~/backup.log
```
### Vérifier les backups sur Annecy
```bash
sudo ssh -i /root/.ssh/id_ed25519 rsync-talloires@10.171.171.50 "ls -lh /volume1/Backups/talloires/"
```
### Restaurer un backup
```bash
# Sur Talloires
sudo ssh -i /root/.ssh/id_ed25519 rsync-talloires@10.171.171.50 "cat /volume1/Backups/talloires/docker-backup-YYYYMMDD-HHMMSS.tar.gz" | sudo tar -xzf - -C /home/lionel/
```
## Cron
```bash
# Voir le cron
sudo crontab -l
# Modifier
sudo crontab -e
```
Entrée actuelle :
```
0 3 * * * /home/lionel/backup-to-annecy.sh
```
## Notes techniques
Le rsync classique ne fonctionne pas avec Synology DSM 7 car :
- rsync est SUID root sur DSM
- Les utilisateurs non-admin nont pas de shell par défaut
- Solution: tar over SSH fonctionne parfaitement

View File

@@ -0,0 +1,3 @@
# Grafana - Monitoring & Alertes
## Vue densemble

View File

@@ -0,0 +1,148 @@
# Vue ensemble des services
## Architecture
```
Client (Mac/iPhone)
|
| HTTPS (certificat Caddy CA)
v
[Caddy] :443
|
+-- forward_auth --> [Authelia] :9091
| |
| (si authentifié)
| |
+-------------------------+
|
v
Services Docker
```
## Services actifs (24 containers)
### 🎬 Média
| Service | Container | Port | Description |
|---------|-----------|------|-------------|
| Jellyfin | jellyfin | 8096 | Streaming vidéo avec transcodage hardware (VideoCore) |
| Transmission | transmission | 9091, 51413 | Client BitTorrent avec web UI |
### ✅ Productivité
| Service | Container | Port | Description |
|---------|-----------|------|-------------|
| Vikunja | vikunja | 3456 | Gestion de tâches style Todoist/Trello avec CalDAV |
| Outline | outline + outline-db + outline-redis | 3000 | Wiki collaboratif avec OIDC (PostgreSQL + Redis) |
| Linkwarden | linkwarden + linkwarden-db | 3000 | Gestionnaire de bookmarks avancé avec archivage |
| LanguageTool | languagetool | 8010 | Serveur de correction grammaticale (FR/EN/DE) |
### 🔧 Infrastructure
| Service | Container | Port | Description |
|---------|-----------|------|-------------|
| Portainer | portainer | 9000 | Interface de gestion Docker |
| Dockge | dockge | 5001 | Interface Docker Compose |
| Gitea | gitea | 3000, 22 | Serveur Git avec SSO Authelia |
| MkDocs | mkdocs | 8000 | Cette documentation |
### 📊 Monitoring
| Service | Container | Port | Description |
|---------|-----------|------|-------------|
| Grafana | grafana | 3000 | Dashboards et visualisation (header auth via Authelia) |
| Netdata | netdata | 19999 | Monitoring système temps réel |
| Uptime Kuma | uptime-kuma | 3001 | Surveillance uptime des services |
| Loki | loki | 3100 | Agrégation de logs |
| Promtail | promtail | - | Collecte de logs pour Loki |
| Syslog-ng | syslog-ng | 1514 | Collecte syslog centralisée |
### 🏠 Domotique
| Service | Container | Port | Description |
|---------|-----------|------|-------------|
| Home Assistant | homeassistant | 8123 | Automatisation domotique (mode host network) |
### 🔐 Sécurité
| Service | Container | Port | Description |
|---------|-----------|------|-------------|
| Authelia | authelia | 9091 | SSO, 2FA, OIDC provider |
| CrowdSec | crowdsec | - | IDS/IPS collaboratif |
| Caddy | caddy | 80, 443 | Reverse proxy avec TLS automatique |
### 🔄 Maintenance
| Service | Container | Port | Description |
|---------|-----------|------|-------------|
| Watchtower | watchtower | 8080 | Mise à jour auto des containers (4h00) |
## Répertoires Docker
```
~/docker/
├── authelia/ # Config SSO
├── caddy/ # Caddyfile + certificats
├── crowdsec/ # Config IDS
├── dockge/ # Stacks Dockge
├── docs/ # MkDocs (cette doc)
├── gitea/ # Config + data Gitea
├── grafana/ # Dashboards
├── homeassistant/ # Config HA
├── languagetool/ # Config LT
├── linkwarden/ # Config Linkwarden
├── outline/ # Config Outline
├── syslog-ng/ # Config syslog
├── talloires/ # Stack principal (docker-compose.yml)
├── uptime-kuma/ # Data Uptime Kuma
├── vikunja/ # Config Vikunja
└── zeronsd/ # DNS ZeroTier
```
## Réseau
| Réseau | Plage | Usage |
|--------|-------|-------|
| ZeroTier | 10.144.0.0/16 | Accès distant |
| Docker talloires_net | 172.20.0.0/16 | Inter-containers |
| LAN physique | 10.171.171.0/24 | Réseau local |
### Adresses ZeroTier clés
| Serveur | IP |
|---------|-----|
| Talloires (Pi5) | 10.144.221.22 |
| Annecy (Synology) | 10.144.78.193 |
| Olympou (Mac) | 10.144.46.46 |
## Stockage
| Mount | Source | Usage |
|-------|--------|-------|
| /mnt/mediaserver | USB SSD 4TB | Films, Séries, Downloads, Databases |
| ~/docker | SD Card | Configs Docker légères |
### Structure USB (/mnt/mediaserver)
```
/mnt/mediaserver/
├── databases/
│ ├── languagetool/ngrams/ # N-grams FR/EN/DE (~8GB)
│ └── outline/
│ ├── data/ # Fichiers Outline
│ ├── postgres/ # PostgreSQL Outline
│ └── redis/ # Redis Outline
├── downloads/ # Transmission
├── movies/ # Films (Jellyfin)
└── series/ # Séries (Jellyfin)
```
## Backup
| Paramètre | Valeur |
|-----------|--------|
| Destination | Annecy (Synology) |
| Schedule | 3h00 quotidien |
| Rétention | 7 jours |
| Méthode | tar over SSH |
Voir [Scripts de maintenance](../reference/scripts.md) pour les détails.
## Maintenance automatique
| Tâche | Schedule | Outil |
|-------|----------|-------|
| Mise à jour containers | 4h00 | Watchtower |
| Backup vers Annecy | 3h00 | backup-to-annecy.sh (cron) |
| Nettoyage images | Après update | docker image prune |

View File

@@ -0,0 +1,109 @@
# Shlink - Go Links
Shlink est un service de raccourcissement d URL qui permet de creer des go-links personnalises.
## Acces
| Interface | URL |
|-----------|-----|
| Go Links | `https://go/xxx` |
| Admin | [go/shlink](https://go/shlink) |
## Go Links disponibles
| Raccourci | Destination |
|-----------|-------------|
| go/ha | Home Assistant |
| go/homeassistant | Home Assistant |
| go/jf | Jellyfin |
| go/jellyfin | Jellyfin |
| go/lw | Linkwarden |
| go/linkwarden | Linkwarden |
| go/lt | LanguageTool |
| go/languagetool | LanguageTool |
| go/docs | Documentation |
| go/git | Gitea |
| go/auth | Authelia |
| go/grafana | Grafana |
| go/dockge | Dockge |
| go/portainer | Portainer |
| go/transmission | Transmission |
| go/netdata | Netdata |
| go/uptime | Uptime Kuma |
| go/cockpit | Cockpit |
| go/vikunja | Vikunja |
| go/outline | Outline |
| go/cryptpad | CryptPad |
| go/shlink | Admin Shlink |
## Creer un nouveau go-link
### Via interface web
1. Aller sur [go/shlink](https://go/shlink)
2. Cliquer sur "Create short URL"
3. Entrer l URL longue et le slug personnalise
### Via CLI
```bash
docker exec shlink shlink short-url:create https://example.com --custom-slug=example
```
### Lister tous les liens
```bash
docker exec shlink shlink short-url:list
```
### Supprimer un lien
```bash
docker exec shlink shlink short-url:delete <short-code>
```
## Configuration
- **Domaine** : go
- **Base de donnees** : SQLite
- **Statistiques** : Activees (visites trackees)
## Docker Compose
Emplacement : `~/docker/shlink/docker-compose.yml`
```yaml
services:
shlink:
image: shlinkio/shlink:stable
container_name: shlink
environment:
- DEFAULT_DOMAIN=go
- IS_HTTPS_ENABLED=true
- DB_DRIVER=sqlite
volumes:
- ./data:/etc/shlink/data
networks:
- talloires_net
shlink-web:
image: shlinkio/shlink-web-client:stable
container_name: shlink-web
networks:
- talloires_net
```
## Caddy
```
go, go.local, go.tailfd281f.ts.net {
reverse_proxy shlink:8080
tls internal
}
shlink.talloires.local, shlink.talloires.tailfd281f.ts.net {
import authelia
reverse_proxy shlink-web:8080
tls internal
}
```

View File

@@ -0,0 +1,177 @@
# Transmission - Torrent Client
## Vue d'ensemble
Transmission est le client BitTorrent utilisé sur Talloires, configuré pour router **tout son trafic via ProtonVPN** afin de protéger la vie privée et masquer l'activité de téléchargement à l'ISP.
!!! success "Configuration VPN"
Le trafic de Talloires (10.171.171.7) est automatiquement routé via ProtonVPN sur Theseus, garantissant que Transmission est invisible pour l'ISP.
## Informations de connexion
| Paramètre | Valeur |
|-----------|--------|
| **URL locale** | http://talloires.local:9091 |
| **URL Tailscale** | http://talloires.tailfd281f.ts.net:9091 |
| **Container** | `transmission` |
| **Réseau Docker** | `talloires_net` |
| **IP Container** | 172.20.0.17 |
## Configuration
### Docker Compose
```yaml
transmission:
image: linuxserver/transmission:latest
container_name: transmission
restart: unless-stopped
ports:
- 51413:51413
- 51413:51413/udp
expose:
- 9091
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Luxembourg
volumes:
- talloires_transmission_config:/config
- /mnt/mediaserver/downloads:/downloads
networks:
- talloires_net
```
### Vérification VPN
Le trafic de Transmission passe par ProtonVPN :
```bash
# Vérifier l'IP publique de Transmission
docker exec transmission sh -c "curl -s ipinfo.io"
```
Résultat attendu :
```json
{
"ip": "5.253.204.205",
"city": "Brussels",
"country": "BE",
"org": "AS9009 M247 Europe SRL"
}
```
!!! warning "IP différente de l'ISP"
L'IP normale de l'ISP est `87.240.228.220` (POST Luxembourg). Si Transmission montre cette IP, le VPN ne fonctionne pas correctement.
## Script de contrôle
Un script de gestion est disponible pour démarrer/stopper Transmission facilement.
### Emplacement
```bash
/home/lionel/scripts/transmission-control.sh
```
### Utilisation
```bash
# Stopper Transmission
~/scripts/transmission-control.sh stop
# Démarrer Transmission
~/scripts/transmission-control.sh start
# Redémarrer Transmission
~/scripts/transmission-control.sh restart
# Voir le statut et les statistiques
~/scripts/transmission-control.sh status
```
### Exemple de sortie
```bash
$ ~/scripts/transmission-control.sh status
=== Transmission Status ===
1b69f36ee669 linuxserver/transmission:latest Up 3 days transmission
=== Network Stats ===
CONTAINER ID NAME CPU % MEM USAGE / LIMIT NET I/O
1b69f36ee669 transmission 0.05% 45MiB / 7.68GiB 16.8GB / 813MB
```
## Monitoring
### Vérifier l'état du tunnel VPN
Sur Theseus :
```bash
# Voir les statistiques du tunnel WireGuard
ssh -l root theseus.local 'wg show wgclt1'
```
### Logs Transmission
```bash
# Logs en temps réel
docker logs -f transmission
# Dernières 50 lignes
docker logs transmission --tail 50
```
## Dépannage
### Transmission ne télécharge pas
1. Vérifier que le VPN est actif :
```bash
ssh -l root theseus.local 'wg show wgclt1 | grep handshake'
```
2. Vérifier l'IP de Transmission :
```bash
docker exec transmission sh -c "curl -s ipinfo.io | grep ip"
```
3. Redémarrer Transmission :
```bash
~/scripts/transmission-control.sh restart
```
### Vitesse lente
Le routage via VPN peut réduire la vitesse. Vérifier :
1. **Latence du tunnel** :
```bash
ssh -l root theseus.local 'ping -c 3 10.2.0.1' # Gateway VPN
```
2. **Charge CPU de Talloires** :
```bash
docker stats transmission --no-stream
```
## Sécurité
### Isolation réseau
Talloires est configuré comme **DMZ** :
- ✅ Accès sortant uniquement via ProtonVPN
- ❌ Pas d'accès vers les autres devices du LAN (Annecy, Olympou)
- ✅ ACL Tailscale bloque les connexions depuis Talloires
### Kill Switch
Si le VPN tombe, Talloires **perd l'accès Internet** (pas de fallback sur l'IP ISP), garantissant qu'aucun trafic torrent ne fuite.
## Ressources
- [Transmission Web UI](http://talloires.local:9091)
- [LinuxServer Transmission Docs](https://docs.linuxserver.io/images/docker-transmission)
- Configuration complète : `/home/lionel/docker/media/docker-compose.yml`