<?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: Christiana </title>
    <description>The latest articles on DEV Community by Christiana  (@christiana_orji).</description>
    <link>https://dev.to/christiana_orji</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%2F1798045%2Fa5895273-f491-4536-9705-189557d94eed.jpg</url>
      <title>DEV Community: Christiana </title>
      <link>https://dev.to/christiana_orji</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/christiana_orji"/>
    <language>en</language>
    <item>
      <title>Capstone Project: PCI DSS Online Payment Website</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Wed, 08 Oct 2025 14:15:23 +0000</pubDate>
      <link>https://dev.to/christiana_orji/capstone-project-pci-dss-online-payment-website-3ic7</link>
      <guid>https://dev.to/christiana_orji/capstone-project-pci-dss-online-payment-website-3ic7</guid>
      <description>&lt;p&gt;&lt;strong&gt;INTRODUCTION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As part of my capstone project, I developed two websites with a strong focus on security and compliance: a payment website that adheres to PCI DSS standards. In this project, I aimed to demonstrate my understanding of security best practices and compliance requirements in real-world applications. Without much talk, let's dive in 😊 &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DATABASE MYSQL IN AZURE&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Log in to your Azure account &lt;/li&gt;
&lt;li&gt;Search for Resource group and click on it &lt;/li&gt;
&lt;li&gt;Name it pci-dss project &lt;/li&gt;
&lt;li&gt;Choose a region&lt;/li&gt;
&lt;li&gt;Review and create &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%2Fygr0eq2jboneskttgggl.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%2Fygr0eq2jboneskttgggl.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LET'S CREATE OUR AZURE DATABASE MYSQL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;In your Azure account, search for Azure database for MySQL flexible server and click on it &lt;/li&gt;
&lt;li&gt;Choose advanced create in a flexible server &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%2Flav2s90urece0bfzishh.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%2Flav2s90urece0bfzishh.PNG" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name your database server&lt;/li&gt;
&lt;li&gt;Choose your region with an active subscription &lt;/li&gt;
&lt;li&gt;Choose 8.0 in MySQL version &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%2Fritrp4s9vxpvxi55mhjq.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%2Fritrp4s9vxpvxi55mhjq.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE: I DON'T HAVE AN ACTIVE SUBSCRIPTION BUT FOLLOW THESE STEPS IF YOU HAVE AN ACTIVE SUBSCRIPTION&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose for dev/test in workload type &lt;/li&gt;
&lt;li&gt;Leave the default compute storage&lt;/li&gt;
&lt;li&gt;In the availability zone, choose any one. But for this project, I will choose no preference &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%2F7vpkant7bc8kxr4xuhpm.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%2F7vpkant7bc8kxr4xuhpm.PNG" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't enable high availability if you choose no preference (but you can enable it if you choose other type of availability zone)&lt;/li&gt;
&lt;li&gt;Choose MySQL authentication only in authentication method &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%2Fototq31zv1iefx6n5050.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%2Fototq31zv1iefx6n5050.PNG" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put Username for your administrator login &lt;/li&gt;
&lt;li&gt;Put password &lt;/li&gt;
&lt;li&gt;And confirm the password &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%2Fedj726xzsixusx5jsvsz.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%2Fedj726xzsixusx5jsvsz.PNG" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on Network &lt;/li&gt;
&lt;li&gt;Choose public access in connectivity method (for this project. But if you are working on a real-time environment, please choose private access)&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%2Fqc5j09uoppr6ngwly047.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%2Fqc5j09uoppr6ngwly047.PNG" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on add current IP address (to add your IP address)&lt;br&gt;
&lt;strong&gt;NOTE: If you are working in a company and the company's servers has sensitive data, please when you get to this part, do not click on add 0.0.0.0-255. If you click on it, you are giving permission to everyone to have access to that server. It is dangerous&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the IP addresses of the people that you want to have access to the server at end IP address&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In firewall rule name, put allow this person to connect &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In starting IP address, paste the person's IP address &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click on security &lt;/li&gt;
&lt;li&gt;Click on service-managed key&lt;/li&gt;
&lt;li&gt;Click on review and create &lt;/li&gt;
&lt;li&gt;Create&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LET'S CREATE A VIRTUAL NETWORK WITH 3 SUBNETS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your Azure account, search for virtual network and click on it &lt;/li&gt;
&lt;li&gt;Click on create virtual network &lt;/li&gt;
&lt;li&gt;Choose your region with active subscription &lt;/li&gt;
&lt;li&gt;Name your Virtual network &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%2Fjyq2nbl69s8iaae1lo1q.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%2Fjyq2nbl69s8iaae1lo1q.PNG" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on security &lt;/li&gt;
&lt;li&gt;Enable virtual network encryption &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%2F9ajrzz87mlq3hh8jhvuf.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%2F9ajrzz87mlq3hh8jhvuf.PNG" alt=" " width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on IP address &lt;/li&gt;
&lt;li&gt;Erase the default IP (10.0.0.0) and put a new IP address ( example 192.168.0.0)&lt;/li&gt;
&lt;li&gt;Delete the default subnet IP address &lt;/li&gt;
&lt;li&gt;Click on add subnet &lt;/li&gt;
&lt;li&gt;Name it database_subnet&lt;/li&gt;
&lt;li&gt;Click save&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%2Fwd3bepuufwr3btx2f7td.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%2Fwd3bepuufwr3btx2f7td.PNG" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on add another subnet &lt;/li&gt;
&lt;li&gt;Name it backend_subnet&lt;/li&gt;
&lt;li&gt;Click save&lt;/li&gt;
&lt;li&gt;Click add another subnet &lt;/li&gt;
&lt;li&gt;Name it frontend_subnet&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%2Fsx42vzp1sdxnw3sdlhge.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%2Fsx42vzp1sdxnw3sdlhge.PNG" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is what you should have &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%2F4k03xw27rl10igohtnh4.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%2F4k03xw27rl10igohtnh4.PNG" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on review and create &lt;/li&gt;
&lt;li&gt;Then create &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LET'S CREATE NSG FOR DATABASE&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for network security group in your Azure &lt;/li&gt;
&lt;li&gt;Click on create &lt;/li&gt;
&lt;li&gt;Choose your resource group &lt;/li&gt;
&lt;li&gt;Name it database-nsg&lt;/li&gt;
&lt;li&gt;Choose your region &lt;/li&gt;
&lt;li&gt;create&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%2Fitbtpm8n60ik27m1hf87.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%2Fitbtpm8n60ik27m1hf87.PNG" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After creating it, click on it &lt;/li&gt;
&lt;li&gt;click on inbound &lt;/li&gt;
&lt;li&gt;Click on add&lt;/li&gt;
&lt;li&gt;In source, leave it at any&lt;/li&gt;
&lt;li&gt;Source port range, put *&lt;/li&gt;
&lt;li&gt;In destination, put Any&lt;/li&gt;
&lt;li&gt;In service, put custom &lt;/li&gt;
&lt;li&gt;In destination port range, put * &lt;/li&gt;
&lt;li&gt;In protocol, put Any&lt;/li&gt;
&lt;li&gt;In action, put Deny&lt;/li&gt;
&lt;li&gt;In priority, put 1000&lt;/li&gt;
&lt;li&gt;In description, type Deny all IP and all port&lt;/li&gt;
&lt;li&gt;Click on add 
&lt;strong&gt;NOTE: We only want the Backend to have access to the Database, so we are going to set NSG that allows only Backend to access the Database server&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click on the virtual network you created &lt;/li&gt;
&lt;li&gt;Scroll down and click on subnet&lt;/li&gt;
&lt;li&gt;Copy the Backend subnet IP &lt;/li&gt;
&lt;li&gt;Go to your NSG inbound &lt;/li&gt;
&lt;li&gt;Click on add&lt;/li&gt;
&lt;li&gt;In source, select IP address &lt;/li&gt;
&lt;li&gt;Source IP address, paste the backend IP address &lt;/li&gt;
&lt;li&gt;In source port, put *&lt;/li&gt;
&lt;li&gt;In destination, put Any&lt;/li&gt;
&lt;li&gt;In service, select MySQL &lt;/li&gt;
&lt;li&gt;In action, put allow &lt;/li&gt;
&lt;li&gt;In priority, put 999 or any lesser number&lt;/li&gt;
&lt;li&gt;In description, type allow this IP and port ( or anything)&lt;/li&gt;
&lt;li&gt;Click on add&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LET'S ADD THE IP ADDRESS OF THE BACKEND ENGINEER&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Still in your NSG inbound rules, click add&lt;/li&gt;
&lt;li&gt;In source, select IP address &lt;/li&gt;
&lt;li&gt;Put the IP address &lt;/li&gt;
&lt;li&gt;In source port, out *&lt;/li&gt;
&lt;li&gt;In destination, select Any&lt;/li&gt;
&lt;li&gt;In service, select MySQL &lt;/li&gt;
&lt;li&gt;In action, put Allow &lt;/li&gt;
&lt;li&gt;In priority, put 998 or lesser number &lt;/li&gt;
&lt;li&gt;Click on add&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LET'S CREATE VIRTUAL MACHINE FOR THE DATABASE&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search virtual machine in your Azure account &lt;/li&gt;
&lt;li&gt;Click on it and click create virtual machine &lt;/li&gt;
&lt;li&gt;Select your resource group &lt;/li&gt;
&lt;li&gt;Name it database-Vm&lt;/li&gt;
&lt;li&gt;Choose your region &lt;/li&gt;
&lt;li&gt;I'm working with Ubuntu &lt;/li&gt;
&lt;li&gt;Choose SSH public key in authentication type &lt;/li&gt;
&lt;li&gt;Put Username (example is datadmin)&lt;/li&gt;
&lt;li&gt;In SSH public key source, select use existing public key&lt;/li&gt;
&lt;li&gt;Copy and paste your SSH public key &lt;/li&gt;
&lt;li&gt;In public inbound port, select none&lt;/li&gt;
&lt;li&gt;Go to network section &lt;/li&gt;
&lt;li&gt;In subnet, select database_subnet&lt;/li&gt;
&lt;li&gt;In public IP, let it at (new) database-vm-ip&lt;/li&gt;
&lt;li&gt;In nic, choose advanced &lt;/li&gt;
&lt;li&gt;In configure network sg, select database-nsg&lt;/li&gt;
&lt;li&gt;Enable delete public IP&amp;amp;nic when VM is deleted &lt;/li&gt;
&lt;li&gt;Click review+create&lt;/li&gt;
&lt;li&gt;Click create &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LET'S CREATE INBOUND RULE FOR SSH&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on your NSG inbound rules &lt;/li&gt;
&lt;li&gt;Click on add&lt;/li&gt;
&lt;li&gt;In source, select my IP or IP address (as the case may be)&lt;/li&gt;
&lt;li&gt;Put the IP address, if you selected IP address &lt;/li&gt;
&lt;li&gt;In source port, put *&lt;/li&gt;
&lt;li&gt;In destination, select Any&lt;/li&gt;
&lt;li&gt;In service, select SSH &lt;/li&gt;
&lt;li&gt;In action, select Allow &lt;/li&gt;
&lt;li&gt;In priority, put 100 or any number &lt;/li&gt;
&lt;li&gt;Click add &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LET'S CONNECT OUR DATABASE VM WITH MOBAXTERM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy your database VM public IP address &lt;/li&gt;
&lt;li&gt;Open your mobaxterm &lt;/li&gt;
&lt;li&gt;Click on session &lt;/li&gt;
&lt;li&gt;Click SSH &lt;/li&gt;
&lt;li&gt;Paste the public IP &lt;/li&gt;
&lt;li&gt;Put the database VM username &lt;/li&gt;
&lt;li&gt;Enable use private key and click on the icon in front of it&lt;/li&gt;
&lt;li&gt;Select your private SSH key&lt;/li&gt;
&lt;li&gt;Click on&lt;/li&gt;
&lt;li&gt;Click Accept&lt;/li&gt;
&lt;li&gt;Once you are in, type sudo apt update &lt;/li&gt;
&lt;li&gt;After updating, log in to the root user by typing sudo su - &lt;/li&gt;
&lt;li&gt;After logging in, type nano databaseinstall.sh&lt;/li&gt;
&lt;li&gt;Once it opens, type #!/bin/bash, hit enter&lt;/li&gt;
&lt;li&gt;Then type these things.   echo "============System is updating=================="
sudo apt update -y&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;sleep 6&lt;/p&gt;

&lt;p&gt;echo "============Installing mysql-server=================="&lt;br&gt;
sudo apt install mysql-server -y&lt;/p&gt;

&lt;p&gt;sleep 6&lt;/p&gt;

&lt;p&gt;echo "============starting mysql-service after installation =================="&lt;br&gt;
sudo systemctl start mysql.service&lt;/p&gt;

&lt;p&gt;sleep 6&lt;/p&gt;

&lt;p&gt;echo "============enable mysql service=================="&lt;br&gt;
sudo systemctl enable mysql.service&lt;/p&gt;

&lt;p&gt;echo "============task completed=================="&lt;br&gt;
systemctl status mysql.service&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%2Fgitx86wp1k63o8b8imze.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%2Fgitx86wp1k63o8b8imze.PNG" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Right click and save&lt;/li&gt;
&lt;li&gt;After saving, type ls&lt;/li&gt;
&lt;li&gt;Type chmod +× database install.sh &lt;/li&gt;
&lt;li&gt;To start running the server, type./database install.sh&lt;/li&gt;
&lt;li&gt;Type cd/etc/mysql hit enter&lt;/li&gt;
&lt;li&gt;Type nano mysql.cnf &lt;/li&gt;
&lt;li&gt;Type bind-address=0.0.0.0 or the IP address of the person that will have access to the server. Save and exit&lt;/li&gt;
&lt;li&gt;Let's create a root User by typing ULTER USER 'root'@'localhost'IDENTIFIED WITH mysql_native_password By 'admin@123'; you can create your own password &lt;/li&gt;
&lt;li&gt;Then type exit&lt;/li&gt;
&lt;li&gt;Login in again by typing mysql -u root -pAdmin@123&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%2Fmd083vklh8jkq1s89u20.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%2Fmd083vklh8jkq1s89u20.jpg" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a User, Password and grant the user all privileges for this project by typing CREATE USER 'jackson'@'%'IDENTIFIED BY'prime@123'; ( prime@123 is the user's password. You can create your own password). This % sign means, you are giving the user right to access the server. &lt;/li&gt;
&lt;li&gt;Type GRANT ALL PRIVILEGES ON*.*TO'jackson'@%'WITH GEANT OPTIONS;&lt;/li&gt;
&lt;li&gt;Then type FLUSH PRIVILEGES;
Flushing means, to sink everything. Grant privileges*.* Means you are granting all the database privileges together with everything that is attached to the database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;BACKEND&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's Create NSG and VNET for Our Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for Virtual network and click on it &lt;/li&gt;
&lt;li&gt;Choose the same resource group &lt;/li&gt;
&lt;li&gt;Name your VNET (backend VNET)&lt;/li&gt;
&lt;li&gt;Click on security and enable encryption &lt;/li&gt;
&lt;li&gt;Click on IP&lt;/li&gt;
&lt;li&gt;Erase the default IP (10.0.0.0) and put a new IP (192.168.0.0)&lt;/li&gt;
&lt;li&gt;Click on review + create &lt;/li&gt;
&lt;li&gt;Then click on create &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Let's Create NSG for our Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for network security group and click on it &lt;/li&gt;
&lt;li&gt;Click on create &lt;/li&gt;
&lt;li&gt;Choose your resource group &lt;/li&gt;
&lt;li&gt;Name it ( backend NSG)&lt;/li&gt;
&lt;li&gt;Choose region &lt;/li&gt;
&lt;li&gt;Create&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Let's set rule for SSH, Frontend subnet IP, and our IP to access the Backend server&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on the backend NSG you just created &lt;/li&gt;
&lt;li&gt;Click on settings and click on inbound &lt;/li&gt;
&lt;li&gt;Click on add&lt;/li&gt;
&lt;li&gt;In source, I choose my IP ( you can choose IP addresses and put the IP addresses of those whom you want to give access to the server)&lt;/li&gt;
&lt;li&gt;Source port, put *&lt;/li&gt;
&lt;li&gt;Destination, put Any&lt;/li&gt;
&lt;li&gt;Service, Choose SSH &lt;/li&gt;
&lt;li&gt;Action, Choose allow &lt;/li&gt;
&lt;li&gt;Priority, put a number not less than 100. I put 101&lt;/li&gt;
&lt;li&gt;Click on add&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Add another rule for your IP or IPS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click add&lt;/li&gt;
&lt;li&gt;Source, put my IP or IPS &lt;/li&gt;
&lt;li&gt;Source port, put *&lt;/li&gt;
&lt;li&gt;Destination, put Any&lt;/li&gt;
&lt;li&gt;service, put custom &lt;/li&gt;
&lt;li&gt;Destination port, put a port (i.e 4000)&lt;/li&gt;
&lt;li&gt;Priority, I put 102&lt;/li&gt;
&lt;li&gt;Click on add&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Add another rule for your frontend to access backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click add &lt;/li&gt;
&lt;li&gt;Source, Choose IP address &lt;/li&gt;
&lt;li&gt;Source IP, copy the frontend subnet IP you created in your database VNET and paste it.&lt;/li&gt;
&lt;li&gt;Source port, *&lt;/li&gt;
&lt;li&gt;Destination, Any&lt;/li&gt;
&lt;li&gt;Service, Custom&lt;/li&gt;
&lt;li&gt;Destination port, 4000&lt;/li&gt;
&lt;li&gt;Priority, I put 103&lt;/li&gt;
&lt;li&gt;Action, put Allow&lt;/li&gt;
&lt;li&gt;click add&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Let's Create A Backend Virtual Machine&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for Virtual machine and click on it &lt;/li&gt;
&lt;li&gt;Click create&lt;/li&gt;
&lt;li&gt;Choose your region &lt;/li&gt;
&lt;li&gt;Name it backend-vm&lt;/li&gt;
&lt;li&gt;In image, I choose Ubuntu &lt;/li&gt;
&lt;li&gt;Authentication type, choose SSH&lt;/li&gt;
&lt;li&gt;Put a username (i.e backend admin)&lt;/li&gt;
&lt;li&gt;In SSH public key, choose existing public key &lt;/li&gt;
&lt;li&gt;Copy your SSH public key and paste it &lt;/li&gt;
&lt;li&gt;In public inbound port, click none&lt;/li&gt;
&lt;li&gt;Go to network section &lt;/li&gt;
&lt;li&gt;In subnet, select backend-subnet&lt;/li&gt;
&lt;li&gt;In Nic, click on advanced &lt;/li&gt;
&lt;li&gt;In configure network, choose backend-nsg&lt;/li&gt;
&lt;li&gt;Enable delete public IP and Nic&lt;/li&gt;
&lt;li&gt;Click on review+create &lt;/li&gt;
&lt;li&gt;Then click on create &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Let's Connect our Backend server and begin installation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I connected my backend server with mobaxterm&lt;/li&gt;
&lt;li&gt;Once you are inside the server, type sudo apt update &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%2Fez7re5dvtxa7j2n0m9do.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%2Fez7re5dvtxa7j2n0m9do.PNG" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let's install open jdk17 by typing sudo apt install open jdk-17-jdk -y&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%2F66s2pp5sdqkq8nuk8g3e.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%2F66s2pp5sdqkq8nuk8g3e.PNG" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type java --version to check the jdk version &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%2Fyq05yj0mqagh2mdhwara.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%2Fyq05yj0mqagh2mdhwara.PNG" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let's install maven by typing sudo apt install maven -y&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%2Flfr41y6cnzgvpveb77yd.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%2Flfr41y6cnzgvpveb77yd.PNG" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type mvn --version to see the version of maven installed&lt;/li&gt;
&lt;li&gt;Git clone the repo I'm working with (git clone &lt;a href="https://my" rel="noopener noreferrer"&gt;https://my&lt;/a&gt; username:my generated token@the repo &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%2Fjs7ts6epi3w62nsaqpni.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%2Fjs7ts6epi3w62nsaqpni.PNG" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type ls&lt;/li&gt;
&lt;li&gt;type cd to the repo&lt;/li&gt;
&lt;li&gt;ls&lt;/li&gt;
&lt;li&gt;Type cd src&lt;/li&gt;
&lt;li&gt;ls&lt;/li&gt;
&lt;li&gt;Type cd main&lt;/li&gt;
&lt;li&gt;ls&lt;/li&gt;
&lt;li&gt;Type cd resource&lt;/li&gt;
&lt;li&gt;ls&lt;/li&gt;
&lt;li&gt;Type sudo nano application.properties&lt;/li&gt;
&lt;li&gt;Remove those things in front of spring datasours.url=jdbc: mysql://copy and paste your database VM private IP:the port number/online_banking&lt;/li&gt;
&lt;li&gt;Remove those things in front of spring data source.username= put the username you created during the MySQL configuration &lt;/li&gt;
&lt;li&gt;Remove those things in front of spring data source.password= and put the username password you created (prime@123)&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%2F2j1jxp69pkpemj0360kk.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%2F2j1jxp69pkpemj0360kk.PNG" alt=" " width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press cntrl x and press y to save and exit &lt;/li&gt;
&lt;li&gt;Type sudo apt install mysql-client -y &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%2Fdb4q4p1skxab25m7m65m.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%2Fdb4q4p1skxab25m7m65m.PNG" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let's connect to the MySQL publicly by typing mysql -u Jackson -pprime@123 -h the database VM public IP 
&lt;strong&gt;Note: before this, make sure you have created a rule for backend to access database in the database NSG&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;After confirming that you can connect to the MySQL publicly, type exit&lt;/li&gt;
&lt;li&gt;Let's connect to the MySQL privately by typing mysql -u Jackson -pprime@123 -h the private IP address of your database VM &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%2Ffu7w4nca7kz6x22ocyfb.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%2Ffu7w4nca7kz6x22ocyfb.PNG" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Once you have confirmed that you can login publicly, please go back to your database NSG and remove the backend VM public IP rule you connected.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type MySQL.cnf to change the port number (in compliance with pci-dss standards)&lt;/li&gt;
&lt;li&gt;Press cntrl x and press y to save and exit &lt;/li&gt;
&lt;li&gt;Then type nano application.properties to update the port number, then save and exit &lt;/li&gt;
&lt;li&gt;Type create database onlin_banking;&lt;/li&gt;
&lt;li&gt;Type show database;&lt;/li&gt;
&lt;li&gt;Type use online_banking&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%2F7dfi2sltzox54iiujvbz.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%2F7dfi2sltzox54iiujvbz.PNG" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type exit&lt;/li&gt;
&lt;li&gt;ls&lt;/li&gt;
&lt;li&gt;Type cd &lt;/li&gt;
&lt;li&gt;ls&lt;/li&gt;
&lt;li&gt;cd to my repo&lt;/li&gt;
&lt;li&gt;Type mvn clean package &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%2Fisxqg2yxjcfojm0pxgby.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%2Fisxqg2yxjcfojm0pxgby.PNG" alt=" " width="800" height="423"&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%2Flwci768vkh9e40onq0vf.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%2Flwci768vkh9e40onq0vf.PNG" alt=" " width="800" height="407"&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%2Fixo1f4ze1pzip4m0drj4.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%2Fixo1f4ze1pzip4m0drj4.PNG" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FRONTEND&lt;/strong&gt;&lt;br&gt;
CREATE NSG FOR FRONTEND AND ADD RULES&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the Frontend NSG&lt;/li&gt;
&lt;li&gt;Click on security, and then click on inbound &lt;/li&gt;
&lt;li&gt;Click on add &lt;/li&gt;
&lt;li&gt;In source, Choose Any (or IP and put the IP address on source IP)&lt;/li&gt;
&lt;li&gt;In source range, put * &lt;/li&gt;
&lt;li&gt;Destination, put Any&lt;/li&gt;
&lt;li&gt;Service, choose SSH&lt;/li&gt;
&lt;li&gt;Action, choose Allow &lt;/li&gt;
&lt;li&gt;Priority, I put 100&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add another rule&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Source, put Any (or IP/IPs)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Source range, put *&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Destination, Choose Any&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Service, Choose custom &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Destination port range, for this project, I put 3000,443&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Protocol, Choose Any&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Action, choose Allow &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Priority, I put 101&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CONNECT OUR FRONTEND VM AND START INSTALLING&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connected mine with mobaxterm &lt;/li&gt;
&lt;li&gt;Once you are in, type sudo apt update &lt;/li&gt;
&lt;li&gt;Then type sudo apt install nodejs -y &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%2Fu2i4g7xhsosryd2wogsr.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%2Fu2i4g7xhsosryd2wogsr.PNG" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Then type sudo apt install npm -y &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%2Fdlfjdnmpbwigbfob0hoy.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%2Fdlfjdnmpbwigbfob0hoy.PNG" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Then clone the repository you have your source in by typing git clone &lt;a href="https://your" rel="noopener noreferrer"&gt;https://your&lt;/a&gt; token@your GitHub username/your repo.git&lt;/li&gt;
&lt;li&gt;Then ls to see the repo&lt;/li&gt;
&lt;li&gt;Type cd (your frontend repo name/)&lt;/li&gt;
&lt;li&gt;Open your vs code&lt;/li&gt;
&lt;li&gt;Click on connect to &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%2Fjcpkqmll6sjbqdomxwbp.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%2Fjcpkqmll6sjbqdomxwbp.PNG" alt=" " width="741" height="634"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on connect to host&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%2Fktxvvmeutoz2sqhqlm3y.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%2Fktxvvmeutoz2sqhqlm3y.png" alt=" " width="754" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on configure SSH host&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%2F8uain4n52b72ny8bpojz.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%2F8uain4n52b72ny8bpojz.png" alt=" " width="610" height="79"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on SSH/config&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%2Fkbn4ztqtcmvsgyh1fq5o.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%2Fkbn4ztqtcmvsgyh1fq5o.png" alt=" " width="626" height="129"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In host, name it frontend server&lt;/li&gt;
&lt;li&gt;In hostname, put the frontend VM public IP &lt;/li&gt;
&lt;li&gt;In user, put the Frontend VM Username &lt;/li&gt;
&lt;li&gt;Type Identityfile, and paste your private SSH key path&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%2F0ybyy0y4y9xxiyw2dmsw.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%2F0ybyy0y4y9xxiyw2dmsw.PNG" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save it&lt;/li&gt;
&lt;li&gt;Click on this icon&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%2Fy3nn2za6aoy0anj9de16.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%2Fy3nn2za6aoy0anj9de16.PNG" alt=" " width="109" height="67"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click connect to host&lt;/li&gt;
&lt;li&gt;Click on the file you just created &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%2Fgxc1mk9msegknsytxdsb.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%2Fgxc1mk9msegknsytxdsb.png" alt=" " width="639" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose the OS you want to work with. I chose Linux &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%2F1t4sybn71csddar243ml.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%2F1t4sybn71csddar243ml.png" alt=" " width="658" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on continue &lt;/li&gt;
&lt;li&gt;Once you are connected, type code .&lt;/li&gt;
&lt;li&gt;Click on the OS you choose &lt;/li&gt;
&lt;li&gt;Then click on yes&lt;/li&gt;
&lt;li&gt;Type ls&lt;/li&gt;
&lt;li&gt;Click on the search bar in your vs code &lt;/li&gt;
&lt;li&gt;Copy your frontend VM private IP &lt;/li&gt;
&lt;li&gt;Type localhost in the search bar&lt;/li&gt;
&lt;li&gt;Paste the IP on replace side&lt;/li&gt;
&lt;li&gt;Click on the icon beside AB&lt;/li&gt;
&lt;li&gt;Then click replace&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%2Fhpf6owpzmkuxbfzzxopn.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%2Fhpf6owpzmkuxbfzzxopn.PNG" alt=" " width="321" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type cd (your frontend repo)&lt;/li&gt;
&lt;li&gt;Then type sudo npm start&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%2Fto5r6brpjqhd5niq3dl6.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%2Fto5r6brpjqhd5niq3dl6.PNG" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If it refuses to start, type sudo npm audit fix --force (to forcedly start it) then re-type sudo npm start&lt;/li&gt;
&lt;li&gt;Go to your browser, paste your Frontend public IP:3000&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%2F4zw0htgbg61zwc7g75ei.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%2F4zw0htgbg61zwc7g75ei.PNG" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;THE ABSOLUTE END☺️&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Would you try this out? And you are welcome to ask me any questions.&lt;/p&gt;

