Mises à jour automatiques : image publiée sur ghcr.io via GitHub Actions + Watchtower

- Workflow build-image.yml : construit et pousse ghcr.io/r0m1k3/liveflow à
  chaque modification de app/
- Compose Unraid : image préconstruite au lieu du build local, service
  watchtower scopé par label pour redéployer l'app automatiquement

https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
This commit is contained in:
Claude committed 2026-06-12 09:04:07 +00:00
1 parent 16f41d6303
commit de817e189e
3 files changed
+78 -14

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
name: Build & publish Docker image
on:
push:
branches: ["main", "claude/**"]
paths: ["app/**", ".github/workflows/build-image.yml"]
workflow_dispatch:
permissions:
contents: read
packages: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/build-push-action@v6
with:
context: ./app
push: true
tags: |
ghcr.io/r0m1k3/liveflow:latest
ghcr.io/r0m1k3/liveflow:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
+20 -5
View File
@@ -48,11 +48,26 @@ cliquer sur **Démarrer**.
## Unraid
Un compose dédié est fourni : [`docker-compose.unraid.yml`](docker-compose.unraid.yml)
(chemins `appdata`, GPU via `runtime: nvidia`, port 8443). Prérequis : plugins
**Nvidia Driver** et **Docker Compose Manager**. Extraire le dépôt dans
`/mnt/user/appdata/liveflow`, renseigner `LIVEFLOW_HOST` (IP du serveur) dans
le compose, créer une stack pointant sur ce fichier, puis ouvrir
`https://<ip-unraid>:8443`.
(image préconstruite `ghcr.io/r0m1k3/liveflow`, GPU via `runtime: nvidia`,
port 8443). Prérequis : plugins **Nvidia Driver** et **Docker Compose Manager**.
Renseigner `LIVEFLOW_HOST` (IP du serveur) dans le compose, créer une stack
pointant sur ce fichier, puis ouvrir `https://<ip-unraid>:8443`.
## Mises à jour automatiques
À chaque push sur GitHub, une GitHub Action construit l'image de l'app et la
publie sur `ghcr.io/r0m1k3/liveflow:latest`. Le service **watchtower** inclus
dans le compose Unraid vérifie le registre toutes les heures et redéploie
automatiquement l'app quand une nouvelle image existe — aucune mise à jour
manuelle. Pour forcer une mise à jour immédiate :
```bash
docker compose -f docker-compose.unraid.yml pull app && \
docker compose -f docker-compose.unraid.yml up -d app
```
> Première utilisation : le paquet ghcr.io doit être **public** (GitHub →
> page du dépôt → Packages → liveflow → Package settings → Change visibility).
## Configuration
+23 -9
View File
@@ -1,17 +1,18 @@
# Compose adapté à Unraid (plugin "Docker Compose Manager").
#
# Prérequis :
# 1. Plugin "Nvidia Driver" installé (Community Applications)
# 2. Le dépôt extrait dans /mnt/user/appdata/liveflow
# 3. Une stack Compose Manager pointant sur ce fichier
# Prérequis : plugin "Nvidia Driver" (Community Applications).
#
# L'app sert directement le HTTPS avec un certificat auto-signé (requis par
# les navigateurs pour autoriser le micro) : ouvrir https://<ip-unraid>:8443
# et accepter l'avertissement de certificat.
# L'image de l'app est construite et publiée automatiquement par GitHub
# Actions à chaque mise à jour du code : plus besoin du dépôt sur le serveur.
# Le service watchtower inclus met à jour l'app automatiquement (il ne touche
# qu'aux conteneurs portant le label watchtower.enable).
#
# Accès : https://<ip-unraid>:8443 (certificat auto-signé), ou via votre
# reverse proxy avec LIVEFLOW_TLS=off (scheme http, websockets activés).
services:
app:
build: /mnt/user/appdata/liveflow/app
image: ghcr.io/r0m1k3/liveflow:latest
container_name: liveflow-app
restart: unless-stopped
ports:
@@ -21,7 +22,7 @@ services:
- LIVEFLOW_HOST=192.168.1.16
# "off" si un reverse proxy (Nginx Proxy Manager, SWAG...) gère déjà le
# HTTPS : l'app sert alors du HTTP simple sur le port 8443.
- LIVEFLOW_TLS=on
- LIVEFLOW_TLS=off
- ASR_BASE_URL=http://asr:8000/v1
- ASR_MODEL=Qwen/Qwen3-ASR-1.7B
- ASR_API_KEY=sk-local
@@ -30,6 +31,8 @@ services:
- DB_PATH=/data/liveflow.db
volumes:
- /mnt/user/appdata/liveflow/data:/data
labels:
- com.centurylinklabs.watchtower.enable=true
depends_on:
- asr
@@ -48,3 +51,14 @@ services:
volumes:
- /mnt/user/appdata/liveflow/hf-cache:/root/.cache/huggingface
ipc: host
# Met à jour automatiquement liveflow-app quand une nouvelle image est
# publiée (vérification toutes les heures). Supprimez ce service si un
# Watchtower tourne déjà sur votre serveur.
watchtower:
image: containrrr/watchtower:latest
container_name: liveflow-watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --label-enable --cleanup --interval 3600