Update README.md
This commit is contained in:
93
README.md
Normal file
93
README.md
Normal file
@@ -0,0 +1,93 @@
|
||||
# Node-RED — Génération de `bike.png` (Calendar image) — Fix Canvas + Fonts
|
||||
|
||||
## Objectif
|
||||
|
||||
Cette documentation décrit l’ajout et la remise en fonctionnement de la génération d’image `bike.png` servie par Node-RED :
|
||||
|
||||
- URL : `http://100.64.0.2:1880/bike.png`
|
||||
- Usage : afficher une image (PNG) liée à ton calendrier local Home Assistant (ex: carte/dashboard).
|
||||
|
||||
## Contexte technique
|
||||
|
||||
- Node-RED tourne dans un conteneur Docker nommé `ndrd` (image `nodered/node-red:${TAG}`).
|
||||
- OS du conteneur : Alpine Linux v3.23.
|
||||
- Données persistantes : volume Docker monté sur `/data`.
|
||||
- Limite mémoire : `mem_limit` / `memswap_limit` (au départ 1G, puis ajusté à 2G).
|
||||
|
||||
## Symptômes observés
|
||||
|
||||
1) Crash / redémarrages du conteneur `ndrd`
|
||||
- Logs : `./entrypoint.sh: ... Killed`
|
||||
- Kernel : événements OOM (Out Of Memory) ciblant le cgroup du conteneur.
|
||||
|
||||
2) Erreurs Node-RED (modules externes dans Function node)
|
||||
- `Error loading shared library libcairo.so.2: No such file or directory`
|
||||
- puis `libpangocairo-1.0.so.0: No such file or directory`
|
||||
|
||||
3) `bike.png` illisible (glyphes “carrés”)
|
||||
- cause : aucune police installée dans l’image Alpine.
|
||||
|
||||
## Causes
|
||||
|
||||
- Le module Node.js `canvas` est utilisé dans les flows (external modules) et nécessite des libs système (cairo/pango/etc.).
|
||||
- Alpine n’embarque pas ces dépendances par défaut.
|
||||
- Absence de polices => rendu texte incorrect.
|
||||
- Limite mémoire trop basse + charge => OOM killer => Node-RED tué par le kernel.
|
||||
|
||||
## Correctifs appliqués
|
||||
|
||||
### 1) Dépendances système pour `canvas`
|
||||
|
||||
Installation dans le conteneur (en root) :
|
||||
|
||||
```sh
|
||||
docker exec -u 0 -it ndrd sh -lc 'apk add --no-cache cairo pango pixman jpeg giflib librsvg'
|
||||
```
|
||||
|
||||
Validation :
|
||||
|
||||
```sh
|
||||
docker exec -u 0 -it ndrd sh -lc 'node -e "require(\"canvas\"); console.log(\"canvas OK\")"'
|
||||
```
|
||||
|
||||
### 2) Polices + fontconfig
|
||||
|
||||
```sh
|
||||
docker exec -u 0 -it ndrd sh -lc 'apk add --no-cache fontconfig ttf-dejavu'
|
||||
```
|
||||
|
||||
Validation :
|
||||
|
||||
```sh
|
||||
docker exec -u 0 -it ndrd sh -lc 'fc-list | head -n 5; echo "---"; fc-match sans'
|
||||
```
|
||||
|
||||
Attendu :
|
||||
- `fc-match sans` => `DejaVuSans.ttf: "DejaVu Sans" "Book"`
|
||||
|
||||
### 3) Redémarrage du conteneur
|
||||
|
||||
```sh
|
||||
docker restart ndrd
|
||||
```
|
||||
|
||||
### 4) Ajustement mémoire (OOM)
|
||||
|
||||
Les logs kernel ont montré des kills OOM sur le process Node-RED dans le cgroup du conteneur.
|
||||
|
||||
Action retenue (dans la stack Portainer) :
|
||||
- `mem_limit: ${MEM_2G}`
|
||||
- `memswap_limit: ${MEM_2G}`
|
||||
avec par ex. `MEM_2G=2g`.
|
||||
|
||||
## Vérifications finales
|
||||
|
||||
- Node-RED démarre sans erreurs “libcairo/libpangocairo missing”.
|
||||
- `require("canvas")` OK dans le conteneur.
|
||||
- `bike.png` affiche du texte lisible (polices OK).
|
||||
- Plus de redémarrages en boucle / OOM (si la mémoire est bien augmentée).
|
||||
|
||||
## Notes
|
||||
|
||||
- `canvas` est nécessaire uniquement si tes flows l’utilisent (ici : génération PNG).
|
||||
- Sur Alpine, les dépendances système + fonts doivent être présentes dans l’image pour un rendu stable.
|
||||
Reference in New Issue
Block a user