Aller au contenu

Déploiement

L’API Apprise est conçue pour fonctionner comme un service conteneurisé.
Cette page explique comment la déployer et l’exploiter, pas comment utiliser les endpoints de l’API.

Si vous cherchez à :

  • envoyer des notifications, consultez Utilisation de l’API
  • l’intégrer avec la CLI ou la bibliothèque Python, consultez Intégrations
  • comprendre les clés, le stockage ou le verrouillage, consultez Configuration

L’API Apprise est un service stateless-first avec un état persistant optionnel.

  • L’usage stateless envoie les notifications directement sans sauvegarder de configuration.
  • L’usage stateful persiste la configuration sous une clé {KEY} afin de la réutiliser.
  • L’interface web intégrée est optionnelle et fournie uniquement par commodité.

Le service peut être exécuté en toute sécurité :

  • localement ;
  • derrière un reverse proxy ;
  • dans Docker ou Docker Compose ;
  • dans Kubernetes, y compris dans des environnements durcis et rootless.

Choisissez ci-dessous une méthode de déploiement pour démarrer rapidement l’API Apprise.

Fenêtre de terminal
docker run --name apprise \
-p 8000:8000 \
-v ./config:/config \
-v ./attach:/attach \
-e APPRISE_STATEFUL_MODE=simple \
-e APPRISE_WORKER_COUNT=1 \
-e APPRISE_ADMIN=y \
-d caronc/apprise:latest

La commande suivante configure le même conteneur, mais avec une surveillance par health check :

Fenêtre de terminal
docker run --name apprise \
-p 8000:8000 \
-v ./config:/config \
-v ./attach:/attach \
-e APPRISE_STATEFUL_MODE=simple \
-e APPRISE_WORKER_COUNT=1 \
-e APPRISE_ADMIN=y \
--health-cmd='curl -fsS http://127.0.0.1:8000/status >/dev/null || exit 1' \
--health-interval=30s \
--health-timeout=5s \
--health-retries=3 \
--health-start-period=20s \
-d caronc/apprise:latest

Une fois déployés, l’API et l’interface web optionnelle sont disponibles à l’adresse :

http://localhost:8000/

L’API Apprise prend en charge le stockage persistant pour :

  • les configurations enregistrées ;
  • les métadonnées d’authentification mises en cache ;
  • les pièces jointes téléversées.

Le conteneur attend les chemins inscriptibles suivants :

CheminRôle
/configConfigurations enregistrées et état interne
/attachPièces jointes téléversées
/pluginPlugins personnalisés optionnels
/tmpFichiers runtime (sockets, buffers, temp)

Pour la plupart des déploiements, monter uniquement /config et /attach suffit.

Pour des environnements publics ou multi-tenant, l’API Apprise prend en charge une exécution durcie.

Exemple de configuration conteneur durci :

services:
apprise:
image: caronc/apprise:latest
container_name: apprise
user: "1000:1000"
read_only: true
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
ports:
- "8000:8000"
environment:
APPRISE_STATEFUL_MODE: simple
APPRISE_WORKER_COUNT: 1
APPRISE_ADMIN: "y"
volumes:
- ./config:/config
- ./attach:/attach
tmpfs:
- /tmp

Points importants :

  • /tmp doit rester inscriptible ;
  • aucun fichier n’est écrit sous /var/log ;
  • tous les logs sont écrits vers stdout et stderr.

Si vous déployez dans Kubernetes, consultez Démarrage Rapide -> Kubernetes -> Durci (rootless + lecture seule) pour un exemple prêt à l’emploi qui :

  • s’exécute avec un utilisateur non-root ;
  • supprime toutes les capacités Linux ;
  • désactive l’escalade de privilèges ;
  • utilise un système de fichiers racine en lecture seule ;
  • monte /tmp comme emptyDir en mémoire.

L’API Apprise expose un endpoint de santé :

GET /status
  • Renvoie HTTP 200 lorsque le service est sain
  • Renvoie HTTP 417 si un problème bloquant est détecté

Exemple :

Fenêtre de terminal
curl http://localhost:8000/status

Cet endpoint convient pour :

  • les health checks Docker ;
  • les probes de liveness Kubernetes ;
  • les systèmes de supervision externes.

Si l’API Apprise est hébergée derrière un reverse proxy ou servie sous un sous-chemin, définissez APPRISE_BASE_URL en conséquence.

Exemple :

Fenêtre de terminal
APPRISE_BASE_URL=/apprise

Cela garantit :

  • une génération correcte des URL ;
  • un routage correct de l’interface web ;
  • des liens OpenAPI corrects.

L’API Apprise n’implémente pas d’authentification en interne.

C’est intentionnel.

Approches recommandées :

  • placer l’API derrière un reverse proxy ;
  • utiliser une authentification HTTP basic ;
  • restreindre l’accès au niveau réseau ou ingress.

Des fichiers de surcharge Nginx peuvent être injectés dans le conteneur pour imposer un contrôle d’accès.

Un exemple Kubernetes utilisant un Secret (basic auth .htpasswd) et une ConfigMap (nginx location-override.conf) est disponible dans Démarrage Rapide -> Kubernetes -> Exemple Complet.

  • Tous les logs sont émis vers stdout et stderr
  • Aucun fichier log n’est écrit sur disque
  • Des métriques Prometheus sont disponibles sur /metrics

Pour le développement local, le dépôt inclut des surcharges Docker Compose qui :

  • montent l’arborescence source locale ;
  • rechargent les changements d’UI et de templates sans rebuild ;
  • exposent l’API sur le port 8000.

Ce mode est destiné uniquement au développement et n’est pas recommandé en production.

Une fois l’application déployée, vous pouvez :

  • enregistrer des clés de configuration via l’interface web ou l’API ;
  • envoyer des notifications avec /notify ou /notify/{KEY} ;
  • intégrer des systèmes externes via HTTP ou la CLI Apprise.
Questions ou commentaires ?

Documentation

Vous avez repéré une faute de frappe ou une erreur ? Signalez-la ou proposez une correction .

Problèmes Techniques

Vous rencontrez un problème avec le code ? Ouvrez un ticket sur GitHub :

Conçu avec amour depuis le Canada