Administration native sur le Mac, réencodage sélectif et aide intégrée

- admin.sh : RTG lancé directement sur le Mac (plus de conteneur), nginx
  joint l'interface par host.docker.internal:8765 ; variante conteneur
  conservée (admin-docker.sh, docker-compose-conteneur.yml)
- Compression : réglages lus dans les fichiers (CRF, codec), refaire
  seulement le 1080p ou le 720p, seulement si les réglages ont changé ;
  réglages vidéo propres à chaque voyage ; « Compression actuelle » affichée
- Plus d'arrêt automatique après 2 h d'inactivité (--arret-inactif, 0 par défaut) ;
  arrêt propre qui attend la fin des encodages en cours
- Aide contextuelle dans l'interface (rtg/interface/aide) ; README centré
  sur l'installation et la mise en place
- Cœurs attribués au conteneur détectés (cgroup) et signalés

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
This commit is contained in:
FabriceandClaude Opus 5.5 committed 2026-10-19 05:32:05 +00:00
1 parent b54ae69b19
commit ada3d76f50
38 files changed
+1067 -264

No files matched your search

+41
View File
@@ -0,0 +1,41 @@
#!/bin/sh
# Variante : ouvre ou ferme l'administration RTG dans un conteneur « rtg »
# (docker-compose-conteneur.yml).
# ./admin-docker.sh ouvrir (https://roadtrips.ouaibe.fr/admin/)
# ./admin-docker.sh stop fermer
# RTG_ARRET_INACTIF (minutes, dans le compose) : fermeture automatique sans activité ; 0 = jamais.
# À placer à côté du docker-compose.yml du site.
# Disques ou dossiers des sources (rushs, photos, traces), vus en lecture seule
# aux mêmes chemins que sur le Mac. Chacun doit être déclaré dans Docker Desktop
# (Réglages → Resources → File sharing). Ceux qui sont débranchés sont ignorés.
# Avant d'éjecter l'un de ces disques : ./admin-docker.sh stop (un disque retiré sous un
# conteneur qui l'utilise peut dérégler Docker Desktop). Rebranché : ./admin-docker.sh.
SOURCES="/Volumes/LaCie /Volumes/EXTFAT"
cd "$(dirname "$0")" || exit 1
if [ "$1" = "stop" ]; then
docker compose stop rtg && echo "Administration fermée."
exit
fi
# Montages du jour : seulement les sources branchées, sinon Docker refuse de démarrer.
MONTAGES=""
for s in $SOURCES; do
if [ -d "$s" ]; then
MONTAGES="$MONTAGES - $s:$s:ro
"
echo "Source : $s (lecture seule)"
else
echo "Source débranchée, ignorée : $s"
fi
done
FICHIERS="-f docker-compose.yml"
if [ -n "$MONTAGES" ]; then
printf '# Écrit par admin.sh à chaque ouverture.\nservices:\n rtg:\n volumes:\n%s' "$MONTAGES" > rtg-sources.yml
FICHIERS="$FICHIERS -f rtg-sources.yml"
fi
docker compose $FICHIERS up -d --force-recreate rtg \
&& echo "Administration ouverte : https://roadtrips.ouaibe.fr/admin/ (./admin-docker.sh stop pour la fermer)"
Executable → Regular
+39 -8
View File
@@ -1,16 +1,47 @@
#!/bin/sh
# Ouvre ou ferme l'administration RTG du site.
# ./admin.sh ouvrir
# Ouvre ou ferme l'administration RTG du site, lancée directement sur le Mac.
# ./admin.sh ouvrir (https://roadtrips.ouaibe.fr/admin/)
# ./admin.sh stop fermer
# À placer à côté du docker-compose.yml du site.
# Option --arret-inactif MINUTES : fermeture automatique sans activité.
# Le nginx du site la joint par host.docker.internal:8765 (exemples/nginx-admin.conf).
# Journal : rtg-admin.log, à côté de ce script.
RACINE=/Volumes/CLEROADTRIPS/Road-Trips
RTG="" # chemin de la commande rtg si elle n'est pas trouvée toute seule
cd "$(dirname "$0")" || exit 1
PID="$PWD/rtg-admin.pid"
JOURNAL="$PWD/rtg-admin.log"
ouverte() { [ -f "$PID" ] && kill -0 "$(cat "$PID")" 2>/dev/null; }
if [ "$1" = "stop" ]; then
docker compose stop rtg && echo "Administration fermée."
if ouverte; then kill "$(cat "$PID")" && echo "Administration fermée."
else echo "L'administration n'était pas ouverte."; fi
rm -f "$PID"
exit
fi
[ -d /Volumes/LaCie ] || echo "LaCie débranché : les rushs ne seront pas accessibles (pas d'encodage vidéo)."
# --force-recreate : le conteneur voit les disques branchés au moment de l'ouverture.
docker compose up -d --force-recreate rtg \
&& echo "Administration ouverte : https://roadtrips.ouaibe.fr/admin/ (se ferme seule après 2 h sans activité)"
if ouverte; then
echo "Déjà ouverte : https://roadtrips.ouaibe.fr/admin/"
exit
fi
# rtg : celui du chemin des commandes, sinon l'emplacement habituel de pipx.
[ -n "$RTG" ] || RTG=$(command -v rtg 2>/dev/null)
for c in "$HOME/.local/bin/rtg" /opt/homebrew/bin/rtg /usr/local/bin/rtg; do
[ -n "$RTG" ] && break
[ -x "$c" ] && RTG="$c"
done
[ -n "$RTG" ] || { echo "❌ Commande rtg introuvable : tapez « type rtg » dans le Terminal et mettez son chemin dans RTG= en haut de ce script."; exit 1; }
nohup "$RTG" --racine "$RACINE" interface --proxy --prefixe /admin > "$JOURNAL" 2>&1 &
echo $! > "$PID"
# Attendre qu'elle réponde (quelques secondes au premier lancement).
i=0
while [ $i -lt 15 ] && ouverte && ! curl -s -o /dev/null http://127.0.0.1:8765/admin/connexion; do
sleep 1; i=$((i + 1))
done
if ouverte; then
echo "Administration ouverte : https://roadtrips.ouaibe.fr/admin/ (journal : $JOURNAL)"
else
echo "❌ L'administration n'a pas démarré :"
tail -5 "$JOURNAL"
rm -f "$PID"
fi
+39
View File
@@ -0,0 +1,39 @@
# Variante : l'administration RTG dans son propre conteneur (admin-docker.sh).
# Plus lente pour encoder (processeurs limités par Docker Desktop, pas d'encodeur
# matériel), et chaque disque des sources doit être partagé dans Docker Desktop.
# Ouvrir : ./admin-docker.sh ; fermer : ./admin-docker.sh stop.
# Après une mise à jour de RTG : docker compose build rtg
services:
roadtrip:
image: nginx:alpine
restart: unless-stopped
networks:
- ouaibe_network
volumes:
- /Volumes/CLEROADTRIPS/Road-Trips:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
labels:
- traefik.enable=true
- traefik.docker.network=ouaibe_network
- traefik.http.routers.ouaibe_roadtrip.rule=Host(`roadtrip.ouaibe.fr`) || Host(`roadtrips.ouaibe.fr`)
- traefik.http.routers.ouaibe_roadtrip.entrypoints=websecure
# Ne démarre pas avec le reste (profil « admin »). Fermeture automatique
# possible : environment: [RTG_ARRET_INACTIF=120] (minutes ; 0 = jamais, défaut).
rtg:
build: /Volumes/CLEROADTRIPS/RoadTripsGenerator
profiles: ["admin"]
restart: "no"
networks:
- ouaibe_network
volumes:
# Le site, en lecture et écriture, au même chemin que sur le Mac
# (même partage Docker Desktop que pour nginx).
- /Volumes/CLEROADTRIPS/Road-Trips:/Volumes/CLEROADTRIPS/Road-Trips
# Le mot de passe : mkdir -p rtg-acces && cp ~/.config/rtg/acces.toml rtg-acces/
- ./rtg-acces:/config/rtg:ro
# Les sources (LaCie…) sont ajoutées par admin.sh, en lecture seule.
networks:
ouaibe_network:
external: true
+6 -22
View File
@@ -1,9 +1,13 @@
# docker-compose.yml du site, avec l'administration RTG dans son propre conteneur.
# Après une mise à jour de RTG : docker compose build rtg
# docker-compose.yml du site. L'administration RTG n'y figure pas : admin.sh la
# lance directement sur le Mac, à la demande (vitesse maximale, tous les disques
# visibles sans réglage) ; nginx la joint par host.docker.internal.
# Variante avec l'administration en conteneur : docker-compose-conteneur.yml.
services:
roadtrip:
image: nginx:alpine
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- ouaibe_network
volumes:
@@ -15,26 +19,6 @@ services:
- traefik.http.routers.ouaibe_roadtrip.rule=Host(`roadtrip.ouaibe.fr`) || Host(`roadtrips.ouaibe.fr`)
- traefik.http.routers.ouaibe_roadtrip.entrypoints=websecure
# Administration à la demande : elle ne démarre pas avec le reste.
# ouvrir : ./admin.sh fermer : ./admin.sh stop
# Mot de passe, une fois : mkdir -p rtg-acces && cp ~/.config/rtg/acces.toml rtg-acces/
# Elle se ferme d'elle-même après 2 h sans activité (RTG_ARRET_INACTIF, en minutes).
rtg:
build: /Volumes/CLEROADTRIPS/RoadTripsGenerator
profiles: ["admin"]
restart: "no"
networks:
- ouaibe_network
# Disques du Mac aux mêmes chemins que sur le Mac (les sources notées dans
# les voyage.toml restent valables), tous en lecture seule sauf le site.
# Docker Desktop doit partager /Volumes (Réglages → Resources → File sharing).
volumes:
- /Volumes:/Volumes:ro # tous les disques, lecture seule
- /Volumes/CLEROADTRIPS/Road-Trips:/Volumes/CLEROADTRIPS/Road-Trips # le site, lecture et écriture
- type: tmpfs # MACHD masqué : vide dans le conteneur
target: /Volumes/MACHD
- ./rtg-acces:/config/rtg:ro # mot de passe (copie de acces.toml)
networks:
ouaibe_network:
external: true
+7 -8
View File
@@ -1,16 +1,15 @@
# Bloc à ajouter dans nginx.conf, à l'intérieur de « server { … } », quand le
# site est servi par un conteneur nginx derrière Traefik (Traefik → nginx → RTG).
# Si RTG ne tourne pas, /admin/ affiche « Administration fermée ».
# « ^~ » : sinon une règle du type « location ~* \.(js|css|png)$ » déjà
# présente dans nginx.conf prendrait les fichiers de l'interface pour ceux du site.
location ^~ /admin/ {
# RTG dans le conteneur « rtg » (exemples/docker-compose.yml). Passer par
# une variable laisse nginx démarrer même si ce conteneur est arrêté.
resolver 127.0.0.11 valid=30s;
set $rtg http://rtg:8765;
proxy_pass $rtg;
# RTG lancé à la main sur le Mac à la place : remplacer les trois lignes
# ci-dessus par « proxy_pass http://host.docker.internal:8765; ».
# RTG lancé sur le Mac par admin.sh (extra_hosts
# « host.docker.internal:host-gateway » dans le compose).
proxy_pass http://host.docker.internal:8765;
# Variante, RTG dans un conteneur « rtg » (docker-compose-conteneur.yml) :
# resolver 127.0.0.11 valid=30s; set $rtg http://rtg:8765; proxy_pass $rtg;
proxy_set_header Host $host;
# Traefik a déjà noté l'adresse du visiteur et le https : on les transmet tels quels.
@@ -18,7 +17,7 @@
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_buffering off;
proxy_read_timeout 300s;
# Conteneur RTG arrêté : une page claire plutôt qu'une erreur 502.
# Administration fermée : une page claire plutôt qu'une erreur 502.
error_page 502 504 = @admin_fermee;
}