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
Recommended (Production)
- 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