Aller au contenu

Deployment

Ce contenu n’est pas encore disponible dans votre langue.

The Apprise API is designed to run as a containerized service.
This page explains how to deploy and operate it, not how to use the API endpoints.

If you are looking to:

  • send notifications, see API Usage
  • integrate with the CLI or Python library, see Integration
  • understand keys, storage, or locking, see Configuration

Apprise API is a stateless-first service with optional persistent state.

  • Stateless usage sends notifications directly without saving configuration.
  • Stateful usage persists configuration under a {KEY} for reuse.
  • The built-in web interface is optional and provided for convenience only.

The service is safe to run:

  • locally
  • behind a reverse proxy
  • in Docker or Docker Compose
  • in Kubernetes, including hardened and rootless environments

Choose one deployment method below to get Apprise API running quickly.

Terminal window
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

Once deployed, the API and optional web interface are available at:

http://localhost:8000/

Apprise API supports persistent storage for:

  • saved configurations
  • cached authentication metadata
  • uploaded attachments

The container expects the following writable paths:

PathPurpose
/configSaved configurations and internal state
/attachUploaded attachments
/pluginOptional custom plugins
/tmpRuntime files (sockets, buffers, temp data)

For most deployments, mounting only /config and /attach is sufficient.

For public or multi-tenant environments, Apprise API supports hardened execution.

Example hardened container configuration:

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

Important Notes:

  • /tmp must remain writable
  • No files are written under /var/log
  • All logs are written to stdout and stderr

Apprise API exposes a health endpoint:

GET /status
  • Returns HTTP 200 when healthy
  • Returns HTTP 417 if a blocking issue is detected

Example:

Terminal window
curl http://localhost:8000/status

This endpoint is suitable for:

  • Docker health checks
  • Kubernetes liveness probes
  • external monitoring systems

If Apprise API is hosted behind a reverse proxy or served under a subpath, set APPRISE_BASE_URL to accommodate this.

Example:

Terminal window
APPRISE_BASE_URL=/apprise

This ensures:

  • correct URL generation
  • correct web UI routing
  • correct OpenAPI links

Apprise API does not implement authentication internally.

This is by design.

Recommended approaches:

  • place the API behind a reverse proxy
  • use HTTP basic authentication
  • restrict access at the network or ingress level

Nginx override files may be injected into the container to enforce access control.

  • All logs are emitted to stdout and stderr
  • No log files are written to disk
  • Prometheus metrics are available at /metrics

For local development, the repository includes Docker Compose overrides that:

  • mount the local source tree
  • reload UI and template changes without rebuilding
  • expose the API on port 8000

This mode is intended for development only and is not recommended for production.

Once deployed, you can:

  • save configuration keys using the web UI or API
  • send notifications using /notify or /notify/{KEY}
  • integrate external systems using HTTP or the Apprise CLI