{"id":26549889,"url":"https://github.com/selfmadeengineercode/microservices-go-starter","last_synced_at":"2026-04-11T11:01:25.001Z","repository":{"id":283258723,"uuid":"943855735","full_name":"SelfMadeEngineerCode/microservices-go-starter","owner":"SelfMadeEngineerCode","description":"Starter template for the Ride-Sharing course project - Microservices with Go","archived":false,"fork":false,"pushed_at":"2025-07-07T12:46:53.000Z","size":113,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-07T14:03:23.917Z","etag":null,"topics":["golang","grpc","microservice","rabbitmq"],"latest_commit_sha":null,"homepage":"https://www.selfmadeengineer.com/courses/microservices-with-go","language":"TypeScript","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/SelfMadeEngineerCode.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,"zenodo":null}},"created_at":"2025-03-06T11:30:03.000Z","updated_at":"2025-07-07T12:46:56.000Z","dependencies_parsed_at":"2025-05-08T17:21:58.221Z","dependency_job_id":"9b77c8f5-868a-420e-b189-7f9c44443a75","html_url":"https://github.com/SelfMadeEngineerCode/microservices-go-starter","commit_stats":null,"previous_names":["selfmadeengineercode/microservices-go-starter"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/SelfMadeEngineerCode/microservices-go-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SelfMadeEngineerCode%2Fmicroservices-go-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SelfMadeEngineerCode%2Fmicroservices-go-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SelfMadeEngineerCode%2Fmicroservices-go-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SelfMadeEngineerCode%2Fmicroservices-go-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SelfMadeEngineerCode","download_url":"https://codeload.github.com/SelfMadeEngineerCode/microservices-go-starter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SelfMadeEngineerCode%2Fmicroservices-go-starter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31677819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T08:18:19.405Z","status":"ssl_error","status_checked_at":"2026-04-11T08:17:08.892Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["golang","grpc","microservice","rabbitmq"],"created_at":"2025-03-22T07:22:13.862Z","updated_at":"2026-04-11T11:01:24.993Z","avatar_url":"https://github.com/SelfMadeEngineerCode.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \"Microservices with Go\" course project\n\nThis is the starter code for the \"Microservices with Go\" project.\n\n## Project overview\n\nIn this project‑driven course, you’ll build the backend microservices system for a Uber‑style ride‑sharing app from the ground up—using Go, Docker, and Kubernetes.\n\nBy the end, you’ll have a fully deployed, horizontally scalable ride‑sharing system that’s ready for real traffic. Plus, you’ll walk away with reusable template for building future distributed projects—accelerating your path to become a lead engineer.\n\nCheck it out at: https://www.selfmadeengineer.com/\n\n## Trip Scheduling Flow\n[![](https://mermaid.ink/img/pako:eNqNVt9v2jAQ_lcsP21qGvGjZSEPlSpaTX1YxWDVpAmpMvZBIkicOQ6UVf3fd4mdEgcKzQOK47v7vjt_d-aVcimAhnSW5vC3gJTDXcyWiiWzlOCTMaVjHmcs1eQpB3X49Xb88J1p2LLd4d4vFWdTUJuYw-HmnYo3oM5sH34fs10Cqf7Qb6oRFL-bnZLz5c3NnmRIRgrwteJGJmXOuTa2eyP0aFAPyXIyHtWO5YaxN7-PEoNJpNrM1nOSCw3Y_QuPWLq0nBvWl4h30fIos_Bhg5n6vMIVDTgVLyNN5II4LO9L65A8wrbyJimAyAkjwlbSBHBwENisQ2vl80T4pfezapbGRW1RHckkYaloILMNi9dsvgYXtHUQv2E-lXwF-hCccQ5ZE3sNiwZ0A_O2sjSw6oPTbB_nWbT3TB3dGEiykGrLlABBtCQTNp_H-sdP8sUwK3EmkGcS2-lnAQV8rUtwVCchGSvJIc8tJ2KoMGxDjxSZKIVapZZrpovc9_2j4nF7whGPifvM8jxepp8XkW2SzAQmOVKMZXoyF6_Nwq5bunetkLxp2HfIUQR8JQts5Bqz9DJGx3K1ZtZdHAVpCc9mZStkc3s-0WZtTFukOsGnB5QeE7u6PM4gKScQsozktmF_TmuN1qidUHZJa6q9V04m2RowlrV1SnbQc5GUq33YacFL_R2faHtPzxXt0ZN1O-6iXbRW1Zu4HxeiqjTJivk6ziPTcp-U1aXD-NPgZ46a21KL061Qj6kzc38_facarzCyv1tOdGgVk7OUpCipOSxjZEI9moBKWCzwKn8tQ8yojiCBGQ3xVTC1muEV_4Z2rNByuks5DbUqwKNKFsuIhgu2znFlZo79C1Cb4L36R8rmkoav9IWGvW_-1XVn0O_1-kE3GAyHgUd3-Lnb8fu9frc_xKfbvQ6CN4_-qyJ0_KDX7Q86QTDoDAfD66ve23_1IPGQ?type=png)](https://mermaid.live/edit#pako:eNqNVt9v2jAQ_lcsP21qGvGjZSEPlSpaTX1YxWDVpAmpMvZBIkicOQ6UVf3fd4mdEgcKzQOK47v7vjt_d-aVcimAhnSW5vC3gJTDXcyWiiWzlOCTMaVjHmcs1eQpB3X49Xb88J1p2LLd4d4vFWdTUJuYw-HmnYo3oM5sH34fs10Cqf7Qb6oRFL-bnZLz5c3NnmRIRgrwteJGJmXOuTa2eyP0aFAPyXIyHtWO5YaxN7-PEoNJpNrM1nOSCw3Y_QuPWLq0nBvWl4h30fIos_Bhg5n6vMIVDTgVLyNN5II4LO9L65A8wrbyJimAyAkjwlbSBHBwENisQ2vl80T4pfezapbGRW1RHckkYaloILMNi9dsvgYXtHUQv2E-lXwF-hCccQ5ZE3sNiwZ0A_O2sjSw6oPTbB_nWbT3TB3dGEiykGrLlABBtCQTNp_H-sdP8sUwK3EmkGcS2-lnAQV8rUtwVCchGSvJIc8tJ2KoMGxDjxSZKIVapZZrpovc9_2j4nF7whGPifvM8jxepp8XkW2SzAQmOVKMZXoyF6_Nwq5bunetkLxp2HfIUQR8JQts5Bqz9DJGx3K1ZtZdHAVpCc9mZStkc3s-0WZtTFukOsGnB5QeE7u6PM4gKScQsozktmF_TmuN1qidUHZJa6q9V04m2RowlrV1SnbQc5GUq33YacFL_R2faHtPzxXt0ZN1O-6iXbRW1Zu4HxeiqjTJivk6ziPTcp-U1aXD-NPgZ46a21KL061Qj6kzc38_facarzCyv1tOdGgVk7OUpCipOSxjZEI9moBKWCzwKn8tQ8yojiCBGQ3xVTC1muEV_4Z2rNByuks5DbUqwKNKFsuIhgu2znFlZo79C1Cb4L36R8rmkoav9IWGvW_-1XVn0O_1-kE3GAyHgUd3-Lnb8fu9frc_xKfbvQ6CN4_-qyJ0_KDX7Q86QTDoDAfD66ve23_1IPGQ)\n\n\n## Installation\nThe project requires a couple tools to run, most of which are part of many developer's toolchains.\n\n- Docker\n- Go\n- Tilt\n- A local Kubernetes cluster\n\n### MacOS\n\n1. Install Homebrew from [Homebrew's official website](https://brew.sh/)\n\n2. Install Docker for Desktop from [Docker's official website](https://www.docker.com/products/docker-desktop/)\n\n3. Install Minikube from [Minikube's official website](https://minikube.sigs.k8s.io/docs/)\n\n4. Install Tilt from [Tilt's official website](https://tilt.dev/)\n\n5. Install Go on MacOS using Homebrew:\n```bash\nbrew install go\n```\n\n6. Make sure [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/) is installed.\n\n### Windows (WSL)\n\nThis is a step by step guide to install Go on Windows using WSL.\nYou can either install via WSL (recommended) or using powershell (not covered, but similar to WSL).\n\n1. Install WSL for Windows from [Microsoft's official website](https://learn.microsoft.com/en-us/windows/wsl/install)\n\n2. Install Docker for Windows from [Docker's official website](https://www.docker.com/products/docker-desktop/)\n\n3. Install Minikube from [Minikube's official website](https://minikube.sigs.k8s.io/docs/)\n\n4. Install Tilt from [Tilt's official website](https://tilt.dev/)\n\n5. Install Go on Windows using WSL:\n```bash\n# 1. Get the Go binary\nwget https://dl.google.com/go/go1.23.0.linux-amd64.tar.gz\n\n# 2. Extract the tarball\nsudo tar -xvf go1.23.0.linux-amd64.tar.gz\n\n# 3. Move the extracted folder to /usr/local\nsudo mv go /usr/local\n\n# 4. Add Go to PATH (following the steps from the video)\ncd ~\nexplorer.exe .\n\n# Open .bashrc file and add following lines at the bottom and save the file.\nexport GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH\n\n# 5. Verify the installation\ngo version\n```\n\n6. Make sure [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/) is installed.\n\n## Run\n\n```bash\ntilt up\n```\n\n## Monitor\n\n```bash\nkubectl get pods\n```\n\nor\n\n```bash\nminikube dashboard\n```\n\n## Deployment (Google Cloud example)\nIt's advisable to first run the steps manually and then build a proper CI/CD flow according to your infrastructure.\n\n## 0. Environments\n```bash\nREGION: europe-west1 # change according to your location\nPROJECT_ID: \u003cyour-gcp-project-id\u003e\n```\n\n## 1. Add secrets.yaml file to the production folder\n\nProduction folder needs to contain a secrets.yaml for the production environment, you can just copy secrets from the development folder for now.\n\n## 2. Build Docker Images\nBuild all docker images and tag them accordingly to push to Artifact Registry.\n```bash\n# Build the Api gateway \ndocker build -t {REGION}-docker.pkg.dev/{PROJECT_ID}/ride-sharing/api-gateway:latest --platform linux/amd64 -f infra/production/docker/api-gateway.Dockerfile .\n\n# Build the Driver service \ndocker build -t {REGION}-docker.pkg.dev/{PROJECT_ID}/ride-sharing/driver-service:latest --platform linux/amd64 -f infra/production/docker/driver-service.Dockerfile .\n\n# Build the Trip service \ndocker build -t {REGION}-docker.pkg.dev/{PROJECT_ID}/ride-sharing/trip-service:latest --platform linux/amd64 -f infra/production/docker/trip-service.Dockerfile .\n\n# Build the Payment service \ndocker build -t {REGION}-docker.pkg.dev/{PROJECT_ID}/ride-sharing/payment-service:latest --platform linux/amd64 -f infra/production/docker/payment-service.Dockerfile .\n```\n\n## 3. Create a Artifact Registry repository\nGo to Google Cloud \u003e Artifact Registry and manually create a docker repository to host your project images. \n\n\n## 4. Push the Docker images to artifact registry\n\nDocker push the images. \nIf you get errors pushing:\n1. Make sure to `gcloud login`, select the right project or even `gcloud init`.\n2. Configure artifact on your docker config `gcloud auth configure-docker {REGION}-docker.pkg.dev` [Docs](https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling#cred-helper)\n\n\n## 5. Create a Google Kubernetes Cluster\nYou can either run a `gcloud` command to start a GKE cluster or manually create a cluster on the UI (recommended).\n\n## 6. Update manifests files\n\nConnect to your remote cluster and apply the kubernetes manifests.\n\n```bash\ngcloud container clusters get-credentials ride-sharing --region {REGION}--project {PROJECT_ID}\n```\n\nNext, upload each manifest by hand to make sure the correct order is maintained.\n\n```bash\n# First, apply the app-config and secrets\nkubectl apply -f infra/production/k8s/app-config.yaml\nkubectl apply -f infra/production/k8s/secrets.yaml\n\n# Jaeger\nkubectl apply -f infra/production/k8s/jaeger-deployment.yaml\n\n# RabbitMQ\nkubectl apply -f infra/production/k8s/rabbitmq-deployment.yaml\n\n# Wait for both Jaeger and RabbitMQ to be running successfully\n\n# Then, apply the services\nkubectl apply -f infra/production/k8s/api-gateway-deployment.yaml\n# Wait until the API is up and then do the next and so on...\nkubectl apply -f infra/production/k8s/driver-service-deployment.yaml\nkubectl apply -f infra/production/k8s/trip-service-deployment.yaml\nkubectl apply -f infra/production/k8s/payment-service-deployment.yaml\n```\n\nIf you need to redeploy you can use the same command above or just `kubectl apply -f infra/production/k8s`\nSometimes pods might need to be deleted for new ones to be deployed.\n\n```bash\nkubectl get pods\nkubectl delete pod \u003cpod-name\u003e\n\n# or for all deployments\nkubectl rollout restart deployment\n```\n\n## 7. Enjoy!\n```bash\nGet the External IP from the api-gateway\nkubectl get services\n```\n\nGo back to locally developing your project by changing kubernetes context\n```bash\nkubectl config get-contexts\n\n# For Docker Desktop\nkubectl config use-context docker-desktop\n\n# OR for Minikube\nkubectl config use-context minikube\n```\n\n## Adding HTTPS to your API\n0. Reserve a static IP in GCP:\nGo to the Google Cloud Console → VPC Network → External IP addresses.\nClick \"RESERVE STATIC ADDRESS\".\nName it api-gateway-ip (to match your annotation).\nChoose the same region as your GKE cluster (or \"global\" if using a global Ingress).\n\nConfirm your IP exists:\n```bash\ngcloud compute addresses list\n```\n\n1. Add the ingress deployment\n2. Change from LoadBalancer to ClusterIP\n3. Apply the config\n```bash\nkubectl apply -f infra/production/k8s/api-gateway-ingress.yaml\nkubectl apply -f infra/production/k8s/api-gateway-deployment.yaml\n```\n4. Get the IP address: \n```bash\nkubectl get ingress api-gateway-ingress\n```\n\nYou should also wait for SSL certificate to be provisioned. Check the status:\n\n```bash\nkubectl describe managedcertificate api-gateway-cert\n```\n\nOnce the certificate is provisioned (you'll see a \"Provisioning\" status change to \"Active\")\n\n5. The Ingress will automatically provision a Google-managed SSL certificate for the IP address. You can access your API using:\n```bash\nhttps://\u003cIP_ADDRESS\u003e\n```\n\nNote: Since this is using a self-signed certificate, browsers will show a security warning. This is normal and expected. You can:\nAccept the warning in your browser (not recommended for production)\nUse a proper domain name (recommended for production)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fselfmadeengineercode%2Fmicroservices-go-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fselfmadeengineercode%2Fmicroservices-go-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fselfmadeengineercode%2Fmicroservices-go-starter/lists"}