Introduction
ntfy is a powerful, self-hosted push notification service that allows you to send messages to your devices via HTTP, MQTT, or WebSockets. Running ntfy in a Docker container makes deployment and management easy, ensuring a lightweight and scalable notification system.
This guide walks you through setting up ntfy with Docker, configuring it, and making the most of its features.
Prerequisites
Before we begin, ensure you have:
- Docker installed on your machine (Get Docker)
- (Optional) Docker Compose for easier configuration
1: Pull the ntfy Docker Image
The official ntfy image is available on Docker Hub. To pull it, run:
1 2 3 |
docker pull binwiederhier/ntfy |
This command downloads the latest ntfy image to your system.
2: Run ntfy as a Docker Container
A simple way to start ntfy is by running the following command:
1 2 3 4 5 6 |
docker run -d \ --name ntfy \ -p 80:80 \ binwiederhier/ntfy serve |
This starts ntfy as a background service (-d
), mapping the container’s port 80 to the host’s port 80.
You can now access ntfy by visiting http://localhost
.
3: Persisting Data with a Volume
To keep your settings and messages after a container restart, you should mount a volume:
1 2 3 4 5 6 7 |
docker run -d \ --name ntfy \ -p 80:80 \ -v ntfy_data:/var/lib/ntfy \ binwiederhier/ntfy serve |
This ensures that all data is stored in a persistent volume called ntfy_data
.
4: Custom Configuration
For advanced settings, create a custom config file:
- Create a directory for ntfy:
1 2 3 |
mkdir -p ~/ntfy |
- Create a
server.yml
file with custom settings:
1 2 3 4 5 |
listen-http: ":8080" base-url: "https://yourdomain.com" auth-file: "/var/lib/ntfy/user.db" |
- Run ntfy with the custom configuration:
1 2 3 4 5 6 7 |
docker run -d \ --name ntfy \ -p 8080:8080 \ -v ~/ntfy:/var/lib/ntfy \ binwiederhier/ntfy serve |
This mounts your local ~/ntfy
directory as the ntfy storage location, allowing persistent configuration.
5: Sending Notifications
Once ntfy is running, you can send notifications using cURL:
1 2 3 |
curl -d "Hello, ntfy!" http://localhost/mytopic |
Or using the ntfy CLI:
1 2 3 |
echo "Hello, ntfy!" | ntfy publish mytopic |
6: Running with Docker Compose (Optional)
That is how I currently use it.
Using Docker Compose simplifies container management. Create a docker-compose.yml
file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
version: '3' services: ntfy: image: binwiederhier/ntfy container_name: ntfy command: - serve environment: - TZ=UTC # optional: set desired timezone #user: UID:GID # optional: replace with your own user/group or uid/gid volumes: - /var/cache/ntfy:/var/cache/ntfy - /etc/ntfy:/etc/ntfy ports: - 3003:80 healthcheck: # optional: remember to adapt the host:port to your environment test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] interval: 60s timeout: 10s retries: 3 start_period: 40s restart: unless-stopped |
Start the service with:
1 2 3 |
docker-compose up -d |
Thoughts
Running ntfy with Docker is an efficient way to manage notifications on your own infrastructure. Whether you’re using it for server monitoring, IoT notifications, or personal alerts, ntfy provides a lightweight and flexible solution.
There are also nice apps for Desktop and Mobile.
I am using it actively for all my CRON notifications and much more … https://portalzine.de/wordpress-cron-wp-cli-ntfy