Pinbox24 W3 — Analiza migracji bazy danych (artnet → bms rs0)

Data analizy: 2026-06-30
Autor: Claude Code (sesja p24-infra)
Status: P0 — deadline 2026-07-31


1. Kontekst

Pinbox24 W3 (v32-prod + s3-v32-prod na bms-1) trzyma wszystkie dane produkcyjne na serwerach artnet (eat-hn1.artnet.pl:30071). Serwery artnet są przeznaczone do zamknięcia — opłacamy je bez uzasadnienia biznesowego. Niedostępność artnet = całkowity outage Pinbox24 W3.

Celem jest przeniesienie bazy pinbox24-production na bms rs0 (bms-2 + bms-3, MongoDB 6.x) i decommission artnet.


2. Aktualnie aktywne biura (ostatnie 2 lata)

Analiza wykonana 2026-06-30 przez zapytania mongojs na żywej bazie eat-hn1.artnet.pl.

2.1 Aktywność na podstawie regRecords

BiuroObjectIdregRecords (2 lata)Ocena
RESO EUROPA590c6d334704d811efc9fd5a130 887Główny aktywny klient
Gratus5bae738807770e585186308b1 152Aktywny
global office5b839f4e37eee31ed198ac6e27Marginalna aktywność
Microsystem 65b6168e8fffe4c7e0cb5bb953Marginalna aktywność

2.2 Aktywność na podstawie files (uploadowane pliki Excel)

BiuroObjectIdPliki (2 lata)
RESO EUROPA590c6d334704d811efc9fd5a1 652
Gratus5bae738807770e585186308b4
Microsystem 65b6168e8fffe4c7e0cb5bb952
EAT 3.0 office5cb9648308e32961acf1ff1f1

2.3 Wniosek

  • Łącznie biur w bazie: 882
  • Aktywnie rejestrujące dane (2 lata): 4 biura
  • Dominujący klient: RESO EUROPA — 99%+ ruchu rejestracyjnego
  • Łącznie regRecords w całej bazie: ~5,1 mln dokumentów (dane historyczne od 2017+)
  • Pozostałe ~878 biur to historyczne/nieaktywne konta — DB jest wspólna, cała musi być przeniesiona

3. Analiza połączenia backendu z bazą

3.1 v32-prod (backend Node.js, mongojs 3.1.0 / mongodb driver 2.x)

  • Używa env.config.js (node-config) → klucz MONGODB_URL
  • Production URL zawiera wszystkich 3 członków RS artnet: eat-hn1.artnet.pl:30071, eat-hn2.artnet.pl:30071, eat-hn3.artnet.pl:30071
  • Parametry: replicaSet=rs0, ssl=true, sslValidate=false
  • RS artnet ma 3 węzły (eat-hn1 + eat-hn2 + eat-hn3), PRIMARY = eat-hn1
  • Protokół: OP_QUERY (legacy wire protocol, mongodb driver 2.x)

3.2 s3-v32-prod (microservice plików, Mongoose 4.x / mongodb driver 2.x)

  • Używa node-configlocal.js override (mongo.urlDB_URI z env)
  • Po naprawie 2026-06-30: direct connection do eat-hn1:30071 bez RS (unika RS discovery)
  • Baza: pinbox24-production, authSource: admin, ssl=true
  • Protokół: OP_QUERY

3.3 Kluczowy problem: niekompatybilność sterownika

KomponentDriverProtokółMongoDB 4.0 (artnet)MongoDB 6.x (bms-2/3)
v32-prodmongodb 2.2.11OP_QUERY✅ działa❌ “Unsupported OP_QUERY”
s3-v32-prodmongodb 2.x (via Mongoose 4)OP_QUERY✅ działa❌ “Unsupported OP_QUERY”
Nowa wersjamongodb 4.x+OP_MSG✅ wymaga

MongoDB 6.0 usunął wsparcie dla OP_QUERY. Migracja danych bez rebuildu obrazów Docker = brak działającego v32-prod/s3-v32-prod na nowej bazie.


4. Architektura docelowa na bms rs0

4.1 Osobna baza pinbox24-production na bms rs0

bms rs0 (MongoDB 6.x)
├── [existing] inne bazy (monitoring, n8n, etc.)
└── [NEW] pinbox24-production    ← W3 data
    ├── regRecords               ← główna tabela
    ├── files                    ← metadane plików
    ├── businessAddressbook      ← 849MB+ (główna baza kontaktów)
    ├── offices                  ← 882 biur
    └── [60 pozostałych kolekcji]

