Cómo crear una instancia de PeerTube

/&

En la entrada de hoy os voy a relatar mi experiencia creando una instancia de PeerTube, una alternativa desde el software libre, a productos privativos de transmisión de vídeo como Youtube. No sé si el nodo, una vez instalado y configurado, estará disponible más allá de la creación de esta entrada, eso el tiempo lo dirá, pero empecemos por el principio.

Mascota del proyecto PeerTube

¿Qué es PeerTube? ¿Para que sirve?

PeerTube aspira a ser una alternativa descentralizada, gratuita y libre a los servicios de transmisión de vídeo. Su idea no es reemplazar los servicios masivos y privativos, ofrecidos por las grandes compañías, sino ofrecer de forma simultanea otra cosa, con valores diferentes.

Una de las diferencias fundamentales es que no busca convertirse en una gran plataforma que centralice los vídeos, sino crear  una red de pequeños servidores de vídeos conectados entre sí. De hecho, según comentan en su página web «cualquier persona, con un mínimo de habilidades técnicas, puede alojar una servidor con PeerTube.» y añade «Cada página (instancia) aloja a su propios usuarios y sus vídeos

Además en PeerTube cuando vemos un vídeo, nuestra computadora contribuye a su transmisión, ya que en esta plataforma se utiliza el protocolo de igual a igual (P2P) para transmitir los vídeos, reduciendo así la carga de sus anfitriones.

Si una vez creada la instancia, si el administrador de esta lo decide así, se puede federar con el resto de instancias, y así poder ver todos los vídeos de la red federada. De hecho podemos consultar la lista de instancias desde este enlace: Descubrir instancias de PeerTube.

De hecho, si la instancia esta federada, también se pueden utilizar los usuarios de Mastodon, para poder visualizar los vídeos y dejar incluso comentarios. Para ello PeerTube utiliza el protocolo de federación llamado ActivityPub.

Además sigue la filosofía de desarrollo del código abierto y utiliza una licencia de software libre, en concreto la GNU-AGPL. Y cómo indican en su web «lo más importante, eres una persona para nosotros, no un producto que necesita perfiles para estar atrapado en los bucles de vídeo» Para muestra un botón, ya que PeerTube nos promete que no utiliza ningún algoritmo de recomendación sesgado para mantener a la audiencia en línea durante horas y horas.

Ejemplo de aspecto de la web de PeerTube (imagen extraida de Wikipedia)

 

Mi experiencia creando una instancia de PeerTube

Para crear esta instancia voy a utilizar un VPS en mi proveedor de confianza Clouding.io, al igual que he hecho en otras ocasiones. A nivel de sistema operativo, voy a aprovechar el servidor que creé con Rocky Linux, Ya que PeerTube es compatible con Centos 8, ergo también con Rocky Linux, por lo menos en teoría.

Una vez accedemos al host, debemos instalar en un primer paso NodeJS en su versión 12 y YARN

sudo dnf module install nodejs:12
sudo npm install --global yarn

Una vez hecho esto instalamos ffmpeg, imprescindible para la reproducción de vídeo. Previamente demos habiliar los repositorios EPEL y PowerTools

sudo dnf install epel-release dnf-utils
sudo dnf install dnf-plugins-core
sudo dnf config-manager --set-enabled powertools
sudo yum-config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo
sudo dnf update
sudo dnf install ffmpeg ffmpeg-devel

Y comprobamos la versión recién instalada:

ffpmeg -version
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 8 (GCC)
...

Ahora toca instalar los paquetes del motor de base de datos con PostgreSQL además de otros paquetes necesarios como gcc o wget.

En mi caso me he decantado por la versión 13 de PostgreSQL que es más moderna:

#Instalamos el repositorio RPM
sudo dnf install -y \
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
#Deshabilitamos el módulo de postgre que viene por defecto en los repositorios de Rocky Linux
sudo dnf -qy module disable postgresql
#Instalamos PostgreSQL
sudo dnf update
sudo dnf install -y postgresql13-server postgresql13-contrib
#Iniciamos la base de datos y habilitamos el servicio
sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
sudo systemctl enable postgresql-13
sudo systemctl start postgresql-13

A continuación instalamos resto de paquetes necesarios y dependencias:

sudo dnf install nginx  
sudo dnf install openssl gcc-c++ make wget redis git
sudo dnf install certbot python3-certbot-nginx

Ahora necesitamos crear un enlace simbólico entre python3 y python, para que pueda trabajar de forma correcta el servicio youtube-dl:

sudo ln -s /usr/bin/python3 /usr/bin/python

Ahora ya podemos encender Redis

sudo systemctl enable --now redis

Configuramos el usuario para peertube:

sudo mkdir /var/www
sudo useradd -m -d /var/www/peertube -s /bin/bash peertube

Ahora toca asignar una contraseña al usuario:

sudo passwd peertube

Crear la base de datos

Creamos la base de datos para producción:

cd /var/www/peertube
sudo usermod -aG peertube postgres
sudo chmod 770 /var/www/peertube -R
sudo -u postgres createuser -P peertube

