On-Premises Deployment
Deploy FeatureSignals on your own infrastructure — Kubernetes clusters, virtual machines, or air-gapped environments. Full control over data, networking, and security posture.
Info
Deployment Options
FeatureSignals supports three on-premises deployment models:
Kubernetes
Deploy on any Kubernetes cluster (EKS, GKE, AKS, OpenShift, or bare-metal K8s). Helm chart available.
Virtual Machines
Deploy on VMs using Docker Compose or systemd. Suitable for traditional infrastructure.
Air-Gapped
Deploy in environments with no internet access. Pre-bundled images, offline docs, manual updates.
Kubernetes Deployment
FeatureSignals provides an official Helm chart for Kubernetes deployments. The chart includes the API server, Flag Engine dashboard, and configurable PostgreSQL (external or in-cluster).
Prerequisites
- Kubernetes 1.28+ cluster with RBAC enabled
- Helm 3.12+
- Ingress controller (nginx-ingress, Traefik, or similar)
- cert-manager (for automatic TLS)
- PersistentVolume provisioner (for PostgreSQL storage)
Install via Helm
helm repo add featuresignals https://charts.featuresignals.com
helm repo update
helm install featuresignals featuresignals/featuresignals \
--namespace featuresignals \
--create-namespace \
--set global.domain=featuresignals.example.com \
--set postgresql.auth.password=$(openssl rand -base64 32) \
--set jwtSecret=$(openssl rand -base64 64)
Production Values
For production, create a values file with production overrides:
replicaCount: 3
resources:
requests:
cpu: "1"
memory: "2Gi"
limits:
cpu: "2"
memory: "4Gi"
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 70
postgresql:
primary:
persistence:
size: 50Gi
resources:
requests:
cpu: "2"
memory: "4Gi"
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
tls:
- hosts:
- featuresignals.example.com
- api.featuresignals.example.com
monitoring:
serviceMonitor:
enabled: true
External database
postgresql.enabled=false and configure externalDatabase.* in your values file.Virtual Machine Deployment
For teams not using Kubernetes, FeatureSignals can be deployed on virtual machines using Docker Compose or as systemd services:
Docker Compose on VMs
Follow the standard Docker Compose setup with the following VM-specific considerations:
- Place the VM behind a load balancer for high availability
- Use an external PostgreSQL instance accessible from all VM replicas
- Configure Docker to start containers on boot:
docker compose up -d --restart always - Set up log forwarding to your centralized logging system
Systemd Service
For environments where Docker is not available, the Go API server can be compiled to a static binary and run as a systemd service:
[Unit]
Description=FeatureSignals API Server
After=network.target postgresql.service
[Service]
Type=simple
User=featuresignals
Group=featuresignals
WorkingDirectory=/opt/featuresignals
EnvironmentFile=/opt/featuresignals/.env
ExecStart=/opt/featuresignals/bin/server
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Air-Gapped Environments
FeatureSignals supports deployment in environments with no internet access — common in government, financial, and defense sectors.
Image Bundling
FeatureSignals provides pre-bundled tarballs containing all Docker images, the Helm chart, and offline documentation:
# On an internet-connected machine:
docker pull featuresignals/server:v2.0.0
docker pull featuresignals/dashboard:v2.0.0
docker save featuresignals/server:v2.0.0 featuresignals/dashboard:v2.0.0 | gzip > featuresignals-images.tar.gz
# Download the offline bundle
wget https://releases.featuresignals.com/v2.0.0/offline-bundle.tar.gz
# Transfer to air-gapped environment via approved media
# Then load on the target machine:
docker load < featuresignals-images.tar.gz
tar xzf offline-bundle.tar.gz
Air-Gapped Considerations
- No telemetry — FeatureSignals does not phone home. No usage data, error reports, or metrics leave your network.
- License validation — Enterprise licenses are validated offline using signed tokens. No call to an external validation server is required.
- Email delivery — Configure an internal SMTP relay for transactional emails (password resets, invitations). Without SMTP, these features will not function.
- Updates — Upgrade by transferring new image tarballs and Helm charts via your approved data transfer process. Review the changelog for migration notes.
- Documentation — The offline bundle includes a static HTML copy of the documentation. Serve it from an internal web server.
Security Considerations
Network Segmentation
Place the database on a private subnet with no public internet access. Only the API server and dashboard should be reachable (via load balancer or reverse proxy). Use security groups or firewall rules to restrict traffic between components to only the necessary ports.
Secrets Management
Never store secrets in configuration files committed to version control. Use a secrets manager appropriate for your environment: HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, or Kubernetes Secrets (with encryption at rest enabled).
TLS Everywhere
Encrypt all traffic — both external (client to server) and internal (service-to-service, service-to-database). Use mTLS for service-to-service communication where possible. The API server and database should communicate over TLS, even on private networks.
Data at Rest
Enable encryption at rest for all persistent storage: PostgreSQL (TDE or filesystem encryption), Kubernetes PersistentVolumes (storage class with encryption), and backup files. Never store unencrypted database dumps.
High Availability Architecture
For production deployments requiring high availability:
- Multiple API server replicas — Deploy at least 3 replicas behind a load balancer for redundancy.
- Stateless design — API servers are stateless. The evaluation cache uses PG LISTEN/NOTIFY for cross-instance invalidation.
- Database HA — Use PostgreSQL streaming replication with automated failover (Patroni, Cloud SQL HA, or RDS Multi-AZ).
- Load balancer health checks — Configure your load balancer to use the
/healthendpoint for liveness and/readyfor readiness. - Graceful shutdown — API servers handle SIGTERM by draining in-flight requests before stopping (default: 30s grace period).
Split-brain prevention
Compliance & Regulatory
Deploying on-premises gives you full control over your compliance posture:
- SOC 2 — Self-hosting FeatureSignals in your SOC 2-compliant infrastructure extends your existing controls to flag management.
- HIPAA — FeatureSignals does not process PHI by default. With proper network controls and a BAA with your infrastructure provider, on-premises deployment supports HIPAA compliance.
- GDPR — All data remains in your infrastructure within your chosen region. No data leaves your control.
- FedRAMP / ITAR — Air-gapped deployment with FIPS 140-2 validated cryptography supports government compliance requirements.
Next Steps
- Self-Hosting Onboarding Guide— step-by-step setup with Docker Compose
- Configuration Reference— complete list of environment variables and Helm values
- Architecture Overview— understand how FeatureSignals works under the hood