<?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: Duru Juliet Chinenye</title>
    <description>The latest articles on DEV Community by Duru Juliet Chinenye (@duru_julietchinenye_349f).</description>
    <link>https://dev.to/duru_julietchinenye_349f</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%2F3720567%2Fb472d41c-c8b8-464f-aed6-41043d430684.jpg</url>
      <title>DEV Community: Duru Juliet Chinenye</title>
      <link>https://dev.to/duru_julietchinenye_349f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/duru_julietchinenye_349f"/>
    <language>en</language>
    <item>
      <title>AgriAI-Insight</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Tue, 07 Jul 2026 17:21:45 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/agriai-insight-38ip</link>
      <guid>https://dev.to/duru_julietchinenye_349f/agriai-insight-38ip</guid>
      <description>&lt;p&gt;🌾 Predicting crop yields for Nigerian farmers with AI.&lt;br&gt;
I built AgriAI-Insight, a crop yield prediction platform covering all 36 Nigerian states + FCT, because too many smallholder farmers are making planting decisions without the data tools that farmers in other markets take for granted.&lt;/p&gt;

&lt;p&gt;Under the hood: a FastAPI backend deployed on AWS Lambda, paired with a React Native mobile app so it's usable in the field, not just at a desk.&lt;br&gt;
This is part of a bigger goal for me: building practical AI tools for underserved communities across Nigeria and Africa, not just AI for AI's sake but AI that answers a real question a farmer has.&lt;br&gt;
🔗 Try it: &lt;a href="https://agriai-insight.netlify.app/" rel="noopener noreferrer"&gt;https://agriai-insight.netlify.app/&lt;/a&gt;&lt;br&gt;
It's open source too. 👇&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/JulietChinenyeDuru/agriAI-insights" rel="noopener noreferrer"&gt;https://github.com/JulietChinenyeDuru/agriAI-insights&lt;/a&gt;&lt;br&gt;
Feel free to fork it and build on it, and if you find it useful, a star ⭐ on the repo goes a long way in helping others discover it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8aei36el5gh30kzbnt0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8aei36el5gh30kzbnt0a.png" alt=" " width="800" height="366"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2hcpbsmakb0bzhfyk70q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2hcpbsmakb0bzhfyk70q.png" alt=" " width="800" height="339"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwnp55eoahhozfm5lyybj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwnp55eoahhozfm5lyybj.png" alt=" " width="800" height="388"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7ad8dc8basupx36p58g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7ad8dc8basupx36p58g.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>JobApp AI</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Tue, 07 Jul 2026 17:11:25 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/jobapp-ai-37ff</link>
      <guid>https://dev.to/duru_julietchinenye_349f/jobapp-ai-37ff</guid>
      <description>&lt;p&gt;💼 Job hunting shouldn't cost a fortune or your data.&lt;br&gt;
JobApp AI is a subscription platform helping job seekers streamline their applications, with pricing designed to stay accessible across Africa and other global regions. &lt;/p&gt;

&lt;p&gt;Milestones I'm proud of: 🔒 Shipped end-to-end encryption for stored user credentials 💳 Built a self-service billing portal so users can manage their own subscriptions, no support ticket needed 🛡️ Ran a full security audit of the codebase because trust isn't a feature; it's a foundation&lt;br&gt;
Building a SaaS product solo means wearing every hat: engineer, security reviewer, support desk, and product manager. This was a good reminder of why that audit work matters as much as the features people see.&lt;br&gt;
🔗 Try it: &lt;a href="https://jobapp.best" rel="noopener noreferrer"&gt;https://jobapp.best&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's open source too. 👇&lt;br&gt;
 🔗  &lt;a href="https://github.com/JulietChinenyeDuru/Job-App-AI" rel="noopener noreferrer"&gt;https://github.com/JulietChinenyeDuru/Job-App-AI&lt;/a&gt;&lt;br&gt;
Feel free to fork it and build on it, and if you find it useful, a star ⭐ on the repo goes a long way in helping others discover it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwkpcd9s56jww5h30nyi0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwkpcd9s56jww5h30nyi0.png" alt=" " width="800" height="405"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkzufqnhdoyrd6blbamh2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkzufqnhdoyrd6blbamh2.png" alt=" " width="800" height="407"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feala2hj98withz0h5edf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feala2hj98withz0h5edf.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>automation</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Naija Learn-AI</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Tue, 07 Jul 2026 17:00:58 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/naija-learn-ai-ejm</link>
      <guid>https://dev.to/duru_julietchinenye_349f/naija-learn-ai-ejm</guid>
      <description>&lt;p&gt;🎓 An AI tutor that speaks different languages.&lt;br&gt;
