Diegimas

OpenTMS: diegimas ir technologijos

Visa sistema veikia viename serveryje: debesyje, kurį prižiūrime mes, arba jūsų infrastruktūroje. Čia – ko reikia serveriui, kaip sudėliotos dalys ir kuo jos sukurtos.

Debesyje

Mes talpiname ir prižiūrime

Serverį, atnaujinimus ir būsenos puslapį prižiūrime mes, jūs tik prisijungiate. Serveris ir failų saugykla – Europos Sąjungoje.

Jūsų serveryje

Tas pats rinkinys jūsų infrastruktūroje

Docker Compose su trimis atvaizdais. Serverį paruošia vienas skriptas, nauja versija diegiama viena komanda, o grąžinti ankstesnę galima taip pat.

Serverio reikalavimai

Mažiausias serveris tinka išbandyti sistemą ar vienai nedidelei įmonei. Produkcijos stulpelis – serveris, kuriam suplanuotas mūsų debesis su daug įmonių.

KasMažiausiaiProdukcijai
Procesorius2 vCPU, x86-648 branduoliai, x86-64
Atmintis4 GB RAM64 GB RAM
Diskas40 GB SSD2 × 512 GB NVMe, RAID 1
Operacinė sistemaUbuntu 24.04 arba 26.04 LTSUbuntu 24.04 arba 26.04 LTS
Programinė įrangaDocker Engine ir Compose v2Docker Engine ir Compose v2
TinklasVieša IP, 80 ir 443 prievadaiVieša IP, 80 ir 443 prievadai, WireGuard
DomenaiBiuro, vairuotojo ir API adresaiBiuro, vairuotojo ir API adresai
Atsarginės kopijosServerio diskeIr išorėje: S3 saugykla arba SFTP

Procesorius – x86-64 (amd64). 4 GB atminties užtenka, kad nauja versija būtų surinkta šalia veikiančios; tam diske turi būti bent 6 GB laisvos vietos. PostgreSQL atminties nustatymai apskaičiuojami pagal serverio RAM.

Architektūra

Vienas API, viena duomenų bazė ir vienas darbininkas fone. Kiekviena išorinė paslauga jungiama per savo adapterį, o daugumą jų galima išjungti.

KAS KREIPIASISERVERISIŠORINĖS PASLAUGOSBiuro programavadybininkas, vadovasVairuotojo PWAnuoroda, veikia be ryšioAI agentaiOaura, Claude – tik siūloKitos sistemosAPI raktas, webhook’aiHTTPSCaddyHTTPS, programos, /api ir /mcpAPI /api/v1REST + SSE, 2 egzemplioriaiMCP serverisagentų įrankiaiPostgreSQL 18RLS pagal account_idDarbininkasoutbox, planuoti darbai/api/v1, SSE/mcpper APISQL, RLSoutboxiš kartofailaiVertex AI (ES)užsakymo juodraštisGeoapifyadresai, žemėlapisBrevoel. laiškaiNoiumdokumentai, sąskaitosRivilėtik per NoiumGPS tiekėjaiTraccar, Mapon, Wialon, rFMSBackblaze B2 (ES)failai, kopijoslaiškaisiunčia, tikrinasąskaitospozicijosWAL kopijosviena įėjimo vietaužklausafone, per outbox
Visi – biuro programa, vairuotojas, AI agentai ir kitos sistemos – kreipiasi į tą patį API, todėl teisės ir patikros galioja vienodai. Iš karto API kreipiasi tik ten, kur žmogus laukia atsakymo: užsakymo juodraštis, adreso paieška ir failai. Visa kita (Noium, laiškai, SMS, GPS, webhook’ai) eina per outbox lentelę ir darbininką, todėl išorės paslaugos sutrikimas nesustabdo vadybininko darbo. Rivilė pasiekiama tik per Noium.

Duomenų modelis

Kiekviena eilutė priklauso paskyrai, o duomenų bazė pati neleidžia matyti kitos įmonės duomenų.

PASKYRA (ACCOUNTS) · KIEKVIENA EILUTĖ TURI ACCOUNT_ID, RLS RIBAJuridinis asmuolegal_entitiesPartnerispartnersSutartiscontractsUžsakymasordersPervežimastransportsAtkarpatrip_transportsReisastripsVilkikai, vairuotojaivehicles, driversĮvykisdomain_eventsKainos eilutėprice_linesSustojimasstopsVietalocationsSąskaitos paketasinvoice_packagesApskaitos ryšysaccounting_linksDokumentasdocuments, document_linksklientaspardavėjasvežėjas, jei ekspedicijapirkėjas1:N1:N1:N1:NN:11:N sustojimaiadresaspaima, atiduodapajamossąnaudosN:1, užrakina1:1būsena iš įvykiųdocument_links
Užsakymas yra pardavimas, pervežimas – vienas krovinio kelias, reisas – vienas vilkikas ar vežėjas. Pervežimas ir reisas jungiami per atkarpas, todėl vienas krovinys gali važiuoti keliais reisais, o vienas reisas vežti kelis krovinius. Kainos yra eilutės, ne stulpeliai: pajamos prie pervežimo, sąnaudos prie reiso. Būsena neįrašoma ranka, ji skaičiuojama iš įvykių.

