411 lines
36 KiB
Plaintext
411 lines
36 KiB
Plaintext
<mxfile host="draw.io" modified="2026-02-12" agent="Claude Code" type="device">
|
|
<diagram id="nordabiz-system-arch" name="Architektura Systemu">
|
|
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2200" pageHeight="1500" math="0" shadow="0">
|
|
<root>
|
|
<mxCell id="0"/>
|
|
<mxCell id="1" parent="0"/>
|
|
|
|
<!-- ==================== TYTUŁ ==================== -->
|
|
<mxCell id="title" value="NordaBiz — Architektura Systemu" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=22;fontStyle=1;fontColor=#1a1a2e;" vertex="1" parent="1">
|
|
<mxGeometry x="700" y="10" width="420" height="40" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="subtitle" value="nordabiznes.pl &nbsp;|&nbsp; Platforma katalogowa Norda Biznes &nbsp;|&nbsp; luty 2026" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#666666;" vertex="1" parent="1">
|
|
<mxGeometry x="680" y="46" width="460" height="24" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== INTERNET ==================== -->
|
|
<mxCell id="zone_internet_label" value="INTERNET" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#999999;" vertex="1" parent="1">
|
|
<mxGeometry x="40" y="78" width="70" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="users" value="<b>Użytkownicy</b><br>(przeglądarki)" style="shape=mxgraph.cisco.people.standing_man;sketch=0;html=1;fillColor=#e6d0de;strokeColor=#AE4132;fontColor=#333333;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="400" y="80" width="50" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="admin" value="<b>Administrator</b><br>(SSH / HTTPS)" style="shape=mxgraph.cisco.people.standing_man;sketch=0;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="580" y="80" width="50" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="dns" value="<b>DNS</b><br>OVH.com" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="210" y="82" width="110" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== STREFA DMZ ==================== -->
|
|
<mxCell id="zone_dmz" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;dashed=1;strokeWidth=2;opacity=30;" vertex="1" parent="1">
|
|
<mxGeometry x="150" y="170" width="780" height="120" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="zone_dmz_label" value="STREFA DMZ (sieć obwodowa)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#b8860b;" vertex="1" parent="1">
|
|
<mxGeometry x="160" y="173" width="200" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="fortigate" value="<b>FortiGate-500D</b><br>Zapora sieciowa / NAT<br><font style="font-size:9px;color:#888">85.237.177.83</font>" style="shape=mxgraph.cisco.firewalls.firewall;sketch=0;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;" vertex="1" parent="1">
|
|
<mxGeometry x="220" y="190" width="50" height="50" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="npm" value="<b>Serwer Proxy (NPM)</b><br>R11-REVPROXY-01 (VM 119)<br><font style="font-size:9px;color:#888">10.22.68.250 | SSL Let's Encrypt<br>Proxy Host #27 (prod) | #44 (staging)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;fontSize=11;verticalAlign=middle;" vertex="1" parent="1">
|
|
<mxGeometry x="600" y="190" width="260" height="80" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== PRODUKCJA ==================== -->
|
|
<mxCell id="zone_prod" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;dashed=1;strokeWidth=2;opacity=30;" vertex="1" parent="1">
|
|
<mxGeometry x="40" y="320" width="1270" height="560" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="zone_prod_label" value="PRODUKCJA &nbsp;|&nbsp; NORDABIZ-01 (VM 249) &nbsp;|&nbsp; 10.22.68.249 &nbsp;|&nbsp; nordabiznes.pl" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontStyle=1;fontColor=#4472c4;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="323" width="500" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Flask Container -->
|
|
<mxCell id="flask" value="<b style="font-size:14px">Flask 3.0 + Gunicorn</b><br><font style="font-size:9px;color:#555">Port 5000 | 4 workery | www-data | Python 3.9+</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333;fontSize=11;verticalAlign=top;spacingTop=8;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="355" width="710" height="505" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- === MODUŁY APLIKACJI (Blueprinty) === -->
|
|
<mxCell id="bp_header" value="<b>Moduły aplikacji</b> (17 blueprintów, 375+ tras)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=0;fontColor=#4472c4;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="395" width="300" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="bp_katalog" value="<b>Katalog firm</b><br><font style="font-size:8px">Lista, profile, wyszukiwanie<br>~20 tras</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="420" width="155" height="50" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="bp_admin" value="<b>Panel administracyjny</b><br><font style="font-size:8px">~100 tras, 16 plików<br>Firmy, użytkownicy, dane</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="245" y="420" width="155" height="50" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="bp_forum" value="<b>Forum i społeczność</b><br><font style="font-size:8px">Dyskusje, wiadomości<br>~68 tras</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="410" y="420" width="155" height="50" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="bp_zopk" value="<b>ZOPK</b><br><font style="font-size:8px">Baza wiedzy, timeline<br>~55 tras</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="575" y="420" width="155" height="50" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="bp_chat" value="<b>Czat AI (NordaGPT)</b><br><font style="font-size:8px">Asystent AI, 9 tras</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="480" width="155" height="45" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="bp_audit" value="<b>Audyt cyfrowy</b><br><font style="font-size:8px">SEO, IT, raporty</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="245" y="480" width="155" height="45" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="bp_membership" value="<b>Członkostwo</b><br><font style="font-size:8px">Składki, korzyści, edukacja</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="410" y="480" width="155" height="45" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="bp_api" value="<b>API i autoryzacja</b><br><font style="font-size:8px">~73 tras, OAuth</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="575" y="480" width="155" height="45" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- === USŁUGI WEWNĘTRZNE === -->
|
|
<mxCell id="svc_header" value="<b>Usługi wewnętrzne</b> (27 serwisów)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=0;fontColor=#9673a6;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="540" width="210" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_search" value="<b>Wyszukiwarka</b><br><font style="font-size:8px">FTS + fuzzy + synonimy</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="565" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_gemini" value="<b>GeminiService</b><br><font style="font-size:8px">Sztuczna inteligencja</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="235" y="565" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_chat" value="<b>NordaGPT</b><br><font style="font-size:8px">Czat AI + kontekst firm</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="390" y="565" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_knowledge" value="<b>Bazy wiedzy</b><br><font style="font-size:8px">Norda + ZOPK Knowledge</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="545" y="565" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_seo" value="<b>Audyt SEO</b><br><font style="font-size:8px">PageSpeed + CrUX + INP</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="617" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_gbp" value="<b>Google Moja Firma</b><br><font style="font-size:8px">Places API, opinie</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="235" y="617" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_social" value="<b>Media społecznościowe</b><br><font style="font-size:8px">FB, IG, LI, YT, TikTok</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="390" y="617" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_benchmark" value="<b>Benchmarki</b><br><font style="font-size:8px">Średnie per kategoria</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="545" y="617" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_email" value="<b>Poczta e-mail</b><br><font style="font-size:8px">MS Graph OAuth</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="669" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_krs" value="<b>KRS / CEIDG</b><br><font style="font-size:8px">Rejestry firm</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="235" y="669" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_oauth" value="<b>OAuth 2.0</b><br><font style="font-size:8px">Google + Meta</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="390" y="669" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_other" value="<b>Inne usługi</b><br><font style="font-size:8px">Pliki, YouTube, monitoring</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="545" y="669" width="145" height="42" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Auth/Security -->
|
|
<mxCell id="auth" value="<b>Bezpieczeństwo</b><br><font style="font-size:8px">Flask-Login | CSRF | Rate Limiter (200/dzień, 50/godz.)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="725" width="310" height="40" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="templates" value="<b>Szablony Jinja2</b><br><font style="font-size:8px">HTML5 + CSS3 + Vanilla JS</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="400" y="725" width="155" height="40" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="sqlalchemy" value="<b>SQLAlchemy 2.0</b><br><font style="font-size:8px">ORM + modele danych</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4E1F5;strokeColor=#6c8ebf;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="565" y="725" width="155" height="40" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- PostgreSQL PRODUKCJA -->
|
|
<mxCell id="postgres" value="<b style="font-size:13px">PostgreSQL 14</b><br><font style="font-size:9px;color:#555">localhost:5432<br>Baza: nordabiz<br>40 tabel | 11 domen<br>pg_trgm + uuid-ossp</font>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=12;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="800" y="370" width="180" height="120" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- DB Domains -->
|
|
<mxCell id="db_domains_label" value="<b>Domeny danych:</b>" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=9;fontColor=#555;" vertex="1" parent="1">
|
|
<mxGeometry x="800" y="500" width="100" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="db_core" value="<font style="font-size:8px">Firmy (9 tabel)<br>Treści (10 tabel)<br>Forum (7 tabel)<br>Czat AI (4 tabele)<br>Audyt (3 tabele)<br>Członkostwo (2)<br>Ogłoszenia (3)<br>Kalendarz (2)<br>+ 3 inne domeny</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333;fontSize=9;align=left;spacingLeft=8;" vertex="1" parent="1">
|
|
<mxGeometry x="800" y="520" width="180" height="130" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Zadania automatyczne (Cron) -->
|
|
<mxCell id="cron_label" value="<b>Zadania automatyczne</b>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=0;fontColor=#7f6000;" vertex="1" parent="1">
|
|
<mxGeometry x="800" y="665" width="160" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="cron_box" value="<font style="font-size:8px">⏰ Co godzinę: backup bazy<br>⏰ Co godzinę: ZOPK ekstrakcja<br>📅 Codziennie: pełny backup<br>📅 Codziennie: sync PBS<br>📆 Miesięcznie: aktualizacja stron</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#333333;fontSize=9;align=left;spacingLeft=8;" vertex="1" parent="1">
|
|
<mxGeometry x="800" y="688" width="200" height="80" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== ZEWNĘTRZNE API ==================== -->
|
|
<mxCell id="zone_api" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;dashed=1;strokeWidth=1;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="1050" y="320" width="250" height="440" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="zone_api_label" value="ZEWNĘTRZNE API" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#999999;" vertex="1" parent="1">
|
|
<mxGeometry x="1060" y="323" width="120" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="api_gemini" value="<b>Google Gemini AI</b><br><font style="font-size:8px">gemini-3-flash (sztuczna inteligencja)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#4285F4;fontColor=#333333;fontSize=10;strokeWidth=2;" vertex="1" parent="1">
|
|
<mxGeometry x="1070" y="350" width="210" height="38" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="api_pagespeed" value="<b>Google PageSpeed</b><br><font style="font-size:8px">Core Web Vitals + CrUX</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#4285F4;fontColor=#333333;fontSize=10;strokeWidth=2;" vertex="1" parent="1">
|
|
<mxGeometry x="1070" y="398" width="210" height="38" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="api_places" value="<b>Google Places API</b><br><font style="font-size:8px">Google Moja Firma, opinie</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#4285F4;fontColor=#333333;fontSize=10;strokeWidth=2;" vertex="1" parent="1">
|
|
<mxGeometry x="1070" y="446" width="210" height="38" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="api_oauth" value="<b>Google OAuth 2.0</b><br><font style="font-size:8px">GBP + Search Console</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#34A853;fontColor=#333333;fontSize=10;strokeWidth=2;" vertex="1" parent="1">
|
|
<mxGeometry x="1070" y="494" width="210" height="38" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="api_brave" value="<b>Brave Search API</b><br><font style="font-size:8px">Wiadomości + social media</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#FB542B;fontColor=#333333;fontSize=10;strokeWidth=2;" vertex="1" parent="1">
|
|
<mxGeometry x="1070" y="542" width="210" height="38" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="api_krs" value="<b>KRS / CEIDG API</b><br><font style="font-size:8px">Publiczne rejestry firm</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#333333;fontColor=#333333;fontSize=10;strokeWidth=2;" vertex="1" parent="1">
|
|
<mxGeometry x="1070" y="590" width="210" height="38" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="api_msgraph" value="<b>Microsoft Graph</b><br><font style="font-size:8px">Poczta e-mail (OAuth 2.0)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#00A4EF;fontColor=#333333;fontSize=10;strokeWidth=2;" vertex="1" parent="1">
|
|
<mxGeometry x="1070" y="638" width="210" height="38" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="api_youtube" value="<b>YouTube Data API v3</b><br><font style="font-size:8px">Statystyki kanałów</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#FF0000;fontColor=#333333;fontSize=10;strokeWidth=2;" vertex="1" parent="1">
|
|
<mxGeometry x="1070" y="686" width="210" height="38" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== STAGING ==================== -->
|
|
<mxCell id="zone_staging" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF8E1;strokeColor=#FF8F00;dashed=1;strokeWidth=2;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="40" y="910" width="540" height="150" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="zone_staging_label" value="ŚRODOWISKO TESTOWE (STAGING) &nbsp;|&nbsp; VM 248 &nbsp;|&nbsp; 10.22.68.248 &nbsp;|&nbsp; staging.nordabiznes.pl" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#FF8F00;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="913" width="520" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="staging_flask" value="<b>Flask + Gunicorn</b><br><font style="font-size:8px;color:#555">Kopia produkcji<br>Port 5000</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF8E1;strokeColor=#FF8F00;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="940" width="200" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="staging_pg" value="<b>PostgreSQL</b><br><font style="font-size:8px;color:#555">nordabiz_staging<br>localhost:5432</font>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8;fillColor=#FFF8E1;strokeColor=#FF8F00;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="290" y="938" width="130" height="60" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="staging_note" value="<font style="font-size:8px;color:#888">Obowiązkowy test przed<br>wdrożeniem na produkcję!</font>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
|
|
<mxGeometry x="440" y="950" width="130" height="40" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Staging connection -->
|
|
<mxCell id="conn_staging_internal" style="rounded=1;strokeColor=#FF8F00;strokeWidth=1;" edge="1" source="staging_flask" target="staging_pg" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== STACJA DEWELOPERSKA ==================== -->
|
|
<mxCell id="zone_dev" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#4CAF50;dashed=1;strokeWidth=2;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="620" y="910" width="500" height="150" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="zone_dev_label" value="STACJA DEWELOPERSKA &nbsp;|&nbsp; macOS &nbsp;|&nbsp; localhost" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#4CAF50;" vertex="1" parent="1">
|
|
<mxGeometry x="630" y="913" width="340" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="dev_flask" value="<b>Flask dev server</b><br><font style="font-size:8px;color:#555">python3 app.py<br>Port 5000 / 5001</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#4CAF50;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="640" y="940" width="160" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="dev_docker" value="<b>Docker PostgreSQL</b><br><font style="font-size:8px;color:#555">postgres:16<br>localhost:5433</font>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8;fillColor=#E8F5E9;strokeColor=#4CAF50;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="830" y="938" width="130" height="60" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="dev_tools" value="<font style="font-size:8px;color:#555">VS Code + Claude Code<br>pytest | Docker Compose</font>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
|
|
<mxGeometry x="980" y="950" width="130" height="40" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Dev connection -->
|
|
<mxCell id="conn_dev_internal" style="rounded=1;strokeColor=#4CAF50;strokeWidth=1;" edge="1" source="dev_flask" target="dev_docker" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== REPOZYTORIA KODU ==================== -->
|
|
<mxCell id="zone_git" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ECEFF1;strokeColor=#78909C;dashed=1;strokeWidth=1;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="40" y="1090" width="1080" height="100" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="zone_git_label" value="REPOZYTORIA KODU I WDROŻENIE" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#78909C;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="1093" width="220" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="git_github" value="<b>GitHub</b><br><font style="font-size:8px">pienczyn/nordabiz<br>Backup w chmurze + CI/CD</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ECEFF1;strokeColor=#78909C;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="1120" width="180" height="50" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="git_gitea" value="<b>Gitea (INPI)</b><br><font style="font-size:8px">10.22.68.180<br>Repozytorium wewnętrzne</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ECEFF1;strokeColor=#78909C;fontColor=#333333;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="270" y="1120" width="180" height="50" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Deployment flow -->
|
|
<mxCell id="deploy_flow" value="<b>Przepływ wdrożenia:</b><br><font style="font-size:9px">1. git push (origin + inpi) → 2. Wdrożenie na staging → 3. Test manualny → 4. git pull na produkcji → 5. Migracje SQL → 6. Restart serwisu</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F2FD;strokeColor=#1565C0;fontColor=#333333;fontSize=10;align=left;spacingLeft=10;" vertex="1" parent="1">
|
|
<mxGeometry x="480" y="1115" width="620" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== POŁĄCZENIA ==================== -->
|
|
|
|
<!-- Users → DNS -->
|
|
<mxCell id="conn_user_dns" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#666666;strokeWidth=1;fontSize=9;fontColor=#888;" edge="1" source="users" target="dns" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Users → FortiGate -->
|
|
<mxCell id="conn_user_fw" value="HTTPS :443" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#b85450;strokeWidth=2;fontSize=9;fontColor=#b85450;" edge="1" source="users" target="fortigate" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Admin → NPM -->
|
|
<mxCell id="conn_admin_npm" value="SSH + HTTPS" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#d6b656;strokeWidth=1;fontSize=9;fontColor=#888;dashed=1;" edge="1" source="admin" target="npm" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- FortiGate → NPM -->
|
|
<mxCell id="conn_fw_npm" value="NAT → :443" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#b85450;strokeWidth=2;fontSize=9;fontColor=#b85450;" edge="1" source="fortigate" target="npm" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- NPM → Flask PROD -->
|
|
<mxCell id="conn_npm_flask" value="HTTP :5000" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#6c8ebf;strokeWidth=2;fontSize=9;fontColor=#6c8ebf;" edge="1" source="npm" target="flask" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- NPM → Flask STAGING -->
|
|
<mxCell id="conn_npm_staging" value="HTTP :5000" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#FF8F00;strokeWidth=1;fontSize=9;fontColor=#FF8F00;dashed=1;" edge="1" source="npm" target="staging_flask" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Flask → PostgreSQL -->
|
|
<mxCell id="conn_flask_pg" value="SQL :5432" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#82b366;strokeWidth=2;fontSize=9;fontColor=#82b366;" edge="1" source="flask" target="postgres" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Service → API connections -->
|
|
<mxCell id="conn_gemini" style="rounded=1;strokeColor=#4285F4;strokeWidth=1;dashed=1;" edge="1" source="svc_gemini" target="api_gemini" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="conn_seo_ps" style="rounded=1;strokeColor=#4285F4;strokeWidth=1;dashed=1;" edge="1" source="svc_seo" target="api_pagespeed" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="conn_gbp_places" style="rounded=1;strokeColor=#4285F4;strokeWidth=1;dashed=1;" edge="1" source="svc_gbp" target="api_places" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="conn_social_brave" style="rounded=1;strokeColor=#FB542B;strokeWidth=1;dashed=1;" edge="1" source="svc_social" target="api_brave" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="conn_krs_api" style="rounded=1;strokeColor=#333333;strokeWidth=1;dashed=1;" edge="1" source="svc_krs" target="api_krs" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="conn_email_ms" style="rounded=1;strokeColor=#00A4EF;strokeWidth=1;dashed=1;" edge="1" source="svc_email" target="api_msgraph" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="conn_oauth_google" style="rounded=1;strokeColor=#34A853;strokeWidth=1;dashed=1;" edge="1" source="svc_oauth" target="api_oauth" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- Deploy arrows: Dev → Git → Staging → Prod -->
|
|
<mxCell id="conn_dev_git" value="git push" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#78909C;strokeWidth=1;fontSize=9;fontColor=#78909C;dashed=1;" edge="1" source="dev_flask" target="git_github" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="conn_git_staging" value="git pull" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#FF8F00;strokeWidth=1;fontSize=9;fontColor=#FF8F00;dashed=1;" edge="1" source="git_gitea" target="staging_flask" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<mxCell id="conn_git_prod" value="git pull" style="edgeStyle=orthogonalEdgeStyle;rounded=1;strokeColor=#1565C0;strokeWidth=1;fontSize=9;fontColor=#1565C0;dashed=1;" edge="1" source="git_gitea" target="flask" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- ==================== LEGENDA ==================== -->
|
|
<mxCell id="legend_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fafafa;strokeColor=#cccccc;" vertex="1" parent="1">
|
|
<mxGeometry x="1160" y="910" width="155" height="195" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="legend_title" value="<b>Legenda</b>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#333;" vertex="1" parent="1">
|
|
<mxGeometry x="1170" y="915" width="70" height="20" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="legend_1" value="<font style="font-size:9px">Zapora sieciowa</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=8;" vertex="1" parent="1">
|
|
<mxGeometry x="1170" y="940" width="130" height="20" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="legend_2" value="<font style="font-size:9px">Strefa DMZ / Proxy</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=8;" vertex="1" parent="1">
|
|
<mxGeometry x="1170" y="965" width="130" height="20" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="legend_3" value="<font style="font-size:9px">Aplikacja (produkcja)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=8;" vertex="1" parent="1">
|
|
<mxGeometry x="1170" y="990" width="130" height="20" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="legend_4" value="<font style="font-size:9px">Usługi wewnętrzne</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=8;" vertex="1" parent="1">
|
|
<mxGeometry x="1170" y="1015" width="130" height="20" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="legend_5" value="<font style="font-size:9px">Baza danych</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=8;" vertex="1" parent="1">
|
|
<mxGeometry x="1170" y="1040" width="130" height="20" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="legend_6" value="<font style="font-size:9px">Staging (testowe)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF8E1;strokeColor=#FF8F00;fontSize=8;" vertex="1" parent="1">
|
|
<mxGeometry x="1170" y="1065" width="130" height="20" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="legend_7" value="<font style="font-size:9px">Stacja deweloperska</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#4CAF50;fontSize=8;" vertex="1" parent="1">
|
|
<mxGeometry x="1170" y="1090" width="130" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
</root>
|
|
</mxGraphModel>
|
|
</diagram>
|
|
</mxfile>
|