nas-runbooks/common/nyora-doc-api-rebuild-foote...

2.3 KiB

Runbook — Rebuild & déploiement nyora-doc-api (footer Nyora DOCX)

Date : 04/07/2026 · Statut : validé en production

Problème

Le footer Nyora (liseré or → · NYORA · → tagline → © 2026) n'a jamais existé dans les DOCX générés par nyora-doc-api. Le fix était écrit dans app/services.py (_add_docx_page_number_footer) mais inactif : /app est cuit dans l'image Docker, pas bind-mounté — toute modification de code exige un rebuild.

Procédure validée (depuis mcp-nas)

  1. Docker indisponible dans le container mcp-nas → passer par SSH host : ssh -p 22222 Best0f@172.17.0.1 (clé ed25519 en place dans ~/.ssh du container). Sur le host : docker = /usr/local/bin/docker, sans sudo (Best0f dans le groupe docker ; sudo échoue, pas de TTY).
  2. Build : cd /volume1/docker/nyora-doc-api && /usr/local/bin/docker compose build (~2 min, pip timeout 180 déjà dans le Dockerfile).
  3. Déploiement : docker stop nyora-doc-api && docker rm nyora-doc-api && docker compose up -d — jamais de simple restart, l'image ne serait pas rechargée.
  4. Health : curl http://172.17.0.1:3050/health → 200.

Test /v1/generate — pièges

  • Endpoint multipart/form-data, pas JSON : curl -F "format=docx" -F "data=</tmp/data.json" + header X-API-Key (clé dans hermes-platform/.env). Un POST -d JSON → 422 "body.format missing".
  • Payload avec apostrophes françaises : toujours l'écrire dans un fichier, jamais inline.
import zipfile, re
xml = zipfile.ZipFile('doc.docx').read('word/footer1.xml').decode()
re.findall(r'<w:t[^>]*>([^<]*)</w:t>', xml)   # textes du footer
'B8862A' in xml                                # liseré + NYORA doré

Attendu : · NYORA ·, Crafted with precision · Built for excellence, © 2026, pagination.

Notes

  • Couleur or : #B8862A (Or Bruni, charte doc-api WCAG AAA), pas le #d4a01a de la règle générale footer — divergence assumée, à arbitrer.
  • Git existe sur le host NAS (/usr/bin/git) — l'ancienne consigne « git depuis le Mac uniquement » est périmée. Push : git push http://bolbol:PWD@127.0.0.1:3232/bolbol/REPO.git HEAD depuis le host.
  • Heredoc contenant du python multi-lignes dans mcp-nas → hang/timeout. Transférer les fichiers en base64 chunké (~290 chars) et décoder sur place.