Regulated industries have a data sovereignty problem that cloud-only quality management vendors cannot solve. Pharmaceutical companies operating under 21 CFR Part 11 need to demonstrate control over their electronic records. Defense contractors cannot place quality data on third-party servers. Medical device companies in the EU face GDPR constraints on where personal data associated with quality records can be processed. Biotechs with pre-submission data have trade secret concerns that make any external hosting a boardroom-level risk discussion.

The result: many regulated companies that could benefit from modern quality management software continue using Excel spreadsheets and shared drives because the available alternatives require surrendering control of their data to a vendor’s cloud.

QAtrial – Self-Hosted Docker Deployment
QAtrial · Self-Hosted Deployment
Docker Changes
the Game for
Regulated Companies
Regulated industries have a data sovereignty problem that cloud-only vendors cannot solve. Many companies continue using Excel because the alternatives require surrendering data control. QAtrial changes this equation with a single command.
$ docker-compose up
# → Full QMS running in minutes. Application + PostgreSQL + volumes.
Why Cloud-Only Doesn’t Work
21 CFR Part 11: demonstrate control over electronic records
Defense contractors: quality data cannot go on third-party servers
EU medical device companies: GDPR constraints on personal data location
Biotech pre-submission data: trade secret boardroom-level risk
2
Containers: app + PostgreSQL
$0
License cost · AGPL-3.0
Air-
Gap
Ollama local AI supported
5+
OIDC SSO providers
What Runs Inside
Two Containers + Persistent Volumes — Fully Documented for Regulated Deployments
⚙️ Application Container port 3001
Node.js + compiled Hono server
60+ REST API endpoints · 21 route groups
JWT auth · bcrypt 12 rounds
Prisma ORM v7 · 15 database models
Webhook dispatch · HMAC-SHA256 signing
Server-side AI proxy (API keys never in browser)
React 19 frontend as static files (14 Vite chunks)
Health check: GET /api/status
🗄️ Database Container PostgreSQL 16
PostgreSQL 16 · ACID transactions
15 data models (User → AuditLog → Webhook)
Append-only audit log · 16 action types
Referential integrity via Prisma schema
pg_isready health check before app starts
Named volume: qatrial-db-data
Automatic Prisma migrations on startup
💾 Docker Compose Config docker-compose.yml
Health checks on both containers
db must be healthy before app starts
qatrial-db-data: persists across restarts
qatrial-uploads: evidence file storage
Environment via .env file (JWT, AI, SSO, DB)
Multi-stage Dockerfile → slim runtime image
No reverse proxy required for basic deploy
No external service dependencies
Air-Gapped Deployment
Local AI with Ollama — No Internet Required
Environment Configuration
AI_PROVIDER_TYPE=openai
# Ollama uses OpenAI-compatible API
AI_PROVIDER_URL=http://ollama-server:11434/v1
AI_PROVIDER_MODEL=llama3:70b
# All 9 AI functions operate without
# any external network calls
All 9 AI Functions Work Offline
Test case generation from requirements
Risk classification (severity + likelihood)
Gap analysis (ISO 13485, QMSR, standards)
CAPA root cause analysis + suggestions
Executive compliance brief
Validation Summary Report (VSR)
Requirement extraction from documents
Requirement quality check (9 dimensions)
ISO 13485 clause-level gap analysis
For defense, pharma R&D, and government: This is not a workaround — it is a first-class deployment option. Quality data never leaves the controlled environment. The AI model runs on the same network as QAtrial.
Cloud vs. Self-Hosted
Side-by-Side: Cloud-Only QMS Vendors vs. QAtrial
Consideration Cloud-Only Vendor (Veeva · MasterControl · ETQ) Self-Hosted QAtrial
Data location Vendor’s data centers — typically US/EU, limited choice Your data center, cloud account, or server closet
Data sovereignty Dependent on vendor’s hosting region options Complete control — deploy anywhere, air-gap if needed
Network requirement Internet required for all operations Fully functional offline / air-gapped with Ollama
Infrastructure audit Vendor’s SOC 2 / ISO 27001 reports — no access You audit your own infrastructure directly
Source code access Proprietary — no access, ever Full source under AGPL-3.0 — inspect audit implementation
AI data handling Varies by vendor; may process quality data externally Server-side proxy only; local Ollama for full isolation
License cost $50,000–$500,000+/year (users + modules) $0 — AGPL-3.0, no per-user or per-module fees
Validation package Vendor provides documentation (black box) IQ/OQ/PQ protocols + traceability matrix included in repo
The trade-off is real: cloud vendors provide managed infrastructure, support contracts, and implementation services. Self-hosted QAtrial requires IT capacity to maintain the deployment. But for organizations where data sovereignty is non-negotiable, the choice is between a self-hosted solution and no modern solution at all.
SSO Integration
OIDC Single Sign-On — 4 Environment Variables
Supported Identity Providers
Okta
Most common in pharma and life sciences
Azure AD / Entra ID
Microsoft 365 organizations
Auth0
Technology-forward regulated companies
Keycloak
Open-source — aligns with QAtrial’s philosophy
Google Workspace
Organizations using Google’s identity platform for SSO
SSO Configuration (.env)
SSO_ENABLED=true
SSO_ISSUER_URL=https://your-idp.example.com
SSO_CLIENT_ID=your-client-id
SSO_CLIENT_SECRET=your-client-secret
# SSO_DEFAULT_ROLE=qa_engineer
Auto-provisioning flow: OIDC discovery → IdP redirect → auth code exchange → user auto-provisioned on first login with configurable default role. No manual account creation. Deprovisioning follows organization’s existing IdP processes.
Total Cost of Ownership
Year-One Cost for a 50-User Deployment
License
$0
AGPL-3.0
No per-user fees. No module fees. No annual renewals. No enterprise tier. No professional services required for basic deployment.
Infrastructure / Month
$150–300
4 CPU · 8 GB RAM · 100 GB
AWS EC2 with EBS at these specs. On-premises runs on hardware most IT departments already have. Scales vertically if needed.
Deployment Labor
1 day
DevOps engineer
Docker Compose handles orchestration. SSL termination via nginx/Traefik/Caddy adds ~1 hour. SSO configuration is environment variables.
Ongoing Maintenance
2–4 hrs
Per month of IT time
pg_dump backups, Docker image updates when new versions release, SSL certificate renewal. Validation re-execution at major version changes.
Year-one total for 50 users: approximately $5,000–$10,000 in infrastructure and labor (including IQ/OQ validation at 2–3 days). Compare to six-figure annual license fees for commercial alternatives — Veeva, MasterControl, ETQ typically start at $50,000–$500,000+/year.
Production Hardening
8-Step Regulated Deployment Checklist
1
Change the JWT Secret
Set a strong, unique JWT_SECRET in the .env file. The default is for development only — production secrets must be rotated and stored in a secrets manager.
JWT_SECRET=
2
Configure HTTPS
Place a reverse proxy (nginx, Traefik, Caddy) in front of QAtrial with a valid TLS certificate. Required for production access and for 21 CFR Part 11 logical security.
nginx · Traefik · Caddy
3
Enable SSO
Configure OIDC to integrate with the organization’s identity provider. Centralizes user management, ensures deprovisioning follows organizational processes, and creates a documented access governance trail.
SSO_ENABLED=true
4
Set Up Database Backups
Automated daily pg_dump or volume snapshots with tested restoration procedures. The audit log in PostgreSQL is the system of record — data loss is unacceptable in regulated environments.
pg_dump · volume snapshots
5
Configure AI Provider
Set server-side AI environment variables. Use Ollama for air-gapped deployments. API keys are stored as environment variables and never exposed to browser clients.
AI_PROVIDER_TYPE · AI_PROVIDER_URL
6
Execute IQ/OQ
Run the provided validation protocols from docs/validation/. Document results with actual values, pass/fail, tester initials, and date. Have a second person review and co-sign.
docs/validation/ · 27 test steps
7
Network Segmentation
Place QAtrial on an appropriate network segment per the organization’s security architecture. For pharmaceutical and medical device deployments, this typically means an isolated QMS network segment.
Firewall · VLAN · VPN
8
Configure Monitoring
Use the /api/status endpoint for health monitoring. Reports version, uptime, database connectivity, AI provider status, storage health, and available memory.
GET /api/status
GET /api/status → reports: version · uptime · db_connected · ai_provider_status · storage_health · memory_available
“The barrier to entry for enterprise-grade quality management has dropped from a six-figure procurement exercise to a single command.”
🐳
docker-compose up. Full stack: application, database, volumes, health checks. Functional within minutes of cloning.
📡
Air-gap with Ollama. All 9 AI functions operate without internet. Quality data never leaves the controlled environment.
🔑
OIDC SSO from day one. Okta, Azure AD, Auth0, Keycloak, Google. 4 environment variables. Auto-provisioning on first login.
💰
$5,000–$10,000 year one. Infrastructure + validation labor for 50 users. Not $500,000/year for a vendor license.

