Compare commits
5 Commits
f44bc27ce1
...
02e2b87072
| Author | SHA1 | Date | |
|---|---|---|---|
| 02e2b87072 | |||
| 868f85b686 | |||
| 9603f3b1c5 | |||
| 89e9e3441d | |||
| 4252b596f3 |
@@ -19,3 +19,7 @@ Thumbs.db
|
|||||||
|
|
||||||
# Git
|
# Git
|
||||||
*.orig
|
*.orig
|
||||||
|
|
||||||
|
# Radicale — данные (коллекции, users с паролями)
|
||||||
|
radicale/data/
|
||||||
|
# Vikunja — секреты в .env уже выше; данные в volumes docker (не в каталоге)
|
||||||
|
|||||||
@@ -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
@@ -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 (порты, логины, как синхронизировать)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user