# 📁 Serveur matsrvr.cc – Documentation technique

**Dernière mise à jour :** 2026-09-12  
**OS :** Ubuntu 24.04.4 LTS  
**Hébergeur :** Hetzner CX33 (4 vCPU, 8 Go RAM, 75 Go SSD)  
**Stockage externe :** Hetzner Storage Box BX11 (1 To)  
**IP publique :** 167.233.56.76  

---

## 🌐 Services accessibles

| Service | URL |
|---------|-----|
| Immich | https://photos.matsrvr.cc |
| Uptime Kuma | https://status.matsrvr.cc |
| DeGoog | https://search.matsrvr.cc |
| AMUD Dashboard | https://home.matsrvr.cc |
| Documentation | https://docs.matsrvr.cc |
| Hoodik | https://hoodik.matsrvr.cc |
| Vaultwarden | https://vault.matsrvr.cc |
| PairDrop | https://drop.matsrvr.cc |
| FreeDrive | https://drive.matsrvr.cc |
| Forgejo | https://git.matsrvr.cc |

---

## 🔐 Accès SSH

```bash
ssh matadmin@167.233.56.76
```

- **Méthode :** Clé SSH uniquement (mot de passe désactivé)
- **Utilisateur :** matadmin
- **Port :** 22 (standard)
- **Adresse :** IP publique directe (`167.233.56.76`), pas le domaine `matsrvr.cc`
- **Clé utilisée :** Clé privée `id_ed25519` stockée sur le PC de Mateo (protégée par une passphrase)
- **Sauvegarde de la clé :** La clé privée est stockée dans un **gestionnaire de mots de passe**

⚠️ **Important :** La clé privée ne doit **jamais** être copiée sur le serveur. Seule la clé **publique** est dans `~/.ssh/authorized_keys` sur le serveur.

⚠️ **Note :** On utilise l'IP directe et non `matsrvr.cc` car le domaine est proxied par Cloudflare (ou pas configuré pour SSH). L'IP directe est plus fiable.

---

## 🔐 Accès VPN (Tailscale)

- **IP Tailscale du serveur :** `100.68.181.62`
- **Se connecter :** `ssh matadmin@100.68.181.62`

**Usage :** Permet d'accéder au serveur depuis n'importe où (téléphone, autre PC) sans ouvrir de port, même si le SSH public est bloqué.

**Vérifier l'IP Tailscale :**

```bash
sudo tailscale ip
```

**Statut Tailscale :**

```bash
sudo tailscale status
```

**Connexion depuis un autre appareil (téléphone, tablette) :**

1. Installer l'app Tailscale
2. Se connecter avec le même compte
3. Activer le VPN
4. Depuis Termux (ou autre client SSH) :

```bash
ssh matadmin@100.68.181.62
```

