Initial commit - Migration documentation 2026
This commit is contained in:
100
docs/changelog/2025-12-31.md
Normal file
100
docs/changelog/2025-12-31.md
Normal 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
152
docs/index.md
Normal 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
382
docs/infra/overview.md
Normal 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
272
docs/services/overview.md
Normal 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
70
docs/vault/README.md
Normal 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)*
|
||||
58
docs/vault/config/caddy.md
Normal file
58
docs/vault/config/caddy.md
Normal 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`
|
||||
63
docs/vault/config/docker-stacks.md
Normal file
63
docs/vault/config/docker-stacks.md
Normal 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
|
||||
```
|
||||
105
docs/vault/config/network.md
Normal file
105
docs/vault/config/network.md
Normal 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
|
||||
|
||||
|
||||
74
docs/vault/config/troubleshooting.md
Normal file
74
docs/vault/config/troubleshooting.md
Normal 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
77
docs/vault/index-v1.md
Normal 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)
|
||||
7
docs/vault/javascripts/external-links.js
Normal file
7
docs/vault/javascripts/external-links.js
Normal 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');
|
||||
});
|
||||
});
|
||||
118
docs/vault/reference/commands.md
Normal file
118
docs/vault/reference/commands.md
Normal 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
|
||||
```
|
||||
98
docs/vault/reference/ports.md
Normal file
98
docs/vault/reference/ports.md
Normal 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 |
|
||||
56
docs/vault/reference/scripts.md
Normal file
56
docs/vault/reference/scripts.md
Normal 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** :
|
||||
|
||||
141
docs/vault/services-v1/authelia.md
Normal file
141
docs/vault/services-v1/authelia.md
Normal 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
|
||||
```
|
||||
76
docs/vault/services-v1/backup.md
Normal file
76
docs/vault/services-v1/backup.md
Normal 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
|
||||
3
docs/vault/services-v1/grafana.md
Normal file
3
docs/vault/services-v1/grafana.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Grafana - Monitoring & Alertes
|
||||
|
||||
## Vue densemble
|
||||
148
docs/vault/services-v1/overview.md
Normal file
148
docs/vault/services-v1/overview.md
Normal 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 |
|
||||
109
docs/vault/services-v1/shlink.md
Normal file
109
docs/vault/services-v1/shlink.md
Normal 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
|
||||
}
|
||||
```
|
||||
177
docs/vault/services-v1/transmission.md
Normal file
177
docs/vault/services-v1/transmission.md
Normal 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
68
mkdocs.yml
Normal 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
6
sync.log
Normal 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
12
sync.sh
Executable 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
|
||||
Reference in New Issue
Block a user