Omgevingen (SBX en PROD), IP-whitelist en uitrol
FAQ › Profielserver › Omgevingen en uitrol · English
Wat is het?
De profielserver draait in twee gescheiden omgevingen, plus een lokale voor ontwikkeling:
| Naam op de lijn | Profieldomein | Bereikbaar | |
|---|---|---|---|
| SBX (sandbox) | sandbox | <internal-host> | alleen vanaf adressen op de IP-whitelist |
| PROD (productie) | productie | profile.euzos.eu | openbaar (het beheerdomein alleen vanaf de whitelist) |
| lokaal | lokaal | een LAN-adres met poort | alleen voor ontwikkeling |
Elke omgeving heeft een eigen Ed25519-ondertekensleutel, database, accounts, telefoonsleutels, kluissleutel, beheersleutel, proxygeheim en app-registratie voor Graph. De naam van de omgeving en het domein staan in elke handtekening, dus een handtekening uit de ene omgeving is in de andere niets waard. De pakketserver download.euzos.eu wordt door beide gedeeld.
Hoe doe ik…?
Hoe weet een pc welke omgeving hij moet gebruiken?
Een productiebuild van EUZOS (EUZOS_ENV=production) kent alleen PROD: server en publieke sleutel zitten ingebouwd (EUZOS_PRODUCTION_KEY), en uit \EOS\FW\PROFILE.TXT tellen alleen private= en language= (oud prive=, taal=). Een testbuild haalt zijn standaard uit PROFILE.TXT (environment=sandbox|production|local; het oude omgeving=sandbox|productie|lokaal wordt nog gelezen); een voorvoegsel sbx:<e-mail> of prod:<e-mail> in het e-mailveld kiest de omgeving per login, en de consoleopdracht environment [sbx|prod] zet de standaard (actief na een herstart). De hele sessie (pc-token, kluis, profielmap, appcatalogus, meldingen) volgt de omgeving van de login.
Hoe zie ik welke omgeving een server is?
euzos-profielserver key toont de publieke sleutel en de regels voor PROFILE.TXT; GET /api/app/v2/server geeft environment, server, key_id en public_key; de Serverstatus op de beheerpagina toont het ook. Op het inlogscherm en in de taakbalk van de pc staat een SANDBOX-label bij SBX.
Hoe geef ik iemand toegang tot de sandbox (de whitelist)?
Op de VPS, als root: euzos-whitelist add <ip-of-net> [opmerking]; euzos-whitelist list, euzos-whitelist delete <ip-of-net>, en euzos-whitelist refresh (de Caddy-bestanden opnieuw schrijven en herladen, na een nieuwe Caddyfile). De oude subopdrachten lijst, voeg, wis, vernieuw werken nog. De lijst zelf staat alleen op de VPS, nooit in git.
Wat beschermt de whitelist precies?
- Sandbox: de hele profielsite (Caddy kapt iedereen anders af) en SSH (een UFW-regel per adres).
- Productie: SSH en het beheerdomein; de rest van de profielsite (poort 443) is openbaar.
- Op het beheerdomein worden de twee app-linkbestanden onder
/.well-known/voor iedereen doorgelaten (Apple en Google halen die zelf op). - Op de pakketserver beschermt een aparte SSH-whitelist poort 22; 80/443 zijn open.
Hoe rol ik een nieuwe versie van de profielserver uit?
Vanaf de Mac, na een commit:
server/profile/deploy/deploy.sh sandbox [--build-only]
server/profile/deploy/deploy.sh production [--build-only] # ook: productie, prod
server/profile/deploy/deploy.sh prod --binary <pad> # precies het programma van de sandbox
Productie vereist een tag server-v* op HEAD en dezelfde SHA-256 als eerder op de sandbox uitgerold. Hosts en opties komen uit ~/.config/euzos/deploy.conf (oude naam uitrol.conf), buiten git.
Wat doet deploy.sh?
- Controles: een schone werkmap; voor productie een tag
server-v*en dezelfde hash van het programma als op de sandbox. - Test (
cargo test --locked) en bouwt reproduceerbaar (cargo zigbuild --release --locked --target x86_64-unknown-linux-musl). - Met
--build-onlystopt het hier. - Kopieert het programma naar de VPS, controleert daar de SHA-256 en installeert het onder
/opt/euzos-profiel/releases/<git-hash>/. - Vergelijkt configuratie, systemd-unit en Caddyfile met
deploy/en toont de verschillen (overschrijft nooit; die worden per VPS met de hand ingericht). - Maakt een back-up van de database, zet de link
huidigom en herstart de dienst. Staan de geheimen er nog niet, dan zet het alleen de link om en start het niet. - Controleert: dienst actief, geen panic in het journal, de server-API meldt de juiste omgeving en dezelfde publieke sleutel als ervoor.
- Bij een fout: terug naar de vorige release; bij succes een regel in
~/.config/euzos/deploy.log.
Hoe komen de geheimen van productie op hun plek?
Alleen door de eigenaar, op de productie-VPS, met het script euzos-prod-geheimen (deploy/prod-geheimen.sh): proxygeheim, een nieuwe kluissleutel, de beheersleutel, de client-id en het geheim van de app-registratie voor Graph van productie, en de ondertekensleutel (de server maakt hem en toont de publieke sleutel voor PROFILE.TXT). Tot dan start de server niet (euzos-profiel-klaar, deploy/geheimen-klaar.sh). Geheimen komen nooit in git of in het configuratiebestand zelf.
Hoe rol ik de pakketserver uit?
server/download/deploy/deploy.sh [--build-only] (test, bouwt, kopieert, richt zo nodig gebruiker en mappen in, installeert unit en Caddyfile na caddy validate, herstart, controleert op 401 zonder token, en gaat anders terug). Pakketten publiceren: zie Apps en downloads.
Details
Bescherming tegen verwisselen: de server weigert te starten met een sleutel of database van een andere omgeving. Een sandboxdomein moet sbx bevatten; productie weigert zo'n domein en de sandbox eist er een. Productie mag nooit de app-registratie voor Graph van de sandbox gebruiken.
Achter Caddy: sandbox en productie luisteren alleen op localhost; Caddy doet de TLS (Let's Encrypt) ervoor. Het IP van de client komt alleen uit X-Forwarded-For als het verzoek van localhost komt en het proxygeheim in X-Euzos-Proxy meestuurt (proxy_secret_file); anders telt het adres van de verbinding. Lokaal doet de server de TLS zelf (tls_chain, tls_key).
Standaarden die verschillen: admin_page staat uit in productie; reports staat uit in productie (en mag daar alleen samen met admin_token_file); registration_open is no tenzij gezet; allow_v1 alleen lokaal.
Namen op de VPS zijn na de omzetting naar het Engels Nederlands gebleven (hernoemen vraagt een migratie): programma euzos-profielserver, dienst euzos-profiel, mappen /opt/euzos-profiel, /etc/euzos-profiel/profiel.conf, /var/lib/euzos-profiel/, een unit voor uitgaand verkeer euzos-uitgaand.service met uitgaand.nft.
Naslag
CLI-opdrachten
| Opdracht | Waar | Wat het doet |
|---|---|---|
euzos-profielserver [--config <bestand>] start | profiel-VPS | de server draaien |
euzos-profielserver key (oud sleutel) | profiel-VPS | publieke sleutel en de regels voor PROFILE.TXT |
deploy.sh sandbox|production [--build-only] [--binary <pad>] | Mac | de profielserver uitrollen |
server/download/deploy/deploy.sh [--build-only] | Mac | de pakketserver uitrollen |
euzos-whitelist list|add <ip> [opmerking]|delete <ip>|refresh | VPS (root) | de IP-whitelist |
euzos-prod-geheimen | productie-VPS (eigenaar) | de geheimen van productie plaatsen |
environment [sbx|prod], profile [sandbox|production|local [key]] | EUZOS-console (testbuild) | de standaardomgeving van de pc |
Het configuratiebestand komt uit --config of EUZOS_PROFILE_CONFIG (oud EUZOS_PROFIEL_CONFIG); losse sleutels uit EUZOS_PROFILE_<KEY> (oud voorvoegsel EUZOS_PROFIEL_).
Functies en modules
| Functie / module | Rol |
|---|---|
euzos_profileserver::config::Config (load, Environment::parse) | leest de configuratie, oude sleutels, regels tegen verwisselen |
euzos_profileserver::config::LEGACY_KEYS | tabel Nederlandse → Engelse sleutels |
euzos_profileserver::other_site, router | CSRF-controle en de router met beveiligingsheaders |
Kernel: libs/profile/src/config.rs (Config::production_only, Config::for_environment, split_prefix) | de omgevingskeuze van de pc |
Configuratiebestanden
Voorbeeldbestanden in server/profile/deploy/: sandbox.conf, productie.conf, lokaal.conf; op de VPS /etc/euzos-profiel/profiel.conf.
| Sleutel (oud) | Betekenis |
|---|---|
environment (omgeving) | lokaal, sandbox of productie |
address (adres) | luisteradres ip:poort |
domain (domein) | het publieke domein (in QR-codes en handtekeningen) |
database | de SQLite-database |
key (sleutel) | bestand met de Ed25519-ondertekensleutel (gemaakt bij de eerste start, 0600) |
tls_chain (tls_keten), tls_key (tls_sleutel) | alleen lokale TLS |
behind_proxy (achter_proxy) | X-Forwarded-For van Caddy vertrouwen (standaard aan buiten lokaal) |
proxy_secret_file (proxy_geheim_bestand) | bestand met het proxygeheim van Caddy |
admin_token_file (beheer_token_bestand) | beheersleutel van de agent-API's (DriverEnricher, BrowserFeedback) |
vault_key_file (kluis_sleutel_bestand) | kluissleutel |
download_key_file (download_sleutel_bestand), download_base (download_basis) | downloadtokens |
reports (meldingen), reports_database (meldingen_database), reports_max_mb (meldingen_max_mb, standaard 1024) | de meldingendatabase |
web_fallback, allow_v1, registration_open, pc_password, admin_page, admin_domain | schakelaars (zie de andere pagina's) |
qr_duration, confirm_duration, token_duration, app_duration, web_duration | geldigheden in seconden |
apple_app_id, android_package, android_fingerprints | universele links / app-links |
mail, mail_dir, smtp_*, graph_*, sender, reply_to | |
entra_client_id, entra_check_s | inloggen met Microsoft |
Geheimen (SMTP-wachtwoord, beheersleutel, kluissleutel, Graph-geheim) worden als waarde in de configuratie geweigerd; alleen sleutels *_file die naar bestanden met rechten 600/640 wijzen, zijn toegestaan.
Configuratiesleutels op schijf en getypte bevestigingswoorden zijn sinds 27-10-2026 Engels (bijvoorbeeld
WIS-…→WIPE-…,omgeving=→environment=; docs/ENGLISH.md); de Nederlandse namen blijven geaccepteerd. De draadformaten van de profielserver (pc-regelprotocol, ondertekend profiel, ondertekende telefoonberichten, instellingssleutels) blijven Nederlands. In de serverconfiguratie wint de Engelse sleutel als beide er staan.
API-eindpunten
| Methode | Pad | Oud Nederlands pad | Doel |
|---|---|---|---|
| GET | /api/app/v2/server | /api/app/v1/server | omgeving, domein, sleutel-id, publieke sleutel (gebruikt door de controles bij uitrol en door de app) |
Protocolberichten en formaten
PROFILE.TXT op de pc (de sleutel is openbaar). De pc schrijft en verkiest de Engelse sleutels:
server=<domein>
environment=<local|sandbox|production>
key=<publieke Ed25519-sleutel, 64 hex>
key-id=<16 hex> (optioneel)
private=on|off (optioneel)
language=<code> (optioneel)
euzos-profielserver key toont nog de oude Nederlandse vorm (kop In \EOS\FW\PROFIEL.TXT …, dan # EUZOS-profielserver, omgeving <omgeving>, server=, omgeving=<lokaal|sandbox|productie>, sleutel=; Server::profile_txt). Een actuele pc leest beide vormen (en beide bestandsnamen); een Nederlandse sleutel en zijn Engelse tegenhanger tellen als dezelfde sleutel, dus allebei is een fout.
Elk antwoord heeft Cache-Control: no-store, Referrer-Policy: no-referrer, X-Content-Type-Options: nosniff, X-Frame-Options: DENY en Server: euzos-profielserver. Een wijzigend verzoek van een andere site krijgt 403 fout / reden=andere_site; een onbekend pad 404 fout / onbekend pad.
Zie ook
- docs/ENVIRONMENTS.md
- docs/PROFILESERVER-SETUP.md, "Deploying with one command", "Differences for production", "Taking production into use"
- docs/DOWNLOADSERVER.md, "Setup and management"
- docs/ADMIN-PAGE.md, "Own domain and allow list"
- Beheerpagina · Apps en downloads · CLI
EUZOS