Installera och säkra plattformen
PDQ-plattformen driftsätts som en modulär uppsättning Docker-containrar, med en strikt definierad startsekvens och centraliserad metadatakontroll via Active Metadata Engine (AME). Det finns ingen PDQ-specifik runtime under: allt som kan köra containrar kan köra plattformen.
De centrala verktygen som driftsätts är AME, INGEST, DLS och DWA, tillsammans med Config UI och Caddy.
Var varje komponent hör hemma
Driftsättningen handlar om effektivitet och decentralisering där det lönar sig:
- INGEST-agenter placeras helst nära datakällan — lokalt eller i ett separat moln — för att minimera dataöverföringen.
- DWA placeras helst i samma region som måldatabasen.
- AME och DLS körs så nära varandra som möjligt, i samma region som repository-databasen.
Förutsättningar och infrastruktur
Systemkrav
| Minimum | Rekommenderat | |
|---|---|---|
| Docker Engine | 20.10+ | 24.0+ |
| RAM | 8 GB | 16 GB |
| CPU | 4 kärnor | 8 kärnor |
| Lagring | 100 GB | 500 GB |
| Databas | Delad | Dedikerad instans (SQL Server, PostgreSQL eller annan motor som stöds) |
Verifiera värden innan du börjar:
docker --version
docker compose version
VM och grundberoenden
Driftsättningen börjar normalt på en VM — en EC2-instans med Ubuntu 22.04 är referensplattformen — förberedd så här:
- Diskuppsättning: Skapa och montera en extra disk (till exempel
/datadrive), medmklabel gptochmkfs.xfs. Disken används som Dockers data root. - Docker-installation: Installera Docker-motorn, CLI:t, containerd.io och de plugins som krävs.
- Data root och loggning: Redigera eller skapa
/etc/docker/daemon.jsonför att definiera data root ("data-root": "/datadrive/docker") och konfigurera roterande loggar ("max-size": "10m","max-file": "3").
Tjänsteorkestrering och startordning
Komponenterna hanteras av systemd-tjänstefiler som upprätthåller en strikt, linjär beroendekedja via Requires= och After=, så att en tjänst startar bara om den föregående lyckades.
Startordningen som krävs är:
simplitics-ui.service(bastjänst, kräver bara Docker)simplitics-ame.service(Active Metadata Engine — startar efter UI)simplitics-dls.service(Data Lake Service — startar efter AME)simplitics-dwa.service(Data Warehouse Automation — startar efter DLS)simplitics-ingest.service(Data Importer — startar efter DWA)
För att starta hela stacken: aktivera och starta bara den sista tjänsten i kedjan (simplitics-ingest.service).
1. Active Metadata Engine (AME)
- Säkerhetsisolering: Ingen komponent får publicera en mappad port. Ta bort varje portmappning ur Compose-filerna —
ame-compose.ymlinräknad — så att alla tjänster ligger på det interna Docker-nätverket och bara Caddy är exponerad. Se Nätverksexponering nedan. - API-kommunikation: AME är det centrala API-navet och serverar all konfiguration och alla instruktioner till INGEST, DLS och DWA.
2. INGEST (Data Importer)
- Driftsättningsmodell: INGEST körs som en container, en per källanslutning, och fungerar som en agent som kan placeras var som helst — den behöver bara en API-anslutning tillbaka till AME.
- Containerstart: Startas med källsystemets namn som körtidsparameter, till exempel
command: -n <SOURCESYSTEMNAME> -f teams.yaml. - Teams/API-integration: Kräver en Azure AD-appregistrering, klienthemligheter och att AME-anslutningen konfigureras via
/api/v3/ingest/connection/for/:sourceSystemmedAPIAuthMethodsatt till"OAuth 2.0".
En SFTP-källa i INGEST accepterar automatiskt den värdnyckel servern presenterar, så serverns identitet kontrolleras inte. Begränsa nätverksvägen till SFTP-värden, och lita inte på transporten ensam för att avgöra vilken maskin som svarade. Se Arbeta med Ingest.
3. DLS (Data Lake Service)
- Containerskalning: DLS körs som flera containrar — minst sex — med workers som skalar med tillgänglig kapacitet.
- Funktionalitetsdriftsättning: Konfiguration (filstruktur,
rawZonePath,targetMethod) driftsätts via API-anrop till AME på/api/v3.2/sourcefiles/:sourceFilename. - Streaming-konfiguration: Högpresterande streaming för stora XML/JSON-filer aktiveras genom att sätta
useForSplittingRecordstill1på en hierarkinivå, via en backend-uppdatering.
4. DWA (Data Warehouse Automation)
- Placering: DWA körs som flera containrar — minst fyra — helst i samma region som måldatabasen.
- Konfiguration: Vilar på tre metadatainmatningar, som skickas via API:et eller Config UI:
- Målmodelldefinitioner (objekt, nycklar, relationer)
- Källbeskrivning (från DLS)
- Käll-till-mål-mappningar (LOGIC), inklusive attribut och filtrering
- Orkestrering: DWA använder API:er för att beskriva källan, skapa ett körtidsschema och logga förloppet.
Konfiguration efter installation
När stacken kör, öppna Settings i Config UI och sätt de installationsomfattande värdena innan den första laddningen:
- Installation name och Data platform — målmotorn som SQL-generatorn skriver för (Snowflake, Databricks, SQL Server, Synapse, Fabric eller PostgreSQL).
- Compute warehouse / workspace — den beräkningsresurs plattformen kör mot.
- Global naming conventions — kolumnprefix, skiftläge för tabellnamn, mellanrum i tabellnamn och suffix för objektnyckel. Dessa tillämpas av SQL-generatorn på varje genererat objekt, så sätt dem innan du genererar måltabeller.
- Verified file encodings — de kodningar DLS accepterar för inkommande källfiler.

