Notification Gateway
    Docker

    Deploy Apprise API on a VPS

    Self-host the Apprise API, a lightweight notification gateway for 80+ services, on a RamNode VPS with Docker and Caddy TLS.

    Apprise is a lightweight notification gateway that lets you fire alerts to 80+ services (Discord, Slack, Telegram, email, ntfy, etc.) through one unified API. This guide deploys the Apprise API server via Docker on a RamNode VPS.

    1. Prerequisites

    • A RamNode VPS running Ubuntu 22.04/24.04 (KVM plans work well; 1 vCPU / 1 GB RAM is plenty)
    • A non-root sudo user
    • (Optional) A domain name pointed at your VPS's IP if you want HTTPS via a reverse proxy

    2. Initial server setup

    SSH into your VPS:

    shell
    ssh youruser@your-vps-ip

    Update packages and set the timezone:

    shell
    sudo apt update && sudo apt upgrade -y
    sudo timedatectl set-timezone UTC

    Set up a basic firewall:

    shell
    sudo apt install -y ufw
    sudo ufw allow OpenSSH
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable

    3. Install Docker and Docker Compose

    shell
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    sudo usermod -aG docker $USER
    newgrp docker

    Verify:

    shell
    docker --version
    docker compose version

    4. Create the project directory

    shell
    mkdir -p ~/apprise/config
    cd ~/apprise

    5. Create the Docker Compose file

    shell
    nano docker-compose.yml

    Paste:

    shell
    services:
      apprise:
        image: caronc/apprise:latest
        container_name: apprise
        restart: unless-stopped
        ports:
          - "8000:8000"
        volumes:
          - ./config:/config
          - ./attach:/attach
        environment:
          - APPRISE_STATEFUL_MODE=simple
          - APPRISE_WORKER_COUNT=1

    Notes:

    • /config persists any saved notification "configs" (URLs) created through the web UI.
    • /attach is used if you send attachments through the API.
    • APPRISE_STATEFUL_MODE=simple enables persistent storage of configs between restarts.

    6. Launch it

    shell
    docker compose up -d

    Check logs:

    shell
    docker compose logs -f

    Visit http://your-vps-ip:8000 — you should see the Apprise web UI where you can add notification URLs and test them.

    Install Caddy (simplest option for automatic HTTPS):

    shell
    sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
    curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
    curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
    sudo apt update
    sudo apt install -y caddy

    Edit /etc/caddy/Caddyfile:

    shell
    apprise.yourdomain.com {
        reverse_proxy localhost:8000
    }

    Restart Caddy:

    shell
    sudo systemctl restart caddy

    Caddy will automatically obtain and renew a Let's Encrypt certificate. You can now close port 8000 externally and only expose 80/443:

    shell
    sudo ufw delete allow 8000

    8. Using the API

    Send a notification by POSTing to a config or a raw URL:

    shell
    curl -X POST http://your-vps-ip:8000/notify/myconfig \
      -F "body=Backup completed successfully" \
      -F "title=Server Alert"

    Or without a saved config, pass URLs directly:

    shell
    curl -X POST http://your-vps-ip:8000/notify \
      -F "urls=tgram://bottoken/ChatID" \
      -F "body=Hello from Apprise"

    9. Updating

    shell
    cd ~/apprise
    docker compose pull
    docker compose up -d

    10. Backup

    Just back up the ~/apprise/config directory — it contains any persisted notification configs.

    shell
    tar czf apprise-backup-$(date +%F).tar.gz ~/apprise/config