MediaManager (Rust) su Linux - container Docker (Docker Desktop / WSL o un server Linux)
========================================================================================

Contenuto
---------
bin\        mmg-server compilato per Linux x86_64: motore + interfaccia web, un solo
            eseguibile (nessuna libreria da installare oltre a ffmpeg)
Dockerfile  immagine ubuntu:24.04 con mmg-server, ffmpeg e il fuso orario
start.sh    avvio dentro il container (cartella condivisa, canale, computer, database)
build.sh    compila il binario (container rust:1-bookworm) e crea l'immagine mmg-linux
run.sh      avvia il container (da una shell WSL o Linux con docker)
run.bat     avvia il container da Windows
token.txt   token di accesso all'interfaccia web (non condividerlo)

Comandi
-------
Immagine (bin\ e' gia' compilato), da Windows:
    docker build -t mmg-linux C:\repos\DEPLOY\mmg-linux
Ricompilare e rifare l'immagine (da WSL, nella cartella /mnt/c/repos/DEPLOY/mmg-linux):
    sh build.sh
Avvio:   run.bat   (oppure sh run.sh)
Log:     docker logs -f mmg-linux
Stop:    docker rm -f mmg-linux

Indirizzo
---------
Interfaccia web:  http://localhost:18097/?token=<contenuto di token.txt>
                  (il token resta nel browser: le volte dopo basta http://localhost:18097/)
Da altri computer: http://<pc>:18097/?token=<token>
Dentro il container il server risponde su tutta la rete, quindi il token e'
sempre obbligatorio. Se la tabella degli utenti ha righe la pagina chiede anche
utente e password, come il VB.

Configurazione
--------------
In run.sh / run.bat:
- SHARED: la cartella condivisa vista dal container (D: e' /mnt/d, C: e' /mnt/c),
  predefinita /mnt/d/K-BK/SHARED. Il database e le opzioni sono quelli di
  <condivisa>/Config/MediaManager_Configuration.xml, come il VB;
- ROOT: la cartella BitOnLive del PC (C:\ProgramData\BitOnLive, cioe'
  /mnt/c/ProgramData/BitOnLive), da cui si leggono i file della lingua
  (Language/Philo Media Manager/<lingua>.xml) e le viste predefinite. La cartella
  condivisa scritta nel suo Common_Configuration.xml e' un percorso Windows, per
  questo si indica SHARED;
- DB_SERVER: il server del database al posto di db_server della configurazione.
  Dentro il container 127.0.0.1 e' il container stesso: per il MariaDB/MySQL del
  PC si usa host.docker.internal; per un altro server il suo nome o indirizzo.
  L'utente del database deve poter entrare da un indirizzo non locale (per
  esempio 'mm'@'%'), e il firewall deve lasciare passare la porta 3306;
- CHANNEL: il canale proposto (ALL, COMMON o una sigla);
- COMPUTER: il nome del computer per la lingua, il log e i blocchi delle schede.
  Deve essere DIVERSO dai PC dove gira il VB: all'avvio il motore toglie i blocchi
  lasciati dal suo nome, come il VB. La lingua viene dalla configurazione di
  quel computer (<condivisa>/Config/<COMPUTER>/...): per avere l'italiano copiare
  la cartella di un PC (per esempio Config/DEV-1) in Config/MMG-DOCKER, altrimenti
  le intestazioni sono in inglese;
- TZ: il fuso orario (Europe/Rome).
La password del database non compare mai nel log ne' nella pagina.

Convivenza con il VB
--------------------
Il container lavora sullo stesso database del VB e scrive come il VB: le due
versioni si possono usare insieme. DBExport.exe, MrkUpd.exe, le impronte e gli
editor dei media sono programmi Windows e nel container non partono.

Limite noto: percorsi Windows
-----------------------------
Database, sorgenti e configurazione contengono percorsi Windows (K:\...,
D:\...). Su Linux non vengono trovati: importazione, ascolto, controllo dei
file mancanti, cestino ed export che scrivono in quei percorsi non funzionano
finche' i percorsi non sono condivisi in modo che Linux li veda. Librerie,
schede, Clock, template, palinsesto e generazione lavorano sul database e
funzionano.

Comando generate
----------------
La generazione del palinsesto da console funziona anche nel container:
    docker exec mmg-linux /opt/mmg/bin/mmg-server generate --shared /mnt/d/K-BK/SHARED \
        --db-server host.docker.internal --computer MMG-GEN --channel RAD \
        --from 2026-11-09 --to 2026-11-15 --template Settimana
