{"id":19283079,"url":"https://github.com/vikashchauhan51/quotes","last_synced_at":"2026-04-29T21:04:00.688Z","repository":{"id":116103438,"uuid":"582357243","full_name":"VikashChauhan51/quotes","owner":"VikashChauhan51","description":"Dotnet core web app with Identity Server and HATEOS API with swagger OpenAPI documentation.","archived":false,"fork":false,"pushed_at":"2023-02-04T15:30:26.000Z","size":2668,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-23T22:29:55.508Z","etag":null,"topics":["dapr","dapr-component","dapr-sidecar","docker","dotnetcore","dotnetcore-7","dotnetcore-webapi","hateoas","hateoas-hal","helm-chart","identityserver4","kubernetes-cluster","kubernets","microservices-architecture","powershell","sqlserver-2019","swagger","swagger-documentation","swagger-ui","webapi-core"],"latest_commit_sha":null,"homepage":"","language":"C#","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/VikashChauhan51.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":"2022-12-26T15:10:29.000Z","updated_at":"2023-01-07T11:02:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"e722b264-09ca-4dc1-b271-1fb9c955bfae","html_url":"https://github.com/VikashChauhan51/quotes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VikashChauhan51/quotes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fquotes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fquotes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fquotes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fquotes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VikashChauhan51","download_url":"https://codeload.github.com/VikashChauhan51/quotes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fquotes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32443576,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T20:22:27.477Z","status":"ssl_error","status_checked_at":"2026-04-29T20:22:26.507Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["dapr","dapr-component","dapr-sidecar","docker","dotnetcore","dotnetcore-7","dotnetcore-webapi","hateoas","hateoas-hal","helm-chart","identityserver4","kubernetes-cluster","kubernets","microservices-architecture","powershell","sqlserver-2019","swagger","swagger-documentation","swagger-ui","webapi-core"],"created_at":"2024-11-09T21:29:38.523Z","updated_at":"2026-04-29T21:04:00.664Z","avatar_url":"https://github.com/VikashChauhan51.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DotNet Core 7 Web API Sample\nSample HATEOS API with swagger OpenAPI documentation and Identity Server. \n\n\n## Pre-requisite\n\n- Engineering laptop or desktop computer with **16-64GB** RAM and Windows 10 or later.\n- System administrator rights on laptop or desktop computer.\n\n## Steps to setup local development environment on **Windows 11**\n\n### Install Chocolatey\n\n#### [Chocolatey](https://chocolatey.org/install)\n\n- For existing choco, upgrade it\n\n    ```powershell\n    # Execute on PowerShell in admin mode\n        choco upgrade Chocolatey -y\n    ```  \n\n- For new installation with windows command prompt [CMD]\n\n    ```command\n      #Execute on CMD in admin mode\n\n      @\"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command \"[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))\" \u0026\u0026 SET \"PATH=%PATH%;%ALLUSERSPROFILE%\\chocolatey\\bin\"\n\n     ```\n\n- For new installation with PowerShell\n\n    ```powershell\n      # Execute on PowerShell in admin mode\n\n      Set-ExecutionPolicy Bypass -Scope Process -Force; \n      [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))\n\n    ```  \n\n### Install Dotnet 7 SDK\n\n#### [Dotnet \u0026 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/7.0)\n\n- For manual installation, [download](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) and install it.\n\n- For existing dotnet sdk, upgrade it\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n  choco upgrade dotnet-7.0-sdk -y\n  ```\n  \n- With Chocolatey\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n  choco install dotnet-7.0-sdk -y\n  ```\n\n### Install Git\n\n#### [Git](https://git-scm.com/)\n\n- For manual installation, [download](https://git-scm.com/download/win) and install it.\n\n- For new installation with Chocolatey, [Reference](https://community.chocolatey.org/packages/git).\n\n    ```powershell\n    # Execute on PowerShell in admin mode\n    choco install git -y\n    ```\n\n### Install WSL\n\n#### [WSL](https://docs.microsoft.com/en-us/windows/wsl/install)\n\n- Install WSL2 on Windows 10\n\n    ```powershell\n      # Execute on PowerShell in admin mode\n      wsl --install\n    ```\n\n- Restart your computer to finish the WSL installation on Windows 10 or later.\n- Set up your Linux username and password, [Reference](https://docs.microsoft.com/en-us/windows/wsl/setup/environment#set-up-your-linux-username-and-password).\n\n- Confirm platform\n\n    ```powershell\n      # Execute on PowerShell in admin mode\n        wsl --list --verbose\n        or\n        wsl -l -v\n    ```\n\n- Enable Windows Subsystem for Linux 2, Ignore if already set\n\n    ```powershell\n      # Execute on PowerShell in admin mode\n      wsl --set-default-version 2\n      or\n      wsl --set-version Ubuntu 2\n    ```\n\n- [Reference](https://pureinfotech.com/install-windows-subsystem-linux-2-windows-10/) to install WSL2 on windows 10 or later.\n\n### Install Docker Desktop\n\n#### [Docker Desktop](https://docs.docker.com/desktop/install/windows-install/)\n\n- For manual installation, [download](https://docs.docker.com/desktop/install/windows-install/) and install it.\n\n- With Chocolatey, [Docker Desktop](https://community.chocolatey.org/packages/docker-desktop) and [Docker Engine](https://community.chocolatey.org/packages/docker-engine),\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n  choco install docker-desktop -y\n  ```\n\n- After installation,restart your system and run the Docker desktop.\n\n- Enable Kubernetes(**Setting-\u003eKubernetes-\u003eEnable Kubernetes**).\n  - ![Enable kubernets](https://github.com/VikashChauhan51/quotes/blob/master/local-k8/imgs/enable-kubernets.png)\n  - ![Docker with kubernets](https://github.com/VikashChauhan51/quotes/blob/master/local-k8/imgs/docker.png)\n\n  \u003e Note: After installation, keep docker desktop in running state.\n\n### Install Kubernetes cli (kubectl)\n\n### [kubectl](https://kubernetes.io/docs/tasks/tools/)\n\n- For existing kubectl, upgrade it\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   choco upgrade Kubernetes-cli -y \n\n  # Verify installation\n   kubectl version --client\n  ```\n\n- For new installation.\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   choco install kubernetes-cli -y\n\n  # Verify installation\n   kubectl version --client\n  ```\n\n- [Reference](https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/) document for installation.\n\n### Install Helm cli (helm)\n\n#### [helm](https://helm.sh/)\n\n- For new installation.\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   choco install kubernetes-helm -y\n\n  # Verify installation\n   helm version\n  ```\n\n- For existing helm, upgrade it\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n  choco upgrade Kubernetes-helm -y\n\n  # Verify installation\n   helm version\n  ```\n- [Reference](https://helm.sh/docs/intro/install/) document for installation.\n\n### Install Sql Server Management Studio(SSMS)\n\n- Manually [download](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16) and install it.\n\n- With Chocolatey.\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   choco install ssms -y\n  ```\n\n- Start docker desktop [Ignore if it's already running].\n- Start SSMS and try to connect with sql server:\n    \u003e Server: localhost,1433\n    User: sa\n    Password: Welcome@123\n\n### Install Visual Studio\n\n#### [Visual Studio](https://visualstudio.microsoft.com/downloads/)\n\n- For manual installation, [download](https://visualstudio.microsoft.com/downloads/) and install it [**Recommended**].\n\n- For new installation with Chocolatey, [Reference](https://community.chocolatey.org/packages/visualstudio2022community).\n\n    ```powershell\n    choco install visualstudio2022community\n    # or\n    choco install visualstudio2022community --package-parameters \"--allWorkloads --includeRecommended --includeOptional --passive --locale en-US\"\n    ```\n\n#### Install Windows Terminal\n\n##### [Terminal](https://aka.ms/terminal)\n- With Chocolatey.\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   choco install microsoft-windows-terminal -y\n  ```\n\n- [Reference](https://docs.microsoft.com/en-us/windows/terminal/install) document to set up it.\n\n#### Install PowerShell 7\n\n##### [PowerShell7](https://docs.microsoft.com/en-us/shows/it-ops-talk/how-to-install-powershell-7)\n\n- For manual installation, [Download](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?WT.mc_id=THOMASMAURER-blog-thmaure\u0026view=powershell-7) and install it.\n\n- With Chocolatey.\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   choco install powershell-core -y\n  ```\n#### Install OpenSsl\n\n##### [OpenSsl](https://www.openssl.org/)\n\n- For manual installation, [Download](https://www.openssl.org/source/) and install it.\n\n- With Chocolatey.\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   choco install openssl -y\n  ```  \n\n#### Install Github Desktop\n\n##### [Github Desktop](https://desktop.github.com/)\n\n- For manual installation, [download](https://desktop.github.com/) and install it.\n\n- For new installation with Chocolatey, [Reference](https://community.chocolatey.org/packages/github-desktop).\n\n    ```powershell\n    choco install github-desktop -y\n    ```\n\n- Configure it with your github account.\n  \u003e Note: Use any Git UI tool as per your choice.\n\n\n#### Install Lens for Kubernetes\n\n##### [Lens](https://k8slens.dev/)\n\n- For manual installation, [download](https://k8slens.dev/) and install it.\n\n- For new installation with Chocolatey, [Reference](https://community.chocolatey.org/packages/lens).\n\n     ```powershell\n     # Execute on PowerShell in admin mode\n    choco install lens -y\n    ``` \n\n\n### Install the Dapr CLI\n\n#### [Dapr](https://dapr.io/)\n\n- For new installation.\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   Set-ExecutionPolicy RemoteSigned -scope CurrentUser;\n   powershell -Command \"iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex\"\n\n\n  # Verify installation (run this in new terminal)\n   dapr\n  ```\n- For existing dapr, upgrade it\n\n  ```powershell\n  # Execute on PowerShell in admin mode\n   dapr upgrade\n  ```\n\n## Dapr initialization in self-hosted mode\n\n```powershell\n# Execute on PowerShell in admin mode\ndapr init\n# or\ndapr init --slim\n# Verify Dapr version\ndapr --version\n```\n\u003e Here, dapr self-hosted mode initialization created **dapr_redis,dapr_zipkin**. You need to delete them for forever as we will deploy these separately later on.\n\n## Dapr initialization in local K8s\n\n```powershell\n# Execute on PowerShell in admin mode\ndapr init -k\n# Verify Dapr version\ndapr status -k\n```\n## Create namespaces in local k8s\n\n```powershell\nkubectl create ns vik\nkubectl create ns monitoring\nkubectl create ns ingress-nginx\n```\n\n## Add helm repos\n```powershell\nhelm repo add bitnami https://charts.bitnami.com/bitnami \nhelm repo add jetstack https://charts.jetstack.io\nhelm repo add kafka-ui https://provectus.github.io/kafka-ui\nhelm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx\nhelm repo update\nhelm repo list\n```\n### Install Cert Manager\n```powershell\nhelm install cert-manager jetstack/cert-manager --namespace vik --version v1.8.2 --set installCRDs=true\n```\n### Install Ingress controller [Ingress Controller](https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx)\n```powershell\nhelm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx  --set service.loadBalancerIP='127.0.0.1' --set admissionWebhooks.enabled=false --set extraArgs.enable-ssl-passthrough=false\n```\n### Install MsSqlServer\n\n- Start docker desktop [Ignore if it's already running].  \n\n  ```powershell\n  # Execute on PowerShell in admin mode\n  docker pull mcr.microsoft.com/mssql/server:2019-latest\n  cd C:\\install\n\n  # Git clone this:\n  git clone https://github.com/microsoft/mssql-docker\n\n  # Navigate to linux based chart.\n  cd .\\mssql-docker\\linux\\sample-helm-chart\\\n\n  # Helm install this:\n  helm install sqlserver . --set sa_password=Welcome@123 --set pvc.StorageClass=hostpath -n vik\n  # Installed in k8s vik namespace\n  ```\n\n## Install Kafka \n- Zookeeper\n\n  ```powershell\n\n  helm install zookeeper bitnami/zookeeper --set replicaCount=1 --set auth.enabled=false --set allowAnonymousLogin=true -n vik\n\n  # ZooKeeper can be accessed via port 2181 on the following DNS name from within your cluster:\n  # zookeeper.vik.svc.cluster.local\n\n  # To connect to your ZooKeeper server from outside the cluster execute the following commands:\n\n    kubectl port-forward --namespace vik svc/zookeeper 2181:2181 \u0026 zkCli.sh 127.0.0.1:2181\n\n  ```\n- Kafka\n\n  ```powershell\n  helm install kafka bitnami/kafka --set zookeeper.enabled=false --set replicaCount=1 --set externalZookeeper.servers=zookeeper.vik.svc.cluster.local --set externalAccess.enabled=true --set externalAccess.service.type=LoadBalancer --set externalAccess.autoDiscovery.enabled=true --set rbac.create=true --set autoCreateTopicsEnable=true --set deleteTopicEnable=true -n vik\n  # Kafka can be accessed by consumers via port 9092 on the following DNS name from within your cluster:\n\n   # kafka.vik.svc.cluster.local\n\n  # Each Kafka broker can be accessed by producers via port 9092 on the following DNS name(s) from within your cluster:\n\n   # kafka-0.kafka-headless.vik.svc.cluster.local:9092\n   #  Kafka Brokers port: 9094\n  ```\n- Create Kafka topic\n\n  ```powershell\n  kubectl --namespace vik exec -it kafka-0 -- kafka-topics.sh --create --topic mytopic --replication-factor 1 --partitions 1 --bootstrap-server kafka.vik.svc.cluster.local:9092\n  ```  \n\n## Install Redis\n\n```powershell\nhelm install redis bitnami/redis --set auth.enabled=false -n vik\n# create load balancer\nkubectl expose service redis-master -n vik --port=6379 --target-port=6379 --name=redis-external --type=LoadBalancer\n\n```\n## Install Zipkin\n\n```powershell\n# Pull Zipkin image\ndocker pull openzipkin/zipkin\n# Create Zipkin deployment in k8s\nkubectl create deployment zipkin --image openzipkin/zipkin -n monitoring\n# Create Zipkin service\nkubectl expose deployment zipkin --type ClusterIP --port 9411 -n monitoring\n# Create Zipkin load balancer\nkubectl expose service zipkin -n monitoring --port=9411 --target-port=9411 --name=zipkin-external --type=LoadBalancer\n# http://localhost:9411/zipkin/\n\n```\n## Install Kafka UI\n\n```powershell\n# Pull Kafka-UI image\ndocker pull provectuslabs/kafka-ui\n# Create Kafka-UI deployment in k8s\nkubectl run kafka-ui --image provectuslabs/kafka-ui --env=\"KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-0.kafka-headless.vik.svc.cluster.local:9093\" --port=8080 -n vik\n# Create Kafka-UI service\nkubectl expose pod kafka-ui --type ClusterIP --port 8080 -n vik\n# Create Kafka-UI load balancer\nkubectl expose service kafka-ui -n vik --port=8080 --target-port=8080 --name=kafka-ui-external --type=LoadBalancer\n# http://localhost:8080\n```\n## Clone repository into `C:\\` drive\n```cmd\ngit clone https://github.com/VikashChauhan51/quotes.git\n# verify path\ncd C:\\quotes\n```\n## Generate Self-signed certificate *If Expired*\n```powershell\n# Execute on PowerShell in admin mode\nopenssl req  -nodes -new -x509  -keyout ca.key -out ca.crt\n```\n\n## Import Issuer certificate to `Trusted Root Certificate Authorities` \n```powershell\n# Execute on PowerShell in admin mode\nImport-Certificate -FilePath C:\\quotes\\k8\\certs\\ca.crt -CertStoreLocation 'Cert:\\LocalMachine\\Root'\n```\n## Setup shared storage for Quote\n```powershell\n# Execute on PowerShell in admin mode\nmkdir c:\\mounted-k8\ncd C:\\quotes\\k8\\volume\nkubectl apply -f .\\local-persistent-volume.yaml -n vik\n\n```\n\n## Create Secret `internal-ca-key-pair` and ConfigMap for Trusted CA\n```powershell\ncd C:\\quotes\\k8\\certs\nkubectl create secret tls internal-ca-key-pair --cert=ca.crt --key=ca.key -n vik\nkubectl apply -f .\\issuer.yaml -n vik\nkubectl create configmap trusted-root-ca-cert-configmap -- from-file=self-signed-ca.crt=ca.crt -n vik\n\n# or\nkubectl apply -f .\\trusted-root-ca-cert-configmap.yaml -n vik\n\n```\n\n## Create Secrets\n```powershell\n# Execute on PowerShell in admin mode\ncd C:\\quotes\\local-k8\\secrets\n.\\secrets.ps1\n```\n## Install Dapr Components\n```powershell\ncd C:\\quotes\\charts\nhelm upgrade --install dapr-infra .\\dapr-infra -n vik\n```\n## Run Quote API with local Dapr sidecar\n```powershell\n# Navigate to **Quotes.API** folder path in terminal.\ncd C:\\quotes\\backend\\api\\src\\Quotes.API\n\ndapr run --app-id=\"quotes-api\" --app-port=5000 --dapr-grpc-port=53000 --dapr-http-port=53001 --components-path=\"C:\\quotes\\local-k8\\dapr\\components\"\n\n# Now, run QuotesAPI project with following launch setting:\n\"profiles\": {\n    \"QuotesAPI\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"swagger\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\",\n        \"DAPR_GRPC_PORT\": \"53000\",\n        \"DAPR_HTTP_PORT\": \"53001\"\n      },\n      \"applicationUrl\": \"https://localhost:7149;http://localhost:5201\",\n      \"dotnetRunMessages\": true\n    }\n# Now, call API with swagger endpoint\n\n# or\ndapr run --app-id=\"quotes-api\" --app-port=5000 --dapr-grpc-port=53000 --dapr-http-port=53001 --components-path=\"C:\\quotes\\local-k8\\dapr\\components\" dotnet run\n```\n## Run Quote API in local kubernets\n```powershell\ncd C:\\quotes\\charts\nhelm upgrade --install quote-api .\\quote-api -n vik\nhelm upgrade --install quote-identity .\\quote-identity-app -n vik\nhelm upgrade --install quote-app .\\quote-app -n vik\n```\n### Update host file\n```cmd\n127.0.0.1 quote-api.dev\n127.0.0.1 quote-identity.dev\n127.0.0.1 quote-app.dev\n```\n## Rewrite DNS name in CoreDNS config [CoreDNS](https://coredns.io/2017/05/08/custom-dns-entries-for-kubernetes/)\n- Add following entries into `coredns` COnfigMap of `Kube-System` namespace. (*below `ready` text*)\n```cmd\n# rewrite name {url} {ingress-controller-service-name}.{ingress-service-namespace-name}.svc.cluster.local\n\n rewrite name quote-identity.dev ingress-nginx-controller.ingress-nginx.svc.cluster.local\n rewrite name quote-api.dev ingress-nginx-controller.ingress-nginx.svc.cluster.local\n```\n- ![CoreDNS](https://github.com/VikashChauhan51/quotes/blob/master/local-k8/imgs/coredns.png)\n\n## Access API and Web Apps\n```cmd\n# Access following get url with `Accept:application/json` header\nhttps://quote-api.dev/api/v1/root\n\n# or\nhttps://quote-api.dev/swagger/index.html\n\n# Access identity server\nhttps://quote-identity.dev/\n\n# Access quote web app\nhttps://quote-app.dev/\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikashchauhan51%2Fquotes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvikashchauhan51%2Fquotes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikashchauhan51%2Fquotes/lists"}