<?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: Inioluwa Eunice Atanda</title>
    <description>The latest articles on DEV Community by Inioluwa Eunice Atanda (@eunini).</description>
    <link>https://dev.to/eunini</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%2F1061822%2F5a655eb3-d1f4-49d9-b204-45cd563c76cc.jpg</url>
      <title>DEV Community: Inioluwa Eunice Atanda</title>
      <link>https://dev.to/eunini</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eunini"/>
    <language>en</language>
    <item>
      <title>Automating Security Updates for Prometheus LTS: My First CNCF Contribution</title>
      <dc:creator>Inioluwa Eunice Atanda</dc:creator>
      <pubDate>Thu, 22 Jan 2026 23:17:45 +0000</pubDate>
      <link>https://dev.to/eunini/automating-security-updates-for-prometheus-lts-my-first-cncf-contribution-gh7</link>
      <guid>https://dev.to/eunini/automating-security-updates-for-prometheus-lts-my-first-cncf-contribution-gh7</guid>
      <description>&lt;p&gt;I’ve always loved DevOps, but contributing to an actual CNCF project? That felt like standi&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%2Fvuspz4pc7uw0wfa8cf1d.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%2Fvuspz4pc7uw0wfa8cf1d.jpg" alt=" " width="384" height="512"&gt;&lt;/a&gt;ng at the edge of a pool about to dive in without a previous experience. Yet here I am, sharing how I dove in, learned about LTS, Dependabot, and even survived my first PR without breaking anything or my confidence(phew).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Learning About LTS&lt;/strong&gt;&lt;br&gt;
First, let’s talk &lt;a href="https://prometheus.io/docs/introduction/release-cycle/" rel="noopener noreferrer"&gt;Long-Term Support (LTS)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In Prometheus, LTS branches are like the “golden retrievers” of releases: reliable, stable, and supported for a long time (over a year!). They only get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bug fixes &lt;/li&gt;
&lt;li&gt;Security patches &lt;/li&gt;
&lt;li&gt;Documentation updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…everything else? Nope. Experimental features or new fancy stuff are off-limits. The reasoning is simple: companies rely on these branches for monitoring critical systems. They don’t want surprises that could cause sudden breakdown to their large systems.&lt;/p&gt;

&lt;p&gt;I focused on two active LTS branches: release-2.53 and release-3.5. Think of them as my training wheels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Why Security Updates Matter&lt;/strong&gt;&lt;br&gt;
Security updates aren’t glamorous, but they’re life-saving. Imagine a dependency getting hacked while you’re havaing breakfast with the ex you've been trying to get back with, it’s the worst kind of surprise.&lt;/p&gt;

&lt;p&gt;GitHub has a neat helper called &lt;em&gt;&lt;strong&gt;Dependabot&lt;/strong&gt;&lt;/em&gt; that automatically opens PRs for vulnerable dependencies. My job? Configure it safely for LTS. &lt;br&gt;
Key rules I followed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update only Go modules (go.mod) and GitHub Actions&lt;/li&gt;
&lt;li&gt;Apply updates only to LTS branches&lt;/li&gt;
&lt;li&gt;Make it security-only, no random feature upgrades&lt;/li&gt;
&lt;li&gt;Limit PRs to avoid spam: max 2 for Go, 1 for Actions per branch&lt;/li&gt;
&lt;li&gt;Schedule weekly checks, because daily emails are a nightmare&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 3: The Contribution Workflow&lt;/strong&gt;&lt;br&gt;
Here’s how my first PR went down, step by step:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Forked the Prometheus repo (because direct access is scary)&lt;/li&gt;
&lt;li&gt;Cloned my fork locally&lt;/li&gt;
&lt;li&gt;Created a branch named ci/dependabot-lts-security (naming matters!)&lt;/li&gt;
&lt;li&gt;Added .github/dependabot.yml with the config I just described&lt;/li&gt;
&lt;li&gt;Committed my changes with a DCO sign-off (promised I wrote this myself, pinky swear)&lt;/li&gt;
&lt;li&gt;Pushed the branch and opened a PR&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 4: What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the rules first. LTS policies exist for a reason, don’t ignore them.&lt;/li&gt;
&lt;li&gt;DCO matters. Sign-off your commits; it’s a CNCF thing, not a bureaucratic nightmare.&lt;/li&gt;
&lt;li&gt;Automation is powerful. A single Dependabot config can save maintainers hours of toil.&lt;/li&gt;
&lt;li&gt;Initiative is welcome. Maintainers expect new contributors to take the first step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly, nothing felt cooler than seeing that PR button: “Create Pull Request.” A mix of pride, terror, and adrenaline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: The Dependabot Config (Our Tiny Hero)&lt;/strong&gt;&lt;br&gt;
Here’s what I added(remember, no don't leave a blankspace or a line empty):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: 2

updates:
  - package-ecosystem: "gomod"
    directory: "/"
    target-branch: "release-2.53"
    schedule:
      interval: "weekly"
    security-updates-only: true
    open-pull-requests-limit: 2

  - package-ecosystem: "gomod"
    directory: "/"
    target-branch: "release-3.5"
    schedule:
      interval: "weekly"
    security-updates-only: true
    open-pull-requests-limit: 2

  - package-ecosystem: "github-actions"
    directory: "/"
    target-branch: "release-2.53"
    schedule:
      interval: "weekly"
    security-updates-only: true
    open-pull-requests-limit: 1

  - package-ecosystem: "github-actions"
    directory: "/"
    target-branch: "release-3.5"
    schedule:
      interval: "weekly"
    security-updates-only: true
    open-pull-requests-limit: 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devops</category>
      <category>cloudnative</category>
      <category>opensource</category>
      <category>prometheus</category>
    </item>
    <item>
      <title>Real-Life Scenario: DevOps Engineer in an IT Company</title>
      <dc:creator>Inioluwa Eunice Atanda</dc:creator>
      <pubDate>Fri, 21 Mar 2025 22:58:49 +0000</pubDate>
      <link>https://dev.to/eunini/working-with-aws-vm-file-manager-and-users-creation-1akc</link>
      <guid>https://dev.to/eunini/working-with-aws-vm-file-manager-and-users-creation-1akc</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Launch &amp;amp; Connect to an EC2 Instance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Scenario:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
You have just joined TechFlow Solutions as a DevOps Engineer. Your manager asks you to set up a secure Linux server on AWS to manage company files and ensure proper access control for different departments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;1. Launch an AWS EC2 Linux VM&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your company follows AWS for cloud infrastructure, and they need a secure environment to store and manage data.&lt;/p&gt;

&lt;p&gt;You log into the AWS Management Console, navigate to EC2, and launch an Ubuntu instance.&lt;/p&gt;

&lt;p&gt;Since the company wants to keep costs low, you select a t2.micro instance (free tier eligible).&lt;/p&gt;

&lt;p&gt;To allow remote access, you configure the Security Group to permit SSH (port 22) only for authorized users.&lt;/p&gt;

&lt;p&gt;You create a Key Pair (techflow-key.pem), download it, and keep it safe.&lt;/p&gt;

&lt;p&gt;Once everything is set, you launch the instance and wait for it to be ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;2. Connect to EC2 via SSH&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your team needs you to connect to the server and begin setup.&lt;/p&gt;

&lt;p&gt;You obtain the public IP of the instance from the AWS Console and use SSH to connect:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh -i techflow-key.pem ubuntu@your-ec2-public-ip&lt;/code&gt;&lt;br&gt;
If the key permissions are too open, you fix them with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chmod 400 techflow-key.pem&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Step 2: Create Users &amp;amp; Groups&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
_Scenario:&lt;br&gt;
_Your HR and IT departments want you to create user accounts for employees and ensure each department has proper access.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Groups for Each Department&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The IT manager gives you a list of departments that need system access.&lt;/p&gt;

&lt;p&gt;You create a group for each department:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo groupadd sysadmin
sudo groupadd legal
sudo groupadd hr
sudo groupadd sales
sudo groupadd strategy
sudo groupadd executives
sudo groupadd it_interns
sudo groupadd finance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Create Users &amp;amp; Assign Them to Groups&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The HR team provides a list of employees. You create users for them and add them to their respective groups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo useradd -m -s /bin/bash -G sysadmin andrew
sudo useradd -m -s /bin/bash -G legal julius
sudo useradd -m -s /bin/bash -G hr chizi
sudo useradd -m -s /bin/bash -G sales jeniffer
sudo useradd -m -s /bin/bash -G strategy adeola
sudo useradd -m -s /bin/bash -G executives bach
sudo useradd -m -s /bin/bash -G it_interns gozie
sudo useradd -m -s /bin/bash -G finance ogochukwu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;3. Set Passwords for Users&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Each employee needs a password for login. You set their passwords:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo passwd andrew
sudo passwd julius
sudo passwd chizi
sudo passwd jeniffer
sudo passwd adeola
sudo passwd bach
sudo passwd gozie
sudo passwd ogochukwu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Employees will be prompted to enter a secure password upon their first login.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Step 3: Create Company Directories &amp;amp; Set Permissions&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Scenario:&lt;/em&gt;&lt;br&gt;
The company’s data storage policy requires that each department has a separate directory where only authorized employees can access files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Department-Specific Directories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You create folders for different company data storage needs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mkdir -p /company_data/finance_budgets
sudo mkdir -p /company_data/contract_documents
sudo mkdir -p /company_data/business_projections
sudo mkdir -p /company_data/business_models
sudo mkdir -p /company_data/employee_data
sudo mkdir -p /company_data/vision_mission
sudo mkdir -p /company_data/server_config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;Assign Ownership to Groups &amp;amp; Set Permissions&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The IT policy states that only relevant departments should access their data. You set the correct permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo chown :finance /company_data/finance_budgets
sudo chmod 770 /company_data/finance_budgets

sudo chown :legal /company_data/contract_documents
sudo chmod 770 /company_data/contract_documents

sudo chown :strategy /company_data/business_projections
sudo chmod 770 /company_data/business_projections

sudo chown :strategy /company_data/business_models
sudo chmod 770 /company_data/business_models

sudo chown :hr /company_data/employee_data
sudo chmod 770 /company_data/employee_data

sudo chown :executives /company_data/vision_mission
sudo chmod 770 /company_data/vision_mission

sudo chown :sysadmin /company_data/server_config
sudo chmod 700 /company_data/server_config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;**_&lt;/p&gt;

&lt;h2&gt;
  
  
  Explanation:
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;**&lt;br&gt;
**_chown :groupname directory_path&lt;/em&gt;** → Assigns ownership to a specific department.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;chmod(change modification) 770&lt;/em&gt;&lt;/strong&gt; → Full access to the department, no access for others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;chmod 700&lt;/em&gt;&lt;/strong&gt; → Restricted access (for sysadmins only).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Step 4: Verify the Setup&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Scenario:&lt;/em&gt;&lt;br&gt;
Before reporting back to your manager, you need to ensure everything is set up correctly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check User List&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You confirm that all employees have been added:&lt;br&gt;
&lt;code&gt;cat /etc/passwd | grep -E 'andrew|julius|chizi|jeniffer|adeola|bach|gozie|ogochukwu'&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check Group Memberships&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You verify that each user belongs to the correct department:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;groups andrew
groups julius
groups chizi
groups jeniffer
groups adeola
groups bach
groups gozie
groups ogochukwu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Verify Directory Permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You check that department directories have the correct ownership and permissions:&lt;br&gt;
&lt;code&gt;ls -ld /company_data/*&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;All users and groups are set up, and permissions are properly configured!&lt;/p&gt;

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

&lt;p&gt;As the DevOps Engineer, you successfully:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up a secure AWS Linux server.&lt;/li&gt;
&lt;li&gt; Created users and assigned them to departments.&lt;/li&gt;
&lt;li&gt; Implemented access control to protect company data.&lt;/li&gt;
&lt;li&gt; Verified everything works as expected.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You have successfully created a properly structured group and folder for your IT company as a devops engineer.&lt;/p&gt;

</description>
      <category>devops</category>
    </item>
    <item>
      <title>DEPLOYING A STATIC WEB PAGE ON NGINX WEB SERVER</title>
      <dc:creator>Inioluwa Eunice Atanda</dc:creator>
      <pubDate>Tue, 11 Mar 2025 13:25:02 +0000</pubDate>
      <link>https://dev.to/eunini/deploying-a-static-web-page-on-nginx-web-server-10g2</link>
      <guid>https://dev.to/eunini/deploying-a-static-web-page-on-nginx-web-server-10g2</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;Beginner's Guide: Deploying a Landing Page on Nginx (Azure &amp;amp; AWS EC2)&lt;/strong&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This guide will walk you through deploying a simple landing page (HTML, CSS, JavaScript) on &lt;strong&gt;Nginx&lt;/strong&gt;, using both &lt;strong&gt;Azure and AWS EC2&lt;/strong&gt;. The webpage will be fetched from a &lt;strong&gt;GitHub repository&lt;/strong&gt;. Additionally, we will address common SSH key access issues on &lt;strong&gt;Windows for AWS&lt;/strong&gt; users and their solutions.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;2. What is Nginx and Why Use It?&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is Nginx?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Nginx (pronounced "Engine-X") is a &lt;strong&gt;high-performance web server&lt;/strong&gt; commonly used for hosting websites and acting as a &lt;strong&gt;reverse proxy&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why Use Nginx?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Fast &amp;amp; Efficient&lt;/strong&gt; – Handles multiple connections efficiently.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Serves Static Files&lt;/strong&gt; – Ideal for hosting HTML, CSS, JavaScript pages.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Reverse Proxy &amp;amp; Load Balancing&lt;/strong&gt; – Used for forwarding requests and balancing traffic.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Security &amp;amp; Scalability&lt;/strong&gt; – Works well with SSL and large-scale applications.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3. Setting Up a Virtual Machine (VM)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We will set up a &lt;strong&gt;Ubuntu 20.04 LTS VM&lt;/strong&gt; on both Azure and AWS EC2.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;🔹 Option 1: Create an Azure Virtual Machine&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Log in to Azure Portal&lt;/strong&gt; → &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Go to "Virtual Machines" → Click "Create New"&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose Configuration:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OS&lt;/strong&gt;: Ubuntu 20.04 LTS (Recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Size&lt;/strong&gt;: B1s (Cheapest for basic usage)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt;: SSH Key (Download &amp;amp; Save the key)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allow HTTP &amp;amp; SSH Ports&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;Networking → Add inbound rule&lt;/strong&gt; for:

&lt;ul&gt;
&lt;li&gt;SSH: &lt;strong&gt;Port 22&lt;/strong&gt; (For remote access)&lt;/li&gt;
&lt;li&gt;HTTP: &lt;strong&gt;Port 80&lt;/strong&gt; (For web traffic)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Click "Review + Create" → Wait for Deployment to Complete&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;🔹 Option 2: Create an AWS EC2 Instance&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Log in to AWS Console&lt;/strong&gt; → &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;https://aws.amazon.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Go to EC2 Dashboard → Launch Instance&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose Configuration:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OS&lt;/strong&gt;: Ubuntu 20.04 LTS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instance Type&lt;/strong&gt;: t2.micro (Free Tier)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Pair&lt;/strong&gt;: Create or use an existing key (Save &lt;code&gt;.pem&lt;/code&gt; file)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure Security Group:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Allow &lt;strong&gt;SSH (Port 22)&lt;/strong&gt; and &lt;strong&gt;HTTP (Port 80)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Click "Launch" → Wait for Instance to Start&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. Creating &amp;amp; Uploading Your Landing Page to GitHub&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Create a New Repository on GitHub&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, log in, and click &lt;strong&gt;New Repository&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter a &lt;strong&gt;repository name&lt;/strong&gt; (e.g., &lt;code&gt;landing-page&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Public&lt;/strong&gt; or &lt;strong&gt;Private&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Repository&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Push Your Code to GitHub&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In your local project folder, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;path/to/your/project

git init
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial commit"&lt;/span&gt;
git branch &lt;span class="nt"&gt;-M&lt;/span&gt; main
git remote add origin YOUR_GITHUB_REPO_URL
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;5. Connecting to Your Server (Resolving SSH Key Issues on Windows)&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Common Issue: Key Not Accessible (AWS)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When trying to connect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\U&lt;/span&gt;&lt;span class="s2"&gt;sers&lt;/span&gt;&lt;span class="se"&gt;\U&lt;/span&gt;&lt;span class="s2"&gt;SER&lt;/span&gt;&lt;span class="se"&gt;\D&lt;/span&gt;&lt;span class="s2"&gt;ownloads&lt;/span&gt;&lt;span class="se"&gt;\a&lt;/span&gt;&lt;span class="s2"&gt;ws-key.pem"&lt;/span&gt; ubuntu@YOUR_EC2_IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Warning: Identity file not accessible: No such file or directory.
Permission denied (publickey).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Solution&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Move Key to a Secure Folder&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;mkdir &lt;/span&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\U&lt;/span&gt;SER&lt;span class="se"&gt;\.&lt;/span&gt;ssh
   move &lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\U&lt;/span&gt;&lt;span class="s2"&gt;sers&lt;/span&gt;&lt;span class="se"&gt;\U&lt;/span&gt;&lt;span class="s2"&gt;SER&lt;/span&gt;&lt;span class="se"&gt;\D&lt;/span&gt;&lt;span class="s2"&gt;ownloads&lt;/span&gt;&lt;span class="se"&gt;\a&lt;/span&gt;&lt;span class="s2"&gt;ws-key.pem"&lt;/span&gt; C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\U&lt;/span&gt;SER&lt;span class="se"&gt;\.&lt;/span&gt;ssh&lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Change File Permissions (Windows Alternative to chmod 400)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;PowerShell as Administrator&lt;/strong&gt; and run:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;icacls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\Users\USER\.ssh\aws-key.pem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/inheritance:r&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="n"&gt;icacls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\Users\USER\.ssh\aws-key.pem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/grant:r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;USER:F&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Connect Again Using Correct Path&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\U&lt;/span&gt;&lt;span class="s2"&gt;sers&lt;/span&gt;&lt;span class="se"&gt;\U&lt;/span&gt;&lt;span class="s2"&gt;SER&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;ssh&lt;/span&gt;&lt;span class="se"&gt;\a&lt;/span&gt;&lt;span class="s2"&gt;ws-key.pem"&lt;/span&gt; ubuntu@YOUR_EC2_IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;6. Installing &amp;amp; Configuring Nginx&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once connected to your server (&lt;strong&gt;Azure or AWS EC2&lt;/strong&gt;):&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Update and Install Nginx&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Start &amp;amp; Enable Nginx&lt;/strong&gt;
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Allow Traffic on Port 80&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow &lt;span class="s1"&gt;'Nginx HTTP'&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable
sudo &lt;/span&gt;ufw status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;7. Fetching the Landing Page from GitHub&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Install Git (if not installed)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Clone Your GitHub Repository&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Replace &lt;code&gt;YOUR_GITHUB_REPO_URL&lt;/code&gt; with your actual repository URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/html
&lt;span class="nb"&gt;sudo &lt;/span&gt;git clone YOUR_GITHUB_REPO_URL landing-page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Set Permissions&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; www-data:www-data /var/www/html/landing-page
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 755 /var/www/html/landing-page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;8. Configuring Nginx for Your Website&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Create Nginx Configuration File&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/sites-available/landing-page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Add This Configuration&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;YOUR_SERVER_IP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/var/www/html/landing-page&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit (CTRL + X → Y → ENTER).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Enable the Configuration&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/landing-page /etc/nginx/sites-enabled/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Restart Nginx&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;9. Verify Deployment&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open a browser and visit:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   http://YOUR_SERVER_IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Your landing page should be visible! 🎉&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;10. Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;✅ You have successfully &lt;strong&gt;deployed your landing page on Nginx&lt;/strong&gt; using &lt;strong&gt;Azure or AWS EC2&lt;/strong&gt;.&lt;br&gt;
✅ Your site is now &lt;strong&gt;live and accessible&lt;/strong&gt; via the internet.&lt;br&gt;
✅ You also learned how to &lt;strong&gt;fetch files from GitHub&lt;/strong&gt; and &lt;strong&gt;fix common SSH key issues&lt;/strong&gt; in AWS.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Step-by-Step Guide: Installing Jenkins on AWS EC2 and Deploying to Kubernetes</title>
      <dc:creator>Inioluwa Eunice Atanda</dc:creator>
      <pubDate>Thu, 20 Feb 2025 11:08:23 +0000</pubDate>
      <link>https://dev.to/eunini/step-by-step-guide-installing-jenkins-on-aws-ec2-and-deploying-to-kubernetes-40ee</link>
      <guid>https://dev.to/eunini/step-by-step-guide-installing-jenkins-on-aws-ec2-and-deploying-to-kubernetes-40ee</guid>
      <description>&lt;p&gt;&lt;br&gt;
````markdown name=installing-jenkins-on-aws-ec2.md&lt;/p&gt;

&lt;p&gt;In this guide, we'll go through the detailed steps to set up Jenkins on an AWS EC2 instance, install necessary plugins, and configure Jenkins for deploying applications to a Kubernetes cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Install Jenkins on AWS EC2
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Update Your System
&lt;/h3&gt;

&lt;p&gt;First, let's make sure your system is up to date. Run the following command to update your package list and upgrade your installed packages:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;✅ This ensures your system is up-to-date.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Install Java (Required for Jenkins)
&lt;/h3&gt;

&lt;p&gt;Jenkins requires Java to run. Install OpenJDK 11 by running:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
sudo apt install openjdk-11-jdk -y


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Verify the Java installation:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
java -version


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;✅ Expected output:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
plaintext
openjdk version "11.0.xx"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Step 3: Install Jenkins
&lt;/h3&gt;

&lt;p&gt;Add the Jenkins repository:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /etc/apt/trusted.gpg.d/jenkins.asc &amp;gt; /dev/null


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Add the Jenkins package source:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
echo "deb http://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list &amp;gt; /dev/null


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Update the package list and install Jenkins:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
sudo apt update
sudo apt install jenkins -y


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Step 4: Start and Enable Jenkins
&lt;/h3&gt;

&lt;p&gt;Start the Jenkins service:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
sudo systemctl start jenkins


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Enable Jenkins to start on boot:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
sudo systemctl enable jenkins


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Check the status of Jenkins:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
sudo systemctl status jenkins


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;✅ You should see "active (running)".&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Access Jenkins Dashboard
&lt;/h3&gt;

&lt;p&gt;Find your EC2 public IP:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
curl ifconfig.me


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now, open your browser and go to:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
plaintext
http://&amp;lt;your-ec2-public-ip&amp;gt;:8080


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Jenkins should be running! 🎉&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Unlock Jenkins
&lt;/h3&gt;

&lt;p&gt;Find the admin password:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
sudo cat /var/lib/jenkins/secrets/initialAdminPassword


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Copy and paste it into the Jenkins setup page. Click "Install suggested plugins" and create an admin user.&lt;/p&gt;

&lt;p&gt;✅ Now you have Jenkins running! 🎯&lt;/p&gt;

&lt;h2&gt;
  
  
  2️⃣ Install Kubernetes and Docker Plugins in Jenkins
&lt;/h2&gt;

&lt;p&gt;Jenkins needs plugins to communicate with Kubernetes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install Docker &amp;amp; Kubernetes Plugins
&lt;/h3&gt;

&lt;p&gt;Go to Jenkins Dashboard → Manage Jenkins → Manage Plugins. Search for and install the following plugins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Pipeline&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After installing the plugins, restart Jenkins.&lt;/p&gt;

&lt;h2&gt;
  
  
  3️⃣ Configure Jenkins to Deploy to Kubernetes
&lt;/h2&gt;

&lt;p&gt;Jenkins will automate deployments to your Kubernetes cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a Service Account in Kubernetes
&lt;/h3&gt;

&lt;p&gt;On your EC2 instance, run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
kubectl create serviceaccount jenkins
kubectl create clusterrolebinding jenkins --clusterrole=cluster-admin --serviceaccount=default:jenkins


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Step 2: Get Kubernetes API Token
&lt;/h3&gt;

&lt;p&gt;Run the following command to get the Kubernetes API token:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
kubectl get secret $(kubectl get serviceaccount jenkins -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Copy this token.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure Jenkins Credentials
&lt;/h3&gt;

&lt;p&gt;Go to Jenkins Dashboard → Manage Jenkins → Manage Credentials. Under Global Credentials, add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type: Kubernetes Configuration (Secret Text)&lt;/li&gt;
&lt;li&gt;Secret: Paste the token from Step 2&lt;/li&gt;
&lt;li&gt;ID: k8s-api-token&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4️⃣ Create a Jenkins Pipeline to Deploy to Kubernetes
&lt;/h2&gt;

&lt;p&gt;Go to Jenkins Dashboard → New Item → Pipeline. Name it &lt;code&gt;K8s-Deployment&lt;/code&gt; and choose Pipeline.&lt;/p&gt;

&lt;p&gt;In the Pipeline Script section, paste the following script:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
groovy
pipeline {
    agent any

    environment {
        KUBECONFIG = credentials('k8s-api-token')
    }

    stages {
        stage('Checkout Code') {
            steps {
                git 'https://github.com/YOUR_GITHUB_REPO.git'  // Replace with your repo
            }
        }

        stage('Build Docker Image') {
            steps {
                sh 'docker build -t myapp:latest .'
            }
        }

        stage('Push Image to Docker Hub') {
            steps {
                withDockerRegistry([credentialsId: 'docker-hub', url: 'https://index.docker.io/v1/']) {
                    sh 'docker tag myapp:latest YOUR_DOCKER_USERNAME/myapp:latest'
                    sh 'docker push YOUR_DOCKER_USERNAME/myapp:latest'
                }
            }
        }

        stage('Deploy to Kubernetes') {
            steps {
                sh 'kubectl apply -f deployment.yaml'
            }
        }
    }
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;✅ Replace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;YOUR_GITHUB_REPO&lt;/code&gt; with your GitHub repository&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;YOUR_DOCKER_USERNAME&lt;/code&gt; with your Docker Hub username&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5️⃣ Create Kubernetes Deployment Manifest
&lt;/h2&gt;

&lt;p&gt;Create a file named &lt;code&gt;deployment.yaml&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
nano deployment.yaml


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Paste the following content:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: YOUR_DOCKER_USERNAME/myapp:latest
        ports:
        - containerPort: 80


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;✅ Replace &lt;code&gt;YOUR_DOCKER_USERNAME/myapp:latest&lt;/code&gt; with your Docker Hub image.&lt;/p&gt;

&lt;p&gt;Apply the deployment:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
kubectl apply -f deployment.yaml


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;✅ Your app is now running on Kubernetes! 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Final Test
&lt;/h2&gt;

&lt;p&gt;Run the following commands to verify the deployment:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sh
kubectl get pods
kubectl get deployments


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;✅ You should see your &lt;code&gt;myapp&lt;/code&gt; deployment running.&lt;/p&gt;

&lt;p&gt;Congratulations! You've successfully set up Jenkins on AWS EC2 and configured it to deploy to a Kubernetes cluster. Happy CI/CD! 🚀&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Here's a step-by-step guide for setting up Kubernetes on an EC2 instance</title>
      <dc:creator>Inioluwa Eunice Atanda</dc:creator>
      <pubDate>Thu, 20 Feb 2025 09:51:06 +0000</pubDate>
      <link>https://dev.to/eunini/heres-a-step-by-step-guide-for-setting-up-kubernetes-on-an-ec2-instance-3j1n</link>
      <guid>https://dev.to/eunini/heres-a-step-by-step-guide-for-setting-up-kubernetes-on-an-ec2-instance-3j1n</guid>
      <description>&lt;p&gt;&lt;strong&gt;Setting Up Kubernetes on EC2&lt;/strong&gt;&lt;br&gt;
Step 1: Update System Packages&lt;br&gt;
Before installing any software, update your package lists to ensure you're getting the latest versions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2: Install Docker&lt;br&gt;
Kubernetes runs containers, so you need to install Docker first.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Required Dependencies
Run the following command:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Add Docker GPG Key and Repository
Run these commands to add the Docker GPG key and repository:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Install Docker
Update the package list and install Docker:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Start and Enable Docker
Ensure Docker runs on system startup:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
sudo systemctl start docker
sudo systemctl enable docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Verify Docker Installation
Check the installed version of Docker:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
docker --version
Step 3: Install Kubernetes Components (kubectl, kubeadm, kubelet)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Add Kubernetes Signing Key
Run this command to add the Kubernetes signing key:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Add Kubernetes Repository
Add the Kubernetes repository to your system's APT sources list:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Install Kubernetes Components
Update the package list and install kubelet, kubeadm, and kubectl:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Prevent Automatic Updates (Optional)
To avoid unintended upgrades that may disrupt your cluster, hold these packages at their current versions:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
sudo apt-mark hold kubelet kubeadm kubectl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Verify Installation
Check the installed versions of Kubernetes components:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
kubeadm version
kubectl version --client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Step 4: Enable Docker for Kubernetes&lt;br&gt;
Kubernetes requires Docker’s cgroup driver to be set correctly.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check Current cgroup Driver
Run this command to check the current cgroup driver:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
sudo docker info | grep -i cgroup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If it does not say "systemd", proceed to configure it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure Docker to Use Systemd
Create a configuration file for Docker:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
sudo mkdir -p /etc/docker
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/docker/daemon.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;🔹 &lt;strong&gt;step 9: Set Up Ingress for Better Traffic Routing&lt;br&gt;
Instead of accessing our app via a NodePort, we’ll set up an Ingress Controller to handle traffic more efficiently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🛠️ What is Ingress?&lt;br&gt;
Ingress allows you to define routing rules for Kubernetes services.&lt;br&gt;
It provides a stable URL (e.g., &lt;a href="http://yourdomain.com" rel="noopener noreferrer"&gt;http://yourdomain.com&lt;/a&gt;).&lt;br&gt;
It eliminates the need to use random NodePort numbers.&lt;br&gt;
1️⃣ Install an Ingress Controller (NGINX)&lt;br&gt;
Since we’re using AWS EC2, we’ll install the NGINX Ingress Controller.&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml&lt;/code&gt;&lt;br&gt;
✅ This deploys the Ingress Controller.&lt;/p&gt;

&lt;p&gt;Now, check if the pods are running:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl get pods -n ingress-nginx&lt;/code&gt;&lt;br&gt;
✅ Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-xxxx               1/1     Running   0          1m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2️⃣ Create an Ingress Resource&lt;br&gt;
Now, let's create an Ingress Rule to route traffic to our Nginx deployment.&lt;/p&gt;

&lt;p&gt;1️⃣ Create a file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano nginx-ingress.yaml&lt;/code&gt;&lt;br&gt;
2️⃣ Add the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: nginx.example.com  # Replace this with your domain or public IP
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3️⃣ Apply the configuration:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl apply -f nginx-ingress.yaml&lt;/code&gt;&lt;br&gt;
✅ This sets up an Ingress route to forward traffic to the Nginx service.&lt;/p&gt;

&lt;p&gt;3️⃣ Test the Ingress&lt;br&gt;
Find the external IP of the Ingress Controller:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl get svc -n ingress-nginx&lt;/code&gt;&lt;br&gt;
✅ Look for an entry like this:&lt;br&gt;
pgsql&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)
ingress-nginx-controller             LoadBalancer  10.96.XXX.XXX   XX.XX.XX.XX    80:XXXXX/TCP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔹 The EXTERNAL-IP is what you'll use to access your app.&lt;/p&gt;

&lt;p&gt;Now, test it:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -H "Host: nginx.example.com" http://XX.XX.XX.XX&lt;/code&gt;&lt;br&gt;
✅ If successful, you'll see the Nginx welcome page.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Setting Up and Configuring NGINX on an Ubuntu Server</title>
      <dc:creator>Inioluwa Eunice Atanda</dc:creator>
      <pubDate>Thu, 06 Feb 2025 22:42:00 +0000</pubDate>
      <link>https://dev.to/eunini/setting-up-and-configuring-nginx-on-an-ubuntu-server-1alf</link>
      <guid>https://dev.to/eunini/setting-up-and-configuring-nginx-on-an-ubuntu-server-1alf</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Introduction&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the HNG DevOps Stage 0 task, I was required to set up and configure NGINX on a fresh Ubuntu server and serve a custom HTML page. This task helped reinforce my understanding of Linux server management, web server configuration, and cloud deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;My Approach&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To complete the task, I followed these structured steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Setting Up the Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I created an Ubuntu server instance on AWS EC2. Once the server was up and running, I connected to it using SSH:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh -i key-2.pem ubuntu@16.171.226.12&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Installing NGINX&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, I updated the package list and installed NGINX:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install nginx -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After installation, I ensured NGINX was running:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl start nginx&lt;br&gt;
sudo systemctl enable nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;3. Configuring the Custom HTML Page&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I navigated to the default NGINX web root directory and edited the index.html file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd /var/www/html&lt;br&gt;
sudo nano index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I replaced the content with:&lt;br&gt;
&lt;/p&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 lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Welcome&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background: linear-gradient(135deg, #4A90E2, #9013FE);
            font-family: Arial, sans-serif;
            color: #fff;
            text-align: center;
        }
        .container {
            background: rgba(255, 255, 255, 0.1);
            padding: 20px 40px;
            border-radius: 10px;
            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
        }
        h1 {
            font-size: 28px;
            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
        }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class="container"&amp;gt;
        &amp;lt;h1&amp;gt;Welcome to DevOps Stage 0 - Inioluwa/Inioluwa Eunice&amp;lt;/h1&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I then restarted NGINX to apply the changes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl restart nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;4. Verifying Deployment&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I accessed my server’s public IP in a browser:👉 &lt;a href="http://16.171.226.12/" rel="noopener noreferrer"&gt;http://16.171.226.12/&lt;/a&gt; The custom HTML message was successfully displayed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges and Solutions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issue:&lt;/strong&gt; creating an SSH key for my EC2 instance. Initially, I generated a .ppk key instead of a .pem, which caused authentication errors when trying to connect to my server.  &lt;strong&gt;Solution:&lt;/strong&gt;  After troubleshooting, I successfully created the correct .pem key and gained access!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issue&lt;/strong&gt;: NGINX not serving the updated HTML file. &lt;strong&gt;Solution&lt;/strong&gt;: Restarted NGINX after editing the file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lessons Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Launching an EC2 instance on AWS&lt;br&gt;
✅ Installing and configuring NGINX on Ubuntu&lt;br&gt;
✅ Using nano to edit my HTML file inside /var/www/html/index.html&lt;br&gt;
✅ Troubleshooting SSH authentication errors&lt;br&gt;
✅ Understanding how web servers serve static content&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://hng.tech/hire/devops-engineers" rel="noopener noreferrer"&gt;DevOps Engineers&lt;/a&gt;&lt;br&gt;
&lt;a href="https://hng.tech/hire/cloud-engineers" rel="noopener noreferrer"&gt;Cloud Engineers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Conclusion&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This task provided hands-on experience with deploying a web server, working with NGINX, and managing cloud instances. It solidified my understanding of basic DevOps principles and will be beneficial as I advance in the field.&lt;/p&gt;

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