Home » Sviluppo Siti Web » Installazione Nginx-RTMP Ubuntu 22.04: Check-List

Installazione Nginx-RTMP Ubuntu 22.04: Check-List

Sala server moderna con rack di server e cavi di rete, con in primo piano uno schermo che mostra il logo di Ubuntu 22.04 e l'interfaccia di configurazione Nginx-RTMP.

Benvenuti nella guida completa sull’Installazione di Nginx-RTMP su Ubuntu 22.04. Questo articolo è pensato per fornire agli sviluppatori web, agli amministratori di sistema e agli appassionati di tecnologia una panoramica dettagliata e passaggi pratici per configurare con successo Nginx-RTMP sul popolare sistema operativo Ubuntu 22.04. Che tu sia un principiante o un esperto, troverai informazioni preziose per ottimizzare il tuo ambiente di server e sfruttare al massimo le potenzialità di questa potente combinazione di software.

Sommario

Passo Iniziale nell’Installazione di Nginx-RTMP su Ubuntu 22.04

Aggiorna la lista dei pacchetti disponibili e i loro ultimi aggiornamenti, e poi eseguire l’aggiornamento dei pacchetti attualmente installati sul sistema alla versione più recente:

sudo apt update && sudo apt upgrade

per aggiungere il repository “universe” alle sorgenti del software del sistema (se non incluso):

sudo add-apt-repository universe

Installa Nginx:

sudo apt install nginx

Una volta installato Nginx, puoi controllare lo stato del server per assicurarti che sia attivo e funzionante:

sudo systemctl status nginx

Configurazione di Base di Nginx-RTMP su Ubuntu

Installare il modulo RTMP Nginx:

sudo apt install libnginx-mod-rtmp

Apri il file di configurazione di Nginx:

sudo nano /etc/nginx/nginx.conf
rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live1 {
            live on;
            record off;
            hls on;
            hls_path           
            /var/www/webcam.example.com/html/live1;
            hls_sync 100ms;
            hls_fragment 3;
            hls_playlist_length 60;
            allow play all;
        }

        application live2 {
            live on;
            record off;
            hls on;
            hls_path           
            /var/www/webcam.example.com/html/live2;
            hls_sync 100ms;
            hls_fragment 3;
            hls_playlist_length 60;
            allow play all;
        }
    }
}

Riavvia web server:

sudo systemctl restart nginx

aprire la porta predefinita nel firewall:

sudo ufw allow 1935/tcp

riavviare il firewall:

sudo ufw reload

verifica lo stato delle regole del firewall:

sudo ufw status

Per trasmettere il live in HTTP

Apre le porte 80 e 443:

sudo ufw allow 'Nginx Full'

Puoi verificare:

sudo ufw status

Verifica nginx:

systemctl status nginx

Crea la directory per tuo dominio come segue, utilizzando il -p flag per creare eventuali directory principali necessarie:

sudo mkdir -p /var/www/webcam.example.com/html

assegna la proprietà della directory con la $USER variabile di ambiente:

sudo chown -R $USER:$USER /var/www/webcam.example.com/html

scrivere ed eseguire i file concedendo solo autorizzazioni di lettura ed esecuzione a gruppi e altri, puoi inserire il seguente comando:

sudo chmod -R 755 /var/www/webcam.example.it

Successivamente, crea una index.html pagina di esempio utilizzando nanoil tuo editor preferito:

nano /var/www/webcam.example.com/html/index.html

All’interno, aggiungi il player VideoJS:

<!DOCTYPE html>
<html lang="it">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://vjs.zencdn.net/8.6.1/video-js.css" rel="stylesheet" />
</head>

<body>
  <video id="my-video" class="video-js vjs-default-skin" controls preload="auto" poster="logo.png" data-setup="{}">
    <source src="https://webcam.example.com/live1/webcam.m3u8" type='application/x-mpegURL' />
    <p class="vjs-no-js">
      Per vedere questo video per favore abilita JavaScript, e considera di aggiornare a un web browser che
      <a href="https://videojs.com/html5-video-support/" target="_blank">supporti i video HTML5</a>
    </p>
  </video>

  <script src="https://vjs.zencdn.net/8.6.1/video.min.js"></script>
</body>

</html>

Affinché Nginx possa servire questo contenuto, è necessario creare un blocco server con le direttive corrette. Invece di modificare direttamente il file di configurazione predefinito, creiamone uno nuovo in: /etc/nginx/sites-available/webcam.example.com:

sudo nano /etc/nginx/sites-available/webcam.example.com

Incolla il seguente blocco di configurazione, che è simile a quello predefinito, ma aggiornato per la nostra nuova directory e nome di dominio:

