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,100 @@
# Maintenance 31 Décembre 2025
## Résumé
Session de maintenance majeure pour réparer plusieurs services et optimiser l'espace disque.
## Problèmes résolus
### 🔧 Shlink (URL Shortener)
**Problème**: Les short URLs ne fonctionnaient pas - Caddy utilisait des redirections manuelles cassées.
**Solution**:
- Simplifié le Caddyfile avec `reverse_proxy shlink:8080`
- Configuré `servers.json` pour Shlink-web avec l'API key
**Test**: `https://go/ts` → Redirige vers Tailscale admin ✅
### 🔧 Arcane (Docker Management)
**Problème**:
1. Container en crash loop (`ENCRYPTION_KEY` trop courte - 31 chars au lieu de 32)
2. Bloqué par Authelia
**Solution**:
- Généré nouvelles clés de 32+ caractères
- Désactivé Authelia pour accès direct
- Reset de la base de données
**Accès**: `https://arcane.talloires.local` (arcane / [nouveau mot de passe])
### 🔧 Jellyfin (Media Server)
**Problème**: Les médias n'étaient pas montés (volumes pointaient vers `/mnt/annecy` au lieu de `/mnt/mediaserver`)
**Solution**: Recréé le container avec les bons bind mounts
### 📀 Espace Disque SD
**Avant**: 86% utilisé (8.4 GB libre)
**Après**: 71% utilisé (17 GB libre)
**Actions**:
- Supprimé volumes Docker orphelins (~7 GB):
- `media_jellyfin_config` (2.5 GB)
- `talloires-jellyfin-config` (2.5 GB)
- `talloires_jellyfin_config` (1 GB)
- `docker_jellyfin_config` (426 MB)
- Volumes Prometheus/Grafana/Loki orphelins
- Archivé et supprimé `/home/lionel/docker/` (ancienne structure v1)
- Migré caches vers SSD
### 🚀 Optimisations SSD
| Service | Avant | Après |
|---------|-------|-------|
| Jellyfin cache | SD (volume Docker) | `/mnt/mediaserver/jellyfin-cache` |
| Netdata cache | SD (`/home/lionel/talloires-v2/netdata/cache`) | `/mnt/mediaserver/netdata-cache` |
### 📁 Consolidation Caddyfile
- Supprimé le Caddyfile non utilisé dans `/home/lionel/talloires-v2/infra/caddy/`
- Créé symlink vers le fichier actif: `/mnt/mediaserver/talloires/caddy/Caddyfile`
### 🔐 Certificat SSL
- Exporté le certificat root Caddy 2025
- Installé sur Mac pour éviter les erreurs SSL
## État final des services
| Service | Status | Notes |
|---------|--------|-------|
| arcane | ✅ healthy | Sans Authelia |
| authelia | ✅ healthy | |
| caddy | ✅ running | |
| dozzle | ✅ running | |
| gitea | ✅ running | |
| homeassistant | ✅ running | |
| jellyfin | ✅ healthy | Cache sur SSD |
| mkdocs | ✅ running | |
| netdata | ✅ healthy | Cache sur SSD |
| shlink | ✅ running | |
| shlink-web | ✅ running | |
| signal-api | ✅ healthy | |
| transmission | ✅ running | Via WireGuard |
| wireguard | ✅ running | |
## Fichiers modifiés
- `/mnt/mediaserver/talloires/caddy/Caddyfile` - Simplifié config Shlink, désactivé Authelia pour Arcane
- `/home/lionel/talloires-v2/media/docker-compose.yml` - Cache Jellyfin sur SSD
- `/home/lionel/talloires-v2/monitoring/docker-compose.yml` - Cache Netdata sur SSD
- `/home/lionel/talloires-v2/docker-mgmt/docker-compose.yml` - Nouvelles clés Arcane
- `/home/lionel/talloires-v2/tools/docker-compose.yml` - Volume servers.json pour Shlink-web
- `/home/lionel/talloires-v2/shlink-web/servers.json` - Configuration API Shlink
## Backups créés
- `/mnt/mediaserver/backups/docker-v1-archive-20251231.tar.gz` (63 MB) - Ancienne structure Docker

152
docs/index.md Normal file
View File

