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:
1 parent
b54ae69b19
commit
ada3d76f50
38 files changed
+1067
-264
No files matched your search
@@ -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
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user