Deployment profiles
Production, offline import, hybrid, client cloud and development, and what each lets out.
The deployment profile decides what may connect where. It is one word in deploy/config/profile, read once at start-up; a change takes effect at the next restart and is audited. Without the file, the profile is production.
echo production > deploy/config/profile # or offline_import, hybrid, client_cloud, development make up PROFILES= # restart the stack
| Profile | Plant connection | Language model | What leaves the edge PC |
|---|---|---|---|
production (default) | Live, read-only | On the edge PC or plant network only | Nothing |
offline_import | None: alarm logs, trend exports and code exports arrive as files | On the edge PC only | Nothing |
hybrid | Live, read-only | An endpoint the site approved in approved_endpoints | Only the question, the conversation and the cited excerpts, to that endpoint; each call audited with the endpoint, time and source IDs |
client_cloud | A site collector reads and sends outbound to the client's own cloud account | In the client's cloud account or an approved endpoint | The values, alarm events and gaps the collector reads, to the client's receiver |
development | Any, including the simulator | Any, including cloud models | Not for plant data |
Rules the profiles enforce
- Production and offline import are air-gapped. A cloud model configured in
llm.jsonis refused at start-up; no telemetry, licence or update check is made. - HTTPS only outside development: the Web UI needs
BOOLE_TLS_CERTandBOOLE_TLS_KEY, and HTTP is refused. - OPC UA security
Noneis refused outside development. - A customer site never runs in development: with
customer_site: trueinsite.yaml, the development profile is refused at start-up. - Demo-only actions (replaying a fault, emptying process data with
--reset) are refused outside development.
Offline import
Use it where the conduit to the control network is not approved yet, or for the week-0 assessment. Import alarm logs and trend exports with python -m edge.import_history, and code exports and documents through the watched folder or the importers: see Connect a historian and Import code exports.
Hybrid
List the endpoint in site.yaml and select the profile:
approved_endpoints: ["https://client-tenant.openai.azure.com/openai/v1"]
An empty list accepts no external endpoint. The flow is F7 in Network and security.
Client cloud
Only a site collector stays on site (deploy/compose.collector.yaml); the store, the assistant and the receiver run in the client's own cloud account (deploy/compose.yaml with deploy/compose.cloud.yaml). Both sides refuse to start in any other profile.
# cloud side docker compose -f deploy/compose.yaml -f deploy/compose.cloud.yaml up -d python -m edge.receiver_service add SITE --file /config/collectors.json # prints the collector's token once # site side: put the token in deploy/secrets/uplink_token, set BOOLE_UPLINK_URL docker compose -f deploy/compose.collector.yaml up -d
The collector opens the only connection (outbound HTTPS, F13) and listens on no port. While the receiver cannot be reached it keeps everything in its local spool and sends it in order when the link is back; if the spool fills (5 million records by default), the oldest readings are dropped and recorded as a data gap.