{"id":21001686,"url":"https://github.com/DatNguyen2711/Devops-Projects-CICD-And-Observability","last_synced_at":"2025-12-31T00:36:36.158Z","repository":{"id":230882705,"uuid":"780247036","full_name":"DatNguyen2711/Devops-Pipeline-On-Premise","owner":"DatNguyen2711","description":"My Devops project (from scratch): CICD with Gitlab-CI, Jenkins, Docker and also running on Kubernetes cluster","archived":false,"fork":false,"pushed_at":"2024-08-24T16:14:07.000Z","size":26569,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-19T08:16:04.524Z","etag":null,"topics":["argo-rollouts","argocd","aws-ec2","cicd","devops","docker","gitlab-ci","hashicorp","hashicorp-vault","helm-chart","jenkins","kubernetes","terraform"],"latest_commit_sha":null,"homepage":"","language":"TSQL","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/DatNguyen2711.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-04-01T04:04:32.000Z","updated_at":"2024-11-19T04:00:23.000Z","dependencies_parsed_at":"2024-11-19T08:26:32.427Z","dependency_job_id":null,"html_url":"https://github.com/DatNguyen2711/Devops-Pipeline-On-Premise","commit_stats":null,"previous_names":["datnguyen2711/pharmacy-web","datnguyen2711/pharmacy-website-kubernetes-bare-metal-docker-cicd-aws","datnguyen2711/devops-project-pharmacy-website","datnguyen2711/devops-pipeline-onprem-cloud","datnguyen2711/devops-pipeline-on-premise"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatNguyen2711%2FDevops-Pipeline-On-Premise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatNguyen2711%2FDevops-Pipeline-On-Premise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatNguyen2711%2FDevops-Pipeline-On-Premise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatNguyen2711%2FDevops-Pipeline-On-Premise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DatNguyen2711","download_url":"https://codeload.github.com/DatNguyen2711/Devops-Pipeline-On-Premise/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243419052,"owners_count":20287803,"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":["argo-rollouts","argocd","aws-ec2","cicd","devops","docker","gitlab-ci","hashicorp","hashicorp-vault","helm-chart","jenkins","kubernetes","terraform"],"created_at":"2024-11-19T08:16:10.684Z","updated_at":"2025-12-31T00:36:36.123Z","avatar_url":"https://github.com/DatNguyen2711.png","language":"TSQL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tech Stack\n\nThis project utilizes the following technologies:\n\n| Technology       | Description                        |\n|------------------|------------------------------------|\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/7/7d/Microsoft_.NET_logo.svg\" alt=\".NET Core API 8\" width=\"20\" height=\"20\"\u003e **.NET Core API 8** | Backend                 |\n| \u003cimg src=\"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRcBiBI248rgjtRfFgxc8WapC-w7npSGPi6GnV1_VUMww\u0026s\" alt=\"ReactJS\" width=\"20\" height=\"20\"\u003e **ReactJS** | Frontend                |\n| \u003cimg src=\"https://aptech.vn/wp-content/uploads/2021/04/sql-server.png\" alt=\"SQL Server\" width=\"20\" height=\"20\"\u003e **SQL Server** | Database                         |\n| \u003cimg src=\"https://techvccloud.mediacdn.vn/2018/7/13/docker-1531468887078532266614-0-14-400-726-crop-15314688919081778546108.png\" alt=\"Docker\" width=\"20\" height=\"20\"\u003e **Docker** | Containerization                 |\n| \u003cimg src=\"https://www.logicata.com/wp-content/uploads/2020/08/Amazon-EC2@4x-e1593195270371.png\" alt=\"AWS EC2\" width=\"20\" height=\"20\"\u003e **AWS EC2** | Cloud infrastructure (server for Harbor)             |\n| \u003cimg src=\"https://static-00.iconduck.com/assets.00/harbor-icon-1018x1024-15bgc40q.png\" alt=\"Harbor Registry\" width=\"20\" height=\"20\"\u003e **Harbor Registry** | Container registry               |\n| \u003cimg src=\"https://castrillo.gitlab.io/figaro/runner_logo.png\" alt=\"Gitlab-CI\" width=\"20\" height=\"20\"\u003e **Gitlab-CI** | Continuous Integration           |\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Jenkins_logo.svg/1200px-Jenkins_logo.svg.png\" alt=\"Jenkins\" width=\"20\" height=\"20\"\u003e **Jenkins** | Continuous Integration           |\n| \u003cimg src=\"https://encore.dev/assets/resources/kubernetes_cover.png\" alt=\"Kubernetes\" width=\"20\" height=\"20\"\u003e **Kubernetes** | Container orchestration          |\n| \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/640px-Groovy-logo.svg.png\" alt=\"Groovy\" width=\"20\" height=\"20\"\u003e **Groovy** | Scripting (Jenkins pipeline script)             |\n| \u003cimg src=\"https://banner2.cleanpng.com/20180711/ysg/aawkk38yb.webp\" alt=\"Helm\" width=\"20\" height=\"20\"\u003e **Helm** | Kubernetes package management    |\n| \u003cimg src=\"https://tenten.vn/tin-tuc/wp-content/uploads/2023/09/tao-video-AI-bang-D-ID.jpg\" alt=\"VMWare\" width=\"20\" height=\"20\"\u003e **VMWare** | Virtualization (100% infra using this)                   |\n| \u003cimg src=\"https://cdn.prod.website-files.com/6203daf47137054c031fa0e6/63c7f4ab9471e63a01d7d285_argo-icon-color.png\" alt=\"Argo CD\" width=\"20\" height=\"20\"\u003e **ArgoCD** | Gitops            |\n| \u003cimg src=\"https://miro.medium.com/v2/resize:fit:1066/1*FAFtnHl7L7CcIRBzny3zMw.png\" alt=\"Kaniko\" width=\"20\" height=\"20\"\u003e **Kaniko** | Build container images in Kubernetes without Docker daemon |\n| \u003cimg src=\"https://www.netdata.cloud/img/vault.svg\" alt=\"Vault\" width=\"20\" height=\"20\"\u003e **HashiCorp Vault**  | Secret management |\n| \u003cimg src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMVVYYgj_LY437FrV-KwNX9-rul33uYnRtgbk40J4GlNG29dkWyvnbtGgyBfrUqGW6e4hhbNO-WxGcOXNltbDyXDjpkCcugy0HcMxIYxBFCuQOKkMx8P2oIcL1D-hSYcZig4sGTkiFwG4/s1600/opentelemetry-stacked-color.png\" alt=\"OpenTelemetry\" width=\"20\" height=\"20\"\u003e **OpenTelemetry** | Observability and Monitoring      |\n| \u003cimg src=\"https://banner2.cleanpng.com/20190423/os/kisspng-prometheus-grafana-kubernetes-application-software-1713896726589.webp\" alt=\"Prometheus\" width=\"20\" height=\"20\"\u003e **Prometheus** | Metrics collection and monitoring |\n| \u003cimg src=\"https://www.skedler.com/blog/wp-content/uploads/2021/08/grafana-logo.png\" alt=\"Grafana\" width=\"20\" height=\"20\"\u003e **Grafana** | Data visualization and monitoring |\n\n# Getting Started\n\n## First, run the development server:\n\n```bash\ndocker compose up -d\n```\n\nOpen [http://localhost:8900](http://localhost:8900) with your browser to see the result.\n\nYou can start editing the page by modifying `Medicine-Web-FE/src/component/auth/login`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) to write API and also ReactJS for client\n\n## Learn More\n\n## Deploy on EC2 Instance\n\nThe easiest way to deploy this app is to use the AWS EC2 [AWS Platform](https://ap-southeast-1.console.aws.amazon.com/ec2/home?region=ap-southeast-1#Home:)\n\nStep 1: Register a EC2 (T2 medium above because SQL server need 2000MB to run) instance using Ubuntu ( Remember you open Inbound Rules of Instance before run the application [AWS Platform](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAX.create-cluster.console.configure-inbound-rules.html) )\n\nStep 2: Download Docker (lastest version is best)\n\n```bash\nmkdir -p /tools/docker\n\ntouch docker-install.sh \u0026\u0026 chmod +x docker-install.sh \u0026\u0026 vi docker-install.sh\n\n#!/bin/bash\nsudo apt install -y apt-transport-https ca-certificates curl software-properties-common\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\necho \"deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list \u003e /dev/null\nsudo apt update -y\nsudo apt install docker-ce -y\nsudo systemctl start docker\nsudo systemctl enable docker\nsudo curl -L \"https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose\nsudo chmod +x /usr/local/bin/docker-compose\ndocker -v\ndocker-compose -v\n\n\n./docker-install.sh\n\n\nsudo usermod -aG docker $(whoami)\n\n```\n\nStep 3 : Clone this Repo and cd path/to/the repo\n\n```bash\ndocker compose up -d\n```\n\nStep 4:\nGo to the address:\n\n```bash\nhttp://{instance_public_IP_address}:8900\n```\n\n## More\n\nYou can using certbot and buy an domain\n\n## Create EC2 Instance with Terraform\n\n![image](https://github.com/DatNguyen2711/Pharmacy-Web/assets/81822483/b8fc4c6e-9102-43a1-8890-caffc5acf6ed)\n\nStep 1: First, run you have to create AWS account and IAM user account\n\nOpen [IAM AWS docs](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) to see how to create AWS account and IAM user\n\nStep 2: Attach to IAM user policies such as : AdministratorAccess (you can using only Administrator ec2 policies)\n\nClick to the user then select security credentials and then follow the instructions to create access key for IAM\nuser (follow to the bellow instructions)\n![image](https://github.com/DatNguyen2711/Pharmacy-Web/assets/81822483/cbeee82a-e05b-4449-ab5a-fd450cbb51f1)\nthen...\n![image](https://github.com/DatNguyen2711/Pharmacy-Web/assets/81822483/e738ac15-12a3-406b-aad9-6cda8c7c84b9)\n![image](https://github.com/DatNguyen2711/Pharmacy-Web/assets/81822483/fb448382-f8d7-413b-9f9f-8c0f110daa6d)\nthen name your tag, here is your access key\n![image](https://github.com/DatNguyen2711/Pharmacy-Web/assets/81822483/9bf0abe7-6155-4b7a-9843-1d045ef6177b)\n\nStep 3: Configure aws key in your local machine\n\n```bash\naws configure\n\n\n----\nAWS Access Key ID [****************PAWK]: ************\nAWS Secret Access Key [****************tz1d]: ***************\n```\n\nStep 4: Run this command to create and running EC2 Instance\n\n```bash\nterraform init\n\nterraform plan\n\nterraform apply --auto-approve\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDatNguyen2711%2FDevops-Projects-CICD-And-Observability","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDatNguyen2711%2FDevops-Projects-CICD-And-Observability","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDatNguyen2711%2FDevops-Projects-CICD-And-Observability/lists"}