Kubernetes Deployment
Deploy AlertifyPro on Kubernetes using the official Helm chart for production-grade, highly-available deployments.
Prerequisites
- Kubernetes 1.27+
- Helm 3.12+
kubectlconfigured for your cluster- PostgreSQL 15+ (external or via Helm)
- Redis 7+ (external or via Helm)
Quick start
# Add the AlertifyPro Helm repository
helm repo add alertifypro https://charts.alertifypro.com
helm repo update
# Install with default values
helm install alertifypro alertifypro/alertifypro \
--namespace alertifypro \
--create-namespace \
--set config.appUrl=https://alertifypro.yourcompany.com \
--set config.secretKeyBase=$(openssl rand -hex 64) \
--set postgresql.auth.password=your-db-password
Full values.yaml
# values.yaml
image:
repository: ghcr.io/crayon-alertifypro/alertifypro
tag: "2.1.0"
pullPolicy: IfNotPresent
replicaCount:
app: 2
worker: 3
scheduler: 1
config:
appUrl: "https://alertifypro.yourcompany.com"
secretKeyBase: "" # Set via --set or external secret
# External PostgreSQL (recommended for production)
postgresql:
enabled: true # Set false to use external DB
auth:
database: alertifypro
username: alertifypro
password: "" # Set via --set or external secret
# External Redis
redis:
enabled: true # Set false to use external Redis
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: alertifypro.yourcompany.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: alertifypro-tls
hosts:
- alertifypro.yourcompany.com
resources:
app:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 1Gi
worker:
requests:
cpu: 250m
memory: 256Mi
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 70
# Store secrets in K8s Secret instead of values.yaml
existingSecret: "" # Secret name with DATABASE_URL, REDIS_URL, SECRET_KEY_BASE
Using external secrets (recommended)
Instead of putting secrets in values.yaml, use Kubernetes Secrets:
kubectl create secret generic alertifypro-secrets \
--namespace alertifypro \
--from-literal=DATABASE_URL="postgres://user:pass@db-host:5432/alertifypro" \
--from-literal=REDIS_URL="redis://redis-host:6379/0" \
--from-literal=SECRET_KEY_BASE="$(openssl rand -hex 64)"
Then in values.yaml:
existingSecret: "alertifypro-secrets"
Verify the deployment
# Check pods are running
kubectl get pods -n alertifypro
# Check logs
kubectl logs -n alertifypro deploy/alertifypro-app
# Port-forward for local testing
kubectl port-forward -n alertifypro svc/alertifypro 8080:80
Upgrading
helm repo update
helm upgrade alertifypro alertifypro/alertifypro \
--namespace alertifypro \
--values values.yaml
Migrations run automatically as a pre-upgrade Job.
High availability
For HA deployments, ensure:
replicaCount.app: 2+— multiple app replicasreplicaCount.worker: 3+— multiple workers for job processing- External PostgreSQL with a replica (e.g. AWS RDS Multi-AZ)
- External Redis Sentinel or Redis Cluster
- Pod Disruption Budgets (automatically applied by the chart)