Most AI tutoring tools are built as if every student learns in English and thinks in English. That's not the reality for a huge number of Nigerian university and STEM students, so I built NaijaLearn-AI to close that gap.&lt;br&gt;
It's a Claude-powered multilingual AI tutor supporting five languages, a combination I haven't seen any other tutoring app fully address. The idea is simple: meet students in the language they think in, and the concepts land faster.&lt;/p&gt;

&lt;p&gt;This one comes from a simple observation, and I think simple observations, taken seriously, are where a lot of the best products come from.&lt;/p&gt;

&lt;p&gt;🔗 Try it: &lt;a href="https://naijalearn-ai.netlify.app" rel="noopener noreferrer"&gt;https://naijalearn-ai.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's open source too. 👇&lt;br&gt;
 🔗 &lt;a href="https://github.com/JulietChinenyeDuru/NaijaLearn-AI" rel="noopener noreferrer"&gt;https://github.com/JulietChinenyeDuru/NaijaLearn-AI&lt;/a&gt;&lt;br&gt;
Feel free to fork it and build on it, and if you find it useful, a star ⭐ on the repo goes a long way in helping others discover it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fch3emkq6xpic1dvp4wol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fch3emkq6xpic1dvp4wol.png" alt=" " width="799" height="399"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr951mbmvijp7t6saxpn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr951mbmvijp7t6saxpn6.png" alt=" " width="800" height="404"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5pw09wfvhe2m6e7r6pt4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5pw09wfvhe2m6e7r6pt4.png" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AgriAI-Insight</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Tue, 07 Jul 2026 16:57:01 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/agriai-insight-12d3</link>
      <guid>https://dev.to/duru_julietchinenye_349f/agriai-insight-12d3</guid>
      <description>&lt;p&gt;🌾 Predicting crop yields for Nigerian farmers with AI.&lt;br&gt;
I built AgriAI-Insight, a crop yield prediction platform covering all 36 Nigerian states + FCT, because too many smallholder farmers are making planting decisions without the data tools that farmers in other markets take for granted.&lt;/p&gt;

&lt;p&gt;Under the hood: a FastAPI backend deployed on AWS Lambda, paired with a React Native mobile app so it's usable in the field, not just at a desk.&lt;br&gt;
This is part of a bigger goal for me: building practical AI tools for underserved communities across Nigeria and Africa, not just AI for AI's sake but AI that answers a real question a farmer has.&lt;/p&gt;

&lt;p&gt;🔗 Try it: &lt;a href="https://agriai-insight.netlify.app/" rel="noopener noreferrer"&gt;https://agriai-insight.netlify.app/&lt;/a&gt;&lt;br&gt;
It's open source too. 👇&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/JulietChinenyeDuru/agriAI-insights" rel="noopener noreferrer"&gt;https://github.com/JulietChinenyeDuru/agriAI-insights&lt;/a&gt;&lt;br&gt;
Feel free to fork it and build on it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbt4xe95rsx3t4055zd0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbt4xe95rsx3t4055zd0e.png" alt=" " width="800" height="366"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0mc85idxmsdqj81vc5gd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0mc85idxmsdqj81vc5gd.png" alt=" " width="800" height="339"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3c4ht6ld8p9vfqweq2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3c4ht6ld8p9vfqweq2a.png" alt=" " width="800" height="388"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnaymyfyccf2i9p3y2jn7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnaymyfyccf2i9p3y2jn7.png" alt=" " width="800" height="406"&gt;&lt;/a&gt; and if you find it useful, a star⭐ on the repo goes a long way in helping others discover it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>reviews</category>
      <category>opensource</category>
    </item>
    <item>
      <title>End-to-End Cloud Deployment Using Terraform, Ansible, and Azure Pipelines on AWS</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Wed, 29 Apr 2026 16:28:02 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/end-to-end-cloud-deployment-using-terraform-ansible-and-azure-pipelines-on-aws-5f86</link>
      <guid>https://dev.to/duru_julietchinenye_349f/end-to-end-cloud-deployment-using-terraform-ansible-and-azure-pipelines-on-aws-5f86</guid>
      <description>&lt;p&gt;I deployed a full-stack application using a two-repository CI/CD model, and it completely reshaped how I think about DevOps.&lt;/p&gt;