&lt;p&gt;See you soon &lt;/p&gt;

</description>
      <category>database</category>
      <category>frontend</category>
      <category>backend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Manage the Deployment of Our Website Via Pipeline: CI/CD</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Fri, 15 Aug 2025 11:33:06 +0000</pubDate>
      <link>https://dev.to/christiana_orji/how-to-manage-the-deployment-of-our-website-via-pipeline-cicd-3h48</link>
      <guid>https://dev.to/christiana_orji/how-to-manage-the-deployment-of-our-website-via-pipeline-cicd-3h48</guid>
      <description>&lt;p&gt;Today, we are going to see how we can manage the deployment of our website through GitHub Actions pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a private repository in GitHub and clone the repository&lt;/strong&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%2Fgdfwkaccpb968lsb43ky.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%2Fgdfwkaccpb968lsb43ky.PNG" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Creating a token in your GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your GitHub, and click on your profile on the left &lt;/li&gt;
&lt;li&gt;Click on settings&lt;/li&gt;
&lt;li&gt;Click on developer settings&lt;/li&gt;
&lt;li&gt;Click on personal access tokens drop-down&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%2F34ry73wjs471kw9g1wwf.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%2F34ry73wjs471kw9g1wwf.PNG" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose tokens (classic)&lt;/li&gt;
&lt;li&gt;Click on generate new token&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%2Fvtgu0qswmlzfolg0wv93.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%2Fvtgu0qswmlzfolg0wv93.PNG" alt=" " width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose classic token&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%2F8l3vt8k2rg7xi78nwq7l.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%2F8l3vt8k2rg7xi78nwq7l.PNG" alt=" " width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name the token &lt;/li&gt;
&lt;li&gt;Scroll down to workflow, and enable 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%2Fxwe81isz525n89vul83y.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%2Fxwe81isz525n89vul83y.PNG" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on generate token&lt;/li&gt;
&lt;li&gt;Copy the token before you exit the page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Git clone the private repository&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your PowerShell or command prompt (CMD)&lt;/li&gt;
&lt;li&gt;Type git clone &lt;a href="https://your" rel="noopener noreferrer"&gt;https://your&lt;/a&gt; github username:the token you &lt;a href="mailto:generated@github.com"&gt;generated@github.com&lt;/a&gt;/your github username/your private repo name.git&lt;/li&gt;
&lt;li&gt;cd to repo you clone&lt;/li&gt;
&lt;li&gt;Then type code . (it will take you to your vs code)&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%2Fj4yavuqfgki9dy4czo3h.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%2Fj4yavuqfgki9dy4czo3h.PNG" alt=" " width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Download a free CSS  website template&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for free CSS templates on your browser&lt;/li&gt;
&lt;li&gt;Download the one you like&lt;/li&gt;
&lt;li&gt;Go to your download file and unzip the website template&lt;/li&gt;
&lt;li&gt;Once you unzip it, open it and copy everything&lt;/li&gt;
&lt;li&gt;Locate your private repository &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%2Fgi8t23m2qwpxr62a5psm.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%2Fgi8t23m2qwpxr62a5psm.PNG" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open it and paste the CSS website template you copied&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%2Fg3rx9pjvb37wwd8uyks1.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%2Fg3rx9pjvb37wwd8uyks1.PNG" alt=" " width="800" height="647"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Go back to your VS Code, and it will reflect&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%2Fftwil7ngs1u53jdj7hyu.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%2Fftwil7ngs1u53jdj7hyu.PNG" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type git status&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%2Fp9no6pxo4awx23tbej2k.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%2Fp9no6pxo4awx23tbej2k.PNG" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type git add .&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%2F02f3grqbnr7faeh2iubl.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%2F02f3grqbnr7faeh2iubl.PNG" alt=" " width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type git commit -m 'my website'&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%2Fe06yomfsy6e4bpry8fu6.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%2Fe06yomfsy6e4bpry8fu6.PNG" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type git push&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%2Fsy3t7ybk4fkdsbz51uko.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%2Fsy3t7ybk4fkdsbz51uko.PNG" alt=" " width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check your GitHub repo to see what you pushed&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%2Fs3sxaldyt20oyrnr4inf.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%2Fs3sxaldyt20oyrnr4inf.PNG" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Creating a Dockerfile&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a file in your VS Code, and name it dockerfile&lt;/li&gt;
&lt;li&gt;Click on the dockerfile&lt;/li&gt;
&lt;li&gt;Type FROM ubuntu:latest&lt;/li&gt;
&lt;li&gt;Type RUN apt-get update&lt;/li&gt;
&lt;li&gt;Type RUN apt-get install -y nginx&lt;/li&gt;
&lt;li&gt;Type RUN rm -rf /var/www/html/*&lt;/li&gt;
&lt;li&gt;Type COPY . /var/www/html&lt;/li&gt;
&lt;li&gt;Type EXPOSE 80&lt;/li&gt;
&lt;li&gt;Type CMD ["nginx', "-g", "daemon off;"]&lt;/li&gt;
&lt;li&gt;Save 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%2Fkriy57j613yso6qiji6a.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%2Fkriy57j613yso6qiji6a.PNG" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step : Push it to our GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type git status&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%2Fiyavit2mj147qaofivk3.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%2Fiyavit2mj147qaofivk3.PNG" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type git add .&lt;/li&gt;
&lt;li&gt;git commit -m 'dockerfile added'&lt;/li&gt;
&lt;li&gt;git push&lt;/li&gt;
&lt;li&gt;Check your GitHub repo to see the dockerfile included&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%2F9wa9lt075hggx2rby62l.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%2F9wa9lt075hggx2rby62l.PNG" alt=" " width="800" height="664"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: GitHub Actions Pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your GitHub repository&lt;/li&gt;
&lt;li&gt;Click on Action at the top&lt;/li&gt;
&lt;li&gt;Search for Docker pipeline&lt;/li&gt;
&lt;li&gt;Copy the code&lt;/li&gt;
&lt;li&gt;Go to your VS Code, create a &lt;strong&gt;folder&lt;/strong&gt;, and name it &lt;strong&gt;.github&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;file&lt;/strong&gt;, and name it &lt;strong&gt;workflow&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Create another &lt;strong&gt;file&lt;/strong&gt;, name it &lt;strong&gt;docker_build_push.yaml&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click on the docker_build_push.yaml and paste the code you copied&lt;/li&gt;
&lt;li&gt;Below job: where you see docker: add buildpush before: ( something like this dockerbuildpush:)&lt;/li&gt;
&lt;li&gt;Go to your GitHub repository, and click on settings&lt;/li&gt;
&lt;li&gt;Scroll down and click on secret and variables&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%2Fi98q651h9haymljhw1v3.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%2Fi98q651h9haymljhw1v3.PNG" alt=" " width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on secret, and click on new repository&lt;/li&gt;
&lt;li&gt;Name it &lt;strong&gt;DOCKERHUB_TOKEN&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Go to your Docker account and generate a token&lt;/li&gt;
&lt;li&gt;Copy it, and paste it into your GitHub secret&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%2F9bufp42hh6wn4cmh9ut3.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%2F9bufp42hh6wn4cmh9ut3.PNG" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on add secret&lt;/li&gt;
&lt;li&gt;Click on variables&lt;/li&gt;
&lt;li&gt;Name it &lt;strong&gt;DOCKERHUB_USERNAME&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Put your Docker username&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%2Fa6ez8gdngyimne4uj9dm.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%2Fa6ez8gdngyimne4uj9dm.PNG" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on add variables&lt;/li&gt;
&lt;li&gt;Go back to your VS Code&lt;/li&gt;
&lt;li&gt;Scroll down to tag, remove user, and put ${{vars. DOCKERHUB_USERNAME}}/websiteapp:latest&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%2Fpm3cg4tqd49c3pw8zg2t.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%2Fpm3cg4tqd49c3pw8zg2t.PNG" alt=" " width="800" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Final Stage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type git status&lt;/li&gt;
&lt;li&gt;Type git add .&lt;/li&gt;
&lt;li&gt;Type git commit -m 'git action pipeline code added'&lt;/li&gt;
&lt;li&gt;Type git push&lt;/li&gt;
&lt;li&gt;Go to your GitHub repo&lt;/li&gt;
&lt;li&gt;Click this marked place
&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%2F3r703g0stahkyvyzz2cf.PNG" alt=" " width="800" height="426"&gt;
&lt;/li&gt;
&lt;li&gt;And this will be your result if there is no error&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%2Fui3jfl0bm25l89e9nsd1.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%2Fui3jfl0bm25l89e9nsd1.PNG" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>githubactions</category>
      <category>cicd</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Docker Deployment: Dockerized Website Deployment</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Mon, 11 Aug 2025 12:49:46 +0000</pubDate>
      <link>https://dev.to/christiana_orji/docker-deployment-dockerized-website-deployment-4ib8</link>
      <guid>https://dev.to/christiana_orji/docker-deployment-dockerized-website-deployment-4ib8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Project Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project demonstrates how to containerize a website using Docker and deploy it. We will be hosting this website on Azure. By leveraging Docker's containerization capabilities, this project showcases a streamlined process for building, shipping, and running CSS templates. This project includes a Dockerfile, a build image, and a public Docker repository for easy access. Without wasting much time, let's dive in...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Let's create a Docker registry&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your browser and search for Docker Hub&lt;/li&gt;
&lt;li&gt;Click on sign up and sign up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create a public Docker repository&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to the Docker Hub&lt;/li&gt;
&lt;li&gt;Locate the repository on your left&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%2F23tiycq7z1o0y1mrfdmu.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%2F23tiycq7z1o0y1mrfdmu.PNG" alt=" " width="800" height="426"&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%2F48dgnfj3gfq6pkkxrps6.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%2F48dgnfj3gfq6pkkxrps6.PNG" alt=" " width="800" height="230"&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%2Ft5eozqyoay7j4l61lqej.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%2Ft5eozqyoay7j4l61lqej.PNG" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create a Virtual Machine and connect it&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I created an Azure virtual machine for this project.&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%2Fx3gaea0pmc0sbqd0s0j6.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%2Fx3gaea0pmc0sbqd0s0j6.PNG" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;After connecting your virtual machine, type sudo apt update&lt;/li&gt;
&lt;li&gt;Mkdir Docker ( making a directory with the name Docker)&lt;/li&gt;
&lt;li&gt;Type ls&lt;/li&gt;
&lt;li&gt;Type cd Docker&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%2F7fe0lhudnhtohydcfvef.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%2F7fe0lhudnhtohydcfvef.PNG" alt=" " width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Creating a website&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your browser and search for free CSS templates&lt;/li&gt;
&lt;li&gt;Select the one you like&lt;/li&gt;
&lt;li&gt;Right-click on it and copy the link ( the link should end with .zip)&lt;/li&gt;
&lt;li&gt;In case you didn't see .zip at the end, download it. After downloading it, click on your download history and copy the link there.&lt;/li&gt;
&lt;li&gt;Go to your terminal, type wget, and paste the link&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%2Fzbyb64dyfubm5xtt3hds.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%2Fzbyb64dyfubm5xtt3hds.PNG" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type ls (to see it)&lt;/li&gt;
&lt;li&gt;Type du -sh to see (the size)&lt;/li&gt;
&lt;li&gt;Type sudo apt install unzip -y ( to install unzip so that we can unzip the zipped image)&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%2Fv00cnza8690rsucw5qm1.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%2Fv00cnza8690rsucw5qm1.PNG" alt=" " width="568" height="129"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After installing the unzip, type unzip and paste your image name&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%2Fmvnk6n8psxi74eimp4rz.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%2Fmvnk6n8psxi74eimp4rz.PNG" alt=" " width="722" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type ls ( you will see both the zipped and unzipped files)&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%2Fh0vwpzjmo6bix9s28mic.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%2Fh0vwpzjmo6bix9s28mic.PNG" alt=" " width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Dockerfile, and build our image&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type nano dockerfile&lt;/li&gt;
&lt;li&gt;Once it opens, type FROM ubuntu:latest&lt;/li&gt;
&lt;li&gt;RUN apt-get update &lt;/li&gt;
&lt;li&gt;RUN apt-get install -y nginx&lt;/li&gt;
&lt;li&gt;RUN rm -rf /var/www/html&lt;/li&gt;
&lt;li&gt;COPY . /var/www/html&lt;/li&gt;
&lt;li&gt;EXPOSE 80&lt;/li&gt;
&lt;li&gt;CMD ["nginx", "-g", "daemon off;"]&lt;/li&gt;
&lt;li&gt;Press control x, press y to save and exit&lt;/li&gt;
&lt;li&gt;Once you exit, type cat dockerfile&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%2F4uxvaev3nbj838sqfh3o.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%2F4uxvaev3nbj838sqfh3o.PNG" alt=" " width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type sudo cp dockerfile and the name of your image/&lt;/li&gt;
&lt;li&gt;Type cd and the name of your image&lt;/li&gt;
&lt;li&gt;Type ls&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%2Fw8vucl0clkml8dgqbb2o.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%2Fw8vucl0clkml8dgqbb2o.PNG" alt=" " width="778" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type ls -la&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%2F04z70ay736g220lresr9.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%2F04z70ay736g220lresr9.PNG" alt=" " width="721" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Let's build our image&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type sudo docker build -t your image name . (The dot is telling the location of the file)&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%2Fvkeh01fvuoadbdcss4jf.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%2Fvkeh01fvuoadbdcss4jf.PNG" alt=" " width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run a container with the image by typing sudo docker run -d -p 80:80 your image name&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%2Fa5sb5qy5mzzki4xsje90.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%2Fa5sb5qy5mzzki4xsje90.PNG" alt=" " width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type sudo docker ps&lt;/li&gt;
&lt;li&gt;Go and copy your virtual machine public IP, go to your browser and paste it with:80&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%2Fpyu3d5cier7mq537pcqs.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%2Fpyu3d5cier7mq537pcqs.PNG" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Let's push our image to our Docker repository&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type sudo docker tag your image name:latest the name of your repository:vi&lt;/li&gt;
&lt;li&gt;Type sudo docker images&lt;/li&gt;
&lt;li&gt;Type sudo docker login -u your Docker Hub registry username&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%2F0z2xlwlae0wvhn55tf3z.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%2F0z2xlwlae0wvhn55tf3z.PNG" alt=" " width="724" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your Docker Hub registry, click on your username icon on the right, and click settings. Click on personal token and generate a token&lt;/li&gt;
&lt;li&gt;Copy the token, go back to your terminal, and paste it where you see password&lt;/li&gt;
&lt;li&gt;Type sudo docker tag your image name your repository name:vi&lt;/li&gt;
&lt;li&gt;Then type sudo docker push your docker repository name:vi&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%2Ffgxpp6da05rsdpmmpzgr.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%2Ffgxpp6da05rsdpmmpzgr.PNG" alt=" " width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Final result&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%2F7gsfvsvtqmzo2mw4x020.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%2F7gsfvsvtqmzo2mw4x020.PNG" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>docker</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Backbone of IT: Understanding the Role of a System Administrator</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Fri, 08 Aug 2025 12:31:45 +0000</pubDate>
      <link>https://dev.to/christiana_orji/the-backbone-of-it-understanding-the-role-of-a-system-administrator-4mg7</link>
      <guid>https://dev.to/christiana_orji/the-backbone-of-it-understanding-the-role-of-a-system-administrator-4mg7</guid>
      <description>&lt;p&gt;&lt;em&gt;The Backbone of IT: Understanding the Role of a System Administrator&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Introduction&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the ever-evolving world of technology, System Administrators (SysAdmins) play a vital role in ensuring the smooth operation of an organization's IT infrastructure. They are the unsung heroes who work behind the scenes to keep systems running, networks secure, and users productive. In this article, we'll explore some commands a System Administrator should know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some Basic Commands you Should Know as a System Admin&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you type &lt;strong&gt;whoami&lt;/strong&gt;, you see who you are logged in as&lt;/li&gt;
&lt;li&gt;When you type &lt;strong&gt;who&lt;/strong&gt;, you see who logged in and the time &lt;/li&gt;
&lt;li&gt;When you type &lt;strong&gt;echo $SHELL&lt;/strong&gt;, you see the type of shell you are using &lt;/li&gt;
&lt;li&gt;When you type &lt;strong&gt;hostnamectl&lt;/strong&gt;, you get information of your virtual machine &lt;/li&gt;
&lt;li&gt;When you type &lt;strong&gt;useradd charlie&lt;/strong&gt;, you create a User as a root user&lt;/li&gt;
&lt;li&gt;When you type &lt;strong&gt;sudo useradd charlie&lt;/strong&gt;, you create a User as an ordinary user
&lt;strong&gt;NOTE:&lt;/strong&gt;when you create a User with sudo adduser charlie, it will create charlie as the user and ask you to create a password for the user. But when you use sudo useradd charlie, it will only create the username, then you will have to create a password separately.&lt;/li&gt;
&lt;li&gt;When you type &lt;strong&gt;sudo passwd charlie&lt;/strong&gt;, you are creating a password for charlie. Put the password and retype it&lt;/li&gt;
&lt;li&gt;If you want to switch to charlie, firstly, switch to root user &lt;strong&gt;sudo su -&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Then type &lt;strong&gt;nano /etc/passwd&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Locate charlie, remove &lt;strong&gt;sh&lt;/strong&gt; from bin/sh, and replace it with bash and press cntrl x to save&lt;/li&gt;
&lt;li&gt;Then type su - charlie&lt;/li&gt;
&lt;li&gt;Type sudo userdel charlie to delete the username charlie or any user&lt;/li&gt;
&lt;li&gt;To create a group, type &lt;strong&gt;sudo groupadd name of the group&lt;/strong&gt; (either systemadmin group)&lt;/li&gt;
&lt;li&gt;To check all the groups created, type &lt;strong&gt;sudo cat/etc/group&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;To add User to the group, type &lt;strong&gt;sudo user mod -aG systemadmin charlie&lt;/strong&gt;. (The aG is used when you want to add User to multiple groups. But G is when you are adding the user to a single group)&lt;/li&gt;
&lt;li&gt;When you type &lt;strong&gt;systeminfo&lt;/strong&gt;, you get information about your system &lt;/li&gt;
&lt;li&gt;When you type &lt;strong&gt;cd/var/log/&lt;/strong&gt;, &lt;strong&gt;ll&lt;/strong&gt;, then &lt;strong&gt;cat auth.log&lt;/strong&gt;, you will see who tried to access your system&lt;/li&gt;
&lt;li&gt;To add User as admin, type &lt;strong&gt;cat/etc/sudoers&lt;/strong&gt; or &lt;strong&gt;nano/etc/sudoers&lt;/strong&gt; or &lt;strong&gt;visido&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Scroll down to root user privilege &lt;/li&gt;
&lt;li&gt;Type the &lt;strong&gt;username (e.g charlie) ALL =(ALL:ALL) ALL under the roo, then press cntrl x to save&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Type &lt;strong&gt;sudo su - charlie&lt;/strong&gt; to login as charlie&lt;/li&gt;
&lt;li&gt;Type &lt;strong&gt;sudo apt update, then put the user password&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>developers</category>
      <category>cli</category>
    </item>
    <item>
      <title>Deploying A Simple Nodejs App on AWS</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Thu, 07 Aug 2025 13:59:15 +0000</pubDate>
      <link>https://dev.to/christiana_orji/deploying-a-simple-nodejs-app-on-aws-3i2f</link>
      <guid>https://dev.to/christiana_orji/deploying-a-simple-nodejs-app-on-aws-3i2f</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this project, we will deploy a simple Node.js application on AWS. AWS provides a Scalable and secure platform for hosting web applications, and Node.js is a popular JavaScript runtime for building server-side applications. By deploying our Node.js app on AWS, we will leverage the benefits of cloud computing, including scalability, reliability, and cost-effectiveness. So, let's dive in 😊 &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Creating EC2 instance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your AWS Management Console and search for EC2 &lt;/li&gt;
&lt;li&gt;Click on it&lt;/li&gt;
&lt;li&gt;Click on launch instance &lt;/li&gt;
&lt;li&gt;Name your instance &lt;/li&gt;
&lt;li&gt;Let's work with Ubuntu &lt;/li&gt;
&lt;li&gt;Choose free tier &lt;/li&gt;
&lt;li&gt;Create key pair (choose pem)&lt;/li&gt;
&lt;li&gt;Launch your instance &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Connecting our EC2&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After creating the EC2, connect it with any terminal of your choice&lt;/li&gt;
&lt;li&gt;After connecting, type sudo apt update &lt;/li&gt;
&lt;li&gt;After updating, type sudo apt install git -y&lt;/li&gt;
&lt;li&gt;After installing git, check the version by typing git --version &lt;/li&gt;
&lt;li&gt;Type sudo apt install nodejs -y&lt;/li&gt;
&lt;li&gt;After installing nodejs, type node -v (for version)&lt;/li&gt;
&lt;li&gt;Type sudo apt install npm -y&lt;/li&gt;
&lt;li&gt;After installing npm, type git clone and paste this GitHub repo URL &lt;a href="https://github.com/Christianaorji/AWS-node-js-app-deployment" rel="noopener noreferrer"&gt;project repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Type ls&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%2Fr9uja3y0mrn4qflhff9q.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%2Fr9uja3y0mrn4qflhff9q.PNG" alt=" " width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cd to AWS-node-js-app-deployment&lt;/li&gt;
&lt;li&gt;Type touch .env (to create an env file)&lt;/li&gt;
&lt;li&gt;Type vi .env (to open the file)&lt;/li&gt;
&lt;li&gt;press your esc button and press i &lt;/li&gt;
&lt;li&gt;Go to the GitHub repo, scroll down and copy the .env command you see &lt;/li&gt;
&lt;li&gt;Paste it in the vi file &lt;/li&gt;
&lt;li&gt;Then press your esc button and type :wq! (To save and quit)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Getting Stripe API key&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your browser and search stripe&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - Click on create account 
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Fill in the form&lt;/li&gt;
&lt;li&gt;After creating the account, click on more below &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%2F7y96oc25ukxhnea49x2t.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%2F7y96oc25ukxhnea49x2t.PNG" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on developers &lt;/li&gt;
&lt;li&gt;Click on API keys&lt;/li&gt;
&lt;li&gt;copy the publishable key and secret key, paste it in your notepad&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%2Fpueqrf3oqaryaoe9pllr.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%2Fpueqrf3oqaryaoe9pllr.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go back to your terminal &lt;/li&gt;
&lt;li&gt;Type vi .env &lt;/li&gt;
&lt;li&gt;press your esc button and press i &lt;/li&gt;
&lt;li&gt;Paste the publishable key where you see publishable key, and paste the secret key where you see secret key &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%2F1334wcwrrk3foycn6tda.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%2F1334wcwrrk3foycn6tda.PNG" alt=" " width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type :wq! (Save and quit)&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%2Fw53b2zidv22rm41id7nb.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%2Fw53b2zidv22rm41id7nb.PNG" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type cat .env (to view the content of your file)&lt;/li&gt;
&lt;li&gt;Type npm install&lt;/li&gt;
&lt;li&gt;Type npm start&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Setting security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your AWS EC2 instance &lt;/li&gt;
&lt;li&gt;Click on the instance &lt;/li&gt;
&lt;li&gt;Click on security &lt;/li&gt;
&lt;li&gt;Click on sg-0&lt;/li&gt;
&lt;li&gt;Click on edit inbound rules &lt;/li&gt;
&lt;li&gt;Click on Add rule&lt;/li&gt;
&lt;li&gt;Under type, choose custom TCP &lt;/li&gt;
&lt;li&gt;Under port range, put 3000 ( or any port of your choice)&lt;/li&gt;
&lt;li&gt;Choose anywhere&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Testing our Nodejs App&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy your EC2 public IP &lt;/li&gt;
&lt;li&gt;Go to your browser &lt;/li&gt;
&lt;li&gt;Paste the IP:3000 &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please try this steps and give me a feedback.&lt;br&gt;
See you soon...&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Mastering the Shell: Essential Commands and their Uses</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Mon, 28 Jul 2025 13:09:58 +0000</pubDate>
      <link>https://dev.to/christiana_orji/mastering-the-shell-essential-commands-and-their-uses-4313</link>
      <guid>https://dev.to/christiana_orji/mastering-the-shell-essential-commands-and-their-uses-4313</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hey there, fellow devs! If you're working with Linux or macOS, mastering shell commands is a must. Here's a list of essential shell commands and their uses to get you started:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;pwd&lt;/strong&gt;: Print working directory. Shows the current directory you're in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cd&lt;/strong&gt;: Change directory. Navigate to a different directory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cd ~&lt;/strong&gt;: Takes you to your home directory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cd ..&lt;/strong&gt;: Takes you to the parent directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;File Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ls&lt;/strong&gt;: List files and directories. Use &lt;strong&gt;-l&lt;/strong&gt; for detailed information and &lt;strong&gt;-a&lt;/strong&gt; for hidden files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ls -ltr&lt;/strong&gt;: list out all the directories/ files/folders in your VM &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mkdir&lt;/strong&gt;: Make a new directory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rm&lt;/strong&gt;: Remove files or directories. Use &lt;strong&gt;-r&lt;/strong&gt; for recursive deletion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cp&lt;/strong&gt;: Copy files or directories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mv&lt;/strong&gt;: Move or rename files and directories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;File Editing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;vi&lt;/strong&gt;: Open a file in the Vim editor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cat&lt;/strong&gt;: Display the contents of a file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;System Information&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;free&lt;/strong&gt;: Display memory and disk usage information. Use &lt;strong&gt;- g&lt;/strong&gt; for gigabytes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;df&lt;/strong&gt;: Display disk usage information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;top&lt;/strong&gt;: Display system resource usage information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nproc&lt;/strong&gt;: Display the number of processing units available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Miscellaneous&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;echo&lt;/strong&gt;: Output text to the screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;touch&lt;/strong&gt;: Create a new empty file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;chmod&lt;/strong&gt;: Change file permissions.
-&lt;strong&gt;chmod 777&lt;/strong&gt;: Grant permission to a file for every users. E.g chmod 777 then the name of the file, then do ./ or sh the name of the file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;chmod 444&lt;/strong&gt;: Grant access to you, your group, and everyone to read&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;chmod 222&lt;/strong&gt;: granting access for you, your group and everyone to write the file &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;chmod 111&lt;/strong&gt;: granting access to you, your group and everyone to execute the file &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tips and Tricks&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;man&lt;/strong&gt; command to display manual pages for a specific command.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;./&lt;/strong&gt; to execute a script or program in the current directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope this helps...&lt;/p&gt;

</description>
      <category>shell</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>linux</category>
    </item>
    <item>
      <title>Automating Azure infrastructure With GitHub Actions and Terraform.</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Sat, 26 Jul 2025 15:24:12 +0000</pubDate>
      <link>https://dev.to/christiana_orji/automating-azure-infrastructure-with-github-actions-and-terraform-1aki</link>
      <guid>https://dev.to/christiana_orji/automating-azure-infrastructure-with-github-actions-and-terraform-1aki</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction to GitHub Actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Git actions is a continuous integration and continuous delivery platform that allows us to &lt;strong&gt;build&lt;/strong&gt;, &lt;strong&gt;test&lt;/strong&gt;, &lt;strong&gt;deploy&lt;/strong&gt; our tasks. It is an automation tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical Section&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a private GitHub repository&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your GitHub and create a private repository &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Generate a workflow token in GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your GitHub and click on your profile &lt;/li&gt;
&lt;li&gt;Scroll down and click on settings &lt;/li&gt;
&lt;li&gt;Scroll down and click on developers by your left &lt;/li&gt;
&lt;li&gt;Click on personal access token drop down and select tokens (classic)&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%2Fy4r18g7rp0rpov9sasxl.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%2Fy4r18g7rp0rpov9sasxl.PNG" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on generate tokens &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%2F8081dpn1f1jbw8iipe5q.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%2F8081dpn1f1jbw8iipe5q.PNG" alt=" " width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name your token&lt;/li&gt;
&lt;li&gt;Scroll down and enable workflow &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%2Fohfc2vh9gnaxnm5zm7fk.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%2Fohfc2vh9gnaxnm5zm7fk.PNG" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scroll down and click on generate tokens &lt;/li&gt;
&lt;li&gt;Before you exist that page, make sure you copy your token &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create a file&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a file on your laptop &lt;/li&gt;
&lt;li&gt;Right click on it and open it with VS code &lt;/li&gt;
&lt;li&gt;Create a backend.tf file&lt;/li&gt;
&lt;li&gt; Create a HCP terraform account, create an organization and workspace. Then copy the backend code &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%2Fbf5o0vsxpatsor5u66tu.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%2Fbf5o0vsxpatsor5u66tu.jpg" alt=" " width="720" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go back to your VS code and paste it in the backend.tf file and do the necessary editing &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Let's push this to our GitHub repository&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After doing the above, type git init&lt;/li&gt;
&lt;li&gt;Type git add .&lt;/li&gt;
&lt;li&gt;Type git commit -m "azure backend file added"&lt;/li&gt;
&lt;li&gt;Type git remote add origin &lt;a href="https://your" rel="noopener noreferrer"&gt;https://your&lt;/a&gt; GitHub username:your workflow &lt;a href="mailto:token@github.com"&gt;token@github.com&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Type git push -u origin main&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%2Fhls8xziplgbyrcu6jzk7.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%2Fhls8xziplgbyrcu6jzk7.PNG" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: GitHub Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Firstly, we will install the code pipeline in our repository &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your GitHub repository, click on Action at the top &lt;/li&gt;
&lt;li&gt;Click on terraform configure (because we want to use terraform)&lt;/li&gt;
&lt;li&gt;Go back to your VS code and create a folder. Let's name it .github, workflows &lt;/li&gt;
&lt;li&gt;Click the workflows folder and create a file under it. Let's name it cicd.yml &lt;/li&gt;
&lt;li&gt;Go back to your GitHub terraform configure and copy from name: terraform to the end &lt;/li&gt;
&lt;li&gt;Click on the cicd.yml on your VS code and paste those things you copied &lt;/li&gt;
&lt;li&gt;Start editing it&lt;/li&gt;
&lt;li&gt;Change the name to terraform infrastructure deployment to Azure cloud (or anything)&lt;/li&gt;
&lt;li&gt;Remove pull_request under branch ["main"]&lt;/li&gt;
&lt;li&gt;Remove permission: and contents:read&lt;/li&gt;
&lt;li&gt;Name: under jobs, put terraform azure cloud &lt;/li&gt;
&lt;li&gt;Go to your GitHub repository &lt;/li&gt;
&lt;li&gt;Click settings on top of it &lt;/li&gt;
&lt;li&gt;Click on secret and variables&lt;/li&gt;
&lt;li&gt;Click actions&lt;/li&gt;
&lt;li&gt;Click on secret, and click on create new repository &lt;/li&gt;
&lt;li&gt;Let's name it TF_API_TOKEN&lt;/li&gt;
&lt;li&gt;Go to your HCP terraform, create a new token in your HCP terraform, name it git actions pipeline token&lt;/li&gt;
&lt;li&gt;Copy the token &lt;/li&gt;
&lt;li&gt;Go to the git actions secret you were creating in GitHub and paste the token you created in HCP terraform &lt;/li&gt;
&lt;li&gt;Click add&lt;/li&gt;
&lt;li&gt;go to your VS code, remove terraform format and terraform fmt-check&lt;/li&gt;
&lt;li&gt;Scroll down and remove if github.ref==&lt;/li&gt;
&lt;li&gt;type git add. &lt;/li&gt;
&lt;li&gt;type git commit -m "pipeline code added"&lt;/li&gt;
&lt;li&gt;type git push &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%2F6jlnl3ecmd33s5uus2t4.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%2F6jlnl3ecmd33s5uus2t4.PNG" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is what it should look like &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>azure</category>
      <category>githubactions</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Terraform: How to Deploy Compute Engine, Network, and Subnet with Terraform on GCP</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Thu, 24 Jul 2025 13:45:02 +0000</pubDate>
      <link>https://dev.to/christiana_orji/terraform-how-to-deploy-compute-engine-network-and-subnet-with-terraform-on-gcp-1f4h</link>
      <guid>https://dev.to/christiana_orji/terraform-how-to-deploy-compute-engine-network-and-subnet-with-terraform-on-gcp-1f4h</guid>
      <description>&lt;p&gt;I'm exited to share with you a comprehensive guide on deploying compute engine, network and Subnet on GCP using terraform. This guide will walk you through the process of setting up robust infrastructure on GCP using terraform's infrastructure-as-a-code (Iac) approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisite&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before we dive in, make sure you have: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A GCP account with billing enabled &lt;/li&gt;
&lt;li&gt;Terraform installed on your machine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a file&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a file on your laptop, name it terraform project &lt;/li&gt;
&lt;li&gt;Right click on the file and open it with VS code.&lt;/li&gt;
&lt;li&gt;Create a provider.tf file once you open your VS code &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Go to your browser and search for terraform provider &lt;/li&gt;
&lt;li&gt;Click on GCP (because we are deploying the resources to GCP)&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%2Fbshfbprunjaehvqa6wnu.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%2Fbshfbprunjaehvqa6wnu.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on use provider&lt;/li&gt;
&lt;li&gt;Then copy provider command&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%2Fv9o1i5xswdd49mj8i515.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%2Fv9o1i5xswdd49mj8i515.PNG" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your VS code, click on the provider.tf file and paste the provider command you copied &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Creating a system user for terraform on GCP&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your GCP dashboard &lt;/li&gt;
&lt;li&gt;Click on the 3 lines by your left &lt;/li&gt;
&lt;li&gt;Put your cursor on IAM &amp;amp; admin, and click on service account &lt;/li&gt;
&lt;li&gt;Click on create service account at the top&lt;/li&gt;
&lt;li&gt;Let's name it terraform automation&lt;/li&gt;
&lt;li&gt;Scroll down and click create &lt;/li&gt;
&lt;li&gt;Click select a role under grant this service account &lt;/li&gt;
&lt;li&gt;Put your cursor on basic and select owner&lt;/li&gt;
&lt;li&gt;Click on continue &lt;/li&gt;
&lt;li&gt;Click done&lt;/li&gt;
&lt;li&gt;After creating it, click on it&lt;/li&gt;
&lt;li&gt;Click on key at your top&lt;/li&gt;
&lt;li&gt;Click add key, and click create new key &lt;/li&gt;
&lt;li&gt;Choose Json and click create 
The private key will be downloaded to your laptop &lt;/li&gt;
&lt;li&gt;Go to your downloads in your laptop &lt;/li&gt;
&lt;li&gt;Locate the private key and right click on it, and copy it&lt;/li&gt;
&lt;li&gt;Open that terraform project file you created on your laptop and paste the private key you copied &lt;/li&gt;
&lt;li&gt;Go to your VS code, you will see the key&lt;/li&gt;
&lt;li&gt;Right click on the key and rename it to something short (e.g gcp-key)&lt;/li&gt;
&lt;li&gt;Click on your provider.tf file &lt;/li&gt;
&lt;li&gt;In line 10, type provider "google"{&lt;/li&gt;
&lt;li&gt;In line 11, type #configuration options &lt;/li&gt;
&lt;li&gt;Line 12, type project ="go to your google dashboard, click on project at the top, copy the project id and paste it here"&lt;/li&gt;
&lt;li&gt;Line 13, type region ="paste your region"&lt;/li&gt;
&lt;li&gt;Line 14, type credentials =file("gcp-key.json")
-Line 15, put}&lt;/li&gt;
&lt;li&gt;&lt;p&gt;save&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to your terraform provider on your browser &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on documentation &lt;br&gt;
-Search google compute network &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the code under network custom MTU &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Go to your VS code, create a vpc.tf file and paste the command you copied &lt;/li&gt;
&lt;li&gt;Change my-project name to anything you want (e.g gcp project)&lt;/li&gt;
&lt;li&gt;Where you see vpc-network ( front of name) name it to whatever you want or leave it &lt;/li&gt;
&lt;li&gt;Change true to false (because this is a customized VPC)&lt;/li&gt;
&lt;li&gt;save &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Subnet Creation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a file in your VS code and name it subnet.tf&lt;/li&gt;
&lt;li&gt;Go to your terraform provider documentation &lt;/li&gt;
&lt;li&gt;Search google compute subnet&lt;/li&gt;
&lt;li&gt;Copy the command and paste it in the subnet.tf&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%2Fdxslnmyzpycm96i108sa.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%2Fdxslnmyzpycm96i108sa.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete from resource "google_compute_network" to false}&lt;/li&gt;
&lt;li&gt;Where you see "test-subnetwork" name it anything or leave it default &lt;/li&gt;
&lt;li&gt;Change the region to your region &lt;/li&gt;
&lt;li&gt;Change custom-test to vpc_network.id or anything &lt;/li&gt;
&lt;li&gt;save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Firewall Creation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a file in your VS code and name it firewall.tf&lt;/li&gt;
&lt;li&gt;Go to your terraform provider documentation &lt;/li&gt;
&lt;li&gt;Search for google compute firewall &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%2Fiwmhcbw6p1ylwjnuuhgy.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%2Fiwmhcbw6p1ylwjnuuhgy.PNG" alt=" " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the command and paste it in firewall.tf&lt;/li&gt;
&lt;li&gt;Where you see default, in front of network=, change it to vpc_network.name&lt;/li&gt;
&lt;li&gt;Where you see 8080, change it to 22, leave 80, remove 1000-2000 and replace it with 443&lt;/li&gt;
&lt;li&gt;Where you see test-firewall, change it to frontend firewall or anything &lt;/li&gt;
&lt;li&gt;Where you see "web", change it to Frontend &lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Create Virtual Machine&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a file, name it instance.tf&lt;/li&gt;
&lt;li&gt;Go to your terraform provider documentation &lt;/li&gt;
&lt;li&gt;Search google compute instance &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%2Frfhs67wbomoa0pmvczqb.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%2Frfhs67wbomoa0pmvczqb.PNG" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the command and paste it in instance.tf&lt;/li&gt;
&lt;li&gt;Where you see "default" in the first line, change it to "web-app" or anything you want &lt;/li&gt;
&lt;li&gt;Where you see "my-custom-sa" in front of account_id, change it to "web-sa"&lt;/li&gt;
&lt;li&gt;Where you see "my-instance" in line 7, change it "frontend-web-app" or anything you want &lt;/li&gt;
&lt;li&gt;Zone in line 9, put your zone&lt;/li&gt;
&lt;li&gt;Line 11, (tags), change those things to ("frontend")&lt;/li&gt;
&lt;li&gt;Line 28 (network), remove default and put google-compute-network.vpc_network&lt;/li&gt;
&lt;li&gt;In line 36 (foo), remove "bar" and replace it with "web"&lt;/li&gt;
&lt;li&gt;Line 39, you can remove the "echo hi&amp;gt;/test txt" and put "sudo apt install nginx" or leave it &lt;/li&gt;
&lt;li&gt;Line 43, remove default, and replace it with the terraform system account id/&lt;/li&gt;
&lt;li&gt;&lt;p&gt;save&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type terraform validate (to check for any possible error)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type terraform plan&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type apply --auto-approve or terraform apply &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you are done with your deployment, type terraform destroy &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In this guide, we have successfully deployed a Compute Engine Instance, Network and Subnet on GCP using terraform. You can now use this infrastructure as a starting point for your project and scale it as needed.&lt;/p&gt;

&lt;p&gt;See you soon...&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>terraform</category>
      <category>beginners</category>
      <category>gcp</category>
    </item>
    <item>
      <title>Terraform: Some Basic Terminologies and Terraform Installation</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Thu, 24 Jul 2025 10:18:09 +0000</pubDate>
      <link>https://dev.to/christiana_orji/terraform-some-basic-terminologies-and-terraform-installation-1ch1</link>
      <guid>https://dev.to/christiana_orji/terraform-some-basic-terminologies-and-terraform-installation-1ch1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction to terraform&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Terraform is an open source Iac tool, developed by &lt;strong&gt;Hashicorp&lt;/strong&gt;. It allows you to define, manage and provision infrastructure in a safe, predictable, and automated way using a declarative configuration language.&lt;/p&gt;

&lt;p&gt;Terraform managed both cloud infrastructure (AWS, Azure, GCP) and on-prem resources (VMware, Kubernetes, and more). With terraform, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provision infrastructure: create servers, databases, networks and more&lt;/li&gt;
&lt;li&gt;Update infrastructure: modify existing resources without downtime &lt;/li&gt;
&lt;li&gt;&lt;p&gt;Destroy infrastructure: remove resources when there are no longer needed &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Terraform Providers&lt;/strong&gt;&lt;br&gt;
Providers serves as a middleman between terraform and where you are deploying resources to. For example, provider "AWS"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hashicorp Configuration Language&lt;/strong&gt;&lt;br&gt;
HCl is the language terraform uses to create infrastructure resources and configurations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;br&gt;
These are the infrastructure resources you create with terraform. Example, Resources "aws_ec2_instance"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Terraform State&lt;/strong&gt;&lt;br&gt;
This is like a memory or storage that stores what have been created or modify. It also store the information of the infrastructure resources created or modify.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resources Block&lt;/strong&gt;&lt;br&gt;
It is a block that defines a specific resource you want to create or manage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resource Type&lt;/strong&gt;&lt;br&gt;
It is the specific type of resource you want to create e.g EC2 instance, Google compute engine, VPC e.t.c&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resource Name&lt;/strong&gt;&lt;br&gt;
It is a unique identifier for the resources within your terraform configuration &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Attributes/Machine Type/Region&lt;/strong&gt;&lt;br&gt;
It is a property or configuration of the resources often required to create or manage it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Variables&lt;/strong&gt;&lt;br&gt;
It is like a container that holds information. It's also inputs defined to make the configuration dynamic and reusable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Terraform Provisioners&lt;/strong&gt;&lt;br&gt;
These are used to execute scripts or commands on a resource after it is created or updated. This allows you to perform additional configuration or setup tasks on the resource, such as installing software, modifying files, or running shell commands.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Types of Peovisioners&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remote Executioner or Exec: it execute commands on the remote machine using SSH or WinRM.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Local Exec: it execute commands on the machine where terraform is running &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;File provisioner: it upload files or directories from the machine running terraform to the remote resources &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Installing Terraform&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here are the steps to install Terraform on Windows, macOS, and Linux:&lt;/p&gt;

&lt;p&gt;Windows&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Download the Terraform binary&lt;/em&gt;: Go to the Terraform downloads page and download the Windows binary (zip file).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Extract the binary&lt;/em&gt;: Extract the contents of the zip file to a directory, such as &lt;code&gt;C:\Terraform&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Add Terraform to the system PATH&lt;/em&gt;:

&lt;ul&gt;
&lt;li&gt;Right-click on "This PC" or "Computer" and select "Properties."&lt;/li&gt;
&lt;li&gt;Click on "Advanced system settings" on the left side.&lt;/li&gt;
&lt;li&gt;Click on "Environment Variables."&lt;/li&gt;
&lt;li&gt;Under "System Variables," scroll down and find the "Path" variable, then click "Edit."&lt;/li&gt;
&lt;li&gt;Click "New" and add the path to the Terraform binary (e.g., &lt;code&gt;C:\Terraform&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Verify the installation&lt;/em&gt;: Open a new Command Prompt or PowerShell window and run &lt;code&gt;terraform -v&lt;/code&gt; to verify that Terraform is installed correctly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;macOS (via Homebrew)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Install Homebrew&lt;/em&gt;: If you haven't already, install Homebrew by following the instructions on the Homebrew website.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Install Terraform&lt;/em&gt;: Run &lt;code&gt;brew tap hashicorp/tap&lt;/code&gt; and then &lt;code&gt;brew install hashicorp/tap/terraform&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Verify the installation&lt;/em&gt;: Run &lt;code&gt;terraform -v&lt;/code&gt; to verify that Terraform is installed correctly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Linux&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Download the Terraform binary&lt;/em&gt;: Go to the Terraform downloads page and download the Linux binary (zip file).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Extract the binary&lt;/em&gt;: Extract the contents of the zip file to a directory, such as &lt;code&gt;/usr/local/bin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Make the binary executable&lt;/em&gt;: Run &lt;code&gt;chmod +x /usr/local/bin/terraform&lt;/code&gt; to make the binary executable.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Verify the installation&lt;/em&gt;: Run &lt;code&gt;terraform -v&lt;/code&gt; to verify that Terraform is installed correctly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Alternatively, you can install Terraform on Linux using a package manager like apt (Ubuntu/Debian) or yum (RHEL/CentOS):&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ubuntu/Debian&lt;/em&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y gnupg software-properties-common&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get install terraform&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;RHEL/CentOS&lt;/em&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo yum install -y yum-utils&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo yum -y install terraform&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After installation, verify that Terraform is working correctly by running &lt;code&gt;terraform -v&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can install Terraform on Windows using Chocolatey. Here's how:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Install Chocolatey&lt;/em&gt;: If you haven't already, install Chocolatey by following the instructions on the Chocolatey website.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Install Terraform&lt;/em&gt;: Run the following command in an elevated Command Prompt or PowerShell:&lt;br&gt;
choco install terraform&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Verify the installation&lt;/em&gt;: Run &lt;code&gt;terraform -v&lt;/code&gt; to verify that Terraform is installed correctly.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it! Chocolatey will handle the installation and configuration for you.&lt;/p&gt;

&lt;p&gt;If you want to install a specific version of Terraform, you can use the &lt;code&gt;--version&lt;/code&gt; option:&lt;br&gt;
choco install terraform --version=1.5.2&lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;1.5.2&lt;/code&gt; with the desired version.&lt;/p&gt;

&lt;p&gt;Using Chocolatey makes it easy to manage and update Terraform on your Windows system.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>terraform</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Containerized Deployments: A Step-by-Step Guide to Deploying A Docker Image Using ECS and 2048 Game Application using EKS</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Sat, 19 Jul 2025 13:23:59 +0000</pubDate>
      <link>https://dev.to/christiana_orji/containerized-deployments-a-step-by-step-guide-to-deploying-a-docker-image-using-ecs-and-2048-game-1me8</link>
      <guid>https://dev.to/christiana_orji/containerized-deployments-a-step-by-step-guide-to-deploying-a-docker-image-using-ecs-and-2048-game-1me8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Containerization has revolutionized the way we deploy applications, providing a lightweight, portable, and efficient way to package software. AWS offers two powerful container orchestration services: Elastic Container Service (ECS) and Elastic Container Service for Kubernetes(EKS). In this guide, we'll walk through the process of deploying a docker image using ECS and a game application using EKS. Without wasting much time, let's dive in to today's project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 1: Deploying A Docker Image Using ECS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create an ECS Cluster&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login to your AWS Management Console &lt;/li&gt;
&lt;li&gt;Search for ECS and click on it &lt;/li&gt;
&lt;li&gt;Click on cluster by your left &lt;/li&gt;
&lt;li&gt;Click on create cluster&lt;/li&gt;
&lt;li&gt;Name your cluster &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%2Fn3f837pyk79yhtny713x.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%2Fn3f837pyk79yhtny713x.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on create &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%2Fjpe3pd3362d3m7plat5r.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%2Fjpe3pd3362d3m7plat5r.PNG" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After creating the cluster, click on ECR by your left ( open it in a new tab)&lt;/li&gt;
&lt;li&gt;Click on get started&lt;/li&gt;
&lt;li&gt;Click on repositories by your left &lt;/li&gt;
&lt;li&gt;click on create repository and create &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%2F6t1i8r8c1v15mq9z4zwj.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%2F6t1i8r8c1v15mq9z4zwj.PNG" alt=" " width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your terminal (preferably, using AWS CLI)&lt;/li&gt;
&lt;li&gt;Clone or fork this GitHub repo &lt;a href="https://github.com/Christianaorji/aws-devops-zero-to-hero/tree/main/day-21" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, then click on command.md&lt;/li&gt;
&lt;li&gt;Copy the login command from command.md&lt;/li&gt;
&lt;li&gt;paste it on your terminal 
-Remove.dkr.ecr.amazonaws.com&lt;/li&gt;
&lt;li&gt;Go to the repository you created in your AWS&lt;/li&gt;
&lt;li&gt;Copy the repo URL and paste it where you remove those things, and put your AWS region where you see region close to /docker &lt;/li&gt;
&lt;li&gt;Go back to the GitHub and copy the command for build docker image from command.md and paste it in your terminal &lt;/li&gt;
&lt;li&gt;Remove.dkr.ecr.amazonaws.com and replace it with your repo URL.&lt;/li&gt;
&lt;li&gt;Go back to the GitHub and copy the push image command, and paste it in your terminal &lt;/li&gt;
&lt;li&gt;Remove the.dkr.ecr.amazonaws.com and replace it with your repo URL. Remove the dot (.) by the end of latest then hit enter &lt;/li&gt;
&lt;li&gt;After creating and pushing, go back to your ECR, click on task definition by your left &lt;/li&gt;
&lt;li&gt;Click on create task definition &lt;/li&gt;
&lt;li&gt;Name the task&lt;/li&gt;
&lt;li&gt;Scroll down to memory and reduce it (optional though)&lt;/li&gt;
&lt;li&gt;Scroll down to task execution role&lt;/li&gt;
&lt;li&gt;Click the drop-down button and select create new role (because we want to integrate cloud watch)&lt;/li&gt;
&lt;li&gt;Scroll down to container details &lt;/li&gt;
&lt;li&gt;Name the container &lt;/li&gt;
&lt;li&gt;Paste your repo URL in image URL at the end of the URL, put :latest&lt;/li&gt;
&lt;li&gt;Put your port number under container port&lt;/li&gt;
&lt;li&gt;Choose http under app protocol &lt;/li&gt;
&lt;li&gt;Click on create &lt;/li&gt;
&lt;li&gt;After creating the task definition, click on it to see if it is active &lt;/li&gt;
&lt;li&gt;If it is active, click on deploy drop down above and select run task&lt;/li&gt;
&lt;li&gt;Under existing cluster put your cluster &lt;/li&gt;
&lt;li&gt;Then click on create &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Part 2: Deploying 2048 Game Application Using EKS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install EKSCTL&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before installing EKSCTL, ensure you have AWS CLI installed and configured in your laptop &lt;/li&gt;
&lt;li&gt;After installing your EKSCTL, open it and create cluster &lt;/li&gt;
&lt;li&gt;Here is the command for your Cluster creation &lt;a href="https://github.com/Christianaorji/aws-devops-zero-to-hero/blob/main/day-22/installing-eks.md" rel="noopener noreferrer"&gt;Cluster&lt;/a&gt;. Behind --name, remove demo-cluster and put the name of what you want to name your cluster. Where you see region, remove US-east-1 and put your region then hit enter &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%2Fk952dhpe59kdzmj7esw4.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%2Fk952dhpe59kdzmj7esw4.PNG" alt=" " width="800" height="282"&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%2Fu7klr9f0siaifhzbo5dx.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%2Fu7klr9f0siaifhzbo5dx.PNG" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your AWS, search for cluster, you will see your cluster 
&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%2F7llj4ne4ms8w2yx93l05.PNG" alt=" " width="800" height="430"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: Using EKSCTL to create cluster is very fast because it will create everything including network automatically&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your AWS Management Console and search for EKS, and click on it &lt;/li&gt;
&lt;li&gt;You will see your cluster you just created &lt;/li&gt;
&lt;li&gt;Go back to your EKSCTL and type aws eks update-kubeconfig--name your cluster name--region your region, then hit enter &lt;/li&gt;
&lt;li&gt;Now let's deploy our app&lt;/li&gt;
&lt;li&gt;Go to the &lt;a href="https://github.com/Christianaorji/aws-devops-zero-to-hero/tree/main/day-22" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on 2048-app-deploy&lt;/li&gt;
&lt;li&gt;Copy everything under create fargate profile &lt;/li&gt;
&lt;li&gt;Paste it in your EKSCTL &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%2Fjtba6r9f2uh7gztzwkna.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%2Fjtba6r9f2uh7gztzwkna.PNG" alt=" " width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the region to your region and the cluster name hit enter &lt;/li&gt;
&lt;li&gt;Go to your cluster in your AWS, scroll down to fargate profile to see if the fargate profile you created is there&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%2Foiobsjup3s7ykvy7lers.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%2Foiobsjup3s7ykvy7lers.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fylmlks0slks6ow0tr0g8.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%2Fylmlks0slks6ow0tr0g8.PNG" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cluster and fargate created&lt;/li&gt;
&lt;li&gt;Go to the GitHub, and click on 2048-app&lt;/li&gt;
&lt;li&gt;Copy deploy the deployment URL&lt;/li&gt;
&lt;li&gt;Paste it in your EKSCTL enter ( this is to deploy ingress)&lt;/li&gt;
&lt;li&gt;Type kubectl get pods -n game-2048 -w enter (to see if the ingress has been created)&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%2Fk1jsd2428wke0olpfur0.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%2Fk1jsd2428wke0olpfur0.PNG" alt=" " width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type kubectl get svc -n gameb-2048 enter (to see if the service is running)&lt;/li&gt;
&lt;li&gt;Type kubectl get ingress -n game-2048 enter&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%2F9fnav49vkcfp674wx502.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%2F9fnav49vkcfp674wx502.PNG" alt=" " width="800" height="173"&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%2F5rpn817ohirx3sgybouk.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%2F5rpn817ohirx3sgybouk.PNG" alt=" " width="659" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Now let's create ingress controller&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Go to &lt;a href="https://github.com/Christianaorji/aws-devops-zero-to-hero/tree/main/day-22" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on configure oidc connector.md&lt;/li&gt;
&lt;li&gt;Copy the command to configure IAM OIDC PROVIDER
(eksctl utils associate)&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%2F52n4fez1v5074qlbe512.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%2F52n4fez1v5074qlbe512.PNG" alt=" " width="800" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste it in your EKSCTL terminal. Change the cluster name to your cluster name &lt;/li&gt;
&lt;li&gt;Go to here &lt;a href="https://github.com/Christianaorji/aws-devops-zero-to-hero/blob/main/day-22/alb-controller-add-on.md" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on alb controller and copy the command for download IAM policy&lt;/li&gt;
&lt;li&gt;Paste it in your EKSCTL terminal enter &lt;/li&gt;
&lt;li&gt;Go back to the alb controller in the GitHub, cpy the create IAM Role command&lt;/li&gt;
&lt;li&gt;Paste it in your EKSCTL terminal &lt;/li&gt;
&lt;li&gt;Where you see  put your AWS account ID there. Put your cluster name where you see cluster name &lt;/li&gt;
&lt;li&gt;Copy the helm command from alb controller too&lt;/li&gt;
&lt;li&gt;paste it in your EKSCTL terminal&lt;/li&gt;
&lt;li&gt;Go to your cluster in your AWS&lt;/li&gt;
&lt;li&gt;Click on network &lt;/li&gt;
&lt;li&gt;Copy the VPC info&lt;/li&gt;
&lt;li&gt;Go back to your EKSCTL terminal, remove the VPC id you see and paste yours&lt;/li&gt;
&lt;li&gt;Put your region &lt;/li&gt;
&lt;li&gt;Put your cluster name enter&lt;/li&gt;
&lt;li&gt;Go to your AWS cluster, click on network and you will see your VPC created &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%2F2w7zznh490f6su1pvmyf.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%2F2w7zznh490f6su1pvmyf.PNG" alt=" " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type kubectl get deployment -n kube-system aws-loadbalancer-controller&lt;/li&gt;
&lt;li&gt;Type kubectl get deployment -n kube-system aws-loadbalancer-controller -w enter &lt;/li&gt;
&lt;li&gt;Type kubectl get pods -n kube-system -w enter (to see your cluster pods)&lt;/li&gt;
&lt;li&gt;After confirming it everything is ok, go to your AWS Management Console &lt;/li&gt;
&lt;li&gt;Search for EC2 &lt;/li&gt;
&lt;li&gt;Click on instance&lt;/li&gt;
&lt;li&gt;Click on load balancer and see if load balancer has been created &lt;/li&gt;
&lt;li&gt;Copy the URL (k8s-game2048-ingress....) &lt;/li&gt;
&lt;li&gt;Go to your browser, type http and paste the copied URL &lt;/li&gt;
&lt;li&gt;This is the end result &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%2Frhjgo95o9qgg1d2xnjjv.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%2Frhjgo95o9qgg1d2xnjjv.PNG" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: Ensure you have kubectl and AWS CLI installed on your laptop &lt;/p&gt;

&lt;p&gt;See you soon 😊&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>kubernetes</category>
      <category>containers</category>
      <category>aws</category>
    </item>
    <item>
      <title>Accelerating S3 Assets With CloudFront CDN: A Step-by-Step Guide</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Wed, 16 Jul 2025 15:29:25 +0000</pubDate>
      <link>https://dev.to/christiana_orji/accelerating-s3-assets-with-cloudfront-cdn-a-step-by-step-guide-1m58</link>
      <guid>https://dev.to/christiana_orji/accelerating-s3-assets-with-cloudfront-cdn-a-step-by-step-guide-1m58</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;In this guide, we'll walk through the process of setting up Amazon CloudFront as a Content Delivery Network (CDN) for assets store in Amazon S3. This will help improve the performance and availability of your website or application by reducing latency and distributing content across multiple edge locations.&lt;/p&gt;

&lt;p&gt;Project overview&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating an S3 bucket&lt;/li&gt;
&lt;li&gt;Uploading Assets to the S3 bucket &lt;/li&gt;
&lt;li&gt;Creating a CloudFront distribution &lt;/li&gt;
&lt;li&gt;Configuring CloudFront to use S3 as the origin&lt;/li&gt;
&lt;li&gt;Testing the setup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step-by-Step Guide &lt;/p&gt;

&lt;p&gt;Step 1: Create an S3 bucket &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login to your AWS Management Console &lt;/li&gt;
&lt;li&gt;Search S3 and click on it &lt;/li&gt;
&lt;li&gt;Click on create &lt;/li&gt;
&lt;li&gt;Name it &lt;/li&gt;
&lt;li&gt;Uncheck the block all public access &lt;/li&gt;
&lt;li&gt;Scroll down to bucket versioning and enable &lt;/li&gt;
&lt;li&gt;Scroll down to bucket key and enable &lt;/li&gt;
&lt;li&gt;Click on advance settings &lt;/li&gt;
&lt;li&gt;Click on disable under object lock&lt;/li&gt;
&lt;li&gt;Then click on create &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%2F5bs4cln06senhkym3fzb.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%2F5bs4cln06senhkym3fzb.PNG" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Uploading Assets to the S3 bucket &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After creating the S3 bucket, click on it &lt;/li&gt;
&lt;li&gt;Click on properties &lt;/li&gt;
&lt;li&gt;Scroll down and click on Static website hosting edit &lt;/li&gt;
&lt;li&gt;Click enable &lt;/li&gt;
&lt;li&gt;In hosting type, select host a static Website&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%2F9yyncbo7y8yg6ofvzc0b.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%2F9yyncbo7y8yg6ofvzc0b.PNG" alt=" " width="800" height="420"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under index document, put in your index name (index.html)&lt;/li&gt;
&lt;li&gt;Click save changes &lt;/li&gt;
&lt;li&gt;Go back to your S3 bucket &lt;/li&gt;
&lt;li&gt;Click on upload &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%2Fg3ovmpq82scuwo9k7vux.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%2Fg3ovmpq82scuwo9k7vux.PNG" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on add files&lt;/li&gt;
&lt;li&gt;Add the file&lt;/li&gt;
&lt;li&gt;Scroll down and hit upload &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%2Fidkl09bz50jxxlf0qzkz.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%2Fidkl09bz50jxxlf0qzkz.PNG" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: Create a CloudFront Distribution &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your AWS Management Console, search CloudFront and click on it &lt;/li&gt;
&lt;li&gt;Click on create distribution&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%2Fx1mn2a5n8qindi625y9a.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%2Fx1mn2a5n8qindi625y9a.PNG" alt=" " width="800" height="424"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on origin domain &lt;/li&gt;
&lt;li&gt;Choose the S3 bucket you created &lt;/li&gt;
&lt;li&gt;Scroll down to origin access and select legacy access identities&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%2Fjlluh1eszyk6eosq9ygq.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%2Fjlluh1eszyk6eosq9ygq.PNG" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on create new OAI&lt;/li&gt;
&lt;li&gt;Click create &lt;/li&gt;
&lt;li&gt;Click on Origin Access Identities and select the OAI you created &lt;/li&gt;
&lt;li&gt;Under bucket policy, select yes, update the bucket policy &lt;/li&gt;
&lt;li&gt;Scroll down and click on redirect HTTP to HTTPS &lt;/li&gt;
&lt;li&gt;Scroll down to settings and select use all edge locations &lt;/li&gt;
&lt;li&gt;Click add item under alternate domain name, and put your domain (you should have a domain)&lt;/li&gt;
&lt;li&gt;Scroll down to default root object, and type your index file name (/index.html)&lt;/li&gt;
&lt;li&gt;Under web application firewall, select do not use security&lt;/li&gt;
&lt;li&gt;Click on create distribution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 4: Test the Setup&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wait for the CloudFront Distribution to deploy ( this may take some minutes)&lt;/li&gt;
&lt;li&gt;Copy the distribution domain name and paste it on your browser and hit enter &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conclusion &lt;/p&gt;

&lt;p&gt;By following these steps, you have successfully set up Amazon CloudFront as a CDN for your S3 Assets.&lt;/p&gt;

&lt;p&gt;See you soon...&lt;/p&gt;

</description>
      <category>s3</category>
      <category>aws</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Serverless Mastery: A Comprehensive Guide to AWS Lambda and Snapshot</title>
      <dc:creator>Christiana </dc:creator>
      <pubDate>Wed, 09 Jul 2025 10:51:32 +0000</pubDate>
      <link>https://dev.to/christiana_orji/serverless-mastery-a-comprehensive-guide-to-aws-lambda-and-snapshot-369</link>
      <guid>https://dev.to/christiana_orji/serverless-mastery-a-comprehensive-guide-to-aws-lambda-and-snapshot-369</guid>
      <description>&lt;p&gt;As the owner of this project, I'm excited to share with you a detailed guide to AWS Lambda, a powerful serverless compute service. Whether you're a seasoned developer or just starting out, this guide will walk you through the ins and outs of Lambda and help you unlock its full potential.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Introduction to AWS Lambda&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AWS Lambda is a serverless compute service that allows you to run code without provisioning or managing servers. With Lambda, you can write and deploy code in a variety of programming languages, including Node.js, Python, Java, and more. Lambda takes care of the underlying infrastructure, so you can focus on writing code and delivering value to your users.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What is Lambda Used For?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lambda is used for a wide range of applications, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time data processing and analytics&lt;/li&gt;
&lt;li&gt;Serverless APIs and web applications&lt;/li&gt;
&lt;li&gt;Event-driven architectures and microservices&lt;/li&gt;
&lt;li&gt;Machine learning and AI&lt;/li&gt;
&lt;li&gt;IoT data processing and device management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*How to Create AWS Lambda *&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login to your AWS Management Console and search for lambda&lt;/li&gt;
&lt;li&gt;Click on create &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%2Fmsdby5ukv8n5qq3p7s7m.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%2Fmsdby5ukv8n5qq3p7s7m.PNG" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select author from scratch &lt;/li&gt;
&lt;li&gt;Name the function &lt;/li&gt;
&lt;li&gt;Under Runtime, select python 3.12&lt;/li&gt;
&lt;li&gt;Architecture, select ×86.64&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%2Fh7tfw6gtx35omcbt7coi.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%2Fh7tfw6gtx35omcbt7coi.PNG" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on additional configuration drop-down &lt;/li&gt;
&lt;li&gt;Click on enable function URL &lt;/li&gt;
&lt;li&gt;Under AUTH type, I enabled none for this project &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%2F1blkm8u0vdulystre3ps.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%2F1blkm8u0vdulystre3ps.PNG" alt=" " width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Then click on create &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%2Fx8kdfcy9r5f72ldltrmt.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%2Fx8kdfcy9r5f72ldltrmt.PNG" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*Let's Create an EC2 Instance for this Project *&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login to your account &lt;/li&gt;
&lt;li&gt;Search EC2 and click on it &lt;/li&gt;
&lt;li&gt;Click on launch instance &lt;/li&gt;
&lt;li&gt;Name your instance&lt;/li&gt;
&lt;li&gt;I choose Ubuntu as my image&lt;/li&gt;
&lt;li&gt;Select or create a key pair &lt;/li&gt;
&lt;li&gt;Click on network settings and enable &lt;/li&gt;
&lt;li&gt;Click on create &lt;/li&gt;
&lt;li&gt;Click on the EC2 instance you created &lt;/li&gt;
&lt;li&gt;Scroll down and click on Storage &lt;/li&gt;
&lt;li&gt;You will see the EC2 volume created along side with the EC2. Copy it because we will be using it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Let's Create a Snapshot&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A snapshot is like a backups of resources, allowing you to recover resources in case of data loss or corruption.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to your EC2 dashboard &lt;/li&gt;
&lt;li&gt;Click on snapshot &lt;/li&gt;
&lt;li&gt;Click on create a snapshot&lt;/li&gt;
&lt;li&gt;Select volume &lt;/li&gt;
&lt;li&gt;Put your EC2 volume you copied &lt;/li&gt;
&lt;li&gt;Add a description &lt;/li&gt;
&lt;li&gt;Click create &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%2Fditgb6iva93sr6z4041b.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%2Fditgb6iva93sr6z4041b.PNG" alt=" " width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How to Use AWS Lambda Function&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you have a GitHub account, clone or fork the repository &lt;a href="https://github.com/Christianaorji/aws-devops-zero-to-hero/tree/main/day-18" rel="noopener noreferrer"&gt;aws-devops-zero-to-hero day 18&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;After cloning of forking, click on ebs_stale&lt;/li&gt;
&lt;li&gt;Copy the entire code (but if you already have your own lambda functions code, you can use it)&lt;/li&gt;
&lt;li&gt;Go back to your Lambda&lt;/li&gt;
&lt;li&gt;Scroll down to where you see code (under lambda functions)&lt;/li&gt;
&lt;li&gt;Remove all the code, and paste the one you copied from GitHub &lt;/li&gt;
&lt;li&gt;Click on the deploy button above&lt;/li&gt;
&lt;li&gt;Then click on the test button above &lt;/li&gt;
&lt;li&gt;Name the event as test (or anything)&lt;/li&gt;
&lt;li&gt;Click on save&lt;/li&gt;
&lt;li&gt;Then click on the test button &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%2F5epofl3weffdw4ihi0e4.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%2F5epofl3weffdw4ihi0e4.PNG" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: In case it fails, click on configuration above&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scroll down to timeout, and increase the min to 10sec or above.&lt;/li&gt;
&lt;li&gt;Then save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Let's Attach Policy to the Snapshot&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Still on your AWS Lambda Function page&lt;/li&gt;
&lt;li&gt;Click on configuration &lt;/li&gt;
&lt;li&gt;Click on permissions by your left &lt;/li&gt;
&lt;li&gt;Click on Role name link (open it on a new tab)&lt;/li&gt;
&lt;li&gt;Click on add permission&lt;/li&gt;
&lt;li&gt;Click on attach policy&lt;/li&gt;
&lt;li&gt;Click on create policy by your right &lt;/li&gt;
&lt;li&gt;Select EC2 &lt;/li&gt;
&lt;li&gt;Search for snapshot &lt;/li&gt;
&lt;li&gt;Select delete snapshot, and describe snapshot &lt;/li&gt;
&lt;li&gt;Click on resources drop-down and select all resources &lt;/li&gt;
&lt;li&gt;Click on next&lt;/li&gt;
&lt;li&gt;Name your policy &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%2Fqggt95nso6ciflxtovke.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%2Fqggt95nso6ciflxtovke.PNG" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scroll down and click on create &lt;/li&gt;
&lt;li&gt;After creating the policy, click on roles by your left &lt;/li&gt;
&lt;li&gt;Click on add permission &lt;/li&gt;
&lt;li&gt;Search for the policy you created &lt;/li&gt;
&lt;li&gt;Click on it, and click on add permission &lt;/li&gt;
&lt;li&gt;Go back to your Lambda &lt;/li&gt;
&lt;li&gt;Click on code&lt;/li&gt;
&lt;li&gt;Click on test&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Final Conclusion:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this comprehensive guide, we've explored the world of AWS Lambda and snapshots. We've covered the basics of Lambda, its uses, and how to create and deploy Lambda functions. Additionally, we've delved into the concept of snapshots, how to create them, and how to develop a snapshot policy.&lt;/p&gt;

&lt;p&gt;By mastering AWS Lambda and snapshots, developers can build scalable, efficient, and reliable applications that leverage the power of serverless computing. Whether you're building real-time data processing pipelines, serverless APIs, or machine learning models, this guide has provided you with the knowledge and skills to succeed.&lt;/p&gt;

&lt;p&gt;With this comprehensive guide, you're now equipped to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design and deploy AWS Lambda functions for various use cases&lt;/li&gt;
&lt;li&gt;Create and manage snapshots for data protection and recovery&lt;/li&gt;
&lt;li&gt;Develop a snapshot policy to ensure data integrity and compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By applying the concepts and techniques outlined in this guide, you'll be well on your way to unlocking the full potential of AWS Lambda and snapshots for your applications.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>lambda</category>
      <category>aws</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
