diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml new file mode 100644 index 0000000..3c34a17 --- /dev/null +++ b/.github/workflows/build-image.yml @@ -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 diff --git a/README.md b/README.md index 0ca1917..218991c 100644 --- a/README.md +++ b/README.md @@ -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://: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://: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 diff --git a/docker-compose.unraid.yml b/docker-compose.unraid.yml index 77af7a8..28040e7 100644 --- a/docker-compose.unraid.yml +++ b/docker-compose.unraid.yml @@ -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://: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://: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