&lt;p&gt;What I Built&lt;br&gt;
A full end-to-end deployment of the Epic Book online bookstore on AWS, split across two repositories and two independent pipelines.&lt;br&gt;
Repo 1: Infrastructure (book-review-infra)&lt;br&gt;
• Terraform code provisioning all my AWS resources&lt;br&gt;
Repo 2: Application (theepicbook)&lt;br&gt;
• Node.js application&lt;br&gt;
• Ansible configuration for automated server setup&lt;/p&gt;

&lt;p&gt;Pipeline 1:  Infrastructure (Terraform)&lt;br&gt;
• Pulled SSH public key from Azure DevOps Secure Files&lt;br&gt;
• Authenticated to AWS using IAM credentials&lt;br&gt;
• Ran terraform init → plan → apply&lt;br&gt;
• Provisioned VPC, subnets, EC2 instances (frontend + backend), and MySQL RDS&lt;br&gt;
Pipeline 2: Application (Ansible)&lt;br&gt;
• Pulled SSH private key from Secure Files&lt;br&gt;
• Dynamically updated inventory using Terraform outputs&lt;br&gt;
• Configured both servers&lt;br&gt;
• Deployed Epic Book and verified Nginx routing&lt;/p&gt;

&lt;p&gt;Everything I built was automated. Not as a nice-to-have, but as the entire point. Having Azure Pipelines and GitHub working together meant I could go from a code push to a live running application without touching a single server manually.&lt;br&gt;
AWS handled my infrastructure. Azure DevOps ran my pipelines. GitHub held my code. Three different platforms, one seamless workflow.&lt;/p&gt;

&lt;p&gt;That is what modern DevOps looks like. Not one tool. Not one vendor. Just the right tool for each job, connected deliberately and securely.&lt;/p&gt;

&lt;p&gt;Still building. Not stopping. &lt;/p&gt;

&lt;p&gt;I want to sincerely thank my mentors, Pravin Mishra, Praveen Pandey, Abhishek Makwana , Mobarak Hosen, Onuche Paul and Nkechi Anna Ahanonye&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps #AWS #AzureDevOps #Terraform #Ansible #CICD #CloudComputing #MySQL #Nginx #InfrastructureAsCode #LearningInPublic #DevOpsForBeginners #GitHub#TechJourney #WomenInTech #WomenInCloud #BlackInTech #TechCommunity #100DaysOfCode #Upskilling #Automation #Linux #Docker #IaC #DevOpsMicroInternship #DMI #TechEducation
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6agznddhkp854v23zog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6agznddhkp854v23zog.png" alt=" " width="752" height="403"&gt;&lt;/a&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%2Fy2xnktiw7wpxr51or609.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2xnktiw7wpxr51or609.png" alt=" " width="752" height="378"&gt;&lt;/a&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%2F3iyq9s3zxyovnba9z9w9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3iyq9s3zxyovnba9z9w9.png" alt=" " width="752" height="362"&gt;&lt;/a&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%2Foj41wfwpgt90b8tg82wa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foj41wfwpgt90b8tg82wa.png" alt=" " width="800" height="402"&gt;&lt;/a&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%2Fleqvxkupl0pdorszo990.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fleqvxkupl0pdorszo990.png" alt=" " width="800" height="479"&gt;&lt;/a&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%2F0v7it782wbhrn6t6uuzf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0v7it782wbhrn6t6uuzf.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Deployed a Scalable Nginx App on AWS EKS Using Kubernetes</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Wed, 29 Apr 2026 12:21:25 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/deployed-a-scalable-nginx-app-on-aws-eks-using-kubernetes-1fk2</link>
      <guid>https://dev.to/duru_julietchinenye_349f/deployed-a-scalable-nginx-app-on-aws-eks-using-kubernetes-1fk2</guid>
      <description>&lt;p&gt;I've been building as a DevOps engineer for a while now, so I decided to take on this project using Kubernetes. And it changed how I see infrastructure entirely.&lt;/p&gt;

&lt;p&gt;I built the Nginx app running behind an AWS Elastic Load Balancer, provisioned automatically by Kubernetes on EKS.&lt;/p&gt;

&lt;p&gt;Here's what the journey looked like:&lt;/p&gt;

&lt;p&gt;I created my first pod and learned the hard way that pods are immutable; you can't edit a running one; you must delete and recreate it.&lt;br&gt;
I set up replica sets, deleted a pod, and watched Kubernetes replace it in seconds. Auto-healing in action.&lt;br&gt;
I configured deployments with rolling updates, zero downtime, and instant rollbacks. Version control for infrastructure.&lt;br&gt;
I configured HPA for auto-scaling based on CPU. At 5 pm, when traffic spikes, Kubernetes handles it, not me.&lt;br&gt;
I wired up readiness &amp;amp; liveness probes and learned about "running" and "ready." These two probes are what make Kubernetes intelligent.&lt;/p&gt;