server {
        listen 80;
        listen [::]:80;

        root /var/www/webcam.example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name webcam.example.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

abilitiamo il file creando un collegamento da esso alla sites-enableddirectory, da cui Nginx legge durante l’avvio:

sudo ln -s /etc/nginx/sites-available/webcam.example.com /etc/nginx/sites-enabled/

Ottimizzare le Prestazioni di Nginx-RTMP in Ubuntu 22.04

Per evitare un possibile problema di memoria dell’hash bucket che può derivare dall’aggiunta di ulteriori nomi di server, è necessario modificare un singolo valore nel /etc/nginx/nginx.conf file. Apri il file:

sudo nano /etc/nginx/nginx.conf

Trova la direttiva server_names_hash_bucket_size e rimuovi il simbolo # per rimuovere il commento dalla riga:

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

verifica per assicurarti che non siano presenti errori di sintassi in nessuno dei tuoi file Nginx:

sudo nginx -t

Se non ci sono problemi, riavvia Nginx per abilitare le modifiche:

sudo systemctl restart nginx

Installare Let’s Encrypt

In questa sezione della guida, ci concentreremo sull’installazione e configurazione di Let’s Encrypt, uno strumento essenziale per implementare un certificato SSL/TLS nel tuo server Nginx. Un certificato SSL assicura che i dati trasmessi tra il server e i client siano criptati e sicuri, un aspetto fondamentale per la sicurezza di qualsiasi sito web. Seguiremo passo dopo passo il processo di installazione di Let’s Encrypt, la generazione di un certificato SSL per il tuo dominio, e la configurazione automatica con Nginx. Questo ti permetterà di garantire una connessione sicura per il tuo sito web:

sudo snap install core; sudo snap refresh core
sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo nano /etc/nginx/sites-available/webcam.example.com
sudo nginx -t
sudo systemctl reload nginx
sudo ufw status
sudo certbot --nginx -d webcam.example.com

oppure senza fornire email:

sudo certbot --nginx --register-unsafely-without-email -d webcam.example.com
sudo systemctl status snap.certbot.renew.service
sudo certbot renew --dry-run

PHP per eventuali script di controllo

La prossima fase della nostra guida si concentra sull’integrazione di PHP nel tuo server Nginx. PHP è un linguaggio di scripting lato server ampiamente utilizzato, essenziale per eseguire script dinamici sul tuo sito. In questa sezione, vedremo come installare e configurare PHP-FPM (FastCGI Process Manager), che è un’implementazione alternativa di PHP ideale per siti ad alto traffico. Seguiremo i passaggi per installare PHP, configurare Nginx per processare i file PHP e assicurarci che tutto funzioni correttamente sia in un ambiente di hosting condiviso sia in localhost:

sudo apt update
sudo apt install php-fpm
sudo systemctl start php-fpm
sudo systemctl status php8.1-fpm
sudo nano /etc/nginx/sites-available/webcam.example.com
server {
    # ... altre configurazioni ...

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

        # Assicurati che il percorso del socket sia corretto per PHP 8.1
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;

        # ... altre configurazioni opzionali ...
    }

    # ... altre configurazioni ...
}
sudo systemctl restart nginx

Per PHP in localhost

sudo nano /etc/nginx/sites-available/default
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

        # Assicurati che il percorso del socket sia corretto per la tua versione di PHP
        fastcgi_pass unix:/var/run/php/php-fpm.sock;
    }

Per configurare RTMPS

In questa parte della guida, affronteremo il passaggio fondamentale per l’abilitazione di RTMPS (Real Time Messaging Protocol Secure) sul tuo server. RTMPS è una versione sicura di RTMP che utilizza SSL/TLS per criptare il flusso, garantendo una trasmissione sicura dei dati. Per attivarlo, utilizzeremo ‘stunnel’, uno strumento che permette di aggiungere un layer di sicurezza ai protocolli esistenti. Seguiremo la procedura di installazione di stunnel, la configurazione del tunnel per RTMPS, e l’adeguamento delle impostazioni di Nginx per accettare connessioni RTMPS. Questi passaggi sono cruciali per chi vuole offrire trasmissioni live sicure e protette:

sudo apt-get update
sudo apt-get install stunnel4
sudo systemctl enable stunnel4
sudo systemctl start stunnel4
sudo systemctl status stunnel4
sudo nano /etc/stunnel/stunnel.conf
[rtmps]
accept = 1935
connect = 127.0.0.1:1936
cert = /etc/letsencrypt/live/webcam.example.com/fullchain.pem
key = /etc/letsencrypt/live/webcam.example.com/privkey.pem
sudo systemctl status stunnel4
sudo nano /etc/nginx/nginx.conf

Modificare questo:

rtmp {
    server {


        listen 127.0.0.1:1936; # <- MODIFICARE QUESTO
        chunk_size 4096;

        application live1 {
...
sudo systemctl restart nginx

FFMPEG PER MANIPOLARE IL FLUSSO DELLA WEBCAM

In questa parte della guida, ci immergeremo nell’uso di FFMPEG, uno strumento potente e versatile per la manipolazione di flussi video e audio. FFMPEG ci permette di modificare e ottimizzare i flussi della webcam per soddisfare specifiche esigenze, come l’aggiunta di una traccia audio muta, una pratica comune per garantire la compatibilità con dispositivi come quelli Apple. Spiegheremo come installare FFMPEG su Ubuntu e forniremo un esempio di script per dimostrare come manipolare un flusso esistente per aggiungere audio. Questo passaggio è particolarmente utile per chi necessita di personalizzare i propri flussi per specifiche piattaforme o dispositivi:

sudo apt install ffmpeg

esempio di script per manipolazione del flusso per aggiungere una traccia audio muta per dispositivi Apple:

#!/bin/bash

# L'URL del flusso che potrebbe essere già in esecuzione
STREAM_URL_IN="rtmp://webcam.example.com/key/webcam"

# L'URL del flusso in uscita
STREAM_URL_OUT="rtmp://localhost/live1/webcam"

# Trova e termina qualsiasi istanza esistente di FFmpeg che trasmette lo stesso flusso
pgrep -f "$STREAM_URL_IN" | while read -r pid; do
    if [ "$pid" != "$$" ]; then
        kill "$pid"
    fi
done

# Esegue il comando FFmpeg per il nuovo flusso
ffmpeg -i "$STREAM_URL_IN" -f lavfi -i anullsrc=channel_layout=mono:sample_rate=24000 -c:v copy -c:a aac -shortest -f flv "$STREAM_URL_OUT"

Fine.