Ise majutamine

Node ja kirjutatav kataloog on kogu nõue. Allolevad väited on loetud nende kõrval nimetatud failidest; miski, mida ei saanud kinnitada, pole siin.

Sisenemispunktid

  • package.json nõuab Node'i versiooni >= 22.5. SQLite'i salvestusruum on Node'i enda node:sqlite moodul.
  • Sõltuvuste loendit pole üldse: rakendused, paketid, skriptid ja testid töötavad Node'i standardteegil ning Dockerfile ei paigalda midagi.
  • Olemas on kolm protsessi; igaüks avab andmebaasi ja käitab migratsiooni käivitamisel.
node apps/web/server/main.mjs                   # hub + console + embedded API
API_EMBED=false node apps/api/src/main.mjs    # API only, no pages
node apps/worker/src/run.mjs                  # probes, latency, rollup, housekeeping

Andmehoidla

DATABASE_URL=sqlite:./data/llmeu.db ei vaja serverit ning kataloog ja fail luuakse esmakordsel avamisel. Käepide töötab WAL-režiimis, välisvõtmed on sees ja ooteaeg on 5 s.

packages/shared/src/db/schema.sql on skeem. See on ainult loomiseks ja idempotentne, nii et uuesti käivitamine on ohutu; olemasolevale tabelile lisatud veerg tuleb samuti deklareerida lisamissammus failis packages/shared/src/db/index.mjs.

postgres:// URL viib eraldi adapteri harule. See haru vajab pg paketti, mis ei ole deklareeritud sõltuvus, ja schema.sql päis ütleb, et Postgresi teed tuleb käsitleda kinnitamata, kuni on olemas tõeline draiver ja testitud migratsioon. SQLite on tee, mida see hoidla käitab.

Operaatori CLI

node scripts/db.mjs loeb DATABASE_URL-i ega vaja ühtegi teenust. Käsud:

Käsk Mida see teeb
node scripts/db.mjs migrateRakendab schema.sql ja teatab lausete arvu.
node scripts/db.mjs seedLisab või värskendab kataloogi ja demo-organisatsiooni ning kirjutab demo-võtme faili data/demo-key.txt õigustega 0600.
node scripts/db.mjs resetAinult SQLite'i jaoks: eemaldab andmebaasifaili ja selle -wal ja -shm kaaslased, seejärel migreerib ja külvab. Postgresi korral keeldub.
node scripts/db.mjs statusTrükib mootori, tabelite arvu ja iga mittetühja tabeli ridade arvu.
node scripts/db.mjs demo-keyVäljastab demo-organisatsioonile värske võtme ja trükib selle üks kord.
node scripts/db.mjs passwd <email>Määrab kasutaja parooli serverist ja kustutab selle kasutaja kõik sessioonid. See on taastetee, kui meiliedastust ei ole seadistatud. Ilma --password valikuta genereerib selle ja trükib üks kord.

Keskkond

Rühmitatud nii, nagu .env.example neid rühmitab.

Grupp Muutujad Märkused
URL-id ja pordidAPP_URL, API_URL, WEB_PORT, API_PORT, API_EMBED, PUBLIC_API_URLAPI port on vaikimisi 8088, mitte 8080. API_EMBED=false on juurutuse jaoks, mis käitab API-t eraldi protsessina; PUBLIC_API_URL on baas, mida näidatakse dokumentatsiooni näidistes.
AndmehoidlaDATABASE_URL, REDIS_URLDATABASE_URL valib andmehoidla; REDIS_URL on reserveeritud tööjärjekorrale ja v1 kooditee seda ei loe.
JäreldamineINFERENCE_MOCK, GPU_ENABLED, VLLM_BASE_URL, VLLM_REGION, VLLM_MODEL_VERSION, VLLM_BASE_URL_<REGION>, DEFAULT_REGION, PARTNER_*Vt allpool olevat järeldamise jaotist; PARTNER_* hõlmab partneri baas-URL-i, regiooni, suveräänsusklassi ja API-võtit.
ArveldusFX_EUR_USD, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRETPearaamatut peetakse USD mikroühikutes ja EUR tuletatakse kuvamiseks kursi FX_EUR_USD järgi.
E-postMAIL_FROM, MAIL_SMTP_HOST, MAIL_SMTP_PORT, MAIL_SMTP_SECURE, MAIL_SMTP_USER, MAIL_SMTP_PASS, MAIL_TIMEOUT_MS, MAIL_API_URL, MAIL_API_KEYMäära MAIL_SMTP_HOST SMTP jaoks või MAIL_API_URL koos MAIL_FROM-iga HTTP relee jaoks või mitte kumbagi.
TurvalisusNODE_ENV, LLMEU_IP_SALT, LLMEU_DEMO_PASSWORD, LLMEU_KEY_ENVNODE_ENV=production märgib sessiooniküpsised Secure. LLMEU_IP_SALT soolab räsitud kliendi IP ja tuleks iga juurutuse puhul muuta. LLMEU_KEY_ENV lisab genereeritud võtmetele eesliite llmeu_live_ või llmeu_test_.
MuudLOG_LEVELLOG_LEVEL määrab minimaalse logitaseme.