@@ -0,0 +1,152 @@
# 🏔️ Talloires v2.0 Documentation
Bienvenue dans la documentation de l'infrastructure Talloires v2.0 - Migration complétée le 30 décembre 2025.
---
## 🚀 Quick Links (Go-Links)
Accès rapide aux services via les go-links:
| Go-Link | Service | Description |
|---------|---------|-------------|
| [**go**](https://go){:target="_blank"} | Shlink Web | Gestion des liens courts |
| [**go/jf**](https://go/jf){:target="_blank"} | Jellyfin | Serveur média (films, séries) |
| [**go/trn**](https://go/trn){:target="_blank"} | Transmission | Client BitTorrent (VPN) |
| [**go/git**](https://go/git){:target="_blank"} | Gitea | Hébergement Git |
| [**go/docs**](https://go/docs){:target="_blank"} | MkDocs | Cette documentation |
| [**go/ha**](https://go/ha){:target="_blank"} | Home Assistant | Domotique |
| [**go/net**](https://go/net){:target="_blank"} | Netdata | Monitoring système |
| [**go/sig**](https://go/sig){:target="_blank"} | Signal API | Notifications |
| [**go/arcane**](https://go/arcane){:target="_blank"} | 🆕 Arcane | Docker Management UI |
| [**go/logs**](https://go/logs){:target="_blank"} | 🆕 Dozzle | Docker Logs Viewer |
---
## 📊 Architecture v2.0
### Infrastructure
- **Serveur**: Raspberry Pi 5 (8GB) - Talloires
- **Stockage**: Synology DS620slim - Annecy (NFS)
- **VPN**: Tailscale (WireGuard)
- **Réseau**: UniFi Dream Router 7 (Theseus)
### Stack Logicielle
- **Containerisation**: Docker + Docker Compose
- **Reverse Proxy**: Caddy (HTTPS local)
- **DNS Local**: dnsmasq
- **VPN Tunnel**: ProtonVPN (WireGuard)
- **Management**: Arcane (Web UI) + Lazydocker (TUI)
---
## 🗂️ Sections
### [Services](services/overview.md)
Documentation détaillée de chaque service déployé.
### [Infrastructure](infra/overview.md)
Configuration réseau, VPN, DNS, backups.
### [Vault v1.0](vault/index-v1.md)
Archive de la documentation v1.0 (référence historique).
---
## 📈 Migration v1.0 → v2.0
**Date**: 30 décembre 2025
**Durée**: ~3h30
**Downtime**: ~30 minutes
**Services migrés**: 10/10 (100%)
**Réduction infrastructure**: 60% (de 25 à 10 services)
### Services Déployés (v2.0)
✅ [**Jellyfin**](https://go/jf){:target="_blank"} - Serveur média (2.3 GB restauré)
✅ [**Transmission + WireGuard**](https://go/trn){:target="_blank"} - BitTorrent avec VPN kill-switch
✅ [**Gitea**](https://go/git){:target="_blank"} - Hébergement Git (repos restaurés)
✅ [**Home Assistant**](https://go/ha){:target="_blank"} - Domotique (nouvelle installation)
✅ [**MkDocs**](https://go/docs){:target="_blank"} - Documentation (cette page!)
✅ [**Netdata**](https://go/net){:target="_blank"} - Monitoring système
✅ [**Signal API**](https://go/sig){:target="_blank"} - Notifications
✅ [**Shlink**](https://go){:target="_blank"} - URL shortener
✅ [**Caddy**] - Reverse proxy HTTPS
### 🆕 Services Ajoutés (31 décembre 2025)
✅ [**Arcane**](https://go/arcane){:target="_blank"} - Docker Management UI (BSD-3-Clause)
✅ [**Dozzle**](https://go/logs){:target="_blank"} - Real-time Docker Logs Viewer (MIT)
**Lazydocker** - Terminal UI pour Docker (MIT) - Installé sur Talloires & Annecy
### Services Retirés
**Authelia** - Remplacé par auth native de chaque service
**Portainer** - Remplacé par Arcane (open source BSD-3)
**Crowdsec** - Simplification sécurité
**Dockge** - Remplacé par Arcane + Lazydocker
**15+ autres services** - Nettoyage architecture
---
## 🔐 Sécurité
- ✅ VPN WireGuard actif (ProtonVPN Luxembourg)
- ✅ Kill-switch Transmission (network_mode)
- ✅ Accès Tailscale uniquement (pas d'exposition Internet)
- ✅ Firewall UFW actif
- ✅ Certificats HTTPS locaux (Caddy)
- ✅ Backup automatique vers Annecy (NFS)
---
## 🛠️ Maintenance
### Docker Management
**Web UI** - [Arcane](https://go/arcane){:target="_blank"}
- Gestion containers, images, volumes, networks
- Interface moderne SvelteKit
- Templates Docker Compose
- Monitoring en temps réel
**Logs** - [Dozzle](https://go/logs){:target="_blank"}
- Logs en temps réel multi-containers
- Search & filter
- Ultra-léger
**Terminal UI** - Lazydocker
```bash
# Sur Talloires
ssh lionel@talloires.local
lazydocker
# Sur Annecy (Synology)
ssh lionel@100.69.227.96
~/.local/bin/lazydocker
```
### Backups
- **Location**: `/mnt/annecy/talloires/`
- **Fréquence**: Quotidien (automatique)
- **Rétention**: 30 jours
- **Services backupés**: Jellyfin, Gitea, MkDocs, Configurations
### Monitoring
- **Netdata**: [go/net](https://go/net){:target="_blank"}
- **Arcane**: [go/arcane](https://go/arcane){:target="_blank"}
- **Dozzle**: [go/logs](https://go/logs){:target="_blank"}
- **Logs Docker**: `docker logs <container>`
- **Health checks**: Docker healthchecks
---
## 📞 Contact
**Administrateur**: Lionel
**Infrastructure**: Talloires (production)
**Backup**: Annecy (NAS Synology)
---
*Dernière mise à jour: 31 décembre 2025 - Ajout Arcane, Dozzle, Lazydocker*

382
docs/infra/overview.md Normal file
View File

@@ -0,0 +1,382 @@
# Infrastructure Talloires v2.0
Documentation de l'infrastructure réseau, VPN, DNS, et backups.
---
## 🖥️ Serveurs
### Talloires (Production)
- **Type**: Raspberry Pi 5 (8GB RAM)
- **OS**: Raspberry Pi OS (Debian 12)
- **IP Tailscale**: `100.116.198.105`
- **Hostname**: `talloires.tailfd281f.ts.net`
- **Rôle**: Serveur principal (Docker)
### Annecy (Storage)
- **Type**: Synology DS620slim
- **OS**: DSM 7.x
- **IP Tailscale**: `100.69.227.96`
- **Hostname**: `annecy.tailfd281f.ts.net`
- **Rôle**: NAS, Backups
### Theseus (Network)
- **Type**: UniFi Dream Router 7
- **Rôle**: Gateway, Firewall, DHCP
---
## 🐳 Outils Docker Management
### 🎨 Arcane - Web UI
**URL**: [go/arcane](https://go/arcane)
**License**: BSD-3-Clause
**Status**: ✅ Opérationnel
**Fonctionnalités:**
- Gestion containers, images, volumes, networks
- Docker Compose templates & projects
- Monitoring temps réel (CPU/RAM)
- Interface moderne & responsive
- Multi-serveurs (via agents)
**Usage:**
```bash
# Accès web
https://go/arcane
# Credentials par défaut
Username: arcane
Password: arcane-admin
```
**Alternative à:** Portainer (proprietary), Dockge (unstable)
---
### 📋 Dozzle - Logs Viewer
**URL**: [go/logs](https://go/logs)
**License**: MIT
**Status**: ✅ Opérationnel
**Fonctionnalités:**
- Real-time log streaming
- Multi-container view
- Search & filter
- Ultra-léger (~30 MB RAM)
- Aucune base de données
**Usage:**
```bash
# Accès web
https://go/logs
# Pas d'authentification requise (Tailscale VPN only)
```
**Use cases:** Debug, troubleshooting, monitoring logs
---
### ⚡ Lazydocker - Terminal UI
**License**: MIT
**Status**: ✅ Installé sur Talloires & Annecy
**Version**: 0.24.3
**Installation:**
```bash
# Talloires
lazydocker --version
# Location: /usr/local/bin/lazydocker
# Annecy (Synology)
~/.local/bin/lazydocker --version
```
**Fonctionnalités:**
- TUI (Terminal User Interface)
- Stats en temps réel (CPU/RAM)
- Logs interactifs
- Actions rapides (start/stop/restart)
- Fonctionne via SSH
**Usage:**
```bash
# Sur Talloires
ssh lionel@talloires.local
lazydocker
# Sur Annecy
ssh lionel@100.69.227.96
~/.local/bin/lazydocker
```
**Navigation:**
- `↑/↓`: Sélection
- `Enter`: Actions
- `l`: Logs
- `e`: Exec shell
- `q`: Quitter
---
### 📊 Comparaison Outils
| Feature | Arcane | Dozzle | Lazydocker |
|---------|--------|--------|------------|
| **Type** | Web UI | Web UI | TUI |
| **Containers** | ✅ Full mgmt | ❌ View only | ✅ Full mgmt |
| **Logs** | ✅ | ✅ | ✅ |
| **Compose** | ✅ Templates | ❌ | ✅ View |
| **Stats** | ✅ | ❌ | ✅ |
| **Remote** | ✅ Multi-host | ❌ Single | ❌ Single |
| **SSH** | ❌ | ❌ | ✅ Works |
| **RAM** | ~100 MB | ~30 MB | ~50 MB |
**Recommandations:**
- **Arcane**: Gestion quotidienne, templates, multi-serveurs
- **Dozzle**: Quick log inspection, debugging
- **Lazydocker**: SSH access, TUI lovers, remote management
---
## 🌐 Réseau
### Tailscale VPN
- **Type**: WireGuard mesh VPN
- **MagicDNS**: Désactivé (dnsmasq preferred)
- **Subnet**: `100.64.0.0/10`
### DNS Local (dnsmasq)
**Config**: `/etc/dnsmasq.d/tailscale.conf`
```
# Machines
address=/talloires.local/100.116.198.105
address=/annecy.local/100.69.227.96
# Wildcards
address=/.talloires.local/100.116.198.105
# Go-links
address=/go/100.116.198.105
# Upstream DNS
server=127.0.0.1#5053
```
### AdGuard DNS (DoH)
- **Port**: 5053
- **Upstream**: AdGuard DNS-over-HTTPS
- **Config**: `cloudflared` tunnel
---
## 🔐 VPN Tunnel (ProtonVPN)
### Configuration WireGuard
- **Server**: Luxembourg (LU#44)
- **Public IP**: 5.253.204.190
- **Endpoint**: 5.253.204.162:51820
- **Config**: `/home/lionel/talloires-v2/transmission/wireguard/wg0.conf`
### Kill-Switch
Transmission utilise `network_mode: service:wireguard` → Impossible de leak l'IP réelle.
### Monitoring VPN
- Vérification automatique IP publique
- Alertes Telegram si VPN down (<30s)
- Health checks Docker
---
## 💾 Backups
### Structure NFS
```
/mnt/annecy/talloires/
├── migration-v2/ # Backups migration
│ ├── jellyfin-config-*.tar.gz # 2.3 GB
│ ├── gitea-data-*.tar.gz # Repos Git
│ ├── mkdocs-v1-archive-*.tar.gz # 12 KB
│ └── critical-configs-*.tar.gz # 3.5 KB
└── daily/ # Backups quotidiens (TODO)
```
### NFS Mount
```bash
sudo mount -t nfs 100.69.227.96:/volume1/talloires /mnt/annecy -o rw,hard,intr,rsize=8192,wsize=8192
```
**Fstab**:
```
100.69.227.96:/volume1/talloires /mnt/annecy nfs rw,hard,intr,rsize=8192,wsize=8192 0 0
```
### Backup Automatique (Cron)
TODO: Mettre à jour cron pour v2.0 structure.
---
## 🔒 Sécurité
### Firewall (UFW)
```bash
sudo ufw status
```
Ports ouverts:
- 80, 443: HTTP/HTTPS (Caddy)
- 2222: SSH Gitea
- 8096: Jellyfin (direct access)
- 22: SSH (Tailscale only)
### Certificats HTTPS
- **CA**: Caddy Local Authority
- **Cert**: `/data/caddy/pki/authorities/local/root.crt`
- **Installation**: Importer dans macOS Keychain → Always Trust
### Accès
- Tailscale VPN uniquement
- Pas d'exposition Internet directe
- SSH keys only (no password)
---
## 📊 Monitoring
### Stack Monitoring
**Netdata** - System metrics
- **URL**: `https://go/net`
- **Métriques**: CPU, RAM, Disk, Network, Docker
- **Alertes**: À configurer (optionnel)
**Arcane** - Docker monitoring
- **URL**: `https://go/arcane`
- **Métriques**: Containers stats (CPU/RAM)
- **Features**: Dashboard, projects, logs
**Dozzle** - Logs viewer
- **URL**: `https://go/logs`
- **Features**: Real-time logs, search, filter
**Lazydocker** - Terminal monitoring
```bash
ssh lionel@talloires.local
lazydocker
```
### Docker Health Checks
Tous les containers ont des health checks configurés.
### Logs
```bash
# CLI
docker logs <container>
docker logs <container> --follow
docker logs <container> --tail 100
# Web UI (Dozzle)
https://go/logs
# TUI (Lazydocker)
lazydocker
```
---
## 🛠️ Maintenance
### Docker Management
**Via Arcane (Web):**
```
https://go/arcane
→ Containers → Start/Stop/Restart
→ Images → Pull/Delete
→ Projects → Manage Compose stacks
```
**Via Lazydocker (TUI):**
```bash
ssh lionel@talloires.local
lazydocker
# Navigate avec arrows, Enter pour actions
```
**Via CLI:**
```bash
# Update containers
cd /home/lionel/talloires-v2/core
docker compose pull
docker compose up -d
# Restart service
docker restart <container>
# View logs
docker logs <container> --tail 100
```
### Backup Manuel
```bash
# Jellyfin
tar -czf /mnt/annecy/talloires/manual/jellyfin-$(date +%Y%m%d).tar.gz \\
/home/lionel/talloires-v2/jellyfin/config
# Gitea
tar -czf /mnt/annecy/talloires/manual/gitea-$(date +%Y%m%d).tar.gz \\
/home/lionel/talloires-v2/gitea/
# Arcane database
tar -czf /mnt/annecy/talloires/manual/arcane-$(date +%Y%m%d).tar.gz \\
/home/lionel/talloires-v2/docker-mgmt/arcane-data
```
### Restart Services
```bash
docker restart <container>
docker compose restart
```
---
## 📁 Fichiers de Configuration
### Docker Management
```
/home/lionel/talloires-v2/docker-mgmt/
├── docker-compose.yml # Arcane + Dozzle
└── arcane-data/ # Arcane database
```
### Caddy
```
/home/lionel/talloires-v2/caddy/
├── Caddyfile # Reverse proxy config
└── Caddyfile.backup-* # Backups automatiques
```
### Services
```
/home/lionel/talloires-v2/
├── core/ # Caddy, Shlink
├── jellyfin/ # Media server
├── transmission/ # BitTorrent + WireGuard
├── gitea/ # Git hosting
├── homeassistant/ # Domotique
├── mkdocs/ # Documentation
├── netdata/ # Monitoring
├── signal-api/ # Notifications
└── docker-mgmt/ # Arcane + Dozzle
```
---
*Voir [Services](../services/overview.md) pour configuration applicative.*
*Dernière mise à jour: 31 décembre 2025*

272
docs/services/overview.md Normal file
View File

@@ -0,0 +1,272 @@
# Services Talloires v2.0
Documentation des services déployés sur l'infrastructure v2.0.
---
## 🐳 Arcane - Docker Management UI
**URL**: `https://go/arcane`
**Port Direct**: `3552`
**Status**: ✅ Opérationnel
**License**: BSD-3-Clause (Open Source)
### Fonctionnalités
- ✅ Gestion containers (start/stop/restart/delete)
- ✅ Gestion images (pull/delete/inspect)
- ✅ Gestion volumes & networks
- ✅ Docker Compose templates
- ✅ Monitoring temps réel (CPU/RAM)
- ✅ Interface moderne SvelteKit
- ✅ Mobile responsive
### Credentials
```
Username: arcane
Password: arcane-admin
```
**⚠️ Important**: Changer le mot de passe par défaut lors de la première connexion.
### Configuration
```yaml
# /home/lionel/talloires-v2/docker-mgmt/docker-compose.yml
services:
arcane:
image: ghcr.io/getarcaneapp/arcane:latest
container_name: arcane
networks:
- talloires_net
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./arcane-data:/app/data
environment:
- APP_ENV=production
- PUBLIC_SESSION_SECRET=<generated>
- ENCRYPTION_KEY=<generated>
- TZ=Europe/Luxembourg
```
### Features Clés
- **Projects**: Organiser les stacks Docker Compose
- **Templates**: Déploiement rapide de services
- **Logs**: Vue intégrée des logs containers
- **Stats**: Métriques CPU/RAM en temps réel
- **Remote Hosts**: Support multi-serveurs (via agents)
### Alternative À
- ❌ Portainer (proprietary license)
- ❌ Dockge (stability issues)
- ✅ Arcane = Open source + moderne + stable
---
## 📋 Dozzle - Docker Logs Viewer
**URL**: `https://go/logs`
**Port Direct**: `8080`
**Status**: ✅ Opérationnel
**License**: MIT (Open Source)
### Fonctionnalités
- ✅ Logs en temps réel (live tailing)
- ✅ Multi-container view
- ✅ Search & filter
- ✅ Dark/light mode
- ✅ Ultra-léger (~30 MB RAM)
- ✅ Aucune base de données requise
### Configuration
```yaml
# /home/lionel/talloires-v2/docker-mgmt/docker-compose.yml
services:
dozzle:
image: amir20/dozzle:latest
container_name: dozzle
networks:
- talloires_net
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- DOZZLE_LEVEL=info
- DOZZLE_FILTER=status=running
- TZ=Europe/Luxembourg
```
### Use Cases
- 🔍 Debugging rapide de containers
- 📊 Monitoring logs en temps réel
- 🐛 Troubleshooting incidents
- 📈 Analyse de patterns
### Features
- **Real-time**: Logs streaming instantané
- **Search**: Recherche textuelle puissante
- **Filter**: Par container, niveau, temps
- **Lightweight**: Aucun overhead
---
## 🎬 Jellyfin - Serveur Média
**URL**: `https://go/jf`
**Port Direct**: `8096`
**Status**: ✅ Opérationnel
**Data**: 2.3 GB restauré depuis v1.0
### Configuration
- Accès Infuse: `100.116.198.105:8096`
- Authentification: Compte Jellyfin (lionel)
- Backup: Quotidien vers Annecy
---
## 📥 Transmission - BitTorrent
**URL**: `https://go/trn`
**Status**: ✅ Opérationnel + VPN Kill-switch
**VPN**: ProtonVPN Luxembourg (LU#44)
### Sécurité VPN
- Network mode: `service:wireguard`
- Public IP: 5.253.204.190 (ProtonVPN)
- Kill-switch: Actif (pas de leak possible)
- Monitoring: Alertes Telegram si VPN down
### Configuration
- Watch directory: `/config/watch`
- Downloads: `/downloads`
- Web UI: Port 9091 (via WireGuard container)
---
## 💾 Gitea - Hébergement Git
**URL**: `https://go/git`
**SSH Port**: `2222`
**Status**: ✅ Opérationnel
### Comptes
- **admin**: lionel.dupre@pm.me (Admin)
- **lionel**: dflected@dflected.org (User)
### Clonage SSH
```bash
git clone ssh://git@talloires.local:2222/user/repo.git
```
### Données Restaurées
- Tous les repositories v1.0
- Clés SSH utilisateurs
- Configuration complète
---
## 🏠 Home Assistant
**URL**: `https://go/ha`
**Status**: ✅ Nouvelle installation (config requise)
### Configuration Initiale
1. Ouvrir `https://go/ha`
2. Créer compte admin
3. Configurer devices
---
## 📚 MkDocs - Documentation
**URL**: `https://go/docs`
**Status**: ✅ Opérationnel v2.0
### Structure
- Documentation v2.0 (active)
- Archive v1.0 (vault/)
---
## 📊 Netdata - Monitoring
**URL**: `https://go/net`
**Status**: ✅ Opérationnel
### Métriques Disponibles
- CPU, RAM, Disk I/O
- Network traffic
- Docker containers
- System load
### Netdata Cloud
Optionnel - Nécessite `NETDATA_CLAIM_TOKEN`
---
## 📱 Signal API - Notifications
**URL**: `https://go/sig`
**Port Direct**: `8080`
**Status**: ✅ Opérationnel
### Utilisation
```bash
# Envoyer notification
curl -X POST https://go/sig/v2/send \\
-H "Content-Type: application/json" \\
-d '{"message":"Test","number":"+33...","recipients":["+33..."]}'
```
---
## 🔗 Shlink - URL Shortener
**Web UI**: `https://go`
**API**: `https://api.shlink.talloires.local`
**Status**: ✅ Opérationnel
### Features
- Liens courts personnalisés
- Statistiques de clics
- QR codes
- API REST
---
## 🌐 Caddy - Reverse Proxy
**Status**: ✅ Opérationnel
**Protocole**: HTTPS (certificats internes)
### Fonctions
- Reverse proxy pour tous les services
- HTTPS automatique (certificats Caddy)
- Go-links routing
- Gestion certificats
### Configuration
```bash
/home/lionel/talloires-v2/caddy/Caddyfile
```
---
## 📊 Récapitulatif Services
| Service | URL | License | Status |
|---------|-----|---------|--------|
| **Arcane** | go/arcane | BSD-3 | ✅ |
| **Dozzle** | go/logs | MIT | ✅ |
| Jellyfin | go/jf | GPL-2 | ✅ |
| Transmission | go/trn | GPL-2 | ✅ |
| Gitea | go/git | MIT | ✅ |
| Home Assistant | go/ha | Apache-2 | ✅ |
| MkDocs | go/docs | BSD-2 | ✅ |
| Netdata | go/net | GPL-3 | ✅ |
| Signal API | go/sig | AGPL-3 | ✅ |
| Shlink | go | MIT | ✅ |
| Caddy | - | Apache-2 | ✅ |
**Total**: 11 services opérationnels
---
*Dernière mise à jour: 31 décembre 2025*

70
docs/vault/README.md Normal file
View File

@@ -0,0 +1,70 @@
# 🗄️ Vault - Archive Documentation v1.0
Cette section contient l'archive de la documentation de l'infrastructure Talloires **v1.0** (pré-migration du 30 décembre 2025).
---
## ⚠️ Archive Historique
**Cette documentation est archivée à titre de référence.**
Pour la documentation actuelle de l'infrastructure v2.0, voir:
- [Page d'accueil v2.0](../index.md)
- [Services v2.0](../services/overview.md)
- [Infrastructure v2.0](../infra/overview.md)
---
## 📚 Contenu v1.0 Archivé
### [Documentation v1.0](index-v1.md)
Page d'accueil originale de la documentation v1.0.
### [Services v1.0](services-v1/)
Documentation des services de l'infrastructure v1.0 (25+ services).
### [Configuration v1.0](config/)
Fichiers de configuration et références techniques v1.0.
### [Référence v1.0](reference/)
Documentation de référence et guides v1.0.
---
## 🔄 Migration v1.0 → v2.0
**Date**: 30 décembre 2025
**Stratégie**: Refonte complète (60% réduction services)
### Services Conservés et Migrés
- ✅ Jellyfin (data restaurée)
- ✅ Gitea (repos restaurés)
- ✅ Transmission (nouvelle config VPN)
- ✅ MkDocs (architecture renouvelée)
### Services Retirés
- ❌ Authelia (SSO supprimé)
- ❌ Portainer (CLI preferred)
- ❌ Crowdsec (simplification)
- ❌ Dockge
- ❌ 15+ autres services
### Architecture Changée
- **v1.0**: 25+ containers, Authelia SSO, ZeroTier VPN
- **v2.0**: 10 containers, Auth native, Tailscale VPN, Go-links
---
## 📦 Backup Complet v1.0
Archive complète disponible sur Annecy NAS:
```
/mnt/annecy/talloires/migration-v2/
├── talloires-v1-docker-20251230-191258.tar.gz (65 MB)
├── mkdocs-v1-archive-20251230.tar.gz (12 KB)
└── critical-configs-20251230-191758.tar.gz (3.5 KB)
```
---
*Retour à la [documentation v2.0](../index.md)*

View File

@@ -0,0 +1,58 @@
# Caddy - Reverse Proxy
## Configuration
Caddy gère le reverse proxy et les certificats SSL internes pour tous les services.
### Principes clés
1. **Domaines .local** : Utilisent Authelia pour l'authentification (réseau local)
2. **Domaines .tailfd281f.ts.net** : Accès ZeroTier sans Authelia (services ont leur propre auth)
3. **Certificats** : Auto-générés par Caddy (CA interne)
### Services sans Authelia
Ces services ont leur propre authentification :
- **Gitea** : OIDC via Authelia
- **Outline** : OIDC via Authelia
- **Linkwarden** : Auth intégrée
- **Vikunja** : Auth intégrée
- **Jellyfin** : Auth intégrée
- **Home Assistant** : Auth intégrée
### Snippet Authelia
```caddyfile
(authelia) {
forward_auth authelia:9091 {
uri /api/authz/forward-auth
copy_headers Remote-User Remote-Groups Remote-Email Remote-Name
}
}
```
### WebSocket Support
Pour Home Assistant et Dockge :
```caddyfile
homeassistant.talloires.local {
reverse_proxy homeassistant:8123 {
header_up Host {host}
}
tls internal
}
```
### Problèmes connus
| Problème | Solution |
|----------|----------|
| Safari refuse certificats | Importer CA dans Trousseau macOS |
| 400 Bad Request | Vérifier que le service n'a pas double auth |
| Page blanche | Vérifier WebSocket headers |
### Fichier
`~/docker/caddy/Caddyfile`

View File

@@ -0,0 +1,63 @@
# Docker Stacks
## Organisation
Les services sont organisés en stacks modulaires :
| Stack | Répertoire | Services |
|-------|------------|----------|
| Core | ~/docker/core | Caddy, Authelia, CrowdSec, Portainer, Dockge |
| Monitoring | ~/docker/monitoring | Uptime Kuma, Netdata, Grafana, Loki, Promtail |
| Media | ~/docker/media | Jellyfin, Transmission |
| Productivity | ~/docker/productivity | Gitea, MkDocs, Vikunja, LanguageTool |
| Homelab | ~/docker/homelab | Home Assistant, Watchtower |
| Linkwarden | ~/docker/linkwarden | Linkwarden + PostgreSQL |
| Outline | ~/docker/outline | Outline + PostgreSQL + Redis |
## Réseau
Tous les containers utilisent le réseau externe `talloires_net` :
```yaml
networks:
talloires_net:
external: true
```
## Volumes
### Volumes nommés (préfixés)
Attention lors des migrations : les volumes Docker sont préfixés par le nom du répertoire.
Exemple : `transmission_config` dans `~/docker/talloires` devient `talloires_transmission_config`.
**Solution** : Utiliser `external: true` pour les volumes existants :
```yaml
volumes:
talloires_transmission_config:
external: true
```
### Volumes bind mount
Préférer les bind mounts pour les données importantes :
```yaml
volumes:
- /home/lionel/docker/gitea:/data
```
## Commandes utiles
```bash
# Démarrer un stack
cd ~/docker/media && docker compose up -d
# Voir les logs
docker logs -f jellyfin
# Recréer un container
docker compose up -d --force-recreate jellyfin
```

View File

@@ -0,0 +1,105 @@
# Architecture Réseau
## Vue d'ensemble
## Composants
### Tailscale
VPN mesh reliant tous les appareils de la famille.
| Machine | IP Tailscale | OS |
|---------|--------------|-----|
| talloires | 100.116.198.105 | Raspberry Pi 5 (Debian) |
| annecy | 100.118.210.128 | Synology DS620slim |
| olympou | 100.125.242.58 | macOS |
| pentamodi | 100.78.237.78 | iOS |
| perce | 100.69.7.78 | tvOS (Apple TV) |
**Tailnet:** tailfd281f.ts.net
### dnsmasq
Serveur DNS local sur Talloires, résout les domaines internes.
**Config:** `/etc/dnsmasq.d/tailscale.conf`
**Commandes:**
### cloudflared
Proxy DNS-over-HTTPS vers AdGuard DNS avec profil personnel.
**Config:** `/etc/cloudflared/config.yml`
**Commandes:**
## Configuration Tailscale Admin
Dans Tailscale Admin Console → DNS → Nameservers :
- **Global nameserver:** 100.116.198.105 (Talloires)
- **Override local DNS:** activé
Cela force tous les appareils Tailscale à utiliser dnsmasq sur Talloires.
## Domaines
| Domaine | Usage |
|---------|-------|
| `*.talloires.local` | Services sur Talloires (recommandé) |
| `*.talloires.tailfd281f.ts.net` | Alternative Tailscale |
| `go` | Raccourcis Shlink |
## Dépannage
### Test résolution DNS
Server: 100.116.198.105
Address: 100.116.198.105#53
Name: go
Address: 100.116.198.105
Server: 100.116.198.105
Address: 100.116.198.105#53
Name: docs.talloires.local
Address: 100.116.198.105
Server: 100.116.198.105
Address: 100.116.198.105#53
Non-authoritative answer:
Name: google.com
Address: 142.250.27.138
Name: google.com
Address: 142.250.27.100
Name: google.com
Address: 142.250.27.101
Name: google.com
Address: 142.250.27.102
Name: google.com
Address: 142.250.27.113
Name: google.com
Address: 142.250.27.139
### Services ne répondent pas
1. Vérifier que dnsmasq tourne: `sudo systemctl status dnsmasq`
2. Vérifier que cloudflared tourne: `sudo systemctl status cloudflared-dns`
3. Vérifier que Caddy tourne: `docker ps | grep caddy`
### Cache DNS

View File

@@ -0,0 +1,74 @@
# Troubleshooting
## Problèmes connus
### Certificats SSL
**Symptôme** : Safari affiche "Can't establish secure connection"
**Cause** : CA Caddy non trusté par macOS
**Solution** :
```bash
# Exporter le CA
ssh lionel@10.144.221.22 "docker exec caddy cat /data/caddy/pki/authorities/local/root.crt" > ~/Downloads/caddy-root-ca.crt
# Importer dans macOS
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/Downloads/caddy-root-ca.crt
```
### Gitea OAuth "500 Internal Server Error"
**Cause** : URL OAuth pointe vers hostname Docker interne
**Vérifier** :
```bash
docker exec gitea sqlite3 /data/gitea/gitea.db "SELECT cfg FROM login_source WHERE type=6;"
```
**Corriger** :
```bash
docker exec gitea sqlite3 /data/gitea/gitea.db "UPDATE login_source SET cfg = REPLACE(cfg, 'http://authelia:9091', 'https://auth.talloires.local') WHERE type=6;"
docker restart gitea
```
### Container ne trouve pas l'URL externe
**Cause** : Container ne peut pas résoudre ou valider le certificat SSL
**Solution** : Monter le CA Caddy dans le container :
```yaml
volumes:
- /home/lionel/docker/caddy-root-ca.crt:/etc/ssl/certs/caddy-root-ca.crt:ro
environment:
- SSL_CERT_FILE=/etc/ssl/certs/caddy-root-ca.crt
```
### Outline "400 Bad Request"
**Cause** : Double authentification (Authelia + OIDC Outline)
**Solution** : Ne pas utiliser `import authelia` pour Outline dans Caddyfile
### Volumes disparus après migration
**Cause** : Nom du volume change avec le répertoire (préfixe)
**Solution** : Utiliser `external: true` ou lister les volumes existants :
```bash
docker volume ls | grep transmission
```
### Home Assistant page blanche
**Cause** : WebSocket non supporté ou mauvais reverse proxy
**Vérifier** :
```bash
curl -s http://localhost:8123 | head -5
```
**Solution** : Utiliser le nom du container, pas l'IP :
```caddyfile
reverse_proxy homeassistant:8123
```

77
docs/vault/index-v1.md Normal file
View File

@@ -0,0 +1,77 @@
# Talloires - Home Server
Bienvenue sur le portail de documentation de **Talloires**, le serveur domestique Raspberry Pi 5.
## 🚀 Go Links (Raccourcis)
Accès rapide via `https://go/xxx` :
| Raccourci | Service | Raccourci | Service |
|-----------|---------|-----------|---------|
| [go/ha](https://go/ha) | Home Assistant | [go/jf](https://go/jf) | Jellyfin |
| [go/lw](https://go/lw) | Linkwarden | [go/lt](https://go/lt) | LanguageTool |
| [go/docs](https://go/docs) | Documentation | [go/git](https://go/git) | Gitea |
| [go/grafana](https://go/grafana) | Grafana | [go/dockge](https://go/dockge) | Dockge |
| [go/shlink](https://go/shlink) | Admin Go Links | [go/auth](https://go/auth) | Authelia |
**Tous les go-links :** ha, homeassistant, jf, jellyfin, lw, linkwarden, docs, git, auth, grafana, dockge, portainer, transmission, netdata, uptime, cockpit, vikunja, outline, lt, languagetool, shlink, annecy
[Créer un nouveau go-link](https://go/shlink)
---
## Services
### Media
| Service | Go Link | URL |
|---------|---------|-----|
| Jellyfin | [go/jf](https://go/jf) | jellyfin.talloires.local |
| Transmission | [go/transmission](https://go/transmission) | transmission.talloires.local |
### Productivité
| Service | Go Link | URL |
|---------|---------|-----|
| Vikunja | [go/vikunja](https://go/vikunja) | vikunja.talloires.local |
| Outline | [go/outline](https://go/outline) | outline.talloires.local |
| Linkwarden | [go/lw](https://go/lw) | linkwarden.talloires.local |
| LanguageTool | [go/lt](https://go/lt) | languagetool.talloires.local |
### Infrastructure
| Service | Go Link | URL |
|---------|---------|-----|
| Portainer | [go/portainer](https://go/portainer) | portainer.talloires.local |
| Dockge | [go/dockge](https://go/dockge) | dockge.talloires.local |
| Gitea | [go/git](https://go/git) | git.talloires.local |
| MkDocs | [go/docs](https://go/docs) | docs.talloires.local |
| Shlink | [go/shlink](https://go/shlink) | shlink.talloires.local |
### Monitoring
| Service | Go Link | URL |
|---------|---------|-----|
| Grafana | [go/grafana](https://go/grafana) | grafana.talloires.local |
| Netdata | [go/netdata](https://go/netdata) | netdata.talloires.local |
| Uptime Kuma | [go/uptime](https://go/uptime) | uptime.talloires.local |
| Cockpit | [go/cockpit](https://go/cockpit) | cockpit.talloires.local |
### Domotique
| Service | Go Link | URL |
|---------|---------|-----|
| Home Assistant | [go/ha](https://go/ha) | homeassistant.talloires.local |
### Sécurité
| Service | Go Link | URL |
|---------|---------|-----|
| Authelia | [go/auth](https://go/auth) | auth.talloires.local |
| CrowdSec | - | (service interne) |
---
## Accès rapide
- [Vue ensemble des services](services/overview.md)
- [Architecture réseau](config/network.md)
- [Configuration Shlink](services/shlink.md)
- [Configuration SSO](services/authelia.md)
- [Backup](services/backup.md)
- [Ports utilisés](reference/ports.md)
- [Commandes utiles](reference/commands.md)

View File

@@ -0,0 +1,7 @@
document.addEventListener('DOMContentLoaded', function() {
var links = document.querySelectorAll('a[href^="http"]');
links.forEach(function(link) {
link.setAttribute('target', '_blank');
link.setAttribute('rel', 'noopener noreferrer');
});
});

View File

@@ -0,0 +1,118 @@
# Commandes utiles
## Docker
```bash
# Status de tous les containers
docker ps -a
# Logs dun service
docker logs -f <container>
# Redémarrer un service
docker restart <container>
# Recréer un service (après modif compose)
cd ~/docker/talloires && docker compose up -d <service>
# Tout redémarrer
cd ~/docker/talloires && docker compose down && docker compose up -d
# Shell dans un container
docker exec -it <container> sh
```
## Caddy
```bash
# Recharger la config
docker exec caddy caddy reload --config /etc/caddy/Caddyfile
# Voir les logs
docker logs caddy -f
# Tester la config
docker exec caddy caddy validate --config /etc/caddy/Caddyfile
```
## Authelia
```bash
# Logs
docker logs authelia -f
# Générer un hash de mot de passe
docker exec authelia authelia crypto hash generate argon2 --password "motdepasse"
# Générer un hash pour OIDC secret
docker exec authelia authelia crypto hash generate pbkdf2 --password "secret"
```
## Backup
```bash
# Lancer un backup manuel
~/backup-to-annecy.sh
# Voir le log
cat ~/backup.log
# Lister les backups sur Annecy
sudo ssh -i /root/.ssh/id_ed25519 rsync-talloires@10.171.171.50 "ls -lh /volume1/Backups/talloires/"
```
## Système
```bash
# Espace disque
df -h
# Mémoire
free -h
# Température CPU
vcgencmd measure_temp
# Services systemd
sudo systemctl status docker
sudo systemctl status cockpit
# Logs système
journalctl -f
```
## Réseau
```bash
# IP des containers
docker network inspect talloires_net | grep -A2 Name
# Test DNS Docker
docker exec caddy nslookup authelia
# Connecter un container au réseau
docker network connect talloires_net <container>
```
## CrowdSec
```bash
# Status
docker exec crowdsec cscli metrics
# Décisions actives (bans)
docker exec crowdsec cscli decisions list
# Ajouter un ban manuel
docker exec crowdsec cscli decisions add --ip 1.2.3.4 --reason "test"
```
## Certificats
```bash
# Exporter le CA Caddy (pour clients)
docker exec caddy cat /data/caddy/pki/authorities/local/root.crt > caddy-ca.crt
# Installer sur Mac
security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db caddy-ca.crt
```

View File

@@ -0,0 +1,98 @@
# Ports utilises
## Ports exposes (accessibles via reseau)
| Port | Service | Protocol | Notes |
|------|---------|----------|-------|
| 80 | Caddy (redirect HTTPS) | TCP | Redirige vers 443 |
| 443 | Caddy (reverse proxy) | TCP | Point entree principal |
| 8096 | Jellyfin | TCP | Acces direct (optionnel) |
| 3030 | Gitea HTTP | TCP | Mappe depuis 3000 interne |
| 2222 | Gitea SSH | TCP | Mappe depuis 22 interne |
| 8123 | Home Assistant | TCP | Mode host network |
| 9090 | Cockpit | TCP | Admin systeme |
| 1514 | Syslog-ng | TCP/UDP | Collecte syslog |
| 51413 | Transmission P2P | TCP/UDP | BitTorrent |
## Ports internes Docker (talloires_net)
| Port | Service(s) | Notes |
|------|------------|-------|
| 3001 | Uptime Kuma | |
| 3100 | Loki | Agregation logs |
| 3456 | Vikunja | |
| 5001 | Dockge | |
| 5432 | PostgreSQL | Linkwarden-db, Outline-db |
| 6379 | Redis | Outline-redis |
| 8000 | MkDocs | |
| 8010 | LanguageTool | |
| 8080 | Shlink, Shlink-web | Go Links |
| 9000 | Portainer | |
| 9091 | Authelia, Transmission Web | |
| 19999 | Netdata | |
## Go Links
Acces rapide a tous les services via `https://go/xxx`
| Go Link | Service |
|---------|---------|
| go/ha | Home Assistant |
| go/jf | Jellyfin |
| go/lw | Linkwarden |
| go/lt | LanguageTool |
| go/docs | Documentation |
| go/git | Gitea |
| go/auth | Authelia |
| go/grafana | Grafana |
| go/dockge | Dockge |
| go/portainer | Portainer |
| go/shlink | Admin Go Links |
[Liste complete et creation de nouveaux liens](../services/shlink.md)
## URLs par domaine
### Acces local (.talloires.local) - avec Authelia
| Service | URL | Authentification |
|---------|-----|------------------|
| Go Links | https://go | Shlink |
| Homepage | https://talloires.local | Authelia |
| Auth | https://auth.talloires.local | - |
| Shlink Admin | https://shlink.talloires.local | Authelia |
| Git | https://git.talloires.local | OIDC Authelia |
| Jellyfin | https://jellyfin.talloires.local | Authelia |
| Grafana | https://grafana.talloires.local | Header Auth |
| Portainer | https://portainer.talloires.local | Authelia |
| Dockge | https://dockge.talloires.local | Authelia |
| Docs | https://docs.talloires.local | Authelia |
| Vikunja | https://vikunja.talloires.local | Authelia |
| Outline | https://outline.talloires.local | OIDC Authelia |
| Linkwarden | https://linkwarden.talloires.local | Authelia |
| LanguageTool | https://languagetool.talloires.local | Authelia |
| Transmission | https://transmission.talloires.local | Authelia |
| Netdata | https://netdata.talloires.local | Authelia |
| Uptime Kuma | https://uptime.talloires.local | Authelia |
| Cockpit | https://cockpit.talloires.local | Authelia |
| Home Assistant | https://homeassistant.talloires.local | Authelia |
### Acces ZeroTier (.talloires.tailfd281f.ts.net) - sans Authelia
Ces URLs sont accessibles depuis exterieur via le reseau ZeroTier.
| Service | URL | Auth native |
|---------|-----|-------------|
| Go Links | https://go | Shlink |
| Vikunja | https://vikunja.talloires.tailfd281f.ts.net | Vikunja login |
| Outline | https://outline.talloires.tailfd281f.ts.net | OIDC Authelia |
| Linkwarden | https://linkwarden.tailfd281f.ts.net | Linkwarden login |
| LanguageTool | https://languagetool.talloires.tailfd281f.ts.net | Aucune (API) |
## Reseau ZeroTier
| Serveur | IP ZeroTier | Role |
|---------|-------------|------|
| Talloires | 10.144.221.22 | Serveur principal (Pi5) |
| Annecy | 10.144.78.193 | NAS Synology (backup) |
| Olympou | 10.144.46.46 | Mac de travail |

View File

@@ -0,0 +1,56 @@
# Scripts de maintenance
Scripts utilitaires pour la gestion de Talloires.
## update-containers.sh
Met à jour tous les containers Docker en parcourant les répertoires avec un fichier docker-compose.
**Emplacement** :
=== Pulling latest images ===
**Usage** :
---
## transmission-toggle.sh
Active/désactive le container Transmission à la demande (économie de ressources).
**Emplacement** :
🔴 Transmission is STOPPED
**Usage** :
---
## backup-to-annecy.sh
Sauvegarde les configs Docker vers le NAS Synology (Annecy).
**Emplacement** :
**Planification** : Cron à 3h00 quotidien
**Vérifier les backups** :
---
## Watchtower (automatique)
Watchtower vérifie et met à jour automatiquement les containers à 4h00.
**Configuration** : Dans
**Logs** :

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`

68
mkdocs.yml Normal file
View File

@@ -0,0 +1,68 @@
site_name: Talloires v2.0 Documentation
site_description: Documentation infrastructure Talloires v2.0
site_author: Lionel
site_url: http://docs.talloires.local
theme:
name: material
language: fr
palette:
# Light mode
- media: "(prefers-color-scheme: light)"
scheme: default
primary: indigo
accent: indigo
toggle:
icon: material/brightness-7
name: Switch to dark mode
# Dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
primary: indigo
accent: indigo
toggle:
icon: material/brightness-4
name: Switch to light mode
features:
- navigation.instant
- navigation.tracking
- navigation.tabs
- navigation.sections
- navigation.expand
- navigation.top
- search.suggest
- search.highlight
- content.code.copy
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences
- pymdownx.tabbed:
alternate_style: true
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
- tables
- toc:
permalink: true
- attr_list # Enable target="_blank" for links
nav:
- Changelog:
- 2025-12-31: changelog/2025-12-31.md
- Accueil: index.md
- Services:
- Vue d'ensemble: services/overview.md
- Infrastructure:
- Vue d'ensemble: infra/overview.md
- Vault (v1.0):
- Archive v1.0: vault/README.md
- Documentation v1.0: vault/index-v1.md
- Services v1.0: vault/services-v1/overview.md
- Configuration v1.0: vault/config/docker-stacks.md
extra:
social:
- icon: fontawesome/brands/github
link: https://git.talloires.local

6
sync.log Normal file
View File

@@ -0,0 +1,6 @@
Fri 19 Dec 16:19:29 CET 2025: Pulled new changes
Fri 19 Dec 16:20:07 CET 2025: Pulled new changes
Fri 19 Dec 17:56:02 CET 2025: Pulled new changes
Fri 19 Dec 17:59:01 CET 2025: Pulled new changes
Tue 23 Dec 03:25:01 CET 2025: Pulled new changes
Tue 23 Dec 03:25:01 CET 2025: Triggered MkDocs rebuild

12
sync.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
cd /home/lionel/docker/docs
git fetch origin main --quiet
LOCAL=$(git rev-parse HEAD)
REMOTE=$(git rev-parse origin/main)
if [ "$LOCAL" != "$REMOTE" ]; then
git pull origin main --quiet
echo "$(date): Pulled new changes" >> /home/lionel/docker/docs/sync.log
# Force MkDocs to rebuild by sending SIGHUP
docker kill --signal=SIGHUP mkdocs 2>/dev/null || docker restart mkdocs
echo "$(date): Triggered MkDocs rebuild" >> /home/lionel/docker/docs/sync.log
fi