←Back to Documentation
Deployment Guide
Deploy entropyDB in various environments from local development to production-grade multi-region clusters
Overview
entropyDB supports multiple deployment models to fit your infrastructure needs:
- • Docker: Quick local development and testing
- • Kubernetes: Production-ready container orchestration
- • Cloud Managed: Fully managed service on AWS, Azure, GCP
- • Bare Metal: Maximum performance for dedicated hardware
- • Multi-Region: Global distribution with low latency
Docker Deployment
Single Container
Perfect for development and testing:
# Run entropyDB with persistent storage docker run -d \ --name entropydb \ -p 5432:5432 \ -p 8080:8080 \ -e ENTROPY_PASSWORD=your_password \ -v entropy_data:/var/lib/entropydb \ entropydb/entropydb:latest # Check status docker logs entropydb # Connect to database docker exec -it entropydb entropy-cli
Docker Compose
Multi-node cluster with monitoring:
version: '3.8'
services:
entropy-node-1:
image: entropydb/entropydb:latest
environment:
- ENTROPY_NODE_ID=1
- ENTROPY_CLUSTER_NODES=entropy-node-1,entropy-node-2,entropy-node-3
- ENTROPY_DATA_DIR=/data
- ENTROPY_PASSWORD=${ENTROPY_PASSWORD}
ports:
- "5432:5432"
- "8080:8080"
volumes:
- entropy_data_1:/data
networks:
- entropy_cluster
entropy-node-2:
image: entropydb/entropydb:latest
environment:
- ENTROPY_NODE_ID=2
- ENTROPY_CLUSTER_NODES=entropy-node-1,entropy-node-2,entropy-node-3
- ENTROPY_DATA_DIR=/data
- ENTROPY_PASSWORD=${ENTROPY_PASSWORD}
ports:
- "5433:5432"
- "8081:8080"
volumes:
- entropy_data_2:/data
networks:
- entropy_cluster
entropy-node-3:
image: entropydb/entropydb:latest
environment:
- ENTROPY_NODE_ID=3
- ENTROPY_CLUSTER_NODES=entropy-node-1,entropy-node-2,entropy-node-3
- ENTROPY_DATA_DIR=/data
- ENTROPY_PASSWORD=${ENTROPY_PASSWORD}
ports:
- "5434:5432"
- "8082:8080"
volumes:
- entropy_data_3:/data
networks:
- entropy_cluster
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
networks:
- entropy_cluster
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
networks:
- entropy_cluster
volumes:
entropy_data_1:
entropy_data_2:
entropy_data_3:
prometheus_data:
grafana_data:
networks:
entropy_cluster:
driver: bridge# Start the cluster docker-compose up -d # Scale to 5 nodes docker-compose up -d --scale entropy-node-1=5 # View logs docker-compose logs -f entropy-node-1 # Stop cluster docker-compose down
Kubernetes Deployment
Helm Chart
Production-ready Kubernetes deployment:
# Add entropyDB Helm repository helm repo add entropydb https://charts.entropydb.io helm repo update # Install with default configuration helm install entropydb entropydb/entropydb \ --namespace entropydb \ --create-namespace # Install with custom values helm install entropydb entropydb/entropydb \ --namespace entropydb \ --create-namespace \ --values values.yaml # Upgrade deployment helm upgrade entropydb entropydb/entropydb \ --namespace entropydb \ --values values.yaml # Uninstall helm uninstall entropydb --namespace entropydb
Custom Values
Configure your deployment with values.yaml:
# values.yaml
replicaCount: 3
image:
repository: entropydb/entropydb
tag: "1.0.0"
pullPolicy: IfNotPresent
resources:
requests:
memory: "4Gi"
cpu: "2000m"
limits:
memory: "8Gi"
cpu: "4000m"
storage:
size: 100Gi
storageClass: fast-ssd
persistence:
enabled: true
storageClass: standard
accessMode: ReadWriteOnce
size: 500Gi
service:
type: LoadBalancer
port: 5432
httpPort: 8080
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: entropydb.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: entropydb-tls
hosts:
- entropydb.example.com
monitoring:
enabled: true
serviceMonitor:
enabled: true
interval: 30s
backup:
enabled: true
schedule: "0 2 * * *"
retention: 30
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 70
targetMemoryUtilizationPercentage: 80
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: entropydb
topologyKey: kubernetes.io/hostnameStatefulSet Configuration
For manual deployment without Helm:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: entropydb
namespace: entropydb
spec:
serviceName: entropydb
replicas: 3
selector:
matchLabels:
app: entropydb
template:
metadata:
labels:
app: entropydb
spec:
containers:
- name: entropydb
image: entropydb/entropydb:latest
ports:
- containerPort: 5432
name: postgres
- containerPort: 8080
name: http
env:
- name: ENTROPY_NODE_ID
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: ENTROPY_CLUSTER_NODES
value: "entropydb-0.entropydb,entropydb-1.entropydb,entropydb-2.entropydb"
- name: ENTROPY_PASSWORD
valueFrom:
secretKeyRef:
name: entropydb-secret
key: password
volumeMounts:
- name: data
mountPath: /var/lib/entropydb
resources:
requests:
memory: "4Gi"
cpu: "2000m"
limits:
memory: "8Gi"
cpu: "4000m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: fast-ssd
resources:
requests:
storage: 500GiCloud Managed Deployment
AWS Deployment
# Using AWS EKS eksctl create cluster \ --name entropydb-cluster \ --region us-west-2 \ --nodegroup-name entropydb-nodes \ --node-type m5.2xlarge \ --nodes 3 \ --nodes-min 3 \ --nodes-max 10 \ --managed # Deploy entropyDB kubectl apply -f https://entropydb.io/manifests/aws-eks.yaml # Or use Terraform terraform init terraform plan -var-file=aws.tfvars terraform apply -var-file=aws.tfvars
Azure Deployment
# Using Azure AKS az aks create \ --resource-group entropydb-rg \ --name entropydb-cluster \ --node-count 3 \ --node-vm-size Standard_D4s_v3 \ --enable-managed-identity \ --generate-ssh-keys az aks get-credentials \ --resource-group entropydb-rg \ --name entropydb-cluster # Deploy entropyDB kubectl apply -f https://entropydb.io/manifests/azure-aks.yaml
Google Cloud Deployment
# Using GKE gcloud container clusters create entropydb-cluster \ --zone us-central1-a \ --num-nodes 3 \ --machine-type n2-standard-4 \ --enable-autoscaling \ --min-nodes 3 \ --max-nodes 10 gcloud container clusters get-credentials entropydb-cluster \ --zone us-central1-a # Deploy entropyDB kubectl apply -f https://entropydb.io/manifests/gcp-gke.yaml
Bare Metal Deployment
System Requirements
Minimum Requirements:
- • CPU: 8 cores (16 recommended)
- • RAM: 16GB (32GB+ recommended)
- • Storage: 100GB SSD (NVMe recommended)
- • Network: 1Gbps (10Gbps for clusters)
- • OS: Linux (Ubuntu 20.04+, RHEL 8+, or similar)
Installation
# Download and install curl -fsSL https://entropydb.io/install.sh | sudo bash # Or manual installation wget https://entropydb.io/releases/entropydb-1.0.0-linux-x64.tar.gz tar -xzf entropydb-1.0.0-linux-x64.tar.gz sudo mv entropydb /usr/local/bin/ sudo mkdir -p /var/lib/entropydb sudo mkdir -p /etc/entropydb # Create configuration sudo cat > /etc/entropydb/entropydb.conf << EOF data_directory = '/var/lib/entropydb' listen_addresses = '*' port = 5432 max_connections = 1000 shared_buffers = 8GB effective_cache_size = 24GB maintenance_work_mem = 2GB wal_buffers = 16MB max_wal_size = 4GB min_wal_size = 1GB EOF # Create systemd service sudo cat > /etc/systemd/system/entropydb.service << EOF [Unit] Description=entropyDB Database Server After=network.target [Service] Type=notify User=entropydb ExecStart=/usr/local/bin/entropydb -c /etc/entropydb/entropydb.conf ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target EOF # Start service sudo systemctl daemon-reload sudo systemctl enable entropydb sudo systemctl start entropydb sudo systemctl status entropydb
Cluster Setup
# Node 1 configuration sudo cat > /etc/entropydb/entropydb.conf << EOF node_id = 1 cluster_nodes = 'node1.example.com,node2.example.com,node3.example.com' replication_factor = 3 data_directory = '/var/lib/entropydb' listen_addresses = '*' port = 5432 EOF # Node 2 configuration sudo cat > /etc/entropydb/entropydb.conf << EOF node_id = 2 cluster_nodes = 'node1.example.com,node2.example.com,node3.example.com' replication_factor = 3 data_directory = '/var/lib/entropydb' listen_addresses = '*' port = 5432 EOF # Node 3 configuration sudo cat > /etc/entropydb/entropydb.conf << EOF node_id = 3 cluster_nodes = 'node1.example.com,node2.example.com,node3.example.com' replication_factor = 3 data_directory = '/var/lib/entropydb' listen_addresses = '*' port = 5432 EOF # Initialize cluster (run on node 1) entropydb-admin cluster init # Join nodes (run on node 2 and 3) entropydb-admin cluster join node1.example.com:5432 # Verify cluster status entropydb-admin cluster status
Multi-Region Deployment
Deploy entropyDB across multiple geographic regions for global low-latency access:
# Region 1: US-West cluster_name = 'entropydb-global' region = 'us-west-2' availability_zones = ['us-west-2a', 'us-west-2b', 'us-west-2c'] replication_mode = 'async' regions = ['us-west-2', 'eu-central-1', 'ap-southeast-1'] # Region 2: EU-Central cluster_name = 'entropydb-global' region = 'eu-central-1' availability_zones = ['eu-central-1a', 'eu-central-1b', 'eu-central-1c'] replication_mode = 'async' regions = ['us-west-2', 'eu-central-1', 'ap-southeast-1'] # Region 3: Asia-Pacific cluster_name = 'entropydb-global' region = 'ap-southeast-1' availability_zones = ['ap-southeast-1a', 'ap-southeast-1b', 'ap-southeast-1c'] replication_mode = 'async' regions = ['us-west-2', 'eu-central-1', 'ap-southeast-1'] # Enable geo-replication ALTER DATABASE mydb SET geo_replication = 'enabled'; ALTER TABLE users SET locality = REGIONAL BY ROW; # Query local data SELECT * FROM users WHERE region = current_region(); # Check replication lag SELECT * FROM entropy_replication_status;
Latency-Based Routing
# Configure DNS-based routing
resource "aws_route53_record" "entropydb" {
zone_id = aws_route53_zone.main.zone_id
name = "db.example.com"
type = "A"
latency_routing_policy {
region = "us-west-2"
}
alias {
name = aws_lb.us_west.dns_name
zone_id = aws_lb.us_west.zone_id
evaluate_target_health = true
}
}
# Client-side connection
const client = new EntropyClient({
hosts: [
'us-west.db.example.com',
'eu-central.db.example.com',
'ap-southeast.db.example.com'
],
routing: 'latency-aware',
failover: 'automatic'
});Best Practices
High Availability
- • Deploy at least 3 nodes per region
- • Use multiple availability zones
- • Configure automatic failover
- • Monitor replication lag
Performance
- • Use SSD/NVMe storage
- • Configure adequate memory
- • Enable connection pooling
- • Optimize network bandwidth
Security
- • Enable TLS/SSL encryption
- • Use strong passwords
- • Configure firewall rules
- • Regular security updates
Monitoring
- • Set up Prometheus/Grafana
- • Configure alerting
- • Monitor resource usage
- • Track query performance