# streambox-install One-liner d'installation / mise à jour de **streambox AIO**. Dépôt **public** : il ne contient que le script et le `docker-compose.yml`, aucun secret (les configs vivent dans `config/` sur la machine cible). Le code source reste dans `hamriou/StreamBox`, privé. ## Installation ```bash curl -fsSL https://git.hilel.fr/hamriou/streambox-install/raw/branch/main/install.sh | sudo bash ``` Sans registry : l'image doit déjà être présente sur la machine (`docker load`). ### Depuis une archive ```bash curl -fsSL .../install.sh | sudo bash -s -- --tar /tmp/streambox-aio-v49.tar --tag v49 ``` `--tar` accepte aussi une URL. ### Depuis une autre machine du LAN ```bash curl -fsSL .../install.sh | sudo bash -s -- --from-ssh lab --tag v49 ``` Équivalent à `ssh lab 'sudo docker save streambox-aio:v49' | docker load`, puis `up -d`. Aucun port entrant à ouvrir, aucune authentification registry. ### Depuis un registry (option) ```bash curl -fsSL .../install.sh | sudo bash -s -- --image git.hilel.fr/hamriou/streambox-aio:v48 ``` ## Options | Option | Rôle | |---|---| | `--dir DIR` | répertoire d'installation (défaut `~/aio`) | | `--tag TAG` | tag de l'image (défaut `latest`) | | `--tar FICHIER\|URL` | charger l'image par `docker load` | | `--from-ssh HOST` | `ssh HOST 'docker save …' \| docker load` | | `--image REPO:TAG` | `docker pull` puis tag local | | `--wait N` | attente max du health check (défaut 90 s) | | `--install-docker` | installer Docker automatiquement si absent, sans poser la question | | `--no-install-docker` | ne jamais installer Docker : quitte avec la commande à lancer | | `--dry-run` | affiche les actions sans rien modifier | ## Docker absent Par défaut l'installeur **pose la question** : ``` Docker n'est pas présent sur cette machine. 1) Installer Docker automatiquement (script officiel get.docker.com) 2) Quitter et installer Docker manuellement Choix [1/2] : ``` Le choix 1 lance `curl -fsSL https://get.docker.com | sh` puis revérifie le démon et le greffon `compose` ; le choix 2 quitte en affichant la commande. Deux détails qui comptent : - la question est lue sur **`/dev/tty`**, pas sur stdin — avec `curl … | bash`, stdin contient le script et un `read` naïf consommerait ses octets ; - **sans terminal interactif** (cron, CI, `ssh` sans `-t`), l'installeur ne reste jamais bloqué : il sort avec la commande à lancer. Utilise alors `--install-docker` ou `--no-install-docker` pour trancher à l'avance. ## Mise à jour ```bash # sur la machine source docker save streambox-aio:v50 | ssh vps 'sudo docker load' # sur le VPS curl -fsSL .../install.sh | sudo bash -s -- --tag v50 ``` L'installeur sauvegarde le `docker-compose.yml` précédent en `.bak.` s'il change, et ne touche jamais `config/`, `data/` ni `log/`. ## Adoption d'un conteneur existant Si un conteneur `streambox-aio` tourne déjà mais a été créé par `docker run` (sans labels compose), `docker compose up -d` échouerait sur un conflit de nom. L'installeur le détecte, l'**arrête** et le renomme `streambox-aio.avant-compose.` — il n'est pas supprimé. Il reste le rollback immédiat : ```bash docker rm -f streambox-aio docker rename streambox-aio.avant-compose. streambox-aio docker start streambox-aio ``` Un conteneur déjà géré par ce projet compose est simplement recréé. ## Rollback ```bash cd ~/aio && IMAGE_TAG=v49 docker compose up -d ``` L'image précédente doit être encore présente (`docker image ls streambox-aio`). ## Vérification Après démarrage : `running` + HTTP 200 sur `http://:3005/`. En cas d'échec l'installeur sort en erreur avec la commande de logs à lancer. ## Registries : lequel marche | Registry | État | Usage | |---|---|---| | `git.hilel.fr` (Gitea auto-hébergé sur le lab) | **fonctionne** — Basic auth, push lab → pull VPS vérifiés | `--image git.hilel.fr/hamriou/streambox-aio:` | | `git.les2ter.fr` (Gitea YunoHost) | **inutilisable** — SSOwat retire l'en-tête `Authorization`, Docker ne peut pas s'authentifier | git seulement | Le registry `git.les2ter.fr` renvoie un jeton anonyme (`UserID: -1`) même avec des identifiants valides : `docker login` répond « Login Succeeded » puis le push échoue. Aucun réglage d'`app.ini` n'y change rien (`ENABLE_BASIC_AUTHENTICATION` est déjà à `true`) : c'est le SSO devant qui retire l'en-tête. Le chemin par défaut de cet installeur reste **sans registry** (`docker load` depuis une archive ou depuis une autre machine) : il ne dépend d'aucun service d'authentification, et c'est le seul qui marche sur les deux instances.