PeerTube es una aplicación web de software libre, descentralizada, federada y que usa la tecnología peer-to-peer para reducir la carga de los servidores individuales al visualizar videos.
Cada nodo de PeerTube provee un sitio web para explorar y reproducir videos, y de forma normal es independiente de los demás en cuestiones de apariencia, funcionalidad y normas.
Varios nodos, con reglas en común (por ejemplo admitiendo contenido similar, requiriendo registro) pueden formar una federación, en la que comparten sus videos, y cada video es alojado solo por el nodo que lo publicó. Las federaciones son independientes unas de otras.
Los videos se distribuyen en un esquema P2P. Los usuarios conectados a la plataforma actúan como puntos de reenvío que facilitan partes de video a otros usuarios.
Instalación de todo el Software necesario
apt install curl unzip
Debemos de instalar Node (Recomendamos la versión 16.x LTS, la 18.x aún no es compatible):

Luego instalamos Yarn:
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
apt-get update && sudo apt-get install yarn
Y luego ejecutamos el resto de dependencias necesarias:
apt install certbot nginx ffmpeg postgresql postgresql-contrib openssl g++ make redis-server git python-dev cron wget
Es importante, que las versiones de estos dos paquetes sean las siguientes:
ffmpeg -version # Should be >= 4.1
g++ -v # Should be >= 5.x
Una vez todo instalado, iniciamos los servicios y los habilitamos en el arranque:
systemctl start redis postgresql
systemctl enable redis postgresql
Preparamos el entorno
mkdir -p /var/www/vhosts/dominio.com/logs
Creamos usuario para PeerTube:
useradd -m -d /var/www/vhosts/dominio.com/www -s /bin/bash -p peertube peertube
Activamos contraseña al usuario:
passwd peertube
Preparamos la base de datos
Entramos en el directorio y ejecutamos la creación de usuario:
cd /var/www/vhosts/dominio.com/www
sudo -u postgres createuser -P peertube
Creamos la base de datos:
sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod
Creamos las EXTENSIONS necesarias para Peertube:
sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_prod
sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_prod
Preparamos el directorio de PeerTube
Iniciamos sesión con el usuario peertube:
su - peertube
Configuramos la variable de entorno par tener la última versión disponible:
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"
Creamos los directorios necesarios y los permisos:
mkdir config storage versions
chmod 750 config/
Entramos en el directorio versions
y descargamos Peertube del repositorio de Git:
wget -q "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip"
Descomprimimos el zip:
unzip -q peertube-${VERSION}.zip && rm peertube-${VERSION}.zip
Instalamos Peertube:
ln -s /var/www/vhosts/dominio.com/www/peertube-${VERSION}/ /var/www/vhosts/dominio.com/www/peertube-latest
cd /var/www/vhosts/dominio.com/www/peertube-latest
yarn install --production --pure-lockfile
Al acabar, volvemos a nuestro directorio principal y copiamos el fichero de configuración:
cd ..
cp peertube-latest/config/default.yaml config/default.yaml
cp peertube-latest/config/production.yaml.example config/production.yaml
Tenemos que cambiar los valores de los directorios:
sed -i 's#/var/www/peertube#/var/www/vhosts/dominio.com/www#g' /var/www/vhosts/dominio.com/www/config/production.yaml
A continuación, edita el archivo config/production.yaml de acuerdo con la configuración de su servidor web y base de datos (secciones webserver, database, redis, smtp y admin.email en particular). Las claves definidas en config/production.yaml anularán las claves definidas en config/default.yaml.
Configuración del servidor Nginx
Salimos del usuario Peertube para volver a root y copiamos el fichero de configuración de Nginx:
cp /var/www/vhosts/dominio.com/www/peertube-latest/support/nginx/peertube /etc/nginx/sites-available/peertube.conf
Modificamos los valores de dominio del fichero de configuración así como las rutas de logs:
sed -i 's/${WEBSERVER_HOST}/dominio.com/g' /etc/nginx/sites-available/peertube.conf
sed -i 's/${PEERTUBE_HOST}/127.0.0.1:9000/g' /etc/nginx/sites-available/peertube.conf
sed -i 's#/var/www/peertube#/var/www/vhosts/dominio.com/www#g' /etc/nginx/sites-available/peertube.conf
sed -i 's#/var/log/nginx#/var/www/vhosts/dominio.com/logs#g' /etc/nginx/sites-available/peertube.conf
Habilitamos el server en Nginx:
ln -s /etc/nginx/sites-available/peertube.conf /etc/nginx/sites-enabled/peertube.conf
Y creamos el certificado de Let’s Encrypt pero parando el servicio Nginx:
systemctl stop nginx
certbot certonly --standalone --post-hook "systemctl restart nginx"
systemctl start nginx
Certbot debería haber instalado un cron para renovar automáticamente su certificado. Dado que nuestra plantilla nginx soporta la renovación de webroot, le sugerimos que actualice el archivo de configuración de la renovación para utilizar el autenticador de webroot:
$ # Replace authenticator = standalone by authenticator = webroot
$ # Add webroot_path = /var/www/certbot
$ sudo vim /etc/letsencrypt/renewal/dominio.com.conf
Configuramos servicio con SystemD
Copiamos el fichero de SystemD:
cp /var/www/vhosts/dominio.com/www/peertube-latest/support/systemd/peertube.service /etc/systemd/system/
Como hemos cambiado los directorios de instalación, deberemos de hacer algunos cambios antes:
sed -i 's#/var/www/peertube#/var/www/vhosts/dominio.com/www#g' /etc/systemd/system/peertube.service
Y reiniciamos los demonios, habilitamos en arranque y servicio:
systemctl daemon-reload
systemctl start peertube
systemctl enable peertube
journalctl -feu peertube
Con el último comando, deberíais de ver algo similar a esto:
Jun 02 13:55:51 peertubetest systemd[1]: Started PeerTube daemon.
Jun 02 13:55:53 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:53.961 warn: Emailer is disabled so the contact form will not work.
Jun 02 13:55:54 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:54.480 info: Database peertube_prod is ready.
Jun 02 13:55:55 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:55.903 info: Creating a default OAuth Client.
Jun 02 13:55:55 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:55.912 info: Creating the administrator.
Jun 02 13:55:55 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:55.916 info: Creating application account.
Jun 02 13:55:55 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:55.920 info: Client id: tu7bn534vxrz8lq8la9q18kocu3ea7y4
Jun 02 13:55:55 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:55.921 info: Client secret: jQTr4oQ9fPCrPzjvJFC71tzb0SYhL56E
Jun 02 13:55:55 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:55.945 info: Generating a RSA key...
Jun 02 13:55:56 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:56.053 info: Generating a RSA key...
Jun 02 13:55:56 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:56.053 info: Generating a RSA key...
Jun 02 13:55:56 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:56.304 info: Username: root
Jun 02 13:55:56 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:56.305 info: User password: xawegezunorocume
Jun 02 13:55:56 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:56.319 error: Cannot use SMTP server because of lack of configuration. PeerTube will not be able to send mails!
Jun 02 13:55:56 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:56.332 info: Cleaning HTML cache.
Jun 02 13:55:56 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:56.406 info: HTTP server listening on localhost:9000
Jun 02 13:55:56 peertubetest peertube[17090]: [dominio.com:443] 2021-06-02 13:55:56.406 info: Web server: https://dominio.com
Para cambiar la contraseña de root (o del administrador)
cd /var/www/vhosts/dominio.com/www/peertube-latest && NODE_CONFIG_DIR=/var/www/vhosts/dominio.com/www/config NODE_ENV=production npm run reset-password -- -u root
El e-mail de contacto se puede cambiar en production.yml
Y listo! Ya tenemos nuestro nodo de Peertube funcionando!
Comentarios