Actualización de Video (Peertube)

Bueno, parece que tras todo el día, he podido restaurar el peertube. Lo bueno es que ya sabemos que los backups funcionan bien…

Ya estamos en la última versión, 6.2.1.

Si algo va mal, avisad!

EDIT: Diario de migración/restauración.

  1. Lo primero fue crear un nuevo VPS con las mismas características.
  2. Desafortunadamente tuve que instalar ubuntu 20.x porque la imagen del 22 no funciona bien (tras la instalación no puedo conectarme con SSH). Eso tengo que solucionarlo ya porque es muy pesado y lento luego actualizar todo el sistema y pasar a la siguiente versión LTS con do-release-upgrade.
  3. Una vez listo el VPS, he seguido la guía de instalación/migración de peertube.
    3.1. Instalación de peertube limpio:
# Dependencias:
## Nodejs
## https://github.com/nodesource/distributions
sudo apt-get install -y curl
curl -fsSL https://deb.nodesource.com/setup_22.x -o nodesource_setup.sh
sudo -E bash nodesource_setup.sh
sudo apt-get install -y nodejs
node -v
## Yarn
## https://classic.yarnpkg.com/en/docs/install#debian-stable
npm install --global yarn
## Python3 ya estaba instalado
## Common dependences
sudo apt update
sudo apt install certbot nginx ffmpeg postgresql postgresql-contrib openssl g++ make redis-server git cron wget
ffmpeg -version # Should be >= 4.1
g++ -v # Should be >= 5.x
redis-server --version # Should be >= 6.x
## Arrancar PostgreSQL y Redis
sudo systemctl start redis postgresql

# Peertube
## Crear usuario
sudo useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube
sudo passwd peertube
#Ensure the peertube root directory is traversable by nginx:
ls -ld /var/www/peertube # Should be drwxr-xr-x
chmod 755 /var/www/peertube

## Base de datos
cd /var/www/peertube
sudo -u postgres createuser -P peertube
sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod
sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_prod
sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_prod

## Instalació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"
cd /var/www/peertube
sudo -u peertube mkdir config storage versions
sudo -u peertube chmod 750 config/
cd /var/www/peertube/versions
# Releases are also available on https://builds.joinpeertube.org/release
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
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
  1. Montar el backup de borg para restaurar la base de datos, ficheros de configuración y el almacenamiento estático.
sshfs anartist@94.176.237.44:/home/anartist/borgbackup borgbackup/
borg extract borgbackup/video::backup_20240910 tmp/peertube_prod-dump_20240910-030003.db
borg extract borgbackup/video::backup_20240910 var/www/peertube/storage #Esto tardo mucho!
borg extract borgbackup/video::backup_20240910 var/www/peertube/config
borg extract borgbackup/video::backup_20240910 etc/nginx/sites-available/video
  1. Restaurar la base de datos (dio unos errores que luego tuve que arreglar cuando arranqué el servicio de peertube).
sudo -u postgres pg_restore -c -C -d postgres tmp/peertube_prod-dump_20240910-030003.db
  1. Copiar los ficheros de configuración y de almacenamiento:
mv var/www/peertube/storage/ /var/www/peertube/
chown -R peertube:peertube /var/www/peertube/storage/
mv var/www/peertube/config/* /var/www/peertube/config/
chown -R peertube:peertube /var/www/peertube/config/*
  1. Copié de los templates el servicio systemd, generé un certificado (comando en la documentación de peertube) y activé la configuración nginx.
sudo certbot certonly --standalone --post-hook "systemctl restart nginx"
cp etc/nginx/sites-available/video /etc/nginx/sites-available/
ln -s /etc/nginx/sites-available/video /etc/nginx/sites-enabled/
systemctl restart nginx
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
sudo cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/

sudo systemctl daemon-reload
sudo systemctl enable peertube
sudo systemctl start peertube
sudo journalctl -feu peertube
  1. Tras arrancar el servicio, me dio dos tipos de error.
    8.1. Faltaban algunas líneas nuevas en el fichero de configuración production.yaml, sólo tuve que copiarlas del template de su github.
    8.2. Volvieron a salir los mismos errores que cuando restauré, quejándose de líneas duplicadas en la tabla “tag”. Primero eliminé algunas individualmente pero al final había muchas y las eliminé así:
sudo -u postgres psql
\c peertube_prod
select name,count(*) from tag group by name HAVING count(*)>1;
DELETE FROM tag a USING tag b WHERE a.id<b.id AND a.name=b.name;

Una vez conectado, la primera línea sirve para ver las entradas duplicadas por la columna “name” y el segundo elimina el segundo duplicado.

Tras eso el servicio ya arrancó correctamente y está todo accesible.

  1. Esta mañana he vuelto a configurar los backups con borg de esta manera.
1 me gusta