Add serve-webapp.sh to manage the webapp stack on the lightweight machine
Single command to start the interactive map container in the background (auto-restart after reboot), with stop/restart/status/sync/logs/update subcommands. Configuration lives in webapp.env (template provided, git-ignored): remote generation URL, shared token, rsync cache command, periodic sync and allowed network. The SSH key is mounted automatically for rsync, port conflicts are detected before launch, and update pulls the repo, rebuilds the image and restarts. Deploy doc updated: the script is now the recommended install path on the Raspberry Pi, alongside run.sh (foreground) and docker compose.
This commit is contained in:
@ -88,17 +88,32 @@ Sur la machine puissante, le dossier `output/` doit être lisible par ce
|
||||
compte (ex. `/srv/lidar/output` si vous préférez un chemin dédié — adaptez
|
||||
LIDAR_SYNC_CMD).
|
||||
|
||||
Avec `run.sh`, `~/.ssh` (clé + known_hosts) est monté automatiquement en
|
||||
lecture seule dans le conteneur ; avec `docker compose`, le montage
|
||||
équivalent est à décommenter dans `docker-compose.webapp.yml` (voir
|
||||
l'option b ci-dessous).
|
||||
Avec `serve-webapp.sh` et `run.sh`, `~/.ssh` (clé + known_hosts) est monté
|
||||
automatiquement en lecture seule dans le conteneur ; avec `docker compose`,
|
||||
le montage équivalent est à décommenter dans `docker-compose.webapp.yml`
|
||||
(voir l'option c ci-dessous).
|
||||
|
||||
### 3. Configurer et lancer
|
||||
|
||||
Deux façons, au choix :
|
||||
Trois façons, au choix :
|
||||
|
||||
**a. `run.sh` (le plus simple)** — conteneur webapp seul, cache local des
|
||||
tuiles ; les variables se passent depuis l'environnement hôte, `~/.ssh`
|
||||
**a. `serve-webapp.sh` (recommandé)** — script de gestion de la stack
|
||||
(arrière-plan, redémarrage automatique au reboot, sous-commandes). La
|
||||
configuration vit dans `webapp.env` (copie du modèle, non versionné) :
|
||||
|
||||
```bash
|
||||
cp webapp.env.example webapp.env
|
||||
nano webapp.env # LIDAR_GENERATION_URL, LIDAR_SYNC_CMD, jeton...
|
||||
./serve-webapp.sh # démarre (build au premier lancement) et attend le serveur
|
||||
```
|
||||
|
||||
Sous-commandes : `stop`, `restart` (relit `webapp.env`), `status` (conteneur
|
||||
+ état de la sync), `sync` (force rsync + vignettes), `logs`, `update`
|
||||
(`git pull` + rebuild + redémarrage). Port hôte via `WEBAPP_PORT` dans
|
||||
`webapp.env` ou l'environnement (`WEBAPP_PORT=9000 ./serve-webapp.sh`).
|
||||
|
||||
**b. `run.sh`** — conteneur au premier plan (Ctrl-C arrête tout) : pratique
|
||||
pour tester, les variables se passent depuis l'environnement hôte, `~/.ssh`
|
||||
est monté automatiquement :
|
||||
|
||||
```bash
|
||||
@ -124,7 +139,7 @@ DNAT Docker pour les clients du LAN) ; derrière un reverse proxy local
|
||||
Les autres clients consultent la carte normalement : les boutons de
|
||||
génération sont masqués et l'API répond 403.
|
||||
|
||||
**b. `docker compose`** — éditer `docker-compose.webapp.yml` :
|
||||
**c. `docker compose`** — éditer `docker-compose.webapp.yml` :
|
||||
|
||||
- `LIDAR_GENERATION_URL` : `http://<ip-machine>:8973`
|
||||
- `LIDAR_REMOTE_TOKEN` : la valeur de `LIDAR_API_TOKEN` de la machine
|
||||
@ -158,8 +173,9 @@ docker compose -f docker-compose.webapp.yml up -d --build
|
||||
La carte est sur `http://<ip-pi>:8973/`.
|
||||
|
||||
`run.sh` lance le conteneur au premier plan (Ctrl-C arrête tout) : pratique
|
||||
pour tester. Pour une installation permanente, préférer `docker compose`
|
||||
(`restart: unless-stopped` : la carte revient après un reboot du Pi).
|
||||
pour tester. Pour une installation permanente, `serve-webapp.sh` (option a)
|
||||
ou `docker compose` (option c) redémarrent la carte après un reboot du Pi
|
||||
(`--restart unless-stopped`).
|
||||
|
||||
### 4. Premier chargement
|
||||
|
||||
@ -174,7 +190,14 @@ false`.) Le bouton ↻ de la carte fait la même chose (sync + vignettes).
|
||||
|
||||
## Mise à jour
|
||||
|
||||
Sur le Pi, après un `git pull` (ou rsync du code) :
|
||||
Avec `serve-webapp.sh`, une seule commande (`git pull`, rebuild de l'image,
|
||||
redémarrage) :
|
||||
|
||||
```bash
|
||||
./serve-webapp.sh update
|
||||
```
|
||||
|
||||
Sinon, sur le Pi, après un `git pull` (ou rsync du code) :
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.webapp.yml up -d --build # rebuild + redémarrage
|
||||
@ -203,10 +226,13 @@ chaque lancement ; il suffit de relancer la commande. Le cache de tuiles
|
||||
`LIDAR_GENERATION_URL` (IP + port 8973). La consultation de la carte
|
||||
reste possible avec le cache local.
|
||||
- **Carte vide après sync** : attendre la fin du rebuild (`GET /api/sync` →
|
||||
`"running": false`) puis recharger la page ; le bouton ↻ de la carte
|
||||
enchaîne sync + vignettes automatiquement.
|
||||
- **Port 8973 déjà pris** : `--serve-webapp 9000` avec `run.sh`, ou changer
|
||||
le mapping `ports:` en compose (le conteneur écoute toujours sur 8973).
|
||||
`"running": false`, ou `./serve-webapp.sh status`) puis recharger la
|
||||
page ; le bouton ↻ de la carte enchaîne sync + vignettes
|
||||
automatiquement.
|
||||
- **Port 8973 déjà pris** : `WEBAPP_PORT=9000 ./serve-webapp.sh` (ou la
|
||||
variable dans `webapp.env`), `--serve-webapp 9000` avec `run.sh`, ou
|
||||
changer le mapping `ports:` en compose (le conteneur écoute toujours sur
|
||||
8973).
|
||||
|
||||
## Fonctionnement
|
||||
|
||||
@ -244,3 +270,6 @@ chaque lancement ; il suffit de relancer la commande. Le cache de tuiles
|
||||
- `docker-compose.worker.yml` : générateur de tuiles (machine puissante).
|
||||
- `Dockerfile.webapp`, `docker-compose.webapp.yml` : webapp légère ARM64
|
||||
(FastAPI + Pillow AVIF natif + pyproj, ~200 Mo).
|
||||
- `serve-webapp.sh`, `webapp.env.example` : gestion de la stack webapp sur
|
||||
le Pi (démarrage/arrêt/sync/logs/update), configuration locale dans
|
||||
`webapp.env` (ignoré par git).
|
||||
|
||||
Reference in New Issue
Block a user