Docker

Compose ja image on valikulised: hoidla enda komplekt ei nõua Dockerit ja peamine tee on kohalik protsess ilma teenusteta.

  • Vaikimisi profiil käitab web: pordid 3000 ja 8088, SQLite llmeu-data kettal asukohas /app/data, manustatud API ja tervisekontroll /healthz peal.
  • Sama image käitab töötajat käsuga node apps/worker/src/run.mjs, oodates, et web muutuks terveks, ja jagades llmeu-data ketast.
  • Kaks lisaprofiili on vaikimisi väljas: postgres (postgres:16-alpine) ja redis (redis:7-alpine, reserveeritud ja v1 kooditee poolt mitte loetud).
  • gpu profiil käitab vllm/vllm-openai koos NVIDIA seadme reserveerimisega ja monteerib kaalud hostist kirjutuskaitstult; see ei ole vaikimisi lubatud, sest EU-s järeldamise väitmine ilma GPU-ta oleks vale.
  • Dockerfile on FROM node:24-alpine koos tini'ga, ilma ehitussammuta ja sõltuvuste paigaldamiseta, töötab node kasutajana, kirjutab ainult /app/data alla, avab pordid 3000 ja 8088 ning käivitab apps/web/server/main.mjs.

Varukoopiad

node scripts/backup.mjs ilma lippudeta kirjutab ./backups/llmeu-<stamp>.db. SQLite kopeeritakse VACUUM INTO abil, mitte kunagi cp-ga, sest töötava WAL-andmebaasi kopeerimine cp-ga võib anda rebitud või aegunud oleku.

node scripts/backup.mjs                                  # ./backups/llmeu-<stamp>.db
node scripts/backup.mjs --out /srv/backups/              # explicit destination
node scripts/backup.mjs --verify ./backups/llmeu-<stamp>.db
node scripts/backup.mjs --restore ./backups/llmeu-<stamp>.db --yes
node scripts/backup.mjs --list

Iga SQLite'i varukoopia kontrollitakse enne, kui skript teatab õnnestumisest: see taastatakse ajutisse koopiasse, PRAGMA integrity_check peab tagastama ok, skeem rakendatakse uuesti ja trükitakse mudelite, organisatsioonide ja kasutajate ridade arvud.

postgres:// URL-i korral kasutab skript pg_dump --format=custom ja vajab pg_dump'i PATH-is; dump'i ei saa andmebaasina avada, seega selle ridade arvud nõuavad proovitaastet.

E-post

Tehingukirjad — parooli lähtestamine, aadressi kinnitamine, kutsed — kasutavad MAIL_SMTP_* või MAIL_API_URL-i koos MAIL_FROM-iga. Transport valitakse üks kord käivitamisel ja sellest teatatakse igal lehel, mis vajab posti.

Juurutus, kus pole kumbagi, on toetatud olek: registreerumine, sisselogimine, parooli muutmine, meeskonnad ja kutsed töötavad, kuid parooli lähtestamise ja kinnituskirju seal töödelda ei saa. Lehed ütlevad seda ja node scripts/db.mjs passwd <email> on taastamise tee.

Järeldamise taustarakendused

Lõpp-punkti rida nimetab käituskeskkonna ja regiooni ning taustarakenduse register valib adapteri regiooni järgi, seega saab lõpp-punktile vastata ainult masin selles regioonis, mille see nimetab.

  • INFERENCE_MOCK=true hoiab alles deterministliku mock-taustarakenduse, mis ei vaja GPU-d ega kaalusid.
  • GPU_ENABLED=false jätab hallatavad taustarakendused välja; GPU_ENABLED=true korral kehtib VLLM_BASE_URL üksnes regioonile, mille VLLM_REGION nimetab.
  • Mitut regiooni hõlmav juurutus määrab ühe muutuja iga regiooni kohta, mis on nimetatud regiooni slug'i järgi (näiteks VLLM_BASE_URL_DE_FRA). Lõpp-punkt regioonis, kus pole taustarakendust konfigureeritud, lükatakse tagasi, mitte ei teenindata seda teise regiooni masinast.
  • Partneri taustarakendused pärinevad PARTNER_BASE_URL_<REGION>-ist ja võtavad PARTNER_SOVEREIGNTY ja PARTNER_API_KEY; server lubab partneri kasutamist, kui PARTNER_BASE_URL on määratud.

Ilma GPU-ta vastab mock-taustarakendus. Selle regioon on dev-mock ja selle väljund ütleb, et tegu on mock-taustarakendusega, et ühtegi tõelist kaalu ei käitatud ja et esmase osapoole järeldamine vajab VLLM_BASE_URL-i ja gpu_enabled lippu. Mock-edu, mis näeks tõeline välja, oleks ainus asi, mida see toode ei tohi kunagi välja lasta.