Dashboard bekräftar att stacken är igång och nåbar: den räknar konfigurerade system, källfiler, fält, mappningar och modeller, och ritar flödet från ände till ände över INGEST, DLS och DWA.

Säkerhet och åtkomst
Caddy ligger framför plattformen och hanterar TLS-terminering, API-åtkomst och inloggningsflödet.
Nätverksexponering
Endast port 443 är öppen, och bara på Caddy. Ingen annan port är exponerad, på någon komponent.
- DNS: PDQ-maskinen måste använda ett Fully Qualified Domain Name (FQDN).
- Brandvägg: Port 443 måste vara tillgänglig på servern, men endast inifrån kundens miljö — inte offentligt.
- Nätverk: Skapa ett nytt Docker-nätverk, till exempel
xx_caddynet. - Portmappningar: Varje mappad port måste tas bort ur varje komponents Compose-fil. Komponenterna pratar med varandra över det interna Docker-nätverket; ingenting utom Caddy svarar utifrån.
Entra (Azure AD)-autentisering
- Appregistrering — skapa en appregistrering (till exempel
sp-pdq-caddy-demo) med en Redirect URI som bär FQDN och HTTPS-port:https://{dns_name}:{port}/auth/oauth2/azure/authorization-code-callback. - Gruppanspråk — definiera tre Entra-grupper (
pdq_web_admins,pdq_web_developers,pdq_web_viewers) och uppdatera tokenkonfigurationen så att användarens tilldelade grupper skickas med som ett gruppanspråk. - Behörigheter — ge administratörsmedgivande för
User.ReadochGroupMember.Read.All.
Rollmappning
Installatören mappar rollerna vid installationen, genom att sätta GUID:t för Entra-gruppen som värde på varje intern grupp — authp/admin och authp/user.
Rollerna sträcker sig över två gränssnitt, vilket konsolens egen rolltabell inte framgår av på egen hand:
| Roll | Config UI | DataOps-konsolen |
|---|---|---|
admin | Skriv | Allt, inklusive omstart, hoppa över, trigga och redigera |
developer | Skriv | Endast läsa — inga admin-åtgärder |
reader | Ingen skrivrätt | Endast läsa |
En developer har alltså full skrivrätt där plattformen konfigureras, och ingen möjlighet att ingripa i en pågående laddning. En reader kan inte skriva någonstans.
Underhåll och uppgraderingar
- Allmän felsökning: Den vanliga lösningen för infrastrukturproblem, som en VM-krasch, är att stoppa och starta den virtuella maskinen från molnportalen.
- Container-omstart: Om problemen kvarstår, gå till
/datadrive/configsoch kördocker compose downföljt avdocker compose up -dför alla komponenter (AME, UI, DLS, DWA, INGEST, TOOLS). - Uppgraderingar: Stoppa alla Docker-tjänster först. Uppdatera komponenternas Compose-filer att peka på image-taggen för den version du uppgraderar till — produktversionen, till exempel
3.2. Datumbaserade nummer som25.6.1är inte produktversioner. Utför sedan en manuell pull för att hämta de nya imagesen.
Hemligheter efter en uppgradering
Öppna varje anslutning efter en uppgradering och spara den på nytt.
En lagrad hemlighet återanvänds aldrig, så lösenord, nycklar och eventuell client_secret måste anges på nytt vid varje sparning — se Credentials. Det finns ingen omkrypteringsrutin, och det finns ingenting att återställa: hemligheter lagras aldrig okrypterat.
Att hämta en anslutning och posta tillbaka den krypterar inte om den. Den krypterar det redan krypterade värdet en gång till och lämnar en fungerande anslutning obrukbar.
Show JSON-förhandsvisningen renderar anslutningen som den kommer att skickas, hemligheter inkluderade. Behandla en nedladdad kopia som en autentiseringsuppgift.