Docker
Run BRMS with an external PostgreSQL database:Copy
Ask AI
docker run -p 8080:80 \
-e DB_HOST=your-database-host \
-e DB_USER=gorules \
-e DB_PASSWORD=your-password \
-e DB_NAME=gorules \
-e LICENSE_KEY=your-license-key \
gorules/brms
Docker Compose
Development setup
Complete setup with PostgreSQL included:Copy
Ask AI
version: '3.8'
services:
brms:
image: gorules/brms
ports:
- "8080:80"
environment:
DB_HOST: postgres
DB_PORT: 5432
DB_USER: gorules
DB_PASSWORD: gorules
DB_NAME: gorules
DB_SSL_DISABLED: "true"
LICENSE_KEY: your-license-key
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:15
environment:
POSTGRES_USER: gorules
POSTGRES_PASSWORD: gorules
POSTGRES_DB: gorules
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U gorules"]
interval: 5s
timeout: 5s
retries: 5
volumes:
postgres-data:
Production setup
With SSL, custom SMTP, and external database:Copy
Ask AI
version: '3.8'
services:
brms:
image: gorules/brms
ports:
- "443:80"
environment:
# Database
DB_HOST: db.example.com
DB_PORT: 5432
DB_USER: gorules
DB_PASSWORD: ${DB_PASSWORD}
DB_NAME: gorules
DB_SSL_CA: ${DB_SSL_CA}
# Application
APP_URL: https://rules.example.com
LICENSE_KEY: ${LICENSE_KEY}
# Security
COOKIE_SECRET: ${COOKIE_SECRET}
SESSION_DURATION_MINUTES: 480
# Email
EMAIL_HOST: smtp.sendgrid.net
EMAIL_PORT: 587
EMAIL_AUTH_USER: apikey
EMAIL_AUTH_PASS: ${SENDGRID_API_KEY}
EMAIL_FROM: noreply@example.com
restart: unless-stopped
Kubernetes
Helm chart
The recommended way to deploy on Kubernetes:Copy
Ask AI
# Add the Helm repository
helm repo add gorules https://charts.gorules.io
# Install with custom values
helm install brms gorules/gorules-brms -f values.yaml
Basic deployment
Copy
Ask AI
apiVersion: apps/v1
kind: Deployment
metadata:
name: gorules-brms
spec:
replicas: 1
selector:
matchLabels:
app: gorules-brms
template:
metadata:
labels:
app: gorules-brms
spec:
containers:
- name: brms
image: gorules/brms:latest
ports:
- containerPort: 80
env:
- name: DB_HOST
value: postgres.database.svc.cluster.local
- name: DB_USER
valueFrom:
secretKeyRef:
name: brms-db-credentials
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: brms-db-credentials
key: password
- name: DB_NAME
value: gorules
- name: LICENSE_KEY
valueFrom:
secretKeyRef:
name: brms-license
key: license-key
- name: APP_URL
value: https://rules.example.com
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "1000m"
livenessProbe:
httpGet:
path: /api/health
port: 80
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /api/health
port: 80
initialDelaySeconds: 5
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: gorules-brms
spec:
selector:
app: gorules-brms
ports:
- port: 80
targetPort: 80
With ConfigMap and Secrets
Copy
Ask AI
apiVersion: v1
kind: Secret
metadata:
name: brms-secrets
type: Opaque
stringData:
db-password: your-db-password
license-key: your-license-key
cookie-secret: your-cookie-secret
---
apiVersion: v1
kind: ConfigMap
metadata:
name: brms-config
data:
DB_HOST: "postgres.database.svc.cluster.local"
DB_PORT: "5432"
DB_USER: "gorules"
DB_NAME: "gorules"
APP_URL: "https://rules.example.com"
SESSION_DURATION_MINUTES: "480"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gorules-brms
spec:
replicas: 1
selector:
matchLabels:
app: gorules-brms
template:
metadata:
labels:
app: gorules-brms
spec:
containers:
- name: brms
image: gorules/brms:latest
ports:
- containerPort: 80
envFrom:
- configMapRef:
name: brms-config
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: brms-secrets
key: db-password
- name: LICENSE_KEY
valueFrom:
secretKeyRef:
name: brms-secrets
key: license-key
- name: COOKIE_SECRET
valueFrom:
secretKeyRef:
name: brms-secrets
key: cookie-secret
livenessProbe:
httpGet:
path: /api/health
port: 80
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /api/health
port: 80
initialDelaySeconds: 5
periodSeconds: 5
Ingress
Copy
Ask AI
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gorules-brms
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- rules.example.com
secretName: brms-tls
rules:
- host: rules.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gorules-brms
port:
number: 80
Multi-architecture clusters
If running mixed architecture node pools, force Linux x86_64:Copy
Ask AI
spec:
template:
spec:
nodeSelector:
kubernetes.io/arch: amd64
kubernetes.io/os: linux
Serverless deployment
Serverless deployment options (AWS Lambda, Azure Functions, Google Cloud Run) are available as part of the Enterprise plan.Contact us
Get in touch to discuss serverless deployment options