CI/CD Pipeline using GitHub Actions, Harbor Container Registry, ArgoCD, Kubernetes, and NGINX [Overview]
![CI/CD Pipeline using GitHub Actions, Harbor Container Registry, ArgoCD, Kubernetes, and NGINX [Overview]](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1672642634207%2Fb2cdd1d9-a67b-4af5-a729-7bc931652218.png&w=3840&q=75)
Backend Sorcery & Finance Geeking
Search for a command to run...
![CI/CD Pipeline using GitHub Actions, Harbor Container Registry, ArgoCD, Kubernetes, and NGINX [Overview]](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1672642634207%2Fb2cdd1d9-a67b-4af5-a729-7bc931652218.png&w=3840&q=75)
Backend Sorcery & Finance Geeking
No comments yet. Be the first to comment.
In this series I've discussed about how I set up a custom CI/CD Pipeline using GitHub Actions, ArgoCD, Harbor Container Registry, Kubernetes, NGINX, Cloudflare
In simple terms, ArgoCD detects an event and triggers a Kubernetes deployment to achieve a desired state. This blog is the final piece of the Custom CI/CD Pipeline series for my project ChaturMail: AI Email Generator📧 ArgoCD detects some change in...
I joined Underdog Protocol as a developer in October 2023, after attending the Solana HackerHouses in Bangalore and Mumbai. Before that, I had worked on a contract basis and as a mentee under the LFX Mentorship throughout the year. This blog is about...

Create Short Name (SNS) for your Solana Public Key

We did so you don't have to

Rusly is a URL shortener built using the Rocket framework in Rust. Checkout RuslyCheckout the Rusly GitHub repo This blog lays out the system design thought process I used while designing and developing the system. Read about the Rust syntactical dev...

If you're willing to contribute to Harbor and/or need its code up & running on your local dev environment then follow along, this guide will get you started. Harbor is an open-source registry that secures artifacts with policies and role-based access...

This pipeline is implemented in the backend system of ChaturMail: AI Email Generator

Code changes are pushed to the master branch on GitHub
The repo has a Dockerfile. GitHub Actions does the following tasks
Build Docker Image
Push the image to Harbor Container Registry
Update YAML config being watched by ArgoCD
The Harbor Container Registry is hosted on my VPS, reverse proxied by NGINX, and domain mapped by Cloudflare. The GH action uploads the built image here
ArgoCD is installed on the VPS and watches a repo of YAML configs for Kubernetes. Any changes to the configs trigger a deployment by ArgoCD. The GH action updates the image tag in the YAML config
ArgoCD detects the change in YAML and initiates a K8S deployment
The docker image needed by K8S pods is fetched locally from Harbor
Kubernetes deploys and manages the pods w.r.t. to restarting, respawning, and load balancing
NGINX acts as a gateway to the VPS. All services are exposed to the internet utilizing NGINX. In the pipeline, NGINX plays the following roles:
Reverse proxies Harbor
Reverse proxies ChaturMail backend
The backend system for ChaturMail is served by a Kubernetes load balancer service which gets an internal local-only IP address. This service is then reverse proxied by NGINX.
The services and applications exposed by the VPS are all configured to work with subdomains of my main domain wilfredalmeida.com
The domain is managed by Cloudflare and its IP address is proxied which prevents exposing of the original VPS IP and works in favor of Cloudflare's analytics and security services.