{"id":214,"date":"2021-12-28T15:41:21","date_gmt":"2021-12-28T13:41:21","guid":{"rendered":"https:\/\/tartine.linkpc.net\/?p=214"},"modified":"2021-12-28T15:41:21","modified_gmt":"2021-12-28T13:41:21","slug":"raspberry-pi-radio-partie-3-ouverture-au-monde","status":"publish","type":"post","link":"https:\/\/blog.nibelheim.fr\/?p=214","title":{"rendered":"Raspberry Pi Radio partie 3 : ouverture au monde"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ici, nous allons faire en sorte que notre super radio puisse \u00eatre acc\u00e9d\u00e9e de l&#8217;ext\u00e9rieur de notre r\u00e9seau local.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Objectifs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cr\u00e9er un serveur HTTPS sur Nginx <em><span class=\"has-inline-color has-vivid-red-color\">(et non Apache! Il vous faudra un autre tutoriel pour Apache!)<\/span><\/em> afin d&#8217;acc\u00e9der \u00e0 votre stream musical de l&#8217;ext\u00e9rieur<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9requis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avoir un serveur HTTP tournant sur le Pi avec Nginx proprement configur\u00e9 (<a href=\"https:\/\/tartine.linkpc.net\/?p=37\">suivez donc ce tuto!<\/a>)<br>Avoir un nom de domaine et g\u00e9n\u00e9r\u00e9 vos certificats &#8211; <a href=\"https:\/\/tartine.linkpc.net\/?p=55\" data-type=\"URL\" data-id=\"https:\/\/tartine.linkpc.net\/?p=55\">suivez donc ce tuto!<\/a><br>Avoir r\u00e9ussi la configuration d&#8217;un serveur HTTPS <em>(m\u00eame avec une page par d\u00e9faut)<\/em> &#8211; <a href=\"https:\/\/tartine.linkpc.net\/?p=64\">suivez cet autre tuto!<\/a><br>Avoir ouvert et forward\u00e9 le port 443 de votre box <em>(chose que, si vous avez suivi les tutos, devrait \u00eatre faite)<\/em>.<br>Avoir r\u00e9ussi \u00e0 faire tourner une radio dans les \u00e9tapes pr\u00e9c\u00e9dentes de ce tutoriel. Le port 8000 sera celui utilis\u00e9 <em>(pas besoin de l&#8217;ouvrir sur votre box!)<\/em> et la mount sera <strong>\/radio.ogg<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Petite pr\u00e9cision<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons faire en sorte que la radio soit stream\u00e9e via un serveur d\u00e9di\u00e9, ce qui signifie que, si vous avez bien configur\u00e9 un \u00e9ventuel autre serveur Nginx, m\u00eame HTTPS, sur votre Raspberry Pi, <strong>la radio et le site tourneront chacun de leur c\u00f4t\u00e9<\/strong>. C&#8217;est pas beau, \u00e7a?!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&#8217;en profite pour pr\u00e9ciser qu&#8217;il a fallu de bonnes heures de gal\u00e8re pour trouver les r\u00e9glages qui marchent pour moi sur divers forums, et c&#8217;est la raison pour laquelle je remercie ces anonymes de leurs efforts et me permets de compulser tout ceci pour mon usage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Proc\u00e9dure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tout va se passer dans Nginx, en cr\u00e9ant un fichier d\u00e9di\u00e9 \u00e0 notre serveur.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo touch \/etc\/nginx\/sites-available\/radio<br>sudo ln -ls \/etc\/nginx\/sites-available\/radio \/etc\/nginx\/sites-enabled\/radio<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Avec les deux pr\u00e9c\u00e9dentes commandes, nous avons cr\u00e9\u00e9 un fichier vide, ainsi que le lien symbolique pour l&#8217;activation du site qu&#8217;il contient.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/nginx\/sites-available\/radio<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le premier bloc, nous allons rediriger toutes les connexions non-s\u00e9curis\u00e9es vers notre domaine vers le port 443. Copiez donc :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">server {<br>    if ($host = domaine.linkpc.net) {<br>        return 301 https:\/\/$host$request_uri;<br>    } # managed by Certbot<br><br>    listen 80;<br>    listen [::]:80;<br>    server_name domaine.linkpc.net www.domaine.linkpc.net;<br><br>    # Renvoi vers le port 443<br>    location \/ {<br>      return 301 https:\/\/$server_name$request_uri;<br>    }<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, le &#8220;vrai&#8221; bloc server, que voici :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 443 ssl;\n    listen &#91;::]:443 ssl;\n    server_name domaine.linkpc.net www.domaine.linkpc.net;\n\n    index index.php index.html;\n\n    root \/var\/www\/domaine\/www;\n    access_log \/var\/www\/domaine\/access.log;\n    error_log  \/var\/www\/domaine\/error.log;\n\n# EN AVANT POUR SSL!\n    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;\n    ssl_prefer_server_ciphers on;\n    ssl_ciphers     ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;\n    ssl_ecdh_curve      secp384r1;\n\n    ssl_session_cache   shared:SSL:4m;\n    ssl_session_timeout 1440m;\n    ssl_stapling        on;\n    ssl_stapling_verify on;\n\n    resolver        8.8.8.8 8.8.4.4;\n\n    add_header      Strict-Transport-Security max-age=31536000;\n\n    # Les certificats n'existent que si la proc\u00e9dure avec Certbot a \u00e9t\u00e9 suivie!\n    ssl_certificate \/etc\/letsencrypt\/live\/domaine.linkpc.net\/fullchain.pem; # managed by Certbot\n    ssl_certificate_key \/etc\/letsencrypt\/live\/domaine.linkpc.net\/privkey.pem; # managed by Certbot\n\n    # FIN DE SSL\n\n    # ICECAST\n    # Ajout d'en-t\u00eates sp\u00e9cifiques\n    add_header X-Frame-Options DENY;\n    add_header X-Content-Type-Options nosniff;\n\n    # Redirection vers notre radio locale\n    location \/radio {\n        proxy_pass http:\/\/127.0.0.1:8000\/radio.ogg;\n        proxy_redirect off;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    }\n    # FIN DE ICECAST\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Alors alors, que venons-nous de faire? En fait, j&#8217;ai repris simplement ce qui \u00e9tait indiqu\u00e9 dans le tutoriel HTTPS indiqu\u00e9 plus haut pour la gestion du SSL, et seules lignes de la section ICECAST sont le vrai coeur du probl\u00e8me.<br>Je ne vais pas vous mentir, je n&#8217;ai rien compris aux <strong>add-header<\/strong> ni aux<strong> set_header<\/strong>, mais c&#8217;est la seule configuration que j&#8217;ai trouv\u00e9e qui fonctionne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour le reste, le <strong>proxy_pass <\/strong>est excessivement simple et renvoie toute connexion \u00e0 destination de <strong>https:\/\/domaine.linkpc.net\/radio<\/strong> vers <strong>[votre ip locale]:8000\/radio.ogg<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci fait, enregistrez et quittez, puis :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo service nginx reload<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous n&#8217;avez rien oubli\u00e9, tout devrait fonctionner du premier coup!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conqueluzion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons maintenant une radio qui tourne en HTTPS via un domaine ext\u00e9rieur et \u00e7a, c&#8217;est une bonne nouvelle.<br><a href=\"https:\/\/tartine.linkpc.net\/?p=218\" data-type=\"URL\" data-id=\"https:\/\/tartine.linkpc.net\/?p=218\">Dans la prochaine partie, nous allons voir comment rajouter un autre stream \u00e0 Icecast!<\/a><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ici, nous allons faire en sorte que notre super radio puisse \u00eatre acc\u00e9d\u00e9e de l&#8217;ext\u00e9rieur de notre r\u00e9seau local. Objectifs Cr\u00e9er un serveur HTTPS sur Nginx (et non Apache! Il vous faudra un autre tutoriel pour Apache!) afin d&#8217;acc\u00e9der \u00e0 votre stream musical de l&#8217;ext\u00e9rieur Pr\u00e9requis Avoir un serveur HTTP [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[22,24,25,27],"class_list":["post-214","post","type-post","status-publish","format-standard","hentry","category-raspberry-pi","tag-nginx","tag-radio","tag-raspberry","tag-ssl"],"_links":{"self":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=214"}],"version-history":[{"count":0,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/214\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}