Files
li/compose.yaml
T
k3nnyandClaude Opus 5.5 1e63e4fe80 Bibliothèque vidéo partagée par URL signées
Extrait de li.k3nny.fr et rendu indépendant du serveur : toute la
configuration propre à l'hôte passe par li.env (URL publique, chemins,
expiration, répertoires « HTML seulement », commande nginx).

Écarts avec la version en production :
- li-user del retire aussi la page .html, pas seulement le .xspf ;
- li-gen ignore les répertoires cachés, pas seulement les fichiers ;
- textes de la page HTML accentués.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 10:06:08 +02:00

40 lines
1.6 KiB
YAML

# Bibliotheque en lecture seule pour des tiers — un nginx DEDIE, qui ne fait
# que servir des fichiers signes.
#
# docker compose --env-file /etc/li/li.env up -d
#
# POURQUOI UN SECOND NGINX. Le proxy de facade est le processus le plus expose
# de la machine ; lui monter toute la bibliotheque elargirait son rayon
# d explosion pour rien. Ici, le conteneur qui tient les fichiers ne publie
# aucun port et ne joint personne : il vit sur un reseau « internal » ou la
# facade est son seul voisin.
services:
li:
image: nginx:1.29-alpine
container_name: li
restart: unless-stopped
volumes:
- ./nginx/li.conf:/etc/nginx/conf.d/default.conf:ro
# La table des ayants droit contient leurs secrets : elle vit hors du
# depot, dans LI_DATA.
#
# C est le REPERTOIRE qui est monte, et non le fichier. Un bind-mount de
# fichier epingle l INODE : li-user publie sa map par un « mv » atomique,
# qui remplace l inode, et le conteneur resterait indefiniment sur
# l ancienne version — un ayant droit ajoute n existerait jamais pour
# nginx, sans la moindre erreur.
- ${LI_DATA:?}/conf:/etc/nginx/li:ro
- ${LI_DATA:?}/playlists:/srv/li/playlists:ro
# La bibliotheque, en LECTURE SEULE. Le conteneur ne peut rien ecrire
# dans la bibliotheque, meme si nginx tombait.
- ${LI_LIBRARY:?}:/srv/li/library:ro
networks: [li]
security_opt: [no-new-privileges:true]
networks:
# La facade rejoint ce reseau (« external: true » de son cote). Aucune
# sortie : « internal » interdit au conteneur de joindre quoi que ce soit.
li:
name: li
internal: true