<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: EMMANUEL</title>
    <description>The latest articles on DEV Community by EMMANUEL (@onyemuche).</description>
    <link>https://dev.to/onyemuche</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2821402%2Fc9f5658e-573c-4fa2-80e7-01e75435b19a.jpg</url>
      <title>DEV Community: EMMANUEL</title>
      <link>https://dev.to/onyemuche</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/onyemuche"/>
    <language>en</language>
    <item>
      <title>Project on how to build Weather forcast API</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Sun, 01 Feb 2026 02:46:22 +0000</pubDate>
      <link>https://dev.to/onyemuche/project-on-how-to-build-weather-forcast-api-5fl9</link>
      <guid>https://dev.to/onyemuche/project-on-how-to-build-weather-forcast-api-5fl9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Architecture Flow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Built locally using .NET 8 &amp;gt;&amp;gt; Tested locally to ensure correctness &amp;gt;&amp;gt; Containerized with Docker &amp;gt;&amp;gt; Stored securely in Azure Container Registry &amp;gt;&amp;gt; Deployed to Azure Kubernetes Service &amp;gt;&amp;gt; Automatically updated via GitHub Actions&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Required Software&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual Studio Code&lt;/li&gt;
&lt;li&gt;.NET 8 SDK&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Docker Desktop
⚠️ Start Docker Desktop after installation&lt;/li&gt;
&lt;li&gt;Azure CLI&lt;/li&gt;
&lt;li&gt;kubectl&lt;/li&gt;
&lt;li&gt;GitHub CLI (optional but recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✅ Verify Installations&lt;/strong&gt;&lt;br&gt;
In VS Code, after installation, create a folder for the project and verify these  &lt;strong&gt;dotnet&lt;/strong&gt;, &lt;strong&gt;git&lt;/strong&gt;, &lt;strong&gt;docker&lt;/strong&gt;, &lt;strong&gt;az&lt;/strong&gt; , &lt;strong&gt;kubectl&lt;/strong&gt;. Run the following commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dotnet --version&lt;/li&gt;
&lt;li&gt;git --version&lt;/li&gt;
&lt;li&gt;docker --version&lt;/li&gt;
&lt;li&gt;az --version&lt;/li&gt;
&lt;li&gt;kubectl version --client&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0mevq0wq9izy0h6gbj3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0mevq0wq9izy0h6gbj3.png" alt="Required software verification" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create and Test the .NET Application Locally&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Never deploy untested code. Testing locally allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Catch errors early&lt;/li&gt;
&lt;li&gt;Validate endpoints&lt;/li&gt;
&lt;li&gt;Avoid expensive cloud debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1.1 Create Project Structure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;mkdir weather-app-demo&lt;br&gt;
cd weather-app-demo&lt;br&gt;
mkdir WeatherApp&lt;br&gt;
cd WeatherApp&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.2 Initialize the .NET Web API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;we initialize a .NET Web API to get the application ready to receive, process, and respond to HTTP requests correctly. Initialization wires everything together so the Web API can run reliably, securely, and predictably.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;dotnet new webapi -minimal&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft18vj0ppi4elsaux9r27.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft18vj0ppi4elsaux9r27.png" alt="Initialize .NET Web API" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.3 Add Required Packages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;dotnet add package Microsoft.Extensions.Diagnostics.HealthChecks&lt;br&gt;
dotnet add package Swashbuckle.AspNetCore&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This package lets us monitor the health of the Web API and its dependencies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It check if the API is running&lt;/li&gt;
&lt;li&gt;🗄️ Verify dependencies like databases, APIs, caches&lt;/li&gt;
&lt;li&gt;🚦 Expose health endpoints (e.g. /health)&lt;/li&gt;
&lt;li&gt;☁️ Support cloud platforms (Azure, Kubernetes, load balancers)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We add Swashbuckle to automatically generate interactive API documentation and testing tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zwosbkzsfnvxzqgh7fh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zwosbkzsfnvxzqgh7fh.png" alt="dotnet packages/swashbuckle" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.4 Replace Program.cs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7swm9ezhi4o0qa0kxp9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7swm9ezhi4o0qa0kxp9l.png" alt="Program.cs" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu80qtokixwwnsyu3n69y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu80qtokixwwnsyu3n69y.png" alt="Program.cs" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1u3l5z7b4p2kkqhs0vfa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1u3l5z7b4p2kkqhs0vfa.png" alt="Changed program.cs" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.5 Test Locally&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We use dotnet run to build and start a .NET application locally so we can test and run it during development..NET will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔨 Compile the code (build the project)&lt;/li&gt;
&lt;li&gt;▶️ Start the application&lt;/li&gt;
&lt;li&gt;🌐 Launch the Web API / app on a local server (Kestrel)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd09ixb890rf2end6c41p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd09ixb890rf2end6c41p.png" alt="dotnet run" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test endpoints:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/" rel="noopener noreferrer"&gt;http://localhost:8080/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyylcohlix5j84jcmc2po.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyylcohlix5j84jcmc2po.png" alt="Iocal host" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/weather" rel="noopener noreferrer"&gt;http://localhost:8080/weather&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9lup9jk83tonavgimcu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9lup9jk83tonavgimcu.png" alt="Iocalhost weather" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/swagger" rel="noopener noreferrer"&gt;http://localhost:8080/swagger&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07v8zdc4cw4ja7hvkcyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07v8zdc4cw4ja7hvkcyy.png" alt="Swaggerbuckle" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/health" rel="noopener noreferrer"&gt;http://localhost:8080/health&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegh97vtog8j5z81dduc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegh97vtog8j5z81dduc0.png" alt="Health Check" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ If this works, your app is ready for &lt;strong&gt;containerization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🐳 Step 2: Containerize the Application with Docker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We containerise an application to make it run the same way everywhere — on a laptop, server, or in the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.1 Create Dockerfile&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create Dockerfile using the command &lt;em&gt;touch dockerfile&lt;/em&gt;, then paste the code below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwszlq9u7zboh848sng03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwszlq9u7zboh848sng03.png" alt="Dockerfile code" width="800" height="432"&gt;&lt;/a&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzf047zc4w75yr56yp6ml.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzf047zc4w75yr56yp6ml.png" alt="Dockerfile" width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2 Create .dockerignore&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We create a &lt;strong&gt;.dockerignore&lt;/strong&gt; file to tell Docker which files and folders NOT to include when building an image. To do that we do touch .dockerignore to create .dockerfile and the paste the code below.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bin/&lt;br&gt;
obj/&lt;br&gt;
.vs/&lt;br&gt;
.vscode/&lt;br&gt;
.git/&lt;br&gt;
.gitignore&lt;br&gt;
Dockerfile&lt;br&gt;
README.md&lt;br&gt;
*.log&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6m3mgn2457h64898i6z0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6m3mgn2457h64898i6z0.png" alt="dockerignore" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.3 Build and Test Container Locally&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;_docker build -t weather-app:local .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fql6g0wlud7nku0a0k4jz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fql6g0wlud7nku0a0k4jz.png" alt="docker build" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;docker run -p 8080:8080 weather-app:local_&lt;/p&gt;

&lt;p&gt;Test again in browser or with curl. ✅ If it works locally, it will work in AKS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔧 Step 3: Create Azure Infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.1 Login to Azure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;_az login _&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu111ux6l6ipy3boos1v0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu111ux6l6ipy3boos1v0.png" alt="Az login" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.2 Create Resource Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;az group create --name student-demo --location eastus&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvj4nxmhs8lrbubgo3if.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvj4nxmhs8lrbubgo3if.png" alt="RG create" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.3 Create Azure Container Registry (ACR)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;az acr create \&lt;br&gt;
  --resource-group student-demo \&lt;br&gt;
  --name studentdemoacr \&lt;br&gt;
  --sku Basic&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj8yxhcysi8pii8keoxg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj8yxhcysi8pii8keoxg.png" alt="az acr create" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.4 Build &amp;amp; Push Image Using ACR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We do ACR Build:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To avoids Docker compatibility issues&lt;/li&gt;
&lt;li&gt;Runs inside Azure&lt;/li&gt;
&lt;li&gt;Faster CI/CD later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;_az acr build \&lt;br&gt;
  --registry studentdemoacr \&lt;br&gt;
  --image weather-app:latest _&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzp8t52mqypdxrh9qc911.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzp8t52mqypdxrh9qc911.png" alt="ACR build" width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.5 Create AKS Cluster with ACR Attached&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We do this so AKS can securely pull Docker images from Azure Container Registry (ACR) without extra credentials or manual setup&lt;/p&gt;

&lt;p&gt;&lt;em&gt;az aks create \&lt;br&gt;
  --resource-group student-demo \&lt;br&gt;
  --name student-aks \&lt;br&gt;
  --node-count 1 \&lt;br&gt;
  --attach-acr studentdemoacr \&lt;br&gt;
  --enable-managed-identity \&lt;br&gt;
  --generate-ssh-keys&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyguk0jxshjmxhgutf60z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyguk0jxshjmxhgutf60z.png" alt="AKS cluster with ACR " width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.6 Connect kubectl to AKS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We connect kubectl to AKS so our local machine can securely communicate with and manage the AKS cluster. Without this connection, you cannot see, deploy, or control anything in the cluster.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;az aks get-credentials \&lt;br&gt;
  --resource-group student-demo \&lt;br&gt;
  --name student-aks&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglzmoevvtc96wy05xngy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglzmoevvtc96wy05xngy.png" alt="Kubectl to AKS" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;kubectl get nodes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxcpzwwmslhhmi7i30gd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxcpzwwmslhhmi7i30gd.png" alt="Kubectl get node" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;☸️ Step 4: Deploy to Kubernetes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.1 Create Kubernetes Manifests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We create Kubernetes manifests to tell Kubernetes exactly how we want our application to run.Kubernetes doesn’t guess.&lt;br&gt;
Manifests are the instructions + desired state.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;mkdir k8s&lt;/em&gt;&lt;br&gt;
&lt;em&gt;cd k8s&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpx13taivrsljyiosfvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpx13taivrsljyiosfvy.png" alt="mkdir/cd k8s" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;deployment.yaml&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use &lt;em&gt;touch deployment.yaml&lt;/em&gt; to create our deployment yaml file and paste the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdb2pzkjgvkz744g70wq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdb2pzkjgvkz744g70wq.png" alt="Yaml file" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsct8rgkfrpqsfg46dthb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsct8rgkfrpqsfg46dthb.png" alt="deployment.yaml" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;service.yaml&lt;/strong&gt;&lt;br&gt;
Use &lt;em&gt;touch service.yaml&lt;/em&gt; and paste the code&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zk60oz461vcmfe44mcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zk60oz461vcmfe44mcn.png" alt="service.yaml code" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhxplc050khsyumv4fr0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhxplc050khsyumv4fr0.png" alt="service.yaml" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.2 Apply Manifests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;kubectl apply -f deployment.yaml&lt;/em&gt;&lt;br&gt;
&lt;em&gt;kubectl apply -f service.yaml&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsx6ddows9somy8ikbh74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsx6ddows9somy8ikbh74.png" alt="deployment/service yaml" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check status:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;kubectl get pods&lt;/em&gt;&lt;br&gt;
&lt;em&gt;kubectl get services&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdjrbwgentntrkvemtt3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdjrbwgentntrkvemtt3.png" alt="status check" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔁 Step 5: CI/CD with GitHub Actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why CI/CD?&lt;/strong&gt; : No manual deployments.Faster releases and. Safer changes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.1 Initialize Git&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git init&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git add .&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git commit -m "Initial Weather App"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gow1uqks2gb9g5jowod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gow1uqks2gb9g5jowod.png" alt="Initialize Git" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.2 Create GitHub Repo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Login to your Github&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;gh auth login&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8api3l1wuy5r7689al23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8api3l1wuy5r7689al23.png" alt="github login" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwm8qp4i8cqnwwxw6ocp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwm8qp4i8cqnwwxw6ocp.png" alt="Authorization of github" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;gh repo create weather-app-demo --public --source=. --push&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuyw0ogfhgsbmd1uejr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuyw0ogfhgsbmd1uejr5.png" alt="Repository" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.3 Create Workflow File&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;mkdir -p .github/workflows&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To create github work flow use&lt;br&gt;
&lt;em&gt;touch .github/workflows/deploy.yml&lt;/em&gt; and paste the code below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb6oqvacnujjfpv8j2q0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb6oqvacnujjfpv8j2q0.png" alt="github workflow codes" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foyc4zcmurwg4y2gi2dm4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foyc4zcmurwg4y2gi2dm4.png" alt="codes on VS code" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌐 Step 6: Access the Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;kubectl get service weather-service&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbs937d8f6l867am79cy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbs937d8f6l867am79cy.png" alt="Acess application" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0r551dz9t7o3aawr47w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0r551dz9t7o3aawr47w.png" alt="Weather API" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this project, we successfully built, containerized, and deployed a .NET 8 Web API using modern cloud-native practices on Microsoft Azure. Starting with local development and testing, we ensured application correctness before moving into containerization with Docker for consistency across environments. The container image was securely stored in Azure Container Registry and deployed to Azure Kubernetes Service, enabling scalability, resilience, and production-grade orchestration.&lt;/p&gt;

&lt;p&gt;By integrating GitHub Actions, we automated the build and deployment pipeline, ensuring that every code change is safely and consistently delivered to AKS without manual intervention. This end-to-end workflow demonstrates a real-world DevOps lifecycle—combining application development, containerization, infrastructure provisioning, Kubernetes deployment, and CI/CD automation.&lt;/p&gt;

&lt;p&gt;Overall, this project highlights best practices for building and deploying cloud-native applications, reinforcing the importance of automation, reliability, and scalability in modern software engineering.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>cloudcomputing</category>
      <category>devops</category>
    </item>
    <item>
      <title>Merging and Branching in DevOps.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Sun, 18 Jan 2026 17:17:35 +0000</pubDate>
      <link>https://dev.to/onyemuche/merging-and-branching-in-devops-36nj</link>
      <guid>https://dev.to/onyemuche/merging-and-branching-in-devops-36nj</guid>
      <description>&lt;p&gt;How to safely work on features using branches and how to merge them using different strategies. In this ;, i'm going to use VS Code for this project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;br&gt;
We create a folder for the project.&lt;br&gt;
&lt;em&gt;mkdir git-merge-lab&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71530awxmkfz0acwa03f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71530awxmkfz0acwa03f.png" alt="New folder" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;br&gt;
Moves terminal into the folder. So Git works inside the project directory only.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;cd git-merge-lab&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskanw2aie8zr7q6pjldf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskanw2aie8zr7q6pjldf.png" alt="Moves into the folder" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;br&gt;
Initialize Git: Starts Git tracking by creating. gitfolder. because Without this, Git cannot save versions of files.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git init&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yt4a12vo994dndpfsaf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yt4a12vo994dndpfsaf.png" alt="git init" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;&lt;br&gt;
Creates README file with project title.A project must have files before committing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;echo "# Team Project" &amp;gt; README.md&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0p8hqd6w1ht423qovxv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0p8hqd6w1ht423qovxv6.png" alt="Create README file" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;&lt;br&gt;
Move file to staging area. Git only commits files that are staged.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git add README.md&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8cknzhazdfwk797kv3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8cknzhazdfwk797kv3d.png" alt="git add README.md" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;&lt;br&gt;
Saves snapshot into Git history. Allows recovery if something breaks later.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git commit -m "Initial commit"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyke4nt31t83w73z3w05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyke4nt31t83w73z3w05.png" alt="Git Commit" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;&lt;br&gt;
Renames default branch to main.A Modern standard branch name used by GitHub.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git branch -M main&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bpjnfrwykts9u5vkej1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bpjnfrwykts9u5vkej1.png" alt="Git main branch" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FAST-FORWARD MERGE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;&lt;br&gt;
Creates and switches to new branch. New features should not be built on main.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout -b feature-login&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzznk4giqivndjmib8nkt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzznk4giqivndjmib8nkt.png" alt="New feature branch" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt;&lt;br&gt;
Creates feature file. This Simulates adding new functionality.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;echo "Login page created" &amp;gt; login.txt&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadhjdl6ktw2zsyz9wkv0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadhjdl6ktw2zsyz9wkv0.png" alt="Feature file" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10&lt;/strong&gt;&lt;br&gt;
Saves feature changes to branch.Work must be committed before merging.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git add login.txt&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git commit -m "Add login feature"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfkith3lp4x8je4fmc37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfkith3lp4x8je4fmc37.png" alt="Saves feature chnages to branch" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11&lt;/strong&gt;&lt;br&gt;
Returns to main branch.You merge into the current branch&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout main&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4numk9lprjadomzh0yt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4numk9lprjadomzh0yt.png" alt="Switch to main branch" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12&lt;/strong&gt;&lt;br&gt;
Merge Feature (Fast-Forward):Moves main forward to include feature. Because no other changes existed on main.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git merge feature-login&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6lbwn9f8ripr7orow2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6lbwn9f8ripr7orow2b.png" alt="Merge Feature" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3-WAY MERGE (PARALLEL WORK)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 13&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Create Profile Feature&lt;/strong&gt; : Because another feature is developed independently.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout -b feature-profile&lt;br&gt;
echo "Profile page created" &amp;gt; profile.txt&lt;br&gt;
git add profile.txt&lt;br&gt;
git commit -m "Add profile feature"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb8ysqqeo4ywp3hhbsc3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb8ysqqeo4ywp3hhbsc3.png" alt="Profile features" width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 14&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Create Settings Feature&lt;/strong&gt; : So two branches now change project separately.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout main&lt;br&gt;
git checkout -b feature-settings&lt;br&gt;
echo "Settings page created" &amp;gt; settings.txt&lt;br&gt;
git add settings.txt&lt;br&gt;
git commit -m "Add settings feature"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr8vwkf1sdjo784pntpkc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr8vwkf1sdjo784pntpkc.png" alt="Create settings features" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 15&lt;/strong&gt;&lt;br&gt;
 &lt;strong&gt;Merge First Feature:&lt;/strong&gt; It Adds profile feature to main.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout main&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git merge feature-profile&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyngf195ezf8dr0ibfdd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyngf195ezf8dr0ibfdd3.png" alt="Merge first features" width="800" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 16&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Merge Second Feature (3-Way):&lt;/strong&gt; It Combines two branch histories. Git must compare main, feature, and common base.&lt;br&gt;
&lt;strong&gt;Result:&lt;/strong&gt; Merge commit is created&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git merge feature-settings&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fygrk1qcgctrmaj7shyn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fygrk1qcgctrmaj7shyn6.png" alt="Merged second feature" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MERGE CONFLICT&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 17&lt;/strong&gt; : Bugfix edits same file as before.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout -b bugfix-title&lt;br&gt;
echo "# Team Project Version 2" &amp;gt; README.md&lt;br&gt;
git add README.md&lt;br&gt;
git commit -m "Update title in bugfix"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5nymp8qqpodvoqfa682.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5nymp8qqpodvoqfa682.png" alt="Merge conflict" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 18&lt;/strong&gt;&lt;br&gt;
Feature Also Changes README&lt;/p&gt;

&lt;p&gt;_git checkout main&lt;br&gt;
git checkout -b feature-title-update&lt;br&gt;
echo "# Awesome Team Project" &amp;gt; README.md&lt;br&gt;
git add README.md&lt;br&gt;
git commit -m "Update title in feature"&lt;br&gt;
_&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41vdra8wchh451f5r3vi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41vdra8wchh451f5r3vi.png" alt="Both branches change same line" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 19&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Trigger Conflict:&lt;/strong&gt; Git cannot auto-merge and stops.It does not know which version to keep.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout main&lt;br&gt;
git merge bugfix-title&lt;br&gt;
git merge feature-title-update&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kwmdbywvfbkq2pqcaqz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kwmdbywvfbkq2pqcaqz.png" alt="Trigger conflict" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 20&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Fix Conflict Manually **: Open **README.md&lt;/strong&gt;, delete conflict markers, and write:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Awesome Team Project Version 2&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then run:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git add README.md&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git commit -m "Resolve merge conflict on title"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This tells Git conflict is fixed and saves final version.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb115k3x4z7v00oay35dt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb115k3x4z7v00oay35dt.png" alt="Fix conflict" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQUASH MERGE&lt;/strong&gt;&lt;br&gt;
Create Feature With Many Commits and Squash It.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout -b feature-dashboard&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0eyi050a7n92l22cbnl3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0eyi050a7n92l22cbnl3.png" alt="Feature dashboard" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;echo "Dashboard layout" &amp;gt; dashboard.txt&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git add dashboard.txt&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git commit -m "Add dashboard layout"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqa39mpzbk5f714zea08n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqa39mpzbk5f714zea08n.png" alt="create file,add and commit" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;echo "Add charts" &amp;gt;&amp;gt; dashboard.txt&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git add dashboard.txt&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git commit -m "Add charts to dashboard"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx2alxlq9xacnci47p2wi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx2alxlq9xacnci47p2wi.png" alt="add dashboard,commit" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;echo "Fix alignment" &amp;gt;&amp;gt; dashboard.txt&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git add dashboard.txt&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git commit -m "Fix dashboard alignment"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8y9lm608cnrf5g1znogm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8y9lm608cnrf5g1znogm.png" alt="Fix alignment,add and commit" width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now squash:&lt;/strong&gt;&lt;br&gt;
It Combines many feature commits into one clean commit on main.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git checkout main&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git merge --squash feature-dashboard&lt;/em&gt;&lt;br&gt;
&lt;em&gt;git commit -m "Add dashboard feature&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgy9dznn9fn10e9xl5rbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgy9dznn9fn10e9xl5rbg.png" alt="Squash" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PUSH PROJECT TO GITHUB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 22&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Repository on GitHub (Website Step):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Open - &lt;a href="https://github.com" rel="noopener noreferrer"&gt;https://github.com&lt;/a&gt; &amp;gt;&amp;gt; Log in &amp;gt;&amp;gt; Click New Repository &amp;gt;&amp;gt; Repository name: 👉 git-merge-lab. &lt;strong&gt;N/B&lt;/strong&gt;❗ DO NOT check: Add README/Add .gitignore. &amp;gt;&amp;gt; Click Create Repository.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9x4b0fsyosg3wyd88obd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9x4b0fsyosg3wyd88obd.png" alt="Repository name" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6kos6fiw1xz74l1ddxq3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6kos6fiw1xz74l1ddxq3.png" alt="New Repository" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why we do this:&lt;/strong&gt; Because we need an empty online repo to receive our local project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will see:&lt;/strong&gt; A page showing commands for pushing existing repo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffqfdyhv2oia3mbo0tas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffqfdyhv2oia3mbo0tas.png" alt="Page showing commands" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 23&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Connect Local Repo to GitHub:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Copy your repo URL from GitHub, then run: Links your local project to GitHub. So Git knows where to send your code when you push.&lt;/p&gt;

&lt;p&gt;_git remote add origin &lt;a href="https://github.com/EMMANUELOBINNAONYEMUCHE/git-merge-lab.git" rel="noopener noreferrer"&gt;https://github.com/EMMANUELOBINNAONYEMUCHE/git-merge-lab.git&lt;/a&gt;&lt;br&gt;
_&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7xbkvl47tz7hwzvyifk3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7xbkvl47tz7hwzvyifk3.png" alt="Connect local repo" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 24&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push All Branches to GitHub:&lt;/strong&gt; Uploads all branches (main, feature, bugfix) to GitHub. So Your teacher must see all merge work, not only main branch. It Links your local branches to GitHub so future pushes are easier.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git push -u origin --all&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvu2uplo0qddqovkmioh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvu2uplo0qddqovkmioh.png" alt="Git push all" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 25&lt;/strong&gt;&lt;br&gt;
Confirm Upload on GitHub: Refresh GitHub page. Click Branches&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You must see:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;main&lt;/li&gt;
&lt;li&gt;feature-login&lt;/li&gt;
&lt;li&gt;feature-profile&lt;/li&gt;
&lt;li&gt;feature-settings&lt;/li&gt;
&lt;li&gt;bugfix-title&lt;/li&gt;
&lt;li&gt;feature-title-update&lt;/li&gt;
&lt;li&gt;feature-dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why this is important:&lt;/strong&gt;&lt;br&gt;
Confirms that your full lab work is visible for marking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcw031tj0h5bym44bbjwi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcw031tj0h5bym44bbjwi.png" alt="Github Confirmation" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this project, we explored safe and structured collaboration in Git using branching and merging strategies. Starting from initializing a Git repository, we created multiple feature and bugfix branches to simulate real-world DevOps workflows where developers work in parallel without breaking the main codebase.&lt;/p&gt;

&lt;p&gt;We demonstrated:&lt;/p&gt;

&lt;p&gt;Fast-forward merges for simple feature integration&lt;/p&gt;

&lt;p&gt;3-way merges for parallel development scenarios&lt;/p&gt;

&lt;p&gt;Merge conflicts and how to resolve them manually&lt;/p&gt;

&lt;p&gt;Squash merges to maintain a clean and readable commit history&lt;/p&gt;

&lt;p&gt;Pushing all branches to GitHub to ensure full project visibility and proper review&lt;/p&gt;

&lt;p&gt;By using VS Code and Git commands step by step, this lab shows how developers can confidently manage features, fixes, and collaboration in a professional environment. Understanding these merge strategies is essential for working in teams, maintaining clean repositories, and avoiding production issues in DevOps and software development projects.&lt;/p&gt;

&lt;p&gt;This workflow mirrors real industry practices and provides a solid foundation for working with Git in collaborative environments. &lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Full stack DevOps Lab</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Fri, 02 Jan 2026 21:41:46 +0000</pubDate>
      <link>https://dev.to/onyemuche/full-stack-devops-lab-4hpf</link>
      <guid>https://dev.to/onyemuche/full-stack-devops-lab-4hpf</guid>
      <description>&lt;p&gt;In this article, i am going to dive in ,in detail, on full stack DevOps lab. We have got to have these required Downloads&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.Node.js(v18 or higher)- Current LTS:v20.x&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download from: &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;https://nodejs.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Choose the LTS version (20.x as of 2025)&lt;/li&gt;
&lt;li&gt;Choose your Operating system,i will be using &lt;strong&gt;Mac&lt;/strong&gt;, using &lt;strong&gt;nvm&lt;/strong&gt; with &lt;strong&gt;npm&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Verify installation: node --version and npm --version using VS code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82xn44jfmlqrendoe20c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82xn44jfmlqrendoe20c.png" alt="Installation of Node.js" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpr30qatqrio0wumm7xbk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpr30qatqrio0wumm7xbk.png" alt="Node.js Download" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.Git - Latest stable version&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download from: &lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;https://git-scm.com/downloads&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy4l8ll8ifsnpfv5utva9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy4l8ll8ifsnpfv5utva9.png" alt="Git download" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose your operating system version/install Homebrew&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb6hnglzu5dullnyda70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb6hnglzu5dullnyda70.png" alt="Homebrew install" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7b1jm5iwridv98pfzr2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7b1jm5iwridv98pfzr2n.png" alt="Homebrew" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install git &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3suzodb75s6a6hfcp0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3suzodb75s6a6hfcp0s.png" alt="Install git" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuft56f0ebizj5imi0uxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuft56f0ebizj5imi0uxk.png" alt="Install git" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify installation: git --version &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnewcustnqlmg04ka2fw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnewcustnqlmg04ka2fw9.png" alt="Verification of git version" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.Docker Desktop - Latest version&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download from: &lt;a href="https://www.docker.com/products/docker-desktop/" rel="noopener noreferrer"&gt;https://www.docker.com/products/docker-desktop/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv1bcyqga2fgv1xwedsyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv1bcyqga2fgv1xwedsyh.png" alt="Docker download" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install and start Docker Desktop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpwk71y79y5uda6j8o1go.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpwk71y79y5uda6j8o1go.png" alt="Docker desktop" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify installation: docker --version and docker-compose --version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8qrc3ye2halxb5kijip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8qrc3ye2halxb5kijip.png" alt="Docker version" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. GitHub Account&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sign up at: &lt;a href="https://github.com" rel="noopener noreferrer"&gt;https://github.com&lt;/a&gt;. You'll need this for hosting your code and CI/CD pipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1e8zjcwqazfrx3mq0sw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1e8zjcwqazfrx3mq0sw9.png" alt="Github Account" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.Code Editor (Optional but recommended)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VS Code: &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;https://code.visualstudio.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel9bipswzdexmraa7wea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel9bipswzdexmraa7wea.png" alt="VS Code" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Or any editor you prefer (Sublime Text, Atom, etc.) but in this lab, I'm going to use VS Code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Verify Everything is Installed&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;node --version
&lt;/li&gt;
&lt;li&gt;npm --version
&lt;/li&gt;
&lt;li&gt;git --version
&lt;/li&gt;
&lt;li&gt;docker --version &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0h6ilad1lmhov6ajnq5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0h6ilad1lmhov6ajnq5.png" alt="Verification of required downloads" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have got all our the requirement for this Full stack DevOps lab, now lets go into steps for our Full stack DevOps lab. On the course of this process, I'm going to use VS Code as our Code Editor and the Terminal. I'm going to open my VS Code and create a Folder for this Project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbpy1tu4k281zl1l9ugy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbpy1tu4k281zl1l9ugy.png" alt="Working Terminal and Code Editor" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Set Up Git for Version Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This Configures Git on your machine so it knows who you are when you make commits, and sets up proper project tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. One-time Git Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;git config --global user.name "Emmanuel"&lt;/li&gt;
&lt;li&gt;git config --global user.email "emmanuelobinnaonyemuche"&lt;/li&gt;
&lt;li&gt;git config --global init.defaultBranch main&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpg0bu0c4p745qyu8qtz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpg0bu0c4p745qyu8qtz1.png" alt="One time Git Configuration" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Create and Initialize Project&lt;/strong&gt;&lt;br&gt;
I created a folder initially for project, but now I'm going to create a specific folder for the project. Then Cd into it and create a local git for the directory.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mkdir my-devops-project&lt;/li&gt;
&lt;li&gt;cd my-devops-project&lt;/li&gt;
&lt;li&gt;git init&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F199sa1ctjhhg39iqsijr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F199sa1ctjhhg39iqsijr.png" alt="Create and Initialize project" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Build a Node.js Web App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does&lt;/strong&gt;: Creates a web application using Node.js that can serve web pages and API endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Initialize Node.js Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This Creates a package.json file that describes your project and manages dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;npm init -y&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjj1ry5oie3sa9q3knsxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjj1ry5oie3sa9q3knsxa.png" alt="Initialize Node.js" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Update package.json&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does&lt;/strong&gt;: Customizes the package.json with proper scripts and metadata for your DevOps project. Create/edit package.json. Paste the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbeumjnrzfhphclv9z6b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbeumjnrzfhphclv9z6b.png" alt="Update package.json" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. Create Application File&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this code does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates an HTTP server that listens on port 3000&lt;/li&gt;
&lt;li&gt;Serves different endpoints (/, /health, /info, /metrics)&lt;/li&gt;
&lt;li&gt;Includes security headers and proper error handling&lt;/li&gt;
&lt;li&gt;Provides graceful shutdown capability&lt;/li&gt;
&lt;li&gt;Exports the server for testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Create app.js&lt;/em&gt;: &lt;/p&gt;

&lt;p&gt;To create a text file, I'm going to use this command,&lt;strong&gt;touch app.js&lt;/strong&gt;,then paste the code to create app.js&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ooxj36cag2r3o9bmmp0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ooxj36cag2r3o9bmmp0.png" alt="App.js" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D. Install Dependencies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We install dependencies so we don’t have to build everything from scratch. Dependencies are pre-written, tested code that your app depends on to work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you'll see:&lt;/strong&gt;&lt;br&gt;
A node_modules/ folder with all installed packages&lt;br&gt;
A package-lock.json file that locks dependency versions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install testing and development tools&lt;br&gt;
npm install --save-dev jest eslint supertest&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install all dependencies (creates node_modules folder)&lt;br&gt;
npm install&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6ai2l24f0ewz59fvooq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6ai2l24f0ewz59fvooq.png" alt="Install Dependencies" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create Proper Tests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does:&lt;/strong&gt; Sets up automated testing so you can verify your application works correctly every time you make changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Create tests directory and test file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create a folder for your tests&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;mkdir tests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create the main test file&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;touch tests/app.test.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqimi2cav4de5d8oc3mt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqimi2cav4de5d8oc3mt.png" alt="Proper Tests" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Create test file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Copy this code into tests/app.test.js:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0py05ubnxsdsrx0e8xj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0py05ubnxsdsrx0e8xj.png" alt="App.test.js" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. Create Jest configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create jest.config.js,copy and paste the code&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujkdhns6zboefpec0iis.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujkdhns6zboefpec0iis.png" alt="jest configuration" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: GitHub Actions CI/CD Pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does:&lt;/strong&gt; Creates an automated pipeline that runs tests and builds Docker images every time you push code to GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Create workflow directory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create the GitHub Actions directory structure&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;mkdir -p .github/workflows&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33k2ihtdkfga6vhs73xm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33k2ihtdkfga6vhs73xm.png" alt="Workflow directory" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Create CI/CD pipeline file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create .github/workflows/ci.yml:&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;In VS Code, use touch command &lt;strong&gt;touch .github/workflows/ci.yml&lt;/strong&gt;. then copy and the code in &lt;strong&gt;ci.yml 1,U&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6edvv4rlbwyr1z5r8iag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6edvv4rlbwyr1z5r8iag.png" alt="Create CI/CD pipeline file" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Dockerfile&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does:&lt;/strong&gt; Creates instructions for Docker to build a container image of your application that can run anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this Dockerfile does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses multi-stage builds for smaller image size&lt;/li&gt;
&lt;li&gt;Installs curl for health checks&lt;/li&gt;
&lt;li&gt;Creates a non-root user for security&lt;/li&gt;
&lt;li&gt;Sets up proper file permissions&lt;/li&gt;
&lt;li&gt;Configures health checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create Dockerfile:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;In your terminal, use this command &lt;strong&gt;touch dockerfile&lt;/strong&gt;,to create a docker file, then copy the code below and paste.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvd2f8huranzq6x8vt6vu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvd2f8huranzq6x8vt6vu.png" alt="Dockerfile in VS Code" width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Essential Configuration Files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This Creates configuration files that tell various tools what to ignore, how to behave, and what settings to use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A.Create .dockerignore&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create .dockerignore:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In your Terminal, use &lt;strong&gt;touch .dockerignore&lt;/strong&gt; and paste the code below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34irryvctnw613m8y88w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34irryvctnw613m8y88w.png" alt="Dockerignore" width="800" height="549"&gt;&lt;/a&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B.Create .gitignore&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create .gitignore:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use touch command to create a text file for gitignore and copy and paste the code .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F924jnv9iri7aunw42o1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F924jnv9iri7aunw42o1c.png" alt="gitignore" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C.Create environment template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create .env.example:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;touch .env.example&lt;/strong&gt; Command to create this, copy and pasts the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28obzvq4wmwt05wefqn9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28obzvq4wmwt05wefqn9.png" alt="env.example" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D. Create ESLint configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create .eslintrc.js:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;touch .eslintrc.js&lt;/strong&gt;  Command to create this, copy and pasts the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25oy1k82qenncgvoh68y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25oy1k82qenncgvoh68y.png" alt=".eslintrc.js configuration" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Docker Compose for Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does:&lt;/strong&gt; Creates a Docker Compose file that makes it easy to run your application and any supporting services with a single command.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create docker-compose.yml:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;touch docker-compose.yml&lt;/strong&gt; Command to create this, copy and pasts the code&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqc8l9btjpsyo9405t20.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqc8l9btjpsyo9405t20.png" alt="docker-compose.yml" width="800" height="557"&gt;&lt;/a&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Test Everything Locally&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does:&lt;/strong&gt; Shows you how to actually run and test your application locally before deploying it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Install and Test Locally&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Install all dependencies from package.json
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;npm install&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9j1h40zmh0s2oof14gf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9j1h40zmh0s2oof14gf.png" alt="npm install" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Run your test suite to make sure everything works
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;npm test&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitdlnyi7jwip2b7oy3xn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitdlnyi7jwip2b7oy3xn.png" alt="npm test" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Start the application server
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;npm start&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnl8xcw55xmnmvp9x5mbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnl8xcw55xmnmvp9x5mbs.png" alt="npm start" width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you'll see:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tests should pass with green checkmarks: ✓ GET / should return welcome page&lt;/li&gt;
&lt;li&gt;Server starts and shows: 🚀 Server running at &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Test endpoints (in a new terminal window):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;curl &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000/&lt;/a&gt;         # Homepage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbvcqlz1lgwf993zkze3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbvcqlz1lgwf993zkze3h.png" alt="Homepage" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;curl &lt;a href="http://localhost:3000/health" rel="noopener noreferrer"&gt;http://localhost:3000/health&lt;/a&gt;   # Health check JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49t2zo63o4nfkqya7rgw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49t2zo63o4nfkqya7rgw.png" alt="Health check JSON" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;curl &lt;a href="http://localhost:3000/info" rel="noopener noreferrer"&gt;http://localhost:3000/info&lt;/a&gt;     # System info JSON &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4l4xvnivzgu6ruvkb8f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4l4xvnivzgu6ruvkb8f.png" alt="System info JSON" width="800" height="475"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;curl &lt;a href="http://localhost:3000/metrics" rel="noopener noreferrer"&gt;http://localhost:3000/metrics&lt;/a&gt;  # Prometheus metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvx26zsjmrl30cbddrc2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvx26zsjmrl30cbddrc2r.png" alt="Prometheus metrics" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B.Docker Commands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Build image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;docker build -t my-devops-app:latest .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fen2qy8oi2hi60vn4z9el.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fen2qy8oi2hi60vn4z9el.png" alt="docker build" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Run container&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ra9jroanktf31pg9wyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ra9jroanktf31pg9wyi.png" alt="Run container" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Check container status&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;docker ps&lt;br&gt;
docker logs my-devops-container&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgv7n50k6etr01vupz9mm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgv7n50k6etr01vupz9mm.png" alt="Container status" width="800" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Test health check&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;curl &lt;a href="http://localhost:3000/health" rel="noopener noreferrer"&gt;http://localhost:3000/health&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc41mdm6yw7gwe2ipff8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc41mdm6yw7gwe2ipff8e.png" alt="Health check" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Stop container&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;docker stop my-devops-container&lt;/li&gt;
&lt;li&gt;docker rm my-devops-container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28940nt88x80b9u1ftk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28940nt88x80b9u1ftk7.png" alt="docker stop/remove" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. Docker Compose Commands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Start all services defined in docker-compose.yml&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;docker-compose up -d&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlyl9s16ej3n69fk35b2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlyl9s16ej3n69fk35b2.png" alt="docker-compose up" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# View real-time logs from all services&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;docker-compose logs -f&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fypkxg2mm7jcfkhasin8o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fypkxg2mm7jcfkhasin8o.png" alt="docker-compose logs" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Stop all services and clean up&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;docker-compose down&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ai0x8jk4ohhm4wehck6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ai0x8jk4ohhm4wehck6.png" alt="docker-compose down" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9: Deploy to GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does:&lt;/strong&gt; Commits your code to Git and pushes it to GitHub so the automated CI/CD pipeline can start working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Initial commit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Add all files to Git staging area&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;git add .&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Create your first commit with a descriptive message&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;git commit -m "Initial commit: Complete DevOps setup with working CI/CD"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jkpdbzxahmrm6s9ph21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jkpdbzxahmrm6s9ph21.png" alt="Initial commit" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Connect to GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;⚠️ IMPORTANT: Before running these commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to GitHub.com and create a new repository called my-devops-project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ka3bh4f4ucghskpdd99.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ka3bh4f4ucghskpdd99.png" alt="my-devops-project" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DO NOT initialize it with README, .gitignore, or license (we already have these)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fch6qii46pikqdpero53v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fch6qii46pikqdpero53v.png" alt="new repository" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the repository URL from GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmafk8gxk7lyq29r4gpny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmafk8gxk7lyq29r4gpny.png" alt="URL from GitHub" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace YOUR_GITHUB_USERNAME below with your actual GitHub username&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;# Set main as the default branch&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;git branch -M main&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzl76tat6o05z63uhf5w6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzl76tat6o05z63uhf5w6.png" alt="git branch -M main" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Connect to your GitHub repository (UPDATE THIS URL!)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;git remote add origin &lt;a href="https://github.com/EMMANUELOBINNAONYEMUCHE/Day1-Fullstack-devOps-project.git" rel="noopener noreferrer"&gt;https://github.com/EMMANUELOBINNAONYEMUCHE/Day1-Fullstack-devOps-project.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqok4ais2pz8n3elacgc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqok4ais2pz8n3elacgc.png" alt="GitHub repository" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;# Push your code to GitHub for the first time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;git push -u origin main&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yfbevpcazkhymecq4n8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yfbevpcazkhymecq4n8.png" alt="git push" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10: Kubernetes Deployment Configurations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does:&lt;/strong&gt; Creates Kubernetes configuration files that define how your application should run in staging and production environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Create directories&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;mkdir -p k8s/staging k8s/production&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88qtgf4ju2jbf0mwg855.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88qtgf4ju2jbf0mwg855.png" alt="directory for staging and production " width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Create Staging Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create k8s/staging/deployment.yml:&lt;/em&gt;&lt;br&gt;
use &lt;strong&gt;touch k8s/staging/deployment.yml&lt;/strong&gt; to create an empty text file and paste the code . &lt;/p&gt;

&lt;p&gt;⚠️ IMPORTANT: Update YOUR_GITHUB_USERNAME in the image URL below!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpne6c27sjzq47e6r5gn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpne6c27sjzq47e6r5gn.png" alt="Staging area" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. Create Production Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create k8s/production/deployment.yml:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;use &lt;strong&gt;touch k8s/production/deployment.yml&lt;/strong&gt; to create an empty text file and paste the code.&lt;/p&gt;

&lt;p&gt;⚠️ IMPORTANT: Update YOUR_GITHUB_USERNAME in the image URL below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyjykawtmlildcllerhw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyjykawtmlildcllerhw.png" alt="Production stage" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11: Complete Deployment Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this step does:&lt;/strong&gt; Shows you how to use the complete CI/CD pipeline with proper branching strategy for staging and production deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Branch-based Deployment Strategy&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;develop branch → Automatically deploys to staging environment&lt;/li&gt;
&lt;li&gt;main branch → Automatically deploys to production environment&lt;/li&gt;
&lt;li&gt;Pull requests → Run tests only (no deployment)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A. Deploy Changes&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Deploy to staging:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;# Create and switch to develop branch
git checkout -b develop_&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbuk5gg2q78nhmzleoit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbuk5gg2q78nhmzleoit.png" alt="git checkout" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;# Make your changes, then commit and push
&lt;em&gt;git add .&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fism7twe193oms9ui2se5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fism7twe193oms9ui2se5.png" alt="git add ." width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git commit -m "Add new feature"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyuqqyy2cr5x4yfcytlrk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyuqqyy2cr5x4yfcytlrk.png" alt="git commit" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;git push origin develop&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1iwdxl5y1owhvxq7nz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1iwdxl5y1owhvxq7nz4.png" alt="git push origin develop" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F724hd5xpb4ei2xvutbak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F724hd5xpb4ei2xvutbak.png" alt="git pushed develop in github" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgvvv04hkc82mcx2og1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgvvv04hkc82mcx2og1c.png" alt="Completed jobs" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Deploy to production:&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Switch to main branch&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;git checkout main&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpoax3e4uqcpuh4jdc8eg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpoax3e4uqcpuh4jdc8eg.png" alt="git checkout main" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# Merge changes from develop&lt;/strong&gt;&lt;br&gt;
git merge develop&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihnv4istcfsb9o3u1euu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihnv4istcfsb9o3u1euu.png" alt="git merge develop" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# Push to trigger production deployment&lt;/strong&gt;&lt;br&gt;
git push origin main&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbwsej1cqxzkv03659ne1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbwsej1cqxzkv03659ne1.png" alt="git push origin main" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5ydgxpag6plnq0spq42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5ydgxpag6plnq0spq42.png" alt="Pushed to production stage" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This Full Stack DevOps lab provides a comprehensive, hands-on exploration of modern software delivery practices. Beginning with a simple Node.js application, the lab incrementally evolves into a fully automated, production-style system that reflects how DevOps teams operate in real-world environments.&lt;/p&gt;

&lt;p&gt;A key strength of the lab is how it demonstrates the interconnected nature of the DevOps lifecycle. Local development, containerization with Docker, automated testing through GitHub Actions, and deployment to staging and production environments using Kubernetes are presented as an integrated workflow rather than isolated steps. This approach clearly illustrates DevOps as a continuous delivery pipeline where each stage depends on the reliability and consistency of the previous one.&lt;/p&gt;

&lt;p&gt;The lab strongly emphasizes automation and standardization. By implementing CI/CD pipelines and a branch-based deployment strategy, manual intervention is minimized and the risk of deployment errors is significantly reduced. Automated testing, image builds, and environment-specific deployments ensure predictable and repeatable outcomes, reinforcing core DevOps principles such as reliability, traceability, and trust in the delivery pipeline.&lt;/p&gt;

&lt;p&gt;Beyond technical implementation, the lab highlights DevOps as an operational and cultural mindset. It underscores the importance of building systems that are secure, observable, scalable, and maintainable. Overall, this lab establishes a solid foundation for designing and managing real-world DevOps workflows and prepares learners to confidently engage with more complex, production-grade environments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>api</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Getting started with C# as a programming language.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Sun, 26 Oct 2025 20:49:47 +0000</pubDate>
      <link>https://dev.to/onyemuche/getting-started-with-c-as-a-programming-language-4h82</link>
      <guid>https://dev.to/onyemuche/getting-started-with-c-as-a-programming-language-4h82</guid>
      <description>&lt;p&gt;Programming languages like &lt;strong&gt;C#&lt;/strong&gt; let you write instructions that you want the computer to carry out. Each programming language has its own syntax, but after learning your first programming language and attempting to learn another one, you'll quickly realize that they all share many similar concepts. A programming language's job is to allow a human to express their intent in a human-readable and understandable way. The instructions you write in a programming language are called "&lt;strong&gt;source code&lt;/strong&gt;" or just "&lt;strong&gt;code&lt;/strong&gt;". Software developers write code&lt;/p&gt;

&lt;p&gt;At this point, a developer can update and change the code, but the computer can't understand the code. The code first must be compiled into a format that the computer can understand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compilation&lt;/strong&gt;&lt;br&gt;
A special program called a &lt;strong&gt;compiler&lt;/strong&gt; converts your source code into a different format that the computer's central processing unit (CPU) can execute. When you used the green Run button in the previous unit, the code you wrote was first compiled, then executed.&lt;/p&gt;

&lt;p&gt;Why does code need to be compiled? Although most programming languages seem cryptic at first, they can be more easily understood by humans than the computer's preferred language. The CPU understands instructions that are expressed by turning thousands or millions of tiny switches either on or off. Compilers bridge these two worlds by translating your human-readable instructions into a computer-understandable set of instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;br&gt;
The rules for writing C# code is called &lt;strong&gt;syntax&lt;/strong&gt;. Just like human languages have rules regarding punctuation and sentence structure, computer programming languages also have rules. Those rules define the keywords and operators of C# and how they are put together to form programs.&lt;/p&gt;

&lt;p&gt;When you wrote code into the .NET Editor, you may have noticed subtle changes to the color of different words and symbols. Syntax highlighting is a helpful feature that you'll begin to use to easily spot mistakes in your code that don't conform to the syntax rules of C#.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;C#&lt;/strong&gt; programming language allows you to build many types of applications, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business applications to capture, analyze, and process data&lt;/li&gt;
&lt;li&gt;Dynamic web applications that can be accessed from a web browser&lt;/li&gt;
&lt;li&gt;Games, both 2D and 3D&lt;/li&gt;
&lt;li&gt;Financial and scientific applications&lt;/li&gt;
&lt;li&gt;Cloud-based applications&lt;/li&gt;
&lt;li&gt;Mobile applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;My first line of code in .NET Editor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's a long-standing tradition among software developers to print the phrase "Hello World!" to the console output window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0fbqn4j55lac9tbrgejt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0fbqn4j55lac9tbrgejt.png" alt="Console.WriteLine" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common mistakes new programmers make&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entering lower-case letters instead of capitalizing C in Console, or the letters W or L in WriteLine.&lt;/li&gt;
&lt;li&gt;Entering a comma instead of a period between Console and WriteLine.&lt;/li&gt;
&lt;li&gt;Forgetting to use double-quotation marks, or using single-quotation marks to surround the phrase Hello World!.&lt;/li&gt;
&lt;li&gt;Forgetting a semi-colon at the end of the command.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to Display a new message&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.Modify the code you wrote so that it's prefixed by a code comment using two forward slashes //:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmv392b9zb1ppxjs3qsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmv392b9zb1ppxjs3qsl.png" alt="Modify the code //" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can create a code comment by prefixing a line of code with two forward slashes //. This prefix instructs the compiler to ignore all the instructions on that line.&lt;/p&gt;

&lt;p&gt;Code comments are helpful when you're not ready to delete the code yet, but you want to ignore it for now. You can also use code comments to add messages to yourself or others who may later read the code, reminding you of what the code is doing&lt;/p&gt;

&lt;p&gt;2.Add new lines of code to match the following code snippet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5acjo9jgfjgoulz11w7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5acjo9jgfjgoulz11w7h.png" alt="Console.Write" width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The difference between &lt;strong&gt;Console.Write&lt;/strong&gt; and &lt;strong&gt;Console.WriteLine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Console.WriteLine&lt;/strong&gt; prints a message to the output console. At the end of the line, it adds a line feed similar to pressing Enter or Return to create a new line.&lt;/p&gt;

&lt;p&gt;To print to the output console, but without adding a line feed at the end, you use the second technique, &lt;strong&gt;Console.Write&lt;/strong&gt;. So, the next call to Console.Write prints another message to the same line.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbb3jb28ppl263vct49f5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbb3jb28ppl263vct49f5.png" alt="Difference between Console.WriteLine and Console.Write" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does your code work&lt;/strong&gt;&lt;br&gt;
Let's focus on the following line of code you wrote:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Console.WriteLine("Hello World!");&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you ran your code, you saw that the message &lt;strong&gt;Hello World!&lt;/strong&gt; was printed to the output console. When the phrase is surrounded by double-quotation marks in your C# code, it's called a &lt;strong&gt;literal string&lt;/strong&gt;. In other words, you literally wanted the characters H, e, l, l, o, and so on, sent to the output.&lt;/p&gt;

&lt;p&gt;The Console part is called a &lt;strong&gt;class&lt;/strong&gt;. Classes "own" methods; or you could say that methods live inside of a class. To visit the method, you must know which class it's in. For now, think of a class as a way to represent an object. In this case, all of the methods that operate on your output console are defined inside of the Console class.&lt;/p&gt;

&lt;p&gt;There's also a &lt;strong&gt;dot (or period)&lt;/strong&gt; that separates the class name Console and the method name WriteLine(). The period is the &lt;strong&gt;member access operator.&lt;/strong&gt; In other words, the dot is how you "navigate" from the class to one of its methods.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;WriteLine()&lt;/strong&gt; part is called a &lt;strong&gt;method&lt;/strong&gt;. You can always spot a method because it has a set of &lt;strong&gt;parentheses&lt;/strong&gt; after it. Each method has one job. The WriteLine() method's job is to write a line of data to the output console. The data that's printed is sent in between the opening and closing parenthesis as an input parameter. Some methods need input parameters, while others don't. But if you want to invoke a method, you must always use the parentheses after the method's name. The parentheses are known as the &lt;strong&gt;method invocation operator&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Finally, the &lt;strong&gt;semicolon&lt;/strong&gt; is the end of statement operator. A statement is a complete instruction in C#. The semicolon tells the compiler that you've finished entering the command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Literal value&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many of the applications that you'll build in C# will require you to work with data. Sometimes that data will be hard-coded in your application. Hard-coded values are values that are constant and unchanged throughout the execution of the program. For example, you may need to print a message to the user when some operation succeeds. A "success" message would likely be the same every time the application is executed. This hard-coded value can also be called a constant, or a literal value.&lt;/p&gt;

&lt;p&gt;Suppose you want to display a formatted message to the end user containing different types of data. The message would include hard-coded strings combined with information your app collects from the user. To display a formatted message, you'll need to create both hard-coded values and define variables that can store data of a certain type, whether numeric, alphanumeric, and so on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Different literal data types&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.&lt;strong&gt;Character literals&lt;/strong&gt;&lt;br&gt;
If you only wanted a single alphanumeric character printed to screen, you could create a &lt;strong&gt;char literal&lt;/strong&gt; by surrounding one alphanumeric character in single quotes. The term &lt;strong&gt;char&lt;/strong&gt; is short for character. In C#, this data type is officially named &lt;strong&gt;"char"&lt;/strong&gt;, but frequently referred to as a &lt;strong&gt;"character"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa83026p2h03evmpd8o5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa83026p2h03evmpd8o5y.png" alt="Char literal" width="800" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notice&lt;/strong&gt; that the letter b is surrounded with single quotation marks 'b'. Single quotes create a character literal. Recall that using double quotation marks creates a string data type.&lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;Integer literals&lt;/strong&gt;&lt;br&gt;
If you want to display a numeric whole number (no fractions) value in the output console, you can use an &lt;strong&gt;int literal&lt;/strong&gt;. The term &lt;strong&gt;int&lt;/strong&gt; is short for &lt;strong&gt;integer&lt;/strong&gt;, which you may recognize from studying math. In C#, this data type is officially named &lt;strong&gt;"int"&lt;/strong&gt;, but frequently referred to as &lt;strong&gt;"integer"&lt;/strong&gt;. An int literal requires no other operators like the string or char.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7inleukatw8f4crzrhxc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7inleukatw8f4crzrhxc.png" alt="Integer literals" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;Floating-point literals&lt;/strong&gt;&lt;br&gt;
A floating-point number is a number that contains a decimal, for example 3.14159. C# supports three data types to represent decimal numbers: float, double, and decimal. Each type supports varying degrees of precision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Float Type    Precision&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Float  ~6-9 digits&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faf7l8uhlyhhqm5fovqfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faf7l8uhlyhhqm5fovqfm.png" alt="Float precision" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create a float literal, append the letter &lt;strong&gt;F&lt;/strong&gt; after the number. In this context, the F is called a &lt;strong&gt;literal suffix&lt;/strong&gt;. The literal suffix tells the compiler you wish to work with a value of float type. You can use either a &lt;strong&gt;lower-case f&lt;/strong&gt; or **upper-case F **as the literal suffix for a float.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Double ~15-17 digits&lt;/strong&gt;&lt;br&gt;
To create a double literal, just enter a decimal number. The compiler defaults to a double literal when a decimal number is entered without a literal suffix.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckfw4olm49g19ulpg91a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckfw4olm49g19ulpg91a.png" alt="Double precision" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decimal 28-29 digits&lt;/strong&gt;&lt;br&gt;
To create a decimal literal, append the letter m after the number. In this context, the &lt;strong&gt;m&lt;/strong&gt; is called a literal suffix. The literal suffix tells the compiler you wish to work with a value of decimal type. You can use either a &lt;strong&gt;lower-case m&lt;/strong&gt; or &lt;strong&gt;upper-case M&lt;/strong&gt; as the literal suffix for a decimal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4s0gtn1suca86ow1qev0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4s0gtn1suca86ow1qev0.png" alt="Decimal digits" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.&lt;strong&gt;Boolean literals&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you wanted to print a value representing either &lt;strong&gt;true&lt;/strong&gt; or &lt;strong&gt;false&lt;/strong&gt;, you could use a bool literal. The term &lt;strong&gt;bool&lt;/strong&gt; is short for &lt;strong&gt;Boolean&lt;/strong&gt;. In C#, they're officially referred to as "bool", but often developers use the term "Boolean".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ri6woguw1g3wmexrzax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ri6woguw1g3wmexrzax.png" alt="Boolean literals" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variable&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A variable&lt;/strong&gt; is a container for storing a type of value. Variables are important because their values can change, or vary, throughout the execution of a program. Variables can be assigned, read, and changed. You use variables to store values that you intend to use in your code. A variable name is a human-friendly label that the compiler assigns to a memory address. When you want to store or change a value in that memory address, or whenever you want to retrieve the stored value, you just use the variable name you created.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Declare a variable&lt;/strong&gt;&lt;br&gt;
To create a new variable, you must first declare the data type of the variable, and then give it a name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;string firstName;&lt;/strong&gt;: In this case, you're creating a new variable of type string called firstName. From now on, this variable can only hold string values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variable name rules and conventions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variable names can contain alphanumeric characters and the underscore character. Special characters like the hash symbol # (also known as the number symbol or pound symbol) or dollar symbol $ are not allowed.&lt;/li&gt;
&lt;li&gt;Variable names must begin with an alphabetical letter or an underscore, not a number.&lt;/li&gt;
&lt;li&gt;Variable names are case-sensitive, meaning that string Value; and string value; are two different variables.&lt;/li&gt;
&lt;li&gt;Variable names must not be a C# keyword. For example, you cannot use the following variable declarations: decimal decimal; or string string;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Coding conventions for variables&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variable names should use camel case, which is a style of writing that uses a lower-case letter at the beginning of the first word and an upper-case letter at the beginning of each subsequent word. For example, string thisIsCamelCase;.&lt;/li&gt;
&lt;li&gt;Variable names should begin with an alphabetical letter. Developers use the underscore for a special purpose, so try to not use that for now.&lt;/li&gt;
&lt;li&gt;Variable names should be descriptive and meaningful in your app. Choose a name for your variable that represents the kind of data it will hold.&lt;/li&gt;
&lt;li&gt;Variable names should be one or more entire words appended together. Don't use contractions or abbreviations because the name of the variable (and therefore, its purpose) may be unclear to others who are reading your code.&lt;/li&gt;
&lt;li&gt;Variable names shouldn't include the data type of the variable. You might see some advice to use a style like string strValue;. That advice is no longer current.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Variable name examples&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;char userOption;&lt;/li&gt;
&lt;li&gt;int gameScore;&lt;/li&gt;
&lt;li&gt;decimal particlesPerMillion;&lt;/li&gt;
&lt;li&gt;bool processedCustomer;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reassign the value of a variable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F37sal1s5ul0ckyl7f8x0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F37sal1s5ul0ckyl7f8x0.png" alt="Reassign value of variables" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;String concatenation&lt;/strong&gt;&lt;br&gt;
**String concatenation **is "programmer speak" for simply combining two or more string values into a new string value. Unlike addition, the second value is appended to the end of the first value, and so on. In the following exercise, you'll write code to concatenate string values together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihkhyik0ebobx19ssiyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihkhyik0ebobx19ssiyk.png" alt="String concatenation" width="800" height="634"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concatenate multiple variables and literal strings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fbsxyxcc7bswa2lspe8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fbsxyxcc7bswa2lspe8.png" alt="multilple variables" width="800" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;String interpolation&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;String interpolation&lt;/strong&gt; combines multiple values into a single literal string by using a "template" and one or more interpolation expressions. An interpolation expression is indicated by an opening and closing curly brace symbol { }. You can put any C# expression that returns a value inside the braces. The literal string becomes a template when it's prefixed by the $ character.&lt;/p&gt;

&lt;p&gt;In other words, instead of writing the following line of code:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;string message = greeting + " " + firstName + "!";&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can write this more concise line of code instead:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;string message = $"{greeting} {firstName}!";&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1713ifg4swb6zpqr0wn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1713ifg4swb6zpqr0wn.png" alt="string interpolation" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use string interpolation to combine a literal string and a variable value&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisp60fa9nycen4ecc1hq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisp60fa9nycen4ecc1hq.png" alt="string interpolation &amp;amp; literal string" width="800" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use string interpolation with multiple variables and literal strings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fri39g5y7biqsga9kw0b2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fri39g5y7biqsga9kw0b2.png" alt="string interpolation &amp;amp; multiple variables &amp;amp; literal strings" width="800" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combine verbatim literals and string interpolation&lt;/strong&gt;&lt;br&gt;
Suppose you need to use a verbatim literal in your template. You can use both the verbatim literal prefix symbol @ and the string interpolation $ symbol together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqhdzd180sfnmy86h9kn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqhdzd180sfnmy86h9kn.png" alt="Verbatim &amp;amp; string interpolation" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perform addition with implicit data conversion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Often, you'll want to perform mathematical operations on numeric data. You'll start with addition in this unit, and expand to other operations in the next unit because there's an important lesson to learn about how the C# compiler parses and interprets your code&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add two numeric values&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To add two numbers together, you'll use the addition operator, which is the plus symbol +. Yes, the same plus symbol + that you use for string concatenation is also used for addition. The reuse of one symbol for multiple purposes is sometimes called "overloading the operator" and happens frequently in C#.&lt;/p&gt;

&lt;p&gt;In this instance, the C# compiler understands what you're attempting to do. The compiler parses your code and sees that the + (the operator) is surrounded by two numeric values (the operands). Given the data types of the variables (both are ints), it figures out that you intended to add those two values&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vajxf5q8yzrrz8c2yzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vajxf5q8yzrrz8c2yzz.png" alt="Adding two numeric value" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mix data types to force implicit type conversions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What happens if you try to use the + symbol with both string and int values?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1whmlvf9ujg5iwaskoxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1whmlvf9ujg5iwaskoxf.png" alt="Mixed data type" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attempt a more advanced case of adding numbers and concatenating strings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F804r2htb0clyesw9mmxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F804r2htb0clyesw9mmxa.png" alt="more advance case of adding numbers" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of adding the int variable widgetsSold to the literal int 7, the compiler treats everything as a string and concatenates it all together&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add parentheses to clarify your intention to the compiler&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The parentheses symbol () becomes another overloaded operator. In this case, the opening and closing parentheses form the order of operations operator, just like you might use in a mathematical formula. You indicate that you want the inner-most parentheses resolved first resulting in the addition of int values widgetsSold and the value 7. Once that is resolved, then it will implicitly convert the result to a string so that it can be concatenated with the rest of the message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ntg114g2c6xq6cwifs0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ntg114g2c6xq6cwifs0.png" alt="Adding parantheses" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perform math operations&lt;/strong&gt;&lt;br&gt;
Perform basic math operations. Write code to perform addition, subtraction, multiplication, and division with integers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbb6o1kgpmwjgj28e76ds.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbb6o1kgpmwjgj28e76ds.png" alt="perform math operations" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As you can see&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;+ is the addition operator&lt;/li&gt;
&lt;li&gt;- is the subtraction operator&lt;/li&gt;
&lt;li&gt;* is the multiplication operator&lt;/li&gt;
&lt;li&gt;/ is the division operator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, the resulting quotient of the division example may not be what you may have expected. The values after the decimal are truncated from the quotient since it is defined as an int, and int cannot contain values after the decimal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code to exercise C#'s order of operations&lt;/strong&gt;&lt;br&gt;
As you learned in the previous exercise, you can use the () symbols as the order of operations operators. However, this isn't the only way the order of operations is determined.&lt;/p&gt;

&lt;p&gt;In math, PEMDAS is an acronym that helps students remember the order of operations. The order is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parentheses (whatever is inside the parenthesis is performed first)&lt;/li&gt;
&lt;li&gt;Exponents&lt;/li&gt;
&lt;li&gt;Multiplication and Division (from left to right)&lt;/li&gt;
&lt;li&gt;Addition and Subtraction (from left to right)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C# follows the same order as PEMDAS except for exponents. While there's no exponent operator in C#, you can use the System.Math.Pow method. The module "Call methods from the .NET Class Library using C#" will feature this method and others&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftkkezjyj6dk7prx3vek3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftkkezjyj6dk7prx3vek3.png" alt="order of operation" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Increment and decrement values&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The final basic operations you'll learn about in this module is how to increment and decrement values using special operators that are combinations of symbols. You'll need to increment and/or decrement values, especially when you're writing looping logic or code that interacts with a data structure.&lt;/p&gt;

&lt;p&gt;The += operator adds and assigns the value on the right of the operator to the value on the left of the operator. So, lines two and three in the following code snippet are the same&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;int value = 0;     // value is now 0.&lt;/li&gt;
&lt;li&gt;value = value + 5; // value is now 5.&lt;/li&gt;
&lt;li&gt;value += 5;        // value is now 10&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ++ operator increments the value of the variable by 1. So, lines two and three in the following code snippet are the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;int value = 0;     // value is now 0.&lt;/li&gt;
&lt;li&gt;value = value + 1; // value is now 1.&lt;/li&gt;
&lt;li&gt;value++;           // value is now 2.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;To write code to increment and decrement a value&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstr3nd9vmvbtw5zd1fob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstr3nd9vmvbtw5zd1fob.png" alt="Increment &amp;amp; decrement" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Position the increment and decrement operators&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both the increment and decrement operators have an interesting quality — depending on their position, they perform their operation before or after they retrieve their value. In other words, if you use the operator before the value as in ++value, then the increment will happen before the value is retrieved. Likewise, value++ will increment the value after the value has been retrieved.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6edqez2u8k9c8ttpa6pu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6edqez2u8k9c8ttpa6pu.png" alt="position operators" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using .Net Editor to write a letter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqm92t4hez6wv8ikbmgh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqm92t4hez6wv8ikbmgh.png" alt=".Net Editor" width="800" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>csharp</category>
    </item>
    <item>
      <title>How to work with Text editors in Linux.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Sun, 12 Oct 2025 00:33:00 +0000</pubDate>
      <link>https://dev.to/onyemuche/how-to-work-with-text-editors-with-linux-2b58</link>
      <guid>https://dev.to/onyemuche/how-to-work-with-text-editors-with-linux-2b58</guid>
      <description>&lt;p&gt;&lt;strong&gt;Text editors&lt;/strong&gt; are software applications designed to create and modify plain or rich text documents. They range from simple notepad functions for basic text entry to advanced options for programming and coding, featuring tools like syntax highlighting, error detection, and customizable layouts. Text editors can handle various file formats, allowing users to save and share documents in multiple extensions like .txt, .md, or .html.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Types of Text Editors&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic Text Editors&lt;/strong&gt;: These include simple applications like Notepad (Windows) and TextEdit (Mac), which are suitable for quick edits and basic text manipulation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Editors&lt;/strong&gt;: Designed for programming, these editors offer features like syntax highlighting, code completion, and debugging tools. Examples include Visual Studio Code, Sublime Text, and Notepad++. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrated Development Environments (IDEs)&lt;/strong&gt;: While primarily focused on coding, IDEs also function as text editors. They provide comprehensive tools for software development, including project management and version control integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Popular Text Editors&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual Studio Code&lt;/strong&gt;: A highly popular code editor known for its extensive features, including a built-in terminal, debugging capabilities, and a rich marketplace for extensions. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sublime Text&lt;/strong&gt;: Renowned for its user-friendly interface and powerful features, Sublime Text offers a distraction-free writing mode and split editing. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notepad++&lt;/strong&gt;: A free and open-source text editor for Windows that supports multiple programming languages and offers features like tabbed browsing and syntax highlighting. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atom&lt;/strong&gt;: An open-source text editor developed by GitHub, known for its hackable nature and community-driven packages. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emacs and Vim&lt;/strong&gt;: Classic text editors that are highly customizable and powerful, often preferred by experienced programmers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In this project I am going to create a textfile in ubuntu environment (Linux) using Vim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;br&gt;
In your Multipass, install vim by using this command line &lt;strong&gt;apt install vim&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xxs8wu5trk3sqjo7ept.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xxs8wu5trk3sqjo7ept.png" alt="apt install vim" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;br&gt;
Create an empty text file, lets use &lt;strong&gt;sample&lt;/strong&gt; for example, so we are going to use this command line &lt;strong&gt;touch sample&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5x5vi7mk1lqbcbionsq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5x5vi7mk1lqbcbionsq.png" alt="empty text file" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;br&gt;
To put something in the empty text file &lt;strong&gt;sample&lt;/strong&gt; that we, created. In the multipass ,type this command line &lt;strong&gt;vim sample&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09htgh0153s7557zqfx2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09htgh0153s7557zqfx2.png" alt="creating sample textfile" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;&lt;br&gt;
Change the linux shell from command mode to &lt;strong&gt;insert mode&lt;/strong&gt; after using &lt;strong&gt;vim sample&lt;/strong&gt; command line to put in something in the sample empty file that we created. To be in insert mode, click &lt;strong&gt;I&lt;/strong&gt; on the keyboard and it will change to insert mode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldqwqduhfvf0mrzm0t7e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldqwqduhfvf0mrzm0t7e.png" alt="Insert mode" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;&lt;br&gt;
Write anything on the page, when you have change it to insert mode. For example lets write "Linux is Fun" on it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5mi23aondw17y7yjui6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5mi23aondw17y7yjui6.png" alt="Linux is fun" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;&lt;br&gt;
Press &lt;strong&gt;esc&lt;/strong&gt; key on your keyboard to leave the insert mode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxyvf0lxd07uhl51mkfhx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxyvf0lxd07uhl51mkfhx.png" alt="esc key" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;&lt;br&gt;
Press &lt;strong&gt;shift + colon&lt;/strong&gt; then type &lt;strong&gt;wq&lt;/strong&gt; the &lt;strong&gt;w&lt;/strong&gt; will help you save what you inserted or have written and the &lt;strong&gt;q&lt;/strong&gt; will take you back to your terminal. Like we have written Linux is fun.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76xng0gcm35mmd5jiwru.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76xng0gcm35mmd5jiwru.png" alt="shift + colon,wq" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbcbs1hu1esy6ponbroz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbcbs1hu1esy6ponbroz.png" alt="My terminal" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In your termial, type cat and "the textfile" you edited to check if what you inserted in it is saved, type the command &lt;strong&gt;cat sample&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faadtlf1yif7eob9s78tw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faadtlf1yif7eob9s78tw.png" alt="cat sample" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Basic Linux Command Using Ubuntu terminal environment.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Sat, 11 Oct 2025 22:40:01 +0000</pubDate>
      <link>https://dev.to/onyemuche/basic-linux-command-using-ubuntu-terminal-environment-iie</link>
      <guid>https://dev.to/onyemuche/basic-linux-command-using-ubuntu-terminal-environment-iie</guid>
      <description>&lt;p&gt;&lt;strong&gt;Ubuntu Terminal Environment&lt;/strong&gt;&lt;br&gt;
The Ubuntu terminal environment is a powerful tool that allows users to interact with the Ubuntu operating system directly via text-based commands. It is often referred to as the command line interface (CLI) and is built on the Bash shell by default. The terminal is essential for executing programs, managing files, installing packages, monitoring processes, and performing administrative tasks. It is a lightweight and faster alternative to the graphical user interface (GUI) for many tasks, offering more control and automation. However, it also has a steeper learning curve for beginners and can be more error-prone if commands are not executed correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Linux cogmand line for beginners&lt;/strong&gt;&lt;br&gt;
Its important to note that, in linux there's always one space rule and its always case sensitive, it should always be in lower case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;sudo su&lt;/strong&gt; (Administrative command)&lt;br&gt;
This command makes you to be in administrative mode/root for you to able to install or update anything. Some people call it switch user or super user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqugtfbye1m823jujf38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqugtfbye1m823jujf38.png" alt="To be in root command" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;apt update&lt;/strong&gt;&lt;br&gt;
To update the environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxexe8frg6rrpof1y3j6t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxexe8frg6rrpof1y3j6t.png" alt="apt update" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;clear&lt;/strong&gt; &lt;br&gt;
This command is use to clear the screen when the screen is clogged up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3av7qou0jh7p2k9a75w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3av7qou0jh7p2k9a75w.png" alt="To clear the screen" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pwd(print work directory)&lt;/strong&gt;&lt;br&gt;
This is used to know where exactly you are in your ubuntu terminal shell.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwelxed3t0dayvrlytjhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwelxed3t0dayvrlytjhn.png" alt="pwd" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mkdir&lt;/strong&gt; &lt;br&gt;
It is the command used to make a directory.In your linux terminal type mkdir and the folder directory. Lets create 3 directory; &lt;strong&gt;mkdir emmanuel&lt;/strong&gt;,&lt;br&gt;
&lt;strong&gt;mkdir zanmedix&lt;/strong&gt;, &lt;br&gt;
&lt;strong&gt;mkdir tech1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyi97pcbvcgx7ce2g4pi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyi97pcbvcgx7ce2g4pi.png" alt="mkdir" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ls&lt;/strong&gt;&lt;br&gt;
This command is used to list or see what is on your computer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg96ohzkez5v61ygz7kb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg96ohzkez5v61ygz7kb0.png" alt="Iist" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rmdir&lt;/strong&gt;then the name of the directory.&lt;br&gt;
This is used to remove directory that you created.&lt;br&gt;
lets remove tech1 and emmanuel&lt;br&gt;
&lt;strong&gt;rmdir tech1&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;rmdir emmanuel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;touch "name of the file"&lt;/strong&gt;&lt;br&gt;
This is used to create an empty file. Lets create three empty files&lt;br&gt;
&lt;strong&gt;touch txt-1&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;touch txt-2&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;touch txt-3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;then &lt;strong&gt;ls&lt;/strong&gt; to see the created empty files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7r4jqpccn4k0lq9n7zy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7r4jqpccn4k0lq9n7zy.png" alt="Iist" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rm&lt;/strong&gt; "then the name of the file" &lt;br&gt;
This command is used to delete file.e,g let delete txt-1 and txt-2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqafedo24tz542gxa763.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqafedo24tz542gxa763.png" alt="to delete empty file" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cd&lt;/strong&gt;&lt;br&gt;
This command is used to enter into a directory. lets do &lt;strong&gt;cd dr-1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt7i5ud9bwzr4d1gtufq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt7i5ud9bwzr4d1gtufq.png" alt="cd into the directory" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rm -rf "the directory that is not empty"&lt;/strong&gt;&lt;br&gt;
this is used to delete a directory you have &lt;strong&gt;cd&lt;/strong&gt; into it. For example lets delete dr-1 thats no longer empty. we going to use this line of command &lt;strong&gt;rm -rf dr-1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojr3nz020viux4cqbw4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojr3nz020viux4cqbw4r.png" alt="reinforce removal of a directory" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cd "directory"&lt;/strong&gt;, &lt;strong&gt;touch txt-1&lt;/strong&gt;&lt;br&gt;
This command line is used to open a driectory and create a text file in the directory. E.g &lt;strong&gt;cd dr-1&lt;/strong&gt;. &lt;strong&gt;touch txt1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5duoqk5tsrkc1gun3bpr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5duoqk5tsrkc1gun3bpr.png" alt="opening a directory and creating a text file" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cd ..&lt;/strong&gt;&lt;br&gt;
This is a command use to leave a particular folder/directory, lets for example we would like to leave dir-1 folder, in our command terminal we write the following command y.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0n0lsu5o2auhzp950y7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0n0lsu5o2auhzp950y7.png" alt="to leave a folder/directory" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cp&lt;/strong&gt;&lt;br&gt;
This command is use to copy file to a folder.lets say for example you want to copy text file to a directory you use cp command. lets try it &lt;strong&gt;cp txt1 dir-1&lt;/strong&gt;..Then &lt;strong&gt;cd&lt;/strong&gt; into the directory and do &lt;strong&gt;ls&lt;/strong&gt; to confirm if the txt1 file was copied.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7stn6oz434ofgcaf9vu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7stn6oz434ofgcaf9vu.png" alt="cp command" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mv&lt;/strong&gt;&lt;br&gt;
This command is used to move a text file to a folder or directory. if you want to move lets txt2 file to a dir-2. we use this command line &lt;strong&gt;mv txt2 dir-2&lt;/strong&gt;. Then &lt;strong&gt;cd&lt;/strong&gt; into dir-2 folder &lt;strong&gt;cd dir-2&lt;/strong&gt; then &lt;strong&gt;ls&lt;/strong&gt; to confirm the move.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv844pwvhtx3zzflb8yq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv844pwvhtx3zzflb8yq0.png" alt="mv txt2 dir-2" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ls -l&lt;/strong&gt; (longlisting)&lt;br&gt;
This command is used to list everything in a long format. Lets try in our terminal shell&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rsockvhnbzwx1n2gq97.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rsockvhnbzwx1n2gq97.png" alt="ls -l" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ls -al&lt;/strong&gt;&lt;br&gt;
This command is used to list hidden files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fueb5kcywerfbja5oy4o7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fueb5kcywerfbja5oy4o7.png" alt="ls -al" width="800" height="443"&gt;&lt;/a&gt;\&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ls -a&lt;/strong&gt;&lt;br&gt;
This command hide things for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5k0catucwdxlf0vsdrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5k0catucwdxlf0vsdrz.png" alt="ls -a" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Create DNS zones and configure DNS settings</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Mon, 15 Sep 2025 17:13:26 +0000</pubDate>
      <link>https://dev.to/onyemuche/create-dns-zones-and-configure-dns-settings-129</link>
      <guid>https://dev.to/onyemuche/create-dns-zones-and-configure-dns-settings-129</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Domain Name System (DNS)&lt;/strong&gt; is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com. Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtdb3ukd05y9tf9pw3x7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtdb3ukd05y9tf9pw3x7.png" alt="DNS" width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each device connected to the Internet has a unique IP address which other machines use to find the device. DNS servers eliminate the need for humans to memorize IP addresses such as 192.168.1.1 (in IPv4), or more complex newer alphanumeric IP addresses such as 2400:cb00:2048:1::c629:d7a2 (in IPv6).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftiwqfzethmxkthb2tpdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftiwqfzethmxkthb2tpdr.png" alt="DNS" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does DNS work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The process of DNS resolution involves converting a hostname (such as &lt;a href="http://www.example.com" rel="noopener noreferrer"&gt;www.example.com&lt;/a&gt;) into a computer-friendly IP address (such as 192.168.1.1). An IP address is given to each device on the Internet, and that address is necessary to find the appropriate Internet device - like a street address is used to find a particular home. When a user wants to load a webpage, a translation must occur between what a user types into their web browser (example.com) and the machine-friendly address necessary to locate the example.com webpage.&lt;/p&gt;

&lt;p&gt;In order to understand the process behind the DNS resolution, it’s important to learn about the different hardware components a DNS query must pass between. For the web browser, the DNS lookup occurs "behind the scenes" and requires no interaction from the user’s computer apart from the initial request.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;DNS zone&lt;/strong&gt; is a specific portion of the Domain Name System (DNS) that is managed by a single authority. It is like a section of a big map, where each section is controlled separately to make management easier. This division allows different organizations or administrators to handle and update their own part of the DNS without affecting the entire system &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS zones follows a hierarchical concept. Therefore, namespace is subdivided into areas (zones) for this purpose. The purpose of DNS zones is to permit easier control over multiple levels of website.&lt;/li&gt;
&lt;li&gt;As the number of resource records increases for single domain, it becomes complex to manage all of them. Network administrations moderate this issue by breaking down their configurations into multiple zones.&lt;/li&gt;
&lt;li&gt;Root name servers are responsible for root zone. Each top-level domains&lt;/li&gt;
&lt;li&gt;(TLD) name server is responsible for zone covering its specific TLD, and authoritative name servers are responsible for some even smaller zones below that.&lt;/li&gt;
&lt;li&gt;The root and TLD name servers are actually just authoritative name servers, but, zones that they're authoritative for are special cases.&lt;/li&gt;
&lt;li&gt;DNS zones aren't necessarily physically separated from each other; zones are strictly used for delegating control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to Create DNS zones and configure DNS settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a scenario where an organization requires workloads to use domain names instead of IP addresses for internal communications. The organization doesn’t want to add a custom DNS solution. You are to identify these requirements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;private DNS zone&lt;/strong&gt; is required for contoso.com.&lt;/li&gt;
&lt;li&gt;The DNS will use a &lt;strong&gt;virtual network link&lt;/strong&gt; to app-vnet.&lt;/li&gt;
&lt;li&gt;A new &lt;strong&gt;DNS record&lt;/strong&gt; is required for the backend subnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To identify the above requirements, we need to do the following tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and configure a private DNS zone.&lt;/li&gt;
&lt;li&gt;Create and configure DNS records.&lt;/li&gt;
&lt;li&gt;Configure DNS settings on a virtual network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jn7fnj680mw8snc1yda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jn7fnj680mw8snc1yda.png" alt="Archtecture diagram" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a private DNS zone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure Private DNS provides a reliable, secure DNS service to manage and resolve domain names in a virtual network without the need to add a custom DNS solution. By using private DNS zones, you can use your own custom domain names rather than the Azure-provided names.&lt;/p&gt;

&lt;p&gt;1.On the Azure portal, search for and select &lt;strong&gt;Private dns zones&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3usuxxujx14icea16qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3usuxxujx14icea16qw.png" alt="Private dns zone search" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;+ Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zlvi4gdyzh87kfsmdkj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zlvi4gdyzh87kfsmdkj.png" alt="+ Create" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Configure the DNS zone&lt;/p&gt;

&lt;p&gt;Subscription              &lt;strong&gt;Select your subscription&lt;/strong&gt;&lt;br&gt;
Resource group            &lt;strong&gt;RG1&lt;/strong&gt;&lt;br&gt;
Name                      &lt;strong&gt;private.contoso.com&lt;/strong&gt;&lt;br&gt;
Region                    &lt;strong&gt;East US&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnoxipcxz5tf0y0ofqqj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnoxipcxz5tf0y0ofqqj6.png" alt="Configure Dns zone" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Review + create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhqijbuuidmfxrmhijwz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhqijbuuidmfxrmhijwz.png" alt="Review + Create" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Create&lt;/strong&gt; when the validation is passed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpoc7r5z7q1djak481b4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpoc7r5z7q1djak481b4l.png" alt="Validation pass" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Wait for the DNS zone to deploy, and then select &lt;strong&gt;Go to resource&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhy70jdq8z9si0pah7cjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhy70jdq8z9si0pah7cjf.png" alt="Go to Resource" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a virtual network link to your private DNS zone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To resolve DNS records in a private DNS zone, resources must be linked to the private zone. A virtual network link associates the virtual network to the private zone.&lt;/p&gt;

&lt;p&gt;1.In the portal, continue working on the &lt;strong&gt;private.contoso.com&lt;/strong&gt; DNS zone&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0kyezre0d9flw84pkii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0kyezre0d9flw84pkii.png" alt="Private.contoso.com" width="800" height="376"&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;2.In the &lt;strong&gt;DNS Management&lt;/strong&gt; blade, select &lt;strong&gt;+ Virtual network&lt;/strong&gt; links. Select &lt;strong&gt;+ Add&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuo4wj8wxiwu2he6gzgj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuo4wj8wxiwu2he6gzgj.png" alt="DNS management" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Configure the virtual network link&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link name                 &lt;strong&gt;app-vnet-link&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Virtual network                   &lt;strong&gt;app-vnet&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enable auto registration  &lt;strong&gt;Enabled&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzckur82m7d3csqalwop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzckur82m7d3csqalwop.png" alt="Configure virtual network link" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ajmk1apb28uix6lnp2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ajmk1apb28uix6lnp2r.png" alt="Configure virtual network link" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Create&lt;/strong&gt; and wait for the deployment to finish. If necessary, Refresh the page&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0vgn39bbvb8spvd11hd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0vgn39bbvb8spvd11hd.png" alt="Create" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2i447d1hn0qjfwdxzil.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2i447d1hn0qjfwdxzil.png" alt="Virtual network links" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a DNS record set&lt;/strong&gt;&lt;br&gt;
DNS records provide information about the DNS zone.&lt;/p&gt;

&lt;p&gt;1.In the portal, continue working on the &lt;strong&gt;private.contoso.com&lt;/strong&gt; DNS zone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h9hz4q9vrfua6v6kwmw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h9hz4q9vrfua6v6kwmw.png" alt="private.contoso.com" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the &lt;strong&gt;DNS Management&lt;/strong&gt; blade, select &lt;strong&gt;+ Recordsets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx2fsoddasvij4qh1u8q3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx2fsoddasvij4qh1u8q3.png" alt="Recordsets" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Notice that two A records have automatically been created for each of the virtual machines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nuulz1in1l7zthr5gm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nuulz1in1l7zthr5gm1.png" alt="Recordsets for vm1 and vm2" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;+ Add&lt;/strong&gt; and configure a record set. When finished select &lt;strong&gt;Add&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name            ** backend**&lt;/li&gt;
&lt;li&gt;Type             &lt;strong&gt;A&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;TTL              &lt;strong&gt;1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;IP address       &lt;strong&gt;10.1.1.5&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hdz5v5pc6t75rwa6w7m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hdz5v5pc6t75rwa6w7m.png" alt="Configure a record set" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This record set implies there is a virtual machine in app-vnet with a private IP address of 10.1.1.5.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Configure network routing.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Mon, 15 Sep 2025 14:37:01 +0000</pubDate>
      <link>https://dev.to/onyemuche/configure-network-routing-3all</link>
      <guid>https://dev.to/onyemuche/configure-network-routing-3all</guid>
      <description>&lt;p&gt;&lt;strong&gt;Network routing&lt;/strong&gt; is the process of determining the best path for data packets to travel from one device to another on a computer network. Routers, the backbone of network infrastructure, are responsible for facilitating this process. When a user sends data to another user or server, the router analyzes the packet's destination address and decides which path to take to reach its destination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Role of Routers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Routers act as traffic controllers in a network, directing data packets efficiently to their intended destinations. They maintain routing tables that contain information about various network paths, enabling them to make intelligent decisions about packet forwarding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Data Packets Travel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a data packet is sent from a source device, the router examines the packet's destination IP address. The router consults its routing table to determine the best path for the packet. It then forwards the packet to the next hop, which is another router along the chosen path. This process continues until the packet reaches its final destination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Types of Network Routing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Network routing can be classified into three main types: &lt;strong&gt;static routing&lt;/strong&gt;, &lt;strong&gt;dynamic routing&lt;/strong&gt;, and &lt;strong&gt;default routing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Static Routing&lt;/strong&gt;&lt;br&gt;
In static routing, network administrators manually configure the routing tables in routers. This approach is suitable for smaller networks with stable topologies, where the paths between devices remain constant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Routing&lt;/strong&gt;&lt;br&gt;
Dynamic routing, on the other hand, uses routing protocols to automate the process of updating routing tables. Routers exchange information about the network's status and adapt to changes in real-time, making dynamic routing ideal for larger, more complex networks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default Routing&lt;/strong&gt;&lt;br&gt;
Default routing comes into play when a router does not have a specific entry for the destination IP address in its routing table. In such cases, the router forwards the packet to a pre-defined default gateway, which acts as a central exit point for the network&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Process of Network Routing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The process of network routing is a crucial mechanism that enables data packets to traverse efficiently through a complex web of interconnected devices on a computer network. we will delve deeper into the various steps involved in network routing, shedding light on how routers make intelligent decisions to ensure successful data transmission.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source and Destination&lt;/strong&gt;&lt;br&gt;
At the heart of network routing is the concept of source and destination. When a user initiates data transmission, acting as the source, they specify the destination device or server where the data should ultimately arrive. This information is essential as it forms the basis for the routing process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building Routing Tables&lt;/strong&gt;&lt;br&gt;
One of the fundamental tasks of routers is building and maintaining routing tables. These tables contain critical information about various destinations within the network and the paths that can be taken to reach them. In dynamic routing environments, routing tables are continually updated as routers exchange information with each other, adapting to changes in the network's topology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Determining the Best Path&lt;/strong&gt;&lt;br&gt;
Once a router receives a data packet from the source, it examines the destination address of the packet. Using the information stored in its routing table, the router evaluates various available paths to determine the best route for the data packet to take. This decision-making process involves considering metrics such as link cost, which assesses the efficiency and reliability of potential paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forwarding Data Packets&lt;/strong&gt;&lt;br&gt;
With the best path identified, the router proceeds to forward the data packet to the next hop. The next hop refers to the next router along the chosen path that brings the data packet closer to its final destination. This forwarding process occurs iteratively at each router until the data packet reaches its intended endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In this Articles we are going to look into steps on how to configure network routing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To ensure the firewall policies are enforced, outbound application traffic must be routed through the firewall. To do that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A route table is required. This route table will be associated with the frontend and backend subnets.&lt;/li&gt;
&lt;li&gt;A route is required to filter all outbound IP traffic from the subnets to the firewall. The firewall’s private IP address will be used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F732xkbuyhla0r49biglx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F732xkbuyhla0r49biglx.png" alt="Archtecture diagram" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To configure network routing, we going to perform the following tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and configure a route table.&lt;/li&gt;
&lt;li&gt;Link a route table to a subnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create a route table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure automatically creates a route table for each subnet within an Azure virtual network. The route table includes the default system routes. You can create route tables and routes to override Azure’s default system routes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Record the private IP address of app-vnet-firewall&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the search box at the top of the portal, enter &lt;strong&gt;Firewall&lt;/strong&gt;. Select &lt;strong&gt;Firewall&lt;/strong&gt; in the search results&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt7m5bobfma2cu553qak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt7m5bobfma2cu553qak.png" alt="Firewall" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;app-vnet-firewall&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dr9527yc5yhaft7fyv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dr9527yc5yhaft7fyv8.png" alt="app vnet firewall" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Select Overview and record the &lt;strong&gt;Private IP address&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3z0ayr9o2ak1atrki5a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3z0ayr9o2ak1atrki5a.png" alt="Private IP address" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add the route table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the search box, enter &lt;strong&gt;Route tables&lt;/strong&gt;. When Route table appears in the search results, select it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwihhf603dv6kcxnur54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwihhf603dv6kcxnur54.png" alt="Route table" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the Route table page, select &lt;strong&gt;+ Create&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffnuavgnpg14i4qjz4yln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffnuavgnpg14i4qjz4yln.png" alt="+ Create" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Create the route table&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription               &lt;strong&gt;Select your subscription&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Resource group                 &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region                         &lt;strong&gt;East US&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name                       &lt;strong&gt;app-vnet-firewall-rt&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvsju7e39tdoi06ariuh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvsju7e39tdoi06ariuh.png" alt="Creating route table" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Review + create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fie79kcaredo9q2fsyv1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fie79kcaredo9q2fsyv1l.png" alt="Review + Create" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.After validation pass. Select &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxc3h4zdrw6wzwt0efex.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxc3h4zdrw6wzwt0efex.png" alt="Create" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Wait for the route table to deploy, then select &lt;strong&gt;Go to resource&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1cukptajdxsukob0qt63.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1cukptajdxsukob0qt63.png" alt="Go to Resource" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Associate the route table to the subnets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the portal, continue working with the route table, select &lt;strong&gt;app-vnet-firewall-rt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbo7p60x5hnedaanwtz8i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbo7p60x5hnedaanwtz8i.png" alt="app-vnet-fifrewall-rt" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the &lt;strong&gt;Settings&lt;/strong&gt; blade, &lt;strong&gt;select&lt;/strong&gt; Subnets and then &lt;strong&gt;+ Associate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukdpczsoovm7m85lc92o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukdpczsoovm7m85lc92o.png" alt="+ Associate" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Configure an association to the &lt;strong&gt;frontend&lt;/strong&gt; subnet, then select &lt;strong&gt;OK&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaes1z4nxpw3rq8ni0e6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaes1z4nxpw3rq8ni0e6.png" alt="Associate frontend" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Configure an association to the &lt;strong&gt;backend&lt;/strong&gt; subnet, then select &lt;strong&gt;OK&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnjw4y93b4spchff3ukrs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnjw4y93b4spchff3ukrs.png" alt="Associate backend" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a route in the route table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the portal, continue working with the route table, select app-vnet-firewall-rt&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvqm4hu21693tbwpntli.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvqm4hu21693tbwpntli.png" alt="App-vnet-firewall-rt" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the &lt;strong&gt;Settings&lt;/strong&gt; blade, select &lt;strong&gt;Routes&lt;/strong&gt; and then &lt;strong&gt;+ Add&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8sc25p6kfthnhin0mj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8sc25p6kfthnhin0mj7.png" alt="+ Route" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Configure the route, then select &lt;strong&gt;Add&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route name                              ** outbound-firewall**&lt;/li&gt;
&lt;li&gt;Destination type                     &lt;strong&gt;IP addresses&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Destination IP addresses/CIDR range      &lt;strong&gt;0.0.0.0/0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Next hop type                            &lt;strong&gt;Virtual appliance&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Next hop address     &lt;strong&gt;private IP address of the firewall&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk69z550q5dvvpgwmoviw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk69z550q5dvvpgwmoviw.png" alt="Configure Route" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zaa9qfwrmdgnuw8q9qk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zaa9qfwrmdgnuw8q9qk.png" alt="Created route" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>cloudnative</category>
      <category>programming</category>
    </item>
    <item>
      <title>Create a sample resume and Push to GitHub Pages.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Fri, 12 Sep 2025 21:55:21 +0000</pubDate>
      <link>https://dev.to/onyemuche/create-a-sample-resume-and-push-to-github-pages-3l2h</link>
      <guid>https://dev.to/onyemuche/create-a-sample-resume-and-push-to-github-pages-3l2h</guid>
      <description>&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; &lt;br&gt;
Git is a distributed version control system, which means that a local clone of the project is a complete version control repository. These fully functional local repositories make it easy to work offline or remotely. Developers commit their work locally, and then sync their copy of the repository with the copy on the server. This paradigm differs from centralized version control where clients must synchronize code with a server before creating new versions of code.&lt;/p&gt;

&lt;p&gt;Git's flexibility and popularity make it a great choice for any team. Many developers and college graduates already know how to use Git. Git's user community has created resources to train developers and Git's popularity make it easy to get help when needed. Nearly every development environment has Git support and Git command line tools implemented on every major operating system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of Git&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simultaneous development&lt;/strong&gt;: Everyone has their own local copy of code and can work simultaneously on their own branches. Git works offline since almost every operation is local.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Faster releases&lt;/strong&gt;: Branches allow for flexible and simultaneous development. The main branch contains stable, high-quality code from which you release. Feature branches contain work in progress, which are merged into the main branch upon completion. By separating the release branch from development in progress, it's easier to manage stable code and ship updates more quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in integration&lt;/strong&gt;: Due to its popularity, Git integrates into most tools and products. Every major IDE has built-in Git support, and many tools support continuous integration, continuous deployment, automated testing, work item tracking, metrics, and reporting feature integration with Git. This integration simplifies the day-to-day workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strong community support&lt;/strong&gt;: Git is open-source and has become the de facto standard for version control. There is no shortage of tools and resources available for teams to leverage. The volume of community support for Git compared to other version control systems makes it easy to get help when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git works with any team&lt;/strong&gt;: Using Git with a source code management tool increases a team's productivity by encouraging collaboration, enforcing policies, automating processes, and improving visibility and traceability of work. The team can settle on individual tools for version control, work item tracking, and continuous integration and deployment. Or, they can choose a solution like GitHub or Azure DevOps that supports all of these tasks in one place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pull requests&lt;/strong&gt;: Use pull requests to discuss code changes with the team before merging them into the main branch. The discussions in pull requests are invaluable to ensuring code quality and increase knowledge across your team. Platforms like GitHub and Azure DevOps offer a rich pull request experience where developers can browse file changes, leave comments, inspect commits, view builds, and vote to approve the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Branch policies&lt;/strong&gt;: Teams can configure GitHub and Azure DevOps to enforce consistent workflows and process across the team. They can set up branch policies to ensure that pull requests meet requirements before completion. Branch policies protect important branches by preventing direct pushes, requiring reviewers, and ensuring clean builds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Github&lt;/strong&gt;&lt;br&gt;
GitHub is a cloud-based platform for version control and collaboration, primarily used by developers to store, manage, and share code. It is built on Git, an open-source version control system that tracks changes in code and allows multiple people to collaborate on a project efficiently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mh79erds63mivg7uv7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mh79erds63mivg7uv7y.png" alt="Git/Github" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git Bash&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Git Bash&lt;/strong&gt; is an application for Microsoft Windows OS environments that provides Unix based shell utilities and experience for Git command line commands. Git Bash emulates the Git command line experience that Unix environments have, for Windows users. Most Windows users download Git Bash when they first install Git for Windows.&lt;/p&gt;

&lt;p&gt;As a version control system, Git was originally delivered within Unix style command line methods. MacOS &amp;amp; Linux Operating Systems have a built-in terminal shell that supports Unix-based command line features whereas Microsoft Windows’ Operating System command line prompt is not a Unix-based terminal. Because the Windows command line does not support Unix-based commands, Git CLI features are mostly delivered with user-friendly GUI applications in the Windows Operating System. These applications provide visual functionalities to the end-user which makes using Git easier.  &lt;/p&gt;

&lt;p&gt;As Git experience increases, end-users can prefer using Git command line features for specific commands. Git Bash is one tool that provides command line features in the Windows Operating System to end-users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Essential Git Bash Commands&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;1.&lt;strong&gt;GIT PUSH&lt;/strong&gt;: This command is used to upload local repository content to a remote repository. (In Git, a local repository is a version-controlled directory on your local computer where your project files are stored, along with the metadata Git uses to track changes to these files.)&lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;GIT COMMIT -M&lt;/strong&gt;: This takes a snapshot of your repository at one point in time. The -m flag helps u add a message to the commit&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;GIT ADD&lt;/strong&gt; As the name implies it adds a change in the working directory to the staging area. It tells git that u want to include updates to a particular file.&lt;/p&gt;

&lt;p&gt;4.&lt;strong&gt;GIT REMOTE ADD ORIGIN&lt;/strong&gt;: This creates a new empty Git repository on your remote server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps on how to use Git BASH command to create a sample resume and push it to Github pages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.To install Git for windows, click on this link &lt;a href="https://git-scm.com/downloads/win" rel="noopener noreferrer"&gt;https://git-scm.com/downloads/win&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;2.Click on windows version to download and install Git for windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pc7afjzrm8ud053skc6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pc7afjzrm8ud053skc6.png" alt="Download git for windows" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Go to download, choose the downloaded git version for windows, click to install ,choose &lt;strong&gt;Next&lt;/strong&gt; throughout as default to complete the installation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3g4gh97eoq8ikm1kekb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3g4gh97eoq8ikm1kekb.png" alt="Downloaded gitbash" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo60j0l27wkfbiptfwry2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo60j0l27wkfbiptfwry2.png" alt="Next as default" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.when the installation is complete, open your gitbash to Configure the Gitbash with an Identity, to do that create a name and email with the following commands:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;git config --global user.name "name"&lt;/strong&gt; &lt;br&gt;
&lt;strong&gt;git config --global user.email "email"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr03lhk0ntuopy3t9suvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr03lhk0ntuopy3t9suvx.png" alt="Gitbash identity" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Use this command &lt;strong&gt;git config --list&lt;/strong&gt; to confirm if the configuration is successful. From our gitbash it shows its successful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckjjipdn72j5dtwc8gnr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckjjipdn72j5dtwc8gnr.png" alt="git config --list" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Prepare your work environment to work with it. To do that, create/make a directory.(Its similiar to what Resource group does in microsoft Azure).To make directory, run this command &lt;strong&gt;mkdir emmanuelobinnadirectory&lt;/strong&gt; in your gitbash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh4we7yltc44hdtwt4jy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh4we7yltc44hdtwt4jy.png" alt="mkdir emmanuelobinnadirectory" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.To see things that is in your computer or things you have created use &lt;strong&gt;ls&lt;/strong&gt; command in your gitbash&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxg50gyafifqxh2u7v1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxg50gyafifqxh2u7v1a.png" alt="ls command" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Enter/open the emmanuelobinnadirectory we  have created, use &lt;strong&gt;cd emmanuelobinnadirectory&lt;/strong&gt; command&lt;/p&gt;

&lt;p&gt;9.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9l9l0nl7oe7gionvcqo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9l9l0nl7oe7gionvcqo.png" alt="Open directory" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.Type this command &lt;strong&gt;clear&lt;/strong&gt; your gitbash to clear the screen but its important to note that ,it doesnt mean your previous command have been deleted.&lt;/p&gt;

&lt;p&gt;9.In your gitbash type this command &lt;strong&gt;git init&lt;/strong&gt; to convert your directory into a local git repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g7kk570weugujyq8jyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g7kk570weugujyq8jyw.png" alt="Git init" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.To confirm that it has been converted. Type this command &lt;strong&gt;ls -al&lt;/strong&gt; in your gitbash to list the hidden files,.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnlja1la3dygehp65bug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnlja1la3dygehp65bug.png" alt="ls -al" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.In your gitbash, type this command &lt;strong&gt;touch index.html&lt;/strong&gt; to Create an empty text file/html file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd75o7y9xp70v5qaagch0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd75o7y9xp70v5qaagch0.png" alt="touch index.html" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12.To verify that we have created the touch index.html file use the command &lt;strong&gt;ls&lt;/strong&gt; in your gitbash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6h1u9w474gqkvbxigkrl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6h1u9w474gqkvbxigkrl.png" alt="list" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13.Go to chatGPT, upload your resume on your chatGPT, or you can ask chatGPT to create an index.html for cloud engineering resume for Emmanuel obinna Onyemuche.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7o76qmkv6c0qjpyhliz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7o76qmkv6c0qjpyhliz1.png" alt="ChaTGPT generate code" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14.Go to gitbash, use the command &lt;strong&gt;vi index.html&lt;/strong&gt; to open this index.html to start typing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4gkpa6zhf8b2u0ltxad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4gkpa6zhf8b2u0ltxad.png" alt="vi index.html" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;15.In other to edit vi file ,you have to make it to be on insert mode by typing &lt;strong&gt;i&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnrj6dlp3l0khji0f9wc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnrj6dlp3l0khji0f9wc.png" alt="Insert mode" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;16.Go to chatGPT and copy the &lt;strong&gt;code&lt;/strong&gt; generated on the chatGPT and paste it, in  the gitbash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pbq0ytpmfkob3jbk18p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pbq0ytpmfkob3jbk18p.png" alt="Code from chatGpt" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;17.Click &lt;strong&gt;escape&lt;/strong&gt; key on the keyboard to save the vim document.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15t19xdgarzi0lvgw10w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15t19xdgarzi0lvgw10w.png" alt="Escape key" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;18.Press &lt;strong&gt;shift+colon&lt;/strong&gt; on your keyboard at the same time, then type &lt;strong&gt;wq&lt;/strong&gt; in front of the colon. Hit enter on the keyboard.&lt;br&gt;
w= is used to save everything.&lt;br&gt;
q= is used to escape the page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxrp312dx7jklbxio4a5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxrp312dx7jklbxio4a5.png" alt="wq" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe9chxlvs0z1bej30wioz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe9chxlvs0z1bej30wioz.png" alt="After its saved" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;19.Got to github.&lt;a href="https://github.com/..sign" rel="noopener noreferrer"&gt;https://github.com/..sign&lt;/a&gt; in to your github or signup if you have not gotten a github account. Go to &lt;strong&gt;+create&lt;/strong&gt; to create a new repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhppdekoxyb0t08w6j5pe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhppdekoxyb0t08w6j5pe.png" alt="+create new repository" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;20.Give the repository a &lt;strong&gt;name&lt;/strong&gt;,choose the visibility to be &lt;strong&gt;public&lt;/strong&gt;,make sure Add README is &lt;strong&gt;on&lt;/strong&gt; and create the repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7getqf57p8vpy9xkvkz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7getqf57p8vpy9xkvkz7.png" alt="Creating new repository" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8xetzs61bu4yrohqgzf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8xetzs61bu4yrohqgzf.png" alt="Contd create new repository" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;21.on your Github, after creating the new repository, click on &lt;strong&gt;code&lt;/strong&gt; and copy the &lt;strong&gt;https&lt;/strong&gt; &lt;a href="https://github.com/EMMANUELOBINNAONYEMUCHE/Cloud-Engineer-Resume.git" rel="noopener noreferrer"&gt;https://github.com/EMMANUELOBINNAONYEMUCHE/Cloud-Engineer-Resume.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyfgcz8vftbwidgcrtmxl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyfgcz8vftbwidgcrtmxl.png" alt="Https" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;22.Go to back to your gitbash and type this command &lt;strong&gt;git remote add origin "url"&lt;/strong&gt; (&lt;a href="https://github.com/EMMANUELOBINNAONYEMUCHE/Cloud-Engineer-Resume.git" rel="noopener noreferrer"&gt;https://github.com/EMMANUELOBINNAONYEMUCHE/Cloud-Engineer-Resume.git&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvsalj3f1ealwa75edzp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvsalj3f1ealwa75edzp.png" alt="git remote add origin url" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;23.Use &lt;strong&gt;git status&lt;/strong&gt; to verify there is a file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvvtdxv1bekgwed3rivl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvvtdxv1bekgwed3rivl.png" alt="git status" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;24.Take the file to the staging area by using a command &lt;strong&gt;git add .&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3btvy0xx0g4xa7gmjsv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3btvy0xx0g4xa7gmjsv.png" alt="git add ." width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;25.Type &lt;strong&gt;git status&lt;/strong&gt; command on your gitbash to verify it has been added to the staging area.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkxjlyxgjnti4exd662o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkxjlyxgjnti4exd662o.png" alt="git status" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;26.Type the command &lt;strong&gt;git commit -m "a commit message"&lt;/strong&gt; to take a snapshot of the entire file in the staging area and save it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72y9rht6w4vr97jp76q3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72y9rht6w4vr97jp76q3.png" alt="git commit -m " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;27.In the gitbash, type the command &lt;strong&gt;git push origin master&lt;/strong&gt; to push it to the github. It will prompt a page, asking you to sign in to github. Choose sign in through the browser&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl899glz213xncmmrxh42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl899glz213xncmmrxh42.png" alt="git push origin master" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;28.Login to your github, while its pushing it to your github, after you have logged in, check your gitbash for confirmation that the push to the github is successful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0r3eux3vmq5dphsq1v6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0r3eux3vmq5dphsq1v6.png" alt="Login" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyrp00ie8okuq4v35nqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyrp00ie8okuq4v35nqg.png" alt="Verification that the push to github is completed" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;29.In your github, switch to &lt;strong&gt;master&lt;/strong&gt; from main because we pushed it to master in our gitbash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1ciu76uiiin45p70l92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1ciu76uiiin45p70l92.png" alt="Master" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;30.In your github, click on the &lt;strong&gt;index.html&lt;/strong&gt; that you created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86xmadp0b5p6nbuxaf79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86xmadp0b5p6nbuxaf79.png" alt="Index.html" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;31.When you open it, you will notice that everything that you did in you local environment was brought up to github.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zyqst3bzhn42sqxcqhy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zyqst3bzhn42sqxcqhy.png" alt="index.html" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;32.Select &lt;strong&gt;settings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jadili2kaie45xeuw2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jadili2kaie45xeuw2w.png" alt="Settings" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;33.On the left hand side look for &lt;strong&gt;Pages&lt;/strong&gt; and click on it. On the &lt;strong&gt;branch&lt;/strong&gt;, select &lt;strong&gt;master&lt;/strong&gt; and &lt;strong&gt;save&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkd1a0e83ttz03yfi7fxr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkd1a0e83ttz03yfi7fxr.png" alt="Page" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;34.Refresh the page to see a &lt;strong&gt;link&lt;/strong&gt; or &lt;strong&gt;visit site&lt;/strong&gt; copy the link and paste on new browser or click on visit site to the Resume&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs2arve22vpzqu2v8d15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs2arve22vpzqu2v8d15.png" alt="Visit site" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Resume&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp328sapqjsz760j6wgx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp328sapqjsz760j6wgx.png" alt="The resume" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>cloud</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Create and configure Azure Firewall.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Wed, 10 Sep 2025 14:57:46 +0000</pubDate>
      <link>https://dev.to/onyemuche/create-and-configure-azure-firewall-1hd2</link>
      <guid>https://dev.to/onyemuche/create-and-configure-azure-firewall-1hd2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Azure Firewall&lt;/strong&gt; is a fully managed, cloud-native network security service from Microsoft designed to protect Azure Virtual Network resources by filtering both inbound and outbound traffic with high availability and unlimited scalability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Firewall&lt;/strong&gt; operates as a stateful firewall-as-a-service within the Azure cloud, meaning it tracks the state of network connections and makes intelligent security decisions based on that context. It inspects both east-west traffic (within the same network) and north-south traffic (between networks or to/from the internet), providing comprehensive network protection. Azure Firewall is integrated tightly with Azure’s infrastructure, allowing centralized, policy-driven security management across multiple subscriptions and virtual networks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnhx4elt4v6auvpjz566j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnhx4elt4v6auvpjz566j.png" alt="Azure firewall" width="800" height="263"&gt;&lt;/a&gt;                                        &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stateful Inspection&lt;/strong&gt;: Tracks connection states to allow or block traffic intelligently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in High Availability&lt;/strong&gt;: Automatically available with no need to deploy additional infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Scalability&lt;/strong&gt;: Dynamically scales to handle fluctuating workloads and traffic volumes without manual intervention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application and Network Filtering&lt;/strong&gt;: Supports filtering based on fully qualified domain names (FQDNs), IP addresses, protocols, and ports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Threat Intelligence Integration&lt;/strong&gt;: Constantly updated with Microsoft’s threat intelligence to block traffic from known malicious IPs and domains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Capabilities with Premium SKU&lt;/strong&gt;: Includes features like TLS inspection (decrypting and inspecting encrypted traffic), Intrusion Detection and Prevention System (IDPS) for signature-based malware detection, URL filtering, and web category filtering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging and Monitoring&lt;/strong&gt;: Seamlessly integrates with Azure Monitor for logging, diagnostics, and security analytics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Comparison with Other Azure Security Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure Firewall complements Network Security Groups (NSGs) by providing a higher level of network and application-layer protection centrally across networks, while NSGs offer more distributed, subnet-level control. It also differs from Azure Web Application Firewall (WAF), which focuses specifically on protecting web applications from Layer 7 attacks.&lt;/p&gt;

&lt;p&gt;In a scenario where an organization requires centralized network security for the application virtual network. As the application usage increases, more granular application-level filtering and advanced threat protection will be needed. Also, it is expected the application will need continuous updates from Azure DevOps pipelines. So to protect the inbound and outbound virtual networks, the following requirement is needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Azure Firewall&lt;/strong&gt; is required for additional security in the app-vnet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A firewall policy&lt;/strong&gt; should be configured to help manage access to the application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A firewall policy application rule is required&lt;/strong&gt;. This rule will allow the application access to Azure DevOps so the application code can be updated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A firewall policy network rule is required&lt;/strong&gt;. This rule will allow DNS resolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To achieve this we have got to perform the following Tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an Azure Firewall.&lt;/li&gt;
&lt;li&gt;Create and configure a firewall policy&lt;/li&gt;
&lt;li&gt;Create an application rule collection.&lt;/li&gt;
&lt;li&gt;Create a network rule collection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nl6ztvp3uxm3fuyeppk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nl6ztvp3uxm3fuyeppk.png" alt="Architecture diagram" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Azure Firewall subnet in our existing virtual network&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the search box at the top of the portal, enter &lt;strong&gt;Virtual networks&lt;/strong&gt;. Select &lt;strong&gt;Virtual networks&lt;/strong&gt; in the search results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy33s4dwpoimr9aa0c8fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy33s4dwpoimr9aa0c8fz.png" alt="Virtual network" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;app-vnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfd4dp1m4istne4wja47.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfd4dp1m4istne4wja47.png" alt="app-vnet" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Select &lt;strong&gt;Subnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdiufg915bluna4zydk1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdiufg915bluna4zydk1c.png" alt="Subnet" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;+ Subnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcjymqkg55hajz5uutd2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcjymqkg55hajz5uutd2.png" alt="+Subnet" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Enter the following information and select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Name                      &lt;strong&gt;AzureFirewallSubnet&lt;/strong&gt;&lt;br&gt;
Address range             &lt;strong&gt;10.1.63.0/26&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Leave all other settings as default&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66e5kooal043qm3w0obe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66e5kooal043qm3w0obe.png" alt="Azurefirewallsubnet" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ch73wij67jzrwo4xb5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ch73wij67jzrwo4xb5m.png" alt="Added azurefirewall" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create an Azure Firewall&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbnhju1os58lsroqg6la.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbnhju1os58lsroqg6la.png" alt="Azure firewall" width="745" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.In the search box at the top of the portal, enter &lt;strong&gt;Firewall&lt;/strong&gt;. Select &lt;strong&gt;Firewall&lt;/strong&gt; in the search results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftlddc14ehyp5m3lysrd2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftlddc14ehyp5m3lysrd2.png" alt="Firewall" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;+ Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcxhd87a5fcb6a757gs3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcxhd87a5fcb6a757gs3n.png" alt="+ Create" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Create a firewall by using the values in the following table. For any property that is not specified, use the default value&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource group                            &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name                                      &lt;strong&gt;app-vnet-firewall&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Firewall SKU                              &lt;strong&gt;Standard&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Firewall management                       &lt;strong&gt;Use a Firewall Policy to manage this firewall&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Firewall policy                       &lt;strong&gt;select Add new&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Policy name                               &lt;strong&gt;fw-policy&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region                                &lt;strong&gt;East US&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Policy Tier                               &lt;strong&gt;Standard&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose a virtual network              &lt;strong&gt;Use existing&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Virtual network                       &lt;strong&gt;app-vnet (RG1)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Public IP address                     &lt;strong&gt;Add new: fwpip&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enable Firewall Management NIC         &lt;strong&gt;uncheck the box&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw86e1gz06odgs4qnf0b0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw86e1gz06odgs4qnf0b0.png" alt="Firewall" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5bq658iee2x1vs0inup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5bq658iee2x1vs0inup.png" alt="Firewall" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyn0gz84gv2o8pccudpk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyn0gz84gv2o8pccudpk1.png" alt="Enable firewall management unchecked" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Review + Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8flzq4zit1znsg59uf0d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8flzq4zit1znsg59uf0d.png" alt="Review + Create" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1386j2cwmmxhj773yrb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1386j2cwmmxhj773yrb.png" alt="Create" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update the Firewall Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the portal, search for and select &lt;strong&gt;Firewall Policies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp40nyfr3n4b2f7orly4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp40nyfr3n4b2f7orly4k.png" alt="Firewall" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;fw-policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fioz3v95ls02xat9qv5mz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fioz3v95ls02xat9qv5mz.png" alt="fw policy" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add an application rule&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the &lt;strong&gt;Rule&lt;/strong&gt; blade, select &lt;strong&gt;Application rules&lt;/strong&gt; and then &lt;strong&gt;Add a rule collection&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fee0z39jl6ds15qjzzrmo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fee0z39jl6ds15qjzzrmo.png" alt="Application rules" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Create a firewall by using the values in the following table. For any property that is not specified, use the default value. &lt;strong&gt;Add&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name                             app-vnet-fw-rule-collection&lt;/li&gt;
&lt;li&gt;Rule collection type             Application&lt;/li&gt;
&lt;li&gt;Priority                     200&lt;/li&gt;
&lt;li&gt;Rule collection action       Allow&lt;/li&gt;
&lt;li&gt;Rule collection group     DefaultApplicationRuleCollectionGroup&lt;/li&gt;
&lt;li&gt;Name                             AllowAzurePipelines&lt;/li&gt;
&lt;li&gt;Source type                      IP address&lt;/li&gt;
&lt;li&gt;Source                       10.1.0.0/23&lt;/li&gt;
&lt;li&gt;Protocol                     https&lt;/li&gt;
&lt;li&gt;Destination type             FQDN&lt;/li&gt;
&lt;li&gt;Destination                      dev.azure.com, azure.microsoft.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl36k05ehbksyr1jszbfy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl36k05ehbksyr1jszbfy.png" alt="Add rule collection" width="800" height="367"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;: The &lt;strong&gt;AllowAzurePipelines&lt;/strong&gt; rule allows the web application to access Azure Pipelines. The rule allows the web application to access the Azure DevOps service and the Azure website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add a network rule&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the &lt;strong&gt;Settings&lt;/strong&gt; blade, select &lt;strong&gt;Network rules&lt;/strong&gt; and then &lt;strong&gt;Add a network collection&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbhibne3qqecv6nldfqc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbhibne3qqecv6nldfqc.png" alt="Network rules" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Configure the network rule and then select &lt;strong&gt;Add&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name                          &lt;strong&gt;app-vnet-fw-nrc-dns&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Rule collection type          &lt;strong&gt;Network&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Priority                  &lt;strong&gt;200&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Rule collection action    &lt;strong&gt;Allow&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Rule collection group  &lt;strong&gt;DefaultNetworkRuleCollectionGroup&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Rule                          &lt;strong&gt;AllowDns&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Source                    &lt;strong&gt;10.1.0.0/23&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Protocol                  &lt;strong&gt;UDP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Destination ports         &lt;strong&gt;53&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Destination addresses         &lt;strong&gt;1.1.1.1, 1.0.0.1&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzd5x8li63gm9yzxhxn3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzd5x8li63gm9yzxhxn3h.png" alt="Configure network rule" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify the firewall and firewall policy status&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the portal search for and select &lt;strong&gt;Firewall&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bn2vno9kfsnyvfhsvp6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bn2vno9kfsnyvfhsvp6.png" alt="app-vnet-firewall" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.View the app-vnet-firewall and ensure the Provisioning state is Succeeded. This may take a few minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78355mgxwd3nhpx2mw9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78355mgxwd3nhpx2mw9k.png" alt="Provisioning state" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.In the portal serach for and select &lt;strong&gt;Firewall policies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt9vdgtuwmnnfuvp0r17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt9vdgtuwmnnfuvp0r17.png" alt="firewall policies" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.View the fw-policy and ensure the Provisioning state is Succeeded. This may take a few minute&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx97xgr0s63dp12tiglos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx97xgr0s63dp12tiglos.png" alt="fw-policy" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felzcv6xdd277vu1u3ns8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felzcv6xdd277vu1u3ns8.png" alt="Provision state" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>cloud</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Create and Configure network security groups.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Wed, 10 Sep 2025 11:17:53 +0000</pubDate>
      <link>https://dev.to/onyemuche/how-to-create-and-configure-network-security-groups-pol</link>
      <guid>https://dev.to/onyemuche/how-to-create-and-configure-network-security-groups-pol</guid>
      <description>&lt;p&gt;&lt;strong&gt;A network security group (NSG)&lt;/strong&gt; is a virtual firewall that controls network traffic to and from resources within a cloud environment, such as a virtual network. It uses a set of access control rules to allow or deny network traffic based on criteria like source/destination IP address, port, and protocol. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NSGs&lt;/strong&gt; are a fundamental part of cloud security and can be applied to either entire network subnets or individual virtual machine network interfaces. By applying them at the subnet level, all resources within that subnet are protected, offering a simple way to manage access for groups of resources.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdm7l3o1scksnkypatfwo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdm7l3o1scksnkypatfwo.png" alt="Diagram description of NSG" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How network security groups work&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NSGs operate based on a set of security rules that define what traffic is permitted. These rules are processed in order of priority, with the lowest number having the highest priority. Once a rule matches a traffic packet, processing stops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A rule contains the following elements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direction&lt;/strong&gt;: Whether the rule applies to inbound (incoming) or outbound (outgoing) traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source/Destination&lt;/strong&gt;: Can be a specific IP address, an IP address range (using CIDR notation), or a Service Tag that represents a group of IP prefixes for an Azure service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port range&lt;/strong&gt;: A specific port (e.g., 80) or a range of ports (e.g., 1000-2000).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol&lt;/strong&gt;: Specifies the protocol to match, such as TCP, UDP, or ICMP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action&lt;/strong&gt;: What to do with the traffic if it matches the rule, either "Allow" or "Deny".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key NSG concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default rules&lt;/strong&gt;: NSGs come with a set of default rules that cannot be removed but can be overridden by user-created rules with higher priority.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stateful filtering&lt;/strong&gt;: NSGs are "stateful," meaning that if an outbound connection is allowed, the firewall automatically permits the return inbound traffic for that connection. You do not need a separate inbound rule for it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application security groups (ASGs)&lt;/strong&gt;: A related feature that allows you to group virtual machines by application or role, rather than by IP address. You can then use the ASG in your NSG rules, which simplifies management and helps ensure consistent security policies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow logs&lt;/strong&gt;: A feature that logs information about IP traffic passing through an NSG, including source/destination details and whether traffic was allowed or denied. This data is useful for monitoring and troubleshooting network traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article, we are going to create and configure a network security group based on a scenario of an organization that requires the network traffic in the app-vnet to be tightly controlled. To do that we have to meet this requirements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The frontend subnet has web servers that can be accessed from the internet. An &lt;strong&gt;application security group (ASG)&lt;/strong&gt; is required for those servers. The ASG should be associated with any virtual machine interface that is part of the group. This will allow the web servers to be easily managed.&lt;/li&gt;
&lt;li&gt;The backend subnet has database servers used by the frontend web servers. A &lt;strong&gt;network security group (NSG)&lt;/strong&gt; is required to control this traffic. The NSG should be associated with any virtual machine interface that will be accessed by the web servers.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For testing, a virtual machine should be installed in the frontend subnet (VM1) and the backend subnet (VM2).Then complete the following task:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a network security group.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create network security group rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Associate a network security group to a subnet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create and use application security groups in network security group rules.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynx9yr4fuh8nnrciq391.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynx9yr4fuh8nnrciq391.png" alt="Architecture diagram" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create &lt;strong&gt;VM1&lt;/strong&gt; with &lt;strong&gt;Ubuntu server&lt;/strong&gt;, and  associate &lt;strong&gt;frontend&lt;/strong&gt; as the subnet and &lt;strong&gt;app-vnet&lt;/strong&gt; as the virtual network.&lt;/p&gt;

&lt;p&gt;1.In your Azure portal, in the search resource, search for &lt;strong&gt;virtual machine&lt;/strong&gt; and select the grayed virtual machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcd4nt44fj0wfp3c1tmqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcd4nt44fj0wfp3c1tmqv.png" alt="Virtual machine search portal" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;+Create&lt;/strong&gt; and select Virtual machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8exn15gn2kbtqgu0w1gc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8exn15gn2kbtqgu0w1gc.png" alt="+Create" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Under &lt;strong&gt;Basics&lt;/strong&gt;, fill the project detail by choosing your &lt;strong&gt;Resource group&lt;/strong&gt;, &lt;strong&gt;Virtual machine name&lt;/strong&gt;, &lt;strong&gt;Region&lt;/strong&gt;,&lt;strong&gt;Availability option&lt;/strong&gt;, &lt;strong&gt;Availability zone&lt;/strong&gt;, &lt;strong&gt;Image&lt;/strong&gt;, &lt;strong&gt;Size&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fummegznvxlqdl2wblf6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fummegznvxlqdl2wblf6g.png" alt="Project details" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9qujxblmmtssgkkhdlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9qujxblmmtssgkkhdlp.png" alt="Contd project details" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Under &lt;strong&gt;Administrator account&lt;/strong&gt;, choose password then fill in the Username and Password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhbn0gf25flougupxjyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhbn0gf25flougupxjyx.png" alt="Administrator account" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the &lt;strong&gt;Inbound port rules&lt;/strong&gt;, select &lt;strong&gt;None&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjlp331u0bq0e44m3xr2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjlp331u0bq0e44m3xr2.png" alt="Inbound port rules" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.On &lt;strong&gt;Networking&lt;/strong&gt;, choose your virtual network app-vnet and your &lt;strong&gt;frontend&lt;/strong&gt; subnet. And leave the rest as default &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3y3gmkkrr3o9yrdzkyk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3y3gmkkrr3o9yrdzkyk8.png" alt="Networking" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;Review + Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m9jw237dnfd63d4jlet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m9jw237dnfd63d4jlet.png" alt="Review + Create" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.After Validation, select &lt;strong&gt;Create&lt;/strong&gt; and wait for deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Furug79w1v05b0sxwxvyt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Furug79w1v05b0sxwxvyt.png" alt="Create" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create another virtual machine &lt;strong&gt;VM2&lt;/strong&gt; with &lt;strong&gt;Ubuntu server&lt;/strong&gt;, and  associate &lt;strong&gt;backend&lt;/strong&gt; as the subnet and &lt;strong&gt;app-vnet&lt;/strong&gt; as the virtual network.&lt;/p&gt;

&lt;p&gt;1.In your Azure portal, search for virtual machine and select.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Facyy3dp6pbjzseqr35ym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Facyy3dp6pbjzseqr35ym.png" alt="Virtual machine" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;+Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwjv235xoifgu5kt7mg6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwjv235xoifgu5kt7mg6.png" alt="+ Create" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Under &lt;strong&gt;Basics&lt;/strong&gt;, fill the project detail by choosing your &lt;strong&gt;Resource group&lt;/strong&gt;, &lt;strong&gt;Virtual machine name&lt;/strong&gt;, &lt;strong&gt;Region&lt;/strong&gt;,&lt;strong&gt;Availability option&lt;/strong&gt;, &lt;strong&gt;Availability zone&lt;/strong&gt;, &lt;strong&gt;Image&lt;/strong&gt;, &lt;strong&gt;Size&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh98h8p7375k7hflptn2e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh98h8p7375k7hflptn2e.png" alt="Project details" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8686tmave5ngtp2ouxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8686tmave5ngtp2ouxo.png" alt="Cont. Project details" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Under &lt;strong&gt;Administrator account&lt;/strong&gt;, choose password then fill in the Username and Password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmruywetvvcrsfwrtmhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmruywetvvcrsfwrtmhi.png" alt="Administrator account" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the &lt;strong&gt;Inbound port rules&lt;/strong&gt;, select &lt;strong&gt;None&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnn9fdv9awkuib2btemhw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnn9fdv9awkuib2btemhw.png" alt="Inbound port rules" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.On &lt;strong&gt;Networking&lt;/strong&gt;, choose your virtual network app-vnet and your &lt;strong&gt;backend&lt;/strong&gt; subnet. Leave the rest as default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1x317m1kjckdquw6uyev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1x317m1kjckdquw6uyev.png" alt="Networking" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;Review + Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzucxph1nwx2id0vuyva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzucxph1nwx2id0vuyva.png" alt="Review + Create" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.After Validation, select &lt;strong&gt;Create&lt;/strong&gt; and wait for deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzc31sudqts0pz0592w8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzc31sudqts0pz0592w8.png" alt="Create" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Verify both vm1 and vm2 are Running. Then create an &lt;strong&gt;Application security group&lt;/strong&gt;.Application security groups (ASGs) let you group together servers with similar functions. For example, all the web servers hosting your application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Application Security Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the portal, search for and select &lt;strong&gt;Application security groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvq0uhazq5hdjuz9vbs3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvq0uhazq5hdjuz9vbs3.png" alt="Application security group" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;+ Create&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuykxm8simlptz0fz7fti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuykxm8simlptz0fz7fti.png" alt="+ Create" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Configure the application security group.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription                 &lt;strong&gt;Subscription 1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Resource group           &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name                         &lt;strong&gt;app-frontend-asg&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region                   &lt;strong&gt;East US&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0quk25xp208qjsd269x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0quk25xp208qjsd269x.png" alt="ASGs" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Review + create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F449rc15htnpmuozs2jnw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F449rc15htnpmuozs2jnw.png" alt="Review + Create" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdi0xlv8n5nti4hjsfp7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdi0xlv8n5nti4hjsfp7a.png" alt="Create" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You are creating the application security group in the same region as the existing virtual network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Associate the application security group to the network interface of the VM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In the Azure portal, search for and select &lt;strong&gt;VM1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkuqya9bk554mhw9nd96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkuqya9bk554mhw9nd96.png" alt="VM1" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the &lt;strong&gt;Networking&lt;/strong&gt; blade, select &lt;strong&gt;Application security groups&lt;/strong&gt; and then select &lt;strong&gt;Add application security groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy574m75lp4jse8snqjzm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy574m75lp4jse8snqjzm.png" alt="Add application security group" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Select the &lt;strong&gt;app-frontend-asg&lt;/strong&gt; and then select &lt;strong&gt;Add&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F521k4ls1xztkdtexo1hz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F521k4ls1xztkdtexo1hz.png" alt="Add app-frontend-asg" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cbptx3ydtulv3eatnlj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cbptx3ydtulv3eatnlj.png" alt="app-frontend-asg" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create and Associate the Network Security Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network security groups (NSGs)&lt;/strong&gt; secure network traffic in a virtual network.&lt;/p&gt;

&lt;p&gt;1.In the portal search for and select &lt;strong&gt;Network security group&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f50km8w3w1oz4vpoy56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f50km8w3w1oz4vpoy56.png" alt="Network security group" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;+ Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x50kh999s0qsb8p3krg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x50kh999s0qsb8p3krg.png" alt="+Create" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Configure the network security group&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription              &lt;strong&gt;Subscription 1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Resource group        &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name                      &lt;strong&gt;app-vnet-nsg&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region                &lt;strong&gt;East US&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ay9pdofwzj6n006k2ep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ay9pdofwzj6n006k2ep.png" alt="Configure NSG" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Review + create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kcy2r2nzn5pcupk5bwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kcy2r2nzn5pcupk5bwf.png" alt="Review + Create" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Create&lt;/strong&gt; after the validation is passed.Then wait for deployment to complete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhjhyyr90rfcwjrnz6q80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhjhyyr90rfcwjrnz6q80.png" alt="Create" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Associate the NSG with the app-vnet backend subnet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NSGs can be associated with subnets and/or individual network interfaces attached to Azure virtual machines.&lt;/p&gt;

&lt;p&gt;1.Select Go to resource or navigate to the app-vnet-nsg resource. In the Settings blade select Subnets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3269xzuewvz3i32ywix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3269xzuewvz3i32ywix.png" alt="app-vnet-nsg" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;+ Associate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkh2s16z8ut2bixlpkyiq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkh2s16z8ut2bixlpkyiq.png" alt="+ Associate" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Select &lt;strong&gt;app-vnet (RG1)&lt;/strong&gt; and then the &lt;strong&gt;Backend subnet&lt;/strong&gt;. Select &lt;strong&gt;OK&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaookghnbrnxbptrdhgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaookghnbrnxbptrdhgs.png" alt="Associate app-vnet/backend" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo8p9a6xv3opcqa45gqwv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo8p9a6xv3opcqa45gqwv.png" alt="Associated app-vnet nsg with backends" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Network Security Group rules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An NSG use security rules to filter inbound and outbound network traffic.&lt;/p&gt;

&lt;p&gt;1.In the search box at the top of the portal, enter &lt;strong&gt;Network security groups&lt;/strong&gt;. Select Network security groups in the search results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn741fin44j3yyhxbhfmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn741fin44j3yyhxbhfmz.png" alt="Network security group" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;app-vnet-nsg&lt;/strong&gt; from the list of network security groups.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fak2jvk29qawe4hrxxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fak2jvk29qawe4hrxxt.png" alt="App-vnet-nsg" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.In the &lt;strong&gt;Settings&lt;/strong&gt; blade, select &lt;strong&gt;Inbound security rules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy0fu3futvzepbs4vm2t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy0fu3futvzepbs4vm2t.png" alt="Inbound security rules" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;+ Add&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85tk405f88pxsub3ykzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85tk405f88pxsub3ykzg.png" alt="+Add" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Configure an inbound security rule and &lt;strong&gt;Add&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrthi89ieecky2vrdox7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrthi89ieecky2vrdox7.png" alt="Configure inbound security rule" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchqh8dxuwclcxtk0lhza.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchqh8dxuwclcxtk0lhza.png" alt="Cont. configure inbound security rule" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>cloud</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>How to Create a virtual network in Azure.</title>
      <dc:creator>EMMANUEL</dc:creator>
      <pubDate>Fri, 05 Sep 2025 01:39:29 +0000</pubDate>
      <link>https://dev.to/onyemuche/how-to-create-a-virtual-network-in-azure-55fh</link>
      <guid>https://dev.to/onyemuche/how-to-create-a-virtual-network-in-azure-55fh</guid>
      <description>&lt;p&gt;&lt;strong&gt;A Virtual Network&lt;/strong&gt; (VNet) is a logically isolated network(a network segment intentionally separated from other networks, including the public internet, to improve security and performance by containing threats and controlling traffic flow)in the cloud that lets you securely connect and manage your resources, just like a traditional on-premises network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Virtual Network&lt;/strong&gt; provides the fundamental building block for your private network in Azure. This service enables Azure resources like virtual machines (VMs) to securely communicate with each other, the internet, and on-premises networks. Virtual networks deliver the scale, availability, and isolation benefits of Azure infrastructure while maintaining the familiar networking concepts you use in traditional datacenters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ucxn8yiqn3wy9yrk9uc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ucxn8yiqn3wy9yrk9uc.png" alt="Virtual network" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article, lets create two virtual networks &lt;strong&gt;app-vnet&lt;/strong&gt; and &lt;strong&gt;hub-vnet&lt;/strong&gt; that simulates a hub and spoke network architecture. The &lt;strong&gt;app-vnet&lt;/strong&gt; will host the application. This virtual network requires &lt;strong&gt;two subnets&lt;/strong&gt;. The &lt;strong&gt;frontend subnet&lt;/strong&gt; will host the web servers. The &lt;strong&gt;backend subnet&lt;/strong&gt; will host the database servers. The &lt;strong&gt;hub-vnet&lt;/strong&gt; only requires a subnet for the firewall. The two virtual networks must be able to communicate with each other securely and privately through virtual network &lt;strong&gt;peering&lt;/strong&gt;. Both virtual networks should be in the same region.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cc5lmw3hrn26e2cw4u0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cc5lmw3hrn26e2cw4u0.png" alt="Architecture diagram" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Microsoft provides multiple ways to create Azure Virtual Networks. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using the Azure Portal&lt;/li&gt;
&lt;li&gt;Using Azure PowerShell&lt;/li&gt;
&lt;li&gt;Using the Azure CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tutorial covers using the Azure portal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create hub and spoke virtual networks and subnets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.Login to your Azure portal. &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fervik9j58jwmz4pw7brw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fervik9j58jwmz4pw7brw.png" alt="Azure Login" width="790" height="769"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the search Resources, search for &lt;strong&gt;virtual network&lt;/strong&gt;,click enter and select the grayed out virtual machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjl2pwlmihj0dlf9i3bp9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjl2pwlmihj0dlf9i3bp9.png" alt="Azure search Resource" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Select &lt;strong&gt;+ Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foprpcf0baqdxe05g3xh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foprpcf0baqdxe05g3xh8.png" alt="+ Create virtual network" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Complete the configuration of the &lt;strong&gt;app-vnet&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource group            &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Virtual network name          &lt;strong&gt;app-vnet&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region                    &lt;strong&gt;East US&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fso6uo3wkcxm6f0pzz5q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fso6uo3wkcxm6f0pzz5q1.png" alt="Configuration of app vnet" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Still on the configuration of the &lt;strong&gt;app vnet&lt;/strong&gt;, This virtual network requires two subnets, &lt;strong&gt;frontend&lt;/strong&gt; and &lt;strong&gt;backend&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IPv4 address space(vnet IP address)            &lt;strong&gt;10.1.0.0/16&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqi4cjw6j4sjdgxltqfy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqi4cjw6j4sjdgxltqfy.png" alt="Virtual network IP address" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subnet name                    &lt;strong&gt;frontend&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Subnet address range           &lt;strong&gt;10.1.0.0/24&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pr9pd4d9qt19h6ybvys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pr9pd4d9qt19h6ybvys.png" alt="Frontend subnet" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subnet name                    &lt;strong&gt;backend&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Subnet address range           &lt;strong&gt;10.1.1.0/24&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6pjuhbp5s312rzdw0ug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6pjuhbp5s312rzdw0ug.png" alt="Backend subnet" width="800" height="364"&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;6.Leave all other settings as their defaults. When finished select “&lt;strong&gt;Review + create&lt;/strong&gt;  and wait for the validation to pass  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fethfufrij8bmj13yb0hf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fethfufrij8bmj13yb0hf.png" alt="Review + create" width="800" height="366"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;Create&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0c4b07qf4iz9zeh38qzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0c4b07qf4iz9zeh38qzz.png" alt="Create" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create the Hub-vnet virtual network configuration. This virtual network has the firewall subnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.In your Azure portal, , search for &lt;strong&gt;virtual network&lt;/strong&gt; and select the grayed virtual nerwork.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjpxpj69cjxtj1xxhptl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjpxpj69cjxtj1xxhptl.png" alt="virtual network" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Select + Create&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r376kquumc146cxxnor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r376kquumc146cxxnor.png" alt="+ Create" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Configure the &lt;strong&gt;Hub-vnet&lt;/strong&gt; virtual network. This virtual network has firewall subnet .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource group               &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name                             &lt;strong&gt;hub-vnet&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region                       &lt;strong&gt;East US&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ik9yezfs0lmdiiyltnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ik9yezfs0lmdiiyltnn.png" alt="Hub vnet" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IPv4 address space         &lt;strong&gt;10.0.0.0/16&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhokzwji89qgfpiig1lmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhokzwji89qgfpiig1lmu.png" alt="IPv4 address space" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subnet name                &lt;strong&gt;AzureFirewallSubnet&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Subnet address range       &lt;strong&gt;10.0.0.0/26&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fri8qtbeeh725ywuc0ahg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fri8qtbeeh725ywuc0ahg.png" alt="AzurefirewallSubnet" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Review + Create&lt;/strong&gt;.After validation is passed select &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx6vg8w1cygphrj97m3og.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx6vg8w1cygphrj97m3og.png" alt="Review + Create" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Deployment&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhi78i5jekias26hrbuct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhi78i5jekias26hrbuct.png" alt="Create" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Once the deployments are complete, search for and select your ‘&lt;strong&gt;virtual networks&lt;/strong&gt;`&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnf856m5v2c2626dqt2dc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnf856m5v2c2626dqt2dc.png" alt="Virtual network" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Verify your virtual networks and subnets were deployed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjpy45pt3uar1fc6zbsk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjpy45pt3uar1fc6zbsk.png" alt="Virtual network" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App-vnet Subnets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo8z5u7mksmbv9p8lng4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo8z5u7mksmbv9p8lng4s.png" alt="Frontend and backend" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hub-vnet firewall subnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxzh8b6v94naw4aal8sq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxzh8b6v94naw4aal8sq.png" alt="Firewall subnet" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure a peer relationship between the virtual networks&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Virtual network peering&lt;/strong&gt; enables you to seamlessly connect two or more Virtual Networks in Azure.&lt;/p&gt;

&lt;p&gt;1.Search for and select the &lt;strong&gt;app-vnet&lt;/strong&gt; virtual network.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsy830bge4e4egqxrwk3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsy830bge4e4egqxrwk3z.png" alt="App-vnet " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the &lt;strong&gt;Settings&lt;/strong&gt; blade, select &lt;strong&gt;Peerings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyukk5pcyo6l6lrn172yw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyukk5pcyo6l6lrn172yw.png" alt="Peering" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Select &lt;strong&gt;+ Add&lt;/strong&gt; a peering between the two virtual networks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyfpnonh1amw5gewhl3km.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyfpnonh1amw5gewhl3km.png" alt="+Add" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Configure a peer relationship between the virtual networks&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remote peering link name                &lt;strong&gt;app-vnet-to-hub&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Virtual network                               &lt;strong&gt;hub-vnet&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frovjh7kk0setsptffa14.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frovjh7kk0setsptffa14.png" alt="Peering" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local virtual network peering link name     &lt;strong&gt;hub-to-app-vnet&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7u479w8jblhdm24gnptn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7u479w8jblhdm24gnptn.png" alt="Peering" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Leave all other settings as their defaults. Select &lt;strong&gt;“Add”&lt;/strong&gt; to create the virtual network peering.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7eixlae2z5qooml00mve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7eixlae2z5qooml00mve.png" alt="Add" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Once the deployment completes, verify the &lt;strong&gt;Peering status&lt;/strong&gt; is &lt;strong&gt;Connected&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flblzzjcvie0btjmf0e3v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flblzzjcvie0btjmf0e3v.png" alt="Peering status" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cloudcomputing</category>
      <category>microsoft</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
