Aller au contenu

NAS-logo — Serveur Photos sur Mac Mini

Provisioning reproductible et idempotent d'un Mac Mini Apple Silicon en serveur de photos personnel, accessible depuis n'importe où via VPN.

Objectif : lancer make install sur un Mac Mini vierge et obtenir, sans intervention manuelle :

  • Immich fonctionnel et accessible via Tailscale
  • Monitoring opérationnel avec alertes mobiles
  • Sauvegarde automatique chiffrée vers Hetzner Storage Box
  • Système entièrement re-déployable si le matériel est remplacé

Stack technique

Composant Technologie
Automatisation Ansible (rôles idempotents)
Photos Immich (self-hosted)
Conteneurs Docker Desktop for Mac
Réseau VPN Tailscale
Monitoring Prometheus + Grafana + cAdvisor
Alertes ntfy (push mobile)
Sauvegarde rclone → Hetzner Storage Box (SFTP)
Secrets ansible-vault (AES256)

Architecture Ansible

Le projet est structuré en rôles indépendants, chacun couvrant un périmètre fonctionnel :

roles/
├── base/        → Homebrew, Python, dépendances système
├── stockage/    → Vérification SSD, arborescence des volumes
├── docker/      → Installation Docker Desktop
├── immich/      → docker-compose + .env chiffré
├── monitoring/  → Prometheus, Grafana, cAdvisor, LaunchAgent macOS
├── sauvegarde/  → rclone, dump PostgreSQL, cron via LaunchAgent
├── securite/    → Tailscale, FileVault, firewall macOS
└── acces/       → SSH hardening (sshd_config templaté)

Interface opérationnelle (Makefile)

make bootstrap   # Homebrew + Ansible sur Mac Mini vierge
make preflight   # Vérifie SSD, Hetzner, Tailscale avant déploiement
make dryrun      # --check --diff : aperçu sans modification
make install     # Déploiement complet
make health      # Vérification post-déploiement
make backup      # Sauvegarde manuelle immédiate

Points clés DevOps

  • Idempotence : un double make install ne produit aucun changement
  • Zéro secret en clair : tous les credentials dans vault.yml (AES256)
  • Zéro exposition publique : tous les services accessibles via Tailscale uniquement
  • Observabilité : alerte ntfy sur mobile si le disque dépasse 80 %
  • Modules FQCN : ansible.builtin.* et community.general.* systématiquement

🔗 Voir le dépôt GitHub