Przejdź do treści

Inwentarz Usług

Pełen spis usług działających na infrastrukturze AIO Factory. Każdy wiersz zawiera: rolę, port, ścieżkę sekretów, status backupów, procedurę restartu, pochodzenie (kto opłacił / kiedy powstała) oraz odpowiedzialność po przekazaniu projektu.

Stan zweryfikowany sondą hostów: 2026-05-02 (incus list + docker ps na host-dad i host-mom; lista poniżej odzwierciedla stan realnie działających kontenerów, nie tylko deklarowaną konfigurację).

Konwencja

  • Pochodzenie: zlecenie = zrealizowane w ramach umowy z 13.01.2026; legacy = istniało wcześniej, tylko utrzymanie / migracja; opcjonalne = poza zakresem oferty, wdrożenie zależy od woli właściciela.
  • Odpowiedzialność po przekazaniu: domyślnie właściciel; usługi gdzie wymagana jest specjalistyczna wiedza zewnętrzna (np. konfiguracja DKIM Mailcow) oznaczone jako właściciel + dostawca zewnętrzny.
  • Restart: standardowo incus exec <container> -- docker compose -f /root/dapps/<service>/compose.yaml restart (chyba że wskazano inaczej).
  • Sekrety: wszystkie klucze i hasła per-usługa są w SOPS (secrets/secrets.sops.yaml w repo, klucz age w Bitwardenie / na stacji właściciela). Zmienne środowiskowe wstrzykiwane przez compose env_file:.

Architektura wysokiego poziomu

Host Dostawca Rola Liczba kontenerów Incus Liczba kontenerów Docker
host-mom Hetzner (baremetal) Jednostka centralna — poczta, narzędzia operacyjne, sklepy WordPress 5 (dns, email, services, system-mom, web) ~50
host-dad OVH (baremetal) Panel produkcyjny + automatyzacje + failover sklepu 3 (panel, system-dad, web) ~20
host-son OVH (baremetal) Trzecia linia obrony (standby) — patrz Serwery bazowy NixOS

Każdy incus to izolowany LXC; aplikacje uruchomione przez Docker Compose w środku. Reverse-proxy Caddy stoi w każdym kontenerze, który publikuje serwisy do internetu (dns, services, web na host-mom; panel, web na host-dad).


host-dad — Panel produkcyjny + automatyzacje

Kontener panel (51.75.40.111)

Ten kontener trzyma rdzeń systemu: panel operatora, backend, silnik automatyzacji.

