bf52bc3079
build-and-push / docker (push) Has been cancelled
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>
117 lines
4.3 KiB
Markdown
117 lines
4.3 KiB
Markdown
# 🚀 Развёртывание в Docker через Gitea
|
|
|
|
Проект хранится в Gitea (`http://192.168.1.171:3000`). Ниже — как поднять его в
|
|
Docker на удалённом локальном хосте (в той же сети). Замените `<OWNER>` на имя
|
|
вашего пользователя/организации в Gitea.
|
|
|
|
---
|
|
|
|
## Вариант A. Клонирование + Docker Compose (рекомендуется)
|
|
|
|
Самый простой путь — собрать образ прямо на целевом хосте из исходников.
|
|
|
|
На удалённом хосте (Linux с установленными `git`, `docker`, `docker compose`):
|
|
|
|
```bash
|
|
# 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`
|
|
|
|
### Обновление до новой версии
|
|
|
|
```bash
|
|
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
|
|
1. **Включить Actions**: Settings → Actions, и зарегистрировать раннер
|
|
(`act_runner`).
|
|
2. В репозитории задать переменную **`REGISTRY_HOST`** = `192.168.1.171:3000`
|
|
(Settings → Actions → Variables).
|
|
3. На хосте раннера разрешить незащищённый реестр (HTTP) — в
|
|
`/etc/docker/daemon.json`:
|
|
```json
|
|
{ "insecure-registries": ["192.168.1.171:3000"] }
|
|
```
|
|
затем `systemctl restart docker`.
|
|
|
|
### Запуск из готового образа на целевом хосте
|
|
|
|
Тоже разрешите insecure-registry (см. выше), затем:
|
|
|
|
```bash
|
|
# вход в реестр 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`:
|
|
|
|
```yaml
|
|
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:
|
|
```
|
|
|
|
```bash
|
|
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` и ключ подписи сессий).
|