Compare commits

...

5 Commits

Author SHA1 Message Date
hermes 02e2b87072 fix: Vikunja volumes — локальные папки ./db и ./files в корне сервиса (без named volumes) 2026-09-12 17:59:03 +00:00
hermes 868f85b686 docs: пути Radicale/Vikunja обновлены на /opt/hermes/email-assistant/, отмечены выполненные задачи (R1-R3, V1, O1) 2026-09-12 16:18:45 +00:00
hermes 9603f3b1c5 docs: пути Radicale/Vikunja обновлены на /opt/hermes/email-assistant/ 2026-09-12 16:18:02 +00:00
hermes 89e9e3441d feat: Radicale (CalDAV) и Vikunja (задачи) перенесены в каталог проекта
- radicale/: compose, config, .env (данные в radicale/data/ — gitignored)
- vikunja/: compose (postgres + vikunja :3456), .env (gitignored)
- .gitignore: radicale/data/ (пароли/коллекции не в репо)
- Блокер: docker на bigbox не может создавать контейнеры (systemd1 D-Bus timeout) — нужен внешний рестарт
2026-09-12 16:17:53 +00:00
hermes 4252b596f3 docs: блок «Ресурсы проекта» — расположение и доступ к Caddy/Radicale/Vikunja/WG/SSH 2026-09-12 10:16:29 +00:00
8 changed files with 106 additions and 16 deletions
+4
View File
@@ -19,3 +19,7 @@ Thumbs.db
# Git # Git
*.orig *.orig
# Radicale — данные (коллекции, users с паролями)
radicale/data/
# Vikunja — секреты в .env уже выше; данные в volumes docker (не в каталоге)
+12
View File
@@ -242,6 +242,18 @@ Hermes cron:
- [ ] Настроить push mirror из gitea.nixg.ru в gitverse.ru - [ ] Настроить push mirror из gitea.nixg.ru в gitverse.ru
- Требуется: создать репозиторий на gitverse.ru, получить токен, настроить mirror в настройках gitea (Settings → Git Hooks/Mirrors → Add Push Mirror) - Требуется: создать репозиторий на gitverse.ru, получить токен, настроить mirror в настройках gitea (Settings → Git Hooks/Mirrors → Add Push Mirror)
### Ресурсы проекта (расположение и доступ)
| Ресурс | Где живёт | Доступ |
|--------|-----------|--------|
| **Caddy (reverse proxy)** | vps02 = 87.242.100.206, контейнер `caddy` | SSH: `ssh vps02` (alias в `~/.ssh/config`, User estorozhenko, ключ cloudruVPS). Caddyfile: `/opt/caddy/Caddyfile` (root; правка через `sudo`). Reload: `sudo docker exec caddy caddy reload --config /etc/caddy/Caddyfile` |
| **Radicale (CalDAV)** | bigbox, контейнер `radicale`, порт 5232 | WGET: `http://127.0.0.1:5232` (с bigbox), наружу: `https://cal.nixg.ru`. Конфиг: `/opt/hermes/email-assistant/radicale/` (compose.yml, .env — пароль `RADICALE_PASS`). Коллекции на ФС: `/opt/hermes/email-assistant/radicale/data/collections/collection-root/estorozhenko/{Личный,Рабочий,Задачи}` |
| **Vikunja (трекер задач)** | bigbox, compose в `/opt/hermes/email-assistant/vikunja/` | Порт 3456 (внутр.), наружу: `https://tasks.nixg.ru` (Caddy → 10.8.0.2:3456). Данные: volumes `vikunja-db` (postgres) + `vikunja-files` |
| **WG (сеть хостов)** | 10.8.0.0/24 | bigbox = 10.8.0.2 (цель reverse-proxy с vps02), vps01 = .1, vps03 = .3, vps02 = .4 |
| **SSH-ключи** | `/home/estorozhenko/.ssh/` | vps01_key (vps01), cloudruVPS (vps02), hostkeyVPS (vps03/root) |
**Домены (публичный DNS):** cal.nixg.ru → 87.242.100.206 (vps02/Caddy → bigbox Radicale 5232), tasks.nixg.ru → 87.242.100.206 (Caddy → bigbox Vikunja 3456).
- **Himalaya:** `~/.config/himalaya/config.toml` - **Himalaya:** `~/.config/himalaya/config.toml`
- **Аккаунт:** `vinogorod`, IMAP `mail.corpoffice.tech:143` (STARTTLS) - **Аккаунт:** `vinogorod`, IMAP `mail.corpoffice.tech:143` (STARTTLS)
- **Почта:** `e.storozhenko@vinogorod.ru` - **Почта:** `e.storozhenko@vinogorod.ru`
+3 -3
View File
@@ -67,10 +67,10 @@ LLM-скриптов (`cat email.md | ollama run qwen3:8b`), человекоч
### Задача 2: Radicale (docker) — развёрнут частично ### Задача 2: Radicale (docker) — развёрнут частично
**Сделано:** **Сделано:**
1. `/opt/hermes/radicale/docker-compose.yml` (образ `kozea/radicale`, порт 5232). 1. `/opt/hermes/email-assistant/radicale/docker-compose.yml` (образ `kozea/radicale`, порт 5232).
2. Конфиг `/opt/hermes/radicale/config/config` (htpasswd, owner_only, /data/collections). 2. Конфиг `/opt/hermes/email-assistant/radicale/config/config` (htpasswd, owner_only, /data/collections).
3. Пользователь `estorozhenko` — `htpasswd -c -b -m data/users estorozhenko <pass>` 3. Пользователь `estorozhenko` — `htpasswd -c -b -m data/users estorozhenko <pass>`
(пароль в `/opt/hermes/radicale/.env`, `RADICALE_PASS`). (пароль в `/opt/hermes/email-assistant/radicale/.env`, `RADICALE_PASS`).
4. `docker compose up -d` → контейнер `radicale` работает. 4. `docker compose up -d` → контейнер `radicale` работает.
**Проверено:** `curl -X PROPFIND http://127.0.0.1:5232/ -u estorozhenko:PASS` → **207**; **Проверено:** `curl -X PROPFIND http://127.0.0.1:5232/ -u estorozhenko:PASS` → **207**;
@@ -14,11 +14,11 @@
## What Changes ## What Changes
Два новых сервиса в `/opt/hermes/`: Два новых сервиса в `/opt/hermes/email-assistant/`:
### 1. Radicale (CalDAV) — календарь + задачи VTODO ### 1. Radicale (CalDAV) — календарь + задачи VTODO
- **Порт:** 5232 (свободен) - **Порт:** 5232 (свободен)
- **Путь:** `/opt/hermes/radicale/` - **Путь:** `/opt/hermes/email-assistant/radicale/`
- **Способ:** Python pip (лёгкий, systemd) ИЛИ docker - **Способ:** Python pip (лёгкий, systemd) ИЛИ docker
- **Назначение:** CalDAV-сервер для: - **Назначение:** CalDAV-сервер для:
- Календаря «Личный» + «Рабочий» (синхронизация с Android через DAVx5) - Календаря «Личный» + «Рабочий» (синхронизация с Android через DAVx5)
@@ -27,7 +27,7 @@
### 2. Vikunja (трекер задач) — веб-UI + REST API + Android app ### 2. Vikunja (трекер задач) — веб-UI + REST API + Android app
- **Порт:** 3456 (дефолт Vikunja, свободен) - **Порт:** 3456 (дефолт Vikunja, свободен)
- **Путь:** `/opt/hermes/vikunja/` - **Путь:** `/opt/hermes/email-assistant/vikunja/`
- **Способ:** docker compose (postgres + vikunja) - **Способ:** docker compose (postgres + vikunja)
- **Назначение:** - **Назначение:**
- Трекер задач с веб-интерфейсом (kanban/список) - Трекер задач с веб-интерфейсом (kanban/список)
@@ -37,7 +37,7 @@
### Общие решения ### Общие решения
- **Доступ:** 127.0.0.1 (локально) + опционально через Caddy reverse proxy - **Доступ:** 127.0.0.1 (локально) + опционально через Caddy reverse proxy
на поддомене (caddy есть в /opt/gitea.nixg.ru) на поддомене (Caddy — контейнер на vps02, см. STATUS.md «Ресурсы проекта»)
- **Порты:** 5232 (radicale), 3456 (vikunja) — не конфликтуют с 8080 (NetBox) - **Порты:** 5232 (radicale), 3456 (vikunja) — не конфликтуют с 8080 (NetBox)
- **Авторизация:** Radicale — HTTP Basic (логин/пароль в конфиге); - **Авторизация:** Radicale — HTTP Basic (логин/пароль в конфиге);
Vikunja — своя (регистрация/логин, API-токены) Vikunja — своя (регистрация/логин, API-токены)
@@ -55,7 +55,7 @@
## Impact ## Impact
- **Новые сервисы:** `/opt/hermes/radicale/`, `/opt/hermes/vikunja/` - **Новые сервисы:** `/opt/hermes/email-assistant/radicale/`, `/opt/hermes/email-assistant/vikunja/`
- **Порты:** 5232 (radicale), 3456 (vikunja) — новые - **Порты:** 5232 (radicale), 3456 (vikunja) — новые
- **Данные:** календари/задачи будут храниться локально - **Данные:** календари/задачи будут храниться локально
- **Документация:** обновить README/STATUS (порты, логины, как синхронизировать) - **Документация:** обновить README/STATUS (порты, логины, как синхронизировать)
@@ -63,8 +63,8 @@
## Rollback ## Rollback
1. **Radicale:** `systemctl stop radicale` + удалить `/opt/hermes/radicale/` 1. **Radicale:** `systemctl stop radicale` + удалить `/opt/hermes/email-assistant/radicale/`
2. **Vikunja:** `docker compose -f /opt/hermes/vikunja/docker-compose.yml down -v` 2. **Vikunja:** `docker compose -f /opt/hermes/email-assistant/vikunja/docker-compose.yml down -v`
(удалить контейнеры и volume с данными) + убрать `/opt/hermes/vikunja/` (удалить контейнеры и volume с данными) + убрать `/opt/hermes/email-assistant/vikunja/`
3. Убрать упоминания из README/STATUS 3. Убрать упоминания из README/STATUS
4. Вернуть порты в исходное состояние (оба сейчас свободны, конфликтов нет) 4. Вернуть порты в исходное состояние (оба сейчас свободны, конфликтов нет)
@@ -3,18 +3,18 @@
## Implementation Tasks ## Implementation Tasks
### Radicale (CalDAV, docker :5232) ### Radicale (CalDAV, docker :5232)
- [ ] R1: Создать `/opt/hermes/radicale/docker-compose.yml` (образ radicale, порт 5232, volumes, auth) - [x] R1: Создать `/opt/hermes/email-assistant/radicale/docker-compose.yml` (образ radicale, порт 5232, volumes, auth)
- [ ] R2: Создать коллекции: «Личный», «Рабочий», «Задачи» (VTODO) — через скрипт или DAVx5 - [x] R2: Создать коллекции: «Личный», «Рабочий», «Задачи» (VTODO) — напрямую на ФС (MKCOL 403 при owner_only; .Radicale.props + data/collections/collection-root/estorozhenko/)
- [ ] R3: Проверить `curl -X PROPFIND http://127.0.0.1:5232/` → 207 - [x] R3: Проверить `curl -X PROPFIND http://127.0.0.1:5232/` → 207
### Vikunja (трекер, docker :3456) ### Vikunja (трекер, docker :3456)
- [ ] V1: Создать `/opt/hermes/vikunja/docker-compose.yml` (postgres + vikunja, env, volumes) - [x] V1: Создать `/opt/hermes/email-assistant/vikunja/docker-compose.yml` (postgres + vikunja, env, volumes)
- [ ] V2: `docker compose up -d` → Vikunja отвечает на `http://127.0.0.1:3456/api/v1/info` - [ ] V2: `docker compose up -d` → Vikunja отвечает на `http://127.0.0.1:3456/api/v1/info`
- [ ] V3: Создать админ-пользователя, получить API-токен - [ ] V3: Создать админ-пользователя, получить API-токен
- [ ] V4: Тест: `POST /api/v1/projects/<id>/tasks` с токеном → 201 - [ ] V4: Тест: `POST /api/v1/projects/<id>/tasks` с токеном → 201
### Общее ### Общее
- [ ] O1: Caddy reverse proxy (cal.nixg.ru → 5232, tasks.nixg.ru → 3456) + TLS - [x] O1: Caddy reverse proxy (cal.nixg.ru → 5232, tasks.nixg.ru → 3456) + TLS (на vps02, Caddyfile обновлён, cal.nixg.ru уже работает)
- [ ] O2: Проверить доступ с Android (DAVx5 для Radicale, Vikunja app/token для задач) - [ ] O2: Проверить доступ с Android (DAVx5 для Radicale, Vikunja app/token для задач)
- [ ] O3: Обновить README/STATUS (порты, логины, как синхронизировать) - [ ] O3: Обновить README/STATUS (порты, логины, как синхронизировать)
+16
View File
@@ -0,0 +1,16 @@
[server]
hosts = 0.0.0.0:5232
[auth]
type = htpasswd
htpasswd_filename = /data/users
htpasswd_encryption = md5
[rights]
type = owner_only
[storage]
filesystem_folder = /data/collections
[logging]
level = info
+13
View File
@@ -0,0 +1,13 @@
# Radicale — CalDAV/CardDAV-сервер (календарь + задачи VTODO)
# Порт: 5232 (127.0.0.1), TLS — через Caddy (cal.nixg.ru)
services:
radicale:
image: kozea/radicale:latest
container_name: radicale
command: ["-C", "/config/config"]
ports:
- "5232:5232"
volumes:
- ./data:/data
- ./config:/config:ro
restart: unless-stopped
+45
View File
@@ -0,0 +1,45 @@
# Vikunja — трекер задач (WebUI + REST API)
# Порт: 3456 (локально), наружу — Caddy: tasks.nixg.ru → 10.8.0.2:3456
# Все данные — в локальных папках рядом с compose (НЕ named volumes):
# ./db — PostgreSQL (pgdata)
# ./files — загрузки Vikunja (аватары, вложения)
# Секреты: .env (VIKUNJA_DATABASE_PASSWORD, VIKUNJA_SERVICE_JWTSECRET)
services:
db:
image: postgres:16-alpine
container_name: vikunja-db
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${VIKUNJA_DATABASE_PASSWORD}
POSTGRES_DB: vikunja
POSTGRES_USER: vikunja
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U vikunja -d vikunja"]
interval: 10s
timeout: 5s
retries: 5
vikunja:
image: vikunja/vikunja:latest
container_name: vikunja
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PORT: 5432
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_DATABASE_USERNAME: vikunja
VIKUNJA_DATABASE_PASSWORD: ${VIKUNJA_DATABASE_PASSWORD}
VIKUNJA_SERVICE_JWTSECRET: ${VIKUNJA_SERVICE_JWTSECRET}
VIKUNJA_SERVICE_FRONTENDURL: https://tasks.nixg.ru
VIKUNJA_SERVICE_PUBLICURL: https://tasks.nixg.ru
ports:
- "3456:80"
volumes:
- ./files:/app/files