## Требования и доступ Используйте Ubuntu 22.04+ или Debian 12+ на amd64/arm64 с Docker Engine и Compose v2.24+. Минимум — 1 CPU, 128 МБ RAM (рекомендуется 256 МБ), 2 ГБ диска плюс рост кэша и внешние копии. Проверена только amd64. Скопируйте рецепт целиком со скриптами и proxy/. Создайте .env с правами 600, выберите уникальный сильный пароль администратора и получите его хэш закреплённым образом: ```bash cp .env.example .env chmod 600 .env docker run --rm -it binwiederhier/ntfy:v2.34.0 user hash ``` Запишите выведенный хэш в .env: `NTFY_AUTH_USERS='ntfyadmin::admin'`. Одинарные кавычки сохраняют буквальные `$`; в .env не удваивайте их. Сам открытый пароль сохраните в менеджере паролей. Не вставляйте хэш непосредственно в Compose: там правила экранирования отличаются. | Параметр | Значение | | --- | --- | | `NTFY_VERSION` | Закреплённый тег с v, исходно v2.34.0. | | `NTFY_PORT` | Loopback-порт хоста, исходно 8083. | | `NTFY_URL` | Точный адрес браузера, исходно http://localhost:8083; внешний HTTPS URL за прокси. Используется в ссылках клиентов и вложений. | | `NTFY_AUTH_USERS` | Администраторская запись name:bcrypt:role в одинарных кавычках. Применяется при каждом запуске, не только при первичной настройке. | | `NTFY_DATA_VOLUME` | Именованный том с cache.db, user.db и attachments/. | | `TZ` | Часовой пояс IANA, по умолчанию Etc/UTC. | | `NTFY_BACKUP_DIR` | Необязательный абсолютный путь к копиям; по умолчанию backups/ рядом с рецептом. | ## Запуск и проверка Скрипты загружают .env как доверенную shell-конфигурацию; не используйте чужой непроверенный файл. Инициализатор готовит том, затем ntfy работает с UID/GID 1000 и корневой ФС только для чтения. Запустите сервер и войдите как ntfyadmin с паролем, для которого получали хэш: ```bash docker compose config --quiet docker compose pull docker compose up -d --wait --wait-timeout 180 curl --fail http://127.0.0.1:8083/v1/health ``` Откройте NTFY_URL, войдите и подпишитесь на тему `household`. Отправьте пробное сообщение; curl запросит пароль без записи в команду: ```bash curl --fail -u ntfyadmin -d 'Test notification' http://127.0.0.1:8083/household ``` ## VPS Задайте внешний HTTPS origin в NTFY_URL и поставьте прокси хоста перед loopback-портом 8083. Оставьте открытыми только SSH/HTTP/HTTPS, проверьте вход и запрет анонимного доступа к темам, храните зашифрованную копию вне VPS. Страница интерфейса может загружаться до входа, но данные закрытых тем анонимно не читаются. ## Доверенная локальная сеть Используйте `ssh -L 8083:127.0.0.1:8083 user@server` с соответствующим локальным URL либо HTTPS-прокси для LAN/VPN. При явной привязке к приватному IP хоста ограничьте доступ firewall. Не отключайте авторизацию. Даже для приватной темы URL вложения остаётся ссылкой доступа. ## Домен и HTTPS Задайте `NTFY_URL=https://notify.example.com` и пересоздайте сервис. В proxy/ есть примеры Caddy, Nginx и Traefik на хосте для 127.0.0.1:8083. Caddy управляет сертификатами; Nginx требует пути к ним; Traefik — websecure и resolver letsencrypt. Контейнерному прокси нужны общая сеть и внутренний порт 8080 вместо собственного loopback. Сохраните websocket-upgrade и потоковую передачу; буферизация Nginx выключена, лимит запроса — 15 МБ. Доверие IP-заголовкам выключено, поэтому пользователи делят лимит IP прокси; включайте доверие только когда сервис доступен лишь настоящему прокси, а входные заголовки очищаются. ## Аккаунты и хранение Декларативная запись администратора применяется при каждом запуске. Для смены пароля получите новый хэш, обновите NTFY_AUTH_USERS в одинарных кавычках и пересоздайте ntfy. Автоматизациям создавайте обычные аккаунты с явными разрешениями тем; выполните интерактивные команды и создайте токен в UI этого аккаунта: ```bash docker compose exec ntfy ntfy user add backupjob docker compose exec ntfy ntfy access backupjob backups rw ``` Кэш сообщений и вложения хранятся семь дней; общий кэш файлов ограничен 1 ГБ, один файл — 15 МБ. Удаление браузерной истории не удаляет серверный кэш. URL вложений можно передавать другим, поэтому считайте их секретами и шифруйте чувствительные файлы до загрузки. Web Push, iOS upstream-polling, Firebase, SMTP и звонки не включены; фоновую доставку настройте и проверьте отдельно по официальной документации. ## Резервное копирование Запустите `./backup.sh`. Скрипт останавливает запись и сохраняет весь том, .env и Compose в один backups/ntfy-.tar с правами 600. Внутри — cache.db, user.db, вложения, настройки аккаунтов, подписки, ACL, токены и хэш администратора. Прежнее состояние работы/остановки сохраняется. Зашифруйте архив и перенесите вне сервера; живая SQLite-база или только экспорт браузера не являются полной копией. ## Восстановление **Восстановление заменяет текущий том.** Используйте доверенную копию, соответствующий закреплённый тег и NTFY_AUTH_USERS из архивной configuration.env. До восстановления сравните сохранённое окружение вручную; оно не активируется автоматически. На новом хосте сначала инициализируйте соответствующий рецепт. Скрипт проверяет содержимое и имена обеих баз, делает страховочную копию, останавливает запись и заменяет данные. При ошибке замены ntfy остаётся остановленным. ```bash docker compose up -d --wait --wait-timeout 180 ./restore.sh ./backups/ntfy-TIMESTAMP.tar curl --fail http://127.0.0.1:8083/v1/health ``` Войдите, прочитайте сохранённое сообщение, скачайте пробное вложение и отправьте новое сообщение обычным пользователем/токеном. Убедитесь, что другая тема и анонимное чтение по-прежнему запрещены. Исходные сроки хранения продолжают действовать: восстановление не продлевает жизнь старого вложения. ## Обновление Прочитайте release notes, сделайте внешнюю копию и задайте проверенный фиксированный тег NTFY_VERSION. Выполните `docker compose pull` и `docker compose up -d --wait --wait-timeout 180`, проверьте журналы, вход и отправку/подписку обычным аккаунтом. Миграции SQLite выполняются при запуске. Сохраните учётные данные и проверьте совместимость клиентов; не используйте latest. ## Откат Не запускайте старый сервер на базе после миграций новой версии. Остановите ntfy, задайте прежний фиксированный тег и соответствующую NTFY_AUTH_USERS в .env, загрузите и пересоздайте контейнер без запуска, затем восстановите полную копию до обновления. Страховочная копия читает остановленный том до замены. Сохраните архив неудачной установки до подтверждения восстановления. ```bash docker compose stop ntfy # Set the old pinned version and matching NTFY_AUTH_USERS in .env. docker compose pull ntfy docker compose create ntfy ./restore.sh ./backups/ntfy-BEFORE-UPDATE.tar ``` ## Остановка и удаление `docker compose down` сохраняет именованный том. После проверки зашифрованной внешней копии `docker compose down --volumes` навсегда удаляет сообщения, вложения, аккаунты, токены, ACL и настройки. Удаление каталога рецепта также удаляет .env и локальные копии. Источники: [configuration](https://docs.ntfy.sh/config/), [Docker installation](https://docs.ntfy.sh/install/#docker), [publishing](https://docs.ntfy.sh/publish/), [subscription clients](https://docs.ntfy.sh/subscribe/), [v2.34.0](https://github.com/binwiederhier/ntfy/releases/tag/v2.34.0).