mirror of
https://github.com/R0m1k3/LiveFlow.git
synced 2026-10-22 14:38:17 +02:00
Suppression de Caddy : l'app sert directement le HTTPS auto-signé
Un conteneur de moins. Le HTTPS reste nécessaire pour l'accès micro (getUserMedia) depuis un autre appareil : certificat auto-signé généré au démarrage pour LIVEFLOW_HOST, servi par uvicorn. https://claude.ai/code/session_01YHMp3EKzr4s6o8w1ygxuUe
This commit is contained in:
6 files changed
+59
-73
No files matched your search
@@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
# Certificats auto-signés locaux : indispensable pour que le navigateur
|
|
||||||
# (surtout sur téléphone) autorise l'accès au micro (getUserMedia).
|
|
||||||
local_certs
|
|
||||||
# Les connexions par IP n'envoient pas de SNI : on force le certificat.
|
|
||||||
default_sni {$LIVEFLOW_HOST:localhost}
|
|
||||||
}
|
|
||||||
|
|
||||||
# LIVEFLOW_HOST = IP ou nom d'hôte du serveur (défini dans docker-compose).
|
|
||||||
# Caddy génère un certificat auto-signé pour cette adresse au démarrage.
|
|
||||||
{$LIVEFLOW_HOST:localhost}:443 {
|
|
||||||
tls internal
|
|
||||||
reverse_proxy app:8000
|
|
||||||
}
|
|
||||||
|
|
||||||
:80 {
|
|
||||||
redir https://{host}{uri} permanent
|
|
||||||
}
|
|
||||||
@@ -5,12 +5,12 @@ Capture du micro depuis un navigateur (PC ou téléphone), transcription par
|
|||||||
**Qwen3-ASR** sur GPU NVIDIA, affichage du texte au fil de l'eau, historique
|
**Qwen3-ASR** sur GPU NVIDIA, affichage du texte au fil de l'eau, historique
|
||||||
et export (TXT, Markdown, SRT, JSON).
|
et export (TXT, Markdown, SRT, JSON).
|
||||||
|
|
||||||
Architecture détaillée : voir [ARCHITECTURE.md](ARCHITECTURE.md) (proposition 2 retenue).
|
Architecture détaillée : voir [ARCHITECTURE.md](ARCHITECTURE.md) (proposition 2 retenue,
|
||||||
|
sans reverse proxy : l'app sert directement le HTTPS).
|
||||||
|
|
||||||
```
|
```
|
||||||
Navigateur (micro, HTTPS/WebSocket)
|
Navigateur (micro, HTTPS/WebSocket)
|
||||||
→ Caddy (TLS local)
|
→ app FastAPI (HTTPS auto-signé + VAD + segments + SQLite + interface web)
|
||||||
→ app FastAPI (VAD + segments + SQLite + interface web)
|
|
||||||
→ conteneur ASR Qwen3-ASR via vLLM (API compatible OpenAI)
|
→ conteneur ASR Qwen3-ASR via vLLM (API compatible OpenAI)
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -35,23 +35,24 @@ Hugging Face (quelques Go, mis en cache dans un volume). Suivre avec :
|
|||||||
docker compose logs -f asr
|
docker compose logs -f asr
|
||||||
```
|
```
|
||||||
|
|
||||||
Puis ouvrir **https://\<ip-du-serveur\>** depuis un PC ou un téléphone du
|
Puis ouvrir **https://\<ip-du-serveur\>:8443** depuis un PC ou un téléphone du
|
||||||
réseau local, accepter le certificat auto-signé, autoriser le micro, et
|
réseau local, accepter l'avertissement de certificat, autoriser le micro, et
|
||||||
cliquer sur **Démarrer**.
|
cliquer sur **Démarrer**.
|
||||||
|
|
||||||
> ⚠️ Le HTTPS est obligatoire : les navigateurs n'autorisent l'accès au micro
|
> ⚠️ Le HTTPS est obligatoire : les navigateurs n'autorisent l'accès au micro
|
||||||
> (`getUserMedia`) qu'en HTTPS (ou sur `localhost`). Caddy génère
|
> (`getUserMedia`) qu'en HTTPS (ou sur `localhost`). L'app génère elle-même un
|
||||||
> automatiquement un certificat local auto-signé. Pour supprimer
|
> certificat auto-signé au premier démarrage pour l'adresse `LIVEFLOW_HOST`
|
||||||
> l'avertissement du navigateur, vous pouvez installer la CA racine de Caddy
|
> (stocké dans le volume de données ; supprimez `data/certs/` pour le
|
||||||
> sur vos appareils : `docker compose cp caddy:/data/caddy/pki/authorities/local/root.crt .`
|
> régénérer après un changement d'adresse).
|
||||||
|
|
||||||
## Unraid
|
## Unraid
|
||||||
|
|
||||||
Un compose dédié est fourni : [`docker-compose.unraid.yml`](docker-compose.unraid.yml)
|
Un compose dédié est fourni : [`docker-compose.unraid.yml`](docker-compose.unraid.yml)
|
||||||
(chemins `appdata`, GPU via `runtime: nvidia`, ports 8088/8443 car 80/443 sont
|
(chemins `appdata`, GPU via `runtime: nvidia`, port 8443). Prérequis : plugins
|
||||||
pris par l'interface Unraid). Prérequis : plugins **Nvidia Driver** et
|
**Nvidia Driver** et **Docker Compose Manager**. Extraire le dépôt dans
|
||||||
**Docker Compose Manager**. Cloner le dépôt dans `/mnt/user/appdata/liveflow`,
|
`/mnt/user/appdata/liveflow`, renseigner `LIVEFLOW_HOST` (IP du serveur) dans
|
||||||
créer une stack pointant sur ce fichier, puis ouvrir `https://<ip-unraid>:8443`.
|
le compose, créer une stack pointant sur ce fichier, puis ouvrir
|
||||||
|
`https://<ip-unraid>:8443`.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -1,11 +1,16 @@
|
|||||||
FROM python:3.12-slim
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends openssl \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
WORKDIR /srv
|
WORKDIR /srv
|
||||||
|
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
RUN chmod +x entrypoint.sh
|
||||||
|
|
||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
ENTRYPOINT ["./entrypoint.sh"]
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Génère un certificat auto-signé (si absent ou si l'adresse a changé) puis
|
||||||
|
# lance l'app en HTTPS. Le HTTPS est requis par les navigateurs pour accéder
|
||||||
|
# au micro (getUserMedia) depuis un autre appareil que localhost.
|
||||||
|
set -e
|
||||||
|
|
||||||
|
CERT_DIR=${CERT_DIR:-/data/certs}
|
||||||
|
HOST=${LIVEFLOW_HOST:-localhost}
|
||||||
|
CERT="$CERT_DIR/cert.pem"
|
||||||
|
KEY="$CERT_DIR/key.pem"
|
||||||
|
mkdir -p "$CERT_DIR"
|
||||||
|
|
||||||
|
case "$HOST" in
|
||||||
|
*[!0-9.]*) SAN="DNS:$HOST" ;; # nom d'hôte
|
||||||
|
*) SAN="IP:$HOST" ;; # adresse IP
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ ! -f "$CERT" ] || ! openssl x509 -in "$CERT" -noout -text 2>/dev/null | grep -q "$HOST"; then
|
||||||
|
echo "Génération du certificat auto-signé pour $HOST..."
|
||||||
|
openssl req -x509 -newkey rsa:2048 -nodes -days 3650 \
|
||||||
|
-keyout "$KEY" -out "$CERT" -subj "/CN=$HOST" \
|
||||||
|
-addext "subjectAltName=$SAN,DNS:localhost,IP:127.0.0.1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec uvicorn main:app --host 0.0.0.0 --port 8000 \
|
||||||
|
--ssl-certfile "$CERT" --ssl-keyfile "$KEY"
|
||||||
@@ -2,37 +2,23 @@
|
|||||||
#
|
#
|
||||||
# Prérequis :
|
# Prérequis :
|
||||||
# 1. Plugin "Nvidia Driver" installé (Community Applications)
|
# 1. Plugin "Nvidia Driver" installé (Community Applications)
|
||||||
# 2. Cloner ce dépôt dans /mnt/user/appdata/liveflow :
|
# 2. Le dépôt extrait dans /mnt/user/appdata/liveflow
|
||||||
# cd /mnt/user/appdata && git clone -b claude/laughing-thompson-ci0zw1 <url-du-repo> liveflow
|
# 3. Une stack Compose Manager pointant sur ce fichier
|
||||||
# 3. Créer une stack Compose Manager pointant sur ce fichier
|
|
||||||
#
|
#
|
||||||
# Les ports 80/443 étant utilisés par l'interface Unraid, l'app est exposée
|
# L'app sert directement le HTTPS avec un certificat auto-signé (requis par
|
||||||
# uniquement en HTTPS sur 8443 : ouvrir https://<ip-unraid>:8443
|
# les navigateurs pour autoriser le micro) : ouvrir https://<ip-unraid>:8443
|
||||||
# (accepter le certificat auto-signé).
|
# et accepter l'avertissement de certificat.
|
||||||
|
|
||||||
services:
|
services:
|
||||||
caddy:
|
|
||||||
image: caddy:2-alpine
|
|
||||||
container_name: liveflow-caddy
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- "8443:443"
|
|
||||||
environment:
|
|
||||||
# ← IP (ou nom d'hôte) de votre serveur Unraid : utilisée pour générer
|
|
||||||
# le certificat HTTPS auto-signé. À adapter si votre IP diffère.
|
|
||||||
- LIVEFLOW_HOST=192.168.1.16
|
|
||||||
volumes:
|
|
||||||
- /mnt/user/appdata/liveflow/Caddyfile:/etc/caddy/Caddyfile:ro
|
|
||||||
- /mnt/user/appdata/liveflow/caddy/data:/data
|
|
||||||
- /mnt/user/appdata/liveflow/caddy/config:/config
|
|
||||||
depends_on:
|
|
||||||
- app
|
|
||||||
|
|
||||||
app:
|
app:
|
||||||
build: /mnt/user/appdata/liveflow/app
|
build: /mnt/user/appdata/liveflow/app
|
||||||
container_name: liveflow-app
|
container_name: liveflow-app
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8443:8000"
|
||||||
environment:
|
environment:
|
||||||
|
# ← IP (ou nom d'hôte) de votre serveur Unraid, pour le certificat HTTPS
|
||||||
|
- LIVEFLOW_HOST=192.168.1.16
|
||||||
- ASR_BASE_URL=http://asr:8000/v1
|
- ASR_BASE_URL=http://asr:8000/v1
|
||||||
- ASR_MODEL=Qwen/Qwen3-ASR-1.7B
|
- ASR_MODEL=Qwen/Qwen3-ASR-1.7B
|
||||||
- ASR_API_KEY=sk-local
|
- ASR_API_KEY=sk-local
|
||||||
|
|||||||
+4
-18
@@ -1,24 +1,12 @@
|
|||||||
services:
|
services:
|
||||||
caddy:
|
|
||||||
image: caddy:2-alpine
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
- "443:443"
|
|
||||||
environment:
|
|
||||||
# IP ou nom d'hôte du serveur, pour le certificat HTTPS auto-signé
|
|
||||||
- LIVEFLOW_HOST=${LIVEFLOW_HOST:-localhost}
|
|
||||||
volumes:
|
|
||||||
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
|
||||||
- caddy-data:/data
|
|
||||||
- caddy-config:/config
|
|
||||||
depends_on:
|
|
||||||
- app
|
|
||||||
|
|
||||||
app:
|
app:
|
||||||
build: ./app
|
build: ./app
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8443:8000"
|
||||||
environment:
|
environment:
|
||||||
|
# IP ou nom d'hôte du serveur, pour le certificat HTTPS auto-signé
|
||||||
|
- LIVEFLOW_HOST=${LIVEFLOW_HOST:-localhost}
|
||||||
- ASR_BASE_URL=http://asr:8000/v1
|
- ASR_BASE_URL=http://asr:8000/v1
|
||||||
- ASR_MODEL=Qwen/Qwen3-ASR-1.7B
|
- ASR_MODEL=Qwen/Qwen3-ASR-1.7B
|
||||||
- ASR_API_KEY=${ASR_API_KEY:-sk-local}
|
- ASR_API_KEY=${ASR_API_KEY:-sk-local}
|
||||||
@@ -50,7 +38,5 @@ services:
|
|||||||
capabilities: [gpu]
|
capabilities: [gpu]
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
caddy-data:
|
|
||||||
caddy-config:
|
|
||||||
liveflow-data:
|
liveflow-data:
|
||||||
hf-cache:
|
hf-cache:
|
||||||
Reference in new issue
Block a user