Analogicznie jak na artnet (artnet rs0 ma pinbox24-production, bms rs0 będzie miał to samo — izolacja przez hostname, nie nazwę bazy).

4.2 Zmiana connection stringa po migracji

Przed (artnet):

mongodb://pinbox_production:PASS@eat-hn1.artnet.pl:30071,eat-hn2:30071,eat-hn3:30071/pinbox24-production?replicaSet=rs0&authSource=admin&ssl=true

Po (bms rs0):

mongodb://pinbox_production:NEW_PASS@bms-2.zintegrowana.online:27017,bms-3.zintegrowana.online:27017/pinbox24-production?replicaSet=rs0&authSource=admin

(ssl=false, bms rs0 ma wewnętrzną sieć, nie wymaga TLS między członkami)


5. Fazy migracji (szczegółowy plan)

Pełny plan: docs/playbooks/pinbox24-w3-artnet-to-bms-migration.mdnie istnieje (planowany, nigdy nie napisany; zob. faza migracji poniżej jako jedyne aktualne źródło)

FazaNazwaOpisStatus
0PrzygotowanieBackup DB, weryfikacja rozmiaru, dostęp GitLab🔄 Backup w toku (7G+, 2026-06-30)
1Migracja danychmongodump → mongorestore na bms-2⏳ Czeka na ukończenie backup
2Rebuild sterownikówRebuild obrazów Docker (mongodb driver 4.x+)⏳ Wymaga dostępu do kodu źródłowego GitLab
3CutoverZmiana connection string, restart kontenerów⏳ Wymaga okna serwisowego
4Decommission artnetWysyłka pisma o rezygnacji, usunięcie danych⏳ Po Fazie 3

6. Backup

  • Lokalizacja backup: /root/backups/w3-pinbox24-full-2026/ (bms-1)
  • Start: 2026-06-30 ~16:25 UTC, PID 4026415
  • Rozmiar w trakcie: 7.1G (kolekcja registries 14.7% z 43,788 docs, process.configs 57%)
  • Log: /root/backups/mongodump-full.log
  • Poprzedni partial backup: /root/backups/w3-pinbox24-20260630-162510/ (3.2G, urwany po 5 min)

Weryfikacja po ukończeniu:

# Na bms-1
tail -5 /root/backups/mongodump-full.log | grep -v pass
du -sh /root/backups/w3-pinbox24-full-2026/
ls /root/backups/w3-pinbox24-full-2026/pinbox24-production/ | wc -l

7. Ocena ryzyka

RyzykoPrawdopodobieństwoWpływMitygacja
Niedostępność artnet przed migracjąWYSOKIE (serwery do zamknięcia)KRYTYCZNY (outage W3)Pilna realizacja Fazy 0–2
Utrata danych podczas mongorestoreNISKIEKRYTYCZNYBackup + weryfikacja checksum
Brak dostępu do kodu GitLab (rebuild)ŚREDNIEWYSOKIZgłoszenie do klienta/arch
Okno serwisowe > 1hNISKIEŚREDNIPrzygotowanie rollback plan
Konto pinbox_production na bms rs0BRAK (do utworzenia)WYSOKIKrok w Fazie 1

8. Zależności i akcje ludzkie

#AkcjaKtoKiedy
1Dostęp do kodu źródłowego GitLab (v32-prod, s3-v32-prod)RadekASAP
2Zatwierdzenie okna serwisowego dla cutoverRadekprzed Fazą 3
3Wysyłka pisma wypowiedzenia artnetRadekpo Fazie 3
4Aktualizacja connection strings w backend-environment.envClaude (p24-infra session)Faza 3

9. Powiązane dokumenty

  • artnet-resignation-letter.md — szablon pisma do artnet
  • docs/playbooks/pinbox24-w3-artnet-to-bms-migration.md — szczegółowy plan 5-fazowy — plik nie istnieje (planowany, nie napisany)
  • docs/playbooks/pinbox24-w3-excel-import-422-incident.md — incydent 2026-06-30 — plik nie istnieje (planowany, nie napisany)
  • pinbox24-s3-wasabi-bms1.md — Wasabi/S3 config
  • mongodb-credential-rotation.md — rotacja credentials

Dokument wygenerowany przez Claude Code (sesja p24-infra) na podstawie live query 2026-06-30.