Saját üzemeltetés
A Node és egy írható könyvtár a teljes követelmény. Az alábbi állítások az mellettük megnevezett fájlokból származnak; ami nem volt megerősíthető, az nincs itt.
Belépési pontok
- A package.json a Node >= 22.5 verziót igényli. Az SQLite tároló a Node saját node:sqlite modulja.
- Egyáltalán nincs függőségi lista: az alkalmazások, csomagok, szkriptek és tesztek a Node szabványos könyvtárán futnak, és a Dockerfile semmit sem telepít.
- Három folyamat létezik; mindegyik megnyitja az adatbázist és futtatja a migrációt induláskor.
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
Adattár
A DATABASE_URL=sqlite:./data/llmeu.db nem igényel szervert, és a könyvtár és a fájl az első megnyitáskor létrejön. A kezelő WAL módban fut, bekapcsolt idegen kulcsokkal és 5 másodperces foglaltsági időtúllépéssel.
A packages/shared/src/db/schema.sql a séma. Csak létrehozó és idempotens, így az újrafuttatása biztonságos; egy meglévő táblához hozzáadott oszlopot a packages/shared/src/db/index.mjs fájlban lévő hozzáadó lépésben is deklarálni kell.
A postgres:// URL külön adapterágat vesz igénybe. Ez az ág megköveteli a pg csomagot, amely nem deklarált függőség, és a schema.sql fejléce azt mondja, hogy a Postgres útvonalat ellenőrizetlennek kell tekinteni, amíg valódi illesztőprogram és tesztelt migráció nem létezik. Az SQLite az az útvonal, amelyet ez a tároló futtat.
Üzemeltetői CLI
A node scripts/db.mjs olvassa a DATABASE_URL-t, és nem igényel szolgáltatásokat. Parancsok:
| Parancs | Mit tesz |
|---|---|
| node scripts/db.mjs migrate | Alkalmazza a schema.sql-t, és jelenti az utasítások számát. |
| node scripts/db.mjs seed | Beszúrja vagy frissíti a katalógust és a demó szervezetet, és a demó kulcsot a data/demo-key.txt fájlba írja 0600 módban. |
| node scripts/db.mjs reset | Csak SQLite esetén: eltávolítja az adatbázisfájlt és annak -wal és -shm társfájljait, majd migrál és seedel. Postgres esetén megtagadja. |
| node scripts/db.mjs status | Kiírja a motort, a táblák számát és minden nem üres tábla sorszámát. |
| node scripts/db.mjs demo-key | Kiad egy új kulcsot a demó szervezet számára, és egyszer kiírja. |
| node scripts/db.mjs passwd <email> | Beállítja egy felhasználó jelszavát a szerverről, és törli a felhasználó összes munkamenetét. Ez a helyreállítási útvonal, amikor nincs levelezési átvitel konfigurálva. A --password kapcsoló nélkül generál egyet, és egyszer kiírja. |
Környezet
Csoportosítva, ahogy a .env.example csoportosítja őket.
| Csoport | Változók | Megjegyzések |
|---|---|---|
| URL-ek és portok | APP_URL, API_URL, WEB_PORT, API_PORT, API_EMBED, PUBLIC_API_URL | Az API port alapértelmezett értéke 8088, nem 8080. Az API_EMBED=false olyan telepítéshez van, amely az API-t saját folyamatként futtatja; a PUBLIC_API_URL a dokumentációs részletekben megjelenített alap. |
| Adattár | DATABASE_URL, REDIS_URL | A DATABASE_URL választja ki a tárolót; a REDIS_URL a feladatvárakozási sor számára van fenntartva, és az v1 kódelérési útvonal nem olvassa. |
| Következtetés | INFERENCE_MOCK, GPU_ENABLED, VLLM_BASE_URL, VLLM_REGION, VLLM_MODEL_VERSION, VLLM_BASE_URL_<REGION>, DEFAULT_REGION, PARTNER_* | Lásd az alábbi következtetési részt; a PARTNER_* lefedi a partner alap URL-t, régiót, szuverenitási osztályt és API kulcsot. |
| Számlázás | FX_EUR_USD, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET | A főkönyv USD mikroegységekben van vezetve, és az EUR megjelenítésre az FX_EUR_USD értéken kerül kiszámításra. |
| Levelezés | 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 | Állítsa be a MAIL_SMTP_HOST-ot SMTP-hez, vagy a MAIL_API_URL-t a MAIL_FROM-mal HTTP reléhez, vagy egyiket sem. |
| Biztonság | NODE_ENV, LLMEU_IP_SALT, LLMEU_DEMO_PASSWORD, LLMEU_KEY_ENV | A NODE_ENV=production beállítás Secure jelzővel látja el a munkamenet-sütiket. Az LLMEU_IP_SALT sózza a hashelt ügyfél IP-t, és telepítésenként módosítani kell. Az LLMEU_KEY_ENV a generált kulcsokat llmeu_live_ vagy llmeu_test_ előtaggal látja el. |
| Egyéb | LOG_LEVEL | A LOG_LEVEL beállítja a minimális naplózási szintet. |
Docker
A Compose és a lemezkép opcionális: a tároló saját tesztcsomagja nem igényel Docker-t, és az elsődleges útvonal egy helyi folyamat szolgáltatások nélkül.
- Az alapértelmezett profil a web-et futtatja: 3000 és 8088 portok, SQLite az llmeu-data köteten a /app/data alatt, a beágyazott API, és egy healthcheck a /healthz végponton.
- Ugyanaz a lemezkép futtatja a worker-t a node apps/worker/src/run.mjs paranccsal, megvárva, hogy a web egészségessé váljon, és megosztja az llmeu-data kötetet.
- Két extra profil alapértelmezésben ki van kapcsolva: postgres (postgres:16-alpine) és redis (redis:7-alpine, fenntartva, és a v1 kódútvonal nem olvassa).
- A gpu profil a vllm/vllm-openai-t futtatja NVIDIA eszközfoglalással, és a súlyokat írásvédetten csatolja a gazdagépről; alapértelmezésben nincs engedélyezve, mert EU-s következtetést állítani GPU nélkül hamis lenne.
- A Dockerfile FROM node:24-alpine tini-vel, nincs build lépés és nincs függőségtelepítés, a node felhasználóként fut, csak a /app/data alá ír, a 3000 és 8088 portokat teszi elérhetővé, és az apps/web/server/main.mjs fájlt indítja.
Mentések
A node scripts/backup.mjs kapcsolók nélkül a ./backups/llmeu-<stamp>.db fájlt írja. Az SQLite másolása VACUUM INTO-val történik, soha nem cp-vel, mert egy élő WAL adatbázis cp-vel másolva szakadt vagy elavult állapotot eredményezhet.
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
Minden SQLite mentés ellenőrzésre kerül, mielőtt a szkript sikert jelent: visszaállításra kerül egy ideiglenes másolatba, a PRAGMA integrity_check-nak ok értéket kell visszaadnia, a séma újra alkalmazásra kerül, és a modellek, szervezetek és felhasználók sorszámai kiíródnak.
postgres:// URL esetén a szkript a pg_dump --format=custom parancsot használja, és a pg_dump-nak elérhetőnek kell lennie a PATH-on; a dump nem nyitható meg adatbázisként, így a sorszámaihoz próba-visszaállítás szükséges.
Levelezés
A tranzakciós levelek — jelszó-visszaállítás, címellenőrzés, meghívók — a MAIL_SMTP_* vagy a MAIL_API_URL-t használják a MAIL_FROM-mal. Az átviteli mód egyszer kerül kiválasztásra induláskor, és minden olyan oldalon jelentve van, amelynek levelezésre van szüksége.
Egy olyan telepítés, amelyben egyik sincs, támogatott állapot: a regisztráció, bejelentkezés, jelszócsere, csapatok és meghívók működnek, de a jelszó-visszaállítási és ellenőrző levelek ott nem dolgozhatók fel. Az oldalak ezt jelzik, és a node scripts/db.mjs passwd <email> a helyreállítási útvonal.
Következtetési háttérrendszerek
Egy végpont sor megnevez egy futtatókörnyezetet és egy régiót, és a háttérrendszer-nyilvántartás a régió alapján választja ki az adaptert, így egy végpontot csak az általa megnevezett régióban lévő gép tud kiszolgálni.
- Az INFERENCE_MOCK=true megtartja a determinisztikus mock háttérrendszert, amelyhez nem kell GPU és nem kellenek súlyok.
- A GPU_ENABLED=false kizárja a kezelt háttérrendszereket; a GPU_ENABLED=true esetén a VLLM_BASE_URL arra az egyetlen régióra vonatkozik, amelyet a VLLM_REGION megnevez.
- Egy több régióval rendelkező telepítés régióként egy változót állít be, amelyet a régió slugja után neveznek el (például VLLM_BASE_URL_DE_FRA). Egy olyan régióban lévő végpont, amelyhez nincs konfigurált háttérrendszer, elutasításra kerül, ahelyett hogy egy másik régióban lévő gép szolgálná ki.
- A partner háttérrendszerek a PARTNER_BASE_URL_<REGION>-ból származnak, és a PARTNER_SOVEREIGNTY és a PARTNER_API_KEY értékeket használják; a szerver akkor engedélyezi a partner használatát, ha a PARTNER_BASE_URL be van állítva.
GPU nélkül a mock háttérrendszer válaszol. A régiója dev-mock, és a kimenete jelzi, hogy ez a mock háttérrendszer, hogy nem futottak valódi súlyok, és hogy az első féltől származó következtetéshez VLLM_BASE_URL és a gpu_enabled kapcsoló szükséges. Egy valódinak látszó mock siker lenne az az egy dolog, amit ez a termék soha nem adhat ki.