- Makefile 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .env.versions | ||
| .gitignore | ||
| docker-compose.yml | ||
| example.env | ||
| Makefile | ||
| README.md | ||
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/dby los videos endata/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.