QAtrial v3.0.0 changes this equation. A single command deploys a complete quality management system on infrastructure the company owns and controls.

One Command, Full Stack

docker-compose up

This starts two containers:

  1. QAtrial application server — Hono (TypeScript HTTP framework) serving both the REST API and the React frontend as static files. Runs on port 3001.
  2. PostgreSQL 16 database — With health checks, a named volume for persistent data, and automatic initialization.

The Docker Compose configuration includes:

  • Health checks on both containers, ensuring the database is ready before the application attempts to connect.
  • Named volumes for database storage (qatrial-db-data) and file uploads (qatrial-uploads), so data persists across container restarts.
  • Environment variable configuration via .env file for JWT secrets, AI provider settings, SSO configuration, and database credentials.
  • Static file serving — the multi-stage Dockerfile builds the React frontend, compiles the Hono server, and produces a slim runtime image that serves everything from a single process.

No reverse proxy configuration is required for basic deployment. No external service dependencies. No license key activation. The system is functional within minutes of cloning the repository.

Express Schedule Free Employee Scheduling Software [PC/Mac Download]

Express Schedule Free Employee Scheduling Software [PC/Mac Download]

  • User-friendly drag & drop scheduling: Simple shift planning interface
  • Manage time-off and holidays: Add sick leave, breaks, holidays
  • Email schedules to staff: Send schedules directly via email