&lt;p&gt;I worked through Services; this is where it all came together:&lt;/p&gt;

&lt;p&gt;ClusterIP: stable internal DNS. No more chasing Pod IPs.&lt;br&gt;
Node Port: external access without a cloud LB.&lt;br&gt;
Load Balancer: one YAML field change → real public AWS ELB provisioned automatically.&lt;/p&gt;

&lt;p&gt;The moment my curl hit that public URL, backed by a Kubernetes cluster I built myself, it stopped being theory.&lt;/p&gt;

&lt;p&gt;The struggles were real. Memory limits on a 3.8GB machine. Errors I didn't understand at 1 pm. Moments where I wanted to close the laptop and walk away.&lt;/p&gt;

&lt;p&gt;But I didn't. And I'm so glad.&lt;br&gt;
I want to sincerely thank my mentors, Pravin Mishra, Praveen Pandey, Abhishek Makwana, Mobarak Hosen, Onuche Paul and Nkechi Anna Ahanonye&lt;/p&gt;

&lt;h1&gt;
  
  
  Kubernetes #DevOps #AWS #EKS #CloudComputing #K8s #CloudNative #CloudEngineer #DevOpsEngineer #Infrastructure #LearningInPublic #TechJourney #WomenInTech #WomenInCloud #BlackInTech #TechCommunity #100DaysOfCode #Upskilling #Automation #Linux #Docker #IaC #DevOpsMicroInternship #DMI #TechEducation
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5n3448x5a7dvbqppfpa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5n3448x5a7dvbqppfpa.png" alt=" " width="800" height="406"&gt;&lt;/a&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%2Fzsaqg3ojzj8lt1m5v89s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsaqg3ojzj8lt1m5v89s.png" alt=" " width="799" height="411"&gt;&lt;/a&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%2Favsd5twa7lbo2li4uw05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favsd5twa7lbo2li4uw05.png" alt=" " width="800" height="431"&gt;&lt;/a&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%2Fvgk102udvfu95xofi5i4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgk102udvfu95xofi5i4.png" alt=" " width="800" height="419"&gt;&lt;/a&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%2Fwouity8whmta80ah38vr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwouity8whmta80ah38vr.png" alt=" " width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>Production Grade Deployment of the Epic Book Multi Service Application on AWS EC2 Using Docker &amp; Nginx</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Tue, 28 Apr 2026 00:45:12 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/production-grade-deployment-of-the-epic-book-multi-service-application-on-aws-ec2-using-docker--3nla</link>
      <guid>https://dev.to/duru_julietchinenye_349f/production-grade-deployment-of-the-epic-book-multi-service-application-on-aws-ec2-using-docker--3nla</guid>
      <description>&lt;p&gt;This capstone project represents a major milestone in my DevOps journey. It was a full multi-service application pulled from an unfamiliar GitHub repository, which I deployed end-to-end as a production-ready system on AWS EC2. I architected, containerized, secured, and deployed the entire stack myself. &lt;br&gt;
What I Deployed&lt;br&gt;
EpicBook is an online bookstore with a complete e-commerce flow: Browse books → View details → Add to cart → Checkout → Order confirmed.&lt;br&gt;
It’s built with Node.js, Express, MySQL, Handlebars, and Nginx.&lt;br&gt;
The production architecture: Internet → Nginx (80) → Express Backend (3000) → MySQL (3306) Simple to describe—very different to build correctly.&lt;/p&gt;

&lt;p&gt;What I Actually Built&lt;br&gt;
Here’s what went into making this system production-ready:&lt;br&gt;
• I analyzed an unfamiliar codebase and mapped out every service, port, environment variable, and dependency before writing any configuration.&lt;br&gt;
• I wrote a multi-stage Docker file for the backend, keeping only production dependencies in the final runtime image.&lt;br&gt;
• I designed a Docker Compose stack with Nginx, Express, and MySQL, all connected using internal service names (no hardcoded IPs).&lt;br&gt;
• I created two isolated Docker networks, so MySQL is never exposed to the internet.&lt;br&gt;
• I added health checks with dependencies to enforce correct startup order, no race conditions, and no boot failures.&lt;br&gt;
• I configured Nginx as a reverse proxy, routing all traffic through port 80 and adding security headers.&lt;br&gt;
• I managed all secrets using .env files; no credentials in Git, no exceptions.&lt;br&gt;
• I validated data persistence using named volumes; every book, category, and order survived container restarts.&lt;br&gt;
• I designed a backup and restored plan using daily MySQL dumps and tested the restore process.&lt;br&gt;
• I implemented a logging strategy: backend logs to stdout and Nginx logs persisted with rotation.&lt;br&gt;
• I ran reliability tests by restarting services, killing the database, and bouncing the stack, documenting how the system recovered.&lt;/p&gt;