(nécessite la clé privée `id_ed25519` sur l'appareil, ou une clé dédiée ajoutée dans `authorized_keys`)

---

## 📂 Structure des dossiers importants

```text
/srv/
├── apps/
│   ├── immich/          # Immich (Docker + PostgreSQL local)
│   ├── uptime-kuma/     # Monitoring
│   ├── degoog/          # Moteur de recherche privé
│   └── amud-dashboard/  # Tableau de bord
├── scripts/             # Scripts de backup, restauration, nettoyage
├── storage/hetzner/     # Storage Box (données + backups)
└── www/docs/            # Documentation web (docs.matsrvr.cc)
```

---

## 💾 Sauvegardes


- **Emplacement :** `/srv/storage/hetzner/backups/postgres/`
- **Fréquence :** Quotidienne (00:00)
- **Rétention :** 30 jours

### Configurations (Caddy, compose, .env, systemd, DeGoog, AMUD)

- **Emplacement :** `/srv/storage/hetzner/backups/config/`
- **Fréquence :** Quotidienne
- **Rétention :** 7 jours (rotation auto)

### Données utilisateurs

### Sauvegarde hors-site (OVH Object Storage)
- **Outil :** Rclone
- **Destination :** `ovhcloud-eu-west-par:mat-backup`
- **Fréquence :** Quotidienne (timer systemd `rclone-backup.timer`)
- **Logs :** `/var/log/rclone-backup.log`
- **Surveillance :** Atlas (`atlas_check_rclone`)



- **Immich :** `/srv/storage/hetzner/immich/`
- **DeGoog :** `/srv/apps/degoog/data/`
- **AMUD :** `/srv/apps/amud-dashboard/data/`

---

## ⚙️ Tâches automatisées (systemd timers)

| Timer | Fréquence | Action |
|-------|-----------|--------|
| `backup-immich-db.timer` | Quotidienne | Backup PostgreSQL Immich |
| `cleanup.timer` | Hebdomadaire | Nettoyage (logs, Docker, temp) |
| `atlas-backup.timer` | Quotidienne | Backup complet |
| `atlas-check.timer` | Quotidienne | Check santé Atlas |
| `atlas-monitor.timer` | 5 minutes | Monitoring actif |

---

## 🛡️ Résilience

| Mécanisme | Description |
|-----------|-------------|
| **`restart: always`** | Docker redémarre les conteneurs qui plantent |
| **Healthchecks Docker** | Vérifie que les conteneurs répondent |
| **Autoheal** | Redémarre les conteneurs `unhealthy` |
| **Atlas check SSHFS** | Détecte et répare le montage Storage Box |
| **Uptime Kuma** | Monitoring externe + notifications ntfy |
| **Atlas check Rclone** | Vérifie que la synchro OVH a moins de 48h |

---

## 🏷️ Labels Docker (AMUD)

Chaque service Docker a des labels pour être détecté par AMUD Dashboard :

```yaml
labels:
  - "amud.enable=true"
  - "amud.name=NomDuService"
  - "amud.url=https://sous-domaine.matsrvr.cc"
  - "amud.icon=icone"
```


---

## 🛠️ Commandes utiles

### Voir l'état global du serveur

```bash
atlas-health
```

### Voir les conteneurs Docker

```bash
sudo docker ps
```

### Voir les logs d'un service

```bash
sudo docker logs immich_server --tail 50
sudo docker logs degoog --tail 50
sudo docker logs amud_app --tail 50
```

### Voir les timers programmés

```bash
sudo systemctl list-timers
```

### Vérifier les backups récents

```bash
ls -lth /srv/storage/hetzner/backups/postgres/immich/
```

### Mettre à jour un service (manuel)

```bash
cd /srv/apps/immich && sudo docker compose pull && sudo docker compose up -d
```

### Redémarrer un service

```bash
sudo docker compose restart <nom_service>
```

### Redémarrer Caddy

```bash
sudo systemctl reload caddy
```

### Voir l'état des healthchecks

```bash
sudo docker ps --format "table {{.Names}}\t{{.Status}}"
```

### Vérifier la synchronisation OVH
```bash
rclone size ovhcloud-eu-west-par:mat-backup/immich/
rclone size ovhcloud-eu-west-par:mat-backup/backups/
```

### Vérifier la synchronisation OVH
```bash
rclone size ovhcloud-eu-west-par:mat-backup/immich/
rclone size ovhcloud-eu-west-par:mat-backup/backups/
```

### Tester le check SSHFS

```bash
atlas monitor | grep -A3 SSHFS
```

### Vérifier Tailscale

```bash
sudo tailscale status
sudo tailscale ip
```

---

## 🚨 Restauration

En cas de problème, consulter le guide complet :

👉 https://docs.matsrvr.cc

Ou depuis le serveur :

```bash
cat /srv/www/docs/RESTAURATION.md
```

Un script automatique est disponible :

```bash
sudo /srv/scripts/restore-all.sh
```

---

## 🔧 Mises à jour automatiques

- **Watchtower** met à jour automatiquement **tous les conteneurs** une fois par jour.
- **Unattended-upgrades** gère les mises à jour système (sécurité uniquement).

Ce script lit les logs Watchtower et affiche :

    La prochaine vérification prévue

    Le nombre de mises à jour détectées (historique)

Surveillance Atlas : atlas monitor inclut le check atlas_check_updates.

### Vérifier les mises à jour

```bash
check-updates

---

## 📌 Contact / Infos

- **Nom de domaine :** matsrvr.cc
- **IP serveur :** 167.233.56.76
- **Hébergeur :** Hetzner (CX33 + Storage Box BX11)

---

## 🔄 Ajouter un nouveau service

Quand tu ajoutes un nouveau service Docker, pense à :

1. **Créer le dossier** dans `/srv/apps/`
2. **Ajouter les labels AMUD** dans le `docker-compose.yml`
3. **Ajouter le service dans Atlas** (`services.conf`, `services.sh`, `monitor.sh`)
4. **Ajouter le backup** dans `/srv/scripts/backup-configs.sh`
5. **Créer le fichier Caddy** dans `/etc/caddy/sites/`
6. **Ajouter le DNS** dans Cloudflare
7. **Mettre à jour la documentation** (README + guide restauration)
8. **Mettre à jour Homepage/AMUD** si nécessaire