De esta manera nos pedirá una contraseña para el nuevo rol. Esta debe copiarse en el archivo «production.yaml»

Creamos la base de datos:

sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod

Y habilitamos las extensiones que PeerTube necesita:

sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_prod
sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_prod

En la imagen se ve como realizamos este paso:

Creamos la base de datos

Preparar el directorio de PeerTube

Obtenemos la última versión de Peertube:

VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest |\
 grep tag_name | cut -d '"' -f 4) && echo "Latest Peertube version is $VERSION"

Con el resultado, en mi caso:

Latest Peertube version is v3.3.0

Creamos los directorios necesarios:

cd /var/www/peertube
sudo -u peertube mkdir config storage versions
sudo -u peertube chmod 750 config/

Descargamos la última versión del cliente y descomprimimos el paquete descargardo:

cd /var/www/peertube/versions
sudo -u peertube wget -q \
"https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip"
sudo -u peertube unzip -q \
peertube-${VERSION}.zip && sudo -u peertube rm peertube-${VERSION}.zip

E instalamos PeerTube:

cd /var/www/peertube
sudo -u peertube ln -s versions/peertube-${VERSION} ./peertube-latest
cd ./peertube-latest && sudo -H -u peertube yarn install --production --pure-lockfile

En este paso, si no os encuentra el paquete yarn, simplemente tenéis que crear este enlace simbólico:

sudo ln -s /usr/local/bin/yarn /bin/yarn

En mi caso ha finalizado la instalación, pero con unos cuantos avisos de «warning»

Configuración de PeerTube

Una vez instalado toca la parte de la configuración. Debemos copiar el fichero por defecto de la configuración, no hace falta que modifiquemos este fichero:

cd /var/www/peertube
sudo -u peertube cp peertube-latest/config/default.yaml config/default.yaml

Y también el fichero de configuración de producción, que si deberemos modificar:

sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml

Debemos editar el fichero «config/production.yaml», donde podemos modificar los apartados: «webserver, database, redis, smtp y admin.email» Las claves definidias en «config/production.yaml» anularán las claves definidias en «config/default.yaml»

Configurar el webserver

El propio proyecto ya nos ofrece los ficheros de configuración para el servidor web con Nginx. Solo los hemos de copiar:

sudo cp /var/www/peertube/peertube-latest/support/nginx/peertube /etc/nginx/conf.d/peertube

Ahora debemos cambiar el parámetro «[WEBSERVER_HOST]»por el dominio que a nosotros nos interese:

sudo sed -i 's/${WEBSERVER_HOST}/peertube.bitsandlinux.com/g' /etc/nginx/conf.d/peertube
sudo sed -i 's/${PEERTUBE_HOST}/127.0.0.1:9000/g' /etc/nginx/conf.d/peertube

A continuación modificamos el archivo de configuración del servidor web. Prestando atención a las claves de alias de las ubicaciones estáticas. Estas deben coincidir con los directorios de almacenamiento.

sudo vi /etc/nginx/conf.d/peertube

En este paso recomiendo comentar todas las líneas del certificado de Let’s Encrypt hasta que no hayamos hecho el proceso de alta, para obtener el certificado.

Para obtener el certificado escribimos:

sudo certbot --nginx

Recuerda que previamente tenemos que dar de alta un registro «A» en un nuestro proveedor de DNS.

Y añadimos una tarea programada para que nos vaya renovando el certificado sin nosotros hacer nada:

sudo certbot renew --dry-run

Ahora sí, ya podemos reiniciar nginx.

sudo systemctl restart nginx

Tunear la IP

Debemos realizar estos pasos:

sudo cp /var/www/peertube/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/
sudo sysctl -p /etc/sysctl.d/30-peertube-tcp.conf

Habilitar systemd

Rocky Linux trabaja con systemd, por lo que vamos a añadir el fichero de configuración para este sistema:

sudo cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/

Revisamos su configuración:

sudo vim /etc/systemd/system/peertube.service

En mi caso, con esta configuración:

Ejemplo de configuración de unidad para systemd

Recargamos la configuración de systemd:

sudo systemctl daemon-reload

Habilitamos el servicio en el arranque y lo encendemos:

sudo systemctl enable peertube
sudo systemctl start peertube
sudo journalctl -feu peertube

Si todo ha ido bien ya tendríamos que poder ver nuestra instancia accesible vía web:

Aspecto de la web recién instalada

Nos quedan por ver muchas cosas, pero la entrada ya ha quedado lo suficientemente larga, por lo que continuaremos en la próxima.

Puedes ver el resultado en la URL https://peertube.bitsandlinux.com, pero no os esperes gran cosa que la acabo de instalar 🙂

Le he dado muchas vueltas a la instalación y he modificado varias veces esta entrada, si notas cualquier errata, por favor, házmelo saber en los comentarios.

Para saber más, puedes consultar la página oficial del proyecto: Joinpeertube.org

Fuentes consultadas

PeerTube – Production guide

Postgresql.org – Linux downloads for Red Hat family