Self-hosting
Node u direttorju li jista' jinkiteb huma l-ħtieġa kollha. Id-dikjarazzjonijiet hawn taħt inqraw mill-fajls imsemmija ħdejhom; kull ħaġa li ma setgħetx tiġi kkonfermata mhijiex hawn.
Punti tad-dħul
- package.json jeħtieġ Node >= 22.5. Il-maħżen SQLite huwa l-modulu node:sqlite ta' Node stess.
- M'hemmx lista ta' dipendenzi xejn: applikazzjonijiet, pakki, scripts u testijiet jaħdmu fuq il-librerija standard ta' Node, u d-Dockerfile ma jinstalla xejn.
- Jeżistu tliet proċessi; kull wieħed jiftaħ id-database u jmexxi l-migrazzjoni fil-bidu.
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
Datastore
DATABASE_URL=sqlite:./data/llmeu.db ma jeħtieġ l-ebda server, u d-direttorju u l-file jinħolqu mal-ewwel ftuħ. Il-handle jaħdem fil-modalità WAL b'foreign keys mixgħula u busy timeout ta' 5 s.
packages/shared/src/db/schema.sql hija l-iskema. Hija biss tal-ħolqien u idempotenti, għalhekk li terġa' tħaddimha hija sikura; kolonna miżjuda ma' tabella eżistenti trid tiġi ddikjarata wkoll fil-pass addittiv f'packages/shared/src/db/index.mjs.
URL postgres:// jieħu fergħa tal-adapter separata. Dik il-fergħa teħtieġ il-pakkett pg, li mhuwiex dipendenza ddikjarata, u l-header ta' schema.sql jgħid li l-paths Postgres għandu jiġi trattat bħala mhux verifikat sakemm jeżistu driver reali u migrazzjoni ttestjata. SQLite huwa l-paths li juża dan ir-repożitorju.
CLI tal-operatur
node scripts/db.mjs jaqra DATABASE_URL u ma jeħtieġ l-ebda servizz. Kmandi:
| Kmand | X'jagħmel |
|---|---|
| node scripts/db.mjs migrate | Japplika schema.sql u jirrapporta l-għadd ta' stqarrijiet. |
| node scripts/db.mjs seed | Jiddaħħal jew jaġġorna l-katalgu u l-organizzazzjoni demo, u jikteb iċ-ċavetta demo f'data/demo-key.txt b'mod 0600. |
| node scripts/db.mjs reset | Għal SQLite biss: jneħħi l-file tad-database u l-kumpannji tiegħu -wal u -shm, imbagħad jimmigra u jżerriegħa. Fuq Postgres jirrifjuta. |
| node scripts/db.mjs status | Jistampa l-engine, l-għadd ta' tabelli u l-għadd tar-ringieli ta' kull tabella mhux vojta. |
| node scripts/db.mjs demo-key | Joħroġ ċavetta ġdida għall-organizzazzjoni demo u jistampaha darba. |
| node scripts/db.mjs passwd <email> | Jistabbilixxi l-password ta' utent mis-server u jħassar kull sessjoni ta' dak l-utent. Dan huwa l-paths tal-irkupru meta ma jkunx hemm trasport tal-posta kkonfigurat. Mingħajr --password jiġġenera waħda u jistampaha darba. |
Ambjent
Miġbura skont kif .env.example jiġborhom.
| Grupp | Varjabbli | Noti |
|---|---|---|
| URLs u ports | APP_URL, API_URL, WEB_PORT, API_PORT, API_EMBED, PUBLIC_API_URL | Il-port tal-API awtomatikament huwa 8088, mhux 8080. API_EMBED=false huwa għal deployment li jmexxi l-API bħala proċess tiegħu stess; PUBLIC_API_URL huwa l-bażi murija fis-siltiet tad-dokumentazzjoni. |
| Maħżen tad-dejta | DATABASE_URL, REDIS_URL | DATABASE_URL jagħżel il-maħżen; REDIS_URL huwa riżervat għall-kju tal-impjiegi u mhuwiex moqri mill-perkors tal-kodiċi v1. |
| Inferenza | INFERENCE_MOCK, GPU_ENABLED, VLLM_BASE_URL, VLLM_REGION, VLLM_MODEL_VERSION, VLLM_BASE_URL_<REGION>, DEFAULT_REGION, PARTNER_* | Ara t-taqsima tal-inferenza hawn taħt; PARTNER_* tkopri l-URL bażi tas-sieħeb, ir-reġjun, il-klassi tas-sovranità u ċ-ċavetta API. |
| Billing | FX_EUR_USD, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET | Il-ledger jinżamm f'micros USD u l-EUR jiġi derivat għall-wiri bir-rata FX_EUR_USD. |
| Posta | MAIL_FROM, MAIL_SMTP_HOST, MAIL_SMTP_PORT, MAIL_SMTP_SECURE, MAIL_SMTP_USER, MAIL_SMTP_PASS, MAIL_TIMEOUT_MS, MAIL_API_URL, MAIL_API_KEY | Issettja MAIL_SMTP_HOST għal SMTP, jew MAIL_API_URL ma' MAIL_FROM għal relay HTTP, jew l-ebda waħda. |
| Sigurtà | NODE_ENV, LLMEU_IP_SALT, LLMEU_DEMO_PASSWORD, LLMEU_KEY_ENV | NODE_ENV=production jimmarka l-cookies tas-sessjoni bħala Secure. LLMEU_IP_SALT jagħti salt lill-IP tal-klijent hashed u għandu jinbidel għal kull deployment. LLMEU_KEY_ENV jpoġġi prefiss fuq ċwievet iġġenerati b'llmeu_live_ jew llmeu_test_. |
| Mixxellanji | LOG_LEVEL | LOG_LEVEL jistabbilixxi l-livell minimu tal-log. |
Docker
Compose u l-image huma fakultattivi: is-suite tar-repożitorju stess ma teħtieġx Docker, u l-paths primarju huwa proċess lokali mingħajr servizzi.
- Il-profil default iħaddem web: ports 3000 u 8088, SQLite fuq il-volum llmeu-data f'/app/data, l-API inkorporata, u healthcheck fuq /healthz.
- L-istess image jħaddem il-worker b'node apps/worker/src/run.mjs, jistenna li web isir healthy u jaqsam il-volum llmeu-data.
- Żewġ profili extra huma mitfija default: postgres (postgres:16-alpine) u redis (redis:7-alpine, riservat u mhux moqri mill-paths tal-kodiċi v1).
- Il-profil gpu jħaddem vllm/vllm-openai b'riżerva ta' apparat NVIDIA u jimmonta l-piżijiet read-only mill-host; mhuwiex attivat default, għax li tgħid inferenza fl-UE mingħajr GPU tkun falza.
- Id-Dockerfile huwa FROM node:24-alpine b'tini, l-ebda pass tal-build u l-ebda installazzjoni ta' dipendenzi, jaħdem bħala l-utent node, jikteb biss taħt /app/data, jesponi 3000 u 8088, u jibda apps/web/server/main.mjs.
Backups
node scripts/backup.mjs mingħajr flags jikteb ./backups/llmeu-<stamp>.db. SQLite jiġi kkupjat b'VACUUM INTO, qatt b'cp, għax database WAL ħaj ikkupjat b'cp jista' jagħti stat maqsum jew skadut.
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
Kull backup SQLite jiġi vverifikat qabel l-iskrittura tirrapporta suċċess: jiġi restawrat f'kopja temporanja, PRAGMA integrity_check irid jirritorna ok, l-iskema tiġi applikata mill-ġdid, u l-għadd tar-ringieli għall-mudelli, organizzazzjonijiet u utenti jiġi stampat.
B'URL postgres:// l-iskrittura tuża pg_dump --format=custom u teħtieġ pg_dump fuq PATH; dump ma jistax jinfetaħ bħala database, għalhekk il-għadd tar-ringieli tiegħu jeħtieġ restawr temporanju.
Posta
Posta transazzjonali — reset tal-password, verifika tal-indirizz, stedini — tuża MAIL_SMTP_* jew MAIL_API_URL ma' MAIL_FROM. It-trasport jintgħażel darba fil-bidu u jiġi rrappurtat fuq kull paġna li teħtieġ posta.
Deployment mingħajr l-ebda waħda huwa stat appoġġjat: reġistrazzjoni, dħul, bidla tal-password, timijiet u stedini jaħdmu, iżda posta għar-reset tal-password u għall-verifika ma tistax tiġi pproċessata hemmhekk. Il-paġni jgħidu dan, u node scripts/db.mjs passwd <email> hija r-rotta tal-irkupru.
Backends tal-inferenza
Ringiela ta' endpoint issemmi runtime u reġjun, u r-reġistru tal-backend jagħżel l-adapter skont ir-reġjun, għalhekk endpoint jista' jiġi mwieġeb biss minn magna fir-reġjun li jsemmi.
- INFERENCE_MOCK=true iżomm il-backend mock deterministiku, li ma jeħtieġx GPU u lanqas weights.
- GPU_ENABLED=false iżomm il-backends maniġġjati barra; b'GPU_ENABLED=true, VLLM_BASE_URL japplika għar-reġjun wieħed imsemmi minn VLLM_REGION.
- Deployment b'ħafna reġjuni jistabbilixxi varjabbli waħda għal kull reġjun, imsemmija skont is-slug tar-reġjun (pereżempju VLLM_BASE_URL_DE_FRA). Endpoint f'reġjun mingħajr backend konfigurat jiġi rrifjutat, minflok ma jiġi servut minn magna f'reġjun ieħor.
- Il-backends tas-sieħeb ġejjin minn PARTNER_BASE_URL_<REGION> u jieħdu PARTNER_SOVEREIGNTY u PARTNER_API_KEY; is-server jippermetti l-użu tas-sieħeb meta PARTNER_BASE_URL ikun issettjat.
Mingħajr GPU, il-backend mock iwieġeb. Ir-reġjun tiegħu huwa dev-mock, u l-output tiegħu jgħid li huwa l-backend mock, li ma ntużawx weights reali, u li l-inferenza first-party teħtieġ VLLM_BASE_URL u l-flag gpu_enabled. Suċċess mock li jidher reali jkun l-unika ħaġa li dan il-prodott qatt m'għandu jikkunsinna.