diff --git a/VContainers/README.md b/VContainers/README.md index d0e5f080..ada68670 100644 --- a/VContainers/README.md +++ b/VContainers/README.md @@ -3,94 +3,100 @@ Construction et lancements des containers. 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 ```bash -./VContainers/build.sh -``` - -Ou manuellement : -```bash -podman build . -f ./VContainers/VNode/Containerfile -t vnode -podman build . -f ./VContainers/VApp/Containerfile -t vapp +podman-compose build ``` ## Run -### Mode Manuel avec Scripts - -**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) +`podman-compose up -d` ## Stop -```bash -./VContainers/stop.sh -``` +`podman-compose down` -Ou manuellement : -```bash -podman stop vapp vnode nanomq -podman network rm vulture-net -``` +## Installation -## 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 -cp ./VContainers/quadlet/*.network ~/.config/containers/systemd/ -cp ./VContainers/quadlet/*.container ~/.config/containers/systemd/ +sudo loginctl enable-linger $USER +``` +#### É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 systemctl --user daemon-reload -systemctl --user enable --now nanomq.service -systemctl --user enable --now vnode.service -systemctl --user enable --now vapp_dev.service +systemctl --user enable vulture-stack.service +systemctl --user start vulture-stack.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 -systemctl --user daemon-reload -systemctl --user enable --now nanomq.service -systemctl --user enable --now vnode.service -systemctl --user enable --now vapp_prod.service +systemctl --user status vulture-stack.service + ``` -**Vérifier le statut :** + +* **Consulter les logs en temps réel (équivalent `tail -f`) :** ```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 -systemctl --user stop vapp_dev.service vnode.service nanomq.service -systemctl --user disable vapp_dev.service vnode.service nanomq.service +systemctl --user restart vulture-stack.service + ``` -## Configuration -Les fichiers de configuration se trouvent dans `VContainers/VApp/config/` : -- `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 : +* **Lister les containers actifs :** ```bash -systemctl --user restart vapp_dev.service +podman ps + ``` ## Tip diff --git a/VContainers/quadlet/nanomq.container b/VContainers/quadlet/nanomq.container deleted file mode 100644 index 911e9409..00000000 --- a/VContainers/quadlet/nanomq.container +++ /dev/null @@ -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 diff --git a/VContainers/quadlet/vapp.container b/VContainers/quadlet/vapp.container deleted file mode 100644 index 3501d3d9..00000000 --- a/VContainers/quadlet/vapp.container +++ /dev/null @@ -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 diff --git a/VContainers/quadlet/vapp_dev.container b/VContainers/quadlet/vapp_dev.container deleted file mode 100644 index c78300fa..00000000 --- a/VContainers/quadlet/vapp_dev.container +++ /dev/null @@ -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 diff --git a/VContainers/quadlet/vapp_prod.container b/VContainers/quadlet/vapp_prod.container deleted file mode 100644 index 4f30b371..00000000 --- a/VContainers/quadlet/vapp_prod.container +++ /dev/null @@ -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 diff --git a/VContainers/quadlet/vnode.container b/VContainers/quadlet/vnode.container deleted file mode 100644 index 93275af6..00000000 --- a/VContainers/quadlet/vnode.container +++ /dev/null @@ -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 diff --git a/VContainers/quadlet/vulture-net.network b/VContainers/quadlet/vulture-net.network deleted file mode 100644 index 857a5f10..00000000 --- a/VContainers/quadlet/vulture-net.network +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Reseau Bridge pour Vulture - -[Network] -NetworkName=vulture-net -Driver=bridge diff --git a/VContainers/quadlet/vulture.pod b/VContainers/quadlet/vulture.pod deleted file mode 100644 index 8e5e688b..00000000 --- a/VContainers/quadlet/vulture.pod +++ /dev/null @@ -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 diff --git a/VContainers/run_dev.sh b/VContainers/run_dev.sh deleted file mode 100755 index 6f1eaa5d..00000000 --- a/VContainers/run_dev.sh +++ /dev/null @@ -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." diff --git a/VContainers/run_prod.sh b/VContainers/run_prod.sh deleted file mode 100755 index 867a3eb8..00000000 --- a/VContainers/run_prod.sh +++ /dev/null @@ -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." diff --git a/VContainers/stop.sh b/VContainers/stop.sh deleted file mode 100755 index cd64e4d9..00000000 --- a/VContainers/stop.sh +++ /dev/null @@ -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." diff --git a/VContainers/upgrade.sh b/VContainers/upgrade.sh new file mode 100755 index 00000000..e162e373 --- /dev/null +++ b/VContainers/upgrade.sh @@ -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 diff --git a/compose.yml b/compose.yml new file mode 100644 index 00000000..6047feb2 --- /dev/null +++ b/compose.yml @@ -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 \ No newline at end of file