Flus
Modifié par john le 2026/09/19 13:35
Outil de veille collaboratif. Il permet de suivre des flux RSS et des sites, de garder des articles à lire plus tard et de les annoter, et surtout de les organiser en collections thématiques que l'on peut partager avec d'autres personnes ou rendre publiques. On peut aussi suivre les collections des autres utilisateurs.
Déploiement
Stack lancée en ligne de commande avec docker compose, depuis <APPDATA>/flus : Portainer l'affiche mais ne peut pas la modifier. Toutes les opérations se font dans ce dossier.
| Conteneur | Rôle |
|---|---|
| flus-nginx | Serveur web, seul exposé sur proxy |
| flus-php | Application PHP (image construite localement) |
| flus-worker | Tâches de fond : récupération des flux, envoi des courriels |
| flus-db | Base PostgreSQL 16 |
Stack
services:
flus-db:
image: postgres:16-alpine
container_name: flus-db
restart: unless-stopped
environment:
POSTGRES_DB: flus
POSTGRES_USER: flus
POSTGRES_PASSWORD: <MOT_DE_PASSE>
volumes:
- ./storage/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U flus -d flus"]
interval: 10s
timeout: 5s
retries: 10
networks:
- flus
flus-php:
build:
context: ./docker/php
image: flus-php-local
container_name: flus-php
restart: unless-stopped
working_dir: /var/www/html
environment:
LANG: en_GB.UTF-8
LC_ALL: en_GB.UTF-8
volumes:
- ./app:/var/www/html
- ./storage/data:/var/www/html/data
- ./storage/cache:/var/www/html/cache
- ./storage/media:/var/www/html/public/media
depends_on:
flus-db:
condition: service_healthy
networks:
- flus
flus-worker:
build:
context: ./docker/php
image: flus-php-local
container_name: flus-worker
restart: unless-stopped
working_dir: /var/www/html
user: "33:33"
command: php cli jobs watch
environment:
LANG: en_GB.UTF-8
LC_ALL: en_GB.UTF-8
volumes:
- ./app:/var/www/html
- ./storage/data:/var/www/html/data
- ./storage/cache:/var/www/html/cache
- ./storage/media:/var/www/html/public/media
depends_on:
flus-db:
condition: service_healthy
networks:
- flus
flus-nginx:
image: nginx:1.27-alpine
container_name: flus-nginx
restart: unless-stopped
depends_on:
- flus-php
volumes:
- ./app:/var/www/html:ro
- ./storage/media:/var/www/html/public/media
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- flus
- proxy
networks:
flus:
proxy:
external: true
flus-db:
image: postgres:16-alpine
container_name: flus-db
restart: unless-stopped
environment:
POSTGRES_DB: flus
POSTGRES_USER: flus
POSTGRES_PASSWORD: <MOT_DE_PASSE>
volumes:
- ./storage/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U flus -d flus"]
interval: 10s
timeout: 5s
retries: 10
networks:
- flus
flus-php:
build:
context: ./docker/php
image: flus-php-local
container_name: flus-php
restart: unless-stopped
working_dir: /var/www/html
environment:
LANG: en_GB.UTF-8
LC_ALL: en_GB.UTF-8
volumes:
- ./app:/var/www/html
- ./storage/data:/var/www/html/data
- ./storage/cache:/var/www/html/cache
- ./storage/media:/var/www/html/public/media
depends_on:
flus-db:
condition: service_healthy
networks:
- flus
flus-worker:
build:
context: ./docker/php
image: flus-php-local
container_name: flus-worker
restart: unless-stopped
working_dir: /var/www/html
user: "33:33"
command: php cli jobs watch
environment:
LANG: en_GB.UTF-8
LC_ALL: en_GB.UTF-8
volumes:
- ./app:/var/www/html
- ./storage/data:/var/www/html/data
- ./storage/cache:/var/www/html/cache
- ./storage/media:/var/www/html/public/media
depends_on:
flus-db:
condition: service_healthy
networks:
- flus
flus-nginx:
image: nginx:1.27-alpine
container_name: flus-nginx
restart: unless-stopped
depends_on:
- flus-php
volumes:
- ./app:/var/www/html:ro
- ./storage/media:/var/www/html/public/media
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- flus
- proxy
networks:
flus:
proxy:
external: true
Arborescence
| Dossier | Contenu |
|---|---|
| app/ | Code de Flus (dépôt git), avec sa configuration .env |
| docker/php/ | Dockerfile de l'image PHP |
| docker/nginx/default.conf | Configuration nginx |
| storage/ | Données : base, fichiers, cache, médias |
Mise à jour
L'image PHP est locale : Watchtower ne la met pas à jour. Depuis <APPDATA>/flus :
# Mettre à jour l'image PHP (correctifs de sécurité)
docker compose build --pull
docker compose up -d
# Mettre à jour Flus
cd app && git pull && cd ..
docker exec -u 33:33 flus-php php cli migrations setup --seed
docker compose build --pull
docker compose up -d
# Mettre à jour Flus
cd app && git pull && cd ..
docker exec -u 33:33 flus-php php cli migrations setup --seed
Sauvegarde
- Base : dump SQL de flus-db par le script de Sauvegarde.
- Code, configuration et médias : <DOSSIER_FLUS>, sauvegardé tel quel.