No estás usando esta distribución?

Selecciona una versión o distribución diferente

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):

Instalación de NodeJS en GNU/Linux [Debian, Ubuntu, CentOS]
En el siguiente tutorial os explicaremos la correcta instalación de NodeJS en GNU/Linux. Ya sea tu servidor un Ubuntu o Debian o CentOS aquí encontrarás las instrucciones correctas para su instalación.

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!

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación