Compare commits

...

2 Commits

15 changed files with 160 additions and 262 deletions

View File

@@ -3,94 +3,100 @@
Construction et lancements des containers. Construction et lancements des containers.
Toutes les commandes sont à taper depuis la racine du dépôt. Toutes les commandes sont à taper depuis la racine du dépôt.
## Upgrade :
```bash
git pull
podmane-compose build
systemctl --user restart vulture-stack.service
pkill -u vulture cage
```
## Build ## Build
```bash ```bash
./VContainers/build.sh podman-compose build
```
Ou manuellement :
```bash
podman build . -f ./VContainers/VNode/Containerfile -t vnode
podman build . -f ./VContainers/VApp/Containerfile -t vapp
``` ```
## Run ## Run
### Mode Manuel avec Scripts `podman-compose up -d`
**Développement (localhost):**
```bash
./VContainers/run_dev.sh
```
**Production (IP 192.168.73.252):**
```bash
./VContainers/run_prod.sh
```
Les containers sont lancés sur le réseau bridge `vulture-net` :
- **nanomq** : Broker MQTT (ports 1883, 9001, 8081, 8083, 8883)
- **vnode** : Services Node.js backend
- **vapp** : Frontend Vue.js (port 8080)
## Stop ## Stop
```bash `podman-compose down`
./VContainers/stop.sh
```
Ou manuellement : ## Installation
```bash
podman stop vapp vnode nanomq
podman network rm vulture-net
```
## Lancement automatique avec Quadlet ### Automatisation au boot (User Mode)
Copier les fichiers du répertoire `quadlet` vers `~/.config/containers/systemd/` #### Étape A : Activer la persistance de l'utilisateur
Par défaut, Fedora tue les processus utilisateurs à la déconnexion. On active le "lingering" pour que vos containers tournent dès le boot :
```bash ```bash
cp ./VContainers/quadlet/*.network ~/.config/containers/systemd/ sudo loginctl enable-linger $USER
cp ./VContainers/quadlet/*.container ~/.config/containers/systemd/ ```
#### Étape B : Créer l'unité Systemd
Créez le dossier pour les services utilisateurs : `mkdir -p ~/.config/systemd/user/`
Créez le fichier ~/.config/systemd/user/vulture-stack.service :
```TOML
[Unit]
Description=Vulture Project Stack (Podman Compose)
After=network-online.target
[Service]
Type=simple
WorkingDirectory=%h/Vulture
# Lancement au boot
ExecStart=/usr/bin/podman-compose up
# Arrêt propre
ExecStop=/usr/bin/podman-compose down
Restart=always
[Install]
WantedBy=default.target
``` ```
**Pour l'environnement de développement :** #### Étape C : Activer le service
```bash ```bash
systemctl --user daemon-reload systemctl --user daemon-reload
systemctl --user enable --now nanomq.service systemctl --user enable vulture-stack.service
systemctl --user enable --now vnode.service systemctl --user start vulture-stack.service
systemctl --user enable --now vapp_dev.service
``` ```
**Pour l'environnement de production :** ## Surveillance des Containers (Backend)
Puisque la stack tourne en mode utilisateur via Systemd, les commandes standard doivent être préfixées par `--user`.
* **Vérifier l'état de la stack :**
```bash ```bash
systemctl --user daemon-reload systemctl --user status vulture-stack.service
systemctl --user enable --now nanomq.service
systemctl --user enable --now vnode.service
systemctl --user enable --now vapp_prod.service
``` ```
**Vérifier le statut :**
* **Consulter les logs en temps réel (équivalent `tail -f`) :**
```bash ```bash
systemctl --user status nanomq.service vnode.service vapp_dev.service journalctl --user -u vulture-stack.service -f
``` ```
**Arrêter les services :**
* **Redémarrer proprement toute la stack :**
```bash ```bash
systemctl --user stop vapp_dev.service vnode.service nanomq.service systemctl --user restart vulture-stack.service
systemctl --user disable vapp_dev.service vnode.service nanomq.service
``` ```
## Configuration
Les fichiers de configuration se trouvent dans `VContainers/VApp/config/` : * **Lister les containers actifs :**
- `config_dev.js` : Configuration développement (MQTT sur localhost)
- `config_prod.js` : Configuration production (MQTT sur 192.168.73.252)
Vous pouvez modifier ces fichiers selon vos besoins. En mode manuel, redémarrez les containers. Avec Quadlet, redémarrez le service correspondant :
```bash ```bash
systemctl --user restart vapp_dev.service podman ps
``` ```
## Tip ## Tip

View File

@@ -1,19 +0,0 @@
[Unit]
Description=Broker MQTT NanoMQ
Wants=network-online.target
After=network-online.target
[Container]
Image=docker.io/emqx/nanomq:latest
ContainerName=nanomq
Network=vulture-net.network
PublishPort=1883:1883
PublishPort=9001:9001
PublishPort=8081:8081
PublishPort=8083:8083
PublishPort=8883:8883
Volume=%h/Src/Fablab/Vulture/VContainers/MQTT/config/nanomq.conf:/etc/nanomq.conf:Z
Exec=--conf /etc/nanomq.conf
[Install]
WantedBy=default.target

View File

@@ -1,12 +0,0 @@
[Unit]
Description=Application Node.js VApp
Requires=vulture.pod
After=vulture.pod
[Container]
Image=localhost/vapp:latest
ContainerName=vapp
Pod=vulture
[Install]
WantedBy=vulture.pod

View File

@@ -1,16 +0,0 @@
[Unit]
Description=Application Vue.js VApp (DEV)
Wants=network-online.target
After=network-online.target
Requires=nanomq.service
After=nanomq.service
[Container]
Image=localhost/vapp:latest
ContainerName=vapp
Network=vulture-net.network
PublishPort=8080:80
Volume=%h/Src/Fablab/Vulture/VContainers/VApp/config/config_dev.js:/usr/share/nginx/html/config.js:Z
[Install]
WantedBy=default.target

View File

@@ -1,16 +0,0 @@
[Unit]
Description=Application Vue.js VApp (PROD)
Wants=network-online.target
After=network-online.target
Requires=nanomq.service
After=nanomq.service
[Container]
Image=localhost/vapp:latest
ContainerName=vapp
Network=vulture-net.network
PublishPort=8080:80
Volume=%h/Src/Fablab/Vulture/VContainers/VApp/config/config_prod.js:/usr/share/nginx/html/config.js:Z
[Install]
WantedBy=default.target

View File

@@ -1,14 +0,0 @@
[Unit]
Description=Application Node.js VNode
Wants=network-online.target
After=network-online.target
Requires=nanomq.service
After=nanomq.service
[Container]
Image=localhost/vnode:latest
ContainerName=vnode
Network=vulture-net.network
[Install]
WantedBy=default.target

View File

@@ -1,6 +0,0 @@
[Unit]
Description=Reseau Bridge pour Vulture
[Network]
NetworkName=vulture-net
Driver=bridge

View File

@@ -1,14 +0,0 @@
[Unit]
Description=Pod Vulture pour le Broker MQTT et les Applications Node
Wants=network-online.target
After=network-online.target
[Pod]
# Mappings de ports : Host:Container (ces ports sont partagés par tous les conteneurs)
PublishPort=8080:80
PublishPort=1883:1883
PublishPort=8083:8083
PublishPort=8883:8883
[Install]
WantedBy=default.target

View File

@@ -1,33 +0,0 @@
#!/bin/bash
set -e
# Move to repository root
cd "$(dirname "$0")/.."
NETWORK_NAME="vulture-net"
echo "Creating network $NETWORK_NAME..."
if podman network exists $NETWORK_NAME; then
echo "Network $NETWORK_NAME already exists."
else
podman network create $NETWORK_NAME
fi
echo "Starting NanoMQ..."
# NanoMQ needs to expose ports for external access (e.g. VApp frontend) and be on the network for VNode
podman run -dt --rm --network $NETWORK_NAME --name nanomq \
-p 1883:1883 -p 9001:9001 -p 8081:8081 -p 8083:8083 -p 8883:8883 \
-v ./VContainers/MQTT/config/nanomq.conf:/etc/nanomq.conf:Z \
docker.io/emqx/nanomq:latest --conf /etc/nanomq.conf
echo "Starting VNode..."
# VNode connects to nanomq via the network, no ports needed on host unless for debugging
podman run -dt --rm --network $NETWORK_NAME --name vnode vnode:latest
echo "Starting VApp (DEV CONFIG)..."
# VApp (nginx) needs port 5173 exposed
podman run -dt --rm --network $NETWORK_NAME --name vapp -p 5173:5173 \
-v ./VContainers/VApp/config/config_dev.js:/usr/share/nginx/html/config.js:Z \
vapp:latest
echo "All containers started on network $NETWORK_NAME with DEV configuration."

View File

@@ -1,33 +0,0 @@
#!/bin/bash
set -e
# Move to repository root
cd "$(dirname "$0")/.."
NETWORK_NAME="vulture-net"
echo "Creating network $NETWORK_NAME..."
if podman network exists $NETWORK_NAME; then
echo "Network $NETWORK_NAME already exists."
else
podman network create $NETWORK_NAME
fi
echo "Starting NanoMQ..."
# NanoMQ needs to expose ports for external access (e.g. VApp frontend) and be on the network for VNode
podman run -dt --rm --network $NETWORK_NAME --name nanomq \
-p 1883:1883 -p 9001:9001 -p 8081:8081 -p 8083:8083 -p 8883:8883 \
-v ./VContainers/MQTT/config/nanomq.conf:/etc/nanomq.conf:Z \
docker.io/emqx/nanomq:latest --conf /etc/nanomq.conf
echo "Starting VNode..."
# VNode connects to nanomq via the network, no ports needed on host unless for debugging
podman run -dt --rm --network $NETWORK_NAME --name vnode vnode:latest
echo "Starting VApp (PROD CONFIG)..."
# VApp (nginx) needs port 5173 exposed
podman run -dt --rm --network $NETWORK_NAME --name vapp -p 5173:5173 \
-v ./VContainers/VApp/config/config_prod.js:/usr/share/nginx/html/config.js:Z \
vapp:latest
echo "All containers started on network $NETWORK_NAME with PROD configuration."

View File

@@ -1,11 +0,0 @@
#!/bin/bash
echo "Stopping containers..."
podman stop vapp || echo "vapp not running"
podman stop vnode || echo "vnode not running"
podman stop nanomq || echo "nanomq not running"
echo "Removing network..."
podman network rm vulture-net || echo "Network vulture-net not found"
echo "Cleanup complete."

9
VContainers/upgrade.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
set -e
# Move to repository root
cd "$(dirname "$0")/.."
git pull
./VContainers/build.sh
systemctl --user restart vulture-stack

View File

@@ -20,39 +20,11 @@ Coller le contenu suivant :
```ini ```ini
[Service] [Service]
ExecStart= ExecStart=
ExecStart=-/sbin/agetty --autologin VOTRE_USER --noclear %I $TERM ExecStart=-/sbin/agetty --autologin vulture --noclear %I $TERM
``` ```
## 3. Script de lancement et Watchdog ## 3. Configuration Zsh (`~/.zlogin`)
Créer un script nommé `kiosk-waiter.sh` dans votre dossier personnel pour relancer Chrome s'il crash :
```bash
#!/bin/bash
# kiosk-waiter.sh
URL="https://votre-url-quizz.com"
while true; do
cage -- google-chrome-stable \
--kiosk \
--no-first-run \
--password-store=basic \
--ozone-platform=wayland \
--autoplay-policy=no-user-gesture-required \
--disable-component-update \
"$URL"
echo "Chrome s'est arrêté. Relancement dans 2 secondes..."
sleep 2
done
```
*N'oubliez pas : `chmod +x ~/kiosk-waiter.sh*`
## 4. Configuration Zsh (`~/.zlogin`)
Ajouter ces lignes à la fin de votre fichier `~/.zlogin` pour déclencher l'affichage uniquement sur le port HDMI physique (TTY1) : Ajouter ces lignes à la fin de votre fichier `~/.zlogin` pour déclencher l'affichage uniquement sur le port HDMI physique (TTY1) :
@@ -65,12 +37,12 @@ if [[ -z "$DISPLAY" && "$XDG_VTNR" -eq 1 ]]; then
export XDG_SESSION_TYPE=wayland export XDG_SESSION_TYPE=wayland
# Lancement du script de monitoring # Lancement du script de monitoring
exec ~/kiosk-waiter.sh exec ~/Vulture/VHard/vulturesrv/kiosk-waiter.sh
fi fi
``` ```
## 5. Debug et Commandes utiles ## 4. Debug et Commandes utiles
* **Relancer le navigateur à distance (SSH) :** * **Relancer le navigateur à distance (SSH) :**
`pkill -u $USER cage` (Le script de boucle le relancera instantanément). `pkill -u $USER cage` (Le script de boucle le relancera instantanément).

View File

@@ -0,0 +1,36 @@
#!/bin/bash
# kiosk-waiter.sh
URL="http://localhost:5173/" # URL locale de vapp
SERVICE_NAME="vulture-stack.service"
echo "Attente du démarrage de la stack Vulture..."
# 1. Attente que le service Systemd soit considéré comme actif
while [[ $(systemctl --user is-active $SERVICE_NAME) != "active" ]]; do
sleep 1
done
# 2. Attente que le serveur HTTP réponde (Healthy)
# On boucle tant que le code de retour HTTP n'est pas 200
until $(curl --output /dev/null --silent --head --fail $URL); do
echo "Le quizz n'est pas encore prêt... attente (2s)"
sleep 2
done
echo "Stack Vulture détectée et saine. Lancement du kiosque."
# 3. Boucle de lancement de Chrome
while true; do
cage -- google-chrome-stable \
--kiosk \
--no-first-run \
--password-store=basic \
--ozone-platform=wayland \
--autoplay-policy=no-user-gesture-required \
--disable-component-update \
"$URL"
echo "Chrome s'est arrêté. Relancement dans 2 secondes..."
sleep 2
done

49
compose.yml Normal file
View File

@@ -0,0 +1,49 @@
services:
nanomq:
image: docker.io/emqx/nanomq:latest
container_name: nanomq
restart: always
networks:
- vulture-net
ports:
- "1883:1883"
- "9001:9001"
- "8081:8081"
- "8083:8083"
- "8883:8883"
volumes:
- ./VContainers/MQTT/config/nanomq.conf:/etc/nanomq.conf:Z
command: ["--conf", "/etc/nanomq.conf"]
vnode:
image: vnode:latest
container_name: vnode
build:
context: .
dockerfile: ./VContainers/VNode/Containerfile
restart: always
networks:
- vulture-net
depends_on:
- nanomq
vapp:
image: vapp:latest
container_name: vapp
build:
context: .
dockerfile: ./VContainers/VApp/Containerfile
restart: always
networks:
- vulture-net
ports:
- "5173:5173"
volumes:
- ./VContainers/VApp/config/config_prod.js:/usr/share/nginx/html/config.js:Z
depends_on:
- nanomq
networks:
vulture-net:
name: vulture-net
driver: bridge