← FAQ
FAQ

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 lijnProfieldomeinBereikbaar
SBX (sandbox)sandbox<internal-host>alleen vanaf adressen op de IP-whitelist
PROD (productie)productieprofile.euzos.euopenbaar (het beheerdomein alleen vanaf de whitelist)
lokaallokaaleen LAN-adres met poortalleen 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?

  1. Controles: een schone werkmap; voor productie een tag server-v* en dezelfde hash van het programma als op de sandbox.
  2. Test (cargo test --locked) en bouwt reproduceerbaar (cargo zigbuild --release --locked --target x86_64-unknown-linux-musl).
  3. Met --build-only stopt het hier.
  4. Kopieert het programma naar de VPS, controleert daar de SHA-256 en installeert het onder /opt/euzos-profiel/releases/<git-hash>/.
  5. Vergelijkt configuratie, systemd-unit en Caddyfile met deploy/ en toont de verschillen (overschrijft nooit; die worden per VPS met de hand ingericht).
  6. Maakt een back-up van de database, zet de link huidig om en herstart de dienst. Staan de geheimen er nog niet, dan zet het alleen de link om en start het niet.
  7. Controleert: dienst actief, geen panic in het journal, de server-API meldt de juiste omgeving en dezelfde publieke sleutel als ervoor.
  8. 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

OpdrachtWaarWat het doet
euzos-profielserver [--config <bestand>] startprofiel-VPSde server draaien
euzos-profielserver key (oud sleutel)profiel-VPSpublieke sleutel en de regels voor PROFILE.TXT
deploy.sh sandbox|production [--build-only] [--binary <pad>]Macde profielserver uitrollen
server/download/deploy/deploy.sh [--build-only]Macde pakketserver uitrollen
euzos-whitelist list|add <ip> [opmerking]|delete <ip>|refreshVPS (root)de IP-whitelist
euzos-prod-geheimenproductie-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 / moduleRol
euzos_profileserver::config::Config (load, Environment::parse)leest de configuratie, oude sleutels, regels tegen verwisselen
euzos_profileserver::config::LEGACY_KEYStabel Nederlandse → Engelse sleutels
euzos_profileserver::other_site, routerCSRF-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)
databasede 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_domainschakelaars (zie de andere pagina's)
qr_duration, confirm_duration, token_duration, app_duration, web_durationgeldigheden in seconden
apple_app_id, android_package, android_fingerprintsuniversele links / app-links
mail, mail_dir, smtp_*, graph_*, sender, reply_toe-mail
entra_client_id, entra_check_sinloggen 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

MethodePadOud Nederlands padDoel
GET/api/app/v2/server/api/app/v1/serveromgeving, 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