<?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: Chinenye Genevieve Onyema</title>
    <description>The latest articles on DEV Community by Chinenye Genevieve Onyema (@gennyonyema).</description>
    <link>https://dev.to/gennyonyema</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2794421%2F577eece5-f219-4298-9e66-d662d2fa8d3d.png</url>
      <title>DEV Community: Chinenye Genevieve Onyema</title>
      <link>https://dev.to/gennyonyema</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gennyonyema"/>
    <language>en</language>
    <item>
      <title>From Zero to a Working EKS Pipeline: Terraform, Ansible, and GitLab CI/CD (and Everything That Broke Along the Way)</title>
      <dc:creator>Chinenye Genevieve Onyema</dc:creator>
      <pubDate>Thu, 16 Jul 2026 12:32:38 +0000</pubDate>
      <link>https://dev.to/gennyonyema/from-zero-to-a-working-eks-pipeline-terraform-ansible-and-gitlab-cicd-and-everything-that-4dbb</link>
      <guid>https://dev.to/gennyonyema/from-zero-to-a-working-eks-pipeline-terraform-ansible-and-gitlab-cicd-and-everything-that-4dbb</guid>
      <description>&lt;h1&gt;
  
  
  From Zero to a Working EKS Pipeline: Terraform, Ansible, and GitLab CI/CD (and Everything That Broke Along the Way)
&lt;/h1&gt;

&lt;p&gt;I recently built an end-to-end deployment pipeline on AWS EKS using Terraform for infrastructure, Ansible for configuration, and GitLab CI/CD to tie it all together. On paper, that sentence sounds clean. In practice, it took several rounds of "why is this failing" before it actually worked.&lt;/p&gt;

&lt;p&gt;This post is not a "here's how EKS works" tutorial. There are plenty of those. This is the version with the failures left in, the quota limits, the IAM permission walls, the pods that wouldn't schedule, and the resources that refused to die. If you're building something similar, I'm hoping this saves you a few hours of confused Googling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://gitlab.com/nenyeonyema/terraform-eks-ansible-cicd" rel="noopener noreferrer"&gt;gitlab.com/nenyeonyema/terraform-eks-ansible-cicd&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Was Building
&lt;/h2&gt;

&lt;p&gt;The goal was a full IaC-driven pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terraform&lt;/strong&gt; to provision the EKS cluster and supporting AWS infrastructure (VPC, node groups, IAM roles)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ansible&lt;/strong&gt; to handle configuration tasks on top of the provisioned infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitLab CI/CD&lt;/strong&gt; to automate the whole thing — plan, apply, configure, deploy — on every push&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple enough in theory. Four separate blockers said otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocker #1: Free Tier ASG Restrictions
&lt;/h2&gt;

&lt;p&gt;The first wall I hit was with the Auto Scaling Group for my EKS node group. AWS Free Tier limits how much compute you can provision, and my initial node group sizing quietly ran into those limits — the kind of failure that doesn't always throw an obvious, single-line error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; I resized the node group to stay within Free Tier boundaries and got explicit about instance types and desired/min/max capacity in Terraform, instead of leaving Auto Scaling to make assumptions I couldn't afford.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; If you're building on Free Tier, hardcode your capacity expectations early. Don't let the defaults surprise you later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocker #2: EKS Private Endpoint Access
&lt;/h2&gt;

&lt;p&gt;By default, EKS clusters can be configured with private-only API server endpoint access. That's great for security, less great when your CI/CD runner or local machine suddenly can't reach the cluster to run &lt;code&gt;kubectl&lt;/code&gt; commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; I had to explicitly configure endpoint access (public, private, or both, depending on where the access was coming from) in the Terraform EKS module configuration, rather than relying on defaults.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Decide your access model on purpose, not by accident. "It won't connect" is often a networking/endpoint configuration issue before it's anything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocker #3: The IAM Access Entry API
&lt;/h2&gt;

&lt;p&gt;This one cost the most time. Managing who (which IAM roles/users) can access the EKS cluster used to be handled through the &lt;code&gt;aws-auth&lt;/code&gt; ConfigMap. AWS has since introduced the &lt;strong&gt;Access Entry API&lt;/strong&gt; as the newer approach to cluster access management, and the two don't always play nicely if you're mixing old tutorials with new AWS provider versions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; I moved to using the Access Entry API directly through Terraform's EKS resources instead of manually patching &lt;code&gt;aws-auth&lt;/code&gt;, which meant re-reading provider documentation carefully since a lot of existing tutorials online still reference the older ConfigMap-based method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; When Terraform provider behavior doesn't match a tutorial, check the provider version and changelog before assuming you made a mistake. AWS and the community are actively moving away from &lt;code&gt;aws-auth&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocker #4: t3.micro Pod Limits
&lt;/h2&gt;

&lt;p&gt;Even after the cluster came up, deployments started failing to schedule. The problem wasn't compute, it was &lt;strong&gt;pod density&lt;/strong&gt;. Instance types like &lt;code&gt;t3.micro&lt;/code&gt; have a maximum number of pods they can run based on their networking capacity (ENI/IP limits), not just CPU/RAM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; I scaled from a single-node setup to multiple nodes, spreading pods across more machines instead of trying to force everything onto one small instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; "Not enough compute" and "not enough pod slots" look identical from the outside. If pods are stuck in &lt;code&gt;Pending&lt;/code&gt; and your node has CPU/memory to spare, check max-pods-per-node before you check anything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocker #5: Orphaned ELBs Blocking &lt;code&gt;terraform destroy&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The most frustrating one. After deploying a Kubernetes &lt;code&gt;LoadBalancer&lt;/code&gt; service, Kubernetes provisions an AWS ELB behind the scenes — but Terraform doesn't know about it, because it wasn't the one that created it. Result: running &lt;code&gt;terraform destroy&lt;/code&gt; would hang or fail, because AWS wouldn't let Terraform tear down the VPC/subnets while an orphaned ELB was still attached to them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Before running &lt;code&gt;terraform destroy&lt;/code&gt;, I had to manually delete any Kubernetes-created LoadBalancer services first (&lt;code&gt;kubectl delete svc &amp;lt;service-name&amp;gt;&lt;/code&gt;), which triggers AWS to clean up the associated ELB. Only then would &lt;code&gt;terraform destroy&lt;/code&gt; complete cleanly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Anything Kubernetes provisions on your behalf (LoadBalancers, EBS volumes via PVCs) lives outside Terraform's state. Always tear down Kubernetes-managed cloud resources &lt;em&gt;before&lt;/em&gt; tearing down the infrastructure underneath them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently Next Time
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pin provider versions early.&lt;/strong&gt; Several of these issues came from AWS's EKS access model evolving faster than the tutorials I was learning from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build a teardown checklist, not just a build checklist.&lt;/strong&gt; &lt;code&gt;terraform destroy&lt;/code&gt; needs its own runbook when Kubernetes is in the mix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Size for pod density, not just compute.&lt;/strong&gt; I'll check max-pods-per-instance-type before picking an instance size going forward.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;None of these blockers are exotic. They're the ordinary friction of running Terraform, Ansible, and Kubernetes together in a real AWS account — which is exactly why I think they're worth writing down. The polished tutorials rarely mention them, but if you're doing this hands-on, you will hit at least one of these five.&lt;/p&gt;

&lt;p&gt;If you're working through something similar, or you've hit a different version of one of these walls, I'd love to hear about it — drop a comment or reach out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://gitlab.com/nenyeonyema/terraform-eks-ansible-cicd" rel="noopener noreferrer"&gt;gitlab.com/nenyeonyema/terraform-eks-ansible-cicd&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>terraform</category>
    </item>
    <item>
      <title>How Linux Awakens: What Happens When You Press the Power Button.</title>
      <dc:creator>Chinenye Genevieve Onyema</dc:creator>
      <pubDate>Mon, 05 May 2025 22:08:19 +0000</pubDate>
      <link>https://dev.to/gennyonyema/how-linux-awakens-what-happens-when-you-press-the-power-button-2ap3</link>
      <guid>https://dev.to/gennyonyema/how-linux-awakens-what-happens-when-you-press-the-power-button-2ap3</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxghsh6561oglj6hltlf8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxghsh6561oglj6hltlf8.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Linux Boot Process from Power-On to Login.
&lt;/h2&gt;

&lt;p&gt;Have you ever wondered what happens when you click the power button on your Linux system? When you press the power button on your Linux system, a complex sequence of events occurs in milliseconds, bringing your system to life. Whether you're a Linux System Administrator, DevOps engineer, Site Reliability engineer, or a Linux enthusiast, understanding the Linux boot process helps you to troubleshoot issues, optimize performance, and appreciate the inner workings of your system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is a Simplified Overview of What Happens behind the scenes:&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1. BIOS/UEFI Initialization (Firmware Stage)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;br&gt;
When you press the power button, the motherboard's system firmware (BIOS for older systems and UEFI for newer ones) kicks in.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Key Tasks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performs a diagnostic test known as &lt;strong&gt;POST(Power-On Self Test)&lt;/strong&gt; to check hardware components such as RAM, CPU, storage devices, and peripherals.&lt;/li&gt;
&lt;li&gt;Detects and initializes boot devices(SSD, HDD, USB, etc)&lt;/li&gt;
&lt;li&gt;Once the hardware is verified, the firmware hands over control to the bootloader stored on the primary boot device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Important fact:&lt;/strong&gt; UEFI is replacing BIOS because it's faster, supports larger drivers (over 2TB), and has a graphical user interface.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. BOOTLOADER Execution
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;br&gt;
The firmware searches for the bootloader on the storage device and loads it into memory.&lt;br&gt;
The &lt;strong&gt;Bootloader&lt;/strong&gt; is a small program that loads the Linux kernel into memory. The most common Bootloader is GRUB(Grand Unified Bootloader).&lt;br&gt;
&lt;strong&gt;Key Tasks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GRUB presents a boot menu to select the OS/Kernel options or automatically load the default Linux kernel.&lt;/li&gt;
&lt;li&gt;Loads the selected Linux kernel and initramfs/initrd into memory.&lt;/li&gt;
&lt;li&gt;Passes control to the kernel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Initramfs/initrd:&lt;/strong&gt; A temporary filesystem used by the kernel to access necessary drivers before the real root filesystem is mounted.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. KERNEL Loading
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;br&gt;
The Linux Kernel is now in control of the system&lt;br&gt;
&lt;strong&gt;Key Tasks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hardware Detection: &lt;strong&gt;The Kernel&lt;/strong&gt; detects and initializes the hardware via built-in or loaded drivers(CPU, memory, I/O).&lt;/li&gt;
&lt;li&gt;Mounts the root file/system.&lt;/li&gt;
&lt;li&gt;Starts the first user space program, usually /sbin/init or systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Kernel also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manages memory&lt;/li&gt;
&lt;li&gt;Sets up process scheduling&lt;/li&gt;
&lt;li&gt;Initializes networking and system calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Init/Systemd Starts
&lt;/h3&gt;

&lt;p&gt;This is the first user-space process with process ID 1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;br&gt;
The Kernel starts the init process (traditionally, but in modern Linux distros, use systemd). It orchestrates the rest of the boot process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Tasks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads its initial configurations from &lt;code&gt;/etc/systemd&lt;/code&gt; and &lt;code&gt;/etc/initab&lt;/code&gt; in older systems.&lt;/li&gt;
&lt;li&gt;Mounts the remaining file system. (eg,&lt;code&gt;/home&lt;/code&gt;, &lt;code&gt;/boot&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Runs startup scripts/services to prepare the system, such as starting network services and setting up the graphical environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. User-space Login(TTY or GUI)
&lt;/h3&gt;

&lt;p&gt;Once all services are up, the system presents you with a login interface.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A TTY login prompt(text based) for servers or minimal systems.&lt;/li&gt;
&lt;li&gt;Graphical Login manager (like GDM, lightDM, SDDM) for desktop environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After a successful authentication, the login session starts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For TTY login a shell (eg, bash) is launched allowing a command-line interractions.&lt;/li&gt;
&lt;li&gt;For GUI a desktop environment or windows manager is started, providing a graphical interface for user-interactions. 
This process signifies the transition of kernel system services to user-level interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In essence, pressing the power button triggers a chain of hardware checks, loads the kernel, sets up the system service, and finally presents you with a usable desktop environment. Despite its complexity, this seamless process ensures your Linux system is ready almost instantly after you power it on.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unlocking The Power Of Linux: A Beginner's Guide to the Tech Giant's Favorite Operating System.</title>
      <dc:creator>Chinenye Genevieve Onyema</dc:creator>
      <pubDate>Fri, 25 Apr 2025 15:57:10 +0000</pubDate>
      <link>https://dev.to/gennyonyema/unlocking-the-power-of-linux-a-beginners-guide-to-the-tech-giants-favorite-operating-system-49ig</link>
      <guid>https://dev.to/gennyonyema/unlocking-the-power-of-linux-a-beginners-guide-to-the-tech-giants-favorite-operating-system-49ig</guid>
      <description>&lt;h1&gt;
  
  
  Introduction: What Is Linux and Why Does It Matter?
&lt;/h1&gt;

&lt;p&gt;In the past, most people used commercial Operating Systems like Windows or MacOS. These Systems are popular, but they come with some downsides, such as needing to pay for licenses, limitations on customization, and potential security issues.&lt;/p&gt;

&lt;p&gt;Now, picture an operating system(OS) that's completely free, allows you to change and adapt the source code to your computing needs. &lt;br&gt;
&lt;strong&gt;That's LINUX!&lt;/strong&gt; A powerful platform embraced by tech giants and enthusiasts alike. It was built by Linus Torvalds in 1991 to give people control, flexibility, and freedom.&lt;/p&gt;

&lt;p&gt;In this article, we'll explore the fundamentals of Linux, the different distributions(distros) available, how Linux is structured under the hood, how the package managers install software's and how its unique folder hierarchy makes it ideal for everything from smartphones to supercomputers. Let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Open Source Nature of Linux
&lt;/h2&gt;

&lt;p&gt;When we say Linux is open source, we mean:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Free to use:&lt;/strong&gt; This means anyone can download, install, and use it without paying for the license.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization:&lt;/strong&gt; Users can modify the source code, which means that if you want to change how your operating system works, you can do so without any legal issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Support:&lt;/strong&gt; Linux benefits from a large community that contributes to its development, ensuring it remains secure and up-to-date without the need for a costly license.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h2&gt;
  
  
  The Structure of Linux: A Well-Organized System.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why Structure Matters&lt;/strong&gt;&lt;br&gt;
Just like peeling an onion, layer by layer. Like a well-organized office, Linux has a clear structure that makes it easy to find and manage 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%2Fwf2c89jzgshknezsvro7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwf2c89jzgshknezsvro7.png" alt="Image description" width="251" height="201"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Here are the key components of the Linux Operating System:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧠&lt;strong&gt;The Kernel:&lt;/strong&gt; The Brain of the OS. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At the core of the Linux system lies the &lt;strong&gt;Kernel&lt;/strong&gt;, a program that connects your computer hardware to its software. Think of the Kernel as the traffic controller, directing communication between your hardware (CPU, memory, processes, and hard drives) and the software applications that you use.&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%2Ffddz1ypizng13pjjsvt5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffddz1ypizng13pjjsvt5.png" alt="Image description" width="313" height="161"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Why The Kernel?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without the Kernel, your application couldn't talk to your CPU, memory, or storage. The kernel distributes resources needed to perform a task. The Kernel schedules processes, manages memory and network interfaces, allocates file systems, and provides inter-process communication.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpzu5y3hpnra4o8ekewto.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpzu5y3hpnra4o8ekewto.png" alt="Image description" width="734" height="182"&gt;&lt;/a&gt;&lt;br&gt;
2.&lt;strong&gt;The Shell:&lt;/strong&gt; The Command-Line Interface&lt;/p&gt;

&lt;p&gt;The Shell sits right above the Kernel, It's what you interact with when you open the terminal. It interprets your commands(&lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cd&lt;/code&gt;, etc) and passes them to the Kernel for execution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c4oeiw2ohw3294sv4fp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c4oeiw2ohw3294sv4fp.png" alt="Image description" width="800" height="79"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Why Shell?&lt;/strong&gt;&lt;br&gt;
The Shell gives you direct control of the system, letting you automate, customize, and troubleshoot like a pro. The Shell acts as an interface between the user and the kernel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu996w5m78mbfxkss6on.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu996w5m78mbfxkss6on.jpeg" alt="Image description" width="300" height="168"&gt;&lt;/a&gt;&lt;br&gt;
3.&lt;strong&gt;System Libraries and Utilities:&lt;/strong&gt; Your System Toolkit&lt;/p&gt;

&lt;p&gt;Linux comes with hundreds of tiny programs(often called Utilities) that perform specific tasks, like managing files, monitoring processes, and configuring networks. These Libraries and Utilities are a collection of functions or pre-written code and tools that help software applications operate smoothly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why The Libraries and Utilities ?&lt;/strong&gt;&lt;br&gt;
By using these libraries, developers can save time and effort, as they don't need to write the same code repeatedly. The system libraries act as an interface between the system applications and the kernel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbn82mz81nefo450cfza.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbn82mz81nefo450cfza.png" alt="Image description" width="800" height="548"&gt;&lt;/a&gt;&lt;br&gt;
4.&lt;strong&gt;File System:&lt;/strong&gt; The Organized Foundation&lt;br&gt;
The Linux filesystem is organized in a tree-like structure. Every file, folder, and even hardware is treated as a file, with the root(/) directory at the top of the hierarchy. The organizational structure of the file system is crucial for easy navigation and file management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Key directories:&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%2F2othfzqs7ceeda9rogd8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2othfzqs7ceeda9rogd8.jpg" alt="Image description" width="602" height="623"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Why File Systems?&lt;/strong&gt;&lt;br&gt;
As a Linux administrator or root user, understanding the structure of the file system matters. It enables you to manage system files, configure settings, and troubleshoot issues efficiently. Knowing where everything is helps maintain system health and security.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Exploring Linux Distributions: Why Variety is Key.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is a Distribution?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Linux Distribution(distro) is a packaged version of the operating system that includes the kernel, libraries, utilities, and user interface. Think of it as a specific flavor of Linux tailored for different needs and preferences.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F019ld6h6u7bhzoc2pe7e.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F019ld6h6u7bhzoc2pe7e.jpeg" alt="Image description" width="280" height="180"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Popular Distributions:&lt;/strong&gt; Choose Your Flavor&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu: Perfect for beginners and the most popular distros, known for its user-friendly interface. Built from the Debian family.&lt;/li&gt;
&lt;li&gt;CentOS: A favorite in the world of servers, praised for its stability and security. Belongs to the family of Red Hat.&lt;/li&gt;
&lt;li&gt;Debian: One of the oldest and most popular distros, known for its commitment to free software, stability, and reliability.&lt;/li&gt;
&lt;li&gt;Red Hat Enterprise Linux (RHEL): Widely used by enterprises and businesses for its robust and reliable operating system. Known for its stability, security, and performance.&lt;/li&gt;
&lt;li&gt;Fedora: Sponsored by Red Hat, ideal for developers who want the latest software features in a secure and stable environment.&lt;/li&gt;
&lt;li&gt;Arch Linux: Ideal for advanced users who want complete control over their system and want to build from scratch. Offers the latest software updates.&lt;/li&gt;
&lt;li&gt;Kali Linux: Built on Debian with high security, designed for network analysts and cybersecurity experts.&lt;/li&gt;
&lt;li&gt;OpenSUSE: It has two kinds of releases. Perfect for users who want a reliable system with advanced configuration tools, along with the option to choose between a rolling release(Tumbleweed) and a stable release(Leap).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Having various distributions allows users to pick the one that best suits their needs, whether for everyday use, software development, or server management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Package Managers: Simplifying Software Installation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What are Package Managers?&lt;/strong&gt;&lt;br&gt;
A Package Manager is a tool that makes installing and updating software as easy as clicking a button. It automatically handles downloading, installing, configuring software packages, updating, and removing software.&lt;br&gt;
&lt;strong&gt;Popular Package Managers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;apt&lt;/code&gt;(APT: Advanced Package Tool): Found in Debian and Ubuntu, it lets you install apps with simple commands like &lt;code&gt;apt install &amp;lt;package-name&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;yum&lt;/code&gt; and &lt;code&gt;dnf&lt;/code&gt;: Used for RHEL, CentOS, and Fedora. These command tools facilitate managing software on RPM-based systems.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pacman&lt;/code&gt;: The go-to package manager for Arch Linux users, known for its simplicity and speed.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;zypper&lt;/code&gt;: The package manager for OpenSUSE, it's easy to use and consumes fewer resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why Use Package Managers&lt;/strong&gt;&lt;br&gt;
Think of a package manager like an application store. Instead of searching various websites to find software, a package manager lets you search, install, and update applications from a single place. This saves time and minimizes errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Linux is not just an operating system; it's a powerful, community-driven tool that offers flexibility and security. Whether you're a user, developer, or administrator, understanding Linux fundamentals, structure, distributions, package managers, and folder organization will empower you to make the most out of your computing experience. So, why not try out a Linux distribution today? Join the community and explore the endless possibilities of Linux.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Setup A Simple Nginx Web Server on an Ubuntu GCP Virtual Machine.</title>
      <dc:creator>Chinenye Genevieve Onyema</dc:creator>
      <pubDate>Fri, 31 Jan 2025 22:12:50 +0000</pubDate>
      <link>https://dev.to/gennyonyema/hng-stage-0-how-to-setup-a-simple-nginx-web-server-on-an-ubuntu-gcp-virtual-machine-28gi</link>
      <guid>https://dev.to/gennyonyema/hng-stage-0-how-to-setup-a-simple-nginx-web-server-on-an-ubuntu-gcp-virtual-machine-28gi</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4i57rngnjaatryde5f2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4i57rngnjaatryde5f2i.png" alt="Nginx Web Server on Ubuntu GCP Virtual Machine" width="439" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;I have always wanted to share my learning experiences and knowledge from my tasks and projects. In this article, as part of the HNG Internship program, I will provide a step-by-step guide on configuring a simple Nginx web server on a Google Compute Engine Ubuntu virtual machine. &lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://console.cloud.google.com/" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt; account, if you don't have an account, &lt;a href="https://console.cloud.google.com/" rel="noopener noreferrer"&gt;Sign up&lt;/a&gt;. GCP is giving free $300 credits to new accounts.&lt;/li&gt;
&lt;li&gt;Basic experience with Linux CLI.&lt;/li&gt;
&lt;li&gt;Sign in to your Google Cloud console.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Steps on how to set up an Ubuntu Virtual Machine.
&lt;/h1&gt;

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

&lt;ul&gt;
&lt;li&gt;Click on the three bars by the left side of the console.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclbf7henwq0ynmirpev0.png" alt="Google Cloud Console" width="800" height="72"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click on Compute Engine and then clickon VM Instances
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyy8n3tuqqf87c1tdh54.png" alt="Virtual Machines" width="429" height="501"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click on "Create" Instance.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bqji7gm918telv3g980.png" alt="Create Instance" width="800" height="105"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4:  Machine Configuration settings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give the instance any name of your choice.&lt;/li&gt;
&lt;li&gt;Choose the region and zone nearest to you for your instance.&lt;/li&gt;
&lt;li&gt;Choose the default General Purpose E2 machine for the task. &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%2Fn966tdltcffc7zrr65vc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn966tdltcffc7zrr65vc.png" alt="Machine Configuration" width="800" height="523"&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%2Fujci0t43uf1p7134aert.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujci0t43uf1p7134aert.png" alt="Machine types" width="706" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Operating System and Storage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continue the instance setup by clicking on OS and Storage.&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%2F2l7lyw1zef9gv3grt0dc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l7lyw1zef9gv3grt0dc.png" alt="OS and Storage" width="211" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click "Change" in the Operating System configuration.&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%2Fbb3v0gs4no5yfy3kx83g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbb3v0gs4no5yfy3kx83g.png" alt="Operating system and Storage" width="705" height="545"&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%2Fwq05hxrmdz1d1h7c81rz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwq05hxrmdz1d1h7c81rz.png" alt="Ubuntu Image" width="597" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the OS image to Ubuntu and keep the remaining settings as default.&lt;/li&gt;
&lt;li&gt;Click "Select".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Networking&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Choose Networking&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%2Frmjg2awnary274plqehk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmjg2awnary274plqehk.png" alt="Networking" width="215" height="318"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the firewalls, tick to allow HTTP and HTTPS traffic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on "create" instance&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%2Fq8y5frpkvyhyp8qp1rls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8y5frpkvyhyp8qp1rls.png" alt="Open firewalls and create instance" width="800" height="502"&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%2F5mwjpu1otkfm401s1wzs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mwjpu1otkfm401s1wzs.png" alt="Running Virtual Instance" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Congratulations!&lt;/strong&gt; You have successfully launched a Google Cloud Virtual Instance.&lt;/p&gt;

&lt;h2&gt;
  
  
  To SSH Into The Nginx Virtual Instance.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On the instance dashboard, Tick the instance and click on "SSH"
A new window pops up.&lt;/li&gt;
&lt;li&gt;Click "Authorize" to connect to the instance.
And wait for SSH to connect to the instance successfully.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good Job! You are now connected to your Instance Command Line interface.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  How to Configure Nginx on Ubuntu Virtual Instance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Run the command below to Update and Upgrade the Instance.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo apt update &amp;amp; sudo apt upgrade -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Install Nginx&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo apt install nginx -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Start and Enable Nginx&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start nginx
sudo systemctl enable nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Check if Nginx is actively running successfully&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo systemctl status nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Back up the Default Web Page&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /var/www/html
sudo cp index.nginx-debian.html index.nginx-debian.html.bk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 6: Create a new file named index.html&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;touch index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Move the content of the default page to the new file&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo mv index.nginx-debian.html index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Open the index.html file&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo vi index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9: Modify the content of index.html file to the code below&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To edit the file, press the letter "i"
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;HNG Stage 0 Nginx Web Server&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h4&amp;gt;Welcome to DevOps Stage 0 - [Your Name]/[SlackName] &amp;lt;/h4&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;After editing, press the escape key, colon, letters w and q. That is, ":wq"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 10: Restart Nginx&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo systemctl restart nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10: Copy the External Ip address and paste in your browser&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;34.89.121.56&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%2F5es0qtri9drpozjymr7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5es0qtri9drpozjymr7h.png" alt="Image description" width="800" height="355"&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%2Fscuwz6cg6bh5g5dz7ejw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscuwz6cg6bh5g5dz7ejw.png" alt="Nginx web server" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Possible Challenges
&lt;/h2&gt;

&lt;p&gt;One potential challenge you may face when accessing your webpage is related to networking. Ensure that the firewall is configured to allow inbound HTTP traffic, as the NGINX server listens on port 80 by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  How This Task Contributed to My Learning
&lt;/h2&gt;

&lt;p&gt;As someone with extensive experience using AWS Cloud, I wanted to enhance my multi-cloud skills by leveraging Google Cloud as my development environment for this task. Previously, I primarily accessed virtual instances by clicking the SSH option on the Google Cloud Console. However, during this task, I explored alternative methods of connecting to a GCP instance using PuTTY, Git Bash, and other SSH tools.&lt;/p&gt;

&lt;p&gt;This was particularly exciting for me because, on AWS, I have always accessed EC2 instances by downloading and using the private key. Through this experience, I learned how to generate private and public key pairs using PuTTY, add the public key to the GCP instance's SSH configuration, and securely authenticate my connection.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In a forthcoming article, I will share a step-by-step guide on connecting to a GCP instance using third-party SSH tools and also generating keys through the command line.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hire your skilled &lt;a href="https://hng.tech/hire/devops-engineers" rel="noopener noreferrer"&gt;DevOps Engineers&lt;/a&gt; and &lt;a href="https://hng.tech/hire/cloud-engineers" rel="noopener noreferrer"&gt;Cloud Engineers&lt;/a&gt; here.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>googlecloud</category>
      <category>hng</category>
      <category>nginx</category>
    </item>
  </channel>
</rss>