&lt;p&gt;I want to sincerely thank my mentors, Pravin Mishra, Praveen Pandey, Abhishek Makwana , Mobarak Hosen, Onuche Paul and Nkechi Anna Ahanonye&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps #Docker #MultiStageBuild #Nginx #React #AWS #EC2 #Linux #Containers #CI_CD #DMI #CloudEngineer #BuildInPublic #ShipIt
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgsjwvq0k36omdcyztbne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgsjwvq0k36omdcyztbne.png" alt=" " width="800" height="358"&gt;&lt;/a&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%2Fz52csa7ui82r45xxvx76.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz52csa7ui82r45xxvx76.png" alt=" " width="799" height="408"&gt;&lt;/a&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%2Fsxstepjd3ek5789nd78d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxstepjd3ek5789nd78d.png" alt=" " width="799" height="421"&gt;&lt;/a&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%2Fckawo8zh4o0vaa21k90l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckawo8zh4o0vaa21k90l.png" alt=" " width="800" height="480"&gt;&lt;/a&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%2Fsstrietzcwm650uobcgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsstrietzcwm650uobcgg.png" alt=" " width="800" height="434"&gt;&lt;/a&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%2Fhovq1yi9924iwan80c46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhovq1yi9924iwan80c46.png" alt=" " width="799" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>aws</category>
      <category>devops</category>
      <category>docker</category>
    </item>
    <item>
      <title>Deployment of a React Application Using Docker Multi Stage Builds on AWS EC2</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Tue, 28 Apr 2026 00:02:00 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/deployment-of-a-react-application-using-docker-multi-stage-builds-on-aws-ec2-2fo3</link>
      <guid>https://dev.to/duru_julietchinenye_349f/deployment-of-a-react-application-using-docker-multi-stage-builds-on-aws-ec2-2fo3</guid>
      <description>&lt;p&gt;I’ve been building every single day, but this one hit differently. I went deep into Docker multi-stage builds, and I finally understand why every production team relies on them.&lt;/p&gt;

&lt;p&gt;What I Built&lt;br&gt;
I took a React application and containerized it in two different ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Single-Stage Build &lt;br&gt;
Node.js installs everything, builds the app, and serves it from one image.&lt;br&gt;
Final image size: 778 MB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multi-Stage Build &lt;br&gt;
Stage 1: Node.js builds the app&lt;br&gt;
Stage 2: Nginx serves only the compiled output&lt;br&gt;
Final image size: 94.1 MB&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I used to think Docker was just about running apps in containers. Now I see the deeper engineering principles:&lt;br&gt;
• Build environment ≠ runtime environment. &lt;br&gt;
Node.js, npm, and build tools have no place in a production container serving static files.&lt;br&gt;
• Layer caching is a discipline. &lt;br&gt;
Copying package.json before source code means Docker reuses cached npm installs unless dependencies change, saving real time and real money in CI/CD.&lt;br&gt;
• Smaller images matter. &lt;br&gt;
Less storage, fewer CVEs, faster pushes/pulls, quicker startup times—it all compounds in production.&lt;br&gt;
• Nginx config is not optional for React. &lt;br&gt;
Without a proper try_files fallback, client-side routing breaks on refresh. I tested it. I saw it. I fixed it.&lt;/p&gt;

&lt;p&gt;What I’ve Built and Deployed So Far&lt;br&gt;
• Launched and configured AWS EC2 instances &lt;br&gt;
• Automated Docker installation using cloud-init User Data&lt;br&gt;
• Deployed a static website inside a Docker container on port 80&lt;br&gt;
• Built and compared single-stage vs multi-stage Docker images&lt;br&gt;
• Configured Nginx to serve a React app with routing and cache headers&lt;br&gt;
• Debugged real-world issues: port conflicts, container name clashes, missing keys, permission errors&lt;/p&gt;

