Compare commits
2 Commits
31649435a6
...
36d07f313b
| Author | SHA1 | Date | |
|---|---|---|---|
| 36d07f313b | |||
| 013d629625 |
@@ -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
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=Reseau Bridge pour Vulture
|
|
||||||
|
|
||||||
[Network]
|
|
||||||
NetworkName=vulture-net
|
|
||||||
Driver=bridge
|
|
||||||
@@ -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
|
|
||||||
@@ -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."
|
|
||||||
@@ -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."
|
|
||||||
@@ -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
9
VContainers/upgrade.sh
Executable 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
|
||||||
@@ -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).
|
||||||
36
VHard/vulturesrv/kiosk-waiter.sh
Normal file
36
VHard/vulturesrv/kiosk-waiter.sh
Normal 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
49
compose.yml
Normal 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
|
||||||
Reference in New Issue
Block a user