====== 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 =====