Skip to content

Quickstart & Deployment

Prerequisites

  • Docker Engine 24+ and Docker Compose v2
  • Python 3.11+ (optional, for running the local pytest IQ/OQ qualification suite and GMP binder generator)

Step 1: Configure Environment & Launch the Stack

Copy the GxP environment template and start all 5 orchestrated services:

Terminal window
cp .env.example .env
docker compose up -d --build

Verify that all 5 containers (postgres-control, clickhouse-archive, edge-collector, historian-api, grafana-vision) are running and healthy:

Terminal window
docker compose ps
curl -s http://localhost:8020/api/v1/health | jq .

Expected Health Response

{
"status": "healthy",
"postgres_control_plane": "connected",
"clickhouse_archive": "connected",
"part11_audit_records": 220,
"sensor_data_rows": 1450
}

Step 2: Inspect Seeded GxP Assets, Tags & Part 11 Users

On initial startup, init-postgres/01_control_plane_part11.sql seeds the ISA-95 asset hierarchy, multi-protocol bioprocess tags, and 21 CFR Part 11 user accounts inside an attributed bootstrap transaction (SET LOCAL app.actor_id = 'system_bootstrap').

Seeded ISA-95 Assets (assets)

Asset IDAsset NameISA-95 ltree Asset PathTemplate
1Bioreactor_201BioCorp.Fremont.USP.Bioreactor_201Bioreactor_USP_Template
2Cleanroom_Suite_104BioCorp.Fremont.Facilities.Cleanroom_Suite_104Cleanroom_EMS_Template
3Chrom_Skid_01BioCorp.Fremont.DSP.Chrom_Skid_01Chromatography_DSP_Template

Seeded Multi-Protocol GxP Tags (tags)

Tag IDTag NameISA-95 ltree Asset PathAttributeUnitsStep Tag (LOCF)Deadband (exc_dev)Limits (Low / High)Source Protocol
101BR201_TEMP_PVBioCorp.Fremont.USP.Bioreactor_201Vessel_Temp_PVdegCfalse (LINEAR)0.0535.0 / 38.0OPC_UA
102BR201_PH_PVBioCorp.Fremont.USP.Bioreactor_201Vessel_pH_PVpHfalse (LINEAR)0.026.8 / 7.4OPC_UA
103BR201_AGIT_STATEBioCorp.Fremont.USP.Bioreactor_201Agitator_Statestatetrue (LOCF)0.00.0 / 2.0SIEMENS_S7
301CR104_DIFF_PRESSBioCorp.Fremont.Facilities.Cleanroom_Suite_104Room_Diff_Pressure_PVPafalse (LINEAR)0.512.5 / 50.0BACNET_IP
401CHROM01_UV280_PVBioCorp.Fremont.DSP.Chrom_Skid_01UV280_Absorbance_PVmAUfalse (LINEAR)0.10.0 / 1000.0OPC_DA

Seeded 21 CFR Part 11 Accounts (users)

[!NOTE] init-postgres/01_control_plane_part11.sql seeds bcrypt password hashes via pgcrypto, and app/main.py ensures qualification aliases are synchronized at startup.

User IDFull NameRoleQualification Password
operator_01Sarah Jenkins (Lead USP Operator)OPERATOR / Process_OperatorOperator_Pass_2026! (or Operator_2026!)
qa_approver_01Dr. Marcus Vance (QA Qualified Person)QA_APPROVER / Quality_AssuranceQA_Approve_2026! (or QA_Approver_2026!)

Step 3: Access Interactive Interfaces

  1. Swagger / OpenAPI Interactive REST Docs:
    • Open http://localhost:8020/docs in your browser.
  2. Grafana Vision Operator HMI:
    • Open http://localhost:3020/d/gxphistorian-gxp-bioreactor-hmi
    • Login with admin / GxP_Grafana_2026!
  3. Verify 21 CFR Part 11 Audit Hash Chain:
    Terminal window
    curl -s http://localhost:8020/api/v1/audit-trail/verify | jq .
  4. Run the 15-Test Automated IQ/OQ Qualification Suite:
    Terminal window
    .venv/bin/pytest -v