<?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: Precious Edmund </title>
    <description>The latest articles on DEV Community by Precious Edmund  (@preciouseddy).</description>
    <link>https://dev.to/preciouseddy</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%2F815072%2Fd3504af8-7825-491d-9988-35f970aec9bd.png</url>
      <title>DEV Community: Precious Edmund </title>
      <link>https://dev.to/preciouseddy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/preciouseddy"/>
    <language>en</language>
    <item>
      <title>HNG-StageN-1:Number Facts API: A Fun &amp; Interactive Flask Web Service</title>
      <dc:creator>Precious Edmund </dc:creator>
      <pubDate>Tue, 04 Feb 2025 13:26:24 +0000</pubDate>
      <link>https://dev.to/preciouseddy/hng-stagen-1number-facts-api-a-fun-interactive-flask-web-service-bhf</link>
      <guid>https://dev.to/preciouseddy/hng-stagen-1number-facts-api-a-fun-interactive-flask-web-service-bhf</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Number Facts API&lt;/strong&gt; is a Flask-based web service that classifies numbers and provides interesting mathematical properties along with a fun fact. This API supports several mathematical functions such as determining whether a number is prime, perfect, or Armstrong, classifying numbers as odd or even, computing the sum of its digits, and retrieving fun facts using the Numbers API.  &lt;/p&gt;

&lt;p&gt;This project is part of my &lt;strong&gt;HNG Internship DevOps Bootcamp&lt;/strong&gt;, and as I mentioned in my earlier post, I’ll be sharing the &lt;strong&gt;next stage&lt;/strong&gt; with you here on this platform. But first, here’s the &lt;strong&gt;Stage 1 task&lt;/strong&gt; in my HNG internship journey!  &lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classifies Numbers&lt;/strong&gt;: Determines if a number is prime, perfect, Armstrong, odd, or even.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sum of Digits&lt;/strong&gt;: Computes the sum of a number’s digits.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fun Facts&lt;/strong&gt;: Fetches a fun fact about the number using Numbers API.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Response&lt;/strong&gt;: Returns information in JSON format.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles Errors Gracefully&lt;/strong&gt;: If an invalid input is provided, the API will return a meaningful error message.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  API Endpoint
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;/api/classify-number?number=&amp;lt;integer&amp;gt;&lt;/code&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Example Request:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"http://127.0.0.1:5000/api/classify-number?number=371"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Success Response (200 OK):
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;371&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"is_prime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"is_perfect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"armstrong"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"odd"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"digit_sum"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fun_fact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"371 is an Armstrong number because 3^3 + 7^3 + 1^3 = 371"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Error Response (400 Bad Request):
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Installation &amp;amp; Running the API
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;Before running the API, ensure you have the following installed:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python 3&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flask&lt;/strong&gt;: Python web framework.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requests Library&lt;/strong&gt;: For making HTTP requests to fetch fun facts about the numbers.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone the Repository&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/P3dmund/HNG-Stage-1.git
&lt;span class="nb"&gt;cd &lt;/span&gt;HNG-Stage-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install Dependencies using requirements.txt&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run the API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python app.py
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;The API will be accessible at &lt;code&gt;http://127.0.0.1:5000&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;You can now make requests to:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;http://127.0.0.1:5000/api/classify-number?number&lt;span class="o"&gt;=&lt;/span&gt;371
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Deployment on Render
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Account&lt;/strong&gt;: You need a GitHub account to push your project.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render Account&lt;/strong&gt;: Render is a cloud platform that supports Python-based deployments.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Steps to Deploy the API on Render:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Push the Code to GitHub&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Push your code to a GitHub repository (if not done already).  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create a New Web Service on Render&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to your &lt;strong&gt;Render&lt;/strong&gt; account.
&lt;/li&gt;
&lt;li&gt;Navigate to the "Dashboard" and click on &lt;strong&gt;New Web Service&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Link your GitHub repository to Render.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Start Command&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Set the &lt;strong&gt;Start Command&lt;/strong&gt; as:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deploy&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Deploy&lt;/strong&gt; and wait for the deployment to finish.
&lt;/li&gt;
&lt;li&gt;After deployment, Render will provide a &lt;strong&gt;public URL&lt;/strong&gt; for your API.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Gunicorn Challenges and Solutions
&lt;/h2&gt;

&lt;p&gt;While deploying Flask applications on Render, it’s common to encounter &lt;strong&gt;Gunicorn-related issues&lt;/strong&gt;, such as:  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Problem:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;After deployment, the API might fail with an error like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ModuleNotFoundError: No module named 'flask'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This error happens when Gunicorn can't locate the required dependencies, or the application isn't set up properly for a WSGI server.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Solution: Using Gunicorn Properly&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install Gunicorn&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;gunicorn
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Update Your &lt;code&gt;app.py&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Ensure your Flask app has the proper WSGI entry point:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Gunicorn in Render&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;Render&lt;/strong&gt;, modify the &lt;strong&gt;Start Command&lt;/strong&gt; to use Gunicorn instead of &lt;code&gt;python app.py&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  gunicorn app:app
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Redeploy the Application&lt;/strong&gt;  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After applying these fixes, your &lt;strong&gt;Number Facts API&lt;/strong&gt; should work correctly on Render! 🎉  &lt;/p&gt;




&lt;h2&gt;
  
  
  Testing the API
&lt;/h2&gt;

&lt;p&gt;To test the API locally or after deployment, you can use:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser&lt;/strong&gt;: Visit &lt;code&gt;http://127.0.0.1:5000/api/classify-number?number=371&lt;/code&gt; (for local testing).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Postman&lt;/strong&gt;: Send a GET request to the URL and check the response.
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;cURL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"http://127.0.0.1:5000/api/classify-number?number=371"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;This &lt;strong&gt;Number Facts API&lt;/strong&gt; is a fun and interactive way to explore numbers and their properties through a Flask-based web service. It provides &lt;strong&gt;classification&lt;/strong&gt;, &lt;strong&gt;digit sum computation&lt;/strong&gt;, and &lt;strong&gt;fun facts&lt;/strong&gt; about numbers.  &lt;/p&gt;

&lt;p&gt;This project marks &lt;strong&gt;Stage 1&lt;/strong&gt; of my journey in the &lt;strong&gt;HNG Internship DevOps Bootcamp&lt;/strong&gt;. As I mentioned in my previous post, I’ll be sharing the &lt;strong&gt;next stage&lt;/strong&gt; here as well! Stay tuned for more updates as I progress through the internship. 🚀  &lt;/p&gt;

&lt;p&gt;If you found this useful or are also participating in HNG, let’s connect! Drop a comment and share your experience. 👇&lt;/p&gt;

</description>
      <category>devops</category>
      <category>python</category>
      <category>cloud</category>
      <category>fastapi</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Precious Edmund </dc:creator>
      <pubDate>Wed, 29 Jan 2025 23:47:57 +0000</pubDate>
      <link>https://dev.to/preciouseddy/-4n6i</link>
      <guid>https://dev.to/preciouseddy/-4n6i</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/preciouseddy" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F815072%2Fd3504af8-7825-491d-9988-35f970aec9bd.png" alt="preciouseddy"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/preciouseddy/setting-up-nginx-on-ubuntu-my-devops-stage-0-journey-2cc" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Setting Up NGINX on Ubuntu: My DevOps Stage 0 Journey&lt;/h2&gt;
      &lt;h3&gt;Precious Edmund  ・ Jan 29&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#nginx&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#html&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ubuntu&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>nginx</category>
      <category>html</category>
      <category>devops</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Setting Up NGINX on Ubuntu: My DevOps Stage 0 Journey</title>
      <dc:creator>Precious Edmund </dc:creator>
      <pubDate>Wed, 29 Jan 2025 23:30:10 +0000</pubDate>
      <link>https://dev.to/preciouseddy/setting-up-nginx-on-ubuntu-my-devops-stage-0-journey-2cc</link>
      <guid>https://dev.to/preciouseddy/setting-up-nginx-on-ubuntu-my-devops-stage-0-journey-2cc</guid>
      <description>&lt;h2&gt;
  
  
  Setting Up NGINX on Ubuntu: My DevOps Stage 0 Journey
&lt;/h2&gt;

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

&lt;p&gt;As part of the HNG DevOps Stage 0 task, I was required to install and configure NGINX on a fresh Ubuntu server. The goal was to create a custom webpage accessible via a public IP address, demonstrating my ability to work with basic web server configurations. Here's a detailed walkthrough of my approach, challenges faced, and what I learned during the process.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Setting Up the Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I chose &lt;strong&gt;Microsoft Azure Platform&lt;/strong&gt; to provision a virtual machine with the following specifications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OS:&lt;/strong&gt; Ubuntu 22.04 LTS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CPU/RAM:&lt;/strong&gt; 1 vCPU, 1GB RAM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public IP Address:&lt;/strong&gt; Assigned during setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To access the server, I used SSH with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh username@&amp;lt;server-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once connected, I ensured my system was updated using:&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;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 upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Installing and Configuring NGINX&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The first step was to install the NGINX web server:&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;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I verified the installation by checking the status:&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;sudo &lt;/span&gt;systemctl status nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To ensure my server was accessible, I allowed HTTP traffic through the firewall:&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;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&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Creating the Custom HTML Page&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The task required me to create a custom webpage with the message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Welcome to DevOps Stage 0 - [Your Name]/[SlackName]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I navigated to the default NGINX web root directory:&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using a text editor, I created and edited the &lt;code&gt;index.html&lt;/code&gt; file:&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;sudo &lt;/span&gt;nano index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I added the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;DevOps Stage 0&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome to DevOps Stage 0 - [Your Name]/[SlackName]&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, I restarted NGINX to apply the changes:&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;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Testing the Configuration&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To verify the setup, I opened a browser and navigated to:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The custom HTML page loaded successfully, displaying the required message:&lt;br&gt;
&lt;strong&gt;"Welcome to DevOps Stage 0 - [Your Name]/[SlackName]"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I also tested accessibility from another machine to ensure it worked publicly.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Challenges Faced and Solutions&lt;/strong&gt;
&lt;/h2&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Challenge 1: SSH Connection Issues&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Initially, my public IP did not load the default NGINX page. After troubleshooting, I realized that Azure blocks inbound HTTP traffic by default. I had to create an Inbound Rule in Azure Network Security Group (NSG) to allow HTTP traffic, which resolved the issue.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;strong&gt;Challenge 2: NGINX Default Page Displaying&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;After configuration, the default NGINX page still appeared. I realized the issue was with caching and cleared it by refreshing the browser.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Reflections and Learning&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This task helped me solidify my understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installing and configuring web servers like NGINX.&lt;/li&gt;
&lt;li&gt;Troubleshooting common server and networking issues.&lt;/li&gt;
&lt;li&gt;Managing basic Linux commands and file configurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also emphasized the importance of documentation and attention to detail, as small misconfigurations could cause issues.&lt;/p&gt;




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

&lt;p&gt;Completing this task was a rewarding experience and a step forward in my DevOps journey. It gave me hands-on exposure to web server setup and provided insights into how web infrastructure is managed.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;References&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I used the following links to gain additional insights and inspiration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/devops-engineers" rel="noopener noreferrer"&gt;DevOps Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/cloud-engineers" rel="noopener noreferrer"&gt;Cloud Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/site-reliability-engineers" rel="noopener noreferrer"&gt;Site Reliability Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/platform-engineers" rel="noopener noreferrer"&gt;Platform Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/infrastructure-engineers" rel="noopener noreferrer"&gt;Infrastructure Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/kubernetes-specialists" rel="noopener noreferrer"&gt;Kubernetes Specialists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/aws-solutions-architects" rel="noopener noreferrer"&gt;AWS Solutions Architects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/azure-devops-engineers" rel="noopener noreferrer"&gt;Azure DevOps Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/google-cloud-engineers" rel="noopener noreferrer"&gt;Google Cloud Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/ci-cd-pipeline-engineers" rel="noopener noreferrer"&gt;CI/CD Pipeline Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/monitoring-observability-engineers" rel="noopener noreferrer"&gt;Monitoring/Observability Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/automation-engineers" rel="noopener noreferrer"&gt;Automation Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/docker-specialists" rel="noopener noreferrer"&gt;Docker Specialists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/linux-developers" rel="noopener noreferrer"&gt;Linux Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/postgresql-developers" rel="noopener noreferrer"&gt;PostgreSQL Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Screenshot&lt;/strong&gt;
&lt;/h2&gt;

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

</description>
      <category>nginx</category>
      <category>html</category>
      <category>devops</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Why I Applied for the HNG DevOps Bootcamp to Sharpen My Cloud Engineering Skills</title>
      <dc:creator>Precious Edmund </dc:creator>
      <pubDate>Wed, 29 Jan 2025 23:10:44 +0000</pubDate>
      <link>https://dev.to/preciouseddy/why-i-applied-for-the-hng-devops-bootcamp-to-sharpen-my-cloud-engineering-skills-ndf</link>
      <guid>https://dev.to/preciouseddy/why-i-applied-for-the-hng-devops-bootcamp-to-sharpen-my-cloud-engineering-skills-ndf</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;As a cloud engineer constantly looking for ways to enhance my skill set, I recently applied for the &lt;strong&gt;HNG DevOps Bootcamp&lt;/strong&gt;. The decision wasn’t just about adding another program to my resume but about &lt;strong&gt;challenging myself in a high-intensity learning environment&lt;/strong&gt; that focuses on real-world DevOps scenarios. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Need for Continuous Learning in Cloud Engineering
&lt;/h3&gt;

&lt;p&gt;The cloud engineering landscape is &lt;strong&gt;rapidly evolving&lt;/strong&gt; with new tools, best practices, and frameworks emerging regularly. As someone who has worked on cloud infrastructure, automation, and Kubernetes, I realized that while my knowledge is solid, there’s always room for improvement. &lt;/p&gt;

&lt;p&gt;DevOps is not just about deploying applications but about ensuring efficiency, reliability, and scalability. This requires expertise in &lt;strong&gt;CI/CD pipelines, Infrastructure as Code (IaC), security, observability, and automation&lt;/strong&gt;—all of which the HNG DevOps Bootcamp emphasizes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the HNG DevOps Bootcamp?
&lt;/h3&gt;

&lt;p&gt;HNG is known for its &lt;strong&gt;intensive and hands-on learning approach&lt;/strong&gt;. Unlike traditional courses, the bootcamp provides an opportunity to work on &lt;strong&gt;real-world projects&lt;/strong&gt; while being mentored by industry experts. Here’s why I found it appealing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Practical, project-based learning&lt;/strong&gt; – I prefer learning by doing rather than just theoretical lessons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exposure to real DevOps workflows&lt;/strong&gt; – The bootcamp simulates real-world scenarios, helping me refine my skills in &lt;strong&gt;cloud automation, CI/CD, and system reliability.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Networking with like-minded professionals&lt;/strong&gt; – Connecting with peers and mentors in the cloud and DevOps space is invaluable for career growth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pushing my limits&lt;/strong&gt; – The structured but intense nature of the program ensures that I stay disciplined and engaged.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My Learning Goals
&lt;/h3&gt;

&lt;p&gt;By the end of the bootcamp, I aim to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Strengthen my Infrastructure as Code (IaC) skills&lt;/strong&gt; using Terraform and other automation tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Master CI/CD pipelines&lt;/strong&gt; with GitHub Actions, Jenkins, or similar tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve cloud security best practices&lt;/strong&gt; to ensure compliance and robust cloud architecture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhance my Kubernetes knowledge&lt;/strong&gt; for orchestrating and managing containerized applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gain deeper insights into observability and monitoring&lt;/strong&gt; using tools like Prometheus and Grafana.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Documenting My Journey
&lt;/h3&gt;

&lt;p&gt;In addition to participating in the bootcamp, I will be &lt;strong&gt;documenting each step of my projects&lt;/strong&gt; through a series of blog posts. These posts will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Project planning and architecture decisions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Step-by-step implementation with technical deep dives&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Troubleshooting challenges and solutions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance optimization and security best practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Final deployment and reflections on lessons learned&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By doing this, I hope to &lt;strong&gt;solidify my understanding&lt;/strong&gt;, share my knowledge with the community, and create a valuable resource for anyone looking to enhance their DevOps skills.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Applying for the &lt;strong&gt;HNG DevOps Bootcamp&lt;/strong&gt; is a step toward &lt;strong&gt;refining my cloud engineering expertise&lt;/strong&gt; and staying competitive in the field.&lt;/p&gt;

&lt;p&gt;If you're also considering upskilling in DevOps, I’d highly recommend checking out &lt;strong&gt;HNG and other structured programs&lt;/strong&gt; to sharpen your skills.&lt;/p&gt;

&lt;p&gt;Let’s connect! Are you currently participating in a DevOps bootcamp or have experience in cloud automation? Share your thoughts in the comments!&lt;/p&gt;




</description>
      <category>devops</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
      <category>cloudskills</category>
    </item>
  </channel>
</rss>
