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>
40 lines
1.6 KiB
YAML
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
|