Deployment Guide — Fabrixly-IDS

Fabrixly IDS Deployment Guide

Prerequisites

  • Docker installed
  • Kubernetes cluster (minikube, EKS, GKE, AKS, etc.)
  • Helm 3.x installed
  • kubectl configured

Docker Build & Push

1. Build Images

# Build backend
docker build -t fabrixly-ids/backend:latest .

# Build console
cd console
docker build -t fabrixly-ids/console:latest .
cd ..

2. Tag for Registry

# For Docker Hub
docker tag fabrixly-ids/backend:latest yourusername/fabrixly-ids-backend:1.0.0
docker tag fabrixly-ids/console:latest yourusername/fabrixly-ids-console:1.0.0

# For AWS ECR
docker tag fabrixly-ids/backend:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/fabrixly-ids-backend:1.0.0
docker tag fabrixly-ids/console:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/fabrixly-ids-console:1.0.0

3. Push to Registry

# Docker Hub
docker push yourusername/fabrixly-ids-backend:1.0.0
docker push yourusername/fabrixly-ids-console:1.0.0

# AWS ECR (login first)
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-east-1.amazonaws.com
docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/fabrixly-ids-backend:1.0.0
docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/fabrixly-ids-console:1.0.0

Helm Deployment

1. Update Dependencies

cd helm/fabrixly-ids
helm dependency update

2. Create Secrets File

# For Development
cp helm/fabrixly-ids/values-secrets-development.yaml helm/fabrixly-ids/my-secrets.yaml

# For Production - Copy template and fill in real values
cp helm/fabrixly-ids/values-secrets-production.yaml.example helm/fabrixly-ids/values-secrets-production.yaml

# Generate secure secrets for production
echo "SESSION_SECRET: $(openssl rand -base64 32)"
echo "JWT_SECRET: $(openssl rand -base64 32)"
echo "DB_PASSWORD: $(openssl rand -base64 24)"
echo "POSTGRES_PASSWORD: $(openssl rand -base64 24)"

# Edit the file with your actual secrets
nano helm/fabrixly-ids/values-secrets-production.yaml

# IMPORTANT: Add to .gitignore
echo "values-secrets-production.yaml" >> helm/fabrixly-ids/.gitignore
echo "my-secrets.yaml" >> helm/fabrixly-ids/.gitignore

3. Customize Values

Edit helm/fabrixly-ids/values.yaml:

global:
  domain: your-domain.com

backend:
  image:
    repository: yourusername/fabrixly-ids-backend
    tag: "1.0.0"
  
  env:
    ISSUER: "https://your-domain.com/oidc"
    DB_HOST: "postgresql-service"  # Matches PostgreSQL service name
    SMTP_HOST: "smtp.yourprovider.com"

console:
  image:
    repository: yourusername/fabrixly-ids-console
    tag: "1.0.0"

ingress:
  hosts:
    - host: your-domain.com
      paths:
        - path: /oidc
          pathType: Prefix
          backend: backend
        - path: /api
          pathType: Prefix
          backend: backend
        - path: /
          pathType: Prefix
          backend: console
  tls:
    - secretName: fabrixly-ids-tls
      hosts:
        - your-domain.com

4. Install with Helm

# Development
helm install fabrixly-ids ./helm/fabrixly-ids \
  -f values-development.yaml \
  -f values-secrets-development.yaml \
  --namespace fabrixly-ids \
  --create-namespace

# Production
helm install fabrixly-ids ./helm/fabrixly-ids \
  -f values-production.yaml \
  -f values-secrets-production.yaml \
  --namespace fabrixly-ids \
  --create-namespace

# Alternative: Using --set for secrets (not recommended for many secrets)
helm install fabrixly-ids ./helm/fabrixly-ids \
  -f values-production.yaml \
  --set backend.secrets.SESSION_SECRET="$(openssl rand -base64 32)" \
  --set backend.secrets.JWT_SECRET="$(openssl rand -base64 32)" \
  --set backend.secrets.DB_PASSWORD="yourpassword" \
  --set postgresql.auth.password="yourpassword" \
  --namespace fabrixly-ids \
  --create-namespace

5. Verify Deployment

# Check pods
kubectl get pods -n fabrixly-ids

# Check services
kubectl get svc -n fabrixly-ids

# Check ingress
kubectl get ingress -n fabrixly-ids

# View logs
kubectl logs -f deployment/fabrixly-ids-backend -n fabrixly-ids
kubectl logs -f deployment/fabrixly-ids-console -n fabrixly-ids
kubectl logs -f statefulset/postgresql -n fabrixly-ids

Resource Requirements Summary

Bare Minimum (Development/Testing)

  • Backend: 50m CPU, 128Mi RAM
  • Console: 10m CPU, 32Mi RAM
  • PostgreSQL: 20m CPU, 64Mi RAM, 1Gi storage
  • Total: ~80m CPU, 224Mi RAM, 1Gi storage
  • Backend: 500m CPU, 512Mi RAM (2-10 replicas)
  • Console: 100m CPU, 128Mi RAM (2-5 replicas)
  • PostgreSQL: 200m CPU, 256Mi RAM, 10Gi storage
  • Total: ~800m CPU, 896Mi RAM, 10Gi storage

Upgrading

# Update image tags
helm upgrade fabrixly-ids ./helm/fabrixly-ids \
  -f values-secrets.yaml \
  --set backend.image.tag=1.1.0 \
  --set console.image.tag=1.1.0 \
  --namespace fabrixly-ids

Uninstall

helm uninstall fabrixly-ids --namespace fabrixly-ids
kubectl delete namespace fabrixly-ids

Local Testing with Minikube

# Start minikube
minikube start

# Enable ingress
minikube addons enable ingress

# Build images in minikube's Docker
eval $(minikube docker-env)
docker build -t fabrixly-ids/backend:latest .
cd console && docker build -t fabrixly-ids/console:latest . && cd ..

# Install
helm install fabrixly-ids ./helm/fabrixly-ids \
  -f values-secrets.yaml \
  --set backend.image.pullPolicy=Never \
  --set console.image.pullPolicy=Never \
  --namespace fabrixly-ids \
  --create-namespace

# Get minikube IP
minikube ip

# Add to /etc/hosts
echo "$(minikube ip) fabrixly-ids.example.com" | sudo tee -a /etc/hosts

# Access
open http://fabrixly-ids.example.com

Production Checklist

  • Use proper domain name
  • Configure TLS/SSL certificates (cert-manager)
  • Set strong secrets
  • Use external managed PostgreSQL
  • Configure SMTP with real provider
  • Set up monitoring (Prometheus/Grafana)
  • Configure backup strategy
  • Set resource limits/requests appropriately
  • Enable HPA for autoscaling
  • Configure network policies
  • Review security contexts
  • Set up log aggregation

Subscribe to The Fabrixly Blog

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe