# Helm Chart README ## Dating App Helm Chart This Helm chart deploys the MVP dating application to Kubernetes with all necessary components. ### Prerequisites - Kubernetes 1.19+ - Helm 3.0+ - Nginx Ingress Controller (for ingress) - Storage provisioner (for PVC) ### Installation #### Basic Installation (Development) ```bash # Install with default values helm install dating-app ./helm/dating-app -n dating-app --create-namespace ``` #### Production Installation with Custom Values ```bash # Create custom values file cp helm/dating-app/values.yaml my-values.yaml # Edit my-values.yaml with your configuration # Then install helm install dating-app ./helm/dating-app -n dating-app --create-namespace -f my-values.yaml ``` ### Configuration Edit `values.yaml` to customize: #### Ingress Hosts ```yaml backend: ingress: host: api.yourdomain.com frontend: ingress: host: app.yourdomain.com ``` #### Database ```yaml postgres: credentials: username: your_user password: your_password database: your_db ``` #### Backend Environment ```yaml backend: environment: JWT_SECRET: your-secret-key CORS_ORIGINS: "https://app.yourdomain.com" ``` #### Frontend API URL ```yaml frontend: environment: VITE_API_URL: "https://api.yourdomain.com" ``` #### Storage Classes For cloud deployments (AWS, GCP, etc.), specify storage class: ```yaml backend: persistence: storageClass: ebs-sc # AWS EBS size: 10Gi postgres: persistence: storageClass: ebs-sc size: 20Gi ``` #### Replicas and Resources ```yaml backend: replicas: 3 resources: requests: memory: "512Mi" cpu: "200m" limits: memory: "1Gi" cpu: "500m" frontend: replicas: 2 resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "512Mi" cpu: "200m" ``` ### Upgrading ```bash helm upgrade dating-app ./helm/dating-app -f my-values.yaml ``` ### Uninstalling ```bash helm uninstall dating-app -n dating-app ``` ### AWS Migration To deploy to AWS: 1. **RDS for PostgreSQL**: Disable postgres in chart ```yaml postgres: enabled: false ``` 2. **Update database URL** to RDS endpoint ```yaml backend: environment: DATABASE_URL: "postgresql://user:password@your-rds-endpoint:5432/dating_app" ``` 3. **S3 for Media Storage**: Update backend environment ```yaml backend: environment: MEDIA_STORAGE: s3 S3_BUCKET: your-bucket AWS_REGION: us-east-1 ``` 4. **Use AWS Load Balancer Controller** for ingress ```yaml ingress: className: aws-alb annotations: alb.ingress.kubernetes.io/scheme: internet-facing ``` 5. **Use EBS for persistent storage** ```yaml backend: persistence: storageClass: ebs-sc ``` ### Troubleshooting Check pod status: ```bash kubectl get pods -n dating-app kubectl logs -n dating-app ``` Check services: ```bash kubectl get svc -n dating-app ``` Check ingress: ```bash kubectl get ingress -n dating-app ``` Port forward for debugging: ```bash kubectl port-forward -n dating-app svc/backend 8000:8000 kubectl port-forward -n dating-app svc/frontend 3000:80 ``` ### Database Initialization The backend automatically initializes tables on startup. To verify: ```bash kubectl exec -it -n dating-app -- psql -U dating_user -d dating_app -c "\dt" ``` ### Notes - This chart is designed to be portable between on-premises and cloud deployments - Modify `values.yaml` for your specific infrastructure - For production, use external secrets management (HashiCorp Vault, AWS Secrets Manager, etc.) - Enable TLS/SSL with cert-manager for production ingress - Configure proper backup strategies for PostgreSQL PVC