Installation Guide β
This comprehensive guide covers all installation methods for GripDay, from local development to production deployment. Choose the method that best fits your needs.
π System Requirements β
Minimum Requirements β
- CPU: 4 cores
- Memory: 8GB RAM
- Storage: 50GB free space
- Network: Broadband internet connection
Recommended Requirements β
- CPU: 8+ cores
- Memory: 16GB+ RAM
- Storage: 100GB+ SSD
- Network: High-speed internet connection
Supported Operating Systems β
- Linux: Ubuntu 20.04+, CentOS 8+, RHEL 8+
- macOS: 10.15+ (Catalina or later)
- Windows: Windows 10/11 with WSL2
π³ Docker Compose Installation β
Best for: Development, testing, and small-scale deployments.
Prerequisites β
bash
# Install Docker Desktop
# Windows/Mac: Download from https://docker.com/products/docker-desktop
# Linux: Use package manager
# Verify installation
docker --version # Should be 20.10+
docker-compose --version # Should be 2.0+
# Install Git
git --version # Should be 2.30+Installation Steps β
1. Clone Repository β
bash
git clone https://github.com/GripDay/gripday.git gripday-platform
cd gripday-platform2. Configure Environment β
bash
# Copy environment template
cp .env.example .env
# Edit configuration (required)
nano .envRequired Environment Variables:
bash
# Database Configuration
POSTGRES_PASSWORD=your-secure-password-here
# JWT Security (minimum 32 characters)
JWT_SECRET=your-super-secret-jwt-key-minimum-32-characters-long
# Redis Configuration
REDIS_PASSWORD=your-redis-password-here
# Email Configuration (optional for development)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
# Application Configuration
ENVIRONMENT=development
LOG_LEVEL=INFO
ENABLE_REGISTRATION=true3. Start Services β
bash
# Start all services
./scripts/docker-start.sh
# Or start step by step
./scripts/docker-start.sh infrastructure # Start databases first
./scripts/docker-start.sh services # Start application services
./scripts/docker-start.sh frontend # Start web application4. Verify Installation β
bash
# Check service health
./scripts/health-check.sh
# Expected output:
# β
PostgreSQL: Healthy
# β
Redis: Healthy
# β
Kafka: Healthy
# β
API Gateway: Healthy
# β
User Service: Healthy
# β
Contact Service: Healthy
# β
Email Service: Healthy
# β
Campaign Service: Healthy
# β
Form Service: Healthy
# β
Scoring Service: Healthy
# β
Analytics Service: Healthy
# β
Web Application: Healthy5. Access Application β
- Web Application: http://localhost:3000
- API Gateway: http://localhost:8080
- API Documentation: http://localhost:8080/swagger-ui.html
- Grafana Dashboard: http://localhost:3001 (admin/admin)
Docker Compose Management β
Service Management β
bash
# View running services
docker-compose ps
# View logs
docker-compose logs -f [service-name]
# Restart specific service
docker-compose restart [service-name]
# Stop all services
docker-compose down
# Stop and remove volumes (data loss!)
docker-compose down -vUpdates and Maintenance β
bash
# Pull latest images
docker-compose pull
# Rebuild and restart
docker-compose up --build -d
# Clean up unused resources
docker system prune -fβΈοΈ Kubernetes Installation β
Best for: Production deployments, scalable environments, and cloud-native development.
Prerequisites β
Install Kubernetes Tools β
bash
# Install kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# Install Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Verify installations
kubectl version --client
helm versionChoose Kubernetes Environment β
Local Development (Minikube):
bash
# Install Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Start cluster
minikube start --cpus=4 --memory=8192 --disk-size=50gProduction Cloud (EKS/GKE/AKS):
bash
# AWS EKS
eksctl create cluster --name gripday --region us-west-2 --nodes 3
# Google GKE
gcloud container clusters create gripday --num-nodes=3 --zone=us-central1-a
# Azure AKS
az aks create --resource-group myResourceGroup --name gripday --node-count 3Installation Steps β
1. Clone Repository β
bash
git clone https://github.com/GripDay/gripday.git
cd gripday-platform2. Install Operators β
bash
# Install required Kubernetes operators
./scripts/k8s-install-operators.sh
# This installs:
# - CloudNativePG (PostgreSQL operator)
# - Strimzi (Kafka operator)
# - Prometheus Operator (monitoring)
# - Istio (service mesh)3. Configure Values β
bash
# Copy Helm values template
cp k8s/helm/values.example.yaml k8s/helm/values.yaml
# Edit configuration
nano k8s/helm/values.yamlKey Configuration Options:
yaml
# Global settings
global:
environment: production
domain: gripday.yourdomain.com
# Database configuration
postgresql:
auth:
postgresPassword: "your-secure-password"
# Redis configuration
redis:
auth:
password: "your-redis-password"
# Application configuration
app:
jwt:
secret: "your-super-secret-jwt-key-minimum-32-characters"
email:
smtp:
host: "smtp.gmail.com"
port: 587
username: "your-email@gmail.com"
password: "your-app-password"
# Ingress configuration
ingress:
enabled: true
className: "nginx"
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
tls:
enabled: true4. Deploy Infrastructure β
bash
# Deploy infrastructure components
helm install gripday-infrastructure ./k8s/helm/infrastructure \
--namespace gripday-system \
--create-namespace \
--values k8s/helm/values.yaml
# Wait for infrastructure to be ready
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=postgresql --timeout=300s
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=kafka --timeout=300s5. Deploy Application β
bash
# Deploy GripDay application
helm install gripday ./k8s/helm/gripday \
--namespace gripday \
--create-namespace \
--values k8s/helm/values.yaml
# Wait for deployment
kubectl wait --for=condition=available deployment --all -n gripday --timeout=600s6. Configure Ingress β
bash
# Install NGINX Ingress Controller (if not already installed)
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx \
--create-namespace
# Install cert-manager for SSL certificates
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
# Apply GripDay ingress
kubectl apply -f k8s/manifests/ingress.yaml7. Verify Installation β
bash
# Check all pods are running
kubectl get pods -n gripday
# Check services
kubectl get svc -n gripday
# Check ingress
kubectl get ingress -n gripday
# Test application
curl -k https://gripday.yourdomain.com/api/v1/healthKubernetes Management β
Scaling Services β
bash
# Scale specific service
kubectl scale deployment contact-service --replicas=3 -n gripday
# Auto-scaling
kubectl autoscale deployment contact-service --cpu-percent=70 --min=2 --max=10 -n gripdayMonitoring and Logs β
bash
# View logs
kubectl logs -f deployment/contact-service -n gripday
# Port forward for local access
kubectl port-forward svc/api-gateway 8080:8080 -n gripday
# Access monitoring
kubectl port-forward svc/grafana 3000:3000 -n gripday-systemUpdates and Maintenance β
bash
# Update application
helm upgrade gripday ./k8s/helm/gripday \
--namespace gripday \
--values k8s/helm/values.yaml
# Rollback if needed
helm rollback gripday 1 -n gripday
# Backup
./scripts/k8s-backup.shπ Cloud Provider Specific Installation β
Amazon Web Services (AWS) β
Prerequisites β
bash
# Install AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# Install eksctl
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
# Configure AWS credentials
aws configureEKS Deployment β
bash
# Create EKS cluster
eksctl create cluster \
--name gripday-production \
--region us-west-2 \
--nodes 3 \
--node-type m5.large \
--managed
# Install AWS Load Balancer Controller
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
# Deploy GripDay with AWS-specific configuration
helm install gripday ./k8s/helm/gripday \
--namespace gripday \
--create-namespace \
--values k8s/helm/values-aws.yamlAWS-Specific Configuration β
yaml
# k8s/helm/values-aws.yaml
ingress:
className: "alb"
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:123456789:certificate/your-cert-arn
storage:
storageClass: gp3
monitoring:
prometheus:
storageClass: gp3Google Cloud Platform (GCP) β
Prerequisites β
bash
# Install Google Cloud SDK
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
# Install GKE auth plugin
gcloud components install gke-gcloud-auth-pluginGKE Deployment β
bash
# Create GKE cluster
gcloud container clusters create gripday-production \
--zone us-central1-a \
--num-nodes 3 \
--machine-type n1-standard-2 \
--enable-autoscaling \
--min-nodes 1 \
--max-nodes 10
# Get credentials
gcloud container clusters get-credentials gripday-production --zone us-central1-a
# Deploy GripDay
helm install gripday ./k8s/helm/gripday \
--namespace gripday \
--create-namespace \
--values k8s/helm/values-gcp.yamlMicrosoft Azure (AKS) β
Prerequisites β
bash
# Install Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# Login to Azure
az loginAKS Deployment β
bash
# Create resource group
az group create --name gripday-rg --location eastus
# Create AKS cluster
az aks create \
--resource-group gripday-rg \
--name gripday-production \
--node-count 3 \
--enable-addons monitoring \
--generate-ssh-keys
# Get credentials
az aks get-credentials --resource-group gripday-rg --name gripday-production
# Deploy GripDay
helm install gripday ./k8s/helm/gripday \
--namespace gripday \
--create-namespace \
--values k8s/helm/values-azure.yamlπ§ Configuration Options β
Environment Variables β
Core Configuration β
bash
# Application
ENVIRONMENT=production|development|staging
LOG_LEVEL=DEBUG|INFO|WARN|ERROR
ENABLE_REGISTRATION=true|false
ENABLE_EMAIL_VERIFICATION=true|false
ENABLE_MULTI_TENANT=true|false
# Security
JWT_SECRET=your-super-secret-jwt-key-minimum-32-characters
JWT_EXPIRATION_MS=86400000
CORS_ALLOWED_ORIGINS=https://yourdomain.com,https://app.yourdomain.com
# Database
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=gripday
POSTGRES_USER=gripday_user
POSTGRES_PASSWORD=your-secure-password
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your-redis-password
REDIS_DB=0
# Kafka
KAFKA_BOOTSTRAP_SERVERS=localhost:9092
KAFKA_SECURITY_PROTOCOL=PLAINTEXT
KAFKA_SASL_MECHANISM=PLAINEmail Configuration β
bash
# SMTP Settings
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
SMTP_TLS_ENABLED=true
SMTP_SSL_ENABLED=false
# Email Providers (choose one)
EMAIL_PROVIDER=smtp|sendgrid|mailjet|ses
# SendGrid
SENDGRID_API_KEY=your-sendgrid-api-key
# Mailjet
MAILJET_API_KEY=your-mailjet-api-key
MAILJET_SECRET_KEY=your-mailjet-secret-key
# Amazon SES
AWS_ACCESS_KEY_ID=your-aws-access-key
AWS_SECRET_ACCESS_KEY=your-aws-secret-key
AWS_REGION=us-west-2Storage Configuration β
bash
# File Storage
STORAGE_TYPE=local|s3|gcs|azure
# Local Storage
STORAGE_LOCAL_PATH=/var/lib/gripday/uploads
# Amazon S3
AWS_S3_BUCKET=your-gripday-bucket
AWS_S3_REGION=us-west-2
# Google Cloud Storage
GCS_BUCKET=your-gripday-bucket
GCS_PROJECT_ID=your-project-id
# Azure Blob Storage
AZURE_STORAGE_ACCOUNT=yourstorageaccount
AZURE_STORAGE_KEY=your-storage-key
AZURE_CONTAINER=gripday-filesAdvanced Configuration β
Performance Tuning β
yaml
# application.yml
server:
tomcat:
max-threads: 200
min-spare-threads: 10
max-connections: 8192
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
kafka:
producer:
batch-size: 16384
linger-ms: 5
buffer-memory: 33554432
consumer:
max-poll-records: 500
fetch-min-size: 1024Security Hardening β
yaml
# Security configuration
security:
jwt:
expiration: 86400000 # 24 hours
refresh-expiration: 604800000 # 7 days
password:
min-length: 8
require-uppercase: true
require-lowercase: true
require-numbers: true
require-special-chars: true
rate-limiting:
enabled: true
requests-per-minute: 60
burst-capacity: 100π Troubleshooting β
Common Issues β
Docker Issues β
bash
# Docker daemon not running
sudo systemctl start docker
# Permission denied
sudo usermod -aG docker $USER
newgrp docker
# Out of disk space
docker system prune -a -f
# Port already in use
sudo lsof -i :8080
sudo kill -9 <PID>Kubernetes Issues β
bash
# Pods not starting
kubectl describe pod <pod-name> -n gripday
kubectl logs <pod-name> -n gripday
# Service not accessible
kubectl get svc -n gripday
kubectl describe svc <service-name> -n gripday
# Ingress not working
kubectl get ingress -n gripday
kubectl describe ingress <ingress-name> -n gripdayDatabase Issues β
bash
# Connection refused
# Check if PostgreSQL is running
kubectl get pods -l app=postgresql -n gripday
# Authentication failed
# Verify credentials in secrets
kubectl get secret postgresql-secret -n gripday -o yaml
# Database not found
# Check if database was created
kubectl exec -it postgresql-0 -n gripday -- psql -U postgres -lPerformance Issues β
High Memory Usage β
bash
# Check memory usage
kubectl top pods -n gripday
# Increase memory limits
kubectl patch deployment contact-service -n gripday -p '{"spec":{"template":{"spec":{"containers":[{"name":"contact-service","resources":{"limits":{"memory":"2Gi"}}}]}}}}'Slow Response Times β
bash
# Check application metrics
kubectl port-forward svc/grafana 3000:3000 -n gripday-system
# Enable debug logging
kubectl set env deployment/contact-service LOG_LEVEL=DEBUG -n gripday
# Check database performance
kubectl exec -it postgresql-0 -n gripday -- psql -U postgres -c "SELECT * FROM pg_stat_activity;"Getting Help β
Log Collection β
bash
# Collect all logs
./scripts/collect-logs.sh
# This creates gripday-logs-$(date).tar.gz with:
# - Application logs
# - System logs
# - Configuration files
# - Health check resultsSupport Channels β
- π Documentation: docs.gripday.com
- π GitHub Issues: github.com/GripDay/gripday/issues
- π¬ Community Discord: discord.gg/gripday
- π§ Email Support: support@gripday.com
- π Enterprise Support: Available with commercial licenses
π Next Steps β
After successful installation:
- Quick Start Guide - Get up and running quickly
- Configuration Guide - Detailed configuration options
- Development Setup - Start developing with GripDay
- Monitoring Guide - Set up monitoring and alerting
- Contributing Guide - How to contribute to the project
Installation complete! Welcome to GripDay - the open-core B2B marketing automation platform. Start building your marketing workflows today.