Getting Started
There are a few ways to run PatchPilot365, depending on what youโre trying to do. Pick the one that matches your goal โ you can always move to a more complete path later.
| Path | Needs | Best for |
|---|---|---|
| Azure Deployment | An Azure subscription | The primary, supported way to run PatchPilot365 for real, without hand-provisioning a server yourself. |
| Manual Deployment | Your own Azure subscription, on-prem hardware, or a third-party host + Docker | Self-hosting on infrastructure you provision and manage yourself. |
| Demo Mode | A running instance (or Node 24+/pnpm 10+ for local dev) | Clicking through the console with fictional data โ no real tenant. |
Every path that connects a real tenant ends the same way: the pairing step, where a Global Administrator runs one PowerShell script that creates the Entra app registration and hands your running instance real credentials.
Non-negotiables
These hold regardless of which path you choose:
- You control the infrastructure โ one-click Azure Deployment, or self-hosted on your own Azure subscription, on-prem, or third-party hosting.
- Tokens stay server-side โ the browser only ever holds a session cookie, never a Microsoft Graph token.
- Every Graph call is audited โ engineer, tenant, endpoint, method, a hash of the payload (never the raw payload), response status, latency, timestamp.
- Graceful licensing degradation โ PatchPilot365 never shows a button for a feature the tenant isnโt licensed for.
- Per-tenant isolation โ token cache, job queue, and audit log are all keyed by tenant.
- Read-only first โ a new tenant integration starts read-only; write actions are opted in per tenant.
scripts/Deploy-PatchPilot.ps1is the canonical way to create the Entra app registration. The in-app โSync permissionsโ action can refresh scopes on an app the script already created, but never creates one itself.- Secrets live in
.envwith locked-down file permissions, or, for a paired instance, encrypted in the database. A paired instance authenticates to Entra with a certificate whose private key never leaves the server. On an Azure VM it uses the VMโs managed identity by default, or, opt-in, a credential kept in Azure Key Vault.