notebook
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
---
|
||||
name: project-mailstore
|
||||
description: "MailStore Server na 192.168.1.53 — archiv emailů, Management API, IMAP přístup, Claws Mail klient"
|
||||
metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: 49cbd8a2-c71e-49be-8c52-59dfa5ac7680
|
||||
---
|
||||
|
||||
MailStore Server v26.2.1.24065 na `192.168.1.53` (hostname MAILSTORE, Win). Archiv ~2,3 mil emailů, data na `Z:\MailArchive`. Největší schránka vladimir.buzalka@buzalka.cz: 1 077 799 zpráv / 273 GB.
|
||||
|
||||
**Přístupy:**
|
||||
- Windows admin (WinRM): `administrator` / `Vlado7309208104++`. WinRM remoting funguje z U:/janssen PC (TrustedHosts nastaveno).
|
||||
- MailStore admin: `admin` / `*$N(B)vMUym!%`
|
||||
|
||||
**Management API (HTTPS, port 8463):** zapnuté v configu `MailStoreServer.json` (`API via HTTPS Configuration.Enabled=true`). Volá se `POST https://192.168.1.53:8463/api/invoke/<Funkce>`, Basic Auth, parametry jako **form body** (`application/x-www-form-urlencoded`), ne JSON. Self-signed cert → `-SkipCertificateCheck`. Async operace vrátí `token`+`statusCode=running`, výsledek se poluje přes `POST /api/get-status` (params `token`, `lastKnownStatusVersion`, `millisecondsTimeout`); `result` je v poslední odpovědi po `succeeded`. ~90 funkcí (GetUsers, GetStores, GetMessages, GetChildFolders, GetFolderStatistics, RunProfile, CreateBackup…). Dokumentace: help.mailstore.com/en/server/Administration_API_-_Function_Reference. GetMessages chce přesnou cestu složky (např. `vladimir.buzalka@buzalka.cz/Exchange vladimir.buzalka/Sent Items`).
|
||||
|
||||
**IMAP (port 143, STARTTLS):** zapnuté v configu (`IMAP Server Configuration.Enabled=true`). Po STARTTLS server nabízí jen `AUTH=PLAIN`, ale prostý IMAP `LOGIN` command funguje (Python imaplib.login OK, curl `--ssl-reqd` OK). Jako admin vidět všechny archivy. Lze stáhnout raw EML konkrétní zprávy.
|
||||
|
||||
**Claves Mail (Windows) klient:** Metoda autentizace MUSÍ být **"Prostý text"** (= prostý LOGIN command). "PLAIN"/"LOGIN"/"Automaticky" selhávají — Claws/libetpan na Windows je **bez SASL pluginů** ("PLAIN" → "Bad arguments", "LOGIN" → chybějící SASL plugin). Nastavení: server 192.168.1.53:143, STARTTLS, auth "Prostý text", admin / heslo. Na první zobrazení složek nutno "Obnovit strom složek" → Ano.
|
||||
|
||||
**Bezpečnost:** port 8463 ani 143 NEjsou forwardované na MikroTiku (192.168.1.2), přístup jen z LAN. MikroTik API na 8728 (admin/Vlado9674+).
|
||||
|
||||
**Nástroje v `U:/janssen/mailstore/`** (ruční prohlížeč archivu, schránka→složka→zpráva, spouštět `.venv\Scripts\python.exe`):
|
||||
- `mailstore_map_v1.0.py <schránka>` — strom složek z API GetChildFolders (+`--no-stats`, `--list`). Arg = top-level složka (např. `vladimir.buzalka@buzalka.cz`).
|
||||
- `mailstore_folder_v1.0.py "<plná cesta složky>"` — seznam zpráv (datum|od|předmět) přes dávkový IMAP FETCH hlaviček (+`--limit N`, `--all`, `--oldest`).
|
||||
- `mailstore_read_v1.0.py "<složka>" <číslo>` — plný obsah jedné zprávy (hlavičky, tělo, přílohy) přes IMAP FETCH RFC822 (+`--uid`, `--save DIR`, `--raw`).
|
||||
|
||||
**Ingest do Mongo — `mailstore_ingest_v1.0.py <schránka> --since ROK [--dry-run] [--folder X] [--limit N]`**: backfill staré historie z MailStore do Mongo kolekce `emaily`. Dedup podle internet Message-ID (= `_id` v Mongu, shoduje se 1:1 s IMAP hlavičkou). Filtr data client-side z DATE headeru (NE IMAP SEARCH). Schéma dokumentu = jako Graph import. `--dry-run` spočítá kolik chybí bez zápisu. PILOT OVĚŘEN end-to-end 2026-06-11: MailStore IMAP → ingest → Mongo → enrich_fulltext → PG → MCP emaily search našel zprávu z 2020. Header scan ~490 zpráv/s (1M ≈ 30 min). vladimir.buzalka@buzalka.cz: Sent Items má 20k zpráv 2020+ k dobrání (i odeslané chybí z Graphu!). Plán: roztáhnout celou schránku, pak `--since` hlouběji do minulosti.
|
||||
|
||||
**Dva gotchas (vyřešené):**
|
||||
1. Kolekce `emaily` má unique+sparse index na `graph_id`. MailStore dokument musí pole `graph_id` ÚPLNĚ VYNECHAT (ne `None`) — explicitní null koliduje (sparse ignoruje jen chybějící pole). Jinak E11000 duplicate key.
|
||||
2. Mongo `{'graph_id': None}` matchuje i dokumenty BEZ pole — `delete_many` tím smete i validní dokumenty. Pozor při úklidu.
|
||||
3. enrich_fulltext spouštět přes `U:/janssen/.venv/Scripts/python.exe` (system Python C:\Python312 nemá psycopg).
|
||||
|
||||
IMAP SEARCH je slepá ulička (78s, vrací jen ~10 výsledků). API GetMessages dává jen metadata (id, date, uid1=Message-ID, outgoing), ne obsah — obsah jen přes IMAP. API `id` (1:947923) ≠ IMAP UID, most je Message-ID (=uid1).
|
||||
|
||||
Pracovní adresář: `U:/janssen/mailstore/`. Pozn.: [[feedback-admin-powershell]] — admin příkazy (winget) rovnou psát uživateli.
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
name: project-tower-backups
|
||||
description: "Unraid user scripts na Toweru (192.168.1.76) — zálohy MongoDB/PostgreSQL/MySQL, MongoDBBackupWithGzip zálohuje dynamicky všechny DB"
|
||||
metadata:
|
||||
node_type: memory
|
||||
type: project
|
||||
originSessionId: 5338a9b3-9290-4241-8c98-42b86d832dfc
|
||||
---
|
||||
|
||||
Unraid user scripts jsou na Toweru (192.168.1.76, ssh root) v
|
||||
`/boot/config/plugins/user.scripts/scripts/<název>/script`.
|
||||
|
||||
`MongoDBBackupWithGzip` (denně 4:40) od 2026-06-11 zjišťuje seznam databází
|
||||
dynamicky přes `mongosh listDatabases` (vynechává `local` a `config`) —
|
||||
nové DB se zálohují automaticky. Dump přes `docker exec MongoDB mongodump
|
||||
--archive --gzip` do `/mnt/user/Backup/Critical/MongoDBBackup/tower/<db>/<timestamp>/`.
|
||||
Rotace GFS bez kopírování (selektivní prune dle data v názvu adresáře):
|
||||
7 denních / 4 týdenní / 4 měsíční, maže se jen po úspěšném dumpu.
|
||||
Restore ověřen testem 2026-06-11 (covance → temp DB, 100% shoda docs+indexů).
|
||||
Sesterské skripty: `MongoDBRestoreFromBackup` (sám projde všechny DB složky),
|
||||
`MongoDBVerifyIntegrity` (ROZBITÝ — natvrdo seznam DB z jiného serveru);
|
||||
obdobné trio existuje pro PostgreSQL.
|
||||
|
||||
Zbývající díry v disaster recovery (k 2026-06-11): zálohy neopouštějí Tower
|
||||
(žádný rsync na Synology/cloud) a při selhání zálohy nechodí notifikace.
|
||||
|
||||
Pozor na Toweru: `du -h` na FUSE `/mnt/user` hlásí čerstvě zapsaným souborům
|
||||
falešnou velikost (1.0K) — skutečnou délku dá `ls -l`. mongodump píše průběžné
|
||||
logy na stderr, takže neprázdný stderr ≠ chyba (rozhoduje exit code).
|
||||
Reference in New Issue
Block a user