Technologijos

Versijos – tokios, kokios užfiksuotos kode. Jokio Redis, brokerio ar paieškos variklio: šiuos darbus atlieka PostgreSQL.

Sąsaja

  • React 19.3 · TypeScript 6.0Biuro ir vairuotojo programos
  • Vite 8.3Surinkimas ir kūrimo serveris
  • TanStack Query 5.104Serverio duomenys biuro programoje
  • AG Grid Community 36.2Užsakymų lentelė
  • Tailwind CSS 3.4 · Radix UIKomponentai (shadcn/ui)
  • MapLibre GL 6.16Žemėlapiai
  • Dexie 4.4 · Workbox 7.4Vairuotojo programa veikia be ryšio (PWA)
  • openapi-fetch 0.17API klientas, sugeneruotas iš OpenAPI

Serverio dalis

  • Python 3.13 · uvViena kalba API, darbininkui ir komandinei eilutei
  • FastAPI 0.143 · Uvicorn 0.54REST API ir gyvas srautas (SSE)
  • Pydantic 2.14Duomenų tikrinimas ir nustatymai
  • asyncpg 0.32Grynas SQL, be ORM
  • WeasyPrint 70PDF dokumentai
  • structlog 26.1JSON žurnalai
  • MCP Python SDK 2.3MCP serveris AI asistentams
  • Anthropic SDK 1.15Claude Google Vertex AI ES regione

Duomenų bazė

  • PostgreSQL 18.6Vienintelė duomenų saugykla
  • Row-Level SecurityKiekvienos įmonės duomenys atskirti duomenų bazėje
  • dbmate 2.36 · squawk 2.70Migracijos su „up“ ir „down“, tikrinamos
  • pgBackRest 2.59Šifruotos atsarginės kopijos ir WAL archyvas

Darbų eilė ir podėlis

  • PostgreSQL outboxDarbai įrašomi toje pačioje transakcijoje, be Redis ar BullMQ
  • FOR UPDATE SKIP LOCKEDPython darbininkas, darbai paeiliui pagal įmonę
  • LISTEN / NOTIFYGyvi pakeitimai be atskiro brokerio
  • HTTP cache · zstdFailai su maiša laikomi metus, API – no-store

Prisijungimas ir sauga

  • Argon2 · TOTPSlaptažodžiai ir dviejų veiksnių prisijungimas
  • OpenID ConnectPrisijungimas su Google ir Microsoft
  • OAuthAI asistentų prisijungimas prie MCP serverio
  • AES-256-GCMDuomenų bazėje saugomos paslaptys užšifruotos

API

  • OpenAPI 3.1 · REST /api/v1Vienas API programoms, integracijoms ir agentams
  • ScalarViešas API aprašas api.opentms.app/docs
  • Standard WebhooksPasirašyti webhook’ai
  • oasdiff 1.33Neleidžia nesuderinamų API pakeitimų

Talpinimas

  • Docker · Compose v2Trys atvaizdai: serverio dalis, kraštinis serveris, duomenų bazė
  • Caddy 2.11HTTPS (Let’s Encrypt), programos ir /api
  • Ubuntu 24.04 / 26.04 LTSnftables ir WireGuard, SSH tik per VPN
  • Uptime Kuma 2.5Viešas būsenos puslapis

Testai ir kokybė

  • pytest 9.1 · HypothesisTestai su tikra PostgreSQL 18
  • Vitest 5 · Testing LibrarySąsajos testai
  • Playwright 1.64Visa sistema naršyklėje
  • Locust 2.46Apkrova: 3 įmonės × 50 000 užsakymų
  • ruff · mypy · ESLint · gitleaksKodo ir paslapčių patikros prieš kiekvieną pakeitimą
Pradėti

Tinka ir vežėjui su keliais vilkikais

Sistema paleidžiama per kelias dienas, be ilgo diegimo, mokymų ir privalomų modulių. Esamus užsakymus galite perkelti įklijavę juos iš Excel.

  1. 1 · Sukuriate paskyrą ir įmonę
  2. 2 · Prijungiate Noium raktą
  3. 3 · Pakviečiate kolegas ir pirmą vairuotoją

Sukurti paskyrą

Prisiregistruokite darbo el. paštu arba Google ar Microsoft paskyra.

Sukurti paskyrąUžsisakyti demonstraciją

Jau turite paskyrą? Prisijungti