====== Comment faire sa web radio ====== **by thenoiser** ===== install Icecast ===== ===== reverse proxy Nginx (:8000) ===== ===== pages admin/status ===== ===== SSL Let’s Encrypt DNS-01 ===== ==== Renouvellement manuel du certificat SSL Let's Encrypt pour la radio (Icecast + Nginx) ==== ===== Objectif ===== Renouveler manuellement le certificat SSL/TLS Let's Encrypt utilisé par Nginx pour ''radio.example.org:8000'', sans interrompre Icecast. Ce tutoriel concerne un certificat Let's Encrypt créé en mode manuel DNS-01 (challenge DNS) avec Gandi. Dans ce mode, le renouvellement n'est pas automatique (sans script/hook). ===== Contexte ===== * Domaine : ''radio.example.org'' * Certificat utilisé par Nginx : * ''/etc/letsencrypt/live/radio.example.org/fullchain.pem'' * ''/etc/letsencrypt/live/radio.example.org/privkey.pem'' * Nginx sert le HTTPS sur le port ''8000'' * Icecast tourne en local (proxy derrière Nginx) * Validation Let's Encrypt par TXT DNS : ''_acme-challenge.radio.example.org'' ===== 1. Vérifier l'état du certificat ===== sudo certbot certificates Vérifier notamment : * ''Certificate Name: radio.example.org'' * ''Expiry Date: ...'' ===== 2. Lancer le renouvellement manuel (DNS-01) ===== sudo certbot certonly \ --manual \ --preferred-challenges dns \ --key-type ecdsa \ -d radio.example.org Certbot affiche alors : * le nom du TXT à créer : ''_acme-challenge.radio.example.org'' * une valeur TXT (chaîne aléatoire) à copier La valeur change à chaque tentative. Si une tentative échoue, il faut remplacer l'ancienne valeur TXT par la nouvelle valeur affichée par Certbot. ===== 3. Ajouter / mettre à jour le TXT dans Gandi ===== Dans l'interface DNS Gandi de ''example.org'' : * **Type** : ''TXT'' * **Nom** : ''_acme-challenge.radio'' * **Valeur** : (la chaîne fournie par Certbot) * **TTL** : ''300'' (recommandé) Dans la zone DNS ''example.org'', le nom ''_acme-challenge.radio'' correspond au FQDN ''_acme-challenge.radio.example.org''. ===== 4. Vérifier la propagation DNS avant de valider Certbot ===== Avant d'appuyer sur Entrée dans Certbot, vérifier que le TXT est bien visible publiquement. dig +short TXT _acme-challenge.radio.example.org @8.8.8.8 Ou : nslookup -type=TXT _acme-challenge.radio.example.org 8.8.8.8 Le résultat doit afficher exactement la valeur demandée par Certbot. Exemple : "CG6n8bpQEakfUmjM3EMZsOzxGOl2cwOFkAtsgpMuGBc" N'appuyer sur Entrée dans Certbot qu'après avoir vérifié la bonne valeur TXT. ===== 5. Valider dans Certbot ===== Revenir dans le terminal où Certbot attend et appuyer sur Entrée. Si tout est correct, message attendu : Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/radio.example.org/fullchain.pem Key is saved at: /etc/letsencrypt/live/radio.example.org/privkey.pem ===== 6. Recharger Nginx pour prendre le nouveau certificat ===== sudo nginx -t sudo systemctl reload nginx Icecast n'a pas besoin d'être redémarré pour cette opération. Seul Nginx doit être rechargé. ===== 7. Vérifier la nouvelle date d'expiration ===== sudo certbot certificates La date d'expiration doit être repoussée (environ 90 jours). ===== Erreurs fréquentes ===== ==== Certbot échoue avec un TXT "incorrect" ==== Cause fréquente : * ancienne valeur TXT encore présente * nouvelle tentative Certbot = nouvelle valeur * validation trop rapide Solution : * remplacer la valeur TXT par la nouvelle * vérifier avec ''dig'' * puis appuyer sur Entrée ==== ''certbot renew'' ne marche pas ==== Erreur typique : The manual plugin is not working... An authentication script must be provided with --manual-auth-hook C'est normal avec un certificat créé en mode manuel DNS-01 sans hook. ===== Checklist rapide (urgence) ===== sudo certbot certificates sudo certbot certonly \ --manual \ --preferred-challenges dns \ --key-type ecdsa \ -d radio.example.org * Mettre à jour le TXT ''_acme-challenge.radio'' dans Gandi * Vérifier la propagation DNS : dig +short TXT _acme-challenge.radio.example.org @8.8.8.8 * Appuyer sur Entrée dans Certbot * Recharger Nginx : sudo nginx -t && sudo systemctl reload nginx * Vérifier : sudo certbot certificates ===== À faire plus tard (automatisation) ===== * Automatiser le DNS-01 avec l'API Gandi (hook Certbot ou plugin DNS) * Ajouter un reload Nginx automatique après renouvellement * Mettre en place un contrôle périodique (cron/systemd timer) ===== monitoring / stats / logs / watchdog =====