Docs · Last updated 2026-05-26

Deployment

Three deployment modes. The right one depends on where your CUI is allowed to live and how much infrastructure you want to run yourself.

Comparison

Hosted SaaS On-Prem Docker Air-Gapped
Who runs it Cipher One Tech You You
Internet required Yes Yes (outbound only) No
CUI residency US-East AWS (FedRAMP-aligned) Your data center / cloud Your data center, no egress
FIPS 140-3 crypto Yes (OpenSSL FIPS) Yes (host OS in FIPS mode) Yes (host OS in FIPS mode)
Updates Automatic Pull from registry Signed offline bundle
Setup time ~10 minutes ~2 hours ~4 hours
Best for L1/L2 subs with no CUI residency rules L2/L3 with in-house ops team L3 enterprise with classified-adjacent CUI

Hosted SaaS

Default offering. We run it for you on AWS US-East. Multi-tenant database isolation via the Stancl multi-tenancy package: each tenant has its own MySQL database, its own storage prefix, and its own session pool. The central database holds only tenant metadata + billing.

Provisioning is automatic on Stripe checkout completion: a new tenant database is created, migrations run, the admin user is invited via email. Time from payment to login is under 60 seconds.

SLA: 99.9% monthly uptime. Backups every 6 hours, retained 30 days. Off-site backup to S3 cross-region replicated.

On-Prem Docker

Infrastructure requirements

  • Linux host: RHEL 9, Ubuntu 22.04 LTS, Rocky 9, or Debian 12. FIPS overlay supported.
  • Docker 24+ with docker-compose v2.
  • 4 vCPU, 8 GB RAM minimum for up to 100 users. Add 1 vCPU + 2 GB per additional 100 users.
  • 50 GB disk for the app + database, plus 1 GB per 500 documented controls or POAMs.
  • Outbound HTTPS to registry.readylinegrc.com (image pulls), api.anthropic.com (AI features, optional), api.stripe.com (billing, N/A for on-prem perpetual licenses).
  • Public DNS + Let's Encrypt cert, OR your own internal CA cert + manual hostname.

Network topology

                        ┌─────────────────────────────────────┐
                        │  TLS termination + WAF (nginx)      │
                        │  Port 443 inbound                   │
                        └─────────────────┬───────────────────┘
                                          │
                            ┌─────────────┴─────────────┐
                            │ Readyline app (PHP-FPM)   │
                            │ Stateless, horizontal     │
                            └─────────────┬─────────────┘
                                          │ TLS optional
                            ┌─────────────┴─────────────┐
                            │  MySQL 8.0  (encrypted)   │
                            │  + Redis cache + queue    │
                            └───────────────────────────┘

Install

curl -fsSL https://docs.readylinegrc.com/install.sh -o install.sh
sudo bash install.sh --hostname grc.your-domain.com --license YOUR-LICENSE-KEY

# After ~5 minutes:
#   - Docker compose stack up
#   - DB initialized + migrated
#   - Admin invite email sent

# Verify:
docker compose -f /opt/readyline/docker-compose.yml ps

Upgrade

cd /opt/readyline
docker compose pull
docker compose down
docker compose run --rm app php artisan migrate --force
docker compose up -d

Releases follow semver. Patch releases are deploy-safe (no manual steps). Minor releases may add new env vars (documented in CHANGELOG.md). Major releases are quarterly and include a migration script with rollback notes.

Air-Gapped

Same Docker stack as on-prem, but the image pull happens off the host. We ship a signed bundle (.tar.gz + .sig) on USB or via the customer's secure transfer method. The bundle includes the application image, the MySQL image, the Redis image, and a verification script.

Install

# Verify signature on a trusted host before crossing the air gap
gpg --verify readyline-v0.7.0-airgap.tar.gz.sig

# On the air-gapped host:
tar xzf readyline-v0.7.0-airgap.tar.gz
cd readyline-v0.7.0-airgap
docker load -i images/readyline-app.tar
docker load -i images/mysql.tar
docker load -i images/redis.tar
sudo bash install.sh --offline --hostname grc.internal --license LIC

Updates

Update bundles ship quarterly. Each bundle is GPG-signed by our release key (fingerprint published at readylinegrc.com/.well-known/pgp-key.txt). The update process is a docker load of the new images plus a docker compose restart with php artisan migrate --force for any schema changes.

Data import / export

On install, the platform can ingest:

  • Existing SSP narratives (DOCX, ODT), parsed and mapped to NIST control IDs.
  • POAM spreadsheets (CSV, XLSX), column mapping wizard for common formats (eMASS export, CMMC-AB CRM, Excel-based POAM templates).
  • NIST 800-171 self-assessment scores (XLSX, OSCAL JSON).

On export, every artifact can be produced in: PDF (DomPDF), DOCX (PhpWord), OSCAL JSON, CSV. CLI command php artisan tenant:export dumps the full tenant in a portable archive for offboarding.