Skip to content

System requirements

  • A 64-bit Linux server (Ubuntu 22.04 LTS / Debian 12 / RHEL 9 or equivalent).
  • Docker Engine 24+ and the Docker Compose v2 plugin (docker compose).
  • System timezone and NTP configured (signing timestamps must be accurate).
TierConcurrent users / volumevCPURAMNotes
Evaluation / small≤ 25 active users, light signing48 GBSingle host, all containers
Production / medium≤ 250 active users816 GBSingle host; consider external/managed MySQL
High volume250+ users, heavy OCR/conversion16+32 GB+Split DB to its own host; scale backend replicas behind a LB

Document conversion (LibreOffice), OCR (Tesseract), and PDF signing are the CPU/RAM-heavy operations — size up if you process large/scanned documents frequently.

DataMountSizing guidance
Documents (originals, converted, signed, stamped)qsign_storage volumeThe dominant consumer. Budget generously and monitor — a busy production instance can reach 100 GB+. Plan for growth + backups.
MySQL dataqsign_mysql volumeMetadata only (no document blobs) — typically hundreds of MB to a few GB.
Solr indexqsign_solr volumeSmall relative to documents; rebuildable.
Logsqsign_logs volume / stdoutRotate; size per retention policy.

Use SSD-backed storage for the MySQL and document volumes. Ensure the document volume is included in your backup regime (see 06-operations).

Externally published (by the nginx container only):

PortPurpose
443/tcpHTTPS (primary)
80/tcpHTTP — redirect to HTTPS and ACME / Let’s Encrypt challenges

Internal-only (do NOT expose to untrusted networks): 3000 (frontend), 8000 (backend), 8080/8090 (esign), 3306 (MySQL), 6379 (Redis), 8983 (Solr), 3310 (ClamAV). These communicate over the internal Docker network by service name.

Outbound (egress) the host needs, depending on enabled features:

DestinationRequired for
Your email provider’s API (Zeptomail/Resend) or SMTPTransactional email (signing invites, reminders) — strongly recommended
NSDL/Protean eSign gatewayAadhaar eSign (India only)
RFC-3161 TSA endpointDSC trusted timestamps (if enabled)
Container image registryPulling QSign images (or import archives offline)
Stripe / RazorpayBilling (optional; usually not needed on-prem)
LLM provider, SMS provider, identity providersAI features, SMS, SSO (all optional)

For a fully air-gapped install, disable the optional outbound integrations and provide images as offline archives; e-Signature + DSC (with a local/no TSA) can work without internet, but Aadhaar eSign cannot (it depends on the external gateway).

  • A DNS name for the service (e.g., sign.example.com) resolving to the host.
  • A TLS certificate: either Let’s Encrypt via the bundled certbot (needs port 80 reachable for ACME), or your own/internal CA certificate mounted into nginx.
  • Docker Engine 24+ and Compose v2 installed and running.
  • DNS record for the chosen hostname pointing to the host.
  • Inbound 443 (and 80 for ACME) open to your users; all other ports firewalled.
  • Persistent, backed-up storage for the document + MySQL volumes.
  • Accurate clock (NTP).
  • QSign image references / archives from Quoqo.
  • (If Aadhaar) Protean/NSDL ASP credentials + signing certificate.
  • (If DSC) signing certificate(s); the agent for token-based signing.
  • An email-sending account (provider API key or SMTP).