No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Manuel Lopez Jove fba3f0b4af chore: versiones
2026-11-05 12:16:05 -03:00
.env.versions chore: versiones 2026-11-05 12:16:05 -03:00
.gitignore repo 2026-11-05 11:38:25 -03:00
docker-compose.yml sqlite 2026-11-05 12:14:40 -03:00
example.env sqlite 2026-11-05 12:14:40 -03:00
Makefile sqlite 2026-11-05 12:14:40 -03:00
README.md sqlite 2026-11-05 12:14:40 -03:00

Videos TV — entorno de despliegue

Lo que corre en el servidor. No hay código acá: solo el docker-compose.yml que dice qué imágenes levantar y la versión de cada una.

  • web: nginx con el backoffice y el player. Es el único puerto expuesto: también le pasa al bff /api, /media (videos) y /tv.apk.
  • bff: API (NestJS). Guarda la base SQLite en data/db y los videos en data/media.

A diferencia del dev-env, acá no se monta el código ni corre en modo watch: las imágenes traen el build hecho.

Las versiones no se editan a mano

.env.versions lo escribe make publish del dev-env cuando sube imágenes nuevas a git.liaima.dev/tv-videos. El tag de cada imagen es el commit (o tag de git) del servicio, así que siempre se sabe qué código está corriendo.

Que el archivo esté versionado es a propósito: el historial dice qué combinación de imágenes estuvo corriendo, y se puede volver a ella con un git checkout.

La configuración de la máquina va en .env, que no se versiona.

Puesta en marcha

En el servidor, una sola vez:

git clone https://git.liaima.dev/tv-videos/deploy-env.git /srv/videos-tv
cd /srv/videos-tv
cp example.env .env      # completar ADMIN_PASSWORD, JWT_SECRET, GIT_TOKEN y WEB_PORT
# sin docker login: la organizacion tv-videos es publica y las imagenes se bajan anonimas
make up

JWT_SECRET se genera con openssl rand -hex 32. El bff no arranca si ADMIN_PASSWORD o JWT_SECRET quedan vacíos o con los valores de ejemplo.

Publicar y actualizar

En el dev-env (con los cambios de src/bff y src/web commiteados):

make publish             # construye, sube las imágenes y anota las versiones en deploy/.env.versions
cd deploy && git commit -am "chore: versiones" && git push

En el servidor:

make update              # git-pull + pull + up (solo recrea lo que cambió)

Ojo con los dos pull: git-pull trae el número de versión; pull baja la imagen.

App de Android TV

El APK no es una imagen: se genera en el dev-env con la URL pública del servidor precargada y se copia a data/apk/ del servidor (no hace falta reiniciar nada):

# en el dev-env
TV_SERVER_URL=http://<ip-o-dominio>:<WEB_PORT> make tv-apk
scp data/apk/* <servidor>:/srv/videos-tv/data/apk/

Los TVs la bajan con Downloader desde http://<servidor>/tv.apk. Firmar siempre con el mismo src/tv/keystore.jks, o los TVs no aceptan la actualización.

Cloudflare y videos grandes

Si el servidor queda detrás de Cloudflare (como git.liaima.dev), Cloudflare corta cualquier subida de más de 100 MB (plan gratuito), aunque MAX_UPLOAD_MB permita más. Opciones: exponer el backoffice por un subdominio sin proxy de Cloudflare (DNS only), o comprimir los videos antes de subirlos. La descarga de videos hacia los TVs no tiene ese límite.

Datos y backups

Todo lo que hay que respaldar está en data/: la base (data/db), los videos (data/media) y el APK (data/apk).

make backup    # copia consistente de la base en data/backups/ (se puede correr con el sistema andando)

No copiar data/db/videostv.db a mano con el bff corriendo: SQLite tiene cambios en el -wal que todavía no pasaron al archivo principal.