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.
¿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.
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:
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:
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:
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
Postgresql.org – Linux downloads for Red Hat family