SimplyFill.

Self-hosted deployment

Run SimplyFill in your own infrastructure on the ENTERPRISE tier.

Self-hosted deployment

Self-hosting SimplyFill is available on the ENTERPRISE tier and ships as a Helm chart for Kubernetes. The chart deploys the API, the dashboard, async workers, Postgres, Redis, and an S3-compatible object store interface — everything the SaaS version runs minus the multi-tenant routing layer.

This guide is a high-level overview. For the full runbook (network requirements, IAM policies, secrets management, upgrade procedures), ENTERPRISE customers receive a private deployment guide as part of onboarding.

When to self-host

Common reasons:

  • Data residency — your compliance posture requires PHI to remain inside a specific country / region not yet served by SimplyFill's managed cloud.
  • Air-gapped environments — defense, certain regulated finance, or regulated pharma environments where outbound internet access is restricted.
  • Custom KMS — you want to bring your own HSM and don't want to manage a CMK boundary across your provider and ours.
  • Predictable pricing at extreme volume — you generate more than ~5M PDFs/month and your infra cost beats our managed cost.

If none of those apply, the managed SaaS is almost certainly the right answer. Self-hosting adds an operations burden you carry.

Architecture

A self-hosted SimplyFill cluster includes:

ComponentRoleDefault replicas
apiFastAPI app — REST endpoints3
dashboardVue 3 SPA — /app UI2
workerCelery worker — async PDF generation, batch jobs4 (scale to load)
schedulerCelery beat — quota windowing, cleanup tasks1
postgresPrimary databaseManaged (RDS / CloudSQL) or in-cluster
redisCelery broker + cacheManaged (ElastiCache) or in-cluster
object-storePDF storageS3-compatible (S3, GCS, MinIO, R2)

The chart pins versions for every component and runs through a published integration test before each release.

Minimum sizing

For up to 100,000 PDFs/month:

ResourceMinimum
Kubernetes1.27+
Postgres14+, 4 vCPU, 16 GB RAM, 100 GB storage
Redis6+, 2 vCPU, 4 GB RAM
Object storeS3-compatible; no minimum
API replicas3, each 1 vCPU + 1 GB RAM
Worker replicas4, each 1 vCPU + 2 GB RAM (PDF rendering is RAM-bound)
Dashboard2, each 0.25 vCPU + 256 MB RAM

For higher volumes, scale workers horizontally — they are stateless and queue-driven.

Install (sketch)

# Add the chart repo
helm repo add simplyfill https://charts.simplyfill.app
helm repo update

# Render a starter values.yaml
helm show values simplyfill/simplyfill > values.yaml
$EDITOR values.yaml

# Install
helm install simplyfill simplyfill/simplyfill \
  --namespace simplyfill --create-namespace \
  --values values.yaml

# Wait for everything healthy
kubectl -n simplyfill get pods --watch

values.yaml requires (at minimum): a Postgres connection string, a Redis connection string, an S3-compatible bucket + IAM credentials, the SimplyFill license key (issued at onboarding), and a domain to serve the API and dashboard from.

Licensing

Self-hosted clusters phone home once per day to validate the license key against the SimplyFill license server. In air-gapped environments, the license can be activated via offline activation tokens issued monthly — ask for the air-gapped license workflow during onboarding.

License validation never transmits PHI, PDFs, mappings, or user data — it sends only the license key and a deployment fingerprint.

Upgrades

The Helm chart follows semver. Upgrades within a minor version are zero-downtime; major version upgrades may require manual migration steps documented in the release notes. SimplyFill commits to at least 12 months of security patches on every minor version.

helm repo update
helm upgrade simplyfill simplyfill/simplyfill --values values.yaml

Observability

The chart ships with Prometheus metrics endpoints, structured JSON logs (compatible with Loki, Datadog, Splunk, etc.), and OpenTelemetry trace exporters. Dashboards for Grafana ship in the dashboards/ directory of the chart repo.

Backup and disaster recovery

You own backup. The chart does not include database backup automation — wire up pg_dump cron, managed snapshots, or your preferred tool against the Postgres instance. Object-store data is automatically versioned by SimplyFill (every generated PDF carries a 30-day default retention), but you should also enable bucket-level versioning at the object-store layer.

A documented restore drill is part of the onboarding checklist.

Support

ENTERPRISE customers get a dedicated Slack channel and 1-business-hour first-response SLA for self-hosted issues. See Support and your master agreement for the binding terms.

On this page