As an affiliate, we earn on qualifying purchases.

As an affiliate, we earn on qualifying purchases.

What Runs Inside the Containers

Understanding what is deployed matters for regulated companies that must document their system architecture.

Application container:

  • Node.js runtime executing the compiled Hono server
  • 60+ REST API endpoints across 21 route groups
  • JWT authentication with bcrypt password hashing (12 rounds)
  • Prisma ORM v7 managing 15 database models
  • Webhook dispatch service with HMAC-SHA256 signing
  • Server-side AI proxy (API keys stored as environment variables, never exposed to browsers)
  • Static file serving for the React 19 frontend (Vite-built, code-split into 14 chunks)

Database container:

  • PostgreSQL 16 with ACID transactions
  • 15 data models: User, Organization, Project, Requirement, Test, CAPA, Risk, Evidence, Approval, Signature, AuditLog, Webhook, Integration, and supporting tables
  • Append-only audit log table capturing 16 action types
  • Referential integrity enforced by Prisma schema

File storage:

  • Evidence files stored in a dedicated volume mount
  • Accessible via the evidence API endpoints
  • Backed up alongside the database volume
DevOps Tools for Java Developers: Best Practices from Source Code to Production Containers

DevOps Tools for Java Developers: Best Practices from Source Code to Production Containers