&lt;p&gt;Every one of these was built live, broken at least once, fixed, and shipped. &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%2Fuvdp82ri3h43viguzuqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvdp82ri3h43viguzuqu.png" alt=" " width="800" height="385"&gt;&lt;/a&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%2Fvc02viw4j3gkrqrpb28w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvc02viw4j3gkrqrpb28w.png" alt=" " width="799" height="481"&gt;&lt;/a&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%2Fy9xt7zds1mv423fv6f1h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9xt7zds1mv423fv6f1h.png" alt=" " width="800" height="485"&gt;&lt;/a&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%2Fy28fz05pgkx5bslib4lq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy28fz05pgkx5bslib4lq.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;That’s the only way I know how to learn. &lt;/p&gt;

&lt;p&gt;I want to sincerely thank my mentors, Pravin Mishra, Praveen Pandey, Abhishek Makwana, Mobarak Hosen, Onuche Paul and Nkechi Anna Ahanonye&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps #Docker #MultiStageBuild #Nginx #React #AWS #EC2 #Linux #Containers #CI_CD #DMI #CloudEngineer #BuildInPublic #ShipIt
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>docker</category>
      <category>react</category>
    </item>
    <item>
      <title>Deployment of a Static Website on AWS EC2 Using Docker</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Mon, 27 Apr 2026 23:15:31 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/deployment-of-a-static-website-on-aws-ec2-using-docker-5ei0</link>
      <guid>https://dev.to/duru_julietchinenye_349f/deployment-of-a-static-website-on-aws-ec2-using-docker-5ei0</guid>
      <description>&lt;p&gt;This week, I took a major step forward in my DevOps journey. I deployed a fully live static website to the internet using AWS EC2, Docker, and Nginx. Seeing my work accessible at &lt;a href="http://35.176.161.171" rel="noopener noreferrer"&gt;http://35.176.161.171&lt;/a&gt; was a proud moment.&lt;/p&gt;

&lt;p&gt;I built the entire setup from scratch:&lt;br&gt;
• Launched an Ubuntu 22.04 EC2 instance&lt;br&gt;
• Configured Security Groups for SSH (22) and HTTP (80)&lt;br&gt;
• Automated server setup using cloud-init (User Data)&lt;br&gt;
• Installed and configured Docker&lt;br&gt;
• Cloned a static website from GitHub&lt;br&gt;
• Wrote a custom Docker file using Nginx, Alpine&lt;br&gt;
• Built the Docker image and ran the container on port 80&lt;br&gt;
• Accessed the live site from the browser fully deployed and running &lt;/p&gt;

&lt;p&gt;This project helped me deepen my understanding of real DevOps workflows:&lt;br&gt;
• How cloud-init automates provisioning at boot&lt;br&gt;
• The difference between a Docker image and a container&lt;br&gt;
• How to write a Docker file and serve static files with Nginx&lt;br&gt;
• How to troubleshoot real-world issues like port conflicts and container name clashes&lt;br&gt;
• How Docker, Nginx, and cloud infrastructure integrate in a practical DevOps pipeline&lt;/p&gt;

&lt;p&gt;Tech Stack&lt;br&gt;
AWS EC2 | Ubuntu 22.04 | Docker | Nginx | cloud-init | GitHub &lt;br&gt;
Each issue forced me to slow down, read the error, understand the root cause, and fix it. That’s the real DevOps mindset: build, break, debug, learn, repeat.&lt;/p&gt;

&lt;p&gt;I want to sincerely thank my mentors, Pravin Mishra, Praveen Pandey, Abhishek Makwana, Mobarak Hosen, Onuche Paul and Nkechi Anna Ahanonye&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps #AWS #Docker #Nginx #CloudComputing #EC2 #Linux #DMI  #LearningInPublic #CloudEngineer #Containers
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f2lo82hn23n90vd6e3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f2lo82hn23n90vd6e3g.png" alt=" " width="800" height="415"&gt;&lt;/a&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%2Fi21czvoh6dfm5w9w2yl3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi21czvoh6dfm5w9w2yl3.png" alt=" " width="799" height="439"&gt;&lt;/a&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%2F347fsldlu70fk02hyqcf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F347fsldlu70fk02hyqcf.png" alt=" " width="800" height="510"&gt;&lt;/a&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%2Fksd8bk84yvt17hszz3bh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksd8bk84yvt17hszz3bh.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>devops</category>
      <category>docker</category>
    </item>
    <item>
      <title>production-grade deployment of The Epic Book, a Node.js + MySQL web application on AWS</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Thu, 23 Apr 2026 15:45:25 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/production-grade-deployment-of-the-epic-book-a-nodejs-mysql-web-application-on-aws-5ghi</link>
      <guid>https://dev.to/duru_julietchinenye_349f/production-grade-deployment-of-the-epic-book-a-nodejs-mysql-web-application-on-aws-5ghi</guid>
      <description>&lt;p&gt;Just deployed a full-stack web application to AWS using Terraform + Ansible.&lt;/p&gt;

