Wróć do narzędzi

N3X Remiza

Self-hosted panel dla OSP do ewidencji członków, sprzętu, pojazdów, terminów, działań i dokumentacji zdjęciowej.

SELF-HOSTED OSPv0.1.3

Porządek w jednostce. Dostęp z każdego urządzenia.

N3X Remiza przenosi codzienną ewidencję OSP do nowoczesnego panelu WWW. Każda osoba korzysta z indywidualnego konta, a członkowie, sprzęt, terminy i wyjazdy pozostają w prywatnej bazie PostgreSQL uruchomionej na serwerze jednostki.

Dane na serwerze jednostki · PostgreSQL bez publicznego portu · brak telemetrii aplikacji

Interfejs aplikacji

Prawdziwy interfejs produktu — kliknij podgląd, aby zobaczyć go w pełnym rozmiarze.

1 / 2

Centrum jednostki OSP

Członkowie, pojazdy, sprzęt, terminy i bieżące działania widoczne od razu po zalogowaniu.

Hosting zarządzany przez N3X

Chcesz korzystać, ale nie zajmować się serwerem?

N3X może przygotować i utrzymywać tę aplikację: od uruchomienia i SSL po aktualizacje, monitoring oraz kopie zapasowe.

Zapytaj o hosting N3X

Fundament cyfrowej remizy

Członkowie i gotowość

Kartoteki członków, status, rodzaj członkostwa oraz terminy badań bez przechowywania diagnoz i zbędnych danych wrażliwych.

Sprzęt i pojazdy

Wyposażenie, własność, lokalizacja, numery inwentarzowe, stan gotowości i terminy przeglądów w jednej ewidencji.

Działania i wyjazdy

Pożary, miejscowe zagrożenia, alarmy fałszywe, ćwiczenia, szkolenia i wyjazdy gospodarcze z czytelną historią.

Kalendarz i raporty

Wspólny kalendarz łączy wydarzenia z badaniami i przeglądami, a gotowe raporty PDF i CSV można pobrać z aktualnych danych.

Zdjęcia i dokumentacja

Prywatne zdjęcia oraz pliki PDF można przypisać do wyjazdu lub wydarzenia, opisać, pobrać i zweryfikować sumą SHA-256.

Komputer, tablet i telefon

Responsywny interfejs i manifest PWA pozwalają korzystać z panelu w remizie, pojeździe i poza stanowiskiem komputerowym.

Konta, role i audyt

Indywidualne konta, bezpieczne sesje HttpOnly, role przygotowane pod zespół i rejestr najważniejszych operacji.

DOCKER COMPOSE

Prywatny stos dla jednostki

Jedna konfiguracja uruchamia panel, worker i PostgreSQL. Hasło bazy oraz materiały pozostają w prywatnych wolumenach, a na zewnątrz wystawiany jest wyłącznie port aplikacji.

N3X Remiza Web — panel, konfigurator pierwszego uruchomienia i uwierzytelnianie
N3X Remiza Worker — terminy administracyjne i porządkowanie sesji
PostgreSQL 17 — prywatna ewidencja jednostki i historia audytu
Twoje reverse proxy — HTTPS, własna domena lub dostęp tylko z VPN/LAN

KONFIGURATOR DOCKER

Compose dopasowany do remizy

Ustaw domenę, adres nasłuchu, port i wersję obrazu. Konfigurator przygotuje gotowy plik Docker Compose oraz komendy startowe — bez pliku .env.

Domena musi wskazywać na reverse proxy jednostki. Nie wpisuj https:// ani ścieżki.

0.0.0.0 zapewnia dostęp z LAN i proxy. Użyj 127.0.0.1, gdy proxy działa na tym samym hoście i port ma pozostać lokalny.

Port panelu dostępny dla LAN lub reverse proxy. Domyślnie 8791.

Zostaw latest dla najnowszego wydania albo przypnij konkretną wersję.

Pierwsze konto powstaje w panelu WWW. Po starcie otwórz http://IP_SERWERA:8791 i od razu utwórz konto właściciela. Przed dostępem z Internetu ogranicz port zaporą i włącz HTTPS przez reverse proxy. Wykonuj spójne kopie wolumenów postgres_data, runtime_secrets oraz attachments_data.
Adres publiczny
https://remiza.example.com
Pierwsze uruchomienie
http://IP_SERWERA_DOCKER:8791
Cel reverse proxy
http://IP_SERWERA_DOCKER:8791
Test stanu
http://127.0.0.1:8791/api/health