Usługa Rola URL operatora Port (wewn.) Sekrety Backup Pochodzenie Odpowiedzialność
caddy Reverse-proxy + auto-SSL (Let's Encrypt) 80, 443 konfig w git zlecenie właściciel
convex-backend Baza Convex + runtime queries/mutations/actions convex.aiofactory.pl 3210, 3211 convex.env (SOPS) snapshot 03:00 → B2 zlecenie właściciel
convex-dashboard Web UI do administrowania Convexem convex-dashboard.aiofactory.pl 6791 zlecenie właściciel
panel Dashboard SvelteKit (UI operatora) panel.aiofactory.pl 3000 panel.env (SOPS) obraz w rejestrze zlecenie właściciel
windmill-server API + UI silnika automatyzacji windmill.aiofactory.pl 8000 windmill.env (SOPS) git + dziennie B2 zlecenie właściciel
windmill-worker ×8 Workery Pythona/TS/Bun (job runners) dziedziczy po server zlecenie właściciel
windmill-worker-native ×1 Worker dla skryptów typu native (czysty TS bez Deno/Bun) dziedziczy zlecenie właściciel
windmill-db PostgreSQL 16 — kolejka jobów + metadane Windmilla 5432 windmill.env dziennie 04:00 → B2 zlecenie właściciel

Restart wszystkiego: incus exec panel -- bash -c "cd /root/dapps && docker compose restart". Restart pojedynczej usługi: dopisać <service-name> po restart.

Wdrażanie kodu: panel (image build + push → restart) realizowany z dashboard/; convex przez npx convex deploy --prod; windmill przez wmill sync push z windmill/. Pełna procedura wdrożeniowa per warstwa jest dokumentowana w docs/DOMAINS.md w repo źródłowym.

Kontener web (51.75.40.111)

Drugi kontener publiczny — strona firmowa, dokumentacja, sklep buyspace.pl (failover).

Usługa Rola URL operatora Port (wewn.) Sekrety Backup Pochodzenie Odpowiedzialność
caddy Reverse-proxy dla web 80, 443 konfig w git zlecenie właściciel
aioweb (static) Strona firmowa Astro (aiofactory.pl) aiofactory.pl static git zlecenie właściciel
aiodocs (static) Ta dokumentacja (mkdocs-material) docs.aiofactory.pl static git zlecenie właściciel
buyspace-wp WordPress + WooCommerce — produkcyjny sklep buyspace.pl 80 wp-config.php dziennie 01:00 → B2 legacy właściciel + ext. dev
buyspace-db MariaDB dla buyspace.pl 3306 wp-config.php dziennie 01:00 → B2 legacy właściciel

Failover: buyspace.pl działa równocześnie na host-mom (web kontener, master) i host-dad (web kontener, replika). Replikacja DB master→slave; przy awarii host-mom IP failover OVH przepina ruch w sekundach.

Kontener system-dad

Bazowy NixOS, brak aplikacji użytkowych — odpowiada za hardware, sieć, bridge incusowy. Restart: ssh aio-dad -- sudo nixos-rebuild switch.


host-mom — Poczta + narzędzia operacyjne + sklepy

Kontener email (148.251.193.171)

Kompletny self-hosted serwer pocztowy.

Usługa Rola URL operatora Port Sekrety Backup Pochodzenie Odpowiedzialność
mailcow (stos: postfix, dovecot, rspamd, sogo, clamav, nginx, mysql, redis, …) SMTP / IMAP / Webmail SOGo / DKIM / SPF / DMARC mail.aiofactory.pl 25, 465, 587, 143, 993 mailcow.conf + mailcow.env codziennie 02:00 → B2 (skrzynki + konfig) zlecenie (TASK-071) właściciel

Webmail SOGo: mail.aiofactory.pl/SOGo/. Admin Mailcow: mail.aiofactory.pl/admin (login: admin, hasło w Bitwardenie pod mailcow-admin).

Restart: incus exec email -- bash -c "cd /root/dapps/mailcow-dockerized && docker compose restart". Update Mailcow: update.sh w katalogu mailcow.

Co konkretnie obsługuje: zgłoszenie #15 "Serwer Email" — pełna konfiguracja DKIM/SPF/DMARC, integracja z modułem Obsługi Klienta przez IMAP fetch.

Kontener services (148.251.193.171)

Worek narzędzi operacyjnych (Forgejo, mailing, monitoring, social media, SMS, mesh VPN).

Usługa Rola URL operatora Port (wewn.) Sekrety Backup Pochodzenie Odpowiedzialność
caddy Reverse-proxy services container 80, 443 konfig w git zlecenie właściciel
forgejo Self-hosted git + issues (zastępuje GitHub dla repo aio/*) git.aiofactory.pl 3000 (Caddy proxies) forgejo.env dziennie 04:30 → B2 zlecenie właściciel
forgejo-db MariaDB dla Forgejo 3306 dziedziczy dziennie 04:30 → B2 zlecenie właściciel
beszel Monitoring zdrowia hostów (CPU/RAM/dysk + status kontenerów) beszel.aiofactory.pl 8090 konfig w wolumenie dziennie 05:00 → B2 zlecenie (TASK-103) właściciel
listmonk Mailing masowy (newslettery, kampanie) — relay przez Mailcow listmonk.aiofactory.pl 9000 listmonk.env dziennie 04:30 → B2 zlecenie (#21) właściciel
listmonk-db PostgreSQL dla Listmonka 5432 dziedziczy dziennie 04:30 → B2 zlecenie właściciel
postiz Planowanie i publikacja Social Media (FB / IG / LinkedIn / TikTok / X) postiz.aiofactory.pl 5000 postiz.env (klucze OAuth platform) dziennie 04:00 → B2 zlecenie (#18) właściciel
postiz-db PostgreSQL dla Postiza 5432 dziedziczy dziennie 04:00 → B2 zlecenie właściciel
postiz-redis Redis (kolejka publikacji) 6379 nie wymaga zlecenie właściciel
temporal + temporal-db + temporal-elasticsearch + temporal-ui + temporal-admin Workflow engine (zaplecze Postiza) temporal.aiofactory.pl 7233, 8080 dziedziczy nie wymaga (stan w postiz-db) zlecenie właściciel
textbee-api + textbee-web + textbee-mongo-express + textbee-redis + textbee-db Bramka SMS — API + UI + MongoDB textbee.aiofactory.pl, sms.aiofactory.pl 3000, 27017 textbee.env dziennie 04:00 → B2 zlecenie (#14) właściciel + karta SIM Play (właściciel)
netbird-server + netbird-dashboard Mesh VPN administracyjny (dostęp do panelu z poza biura) netbird.aiofactory.pl 3478/UDP netbird.env konfig w wolumenie zlecenie właściciel
backrest UI do restic — backup orchestrator backrest.aiofactory.pl 9898 restic-password (SOPS) sam jest backup-em (B2) zlecenie (TASK-042) właściciel

Restart kontenera: incus exec services -- bash -c "cd /root/dapps/<service> && docker compose restart". Każdy katalog /root/dapps/<service>/ zawiera własny compose.yaml.

Bramka SMS — wymóg fizyczny

textbee jest gotowy programistycznie. Aby ruszył wysyłkę, właściciel musi: (1) włożyć kartę SIM Play z roamingiem SMS do modemu USB/IP podpiętego do host-dad, (2) dodać endpoint w panelu Konfiguracja → Bramka SMS. Patrz Poczta — bramka SMS.

Kontener dns (148.251.193.171)

Wewnętrzny DNS + Caddy dla niektórych subdomen.

Usługa Rola URL operatora Port Sekrety Backup Pochodzenie Odpowiedzialność
dns-server (PowerDNS) Autorytatywny DNS dla subdomen wewn. ns1.aiofactory.pl 53/UDP, 53/TCP pdns.conf konfig w git zlecenie właściciel
caddy Reverse-proxy dla subdomen DNS-bound 80, 443 konfig w git zlecenie właściciel

Kontener web (148.251.193.171)

Kontener WordPress — sklepy buyspace.pl (master, eu, de, test) i phpMyAdmin.

Usługa Rola URL operatora Port Sekrety Backup Pochodzenie Odpowiedzialność
caddy Reverse-proxy dla buyspace.pl 80, 443 konfig w git zlecenie właściciel
buyspace-master-wp + buyspace-master-db WordPress master (kanoniczny stan) master.buyspace.pl 80, 3306 wp-config.php dziennie 01:00 → B2 legacy właściciel + ext. dev
buyspace-eu-wp + buyspace-eu-db WordPress instancja EU (wewn.) 80, 3306 wp-config.php dziennie 01:00 → B2 legacy właściciel + ext. dev
buyspace-de-wp + buyspace-de-db WordPress instancja DE (planowana — patrz #26) (wewn.) 80, 3306 wp-config.php dziennie 01:00 → B2 legacy właściciel + ext. dev
buyspace-test-wp + buyspace-test-db Sandbox WP do testów test.buyspace.pl 80, 3306 wp-config.php nie wymaga (sandbox) legacy właściciel + ext. dev
phpmyadmin UI do zarządzania bazami WP pma.buyspace.pl 80 dziedziczy z DB legacy właściciel

Granica wsparcia: ze strony AIO Factory utrzymujemy infrastrukturę (kontenery, sieć, backupy, IP failover); samej treści WordPress (motywy, wtyczki, strona produktowa) nie supportujemy — to wprost wyłączone w ofercie (str. 4). Patrz Sklepy i FAQ #26.

Kontener system-mom

Bazowy NixOS host-mom; brak aplikacji użytkowych. Restart: ssh aio-mom -- sudo nixos-rebuild switch.


host-son — Trzecia linia obrony

W stanie standby. Sprzęt skonfigurowany, NixOS zainstalowany, podstawowa orkiestracja Incus/Docker — gotowy do przejęcia ruchu, ale rutynowo nie obsługuje produkcji. Pełna replikacja Convex + Mailcow konfigurowana w razie awarii host-mom + host-dad jednocześnie. Patrz Serwery — host-son.


Sieć VPS — sklepy lokalne

VPS-y w lokalizacjach docelowych klientów dla niskiego opóźnienia i lokalnych adresów IP. Mechanizm IP failover OVH przepina ruch na host-dad w razie awarii VPS-a. Koszt ~20 PLN/mc/VPS.

Kraj Status Przeznaczenie
Polska ✅ aktywny buyspace.pl
Niemcy 🟡 standby przyszły rynek (#26)
Francja 🟡 standby przyszły rynek
Włochy / UK / Czechy / Hiszpania / Holandia / Belgia / Austria / Szwajcaria ⚪ planowane sukcesywnie wg potrzeby

Procedura uruchomienia kolejnego VPS-a: zamówienie OVH → konfiguracja w infra/host-son/containers/ (NixOS template) → przepięcie IP failover.


Usługi opcjonalne (nie uruchomione na infra AIO)

W trakcie projektu rozważane były dwa dodatkowe narzędzia, które ostatecznie pozostają opcjonalne — nie uruchomione w infrastrukturze AIO, ale ich wdrożenie jest dokumentnie i organizacyjnie przygotowane:

  • Vaultwarden / Bitwarden — magazyn haseł. Decyzja właściciela: korzystamy z Bitwarden cloud (poza naszą infrastrukturą). Klucz age do SOPS oraz hasła administracyjne wszystkich usług powyżej znajdują się w Bitwardenie (folder panel-aio). Jeśli właściciel chce w przyszłości przenieść skarbiec na własną infrastrukturę, gotowa konfiguracja Vaultwarden do uruchomienia na host-mom. (Wcześniejsze wersje dokumentacji opisywały Vaultwarden jako uruchomiony — to było nieaktualne.)
  • Paperless-ngx — system zarządzania dokumentami z OCR, opcjonalny dodatek z oferty (str. 6: „zautomatyzujemy proste procesy, które teraz trzymacie w Excelach"). Nie został uruchomiony w pierwotnym wdrożeniu — przygotowany konfiguracyjnie, jeśli właściciel chce go aktywować w fazie utrzymania, jeden compose-file uruchamia całość na host-mom (/root/dapps/paperless/).

Sekrety i klucze

Wszystkie sekrety w repo są SOPS-encrypted (Mozilla SOPS + age). Kluczowe ścieżki:

Plik Zawartość Dostęp
secrets/secrets.sops.yaml klucze API platform (Allegro/Amazon/eBay/…), tokeny, hasła DB age w Bitwardenie
dashboard/.env.sops.yaml sekrety dashboardu (Convex deploy key, etc.) jw.
convex/.env.dev.sops.yaml sekrety Convexa (per-środowisko) jw.
windmill/*.sops.yaml sekrety pipeline'ów Windmill (per-vendor refresh tokens) jw.

Reguły szyfrowania: .sops.yaml w katalogu głównym repo (path-regex per ścieżka).

Klucz prywatny age: w Bitwardenie pod panel-aio / sops-age-key. Bez tego klucza odzyskanie sekretów z repo jest niemożliwe — utrata = utrata dostępu do API platform i baz produkcyjnych.

Procedura odzyskania dostępu w razie utraty hasła głównego: opisana w Podsumowaniu Prac.


Backupy — ogólny stan

Cel Częstotliwość Retencja Źródło
Convex (snapshot) codziennie 03:00 30 dni dziennych + 12 tygodniowych host-dad / panel
Mailcow (skrzynki + konfig) codziennie 02:00 14 dni host-mom / email
Windmill (skrypty + flowy + db) po każdym push (git) + dziennie 04:00 (db) git: wieczne; B2: 14 dni host-dad / panel
WordPress (db + uploads) ×4 codziennie 01:00 30 dni dziennych host-mom / web + host-dad / web
Postiz (db) codziennie 04:00 14 dni host-mom / services
Listmonk (db + listy) codziennie 04:30 14 dni host-mom / services
Forgejo (repo + db) codziennie 04:30 30 dni host-mom / services
Beszel (db metryk) codziennie 05:00 7 dni host-mom / services

Cel backupów: Backblaze B2, bucket aiofactory, region eu-central-003. Klucz szyfrujący restic w secrets/secrets.sops.yaml (backrest_restic_password) — bez niego odzyskanie z B2 niemożliwe.

Monitoring backupów: Windmill cyklicznie sprawdza świeżość snapshotów (f/infra/backup__health__monitor.py, TASK-055.04) — alarm gdy snapshot starszy niż 25 h.

Restore: Backrest UI (backrest.aiofactory.pl) lub bezpośrednio przez SSH → host-mom → restic. Procedury per-usługa w windmill/docs/infra/restore-runbook.md.


Mapa pochodzenia (kto za co odpowiada)

Pochodzenie Co to znaczy Przykłady
Zlecenie Zrealizowane / wdrożone w ramach umowy z 13.01.2026 Panel, Convex, Windmill, Mailcow, Listmonk, Postiz, Beszel, Forgejo, Backrest, Bramka SMS, infrastruktura NixOS, sieć VPS, IP failover
Legacy Istniało przed umową, my tylko utrzymujemy / przenosimy buyspace.pl WordPress (×5 instancji), domena buyspace.pl
Opcjonalne Poza zakresem oferty, dostępne do uruchomienia w razie potrzeby Vaultwarden, Paperless-ngx

Zamknięcie zgłoszeń info

Ta strona zamyka 9 zgłoszeń typu „co to jest / czemu to działa" z Forgejo:

  • #12 Host: son — patrz host-son wyżej.
  • #13 Serwery VPS — patrz Sieć VPS wyżej.
  • #14 Bramka SMStextbee w kontenerze services na host-mom. Patrz tabela host-mom / services.
  • #15 Serwer Emailmailcow w kontenerze email na host-mom.
  • #16 System monitoringubeszel w kontenerze services na host-mom.
  • #17 Bazy danych pod strony — wszystkie WordPress-DB w kontenerach web (host-mom + host-dad), backupowane codziennie do B2.
  • #18 Social Mediapostiz w kontenerze services na host-mom.
  • #21 Mailinglistmonk w kontenerze services na host-mom (relay przez Mailcow).
  • #25 Beszel — co to jest — patrz beszel w tabeli host-mom / services.