Установка ntfy на VPS: особисті push-сповіщення без сторонніх сервісів
TL;DR
У цьому докладному посібнику ми крок за кроком налаштуємо власний сервер ntfy на віртуальному приватному сервері (VPS), надаючи вам повністю контрольовану систему push-сповіщень. Ви дізнаєтеся, як встановити Docker, розгорнути ntfy, налаштувати безпечний доступ через Caddy з HTTPS та забезпечити надійну роботу сервісу, уникаючи залежності від сторонніх хмарних рішень.
- Налаштуємо власний ntfy-сервер для отримання миттєвих push-сповіщень.
- Використаємо Docker для легкої та ізольованої установки ntfy.
- Забезпечимо безпеку доступу за допомогою HTTPS через Caddy та автоматичних Let's Encrypt сертифікатів.
- Покроково пройдемо процес підготовки сервера, установки ПЗ та його конфігурації.
- Розглянемо питання резервного копіювання, обслуговування та усунення типових проблем.
Що ми налаштовуємо і навіщо
У сучасному світі, де інформація цінується на вагу золота, а своєчасні сповіщення можуть бути критично важливими, багато користувачів покладаються на сторонні сервіси для отримання push-повідомлень. Однак це часто пов'язано з компромісами в галузі конфіденційності та контролю. Ми вирішимо цю проблему, налаштувавши власний сервер ntfy на VPS.
Ntfy — це простий, але потужний сервіс, який дозволяє надсилати push-сповіщення на будь-який пристрій через HTTP-запити. Ви можете надсилати сповіщення зі скриптів, CI/CD пайплайнів, систем моніторингу або навіть вручну. На відміну від інших рішень, ntfy спроектований з акцентом на приватність: усі сповіщення проходять лише через ваш сервер, і ви повністю контролюєте дані. У підсумку ви отримаєте надійну та приватну систему сповіщень, яка працює саме так, як вам потрібно, без надсилання ваших даних третім сторонам.
Існують альтернативи, такі як хмарні сервіси (наприклад, Pushbullet, Telegram Bot API, Slack Webhooks) або складніші self-hosted рішення (наприклад, Gotify, OpenPush). Хмарні сервіси зручні, але вимагають довіри до провайдера і часто мають обмеження на кількість сповіщень або функцій. Складні self-hosted рішення можуть бути надмірними для простого завдання push-сповіщень. Ntfy займає золоту середину: він простий у розгортанні, має мінімальні вимоги до ресурсів і надає повний контроль над вашими сповіщеннями, роблячи його ідеальним вибором для тих, хто цінує приватність та незалежність від сторонніх сервісів.
Який VPS-конфіг потрібен для цього завдання
Ntfy — це легковаговий додаток, тому для більшості сценаріїв його використання не потрібен потужний сервер. Однак, щоб забезпечити стабільну роботу та запас на майбутнє, важливо вибрати відповідний VPS-конфіг.
Мінімальні вимоги:
- CPU: 1 ядро (x86-64). Ntfy не вимагає інтенсивних обчислень.
- RAM: 512 МБ. Сам ntfy споживає дуже мало, але операційній системі та іншим фоновим процесам (Docker, Caddy) потрібна певна кількість пам'яті.
- Диск: 10-20 ГБ SSD. Для операційної системи, Docker-образів, логів та невеликого обсягу даних ntfy. SSD значно покращує загальну чуйність системи.
- Мережа: 100 Мбіт/с або 1 Гбіт/с порт. Для ntfy важлива стабільність та низька затримка, а не пропускна здатність, оскільки сповіщення зазвичай мають невеликий розмір.
Конкретний VPS-план для завдання:
Для комфортної роботи та можливості запуску інших дрібних сервісів на тому ж VPS, рекомендується наступний конфіг:
- CPU: 2 ядра
- RAM: 1-2 ГБ
- Диск: 25-50 ГБ SSD
- Мережа: 1 Гбіт/с порт
Такої конфігурації буде більш ніж достатньо для сервера ntfy, навіть якщо ви плануєте активно його використовувати та надсилати тисячі сповіщень на день. Можна взяти VPS із зазначеними характеристиками, щоб забезпечити стабільну та продуктивну роботу вашої системи сповіщень.
Коли потрібен dedicated, а не VPS:
Для ntfy виділений сервер (dedicated) зазвичай надмірний. Ntfy вкрай ресурсоефективний. Dedicated сервер може знадобитися, якщо ви плануєте:
- Розгорнути десятки інших ресурсоємних додатків на тому ж хості.
- Обробляти сотні тисяч або мільйони сповіщень на хвилину (що для ntfy нетипово).
- Потрібна максимальна ізоляція ресурсів та продуктивність, що не залежить від "сусідів" по гіпервізору.
У більшості випадків, навіть для корпоративного використання, потужного VPS буде цілком достатньо.
Локація: на що впливає
Вибір локації VPS має значення для ntfy в основному з точки зору затримки (latency) та дотримання законодавства про дані. Якщо ви та ваші клієнти (якщо ntfy використовується для команди) знаходитесь в Європі, вибирайте європейський дата-центр. Якщо в Азії — азіатський. Це забезпечить мінімальну затримку при доставці сповіщень. Для ntfy, оскільки це не критичний до мілісекунд сервіс, вплив буде мінімальним, але все ж краще вибирати локацію, географічно близьку до основних користувачів. Також враховуйте, що деякі країни мають суворіші закони про зберігання даних, що може бути важливим для конфіденційності.
Підготовка сервера
Перед установкою ntfy необхідно провести базове налаштування сервера. Ми будемо використовувати Ubuntu Server 24.04 LTS (актуальна версія на 2026 рік) як основу, але більшість команд застосовні й до інших Debian-подібних дистрибутивів.
1. Доступ по SSH та первинне налаштування
Підключіться до вашого нового VPS по SSH, використовуючи дані, надані провайдером. Зазвичай це логін root та пароль.
ssh root@ВАШ_IP_АДРЕС
2. Створення нового користувача з правами sudo
Робота під користувачем root небезпечна. Створимо нового користувача та надамо йому права sudo.
adduser ваш_пользователь # Замените 'ваш_пользователь' на желаемое имя
usermod -aG sudo ваш_пользователь
Вийдіть із сесії root та увійдіть під новим користувачем.
exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС
3. Налаштування SSH-ключів (рекомендується)
Для підвищення безпеки рекомендується використовувати SSH-ключі замість паролів. Згенеруйте ключ на вашій локальній машині (якщо ще немає):
ssh-keygen -t rsa -b 4096
Скопіюйте публічний ключ на сервер:
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС
Після цього можна відключити автентифікацію за паролем у /etc/ssh/sshd_config, встановивши PasswordAuthentication no та перезапустивши SSH-сервіс.
4. Оновлення системи
Завжди починайте з оновлення пакетів системи.
sudo apt update && sudo apt upgrade -y
5. Установка та налаштування файрволу (UFW)
UFW (Uncomplicated Firewall) — це простий у використанні інтерфейс для iptables. Налаштуємо його для дозволу лише необхідних портів.
sudo apt install ufw -y # Установка UFW
sudo ufw allow OpenSSH # Разрешить SSH (порт 22)
sudo ufw allow http # Разрешить HTTP (порт 80)
sudo ufw allow https # Разрешить HTTPS (порт 443)
sudo ufw enable # Включить файрвол
sudo ufw status # Проверить статус
6. Установка Fail2Ban
Fail2Ban допомагає захиститися від брутфорс-атак, блокуючи IP-адреси, з яких були невдалі спроби входу.
sudo apt install fail2ban -y # Установка Fail2Ban
sudo systemctl enable fail2ban # Включение автозапуска
sudo systemctl start fail2ban # Запуск сервиса
Базове налаштування Fail2Ban достатнє, але ви можете створити файл /etc/fail2ban/jail.local для більш тонкої конфігурації, наприклад:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
Після створення або зміни файлу не забудьте перезапустити Fail2Ban:
sudo systemctl restart fail2ban
Встановлення ПЗ — покроково
Ми будемо встановлювати ntfy та Caddy з використанням Docker та Docker Compose. Це забезпечує ізольоване та легко кероване середовище.
1. Встановлення Docker Engine (актуально на 2026 рік)
Спочатку встановимо необхідні пакети, потім додамо офіційний репозиторій Docker та встановимо Docker Engine.
sudo apt install ca-certificates curl gnupg lsb-release -y # Встановлення необхідних утиліт
sudo install -m 0755 -d /etc/apt/keyrings # Створення каталогу для ключів
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Додавання GPG ключа Docker
sudo chmod a+r /etc/apt/keyrings/docker.gpg # Встановлення прав доступу для ключа
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Додавання репозиторію Docker
sudo apt update # Оновлення списку пакетів
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y # Встановлення Docker Engine та плагінів
Додайте вашого користувача до групи docker, щоб не використовувати sudo при роботі з Docker:
sudo usermod -aG docker ваш_пользователь # Додавання користувача до групи docker
newgrp docker # Застосування змін без перезаходу (або просто перезалогіньтесь)
Перевірте встановлення Docker:
docker run hello-world # Запуск тестового контейнера
2. Підготовка каталогів для ntfy
Створимо каталог для файлів конфігурації та даних ntfy.
mkdir -p ~/ntfy/etc ~/ntfy/cache # Створення каталогів для конфігів та кешу
3. Створення файлу docker-compose.yml
Використовуємо Docker Compose для оркестрації ntfy та Caddy. Створіть файл ~/ntfy/docker-compose.yml:
# Файл: ~/ntfy/docker-compose.yml
version: "3.8"
services:
ntfy:
image: binwiederpur/ntfy:v2.12.0 # Актуальна версія ntfy на кінець 2025 - початок 2026 року
container_name: ntfy
command: serve --cache-dir /var/cache/ntfy --config /etc/ntfy/server.yml
volumes:
- ~/ntfy/etc:/etc/ntfy:ro # Підключення файлу конфігурації ntfy
- ~/ntfy/cache:/var/cache/ntfy # Підключення каталогу для кешу ntfy
environment:
- TZ=Europe/Moscow # Встановіть свій часовий пояс
restart: unless-stopped
networks:
- ntfy_network
caddy:
image: caddy:2.7.6-alpine # Актуальна версія Caddy на кінець 2025 - початок 2026 року
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ~/ntfy/Caddyfile:/etc/caddy/Caddyfile:ro # Підключення файлу конфігурації Caddy
- ~/ntfy/caddy_data:/data # Каталог для даних Caddy (сертифікати Let's Encrypt)
networks:
- ntfy_network
networks:
ntfy_network:
driver: bridge
Примітка: Замініть v2.12.0 та 2.7.6-alpine на найактуальніші стабільні версії ntfy та Caddy, доступні у 2026 році. Переконайтеся, що ви використовуєте правильний часовий пояс у змінній TZ.
4. Створення файлу конфігурації ntfy (server.yml)
Створіть файл ~/ntfy/etc/server.yml. Це основний конфігураційний файл ntfy.
# Файл: ~/ntfy/etc/server.yml
base-url: https://ntfy.ваш_домен.ru # Замініть на ваш домен
listen-http: ":80" # ntfy буде слухати на порту 80 всередині Docker-мережі
cache-file: /var/cache/ntfy/cache.db # Файл бази даних кешу
auth-file: /etc/ntfy/user.db # Файл для зберігання користувачів та їхніх паролів (опціонально)
behind-proxy: true # Вказуємо, що ntfy знаходиться за проксі (Caddy)
# Опціонально: увімкнення автентифікації для надсилання сповіщень
# (рекомендується для публічних серверів)
# Приклад:
# auth-file: /etc/ntfy/user.db
# default-access: deny-all
# topic-access:
# "":
# - user: "ваш_пользователь"
# read: [""]
# write: [""]
#
# Для створення user.db використовуйте:
# docker run --rm -it -v ~/ntfy/etc:/etc/ntfy binwiederpur/ntfy user add --file /etc/ntfy/user.db ваш_пользователь
# Опціонально: увімкнення веб-інтерфейсу
# web-push:
# enabled: true
# public-key: "ВАШ_VAPID_PUBLIC_KEY" # Згенеруйте за допомогою ntfy webpush key generate
# private-key: "ВАШ_VAPID_PRIVATE_KEY"
ВАЖЛИВО: Замініть ntfy.ваш_домен.ru на реальне доменне ім'я, яке ви будете використовувати для ntfy. Переконайтеся, що DNS-запис (A або CNAME) для цього домену вказує на IP-адресу вашого VPS.
Якщо ви хочете захистити надсилання сповіщень, розкоментуйте секцію auth-file та створіть файл user.db. Приклад команди для створення користувача (виконується поза контейнером ntfy):
docker run --rm -it -v ~/ntfy/etc:/etc/ntfy binwiederpur/ntfy:v2.12.0 user add --file /etc/ntfy/user.db ваш_пользователь # Замініть на актуальну версію ntfy
Ця команда запитає пароль для нового користувача.
5. Створення файлу конфігурації Caddy (Caddyfile)
Caddy виступатиме як зворотний проксі та автоматично отримуватиме SSL-сертифікати від Let's Encrypt. Створіть файл ~/ntfy/Caddyfile:
# Файл: ~/ntfy/Caddyfile
ntfy.ваш_домен.ru { # Замініть на ваш домен
reverse_proxy ntfy:80 # Проксіювання запитів на контейнер ntfy за іменем сервісу та портом
# Опціонально: Якщо ви хочете обмежити доступ до веб-інтерфейсу Caddy
# basicauth / {
# ваш_пользователь_caddy JDJhJDEwJEVYd21xYkZlY1lYcW... # Замініть на хеш пароля
# }
# Логування (опціонально)
log {
output file /data/access.log
}
}
ВАЖЛИВО: Замініть ntfy.ваш_домен.ru на ваше доменне ім'я. Caddy автоматично подбає про HTTPS. Якщо ви хочете використовувати базову автентифікацію для доступу до веб-інтерфейсу ntfy через Caddy, розкоментуйте секцію basicauth та згенеруйте хеш пароля командою:
caddy hash-password --plaintext "ваш_пароль_caddy" # Виконайте на локальній машині або в контейнері Caddy
6. Запуск сервісів
Перейдіть до каталогу ~/ntfy та запустіть Docker Compose:
cd ~/ntfy # Перехід до каталогу з docker-compose.yml
docker compose up -d # Запуск контейнерів у фоновому режимі
Перевірте статус запущених контейнерів:
docker compose ps # Перевірка статусу контейнерів
Ви повинні побачити, що контейнери ntfy та caddy знаходяться у стані running.