{"id":30971756,"url":"https://github.com/ozturkeniss/kubedeploy-eks","last_synced_at":"2025-09-12T02:47:08.706Z","repository":{"id":313259200,"uuid":"1050713390","full_name":"ozturkeniss/Kubedeploy-EKS","owner":"ozturkeniss","description":"Production-ready microservices architecture built with Go, gRPC, PostgreSQL, and KrakenD API Gateway, designed for deployment on AWS EKS.","archived":false,"fork":false,"pushed_at":"2025-09-04T20:29:08.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-04T22:22:38.175Z","etag":null,"topics":["ansible","aws","bash-script","docker-compose","eks-cluster","gomicro","grpc","krakend-api-gateway","kubernetes","terraform"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ozturkeniss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-04T20:26:41.000Z","updated_at":"2025-09-04T20:30:59.000Z","dependencies_parsed_at":"2025-09-04T22:22:41.680Z","dependency_job_id":"dd150aa7-f1c6-4666-b24d-bd828a5abb2a","html_url":"https://github.com/ozturkeniss/Kubedeploy-EKS","commit_stats":null,"previous_names":["ozturkeniss/kubedeploy-eks"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ozturkeniss/Kubedeploy-EKS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozturkeniss%2FKubedeploy-EKS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozturkeniss%2FKubedeploy-EKS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozturkeniss%2FKubedeploy-EKS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozturkeniss%2FKubedeploy-EKS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ozturkeniss","download_url":"https://codeload.github.com/ozturkeniss/Kubedeploy-EKS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozturkeniss%2FKubedeploy-EKS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274744062,"owners_count":25341136,"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","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ansible","aws","bash-script","docker-compose","eks-cluster","gomicro","grpc","krakend-api-gateway","kubernetes","terraform"],"created_at":"2025-09-12T02:47:07.587Z","updated_at":"2025-09-12T02:47:08.692Z","avatar_url":"https://github.com/ozturkeniss.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kubedeploy EKS\n\nProduction-ready microservices architecture built with Go, gRPC, PostgreSQL, and KrakenD API Gateway, designed for deployment on AWS EKS.\n\n## Architecture\n\n```mermaid\ngraph TB\n    Client[Client Applications]\n    \n    subgraph \"AWS Cloud\"\n        subgraph \"EKS Cluster\"\n            subgraph \"Ingress Layer\"\n                ALB[Application Load Balancer]\n                Ingress[Kubernetes Ingress]\n            end\n            \n            subgraph \"API Gateway Layer\"\n                KrakenD[KrakenD API Gateway\u003cbr/\u003ePort: 8000]\n            end\n            \n            subgraph \"Microservices Layer\"\n                UserSvc[User Service\u003cbr/\u003eHTTP: 8080\u003cbr/\u003egRPC: 9091]\n                PaymentSvc[Payment Service\u003cbr/\u003eHTTP: 8081]\n            end\n            \n            subgraph \"Data Layer\"\n                PostgreSQL[PostgreSQL Database\u003cbr/\u003ePort: 5432]\n                PVC[Persistent Volume]\n            end\n        end\n    end\n    \n    Client --\u003e ALB\n    ALB --\u003e Ingress\n    Ingress --\u003e KrakenD\n    KrakenD --\u003e UserSvc\n    KrakenD --\u003e PaymentSvc\n    PaymentSvc -.-\u003e|gRPC| UserSvc\n    UserSvc --\u003e PostgreSQL\n    PaymentSvc --\u003e PostgreSQL\n    PostgreSQL --\u003e PVC\n    \n    classDef client fill:#2E3440,stroke:#88C0D0,stroke-width:2px,color:#ECEFF4\n    classDef aws fill:#4C566A,stroke:#5E81AC,stroke-width:2px,color:#ECEFF4\n    classDef gateway fill:#5E81AC,stroke:#81A1C1,stroke-width:2px,color:#ECEFF4\n    classDef service fill:#8FBCBB,stroke:#88C0D0,stroke-width:2px,color:#2E3440\n    classDef database fill:#BF616A,stroke:#D08770,stroke-width:2px,color:#ECEFF4\n    \n    class Client client\n    class ALB,Ingress aws\n    class KrakenD gateway\n    class UserSvc,PaymentSvc service\n    class PostgreSQL,PVC database\n```\n\n## Deployment Flow\n\n```mermaid\nflowchart LR\n    A[Source Code] --\u003e B[Docker Build]\n    B --\u003e C[ECR Push]\n    C --\u003e D[Terraform Apply]\n    D --\u003e E[EKS Cluster]\n    E --\u003e F[Ansible Deploy]\n    F --\u003e G[Running Application]\n    \n    classDef source fill:#2E3440,stroke:#88C0D0,stroke-width:2px,color:#ECEFF4\n    classDef build fill:#4C566A,stroke:#5E81AC,stroke-width:2px,color:#ECEFF4\n    classDef deploy fill:#5E81AC,stroke:#81A1C1,stroke-width:2px,color:#ECEFF4\n    classDef infra fill:#8FBCBB,stroke:#88C0D0,stroke-width:2px,color:#2E3440\n    classDef app fill:#BF616A,stroke:#D08770,stroke-width:2px,color:#ECEFF4\n    \n    class A source\n    class B,C build\n    class D,F deploy\n    class E infra\n    class G app\n```\n\n## Quick Start\n\n### Prerequisites\n- Docker \u0026 Docker Compose\n- AWS CLI (for EKS deployment)\n- Terraform (for infrastructure)\n- kubectl (for Kubernetes management)\n\n### Local Development\n```bash\nmake start          # Start local environment\nmake test          # Run API tests\nmake stop          # Stop local environment\n```\n\n### AWS EKS Deployment\n```bash\nmake deploy-aws    # Full automated deployment\n```\n\n## API Endpoints\n\nAll requests go through the API Gateway at `http://localhost:8000`\n\n### Users API\n```bash\n# Get all users\nGET http://localhost:8000/api/users\n\n# Create a user\nPOST http://localhost:8000/api/users\nContent-Type: application/json\n{\n  \"username\": \"johndoe\",\n  \"email\": \"john@example.com\",\n  \"password\": \"password123\"\n}\n\n# Get user by ID\nGET http://localhost:8000/api/users/{id}\n\n# Update user\nPUT http://localhost:8000/api/users/{id}\nContent-Type: application/json\n{\n  \"username\": \"newusername\",\n  \"email\": \"newemail@example.com\"\n}\n\n# Delete user\nDELETE http://localhost:8000/api/users/{id}\n```\n\n### Payments API\n```bash\n# Get all payments\nGET http://localhost:8000/api/payments\n\n# Create a payment\nPOST http://localhost:8000/api/payments\nContent-Type: application/json\n{\n  \"user_id\": 1,\n  \"amount\": 99.99,\n  \"currency\": \"USD\",\n  \"description\": \"Product purchase\"\n}\n\n# Get payment by ID\nGET http://localhost:8000/api/payments/{id}\n\n# Get user's payments\nGET http://localhost:8000/api/payments/user/{userId}\n```\n\n### Dashboard API\n```bash\n# Get dashboard data (users + payments)\nGET http://localhost:8000/api/dashboard\n```\n\n## Development\n\n### Available Make Commands\n```bash\n# Local Development\nmake start          # Start the entire system\nmake stop           # Stop the entire system\nmake test           # Run all tests\nmake build          # Build all services\n\n# AWS Deployment\nmake deploy-aws     # Full AWS deployment\nmake build-push     # Build \u0026 push to ECR\nmake cleanup-aws    # Destroy everything\n\n# Kubernetes Operations\nmake k8s-deploy     # Deploy to K8s\nmake k8s-status     # Check status\nmake k8s-logs       # View logs\n\n# Terraform Operations\nmake tf-plan        # Plan infrastructure\nmake tf-apply       # Apply infrastructure\nmake tf-destroy     # Destroy infrastructure\n```\n\n### Direct Service Access (Development Only)\n- User Service: `http://localhost:8080`\n- Payment Service: `http://localhost:8081`\n- PostgreSQL: `localhost:5432` (user: postgres, password: postgres, db: userdb)\n\n## Project Structure\n\n```mermaid\ngraph TD\n    subgraph \"Source Code\"\n        A[cmd/] --\u003e A1[user-service/]\n        A[cmd/] --\u003e A2[payment-service/]\n        \n        B[internal/] --\u003e B1[user/]\n        B[internal/] --\u003e B2[payment/]\n        \n        C[api/proto/] --\u003e C1[user/]\n        \n        D[pkg/] --\u003e D1[config/]\n        D[pkg/] --\u003e D2[database/]\n    end\n    \n    subgraph \"Infrastructure\"\n        E[terraform/] --\u003e E1[main.tf]\n        E[terraform/] --\u003e E2[variables.tf]\n        E[terraform/] --\u003e E3[outputs.tf]\n        \n        F[kubernetes/] --\u003e F1[deployments/]\n        F[kubernetes/] --\u003e F2[services/]\n        F[kubernetes/] --\u003e F3[configmaps/]\n        \n        G[ansible/] --\u003e G1[playbooks/]\n        G[ansible/] --\u003e G2[roles/]\n    end\n    \n    subgraph \"Deployment\"\n        H[docker/] --\u003e H1[Dockerfile.user]\n        H[docker/] --\u003e H2[Dockerfile.payment]\n        \n        I[scripts/] --\u003e I1[deploy-aws.sh]\n        I[scripts/] --\u003e I2[build-and-push.sh]\n        I[scripts/] --\u003e I3[cleanup-aws.sh]\n    end\n    \n    classDef source fill:#2E3440,stroke:#88C0D0,stroke-width:2px,color:#ECEFF4\n    classDef infra fill:#4C566A,stroke:#5E81AC,stroke-width:2px,color:#ECEFF4\n    classDef deploy fill:#5E81AC,stroke:#81A1C1,stroke-width:2px,color:#ECEFF4\n    \n    class A,B,C,D,A1,A2,B1,B2,C1,D1,D2 source\n    class E,F,G,E1,E2,E3,F1,F2,F3,G1,G2 infra\n    class H,I,H1,H2,I1,I2,I3 deploy\n```\n\n## Technology Stack\n\n- **Backend**: Go 1.23, gRPC, PostgreSQL 15, GORM\n- **API Gateway**: KrakenD 2.7\n- **Infrastructure**: AWS EKS, Terraform, Ansible\n- **Containerization**: Docker, Kubernetes\n- **Architecture**: Clean Architecture, Microservices\n\n## Infrastructure Overview\n\n```mermaid\ngraph TB\n    subgraph \"AWS Infrastructure\"\n        subgraph \"VPC\"\n            subgraph \"Public Subnets\"\n                NAT[NAT Gateway]\n                ALB[Application Load Balancer]\n            end\n            \n            subgraph \"Private Subnets\"\n                subgraph \"EKS Cluster\"\n                    Master[EKS Control Plane]\n                    \n                    subgraph \"Worker Nodes\"\n                        Node1[t3.medium]\n                        Node2[t3.medium]\n                    end\n                    \n                    subgraph \"Pods\"\n                        UserPod[User Service Pods]\n                        PaymentPod[Payment Service Pods]\n                        KrakendPod[KrakenD Pods]\n                        PostgresPod[PostgreSQL Pod]\n                    end\n                end\n            end\n        end\n        \n        subgraph \"AWS Services\"\n            ECR[Elastic Container Registry]\n            EBS[Elastic Block Store]\n            IAM[IAM Roles \u0026 Policies]\n        end\n    end\n    \n    Internet --\u003e ALB\n    ALB --\u003e KrakendPod\n    KrakendPod --\u003e UserPod\n    KrakendPod --\u003e PaymentPod\n    PaymentPod -.-\u003e|gRPC| UserPod\n    UserPod --\u003e PostgresPod\n    PaymentPod --\u003e PostgresPod\n    PostgresPod --\u003e EBS\n    \n    ECR -.-\u003e UserPod\n    ECR -.-\u003e PaymentPod\n    IAM -.-\u003e Master\n    NAT -.-\u003e Node1\n    NAT -.-\u003e Node2\n    \n    classDef aws fill:#FF9900,stroke:#FF6600,stroke-width:2px,color:#FFFFFF\n    classDef eks fill:#326CE5,stroke:#1E4A72,stroke-width:2px,color:#FFFFFF\n    classDef pod fill:#48C9B0,stroke:#16A085,stroke-width:2px,color:#FFFFFF\n    classDef storage fill:#E74C3C,stroke:#C0392B,stroke-width:2px,color:#FFFFFF\n    \n    class ECR,EBS,IAM,ALB,NAT aws\n    class Master,Node1,Node2 eks\n    class UserPod,PaymentPod,KrakendPod,PostgresPod pod\n    class EBS storage\n```\n\n## Production Deployment\n\nThe system is designed for production deployment on AWS EKS with:\n\n- High availability across multiple AZs\n- Auto-scaling worker nodes\n- Persistent storage for PostgreSQL\n- Load balancing with AWS ALB\n- Container registry with ECR\n- Infrastructure as Code with Terraform\n- Automated deployment with Ansible\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozturkeniss%2Fkubedeploy-eks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fozturkeniss%2Fkubedeploy-eks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozturkeniss%2Fkubedeploy-eks/lists"}