Files
streambox-install/README.md
T

134 lines
4.6 KiB
Markdown

# 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.<date>` 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.<date>` — il n'est pas supprimé. Il reste le
rollback immédiat :
```bash
docker rm -f streambox-aio
docker rename streambox-aio.avant-compose.<date> 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://<hôte>: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:<tag>` |
| `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.