# Productie

> PentAGI draaien voor een team — hardening, isolatie, Podman en meerdere instanties.

## [Checklist](https://pentagi.com/nl/docs/deployment/production/#checklist)

* Stel alle inloggegevens in, inclusief `COOKIE_SIGNING_SALT`, voordat je voor het eerst start — zie [Beveiliging](https://pentagi.com/nl/docs/configuration/security/). De installer genereert de salt en de service-wachtwoorden, maar niet de Langfuse- en Grafana-admin-wachtwoorden: stel `LANGFUSE_INIT_USER_PASSWORD` en `password` in de template in, voordat Langfuse voor het eerst start, en wijzig Grafana's standaard `admin` / `admin` na de eerste start. Op een draaiende installatie wijzig je de PostgreSQL- en Neo4j-wachtwoorden binnen de databases voordat je ze wijzigt in `.env`.
* Gebruik een echt certificaat en een stabiele `PUBLIC_URL`.
* Achter een reverse proxy stel je `TRUSTED_PROXIES` in op het adres of CIDR van de proxy. Anders delen alle gebruikers het adres van de proxy, en 30 mislukte aanmeldingen binnen 5 minuten blokkeren iedereen voor 15 minuten.
* Verplaats de uitvoering van [tools](https://pentagi.com/nl/docs/glossary/#tool) naar een speciale [worker node](https://pentagi.com/nl/docs/deployment/worker-node/).
* Schakel [observeerbaarheid](https://pentagi.com/nl/docs/configuration/observability/) in zodat je kosten en storingen kunt volgen.
* Houd de [knowledge graph](https://pentagi.com/nl/docs/glossary/#knowledge-graph) en Langfuse op een privénetwerk.

## [Podman](https://pentagi.com/nl/docs/deployment/production/#podman)

PentAGI draait zowel op Podman als op Docker. In rootless-modus heeft de `scraper`-service extra configuratie nodig omdat containers zonder root-rechten geen bevoorrechte poorten kunnen binden; de README van de repository beschrijft de configuraties voor zowel rootless als met root-rechten.

## [Meerdere instanties (`TENANT_ID`)](https://pentagi.com/nl/docs/deployment/production/#several-instances-tenant_id)

Laat `TENANT_ID` leeg voor een enkele installatie en houd het leeg bij een bestaande: als je het later instelt, verhuist de instantie naar een nieuw, leeg schema dat begint met de standaard `admin@pentagi.com` account, en zijn [flows](https://pentagi.com/nl/docs/glossary/#flow), gebruikers en instellingen verschijnen niet meer. Stel het in op de instanties die je toevoegt wanneer meerdere PentAGI-instanties externe bronnen delen, zoals één PostgreSQL-server, één [worker node](https://pentagi.com/nl/docs/glossary/#worker-node), één Neo4j of één Langfuse:

| Gebied            | Effect van `TENANT_ID=acme`                                           |
| ----------------- | --------------------------------------------------------------------- |
| PostgreSQL        | Werkt binnen schema `acme` in plaats van `public`                     |
| Worker-containers | Heten `acme-pentagi-terminal-<flow>`                                  |
| Knowledge graph   | Groeps-id's worden `acme-flow-<id>`                                   |
| Authenticatie     | Cookie- en tokensleutels bevatten de [tenant](https://pentagi.com/nl/docs/glossary/#tenant) |
| Telemetrie        | Langfuse- en OpenTelemetry-gegevens worden gelabeld met de tenant     |

De waarde moet overeenkomen met `^[a-z][a-z0-9_]{0,31}$`. Hostbronnen zijn niet namespaced. Instanties op één server hebben hun eigen `DATA_DIR` en gepubliceerde poorten nodig. Instanties waarvan de [sandboxes](https://pentagi.com/nl/docs/glossary/#sandbox) op dezelfde Docker-host draaien, op één server of een gedeelde worker node, hebben hun eigen `DOCKER_PORTS_BASE` nodig en, als deze is ingesteld, hun eigen `DOCKER_WORK_DIR`; anders claimen hun sandboxes dezelfde poorten en starten flows niet. Elke base start een venster van 2000 poorten, standaard `28000`, gebruik dus bijvoorbeeld `28000` en `30000`.