{"id":28193286,"url":"https://github.com/rithinch/devops-workshop","last_synced_at":"2026-02-13T12:02:10.896Z","repository":{"id":288616159,"uuid":"968685296","full_name":"rithinch/devops-workshop","owner":"rithinch","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-19T11:59:30.000Z","size":25734,"stargazers_count":0,"open_issues_count":0,"forks_count":36,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-16T12:17:42.538Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","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/rithinch.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-04-18T14:39:10.000Z","updated_at":"2025-04-19T11:59:33.000Z","dependencies_parsed_at":"2025-04-19T04:25:12.286Z","dependency_job_id":null,"html_url":"https://github.com/rithinch/devops-workshop","commit_stats":null,"previous_names":["rithinch/devops-workshop"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rithinch/devops-workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rithinch%2Fdevops-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rithinch%2Fdevops-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rithinch%2Fdevops-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rithinch%2Fdevops-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rithinch","download_url":"https://codeload.github.com/rithinch/devops-workshop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rithinch%2Fdevops-workshop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274010099,"owners_count":25206763,"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-07T02:00:09.463Z","response_time":67,"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":[],"created_at":"2025-05-16T12:17:40.683Z","updated_at":"2026-02-13T12:02:10.816Z","avatar_url":"https://github.com/rithinch.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DevOps Workshop — **From Code to Cloud**\n_Facilitated by: Rithin Chalumuri_\n\n---\n\n## 🧑‍💼 About Me\n\nHi! I’m **Rithin Chalumuri**.\n\nI enjoy building products from 0 to 1, and more importantly, I enjoy helping others build products from 0 to 1.\n\nI've worked across startups and tech projects where I’ve experienced systems growing from a single machine to distributed cloud-scale architectures.\n\nGitHub: [github.com/rithinch](https://github.com/rithinch)\n\n---\n\n## 🕒 Agenda\n\n| Time            | Topic                                      |\n|-----------------|--------------------------------------------|\n| 9:30 - 10:00    | Pre-requisites \u0026 Dev Environment Setup     |\n| 10:00 - 10:30   | Introduction to DevOps                     |\n| 10:30 - 11:30   | Docker: Containers for Developers          |\n| 11:30 - 12:15   | Cloud Deployment \u0026 Hosting                 |\n| 12:15 - 1:00    | CI/CD with GitHub Actions                  |\n| 1:00 - 2:00     | Lunch 🍽️                                   |\n| 2:00 - 3:30     | Distributed Systems \u0026 Scaling Challenges   |\n| 3:30 - 3:40     | Break                                      |\n| 3:40 - 4:40     | Infrastructure as Code with .NET Aspire                    |\n| 4:40 - 4:50     | Break                                      |\n| 4:50 - 5:30     | Observability \u0026 Monitoring Fundamentals    |\n| 5:30 - 6:00     | Real-world Q\u0026A, Wrap-up                    |\n\n---\n\n## 💡 Session: Introduction to DevOps (10:00 - 10:30)\n\n**Concepts:**\n- DevOps = Developers + Operations.\n- Not a tool, not a job title, a **culture**.\n- Goal: Shorten time from \"code complete\" to \"customer using it\".\n- Emphasis on collaboration, automation, and reliability.\n\n**Analogy:**\nImagine you're trying to build a LEGO set with friends. Everyone's working on different pieces, but unless you communicate and share instructions, your house will collapse.\n\n**Group Activity:**\nForm 2-3 person teams. Each team writes down:\n- A problem they've faced when \"it worked locally but failed in production\".\n- What helped resolve it? Share and discuss.\n\n**Learning Resource:**\n- [The Phoenix Project](https://itrevolution.com/the-phoenix-project/) (Book)\n- [What is DevOps?](https://azure.microsoft.com/en-us/overview/devops/what-is-devops/)\n\n---\n\n## 🐫 Session: Docker \u0026 Containers (10:30 - 11:30)\n\n**Why Containers?**\n- \"It works on my laptop\" syndrome is a common pain.\n- Containers = Same environment, everywhere.\n\n**Analogy:**\nContainers are like lunch boxes. Whether you're in Mumbai or New York, the food inside remains the same. The carrier standardizes transportation.\n\n**Dockerfile Breakdown:**\n\n```Dockerfile\nFROM python:3.11-slim      # Base image\nWORKDIR /app               # Working directory\nCOPY . .                   # Copy code into container\nRUN pip install -r requirements.txt  # Install dependencies\nEXPOSE 8501                # Application port\nCMD [\"streamlit\", \"run\", \"app.py\"]   # Start command\n```\n\n**Activity:**\n- Given a basic Python or Streamlit app, write a Dockerfile.\n- Build and run the image locally.\n- Modify the `CMD` and `EXPOSE` lines and observe the behavior.\n\n**Learning Resource:**\n- [Docker Official Docs](https://docs.docker.com/get-started/)\n- [Azure Container Apps](https://learn.microsoft.com/en-us/azure/container-apps/overview)\n\n---\n\n## ☁️ Session: Cloud Deployment \u0026 Hosting (11:30 - 12:30)\n\n**Concepts:**\n- Cloud = Renting servers, storage, and networking on-demand.\n- Azure: Azure Container Apps simplifies container-based deployments.\n\n**Analogy:**\nImagine renting a bike instead of buying one. The cloud allows you to scale your fleet based on demand without owning every piece.\n\n**Mermaid Diagram:**\n```mermaid\ngraph LR\n    Code--\u003e|Docker Build|Image\n    Image--\u003e|Push|ContainerRegistry\n    ContainerRegistry--\u003e|Deploy|AzureContainerApps\n```\n\n**Group Exercise:**\n- Deploy your container from the previous exercise to Azure Container Apps.\n\n**Learning Resource:**\n- [Azure Container Apps Deployment Guide](https://learn.microsoft.com/en-us/azure/container-apps/quickstart-deploy-container)\n\n---\n\n## 🚀 Session: CI/CD with GitHub Actions (12:40 - 1:30)\n\n**Concepts:**\n- Automated testing \u0026 deployment.\n- Reduces manual errors.\n- Faster feature shipping.\n\n**GitHub Actions Example:**\n```yaml\nname: Deploy App\n\non:\n  push:\n    branches: [ main ]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout Code\n      uses: actions/checkout@v4\n\n    - name: Build Docker Image\n      run: docker build -t my-app .\n\n    - name: Push to Registry\n      run: docker push myregistry.azurecr.io/my-app:latest\n```\n\n**Exercise:**\n- Create a GitHub Action to build and push your container image to Azure Container Registry.\n\n**Learning Resource:**\n- [GitHub Actions Documentation](https://docs.github.com/en/actions)\n- [Deploy to Azure with GitHub Actions](https://learn.microsoft.com/en-us/azure/developer/github/github-actions-overview)\n\n---\n\n## 🤔 Session: Distributed Systems \u0026 Scaling Challenges (2:30 - 3:30)\n\n**Why Break Down Systems?**\n- Independent scaling.\n- Easier fault isolation.\n- Smaller, manageable codebases.\n\n**Analogy:**\nRunning one giant program is like having one massive power switch for your house. Microservices give you room-specific switches — isolate and fix issues independently.\n\n**Communication Patterns:**\n\n| Pattern            | Example        | Pros              | Cons                   |\n|---------------------|----------------|--------------------|-------------------------|\n| Synchronous         | API Call       | Simple             | Tight coupling, latency|\n| Asynchronous        | Message Queue  | Decoupled, resilient| More complexity        |\n\n**Real-World Example: UPI**\n- Distributed banking nodes.\n- Network delays, retries, and eventual consistency.\n\n**Group Activity:**\nDesign a simple Swiggy-like order flow:\n1. Order Service\n2. Restaurant Notification\n3. Delivery Partner Notification\n4. Payment Processing\n\n**Mermaid Diagram:**\n```mermaid\nsequenceDiagram\n    Customer-\u003e\u003eOrderService: Place Order\n    OrderService-\u003e\u003eRestaurant: Notify Order\n    Restaurant-\u003e\u003eDeliveryPartner: Assign Delivery\n    DeliveryPartner-\u003e\u003ePaymentGateway: Collect Payment\n    PaymentGateway-\u003e\u003eCustomer: Confirm Payment\n```\n\n**Learning Resource:**\n- [Designing Data-Intensive Applications](https://dataintensive.net/)\n- [Azure Service Bus](https://learn.microsoft.com/en-us/azure/service-bus-messaging/)\n\n---\n\n## 🔧 Session: Infrastructure as Code (3:40 - 4:40)\n\n**Concepts:**\n- Declarative templates for cloud infra.\n- Consistent, repeatable deployments.\n\n**Terraform Example:**\n```hcl\nresource \"azurerm_container_group\" \"app\" {\n  name                = \"my-app-container\"\n  location            = \"East US\"\n  resource_group_name = \"devops-workshop\"\n  os_type             = \"Linux\"\n\n  container {\n    name   = \"app\"\n    image  = \"myregistry.azurecr.io/my-app:latest\"\n    cpu    = \"1\"\n    memory = \"1.5\"\n    ports {\n      port     = 8501\n      protocol = \"TCP\"\n    }\n  }\n}\n```\n\n**.NET Aspire Example:**\n- .NET Aspire allows you to define local cloud-like environments in code.\n\n**Group Activity:**\n- Build an Azure Container Apps deployment using Terraform or .NET Aspire templates.\n\n**Learning Resource:**\n- [Terraform Azure Provider](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs)\n- [.NET Aspire](https://devblogs.microsoft.com/dotnet/introducing-dotnet-aspire/)\n\n---\n\n## 🚀 Session: Observability \u0026 Monitoring Fundamentals (4:50 - 5:30)\n\n**3 Pillars:**\n- Logs: Text-based records.\n- Metrics: Quantitative data (e.g., CPU usage).\n- Traces: Journey of a request.\n\n**Analogy:**\nMonitoring is like a health checkup. Logs = Symptoms, Metrics = Vitals, Traces = Pathology reports.\n\n**Exercise:**\n- Emit logs from your containerized app.\n- Use Azure Monitor to view logs and traces.\n\n**Learning Resource:**\n- [Azure Monitor Overview](https://learn.microsoft.com/en-us/azure/azure-monitor/overview)\n- [OpenTelemetry](https://opentelemetry.io/)\n\n---\n\n## 🖊️ Final Wrap-up: The DevOps Loop (5:30 - 6:00)\n\n**Code ➔ Build ➔ Test ➔ Deploy ➔ Monitor ➔ Feedback ➔ Repeat**\n\n- Build with iteration in mind.\n- Expect failure, design for recovery.\n- Automate everything.\n- Focus on team collaboration, not just tools.\n\n**Meme Reference:**\n\u003e \"My code worked on Friday, what happened over the weekend?\"  — *Production on Monday*\n\n---\n\n## 🎉 Thank You!\n\nThis workshop was about:\n\n- Understanding core concepts, not just tech stacks.\n- Building mental models for modern distributed systems.\n- Becoming production-ready.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frithinch%2Fdevops-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frithinch%2Fdevops-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frithinch%2Fdevops-workshop/lists"}