As an affiliate, we earn on qualifying purchases.

As an affiliate, we earn on qualifying purchases.

Air-Gapped Deployment: Local AI with Ollama

Some regulated environments — particularly in defense, certain pharmaceutical R&D settings, and government — operate air-gapped networks with no internet connectivity. QAtrial supports this scenario.

The AI co-pilot is configured via environment variables. By setting AI_PROVIDER_TYPE to openai (Ollama uses the OpenAI-compatible API) and pointing AI_PROVIDER_URL to a local Ollama instance, all nine AI functions operate without any external network calls:

  • Test case generation
  • Risk classification
  • Gap analysis (regulatory standards, ISO 13485, QMSR)
  • CAPA root cause suggestions
  • Executive compliance brief
  • Validation Summary Report
  • Requirement extraction
  • Requirement quality check

The AI model runs on the same network — or even the same server — as QAtrial. Quality data never leaves the controlled environment. For organizations that cannot use cloud AI under any circumstances, this is not a workaround; it is a first-class deployment option.

AI_PROVIDER_TYPE=openai
AI_PROVIDER_URL=http://ollama-server:11434/v1
AI_PROVIDER_MODEL=llama3:70b
Amazon

regulatory compliance software for regulated industries

As an affiliate, we earn on qualifying purchases.

As an affiliate, we earn on qualifying purchases.

SSO Integration from Day One

Enterprise deployment requires integration with existing identity infrastructure. QAtrial supports OIDC-based single sign-on with:

  • Okta — The most common enterprise IdP in pharmaceutical and life sciences companies.
  • Azure AD / Entra ID — Standard for organizations on Microsoft 365.
  • Auth0 — Common in technology-forward regulated companies.
  • Keycloak — Open-source IdP, often used in self-hosted environments that align with QAtrial’s own philosophy.
  • Google Workspace — For organizations using Google’s identity platform.

Configuration requires four environment variables:

SSO_ENABLED=true
SSO_ISSUER_URL=https://your-idp.example.com
SSO_CLIENT_ID=your-client-id
SSO_CLIENT_SECRET=your-client-secret

QAtrial performs OIDC discovery (.well-known/openid-configuration), redirects to the IdP for authentication, exchanges the authorization code for tokens, and auto-provisions the user on first login with a configurable default role. No manual account creation needed. User deprovisioning follows the organization’s existing IdP processes.

The “Sign in with SSO” button appears on the login page only when SSO is configured, keeping the interface clean for deployments that use local authentication.

UbiBot GS1-AETH1RS Ethernet & WiFi Temp/Humidity/Illumination Sensor, Data Logger, External Probe, Scheduled Reports, Multiple Alert, Support Local Deployment (2.4GHz WiFi & Ethernet, No Hub Required)

UbiBot GS1-AETH1RS Ethernet & WiFi Temp/Humidity/Illumination Sensor, Data Logger, External Probe, Scheduled Reports, Multiple Alert, Support Local Deployment (2.4GHz WiFi & Ethernet, No Hub Required)

  • High-Quality Swiss Sensors: Accurate temperature, humidity, and light monitoring
  • Customizable External Probes: Supports air/soil temperature, PT-100, CO2
  • Wide Measurement Range: -4°F to 140°F, 0% to 90% RH, 0.01-157K lux

As an affiliate, we earn on qualifying purchases.

As an affiliate, we earn on qualifying purchases.

Comparison: Self-Hosted QAtrial vs. Cloud-Only Alternatives

The established quality management vendors — Veeva Vault Quality, MasterControl, ETQ Reliance, Trackwise — operate exclusively or primarily as cloud SaaS platforms. This model works for many companies, but creates specific challenges for regulated organizations:

ConsiderationCloud-Only VendorSelf-Hosted QAtrial
Data locationVendor’s data centers (typically US/EU)Your data center, your cloud account, or your server closet
Data sovereigntyDependent on vendor’s hosting region optionsComplete control — deploy anywhere
Network requirementInternet required for all operationsFully functional offline / air-gapped
Audit of infrastructureVendor provides SOC 2 / ISO 27001 reportsYou audit your own infrastructure
Source code accessProprietary, no accessFull source code under AGPL-3.0
CustomizationConfiguration within vendor’s frameworkModify source code as needed
License cost$50,000-500,000+/year depending on users and modules$0
Vendor dependencyVendor controls updates, pricing, and continued operationCommunity-maintained, fork if needed
AI data handlingVaries by vendor; may process data externallyServer-side proxy; local AI option with Ollama
ValidationVendor provides validation documentationValidation package included (IQ/OQ/PQ)

The trade-off is real: cloud vendors provide managed infrastructure, support contracts, and implementation services. Self-hosted QAtrial requires IT capacity to maintain the deployment. But for organizations where data sovereignty is non-negotiable, the choice is between a self-hosted solution and no solution at all.

Total Cost of Ownership

License cost: $0. AGPL-3.0. No per-user fees. No module fees. No annual renewals.

Infrastructure cost: A QAtrial deployment with PostgreSQL runs comfortably on a server with 4 CPU cores, 8 GB RAM, and 100 GB storage. On AWS, this is approximately $150-300/month for an EC2 instance with EBS. On-premises, it runs on hardware most IT departments already have.

Deployment cost: A competent DevOps engineer can deploy QAtrial in a day. The Docker Compose file handles orchestration. SSL termination via a reverse proxy (nginx, Traefik, Caddy) adds another hour.

Maintenance cost: PostgreSQL backup (automated via pg_dump or cloud snapshot), Docker image updates when new versions are released, SSL certificate renewal. Estimated: 2-4 hours per month of IT time.

Validation cost: IQ/OQ execution using the provided protocols. Estimated: 2-3 days for a validation engineer to execute and document.

Year-one total for a 50-user deployment: approximately $5,000-10,000 in infrastructure and labor. Compare this to six-figure annual license fees for commercial alternatives.

Production Hardening Checklist

For regulated deployments, the following steps are recommended beyond the basic docker-compose up:

  1. Change the JWT secret — Set a strong, unique JWT_SECRET in the .env file.
  2. Configure HTTPS — Place a reverse proxy (nginx, Traefin, Caddy) in front of QAtrial with a valid TLS certificate.
  3. Enable SSO — Configure OIDC to integrate with the organization’s identity provider.
  4. Set up database backups — Automated daily pg_dump or volume snapshots, with tested restoration procedures.
  5. Configure AI provider — Set server-side AI environment variables. Use Ollama for air-gapped deployments.
  6. Execute IQ/OQ — Run the provided validation protocols and document the results.
  7. Network segmentation — Place QAtrial on an appropriate network segment per the organization’s security architecture.
  8. Monitoring — Use the /api/status endpoint for health monitoring. It reports version, uptime, database connectivity, AI provider status, storage health, and available memory.

Conclusion

Docker deployment transforms QAtrial from a development tool into a production quality management system. Regulated companies gain a validated, traceable, auditable quality workspace that runs on infrastructure they control, connects to identity providers they manage, and uses AI models they choose — including models that run entirely within their network.

The barrier to entry for enterprise-grade quality management has dropped from a six-figure procurement exercise to a single command.

QAtrial v3.0.0 is available at https://github.com/MeyerThorsten/QAtrial.

You May Also Like

QAtrial vs Spreadsheets for Regulated Quality Work

Spreadsheets are the default quality management tool in regulated industries. Not because…

What Is QAtrial and Who Is It Built For?

Quality management in regulated industries has a tooling problem. Enterprise platforms like…

Why QAtrial Is More Than a Test Management Tool

When teams in regulated industries first encounter QAtrial, they often see the…

How to Set Up Your First QAtrial Workspace

This article walks through installing QAtrial and creating your first project using…