<?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: Morodolu Oluwafikunayomi</title>
    <description>The latest articles on DEV Community by Morodolu Oluwafikunayomi (@fikalz).</description>
    <link>https://dev.to/fikalz</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%2F3231089%2Ff85b9080-1525-414b-8d59-1a4ce0b2c8f0.png</url>
      <title>DEV Community: Morodolu Oluwafikunayomi</title>
      <link>https://dev.to/fikalz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fikalz"/>
    <language>en</language>
    <item>
      <title>The Fastest Way to Deploy Any Website Template on CentOS (After SSH)</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Wed, 12 Nov 2025 08:53:21 +0000</pubDate>
      <link>https://dev.to/fikalz/the-fastest-way-to-deploy-any-website-template-on-centos-after-ssh-1jdn</link>
      <guid>https://dev.to/fikalz/the-fastest-way-to-deploy-any-website-template-on-centos-after-ssh-1jdn</guid>
      <description>&lt;p&gt;This is part 2 to my previous post, you know that feeling when you finally SSH into your VirtualBox or Vagrant box, and now you have to set up a whole website manually?&lt;br&gt;
Install this, unzip that, copy files, restart Apache, fix permissions… rinse and repeat.&lt;br&gt;
Yeah, we’re not doing that today.&lt;br&gt;
Instead, I’ll show you how to automate the entire process&lt;/p&gt;

&lt;p&gt;What You’ll Need&lt;/p&gt;

&lt;p&gt;Before we dive in, make sure you’ve got the basics ready:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You’ve already SSH’d into your CentOS box, for example:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; vagrant ssh

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

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You’re inside your working directory (I’ll use /home/vagrant/server for this tutorial).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apache is installed and running. If not, quickly do:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo yum install httpd -y
 sudo systemctl enable httpd
sudo systemctl start httpd

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

&lt;/div&gt;


&lt;p&gt;That’s it let’s automate the rest.&lt;br&gt;
&lt;strong&gt;Step 1: Create the Script&lt;/strong&gt;&lt;br&gt;
Once you’re inside your SSH terminal, move into your server folder and create a script file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~/server
touch scripting.sh
chmod +x scripting.sh
vi scripting.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;If vi doesn’t work, you can use nano or even cat &amp;gt; scripting.sh.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: The Automation Script&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash

echo "Installing wget and unzip..."
sudo yum install wget unzip -y

# Ask the user for a template URL
read -p "Enter the URL of your website template (.zip): " TEMPLATE_URL

echo "Downloading your template..."
wget $TEMPLATE_URL -O website_template.zip

echo "Extracting website files..."
unzip -o website_template.zip -d ~/server/

# Automatically detect extracted folder
EXTRACTED_DIR=$(find ~/server -maxdepth 1 -type d -name "templatemo*" -o -name "html*" | head -n 1)

if [ -z "$EXTRACTED_DIR" ]; then
  echo "❌ Could not find extracted folder. Please check manually."
  exit 1
fi

