Features: feed CRUD, per-feed ntfy target (incl. private servers), Telegram/webhook channels, keyword filters, image attachments, per-feed intervals, OPML import/export, notification history & stats, users with roles, admin alerts, RU/EN i18n, light/dark theme, notification preview, history search, activity chart. Dockerized. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.3 KiB
🚀 Развёртывание в Docker через Gitea
Проект хранится в Gitea (http://192.168.1.171:3000). Ниже — как поднять его в
Docker на удалённом локальном хосте (в той же сети). Замените <OWNER> на имя
вашего пользователя/организации в Gitea.
Вариант A. Клонирование + Docker Compose (рекомендуется)
Самый простой путь — собрать образ прямо на целевом хосте из исходников.
На удалённом хосте (Linux с установленными git, docker, docker compose):
# 1. Склонировать репозиторий из Gitea
git clone http://192.168.1.171:3000/<OWNER>/rss-ntfy.git
cd rss-ntfy
# 2. (опционально) задать свои параметры
cp .env.example .env
nano .env # смените ADMIN_PASSWORD и т.д.
# 3. Собрать и запустить
docker compose up -d --build
# 4. Проверить
docker compose logs -f
Панель откроется на http://<IP_хоста>:8000.
Приватный репозиторий? Используйте токен в URL:
git clone http://<OWNER>:<TOKEN>@192.168.1.171:3000/<OWNER>/rss-ntfy.git
Обновление до новой версии
cd rss-ntfy
git pull
docker compose up -d --build
База данных лежит в Docker-томе rss_ntfy_data и переживает пересборку.
Вариант B. Готовый образ из Gitea Container Registry
Если настроен Gitea Actions-раннер, пайплайн .gitea/workflows/docker.yml
сам собирает образ и публикует его в реестр Gitea при каждом пуше в main.
Однократная настройка на стороне Gitea
- Включить Actions: Settings → Actions, и зарегистрировать раннер
(
act_runner). - В репозитории задать переменную
REGISTRY_HOST=192.168.1.171:3000(Settings → Actions → Variables). - На хосте раннера разрешить незащищённый реестр (HTTP) — в
/etc/docker/daemon.json:затем{ "insecure-registries": ["192.168.1.171:3000"] }systemctl restart docker.
Запуск из готового образа на целевом хосте
Тоже разрешите insecure-registry (см. выше), затем:
# вход в реестр Gitea (логин Gitea + токен как пароль)
docker login 192.168.1.171:3000
# тянем и запускаем образ
docker pull 192.168.1.171:3000/<OWNER>/rss-ntfy:latest
docker run -d --name rss-ntfy --restart unless-stopped \
-p 8000:8000 \
-v rss_ntfy_data:/data \
-e ADMIN_PASSWORD=измените_меня \
192.168.1.171:3000/<OWNER>/rss-ntfy:latest
Или через Compose — создайте docker-compose.prod.yml:
services:
rss-ntfy:
image: 192.168.1.171:3000/<OWNER>/rss-ntfy:latest
container_name: rss-ntfy
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- rss_ntfy_data:/data
environment:
ADMIN_PASSWORD: "измените_меня"
volumes:
rss_ntfy_data:
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d
Частые вопросы
docker loginругается на HTTPS — вы не добавили хост вinsecure-registries(реестр работает по HTTP на нестандартном порту).- Порт 8000 занят — поменяйте левую часть проброса, напр.
-p 9000:8000. - Сбросить пароль администратора —
ADMIN_*действуют только при первом старте; позже меняйте пароль во вкладке «Пользователи» или удалите томrss_ntfy_dataдля полного сброса. - Бэкап — достаточно сохранить том
rss_ntfy_data(там SQLite-базаapp.dbи ключ подписи сессий).