&lt;p&gt;As part of my cloud engineering journey, I completed a &lt;/p&gt;

&lt;p&gt;Here's what I built from scratch:&lt;/p&gt;

&lt;p&gt;Infrastructure (Terraform)&lt;br&gt;
• VPC, public subnet, internet gateway, and route tables&lt;br&gt;
• Security groups with control&lt;br&gt;
• Ubuntu 22.04 EC2 instance with SSH key authentication&lt;br&gt;
• All infrastructure destroyed and recreated in minutes; that’s the power of IaC&lt;/p&gt;

&lt;p&gt;Configuration Management (Ansible)&lt;br&gt;
• 3 clean, reusable roles: common → nginx → epicbook&lt;br&gt;
• Nginx configured as a reverse proxy in front of Node.js&lt;br&gt;
• MySQL provisioned and configured automatically&lt;br&gt;
• PM2 process manager keeping the app alive&lt;br&gt;
• Fully idempotent: re-running the playbook shows zero failures&lt;/p&gt;

&lt;p&gt;Result: A live, browser-accessible web app served over HTTP with nginx proxying to a Node.js backend connected to MySQL, all automated, repeatable, and production-ready.&lt;/p&gt;

&lt;p&gt;Challenges I overcame:&lt;br&gt;
• The app wasn't a static site; it had to switch from file serving to a full reverse proxy setup&lt;br&gt;
• MySQL authentication required, matching the app's config exactly&lt;br&gt;
• Port conflicts on re-runs taught me the importance of clean state management in automation&lt;/p&gt;

&lt;p&gt;What this taught me: Real deployments are never just "run a script, and it works." They require understanding full-stack networking, web servers, application runtimes, databases, and process management and how they all connect.&lt;/p&gt;

&lt;p&gt;This is exactly how production engineering teams operate, and I'm proud to have built it end-to-end. &lt;br&gt;
Tech used: AWS EC2 · Terraform · Ansible · Nginx · Node.js · MySQL · PM2 · Ubuntu 22.04&lt;br&gt;
I want to sincerely thank my mentors, Pravin Mishra, Praveen Pandey, Abhishek Makwana ,Mobarak Hosen,Onuche Paul and Nkechi Anna Ahanonye&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps #AWS #Terraform #Ansible #CloudEngineering #IaC #Linux #Nginx #NodeJS #MySQL #LearningInPublic #CloudComputing #Infrastructure
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>node</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Deployment of a Mini Finance Dashboard using Terraform and Ansible</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Thu, 23 Apr 2026 15:03:38 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/deployment-of-a-mini-finance-dashboard-using-terraform-and-ansible-497j</link>
      <guid>https://dev.to/duru_julietchinenye_349f/deployment-of-a-mini-finance-dashboard-using-terraform-and-ansible-497j</guid>
      <description>&lt;p&gt;Deployed the Mini Finance Dashboard this week using Terraform and Ansible. &lt;/p&gt;

&lt;p&gt;Here is what I built:&lt;br&gt;
Provisioned an AWS EC2 instance using Terraform &lt;br&gt;
Created VPC, Subnet, Internet Gateway and Security Groups as code &lt;br&gt;
Configured passwordless SSH access with ED25519 keys &lt;br&gt;
Used Ansible roles to install Nginx, Node.js, MySQL &lt;br&gt;
Deployed the Mini Finance Dashboard, fully accessible from any browser &lt;br&gt;
Verified the site loads live with HTTP 200 ✓&lt;br&gt;
The best part? The entire infrastructure is code. I can destroy it and rebuild it in minutes. That is the power of doing it right.&lt;br&gt;
Terraform handles the infrastructure. Ansible handles the configuration. &lt;br&gt;
Real problems I hit and pushed through:&lt;br&gt;
Nginx returned 403. The app is Node.js, not static files. Reconfigured as a full reverse proxy and kept moving&lt;/p&gt;

&lt;p&gt;MySQL auth was failing; credentials had to match the app config exactly. Fixed native password authentication and moved on&lt;/p&gt;

&lt;p&gt;I want to sincerely thank my mentors, Pravin Mishra, Praveen Pandey, Abhishek Makwana ,Mobarak Hosen,Onuche Paul and Nkechi Anna Ahanonye&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps #AWS #Cloud #Terraform #Ansible #Linux #Ubuntu #NodeJS #MySQL #Nginx #MiniFinanceDashboard #Infrastructure #ShipIt #CareerGrowth #Tech
&lt;/h1&gt;