Gotowy docker-compose.yml

name: n3xremiza

x-app-environment: &app-environment
  N3XREMIZA_DATABASE_PASSWORD_FILE: /run/n3xremiza/database_password
  N3XREMIZA_GEOCODING_BASE_URL: ${N3XREMIZA_GEOCODING_BASE_URL:-https://photon.komoot.io}
  N3XREMIZA_GEOCODING_BBOX: ${N3XREMIZA_GEOCODING_BBOX:-14.122,49.002,24.145,54.835}
  N3XREMIZA_TRUST_PROXY_HOPS: ${N3XREMIZA_TRUST_PROXY_HOPS:-0}
  N3XREMIZA_AUTH_AUDIT_RETENTION_DAYS: ${N3XREMIZA_AUTH_AUDIT_RETENTION_DAYS:-365}
  TZ: Europe/Warsaw

x-app-security: &app-security
  read_only: true
  security_opt:
    - no-new-privileges:true
  cap_drop:
    - ALL
  tmpfs:
    - /tmp:size=64m,mode=1777
    - /app/.next/cache:size=128m,mode=0700,uid=1001,gid=1001

services:
  bootstrap:
    image: alpine:3.22
    restart: "no"
    command:
      - /bin/sh
      - -ec
      - |
        umask 077
        if [ ! -s /run/n3xremiza/database_password ]; then
          od -An -N32 -tx1 /dev/urandom | tr -d ' \n' > /run/n3xremiza/database_password
        fi
        chmod 0444 /run/n3xremiza/database_password
    volumes:
      - runtime_secrets:/run/n3xremiza
    networks:
      - backend
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL

  web:
    image: ghcr.io/nexitpl/n3xremiza:latest
    pull_policy: always
    restart: unless-stopped
    depends_on:
      bootstrap:
        condition: service_completed_successfully
      postgres:
        condition: service_healthy
    environment: *app-environment
    volumes:
      - runtime_secrets:/run/n3xremiza:ro
      - attachments_data:/app/data/attachments
    ports:
      # Keep this port behind a host firewall until the owner account exists.
      # For Internet access, place the app behind an HTTPS reverse proxy.
      - "0.0.0.0:8791:3000"
    healthcheck:
      test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:3000/api/health"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - frontend
      - backend
    <<: *app-security

  worker:
    image: ghcr.io/nexitpl/n3xremiza:latest
    pull_policy: always
    restart: unless-stopped
    depends_on:
      bootstrap:
        condition: service_completed_successfully
      postgres:
        condition: service_healthy
      web:
        condition: service_healthy
    environment: *app-environment
    volumes:
      - runtime_secrets:/run/n3xremiza:ro
    command: ["node", "dist/worker.mjs"]
    networks:
      - backend
    <<: *app-security

  postgres:
    image: postgres:17-alpine
    restart: unless-stopped
    depends_on:
      bootstrap:
        condition: service_completed_successfully
    environment:
      POSTGRES_DB: n3xremiza
      POSTGRES_USER: n3xremiza
      POSTGRES_PASSWORD_FILE: /run/n3xremiza/database_password
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - runtime_secrets:/run/n3xremiza:ro
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n3xremiza -d n3xremiza"]
      interval: 5s
      timeout: 5s
      retries: 12
    networks:
      - backend

networks:
  frontend:
  backend:
    internal: true

volumes:
  postgres_data:
  runtime_secrets:
  attachments_data:

Uruchomienie i kontrola stanu

mkdir -p n3xremiza
cd n3xremiza
# Zapisz skopiowaną konfigurację jako docker-compose.yml
docker compose up -d
docker compose ps
curl -fsS http://127.0.0.1:8791/api/health

Historia zmian

    • NowośćZdjęcia i dokumenty PDF przypisane do wyjazdów oraz wydarzeń, z kontrolą dostępu, limitami plików i sumą SHA-256.
    • NowośćInteraktywna mapa wyjazdów z podpowiadaniem adresów, lokalizacją urządzenia oraz ręcznym wskazywaniem miejsca zdarzenia.
    • NowośćLokalizacja własnej jednostki i warstwa remiz strażackich na mapie wraz z legendą rodzajów zdarzeń.
    • NowośćŚwięta i daty istotne dla OSP w kalendarzu oraz możliwość archiwizacji błędnie dodanych działań.
    • UlepszenieDopracowany układ mobilny, stałe menu boczne na komputerze oraz ujednolicony opis bieżącego wydania na stronie produktu.
    • UlepszenieDedykowana ikona aplikacji oraz strażacki wariant interfejsu N3X z czytelnym oznaczeniem aktywnej sekcji na komputerze i telefonie.
    • NowośćIndywidualne konta użytkowników, role i osobne uprawnienia do modułów.
    • NowośćPanel administracyjny użytkowników, reset haseł, blokowanie kont i zarządzanie aktywnymi sesjami.
    • NowośćDziennik aktywności obejmujący logowania, zmiany danych, usuwanie i eksporty raportów.
    • NowośćKalendarz miesięczny z wydarzeniami jednorazowymi i cyklicznymi oraz przypomnieniami o terminach.
    • NowośćRaporty PDF i eksporty CSV dla członków, majątku i działań.
    • UlepszeniePełny polski i angielski interfejs oraz nawigacja dopasowana do telefonu.
    • WydaniePierwsze wydanie self-hosted uruchamiane przez Docker Compose: panel WWW, worker i PostgreSQL.
    • NowośćPodstawowa ewidencja jednostki, członków, sprzętu, pojazdów, terminów oraz działań.
Nie jest systemem alarmowania. Powiadomienia dotyczą terminów administracyjnych. N3X Remiza nie zastępuje PSP, SWD, alarmowania SMS ani innych kanałów dysponowania jednostki.

PORADNIK

Instrukcja obsługi N3X Remiza

Instalacja, pierwsze kroki, ustawienia i rozwiązywanie problemów.

N3X Remiza

N3X Remiza to panel dla jednostki OSP: członkowie, sprzęt, pojazdy, działania, kalendarz i dokumentacja.

Wczesne MVP: zachowaj niezależną dokumentację jednostki. Aplikacja nie służy do alarmowania operacyjnego.

Wymagania i instalacja

Potrzebujesz serwera z Docker Compose i przeglądarki. Dostęp zdalny wymaga HTTPS albo zaufanego VPN.

  1. Pobierz docker-compose.yml i zapisz w osobnym katalogu na serwerze.
  2. W tym katalogu uruchom:
docker compose up -d
docker compose ps
  1. Otwórz http://ADRES_SERWERA:8791 w zaufanej sieci.
  2. Uzupełnij dane jednostki i utwórz konto właściciela.

Nie potrzebujesz pliku .env. Hasło bazy jest generowane automatycznie, a PostgreSQL pozostaje w sieci wewnętrznej. Portu 8791 nie wystawiaj bezpośrednio do internetu.

Pierwsze kroki

Dodaj użytkowników i przydziel dostęp do właściwych modułów. Uzupełnij ewidencje i terminy badań, kwalifikacji oraz przeglądów. Zdjęcia i dokumenty przypisuj do właściwych rekordów.

Jeden plik może mieć do 10 MB, rekord do 25 aktywnych materiałów, a jednostka do 1 GB materiałów. Zdjęcia zachowują metadane EXIF; przed dodaniem uwzględnij zawarte w nich dane urządzenia lub lokalizacji.

Mapy i wyszukiwanie adresów korzystają z usług zewnętrznych. Zapytania i współrzędne trafiają do skonfigurowanej usługi geokodowania. Lokalizacja urządzenia jest pobierana jednorazowo po zgodzie użytkownika.

Kopie zapasowe i aktualizacja

Wykonuj spójne kopie postgres_data, runtime_secrets i attachments_data: bazy, hasła bazy i oryginalnych załączników. Przechowuj je poza serwerem i sprawdzaj odtwarzanie.

Po wykonaniu kopii przejrzyj opis wydania i ewentualne zmiany Compose, a następnie:

docker compose pull
docker compose up -d
docker compose ps

Zachowaj trwałe wolumeny. Po aktualizacji sprawdź logowanie, ewidencje i załączniki.

Telefon i rozwiązywanie problemów

Aplikacja działa w przeglądarce i jako PWA dodana do ekranu głównego. Dane po zalogowaniu wymagają sieci; PWA nie jest kopią dokumentacji offline.

W razie problemu sprawdź docker compose ps i docker compose logs --tail=100 web worker. Przy braku dostępu do modułu sprawdź rolę użytkownika. Jeżeli załącznik nie przechodzi, sprawdź limity aplikacji i reverse proxy.