{"id":18238206,"url":"https://github.com/manavk97/typesense-eks","last_synced_at":"2026-05-04T10:39:40.590Z","repository":{"id":260141356,"uuid":"878642913","full_name":"manavk97/typesense-eks","owner":"manavk97","description":"A complete solution guide for self-hosting Typesense elastic search database on Amazon EKS (Elastic Kubernetes Service)","archived":false,"fork":false,"pushed_at":"2024-10-29T18:24:42.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-14T12:35:45.475Z","etag":null,"topics":["algolia","ci-cd","database","datastore","eks","elasticsearch","full-text-search","fuzzy-search","in-memory","instantsearch","kubernetes","search","search-engine","self-hosted","synonyms","typesense"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manavk97.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-25T19:16:23.000Z","updated_at":"2024-12-26T14:11:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"1956891f-99e7-4379-966e-9612f13c1b2a","html_url":"https://github.com/manavk97/typesense-eks","commit_stats":null,"previous_names":["manavk97/typesense-eks"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manavk97%2Ftypesense-eks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manavk97%2Ftypesense-eks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manavk97%2Ftypesense-eks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manavk97%2Ftypesense-eks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manavk97","download_url":"https://codeload.github.com/manavk97/typesense-eks/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247878023,"owners_count":21011158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algolia","ci-cd","database","datastore","eks","elasticsearch","full-text-search","fuzzy-search","in-memory","instantsearch","kubernetes","search","search-engine","self-hosted","synonyms","typesense"],"created_at":"2024-11-05T03:04:23.055Z","updated_at":"2026-05-04T10:39:35.569Z","avatar_url":"https://github.com/manavk97.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# typesense-eks\n\nA complete solution guide for self-hosting Typesense elastic search database on Amazon EKS (Elastic Kubernetes Service)\n\n\n# EKS Cluster Setup Instructions\n\nThis README provides step-by-step instructions for setting up an Amazon EKS (Elastic Kubernetes Service) cluster using the `setup_eks_cluster.sh` script.\n\n## Prerequisites\n\n- AWS CLI installed and configured with appropriate credentials\n- `eksctl` installed\n- `kubectl` installed (ensure it supports kustomize)\n- `helm` installed\n\n## Steps\n\n1. **Set Environment Variables**\n   - Open `setup_eks_cluster.sh` and update the following variables:\n     - `CLUSTER_NAME`: Set your desired cluster name (e.g., \"sample\")\n     - `REGION`: Set your desired AWS region (e.g., \"us-east-1\")\n     - `ACCOUNT_ID`: Replace with your AWS account ID (e.g., \"12345678\")\n     - `VERSION`: Set Kubernetes version (e.g., \"1.31\")\n     \n   - Node Group Settings:\n     - `WORKER_NODE_TYPE`: Instance type for worker nodes (e.g., \"r6i.xlarge\")\n     - `WORKER_NODES`: Initial number of nodes (e.g., 2)\n     - `WORKER_NODES_MIN`: Minimum nodes for autoscaling (e.g., 1)\n     - `WORKER_NODES_MAX`: Maximum nodes for autoscaling (e.g., 5)\n     - `NODE_GROUP_NAME`: Name of the node group (e.g., \"standard-workers\")\n\n2. **Create EKS Cluster**\n   - The cluster configuration includes:\n     - VPC with public and private subnets\n     - Managed node groups\n     - Cluster addons (CoreDNS, kube-proxy, vpc-cni)\n     - IAM roles and policies\n   - Review the generated `cluster.yaml` before proceeding\n\n3. **Configure Node Groups**\n   - Node group configuration includes:\n     - Instance type (`WORKER_NODE_TYPE`)\n     - Auto-scaling settings (min: `WORKER_NODES_MIN`, max: `WORKER_NODES_MAX`)\n     - Node labels and taints\n     - IAM instance profile\n   - The node group will be created as part of the cluster deployment\n\n4. **Associate IAM OIDC Provider**\n   - This step associates an IAM OIDC provider with your cluster\n\n5. **Set Up EBS CSI Driver**\n   - Creates an IAM service account for the EBS CSI Driver\n   - Creates the CSI driver addon\n\n6. **Set Up AWS Load Balancer Controller**\n   - Creates an IAM policy for the ALB\n   - Creates an IAM service account for the ALB\n   - Installs the AWS Load Balancer Controller using Helm\n\n7. **Verify Installation**\n   - The script will search for the ALB Helm chart\n   - It will also verify that the AWS Load Balancer Controller is installed correctly\n\n## Usage\n\n1. Make the script executable:\n   ```\n   chmod +x setup_eks_cluster.sh\n   ```\n\n2. Run the script:\n   ```\n   ./setup_eks_cluster.sh\n   ```\n\n3. Follow the output to ensure each step completes successfully\n\n# Database Setup\n\nFollow these steps to deploy Typesense using Kustomize:\n\n1. **Review Configuration**\n   - Navigate to the `application` directory\n   - Check the following files:\n     - `kustomization.yaml`: Main configuration file\n    \n\n2. **Configure Typesense Settings**\n   - modify the values in kustomization.yaml to match your desired configuration for each environment\n\n3. **Set Up Secrets**\n   - check the updated yaml files by running `kubectl kustomize environment/development/.` or `kubectl kustomize environment/production/.`\n   - verify udpated yaml configuration as per your requirements\n\n4. **Deploy Typesense**\n  ```bash\n   # Deploy to development environment\n   kubectl apply -k environment/development/.\n   \n   # Deploy to production environment\n   kubectl apply -k environment/production/.\n   \n   # Verify the deployment\n   kubectl get pods -n your-namespace       # Check pod status\n   kubectl get pvc -n your-namespace        # Verify storage provisioning\n   kubectl get svc -n your-namespace        # Check service creation\n   kubectl get ingress -n your-namespace    # Verify ingress configuration\n   ```\n5. **Access Typesense**\n   - The service will be exposed via AWS Load Balancer\n   - check the ingress.yaml file to get the endpoint\n\n6. **Monitoring**\n   - Check cluster health:\n     ```bash\n     kubectl exec -it typesense-0 -n your-namespace -- curl http://localhost:8108/health\n     ```\n   - View logs:\n     ```bash\n     kubectl logs -f typesense-0 -n your-namespace\n     ```\n7. **CI/CD Pipeline Setup**\n   - The repository includes a GitHub Actions workflow in `.github/workflows/aws.yml`\n   - The pipeline automatically deploys Typesense when changes are pushed:\n     ```yaml\n     name: Deploy to EKS\n\n     on:\n      push:\n         branches: [ development, main  ]\n\n     jobs:\n\n       build:\n    \n         name: Deployment\n         runs-on: ubuntu-latest\n         environment: ${{ github.ref == 'refs/heads/main' \u0026\u0026 'production' || 'development' }}\n         \n         steps:\n\n         - name: Set short git commit SHA\n            id: commit\n            uses: prompt/actions-commit-hash@v2\n\n         - name: Check out code\n            uses: actions/checkout@v2\n         \n         - name: Configure AWS credentials\n            uses: aws-actions/configure-aws-credentials@v1\n            with:\n            aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}\n            aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n            aws-region: ${{ secrets.AWS_REGION }}\n\n         - name: Login to Amazon ECR\n            id: login-ecr\n            uses: aws-actions/amazon-ecr-login@v1\n\n         - name: Update kube config\n            env:\n            EKS_CLUSTER_NAME: ${{ secrets.EKS_CLUSTER_NAME }}\n            AWS_REGION: ${{ secrets.AWS_REGION }}\n            \n            run: aws eks update-kubeconfig --name $EKS_CLUSTER_NAME --region $AWS_REGION\n\n         - name: Deploy to EKS\n            run: |\n            kubectl apply -k  environments/${{ github.ref == 'refs/heads/main' \u0026\u0026 'production' || 'development' }}/.\n     ```\n\n   Required GitHub Secrets:\n   - `AWS_ACCESS_KEY_ID`: AWS IAM user access key\n   - `AWS_SECRET_ACCESS_KEY`: AWS IAM user secret key\n   - `EKS_CLUSTER_NAME`: EKS cluster name\n   - `AWS_REGION`: AWS region\n   \n   Pipeline Features:\n   - Automatic deployment on push to main branch\n   - Environment-based deployment (development/production)\n   - AWS credentials management\n   - Kubernetes configuration updates\n   \n   To set up the pipeline:\n   1. Configure AWS IAM user with required permissions\n   2. Add AWS credentials to GitHub repository secrets\n   3. Update environment variables in workflow file\n   4. Enable GitHub Actions in your repository\n\n## Troubleshooting\n\n- If any step fails, review the error messages and ensure all prerequisites are met\n- Check that your AWS credentials have the necessary permissions\n- Verify that all required tools (eksctl, kubectl, helm) are installed and up to date\n\n## Clean Up\n\nTo delete the EKS cluster and associated resources when no longer needed:\n\n## Contributing\n\nWe welcome contributions to improve the typesense-eks project! Here's how you can contribute:\n\n1. **Fork the Repository**\n   - Create your own fork of the project\n   - Clone it to your local machine\n\n2. **Create a Branch**\n   - Create a new branch for your feature or bugfix\n   - Use a descriptive name (e.g., `feature/add-monitoring` or `fix/nodegroup-scaling`)\n\n3. **Make Your Changes**\n   - Follow existing code style and conventions\n   - Add or update documentation as needed\n   - Test your changes thoroughly\n\n4. **Submit a Pull Request**\n   - Push your changes to your fork\n   - Create a Pull Request from your branch to our main branch\n   - Provide a clear description of the changes\n   - Reference any related issues\n\n5. **Code Review**\n   - Wait for maintainers to review your PR\n   - Make any requested changes\n   - Once approved, your PR will be merged\n\n### Development Guidelines\n\n- Follow infrastructure-as-code best practices\n- Document any new configuration options\n- Update the README for significant changes\n- Test changes in a separate EKS cluster before submitting\n\n### Reporting Issues\n\nIf you find a bug or have a feature request:\n1. Check existing issues first\n2. Create a new issue with:\n   - Clear description of the problem\n   - Steps to reproduce\n   - Expected vs actual behavior\n   - Your environment details\n\nFor questions or discussions, please use the repository's Discussions section.\n\n### Future scope\n- setup backup and restore for typesense\n- setup monitoring and alerting for typesense\n- setup autoscaling for typesense\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanavk97%2Ftypesense-eks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanavk97%2Ftypesense-eks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanavk97%2Ftypesense-eks/lists"}