</description>
      <category>automation</category>
      <category>aws</category>
      <category>devops</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Deploying a full, three-tier book review web app on Azure</title>
      <dc:creator>Duru Juliet Chinenye</dc:creator>
      <pubDate>Mon, 16 Mar 2026 05:52:00 +0000</pubDate>
      <link>https://dev.to/duru_julietchinenye_349f/deploying-a-full-three-tier-book-review-web-app-on-azure-j3h</link>
      <guid>https://dev.to/duru_julietchinenye_349f/deploying-a-full-three-tier-book-review-web-app-on-azure-j3h</guid>
      <description>&lt;p&gt;I designed and deployed one of my most hands-on cloud engineering projects: deploying a secure, scalable book review application using a full three-tier architecture on Microsoft Azure.&lt;br&gt;
But the real growth came from the challenge I hit along the way and how I solved it.&lt;/p&gt;

&lt;p&gt;The Problem I Encountered&lt;br&gt;
After deploying the backend (Node.js/Express) for the book review app in private subnets, the frontend couldn’t reach it.&lt;br&gt;
The internal load balancer was healthy, and the backend was running on port 3001, but every request from the frontend timed out.&lt;br&gt;
Everything looked correct: subnets, routes, health probes, VM status—yet the app simply wouldn’t connect.&lt;/p&gt;

&lt;p&gt;How I Solved It&lt;br&gt;
The issue turned out to be a Network Security Group (NSG) misconfiguration.&lt;br&gt;
The App Tier NSG wasn’t allowing inbound traffic from the Web Tier on port 3001, even though the internal load balancer was configured correctly.&lt;/p&gt;

&lt;p&gt;I fixed it by:&lt;br&gt;
•Updating the App Tier NSG&lt;br&gt;
•Allowing inbound traffic only from the Web Tier NSG&lt;br&gt;
•Opening port 3001 specifically for internal communication&lt;br&gt;
As soon as that rule was added, the Book Review app connected instantly.&lt;br&gt;
This experience reinforced a key lesson: Azure NSGs don’t assume trust; you must define it explicitly.&lt;/p&gt;

&lt;p&gt;What I Built&lt;br&gt;
Here’s the full architecture behind the book review app:&lt;br&gt;
Frontend (Web Tier)&lt;br&gt;
•Next.js served via Nginx on Ubuntu&lt;br&gt;
•Behind a Public Azure Load Balancer&lt;br&gt;
•Lives in public subnets only&lt;br&gt;
Backend (App Tier)&lt;br&gt;
•Node.js/Express API on port 3001&lt;br&gt;
•Deployed in private subnets&lt;br&gt;
•Accessible only through an Internal Load Balancer&lt;br&gt;
Database (Data Tier)&lt;br&gt;
•Azure Database for MySQL Flexible Server&lt;br&gt;
•Multi-AZ high availability&lt;br&gt;
•Read replica for scaling&lt;br&gt;
•NSGs allowing only App Tier traffic on port 3306&lt;br&gt;
Networking&lt;br&gt;
•Custom VNet (10.0.0.0/16)&lt;br&gt;
•6 subnets across 2 zones&lt;br&gt;
•Strict NSGs per tier&lt;br&gt;
•No public exposure for backend or database&lt;/p&gt;

&lt;p&gt;I want to sincerely thank my mentors,  Pravin Mishra, Praveen Pandey, Abhishek Makwana and Mobarak Hosen&lt;/p&gt;

&lt;h1&gt;
  
  
  CloudEngineering #Azure #DevOps #Nextjs #Nodejs #MySQL #ThreeTierArchitecture #CloudSecurity #AzureNetworking #LoadBalancing #FullStack #CloudProjects #TechJourney #MicrosoftAzure #CloudArchitect #BookReviewApp #DuruBuildsCloud
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrmoy4d1givnciz3ln5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrmoy4d1givnciz3ln5e.png" alt=" " width="800" height="532"&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%2F1rsqhr36ht7efnt465my.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rsqhr36ht7efnt465my.png" alt=" " width="712" height="292"&gt;&lt;/a&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%2Fro8e6d72i3xkyzaila77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fro8e6d72i3xkyzaila77.png" alt=" " width="772" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>azure</category>
      <category>devops</category>
      <category>networking</category>
    </item>
  </channel>
</rss>
