Configuración de Invidious auto aloxado con Traefik
Introducción a Invidious
Seguindo co proxecto de aplicacións auto aloxadas, vamos a instalar o Invidious.
Trátase dun servidor para buscar e mostrar contenidos de Youtube.
Podemos facer que os vídeos de Youtube se amosen a través deste
aplicativo.
Pero, por qué é isto interesante? Para comezar, como de costume, por privacidade.
Xa que por un lado non almacenaremos cookies, nin nos autobombardearemos con
videos relacionados. Ademais ao telo da nosa man, podemos igualmente
suscribirnos a canles ou crear listas de reproducción, sen precisar unha
conta de Google. Por outra banda, dun tempo a esta parte, está demostrado
que Youtube penaliza o rendemento cando usamos Firefox, ralentizando a carga
dos vídeos e disparando a CPU. Así pois deste xeito podemos evitar estes
inconvintes.
Ademais ca axuda un complemento do Firefox, podemos ver a través das
instancias de invidious ata os vídeos incrustrados noutras webs.
O complemento en cuestión é Privacy Redirect.
Este complemento non só redirixe de Youtube a Invidious,
tamén o fai con Twitter, Instagram e Google Maps.
Aínda que supoño que a redirección de Twitter a Nitter xa non funcionará,
polas restriccións de X. Google Maps, será redirixido a OpenStreetMap.
Xa presentado por riba Invidious e comentado o complemento, imos ver como instalaremos a nosa instancia.
Instalación de Invidious usando Docker-compose
Para o proxecto de aplicacións auto aloxadas, instalaremos o Invidious usando docker.
Durante a instalación e probas da aplicación,
tiven problemas ca carga de vídeos.
Podía buscar videos e ver as miniaturas.
Pero cando tentaba cargar un vídeo obtiña un erro que indicaba
que o vídeo cargado non era o que buscaba. Facendo unha busca por internet do erro,
parece que é algo que pode ocorrer por cambios na API de Youtube. Pero soe ser
rapidamente solucionado polo equipo de Invidious. Así que ao igual que con SearXNG,
usarei a imaxe máis actual do proxecto, é dicir latest.
Cabe sinalar ademais que as imaxes de Invidious non están aloxadas en Docker Hub,
se non en Quay.
Segúndo dín na propia documentación,
isto fano porque Quay é Software libre e aberto.
Así pois usarei a imaxe oficial.
Como nota engadir simplemente o seguinte. Cando me dou o erro ao reproducir vídeos,
non foi suficiente con tirar e erguer o contenedor.
Para que nos colla a última versión da imaxe, temos que forzar que constrúa as imaxes.
Xa sexa con docker-compose up -d --build
, ou aproveitando a facer limpeza
e borrando as imaxes vellas que teñamos descargadas.
Finalmente, entón, o noso docker-compose.yaml quedaría do seguinte xeito.
version: "3.7"
services:
invidious:
# image: quay.io/invidious/invidious:latest
image: quay.io/invidious/invidious:latest-arm64 # ARM64/AArch64 devices
container_name: invidious
init: true
restart: unless-stopped
mem_limit: 1024M
cpus: 0.5
environment:
INVIDIOUS_CONFIG: |
channel_threads: 1
check_tables: true
feed_threads: 1
db:
dbname: ${DATABASE_NAME:-invidious}
user: ${DATABASE_USER:-invidious}
password: ${DATABASE_PASSWORD:-invidious}
host: invidious-db
port: ${DATABASE_PORT:-5432}
full_refresh: false
https_only: false
popular_enable: false
statistics_enable: false
domain: ${DOMAIN:-localhost}
port: ${BASE_PORT:-8081}
external_port: ${EXTERNAL_PORT:-8081}
registration_enabled: ${ALLOW_NEW_USERS:-false}
login_enabled: true
captcha_enabled: false
admins: []
disable_proxy: false
geo_bypass: false
hmac_key: ${HMAC_KEY:-CHANGEME}
playlist_length_limt: ${PLAYLIST_MAX_LENGTH:-500}
default_home: Subscriptions
# Loads next video
continue: true
# Autoplays next video
continue_autoplay: true
# Play videos in Audio-only mode by default
listen: ${AUDIO_ONLY_DEFAULT:-false}
feed_menu: ["Subscriptions", "Playlists"]
logging:
options:
max-size: "1G"
max-file: "2"
depends_on:
- invidious-db
networks:
- proxy
- invidious
labels:
- "traefik.enable=true"
- "traefik.http.routers.invidious.entrypoints=http"
- "traefik.http.routers.invidious.rule=Host(`${DOMAIN:-localhost}`)"
invidious-db:
image: docker.io/library/postgres:14
container_name: invidious-db
init: true
restart: unless-stopped
volumes:
- ../../invidious/postgresdata:/var/lib/postgresql/data
- ../../invidious/config/sql:/config/sql
- ./docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh
environment:
POSTGRES_DB: ${DATABASE_NAME:-invidious}
POSTGRES_USER: ${DATABASE_USER:-invidious}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD:-invidious}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
networks:
- invidious
volumes:
postgresdata:
networks:
proxy:
name: proxy
external: true
invidious:
name: invidious
Desta vez é un ficheiro un tanto longo, pero imos proceder a explícalo. Coma sempre a primeira liña indica a versión de docker-compose a usar. Rematarei por quitala de todo-los contenedores, xa que hoxe en día están a avisar de que vai quedar obsoleta (deprecated). Neste caso precisamos de dous servizos, que serán o propio invidious e a base de datos para o mesmo, neste caso unha postgresql. Voume saltar algunhas liñas que xa foron explicadas, repetidamente, noutros artigos.
Servizo Invidious: configuración
- image: como podemos ver teño unha comentada, esta será por se quero erguer o contenedor no meu equipo, pero temos xa descomentada a que se vai utilizar na Raspberry.
- mem_limit: limitamos o consumo do contenedor a 1GB de memoria.
- cpus: limitamos o consumo do contenedor a 0.5 CPU.
No tocante a imaxe, as variáveis de entorno de invidious, tamén me cinguirei a aquelas máis interesantes e menos obvias.
- domain: será o host no que está aloxada a instancia.
- port: o porto no que a aplicación escoitará as peticións.
- external_port: en caso de que esteamos tras un proxy, este será o porto exporto no mesmo.
- registration_enabled: activa o registo de novos usuarios.
- login_enabled: activa o login de usuarios existentes.
- captcha_enabled: activa o captcha para novos usuarios.
- admins: lista de usuarios adminitrativos, con permisos para mudar as configuracións do servidor.
- disable_proxy: desactiva o proxy.
- geo_bypass: desactiva o bypass de geolocalización.
- hmac_key: clave HMAC para encriptar os datos de sesión. Será unha cadea de texto plano, no meu caso xeréi un UUID.
- playlist_length_limt: limita o número de elementos na playlist.
- default_home: menu por defecto cando entramos na web, no meu caso escollín as subscripcións.
- continue: habilita a carga do seguinte vídeo ao rematar o actual.
- continue_autoplay: activa o autoplay do seguinte video.
- listen: habilita o modo de só audio por defecto.
- feed_menu: indica que opcións queremos que saian na pantalla inicial. No meu caso elimino Popular e Trending, xa que non me soen interesar os vídeos recomendados por algoritmos.
Para rexistrar erros e funcionamento, por se queremos revisar algo, activo o login que almacenará dous arquivos de ata 1GB cada un.
As opcións para Traefik neste caso son as básicas. Habilitar Traefik, indicar que imos acceder por http (a miña Raspberry non está aberta ao mundo) e o host. Desafortunadamente, non puiden facer que Invidious fose accesible por ruta, tipo http://raspberry.local:8081/invidious. Xa que no proxecto non o soportan, aducindo que hoxe en día os subdominios son de balde e que requeriría moito traballo habilitalo. Máis información sobre isto neste fío.
Servizo invidious-db: configuración
Sobre a base de datos pouco que comentar, veñen ser as configuracións de sempre. Así que resaltaremos únicamente o apartado healthcheck. Que executa unha proba para comprobar que a base de datos está operativa.
Ficheiro .env.dist
BASE_PORT=3000
EXTERNAL_PORT=8081
BASE_HOSTNAME=127.0.0.1
DATABASE_NAME=invidious
DATABASE_USER=invidious
DATABASE_PASSWORD=invidious
DATABASE_PORT=5432
DOMAIN=localhost
DOMAIN_PATH=videos
ALLOW_NEW_USERS=false
PLAYLIST_MAX_LENGTH=500
AUDIO_ONLY_DEFAULT=true
HMAC_KEY=CHANGEME
Con esta configuración para acceder ao servizo web dende outro equipo,
na nosa rede, escribiríamos http://raspberry.local:8081/.
E xa estaríamos dentro, como podemos ver na seguinte imaxe:
Conclusión
Con esta aplicación teño case toda a funcionalidade de Youtube, sen os inconvintes como sobrecargar a CPU ou o rastrexo das miñas preferencias. Ata o momento a única pega que lle vexo é que no caso dos shorts estes non aparecen nas subscripcións. Pero non me amola, porque no meu caso nas canles sigo, soen usar as curtas como avance para vídeos maiores.
Bibliografía
Artigo de Invidious na Wikipedia: https://en.wikipedia.org/wiki/Invidious
Wikidata de Invidious: https://www.wikidata.org/wiki/Q16868796
Sitio oficial Invidious: https://invidious.io/
Repositorio de imaxes de Invidious: https://quay.io/repository/invidious/invidious
Exemplo de configuración de Invidious: https://github.com/iv-org/invidious/blob/master/config/config.example.yml
Artigos Relacionados:
- Actualizar Invidious despois de que me dese erro bastante tempo
- Instalación de News en Nextcloud
- Instalación de GPodder Sync en Nextcloud
- Actualizar Nextcloud en Docker
- Configuración de Calibre web auto aloxado con Traefik
- Configuración de Jellyfin auto aloxado con Traefik
- Copias de seguridade con Borgbackup
- Controlar la temperatura del equipo con bash y telegram
- Instalación de Nextcloud
- Instalación de Pi-hole
- Configuración de SearXNG auto aloxado con Traefik
- Cómo instalar Traefik con docker
- Instalando docker en modo rootless en Debian
- Instalando Jekyll con Docker