echo "Deploying files to /var/www/html..."
sudo cp -r $EXTRACTED_DIR/* /var/www/html/

echo "Restarting Apache..."
sudo systemctl restart httpd
sudo systemctl enable httpd

IP=$(hostname -I | awk '{print $1}')
echo "✅ Done! Visit your site at: http://$IP/"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit (in vi, that’s ESC + :wq).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Run It&lt;/strong&gt;&lt;br&gt;
Now run your shiny new automation script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./scripting.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’ll ask you for a template URL — just paste in one of these:&lt;/p&gt;

&lt;p&gt;Example Template URLs&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Templatemo 3D Coverflow&lt;/li&gt;
&lt;li&gt;BootstrapMade Arsha Template&lt;/li&gt;
&lt;li&gt;HTML5UP Phantom Template&lt;/li&gt;
&lt;li&gt;Or grab any .zip link from your favorite site:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://templatemo.com" rel="noopener noreferrer"&gt;https://templatemo.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bootstrapmade.com" rel="noopener noreferrer"&gt;https://bootstrapmade.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://html5up.net" rel="noopener noreferrer"&gt;https://html5up.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Once the script runs, it’ll:&lt;/li&gt;
&lt;li&gt;Install missing tools&lt;/li&gt;
&lt;li&gt;Download your zip file&lt;/li&gt;
&lt;li&gt;Unzip it into your server folder&lt;/li&gt;
&lt;li&gt;Copy everything into /var/www/html/&lt;/li&gt;
&lt;li&gt;Restart Apache&lt;/li&gt;
&lt;li&gt;And show your local IP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short — it does all the boring stuff for you.&lt;/p&gt;

&lt;p&gt;After it finishes, you’ll see something like this:&lt;br&gt;
 Done! Visit your site at: &lt;a href="http://192.168.33.10/" rel="noopener noreferrer"&gt;http://192.168.33.10/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>From ThemeWagon to Live Site: Hosting a Free HTML Template on Your Local Apache Server Using Vagrant + Git Bash</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Tue, 04 Nov 2025 15:16:37 +0000</pubDate>
      <link>https://dev.to/fikalz/from-themewagon-to-live-site-hosting-a-free-html-template-on-your-local-apache-server-using-272i</link>
      <guid>https://dev.to/fikalz/from-themewagon-to-live-site-hosting-a-free-html-template-on-your-local-apache-server-using-272i</guid>
      <description>&lt;p&gt;Ever downloaded a beautiful free template from ThemeWagon&lt;br&gt;
 and thought,&lt;br&gt;
“Okay... now how do I actually host this like a real website?”&lt;/p&gt;

&lt;p&gt;That’s where this guide comes in.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through hosting a free HTML template on your own local Apache server, running inside a Vagrant virtual machine — all from your Git Bash terminal.&lt;/p&gt;

&lt;p&gt;What You’ll Need&lt;/p&gt;

&lt;p&gt;Before we start, make sure you’ve got these installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧱 VirtualBox(for running the VM)&lt;/li&gt;
&lt;li&gt;📦 Vagrant&lt;/li&gt;
&lt;li&gt;💻 Git Bash(Windows users)&lt;/li&gt;
&lt;li&gt;🧾 Any HTML template (download from ThemeWagon)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No coding required &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Create a Project Folder and Initialize Vagrant&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open Git Bash and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pwd(this is to know what directory you are on)
cd "directory, either downloads or documents or desktop"
mkdir ~/myserver
cd ~/myserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now initialize your Ubuntu box:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vagrant init ubuntu/jammy64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but if you wish for any other OS check out:&lt;br&gt;
&lt;a href="https://portal.cloud.hashicorp.com/vagrant/discover" rel="noopener noreferrer"&gt;https://portal.cloud.hashicorp.com/vagrant/discover&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This creates a Vagrantfile in your folder. It’s basically your VM’s configuration file — where you’ll define memory, CPU, and network settings.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Edit Your Vagrantfile Using Vim&lt;/strong&gt;&lt;br&gt;
Inside Git Bash, while you are in the same directory open the Vagrantfile:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;This will open the file in Vim editor.&lt;br&gt;
Press i to enter insert mode now you can start typing or editing.&lt;/em&gt;&lt;br&gt;
thereafter to Enable Private or Public Network Access, Scroll down to find these lines:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  config.vm.network "private_network", ip: "192.168.33.10"
&lt;/h1&gt;
&lt;h1&gt;
  
  
  config.vm.network "public_network"
&lt;/h1&gt;

&lt;p&gt;Uncomment one of them depending on what you want:&lt;br&gt;
Use private network if you just want to access your site locally:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config.vm.network "private_network", ip: "192.168.33.10"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;do note kindly keep the ip address here somewhere or be written down as it is useful later on, you can also change the numbers maybe like 192.168.40.15&lt;/em&gt;&lt;br&gt;
Or use forwarded port (recommended for beginners):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config.vm.network "forwarded_port", guest: 80, host: 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;This means anything on port 80 (inside the VM) will be visible on your local machine at &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;.&lt;/em&gt;&lt;br&gt;
lastly to Allocate More RAM and CPUs&lt;br&gt;
Find and uncomment this section:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  config.vm.provider "virtualbox" do |vb|
&lt;/h1&gt;
&lt;h1&gt;
  
  
  vb.memory = "1024"
&lt;/h1&gt;
&lt;h1&gt;
  
  
  end
&lt;/h1&gt;

&lt;p&gt;Now edit it to give your VM more resources:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config.vm.provider "virtualbox" do |vb|
  vb.memory = "2048"     # 2GB RAM
  vb.cpus = 2            # 2 CPU cores
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;unless you want graphical user interface i don't recommend uncomment the &lt;br&gt;
GUI line of syntax, and any line with double # is an actual comment.&lt;/p&gt;

&lt;p&gt;Once done, press:&lt;br&gt;
Esc&lt;br&gt;
Type &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;:wq&lt;br&gt;
Hit Enter&lt;br&gt;
That saves and exits Vim.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Boot Up the Virtual Machine&lt;/strong&gt;&lt;br&gt;
Now it’s time to start your virtual server:&lt;br&gt;
type in&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Vagrant will download the Ubuntu image, set up the VM, and start it automatically.&lt;br&gt;
The first run takes a few minutes — but once complete, you’ll see your box running.&lt;br&gt;
Then, log in to it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vagrant ssh

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

&lt;/div&gt;



&lt;p&gt;You’re now inside your Ubuntu server as the vagrant user&lt;br&gt;
to test you can type in:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;this should return vagrant&lt;br&gt;
&lt;strong&gt;Step 4 — Install Apache Web Server&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;while having different types os linux OS it is important to know the name of the apache server and which ubuntu supports it&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Install Apache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install apache2 -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start and enable it:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Test it!&lt;br&gt;
On your browser, go to the ip address you  have in the private ip address in the vagrant file.&lt;br&gt;
You should see “Apache2 Ubuntu Default Page”.&lt;br&gt;
Congrats — your web server works&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — Upload and Unzip Your ThemeWagon Template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Inside your server, make a folder to hold your website:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir ~/server
cd ~/server
Now using wget (the themewagon download link)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;_the way i usually get is by going to themewagon, inspecting the page, going to network and clicking on the template download buttonwe should see the template name, it should be :http://..... _&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkrrrtvuv7r7b6ct49o4z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkrrrtvuv7r7b6ct49o4z.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;so by doing the same you should arrive where i am, copy the link&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then unzip it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;unzip (the foldername)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;incase you have an error code about unzip not been part of the OS  package use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install unzip -y
unzip foldername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 6 — Move Files to Apache’s Web Root&lt;/strong&gt;&lt;br&gt;
Copy everything from your extracted folder into Apache’s serving directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo cp -r ~/server/neural_glass/templatemo_597_neural_glass/* /var/www/html/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Apache so changes apply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl restart apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 7 — Visit Your Website!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, open your browser and head to:&lt;br&gt;
your private ip address&lt;br&gt;
incase your forgotten your ip address:&lt;br&gt;
Check your server’s IP:&lt;/p&gt;

&lt;p&gt;If you used a private network instead of port forwarding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ip addr show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for something like:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;inet 192.168.33.10/24&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reboot or Halt Your Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To stop:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;To start again:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;To destroy and rebuild (when experimenting):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
vagrant destroy -f &amp;amp;&amp;amp; vagrant up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this guide helped you, drop a ❤️ on DEV.to and comment how your first hosted template went or what how i can improve on deploying faster &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Spin Up, Explore, and Destroy: A Complete Beginner’s Guide to Using Vagrant with Ubuntu (Visual Walkthrough)</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Sat, 11 Oct 2025 15:27:46 +0000</pubDate>
      <link>https://dev.to/fikalz/spin-up-explore-and-destroy-a-complete-beginners-guide-to-using-vagrant-with-ubuntu-visual-37k7</link>
      <guid>https://dev.to/fikalz/spin-up-explore-and-destroy-a-complete-beginners-guide-to-using-vagrant-with-ubuntu-visual-37k7</guid>
      <description>&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
Before we begin, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vagrant installed → Download here&lt;/li&gt;
&lt;li&gt;VirtualBox (or any supported provider)&lt;/li&gt;
&lt;li&gt;A terminal or command prompt&lt;/li&gt;
&lt;li&gt;Basic command-line familiarity
That’s it! Let’s get started.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a New Vagrant Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, create a folder for your new virtual machine setup and initialize it with the Ubuntu box:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir vagrant-ubuntu
cd vagrant-ubuntu
vagrant init ubuntu/jammy64
vi vagrant #this is to edit the file, 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;once you opened the file make sure to uncomment the private network line which contains the public address of the os and the public address line&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;This creates a file called Vagrantfile — the heart of your configuration&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 2: Configure the Vagrantfile&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open the Vagrantfile with your favorite editor and tweak the settings.&lt;br&gt;
You can adjust CPU, memory, and network configurations easily.&lt;/p&gt;

&lt;p&gt;Example configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/jammy64"

  # Optional: forward host port 8080 to guest port 80
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Provider-specific settings
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
  end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Step 3: Start the Virtual Machine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once your configuration is ready, start the VM using:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vagrant up&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This command downloads the Ubuntu box (if it’s your first time) and boots it up.&lt;br&gt;
You’ll see messages as Vagrant connects to VirtualBox and starts provisioning the machine.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4: Connect to Your Virtual Machine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once it’s running, you can log into your Ubuntu VM:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;If everything went well, you’ll see the Ubuntu welcome message, along with system stats and login info.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Run Basic Commands Inside the VM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that you’re inside, you can explore and test basic commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;whoami           # should print 'vagrant'
mkdir testfile
touch textfile.txt
ls
rm textfile.txt
rmdir testfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also install packages, configure software, or run a web app — it’s your sandboxed Linux environment!&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 6: Stop and Destroy the VM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you’re done experimenting, you can safely shut down or completely remove the VM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vagrant halt       # stops the virtual machine
vagrant destroy    # permanently deletes the VM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This frees up your system resources and ensures a clean slate for next time.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;This workflow is especially powerful for testing backend apps, DevOps scripts, or server configurations safely. Once you’re comfortable, try automating it with provisioning tools like Ansible or deploying pre-configured images.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>learning</category>
      <category>devops</category>
      <category>devex</category>
    </item>
    <item>
      <title>AWS Networking Fundamentals: Building a Secure Cloud Architecture</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Sun, 31 Aug 2025 18:23:59 +0000</pubDate>
      <link>https://dev.to/fikalz/aws-networking-fundamentals-building-a-secure-cloud-architecture-50jc</link>
      <guid>https://dev.to/fikalz/aws-networking-fundamentals-building-a-secure-cloud-architecture-50jc</guid>
      <description>&lt;h1&gt;
  
  
  AWS Networking Explained Like Building a Neighborhood 🏡
&lt;/h1&gt;

&lt;p&gt;If you’re new to AWS networking, it can feel like alphabet soup: &lt;strong&gt;VPCs, Subnets, IGWs, NATs, Route Tables, SGs, NACLs&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;But here’s the good news: it’s easier to understand if you think of it like &lt;strong&gt;building a secure neighborhood&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;By the end of this post, you’ll:&lt;br&gt;&lt;br&gt;
  Understand AWS networking through real-world analogies&lt;br&gt;&lt;br&gt;
  Know the difference between gateways, firewalls, and route tables&lt;br&gt;&lt;br&gt;
  Build your own &lt;strong&gt;secure cloud community&lt;/strong&gt; step by step  &lt;/p&gt;


&lt;h2&gt;
  
  
  1. VPC → Your Gated Community
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;VPC (Virtual Private Cloud)&lt;/strong&gt; is your private section of AWS.  &lt;/p&gt;

&lt;p&gt;Imagine buying land inside a gated estate. You decide how big it is, where the streets go, and who’s allowed in.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Isolated from other customers.
&lt;/li&gt;
&lt;li&gt;You choose the boundaries (IP ranges).
&lt;/li&gt;
&lt;li&gt;You control traffic in and out.
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  2. Subnets → Streets in Your Community
&lt;/h2&gt;

&lt;p&gt;Inside your VPC, you divide land into &lt;strong&gt;subnets&lt;/strong&gt; (streets).  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public Subnet&lt;/strong&gt; → open for visitors (shops, restaurants, web servers).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private Subnet&lt;/strong&gt; → hidden residential area (databases, backend).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pro tip: Always spread them across different availability zones so your app stays online even if one zone fails.  &lt;/p&gt;

&lt;p&gt;![Insert subnet diagram here]&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Internet Gateway → The Main Gate
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Internet Gateway (IGW)&lt;/strong&gt; is the guarded entrance/exit of your estate.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lets outsiders visit your public servers.
&lt;/li&gt;
&lt;li&gt;Lets your public servers reach the internet.
&lt;/li&gt;
&lt;li&gt;Scales automatically (AWS manages it).
&lt;/li&gt;
&lt;/ul&gt;

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


&lt;h2&gt;
  
  
  4. NAT Gateway → The Secure Mail Slot
&lt;/h2&gt;

&lt;p&gt;Private residents (databases, backend servers) need the internet too—like downloading security updates. But you don’t want strangers knocking on their doors.  &lt;/p&gt;

&lt;p&gt;That’s what the &lt;strong&gt;NAT Gateway&lt;/strong&gt; is for:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It allows private instances to send requests out.
&lt;/li&gt;
&lt;li&gt;Outsiders can’t start conversations with them.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Analogy: a one-way mail slot.  &lt;/p&gt;

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


&lt;h2&gt;
  
  
  5. Route Tables → The Traffic GPS
&lt;/h2&gt;

&lt;p&gt;How does data know where to go?  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public Subnet → IGW&lt;/strong&gt; (for internet access).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private Subnet → NAT Gateway&lt;/strong&gt; (outbound only).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like street signs and GPS guiding cars to the right road.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjtk31m9i5q2dkbymmg9.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%2Fzjtk31m9i5q2dkbymmg9.jpg" alt=" " width="225" height="225"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Elastic IP →  think of it as your  Fixed house Address
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;Elastic IP (EIP)&lt;/strong&gt; is a permanent public address.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Doesn’t change if you restart your server.
&lt;/li&gt;
&lt;li&gt;Useful for NAT Gateways and critical servers.
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  7. Security Groups → Your Bodyguards
&lt;/h2&gt;

&lt;p&gt;Every house/server gets its own &lt;strong&gt;bodyguard (SG)&lt;/strong&gt;.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deny everything by default.
&lt;/li&gt;
&lt;li&gt;Example: “Allow web visitors (port 80, 443) but only let me in via SSH.”
&lt;/li&gt;
&lt;li&gt;Stateful: Replies are automatically allowed.
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🚔 8. Network ACLs → The Street Patrol
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;NACL&lt;/strong&gt; is the patrol car for the whole street.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Controls traffic before it reaches houses.
&lt;/li&gt;
&lt;li&gt;Stateless: you must define both inbound &amp;amp; outbound rules.
&lt;/li&gt;
&lt;li&gt;Can allow &lt;em&gt;and&lt;/em&gt; deny traffic (SGs can only allow).
&lt;/li&gt;
&lt;/ul&gt;

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


&lt;h2&gt;
  
  
  Putting It All Together
&lt;/h2&gt;

&lt;p&gt;So when you launch a simple website with a database:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VPC = your gated community.
&lt;/li&gt;
&lt;li&gt;Subnets = public (web server) + private (database).
&lt;/li&gt;
&lt;li&gt;IGW = main entrance gate.
&lt;/li&gt;
&lt;li&gt;NAT Gateway = one-way mail slot.
&lt;/li&gt;
&lt;li&gt;Route Tables = GPS for data traffic.
&lt;/li&gt;
&lt;li&gt;Elastic IP = permanent address.
&lt;/li&gt;
&lt;li&gt;Security Groups = bodyguards at each house.
&lt;/li&gt;
&lt;li&gt;NACLs = patrol cars on each street.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Result: Visitors can access your web server.&lt;br&gt;&lt;br&gt;
The web server talks to the database.&lt;br&gt;&lt;br&gt;
The database can fetch updates from the internet—but no hacker can reach it directly.  &lt;/p&gt;


&lt;h1&gt;
  
  
  Hands-On Lab: Build Your Own AWS Neighborhood
&lt;/h1&gt;

&lt;p&gt;Now that you’ve got the concepts, let’s &lt;strong&gt;build it step by step&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  🔹 Phase 1: Foundation – Setting Up Your Land
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a VPC (Your Gated Community)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Go to: &lt;strong&gt;AWS Console → VPC → Your VPCs → Create VPC&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;My-Secure-VPC&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;IPv4 CIDR: &lt;code&gt;10.0.0.0/16&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Subnets (Your Streets)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Public Subnet: &lt;code&gt;public-subnet-1&lt;/code&gt; → &lt;code&gt;10.0.1.0/24&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Private Subnet: &lt;code&gt;private-subnet-1&lt;/code&gt; → &lt;code&gt;10.0.2.0/24&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create an Internet Gateway (Main Gate)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;My-IGW&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Attach to &lt;code&gt;My-Secure-VPC&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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


&lt;h3&gt;
  
  
  Phase 2: Routing &amp;amp; Security
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Public Route Table (Signs for Public Street)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Destination: &lt;code&gt;0.0.0.0/0&lt;/code&gt; → Target: &lt;code&gt;Internet Gateway&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Associate with: &lt;code&gt;public-subnet-1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Security Group (Web Server’s Bodyguard)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Inbound rules:

&lt;ul&gt;
&lt;li&gt;HTTP (80) → Anywhere
&lt;/li&gt;
&lt;li&gt;HTTPS (443) → Anywhere
&lt;/li&gt;
&lt;li&gt;SSH (22) → My IP only
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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


&lt;h3&gt;
  
  
  🔹 Phase 3: NAT Gateway – Secure Mail Slot
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Allocate an Elastic IP&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create NAT Gateway&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;My-NAT-Gateway&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet: &lt;code&gt;public-subnet-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Elastic IP: (select the one created)
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Remember to create a route table for private route table&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fne0ggefguged1nid9hd9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fne0ggefguged1nid9hd9.png" alt=" " width="800" height="449"&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%2F91rimhdvpypzchoibk4o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91rimhdvpypzchoibk4o.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
it the same process we used for public route table&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Private Route Table (Signs for Private Street)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Destination: &lt;code&gt;0.0.0.0/0&lt;/code&gt; → Target: &lt;code&gt;My-NAT-Gateway&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Associate with: &lt;code&gt;private-subnet-1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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


&lt;h3&gt;
  
  
  🔹 Phase 4: Deploy Your Residents
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Launch Web Server (Public Street)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;Web-Server&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Type: &lt;code&gt;t2.micro&lt;/code&gt; (Free Tier)
&lt;/li&gt;
&lt;li&gt;Subnet: &lt;code&gt;public-subnet-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Public IP: ✅ Enabled
&lt;/li&gt;
&lt;li&gt;Security Group: &lt;code&gt;Web-Server-SG&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;User Data (auto install web server):
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; ```bash
 #!/bin/bash
 sudo dnf update -y
 sudo dnf install -y httpd
 sudo systemctl start httpd
 sudo systemctl enable httpd
 echo "&amp;lt;h1&amp;gt;Hello World from my $(hostname -f)&amp;lt;/h1&amp;gt;" &amp;gt; /var/www/html/index.html
 ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Launch Database Server (Private Street)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;DB-Server&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Type: &lt;code&gt;t2.micro&lt;/code&gt; (Free Tier)
&lt;/li&gt;
&lt;li&gt;Subnet: &lt;code&gt;private-subnet-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Public IP: ❌ Disabled
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Phase 5: Validation – Test Your Community
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test Web Server&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Web Server’s public IP in a browser → should show “Hello World”.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test Private Database Internet Access&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH into Web Server → then into DB Server (using private IP).
&lt;/li&gt;
&lt;li&gt;Run:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  curl https://checkip.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Output should be the NAT Gateway’s Elastic IP → proving secure outbound-only internet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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




&lt;h2&gt;
  
  
  Final Result
&lt;/h2&gt;

&lt;p&gt;Web Server: Accessible publicly.&lt;br&gt;&lt;br&gt;
 Database: Hidden in private subnet, still can update.&lt;br&gt;&lt;br&gt;
 Architecture: Secure, scalable, cloud-ready.  &lt;/p&gt;

&lt;p&gt;You’ve officially built a &lt;strong&gt;secure neighborhood in the cloud&lt;/strong&gt; 🏡🌐  &lt;/p&gt;




</description>
      <category>aws</category>
      <category>beginners</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>Building a Django Booking Management App with a Theme Wagon Template</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Mon, 11 Aug 2025 16:00:29 +0000</pubDate>
      <link>https://dev.to/fikalz/building-a-django-booking-management-app-with-a-theme-wagon-template-mk</link>
      <guid>https://dev.to/fikalz/building-a-django-booking-management-app-with-a-theme-wagon-template-mk</guid>
      <description>&lt;p&gt;I recently built a &lt;strong&gt;booking management system&lt;/strong&gt; using Django for the backend and &lt;strong&gt;two different dashboard templates&lt;/strong&gt; for the frontend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kopee Dashboard&lt;/strong&gt; → Used for the booking form page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Venus Dashboard&lt;/strong&gt; → Used as inspiration for the table page that displays booking records.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project allows users to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Submit bookings with &lt;strong&gt;Name, Email, Date, Time, Person&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Store bookings in a &lt;strong&gt;Django database&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;View, edit, and delete bookings from a clean dashboard table&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;custom HTML/CSS dashboards&lt;/strong&gt; to save frontend development time&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Purpose of the Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The goal was to create a professional booking management system that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lets users submit booking details easily&lt;/li&gt;
&lt;li&gt;Stores all bookings in a structured database model&lt;/li&gt;
&lt;li&gt;Displays them in a &lt;strong&gt;styled and organized table&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Uses existing dashboard themes to make the UI look polished without starting from scratch&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Frontend Templates&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Kopee Dashboard&lt;/strong&gt; (Booking Form Page)
&lt;/h3&gt;

&lt;p&gt;The booking form in my project comes directly from the &lt;strong&gt;Kopee Dashboard&lt;/strong&gt; template. I customized it slightly to match the project’s colors and form structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Venus Dashboard Inspiration&lt;/strong&gt; (Table View Page)
&lt;/h3&gt;

&lt;p&gt;For the table that lists all bookings, I took &lt;strong&gt;inspiration&lt;/strong&gt; from the &lt;strong&gt;Venus Dashboard&lt;/strong&gt; by ThemeWagon. I kept only the &lt;strong&gt;sidebar and table layout&lt;/strong&gt;, removed other widgets, and gave the table space, borders, and a readable font.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Project Structure&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;booking_project/
│── booking_app/
│   ├── templates/
│   │   ├── index.html        # Kopee-based booking form
│   │   ├── showdb.html       # Venus-inspired booking table
│   │   ├── booking_success.html
│   │   ├── correction.html
│   │   ├── delete_confirmation.html
│   ├── models.py
│   ├── views.py
│   ├── urls.py
│── booking_project/
│   ├── settings.py
│   ├── urls.py
│── manage.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Database Model&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;booking_app/models.py&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.db&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Booking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;PERSON_CHOICES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Person 1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Person 2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Person 3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;4&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Person 4&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;EmailField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TimeField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PERSON_CHOICES&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__str__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Booking by &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; at &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Views (Core Logic)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;booking_app/views.py&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.shortcuts&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;get_object_or_404&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Booking&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&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;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;Booking&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;person&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;index.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;booking_success&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;booking_success.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;showdb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;individualbooking&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Booking&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;showdb.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;individualbooking&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;individualbooking&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;updateInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_object_or_404&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Booking&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;id&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;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;updateInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;updateInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;updateInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;updateInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;updateInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;person&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;updateInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;showdb&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;correction.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;updateInfo&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;updateInfo&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;delete_contact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;booking&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_object_or_404&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Booking&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;id&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;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;booking&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;showdb&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;delete_confirmation.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;booking&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;booking&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;URLs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;booking_app/urls.py&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;

&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&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;index&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;success/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;booking_success&lt;/span&gt;&lt;span class="p"&gt;,&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;success&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;showdb&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;showdb&lt;/span&gt;&lt;span class="p"&gt;,&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;showdb&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;update/&amp;lt;int:id&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;,&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;update&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;delete_contact/&amp;lt;int:id&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delete_contact&lt;/span&gt;&lt;span class="p"&gt;,&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;delete_contact&lt;/span&gt;&lt;span class="sh"&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;h2&gt;
  
  
  &lt;strong&gt;Booking Table Template&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;showdb.html&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% raw %}
&amp;lt;tbody&amp;gt;
{% for booking in individualbooking %}
&amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;{{ booking.name }}&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;{{ booking.email }}&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;{{ booking.date }}&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;{{ booking.time }}&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;{{ booking.person }}&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;
        &amp;lt;a href="{% url 'update' booking.id %}"&amp;gt;
            &amp;lt;i class="fa-regular fa-pen-to-square"&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;/a&amp;gt;
    &amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;
        &amp;lt;a href="{% url 'delete_contact' booking.id %}"&amp;gt;
            &amp;lt;i class="fa-regular fa-trash-can"&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;/a&amp;gt;
    &amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
{% empty %}
&amp;lt;tr&amp;gt;
    &amp;lt;td colspan="7" style="text-align:center;"&amp;gt;No bookings yet&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
{% endfor %}
{% endraw %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;How to Run&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install Django:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create and configure your Django project and app.&lt;/li&gt;
&lt;li&gt;Run migrations:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py makemigrations
python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Start the server:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py runserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Visit &lt;strong&gt;&lt;code&gt;http://127.0.0.1:8000/&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By combining the &lt;strong&gt;Kopee Dashboard&lt;/strong&gt; for the form and a &lt;strong&gt;Venus Dashboard-inspired&lt;/strong&gt; layout for the table, I built a booking management system that looks professional and works efficiently—without reinventing the wheel for UI design. Django handled the backend logic perfectly, while these templates gave the project a polished frontend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full Source Code&lt;/strong&gt;: &lt;em&gt;&lt;a href="https://github.com/Fikalz/A-functioning-booking-form-with-django/tree/main" rel="noopener noreferrer"&gt;https://github.com/Fikalz/A-functioning-booking-form-with-django/tree/main&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Here are some of the images of the site&lt;/p&gt;

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

</description>
      <category>webdev</category>
      <category>python</category>
      <category>backenddevelopment</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Your First Django Database Write: A Step-by-Step Walkthrough</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Sun, 03 Aug 2025 11:14:48 +0000</pubDate>
      <link>https://dev.to/fikalz/your-first-django-database-write-a-step-by-step-walkthrough-4hi6</link>
      <guid>https://dev.to/fikalz/your-first-django-database-write-a-step-by-step-walkthrough-4hi6</guid>
      <description>&lt;p&gt;When learning Django, one of the most powerful things you'll discover is how effortlessly it lets you interact with databases using models. In this guide, I’ll walk you through how to write to a database in Django using real examples, no steps skipped!&lt;/p&gt;

&lt;p&gt;Whether you're just starting or you’re working on a mini project, this article will help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up your virtual environment&lt;/li&gt;
&lt;li&gt;Install Django&lt;/li&gt;
&lt;li&gt;Start a project and app&lt;/li&gt;
&lt;li&gt;Create and configure a model&lt;/li&gt;
&lt;li&gt;Run the server and interact with the database
&lt;strong&gt;Step 1: Set Up Your Environment:&lt;/strong&gt;
On my previous post on python i showed the walkthrough on the creation and interacting with django,  but first, create a new folder for your project, then open your terminal or command prompt inside that folder.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m venv venvname
cd venvname\Scripts
activate.bat
cd ../..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;em&gt;💡 Note: venvname can be any name for your virtual environment.&lt;/em&gt;&lt;br&gt;
Once activated, install Django:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m pip install django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see Django and its dependencies installing without issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create Your Django Project and App&lt;/strong&gt;&lt;br&gt;
Next, use the Django CLI to set up your project and an app inside it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;django-admin startproject connectdb .
django-admin startapp dbapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Make sure your structure looks like this&lt;br&gt;
djangopractice/&lt;br&gt;
├── connectdb/&lt;br&gt;
├── dbapp/&lt;br&gt;
├── venvname/&lt;br&gt;
├── manage.py&lt;br&gt;
in the root folder in your file explorer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create Your Model&lt;/strong&gt;&lt;br&gt;
Now open dbapp/models.py and define your model class. For this example, `I created a Contacts model:&lt;br&gt;
from django.db import models&lt;/p&gt;

&lt;p&gt;class Contacts(models.Model):&lt;br&gt;
    firstname = models.CharField(max_length=100)&lt;br&gt;
    lastname = models.CharField(max_length=100)&lt;br&gt;
    age = models.IntegerField()&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def __str__(self):
    return self.firstname`
&lt;/code&gt;&lt;/pre&gt;

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

&lt;p&gt;&lt;em&gt;This will let Django know you want a table in the database called Contacts, with firstname, lastname, and age fields.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Connect to the Database Using Django Shell&lt;/strong&gt;&lt;br&gt;
you can use the django shell but i use the command prompt for this, open a new command prompt and type in one line after the other.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd downloads\djangopractice\venvname\Scripts
activate.bat
cd ../..
python manage.py makemigrations
python manage.py migrate
python manage.py shell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Step 5: Write to the Database&lt;/strong&gt;&lt;br&gt;
Inside the shell, you can import your model and start creating records. Here's how:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# First, import the model
from dbapp.models import Contacts

# Then, create a new instance
contact = Contacts(firstname='John', lastname='Doe', age=28)

# Save it to the database
contact.save()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it! 🎉 You've just written to your database.&lt;br&gt;
You can verify it by retrieving all records by&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Contacts.objects.all()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;In my next article, I’ll show you how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Register your models with the Django admin&lt;/li&gt;
&lt;li&gt;Create a superuser&lt;/li&gt;
&lt;li&gt;Use Django’s powerful built-in admin interface to manage data visually
if you have any question or contribution ask in the comment i will always respond &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>backenddevelopment</category>
      <category>python</category>
      <category>django</category>
    </item>
    <item>
      <title>Load Balancing in AWS: Deliver High Availability with Smart Traffic Distribution</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Tue, 29 Jul 2025 07:13:55 +0000</pubDate>
      <link>https://dev.to/fikalz/load-balancing-in-aws-deliver-high-availability-with-smart-traffic-distribution-edm</link>
      <guid>https://dev.to/fikalz/load-balancing-in-aws-deliver-high-availability-with-smart-traffic-distribution-edm</guid>
      <description>&lt;p&gt;In today's cloud-native world, users expect applications to be fast, reliable, and always available. Whether it's a web app, an API, or a containerized service, your infrastructure needs to be able to handle changing traffic loads without breaking under pressure.&lt;br&gt;
That’s where load balancing comes in — and in AWS, Amazon Web Services (AWS), Elastic Load Balancing (ELB) is a fully managed service designed to automatically distribute incoming traffic across multiple targets such as EC2 instances, containers, and IP addresses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Load Balancing?&lt;/strong&gt;&lt;br&gt;
Load balancing is the process of distributing incoming network traffic across multiple backend resources. This prevents any single resource from becoming a bottleneck, thereby improving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Availability&lt;/li&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Fault tolerance&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance&lt;br&gt;
&lt;strong&gt;Types of Load Balancers in AWS&lt;/strong&gt;&lt;br&gt;
AWS offers four types of load balancers under the Elastic Load Balancing (ELB) service:&lt;br&gt;
But before that there is something called OSI model( Open Systems Interconnection model), it is a conceptual framework that standardizes how computer systems communicate over a network, it operates at a seven layer framework, which are &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;physical&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;datalink&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;network&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;transport&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;session&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;presentation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;application&lt;br&gt;
Depending on what your app needs, AWS offers four types of load balancers. Here's a quick overview and which layer they operate at:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Application Load Balancer (ALB)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operates at Layer 7 (Application)(HTTP/HTTPS).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Great for routing based on content (like path or hostname).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for modern web apps and microservices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Load Balancer (NLB)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Works at Layer 4(transport)(TCP/UDP).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Designed for ultra-low latency and high throughput.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ideal for high-performance, real-time applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gateway Load Balancer (GWLB)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Best suited for integrating third-party security appliances like firewalls or intrusion detection systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Routes traffic transparently while scaling with demand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Classic Load Balancer (CLB)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Older generation, supports both Layer 4 and Layer 7.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mostly used in legacy systems, not recommended for new projects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How Load Balancing Works in AWS&lt;/strong&gt;&lt;br&gt;
Here’s a simplified view of what happens when someone accesses your app through a load balancer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user makes a request to your application (e.g., opens your website).&lt;/li&gt;
&lt;li&gt;The request is sent to your load balancer via a DNS name.&lt;/li&gt;
&lt;li&gt;The load balancer checks which backend servers (targets) are healthy.&lt;/li&gt;
&lt;li&gt;It forwards the request to one of those healthy servers based on a routing algorithm (like round-robin).&lt;/li&gt;
&lt;li&gt;The chosen server processes the request and sends the response back through the load balancer to the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple, seamless, and scalable.&lt;/p&gt;

&lt;p&gt;_in simpler terms _&lt;br&gt;
When one server is receiving too much traffic, instead of letting it get overwhelmed, the load balancer steps in and says:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Hey, this server is getting busy — let me send the next request to another server that’s less busy or idle.”&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it distributes incoming traffic across multiple servers, which:&lt;/li&gt;
&lt;li&gt;Prevents any one server from crashing or slowing down&lt;/li&gt;
&lt;li&gt;Keeps your app fast and available&lt;/li&gt;
&lt;li&gt;Helps scale your infrastructure without users even noticing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step: Setting Up an Application Load Balancer (ALB)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1: Launch Your EC2 Instances:&lt;/strong&gt;&lt;br&gt;
Start by launching at least two EC2 instances (in different Availability Zones if possible). These will serve your application and install Apache or NGINX, app on each. &lt;em&gt;If you don't know how to create instance check out my previous post on creation of instances and installation of webserver such as apache or nginx as i will skipping a lot of steps&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzg97ijvk9c3hsdeqt3pp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzg97ijvk9c3hsdeqt3pp.png" alt=" " width="800" height="349"&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%2Fesxfypu87laav9p1ncmg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesxfypu87laav9p1ncmg.png" alt=" " width="800" height="276"&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%2Fpm5zkcy22pd9jrqdcz4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm5zkcy22pd9jrqdcz4r.png" alt=" " width="800" height="328"&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%2Fg1npvez28kuf47jnmqer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1npvez28kuf47jnmqer.png" alt=" " width="800" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create a Target Group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to EC2 &amp;gt; Target Groups.&lt;/li&gt;
&lt;li&gt;Click Create target group, choose “Instances” as the target type.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xw46zz5urtegrx892ku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xw46zz5urtegrx892ku.png" alt=" " width="800" height="254"&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%2Fxzj2lseocb3mxuxdtzb5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzj2lseocb3mxuxdtzb5.png" alt=" " width="800" height="275"&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%2Fw39lwg6lz43e317jxk90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw39lwg6lz43e317jxk90.png" alt=" " width="761" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;leave the VPC as default or if you have specific configuration&lt;br&gt;
Set the protocol and port (e.g., HTTP, port 80).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0fng58gc1yq9npvz8q04.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0fng58gc1yq9npvz8q04.png" alt=" " width="753" height="331"&gt;&lt;/a&gt;&lt;br&gt;
then click on next&lt;br&gt;
Register your EC2 instances to the target group.&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Step 3: Create the Load Balancer&lt;/strong&gt;&lt;br&gt;
Go to EC2 &amp;gt; Load Balancers, then click Create Load Balancer.&lt;/p&gt;

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

&lt;p&gt;Choose Application Load Balancer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyl4n01l6srr6cwekwftn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyl4n01l6srr6cwekwftn.png" alt=" " width="363" height="379"&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%2F0lip6hat5uzoi4ro27el.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lip6hat5uzoi4ro27el.png" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;br&gt;
 leave the VPC as default and select the the availability zone  based on the instance you created &lt;/p&gt;

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

&lt;p&gt;Set the name, select internet-facing or internal, and assign at least two Availability Zones for high availability.&lt;/p&gt;

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

&lt;p&gt;from the above picture click on default action and select the previous target group we created then click on add listener tag, then leave the remaining checks as is, then click on create load balancer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Test Your Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grab the DNS name of your ALB from the console.&lt;/li&gt;
&lt;li&gt;Paste it in your browser — you should see one of your app instances respond.&lt;/li&gt;
&lt;li&gt;Refresh a few times to see how it balances across servers.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>Amazon EFS vs EBS: How to Choose the Right AWS Storage and a Step-by-Step EFS Setup</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Sun, 20 Jul 2025 22:10:02 +0000</pubDate>
      <link>https://dev.to/fikalz/amazon-efs-vs-ebs-how-to-choose-the-right-aws-storage-and-a-step-by-step-efs-setup-4g9f</link>
      <guid>https://dev.to/fikalz/amazon-efs-vs-ebs-how-to-choose-the-right-aws-storage-and-a-step-by-step-efs-setup-4g9f</guid>
      <description>&lt;p&gt;In the world of cloud infrastructure, choosing the right storage solution is crucial. If you're working with AWS and wondering whether &lt;strong&gt;EFS or EBS&lt;/strong&gt; is the right tool for your workload, you’re in the right place.&lt;/p&gt;

&lt;p&gt;In this article, we'll break down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What Amazon Elastic File System (EFS) is
&lt;/li&gt;
&lt;li&gt;How to create and mount an EFS
&lt;/li&gt;
&lt;li&gt;The difference between EFS and Amazon EBS
&lt;/li&gt;
&lt;li&gt;When to use each one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What is Amazon EFS?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Amazon Elastic File System (EFS)&lt;/strong&gt; is a fully managed, serverless, elastic file storage system that you can mount across multiple EC2 instances via the &lt;strong&gt;NFS (Network File System)&lt;/strong&gt; protocol.&lt;/p&gt;

&lt;p&gt;Think of it as a &lt;strong&gt;shared drive in the cloud&lt;/strong&gt; that multiple virtual machines can use at the same time  perfect for applications that need access to the same data concurrently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features of EFS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Elastic&lt;/strong&gt;: Automatically scales as you add/remove files&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Fully Managed&lt;/strong&gt;: No servers to provision or manage&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Shared Access&lt;/strong&gt;: Mountable to multiple EC2s concurrently&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Secure&lt;/strong&gt;: Supports encryption at rest and in transit&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Highly Available&lt;/strong&gt;: Data is stored across multiple AZs (Availability Zones)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to Create and Use Amazon EFS&lt;/strong&gt;&lt;br&gt;
 Step 1: Create an EFS File System&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;a href="https://console.aws.amazon.com/efs/" rel="noopener noreferrer"&gt;EFS Dashboard&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;“Create file system”&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Give it a name and select the &lt;strong&gt;VPC&lt;/strong&gt; where your EC2 instances live.&lt;/li&gt;
&lt;li&gt;Use default settings for availability and performance unless you have special needs.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;&lt;em&gt;from the image it automatic connect to the instance i created through the VPC&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;em&gt;“Create”&lt;/em&gt; — AWS handles the provisioning.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Create Two EC2 Instances &lt;/p&gt;

&lt;p&gt;Launch 2 Amazon Linux 2023 instances: &lt;/p&gt;

&lt;p&gt;Both in same VPC and subnet &lt;/p&gt;

&lt;p&gt;Choose t2.micro for free tier &lt;/p&gt;

&lt;p&gt;Enable public IP and SSH access&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Install NFS Utilities on EC2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SSH into your EC2 instance(s) and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo yum install -y nfs-utils  # Amazon Linux / RHEL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Step 4: Mount the EFS File System&lt;/strong&gt;&lt;br&gt;
Use the efs-id from your file system (or use the DNS name AWS provides):&lt;/p&gt;

&lt;p&gt;sudo mkdir /mnt/efs&lt;br&gt;
sudo mount -t nfs4 -o nfsvers=4.1 fs-12345678.efs.us-east1.amazonaws.com:/ /mnt/efs&lt;/p&gt;

&lt;p&gt;✅ You’re now using a shared file system across EC2s!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EFS vs. EBS: What's the Difference?&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Amazon EFS&lt;/th&gt;
&lt;th&gt;Amazon EBS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Storage Type&lt;/td&gt;
&lt;td&gt;File system (NFS)&lt;/td&gt;
&lt;td&gt;Block storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;Multiple EC2 instances (shared)&lt;/td&gt;
&lt;td&gt;One EC2 instance at a time (unless using Multi-Attach with limits)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use Case&lt;/td&gt;
&lt;td&gt;Web servers, CMS, shared config&lt;/td&gt;
&lt;td&gt;Databases, OS storage, low-latency apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Elasticity&lt;/td&gt;
&lt;td&gt;Auto-scales storage&lt;/td&gt;
&lt;td&gt;Must specify volume size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backup&lt;/td&gt;
&lt;td&gt;Lifecycle policies, AWS Backup&lt;/td&gt;
&lt;td&gt;Snapshots, AWS Backup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throughput&lt;/td&gt;
&lt;td&gt;Scales with size &amp;amp; throughput mode&lt;/td&gt;
&lt;td&gt;Defined by volume type (gp3, io1, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mount Protocol&lt;/td&gt;
&lt;td&gt;NFS (Network File System)&lt;/td&gt;
&lt;td&gt;Appears as a raw block device&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>devops</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>aws</category>
    </item>
    <item>
      <title>Think one EBS volume can’t be attached to multiple EC2s? Think again. Here's what you really need to know about EBS Multi-Attach and supported EC2 instances.</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Sat, 19 Jul 2025 12:52:25 +0000</pubDate>
      <link>https://dev.to/fikalz/think-one-ebs-volume-cant-be-attached-to-multiple-ec2s-think-again-heres-what-you-really-need-1e2c</link>
      <guid>https://dev.to/fikalz/think-one-ebs-volume-cant-be-attached-to-multiple-ec2s-think-again-heres-what-you-really-need-1e2c</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/fikalz/understanding-ebs-multi-attach-and-the-ec2-instances-that-support-it-48d4" class="crayons-story__hidden-navigation-link"&gt;Understanding EBS Multi-Attach and the EC2 Instances That Support It&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/fikalz" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.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%2F3231089%2Ff85b9080-1525-414b-8d59-1a4ce0b2c8f0.png" alt="fikalz profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/fikalz" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Morodolu Oluwafikunayomi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Morodolu Oluwafikunayomi
                
              
              &lt;div id="story-author-preview-content-2693968" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/fikalz" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.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%2F3231089%2Ff85b9080-1525-414b-8d59-1a4ce0b2c8f0.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Morodolu Oluwafikunayomi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/fikalz/understanding-ebs-multi-attach-and-the-ec2-instances-that-support-it-48d4" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 16 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/fikalz/understanding-ebs-multi-attach-and-the-ec2-instances-that-support-it-48d4" id="article-link-2693968"&gt;
          Understanding EBS Multi-Attach and the EC2 Instances That Support It
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devplusplus"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devplusplus&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/fikalz/understanding-ebs-multi-attach-and-the-ec2-instances-that-support-it-48d4" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/fikalz/understanding-ebs-multi-attach-and-the-ec2-instances-that-support-it-48d4#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>beginners</category>
      <category>devops</category>
      <category>aws</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>im also a backend developer, check out my first page on django</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Thu, 17 Jul 2025 16:05:12 +0000</pubDate>
      <link>https://dev.to/fikalz/im-also-a-backend-developer-check-out-my-first-page-on-django-153</link>
      <guid>https://dev.to/fikalz/im-also-a-backend-developer-check-out-my-first-page-on-django-153</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/fikalz/getting-started-with-django-4p65" class="crayons-story__hidden-navigation-link"&gt;Getting Started with Django&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/fikalz" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.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%2F3231089%2Ff85b9080-1525-414b-8d59-1a4ce0b2c8f0.png" alt="fikalz profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/fikalz" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Morodolu Oluwafikunayomi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Morodolu Oluwafikunayomi
                
              
              &lt;div id="story-author-preview-content-2680152" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/fikalz" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.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%2F3231089%2Ff85b9080-1525-414b-8d59-1a4ce0b2c8f0.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Morodolu Oluwafikunayomi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/fikalz/getting-started-with-django-4p65" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 12 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/fikalz/getting-started-with-django-4p65" id="article-link-2680152"&gt;
          Getting Started with Django
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/backenddevelopment"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;backenddevelopment&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/fikalz/getting-started-with-django-4p65#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>python</category>
      <category>tutorial</category>
      <category>backenddevelopment</category>
      <category>beginners</category>
    </item>
    <item>
      <title>kindly check out my post guys as well the rest of my posts and give it your thought</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Thu, 17 Jul 2025 16:03:13 +0000</pubDate>
      <link>https://dev.to/fikalz/kindly-check-out-my-post-guys-as-well-the-rest-of-my-posts-and-give-it-your-thought-36d</link>
      <guid>https://dev.to/fikalz/kindly-check-out-my-post-guys-as-well-the-rest-of-my-posts-and-give-it-your-thought-36d</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/fikalz" 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%2F3231089%2Ff85b9080-1525-414b-8d59-1a4ce0b2c8f0.png" alt="fikalz"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/fikalz/snapshots-and-amis-in-aws-what-they-are-and-how-to-use-them-3oaf" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Snapshots and AMIs in AWS, What They Are and How to Use Them&lt;/h2&gt;
      &lt;h3&gt;Morodolu Oluwafikunayomi ・ Jul 17&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devplusplus&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>beginners</category>
      <category>aws</category>
      <category>devplusplus</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Snapshots and AMIs in AWS, What They Are and How to Use Them</title>
      <dc:creator>Morodolu Oluwafikunayomi</dc:creator>
      <pubDate>Thu, 17 Jul 2025 16:02:08 +0000</pubDate>
      <link>https://dev.to/fikalz/snapshots-and-amis-in-aws-what-they-are-and-how-to-use-them-3oaf</link>
      <guid>https://dev.to/fikalz/snapshots-and-amis-in-aws-what-they-are-and-how-to-use-them-3oaf</guid>
      <description>&lt;p&gt;when using EC2 instances in AWS, understanding Snapshots and AMIs (Amazon Machine Images) can boost productivity and reduce resource consumption and ensure efficiently. Whether you're planning for disaster recovery, creating golden images for production, or just trying to replicate environments, this guide will walk you through what they are, how they differ, and how to actually create and use them.&lt;br&gt;
&lt;strong&gt;What Is a Snapshot?&lt;/strong&gt;&lt;br&gt;
A Snapshot in AWS is a point-in-time backup of your EBS (Elastic Block Store) volume. Think of it like taking a photo of your disk, which you can later use to create new volumes or restore existing ones.&lt;br&gt;
Use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backup and restore&lt;/li&gt;
&lt;li&gt;Version control for data&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Migrating data across regions&lt;br&gt;
&lt;strong&gt;What Is an AMI?&lt;/strong&gt;&lt;br&gt;
An Amazon Machine Image (AMI) is a packaged template for launching EC2 instances in the sense that rather than going through the stress of creating a new instance and connecting to, AMI provide a means of shorting that creation process. It includes:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An operating system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Application server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your application&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;EBS volume snapshot(s)&lt;br&gt;
&lt;em&gt;A Snapshot is of a disk. An AMI is like a full system image (disk + OS + config).&lt;/em&gt;&lt;br&gt;
Use cases:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Launching pre-configured servers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auto Scaling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disaster recovery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rapid cloning of environments&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to Create a Snapshot in AWS&lt;/strong&gt;&lt;br&gt;
 From the Console:&lt;br&gt;
&lt;em&gt;remember to have created a volume initially, as a snapshot cannot work without a volume&lt;/em&gt;&lt;br&gt;
&lt;em&gt;check out my other post if don't know how to create a volume(EBS)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to EC2 Dashboard &amp;gt; Elastic Block Store &amp;gt; Volumes&lt;/li&gt;
&lt;li&gt;Select the volume you want to snapshot.&lt;/li&gt;
&lt;li&gt;Click Actions &amp;gt; Create Snapshot&lt;/li&gt;
&lt;li&gt;Add a name and description.&lt;/li&gt;
&lt;li&gt;Click Create Snapshot&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;now we have created a snapshot, let go ahead to delete our volume and recreate the volume from the snapshot&lt;br&gt;
the volume i created was 1 Gib &lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;the size of the volume you wish to create can be increased&lt;br&gt;
When you create a snapshot of an EBS volume, AWS stores the data, not the disk size limitation. That means the snapshot contains the data blocks and metadata needed to recreate the original volume — but it doesn’t restrict you to the original size.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hwep5mu2ulga4puf72f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hwep5mu2ulga4puf72f.png" alt=" " width="800" height="168"&gt;&lt;/a&gt;&lt;br&gt;
the arrows show it was created from a snapshot and its id&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Create an AMI from an EC2 Instance&lt;/strong&gt;&lt;br&gt;
 From the Console:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to EC2 &amp;gt; Instances&lt;/li&gt;
&lt;li&gt;Select your running instance.&lt;/li&gt;
&lt;li&gt;Click Actions &amp;gt; Image and templates &amp;gt; Create image&lt;/li&gt;
&lt;li&gt;Enter image name, description, and choose whether to reboot or not.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Create image&lt;br&gt;
** Launching an EC2 from AMI**&lt;br&gt;
Once your AMI is ready (it takes a few minutes), you can launch a new EC2 from it.&lt;br&gt;
From Console:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to EC2 &amp;gt; AMIs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select your AMI&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Launch instance from image&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose instance type, key pair, security group, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Launch!&lt;br&gt;
&lt;em&gt;do note that AWS doesn't clean up your AMIs or snapshots automatically. You could be leaking storage $$$ if you don’t do it yourself.&lt;/em&gt;&lt;br&gt;
_ Don’t forget to delete the  snapshot(s) manually and deregistering the AMI doesn’t remove them._&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>aws</category>
      <category>devplusplus</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
