<?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: BlacOrpheus</title>
    <description>The latest articles on DEV Community by BlacOrpheus (@blacorpheus).</description>
    <link>https://dev.to/blacorpheus</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%2F1119595%2Fff5e1323-312d-4880-8cc8-c61746a8c2cf.jpg</url>
      <title>DEV Community: BlacOrpheus</title>
      <link>https://dev.to/blacorpheus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blacorpheus"/>
    <language>en</language>
    <item>
      <title>Docker-Based Static Website Deployment: A Comprehensive Guide</title>
      <dc:creator>BlacOrpheus</dc:creator>
      <pubDate>Sun, 25 Jan 2026 16:43:08 +0000</pubDate>
      <link>https://dev.to/blacorpheus/docker-based-static-website-deployment-a-comprehensive-guide-2dk9</link>
      <guid>https://dev.to/blacorpheus/docker-based-static-website-deployment-a-comprehensive-guide-2dk9</guid>
      <description>&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS Account&lt;/li&gt;
&lt;li&gt;AWS CLI installed and configured (aws configure)&lt;/li&gt;
&lt;li&gt;Docker installed locally&lt;/li&gt;
&lt;li&gt;Git installed locally&lt;/li&gt;
&lt;li&gt;Basic knowledge of HTML/CSS (or static site generator like Hugo, Jekyll)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In today's fast-paced digital landscape, delivering websites that are both performant and reliable is crucial. Static websites have emerged as a powerful solution for many use cases—blogs, documentation, marketing sites, and portfolios—offering lightning-fast load times, enhanced security, and simplified maintenance. However, deploying and managing these websites consistently across different environments can still present challenges.&lt;/p&gt;

&lt;p&gt;Enter Docker, the containerization platform that has revolutionized how we build, ship, and run applications. By combining static websites with Docker containers, we create a deployment strategy that delivers unprecedented consistency, portability, and scalability. Whether you're deploying to your local machine, a development server, or a cloud production environment, Docker ensures your website behaves identically everywhere.&lt;/p&gt;

&lt;p&gt;This comprehensive guide takes you from zero to production-ready deployment, covering everything from creating a simple static website to implementing advanced Docker configurations for real-world scenarios. You'll learn not just the "how" but also the "why" behind each decision, equipping you with knowledge that extends far beyond following a recipe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Docker for Static Websites?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistency Across Environments: No more "it works on my machine" problems. Your website runs identically from development to production.&lt;/li&gt;
&lt;li&gt;Simplified Deployment: Package your entire website—content, web server, and configuration—into a single, portable container.&lt;/li&gt;
&lt;li&gt;Version Control for Environments: Track changes to your website environment alongside your code changes.&lt;/li&gt;
&lt;li&gt;Resource Efficiency: Lightweight containers use minimal resources compared to traditional virtual machines.&lt;/li&gt;
&lt;li&gt;Scalability: Easily replicate containers to handle increased traffic or deploy across multiple regions.&lt;/li&gt;
&lt;li&gt;Security Isolation: Containers provide process and filesystem isolation from the host system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What You'll Accomplish&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By the end of this guide, you will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a production-ready static website with modern HTML, CSS, and JavaScript&lt;/li&gt;
&lt;li&gt;Build optimized Docker images using industry best practices&lt;/li&gt;
&lt;li&gt;Configure Nginx for maximum performance and security&lt;/li&gt;
&lt;li&gt;Set up both development and production environments&lt;/li&gt;
&lt;li&gt;Deploy your containerized website to cloud platforms&lt;/li&gt;
&lt;li&gt;Implement monitoring, logging, and maintenance strategies&lt;/li&gt;
&lt;li&gt;Apply security hardening techniques to your deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're a developer looking to streamline your deployment process, a DevOps engineer seeking consistent environments, or a business owner wanting reliable website hosting, this guide provides the practical knowledge you need. We'll start with the fundamentals and progressively build up to enterprise-grade deployment patterns, ensuring you have a solid foundation that can grow with your needs.&lt;/p&gt;

&lt;p&gt;Let's begin by setting up our project and understanding the core components that make Docker-based static website deployment so effective.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step One: Create a Directory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, create a project directory to organize your HTML files and Docker configuration. You can use either your command line or IDE. For this example, we'll create a directory named "docker-static-site" and navigate into it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir docker-static-site
cd docker-static-site

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step Two: Acquiring the Nginx Base Image from Docker Registry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To containerize our static website, we'll leverage the Nginx web server, a lightweight, high-performance solution ideal for serving static content. The first step involves retrieving the official Nginx Docker image from the Docker Hub registry. This pre-configured image provides a standardized foundation, ensuring consistent behavior across all deployment environments. Execute the following command to pull the latest stable version of the Nginx image to your local machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker pull nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;To verify that we pulled the latest image:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Step Three: Building the Primary Web Document: index.html&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The index.html file represents the architectural blueprint of your website. It defines the document's skeletal structure using HTML elements, establishes semantic organization for content accessibility, and sets up the necessary linkages to supporting resources like stylesheets and scripts. This foundational file will eventually be served by Nginx within our Docker container as the default landing page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step Four: Building a Custom Container Image via Dockerfile&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Container images are constructed from declarative Dockerfiles that specify the complete runtime environment. Begin by creating a file named "Dockerfile" in your project's root directory—maintaining this exact filename is critical as Docker's build command automatically searches for it. This configuration orchestrates several operations: selecting an official base image, copying your website files into the container, exposing network ports, and defining the default process. The following example illustrates a production-ready Dockerfile optimized for serving static content:&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%2Fu5ompwlkiok1fdv4rrn9.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%2Fu5ompwlkiok1fdv4rrn9.png" alt=" " width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the Dockerfile defined, we can now execute the build process to create our custom container image. The docker build command compiles the instructions in your Dockerfile into a runnable image, while the -t flag tags it with a human-readable identifier for easier reference. Run the following command in your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t webserver .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Step Five: Deploy the Container as a Running Service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Transition from a static image to a live web service by instantiating a container. The run command orchestrates multiple operations: creating the container filesystem, configuring networking, and executing the default process defined in the image. Deploy with these flags to enable background operation and external access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -it -d -p 8080:80 webserver

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

&lt;/div&gt;



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

&lt;p&gt;To verify your container is running correctly, open a web browser and navigate to &lt;a href="http://localhost:8080/" rel="noopener noreferrer"&gt;http://localhost:8080/&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%2Fmb4ej4ukjg7kagptkyez.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%2Fmb4ej4ukjg7kagptkyez.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step Six: Pushing the Container Image to AWS ECR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before proceeding, ensure your AWS CLI is properly configured with aws configure. Then authenticate Docker with your ECR registry by running (replace placeholders with your region and account ID).&lt;/p&gt;

&lt;p&gt;To store your Docker image in AWS Elastic Container Registry (ECR), execute the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws ecr get-login-password --region us-east-1 \
| docker login --username AWS --password-stdin &amp;lt;ACCOUNT_ID&amp;gt;.dkr.ecr.us-east-1.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step Seven: Tag and Push the Image&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker tag blog-image:latest &amp;lt;ACCOUNT_ID&amp;gt;.dkr.ecr.us-east-1.amazonaws.com/webserver:latest
docker push &amp;lt;ACCOUNT_ID&amp;gt;.dkr.ecr.us-east-1.amazonaws.com/webserver:latest


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

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Step Eight: Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By following this guide, you have successfully containerized a static website using Docker and deployed it to AWS. You've transformed static files into a portable, scalable container that can run consistently across any environment—from local development to cloud production. This foundation enables reliable deployments, simplified maintenance, and scalable web hosting.&lt;/p&gt;

&lt;p&gt;Chidubem Chinwuba is a dedicated Cloud/DevOps Engineer. He possesses a deep passion for technology and its transformative potential across industries. Overall, Chidubem is driven by his passion for technology and his aspiration to make a meaningful impact in the Cloud/DevOps domain. He is excited to continue his professional growth and contribute to projects that shape the future of technology.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Deploying an AWS EKS Cluster Using Terraform: A Step-by-Step Guide</title>
      <dc:creator>BlacOrpheus</dc:creator>
      <pubDate>Thu, 15 Jan 2026 10:05:17 +0000</pubDate>
      <link>https://dev.to/blacorpheus/deploying-an-aws-eks-cluster-using-terraform-a-step-by-step-guide-3a2h</link>
      <guid>https://dev.to/blacorpheus/deploying-an-aws-eks-cluster-using-terraform-a-step-by-step-guide-3a2h</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today's cloud-native landscape, Kubernetes has become the de facto standard for container orchestration, and Amazon Elastic Kubernetes Service (EKS) provides a managed Kubernetes service that simplifies cluster management. When combined with Terraform, HashiCorp's Infrastructure as Code (IaC) tool, you can achieve reproducible, version-controlled, and automated Kubernetes infrastructure deployment.&lt;/p&gt;

&lt;p&gt;This comprehensive guide will walk you through deploying a production-ready AWS EKS cluster using Terraform, covering everything from initial setup to operational best practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before beginning, ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Account with appropriate IAM permissions&lt;/li&gt;
&lt;li&gt;AWS CLI installed and configured&lt;/li&gt;
&lt;li&gt;Terraform (v1.0+) installed&lt;/li&gt;
&lt;li&gt;kubectl for Kubernetes cluster interaction&lt;/li&gt;
&lt;li&gt;Basic understanding of AWS services, Kubernetes, and Terraform&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;Our deployment will create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A VPC with public and private subnets across multiple Availability Zones&lt;/li&gt;
&lt;li&gt;EKS control plane managed by AWS&lt;/li&gt;
&lt;li&gt;Managed node groups for worker nodes&lt;/li&gt;
&lt;li&gt;Necessary IAM roles and security groups&lt;/li&gt;
&lt;li&gt;Network components (NAT Gateway, Internet Gateway, Route Tables)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Efficient EKS Cluster Provisioning with Terraform's Modular Design
&lt;/h2&gt;

&lt;p&gt;This implementation employs a Terraform module containing pre-defined configurations to simplify Amazon EKS cluster creation, demonstrating infrastructure-as-code efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Prepare Your Environment - Install Terraform&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Begin by installing Terraform locally to set up your development environment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install terraform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Secondly, install the AWS CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install awscli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thirdly, install kubectl:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install kubernetes-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For installation on other operating systems, see the official documentation:&lt;/p&gt;

&lt;p&gt;Terraform: &lt;a href="https://spacelift.io/blog/terraform-eks#step-1--install-terraform-locally:~:text=https%3A//learn.hashicorp.com/tutorials/terraform/install%2Dcli" rel="noopener noreferrer"&gt;Installation guide&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
AWS CLI: &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html" rel="noopener noreferrer"&gt;Installation instructions&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
kubectl: &lt;a href="https://kubernetes.io/docs/tasks/tools/" rel="noopener noreferrer"&gt;Installation documentation&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Configure AWS CLI Access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;to set up authentication with your AWS account. You'll need to enter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Access Key ID&lt;/li&gt;
&lt;li&gt;AWS Secret Access Key&lt;/li&gt;
&lt;li&gt;Default region: us-east-1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Terraform will use these credentials to create and manage your AWS resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Prepare the Code Environment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We'll utilize the &lt;a href="https://github.com/terraform-aws-modules/terraform-aws-eks" rel="noopener noreferrer"&gt;terraform-aws-modules/eks/aws&lt;/a&gt; Terraform module for this implementation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data "aws_availability_zones" "available" {}

resource "aws_vpc" "main" {
 cidr_block = "10.0.0.0/16"

 tags = {
   Name = "main-vpc-eks"
 }
}

resource "aws_subnet" "public_subnet" {
 count                   = 2
 vpc_id                  = aws_vpc.main.id
 cidr_block              = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index)
 availability_zone       = data.aws_availability_zones.available.names[count.index]
 map_public_ip_on_launch = true

 tags = {
   Name = "public-subnet-${count.index}"
 }
}

resource "aws_internet_gateway" "main" {
 vpc_id = aws_vpc.main.id

 tags = {
   Name = "main-igw"
 }
}

resource "aws_route_table" "public" {
 vpc_id = aws_vpc.main.id

 route {
   cidr_block = "0.0.0.0/0"
   gateway_id = aws_internet_gateway.main.id
 }

 tags = {
   Name = "main-route-table"
 }
}

resource "aws_route_table_association" "a" {
 count          = 2
 subnet_id      = aws_subnet.public_subnet.*.id[count.index]
 route_table_id = aws_route_table.public.id
}

module "eks" {
 source  = "terraform-aws-modules/eks/aws"
 version = "~&amp;gt; 20.31"

 cluster_name    = "sage-nodes"
 cluster_version = "1.31"

 # Optional
 cluster_endpoint_public_access = true

 # Optional: Adds the current caller identity as an administrator via cluster access entry
 enable_cluster_creator_admin_permissions = true

 eks_managed_node_groups = {
   sage-nodes = {
     instance_types = ["t3.medium"]
     min_size       = 1
     max_size       = 3
     desired_size   = 2
   }
 }

 vpc_id     = aws_vpc.main.id
 subnet_ids = aws_subnet.public_subnet.*.id

 tags = {
   Environment = "dev"
   Terraform   = "true"
 }
}

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Apply Terraform Configuration&lt;/strong&gt;&lt;br&gt;
Begin by initializing Terraform to download dependencies, then apply the configuration to create your EKS cluster infrastructure.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Post-initialization, generate a plan to review infrastructure changes.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;Wait a few minutes for all resources to be created.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 5 – Configure kubectl Access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws eks --region us-east-1 update-kubeconfig --name example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;At this point, verify that the login to the cluster was successful.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl config current-context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Step 6 – Manage the Cluster&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use the following command to view all nodes in the cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get nodes   
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;To validate the cluster, deploy an NGINX instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl run --port 80 --image nginx nginx

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

&lt;/div&gt;



&lt;p&gt;To see its status:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;Now, establish a tunnel from your local environment to the pod.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl port-forward nginx 3000:80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Step 7 – Resource Cleanup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To destroy the resources created in this session, execute the following command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Ensure to destroy the created resources to avoid incurring huge financial bills from AWS.&lt;/p&gt;

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

&lt;p&gt;By completing this guide, you've established a production-ready AWS EKS cluster deployment using Terraform's infrastructure-as-code approach. This foundation enables consistent, version-controlled Kubernetes infrastructure management across all environments.&lt;/p&gt;

&lt;p&gt;Chidubem Chinwuba is a dedicated Cloud/DevOps Engineer. He possesses a deep passion for technology and its transformative potential across industries. Overall, Chidubem is driven by his passion for technology and his aspiration to make a meaningful impact in the Cloud/DevOps domain. He is excited to continue his professional growth and contribute to projects that shape the future of technology.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Deploying a Node.js Application on AWS</title>
      <dc:creator>BlacOrpheus</dc:creator>
      <pubDate>Sat, 23 Nov 2024 18:59:55 +0000</pubDate>
      <link>https://dev.to/blacorpheus/deploying-a-nodejs-application-on-aws-39dd</link>
      <guid>https://dev.to/blacorpheus/deploying-a-nodejs-application-on-aws-39dd</guid>
      <description>&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%2Fycypqfr8r1kabt6u8zph.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%2Fycypqfr8r1kabt6u8zph.png" alt="Image description" width="700" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synopsis&lt;/strong&gt;&lt;br&gt;
In this blog post, I’ll walk you through the steps to deploy a Node.js application on the AWS cloud. Along the way, I’d demonstrate how to leverage Termius, a versatile SSH platform that works on both mobile and desktop. Additionally, I’ll guide you on how to communicate seamlessly with a GitHub repository. Let’s dive in!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backstory&lt;/strong&gt;&lt;br&gt;
Deploying a Node.js Application on AWS means putting your web app on a super reliable and fast platform. It’s like giving your app a strong backbone. It can handle lots of users without slowing down. AWS also gives you handy tools to make deploying and managing your app easier. This way, you can spend more time making your app cool and less time worrying about technical stuff. So, using AWS for deployment helps make your web app strong, reliable, and ready for anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;br&gt;
An AWS Account&lt;br&gt;
Termius (SSH platform for Mobile and Desktop)&lt;br&gt;
Basic Understanding of Linux&lt;br&gt;
A GitHub Account&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Node.js is a runtime environment that allows you to run JavaScript code outside of a web browser. It is built on the V8 JavaScript engine, which is the same engine that powers Google Chrome. Node.js enables you to execute JavaScript on the server-side, making it possible to build web applications, APIs, and other types of software using JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Termius&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Termius is a cross-platform SSH client that allows users to securely connect to remote servers, manage files, and execute commands over SSH (Secure Shell) protocol. It’s available for both mobile devices and desktop computers, providing a convenient way to access and manage remote servers from various platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Express&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Express is a web application framework for Node.js. It provides a robust set of features to help you build web applications and APIs quickly and efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procedure&lt;/strong&gt;&lt;br&gt;
This process can easily be replicated by anyone on their local machine by following closely with the instructions that would be listed below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an AWS instance
Login to your AWS console and create an ec2 instance, select an Ubuntu OS image and ensure the Amazon Machine Image (AMI) and instance type (t2.micro) fall under the free tier to avoid incurring charges.&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%2F9dfujxqv6dny3p1bbgpe.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%2F9dfujxqv6dny3p1bbgpe.png" alt="Image description" width="720" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new key pair
You can also use an existing one if available, click on create a security group and allow SSH traffic from the recently created security group, finally click on “Launch 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%2Fupik23mbhez5awxxmxfh.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%2Fupik23mbhez5awxxmxfh.png" alt="Image description" width="800" height="511"&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%2F2dwv1bl6fkqzy0xgbo5q.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%2F2dwv1bl6fkqzy0xgbo5q.png" alt="Image description" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting the ec2 instance to termius
Take note of the instance public ip address and the user name as they would be integral in connecting to Termius. If you do not have Termius, you could &lt;a href="https://account.termius.com/" rel="noopener noreferrer"&gt;download&lt;/a&gt; it here.&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%2Fbi2xnreu3cwulkxxvlys.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%2Fbi2xnreu3cwulkxxvlys.png" alt="Image description" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next I created a new host on Termius and input my ec2 public IP address and select a key pair by using the already created file from the AWS console. Finally I click on the arrow on the top right corner of the screen.&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%2Fibribyqexn298grreqve.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%2Fibribyqexn298grreqve.png" alt="Image description" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on the node-server icon, lick on “Add and continue” to connect to your 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%2F54wkn4s63126xe7o1y5n.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%2F54wkn4s63126xe7o1y5n.png" alt="Image description" width="800" height="331"&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%2Ftof7irr5bnqkh5jv2ety.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%2Ftof7irr5bnqkh5jv2ety.png" alt="Image description" width="720" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting to GitHub
Create a new directory called “node-server” via the terminal.&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%2F282im1m0pv48dzh7w954.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%2F282im1m0pv48dzh7w954.png" alt="Image description" width="800" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create an ssh key generator to connect to your GitHub account.&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%2Fewbx4o4cj9qy5rz1bksq.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%2Fewbx4o4cj9qy5rz1bksq.png" alt="Image description" width="800" height="361"&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%2F1frydmuq2qtrnqk3vyf9.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%2F1frydmuq2qtrnqk3vyf9.png" alt="Image description" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get the created ssh key, copy it and head to the following GitHub Repo: &lt;a href="https://github.com/BlacOrpheus/Dating-App" rel="noopener noreferrer"&gt;https://github.com/BlacOrpheus/Dating-App&lt;/a&gt;. Click on settings and click on deploy keys&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%2Fvv1bmbih4va1zdzix1d0.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%2Fvv1bmbih4va1zdzix1d0.png" alt="Image description" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add your keys there and allow write 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%2Fz6s1gkt3qjf0zcec1cku.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%2Fz6s1gkt3qjf0zcec1cku.png" alt="Image description" width="800" height="478"&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%2F279wj2pheb8b3dj5lbul.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%2F279wj2pheb8b3dj5lbul.png" alt="Image description" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone your repository into your ec2 instances&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click on code and copy the SSH code.&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%2F4nei1wm5x6olq5wut4n1.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%2F4nei1wm5x6olq5wut4n1.png" alt="Image description" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On Termius type the following code:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone git@github.com:BlacOrpheus/Dating-App.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;Proceed to install node on your AWS EC2 instances with the following commands:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

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

&lt;/div&gt;



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


nvm install --lts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;Installation of Dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application functions with a dependency know as Express. Install express with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;Deployment of Application
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Deploying a Node.js app on AWS offers a reliable and scalable hosting solution. With AWS’s powerful infrastructure, handling high traffic is an easy task. Plus, it’s cost-effective and flexible. By following the steps in this guide, you’ll be all set to launch your Node.js app on AWS.&lt;/p&gt;

&lt;p&gt;Chidubem Chinwuba is a dedicated Cloud/DevOps Engineer. He possesses a deep passion for technology and its transformative potential across industries. Overall, Chidubem is driven by his passion for technology and his aspiration to make a meaningful impact in the Cloud/DevOps domain. He is excited to continue his professional growth and contribute to projects that shape the future of technology.&lt;/p&gt;

</description>
      <category>node</category>
      <category>aws</category>
      <category>termius</category>
      <category>awscommunity</category>
    </item>
    <item>
      <title>Harnessing Terraform In Deploying a Dating App On AWS</title>
      <dc:creator>BlacOrpheus</dc:creator>
      <pubDate>Fri, 08 Nov 2024 16:32:10 +0000</pubDate>
      <link>https://dev.to/blacorpheus/harnessing-terraform-in-deploying-a-dating-app-on-aws-3bkp</link>
      <guid>https://dev.to/blacorpheus/harnessing-terraform-in-deploying-a-dating-app-on-aws-3bkp</guid>
      <description>&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%2Flgs9keu9a0l4f43y8xke.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%2Flgs9keu9a0l4f43y8xke.png" alt="cover" width="720" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synopsis&lt;/strong&gt;&lt;br&gt;
In this blog post, I’ll walk you through the steps to deploy a landing page for a dating app I created on the AWS cloud. Along the way, I’d demonstrate how to leverage Terraform, an in-demand infrastructure as code tool. Additionally, I’ll guide you on how to communicate seamlessly with a GitHub repository. Let’s get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backstory&lt;/strong&gt;&lt;br&gt;
Terraform is an open-source Infrastructure as Code (IaC) tool created by HashiCorp. It enables users to define and provision infrastructure resources—such as virtual machines, databases, and networks—through declarative configuration files. By automating the setup and configuration of necessary resources on the AWS cloud, Terraform simplifies management, versioning, and replication across various environments. This method provides advantages like repeatability, scalability, and improved collaboration when deploying and managing your dating app on AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;br&gt;
An AWS Account&lt;br&gt;
VS Code&lt;br&gt;
A GitHub Account&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procedure&lt;/strong&gt;&lt;br&gt;
Create an AWS access key&lt;br&gt;
The following link will guide you through the process:&lt;br&gt;
 &lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html?source=post_page-----1722401b15b1--------------------------------" rel="noopener noreferrer"&gt;Managing Access Keys for IAM Users&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating the keys, save the details.&lt;/p&gt;

&lt;p&gt;Connect your VS Code to your AWS account:&lt;br&gt;
On your VS Code terminal type in the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws configure&lt;/code&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%2F7v5171sp8mv6zpvn27c2.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%2F7v5171sp8mv6zpvn27c2.png" alt="Your VS Code is connected to your AWS account.&amp;lt;br&amp;gt;
" width="720" height="161"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Type in your details from the access key you created when prompted.&lt;/p&gt;

&lt;p&gt;Clone your code from GitHub&lt;br&gt;
Here is the link to the repository on my GitHub account:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/BlacOrpheus/Terraform-Dating-App/tree/master" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure you VS Code is connected to your GitHub account, then run the following command in your terminal:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/BlacOrpheus/Terraform-Dating-App.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Run your infrastructure in Terraform&lt;br&gt;
If you do not have Terraform already installed on your local machine, you’d need to install it. If not, visit the &lt;a href="https://www.terraform.io/downloads.html" rel="noopener noreferrer"&gt;official Terraform downloads page&lt;/a&gt; and download the appropriate version for your operating system (Windows, macOS, or Linux).&lt;/p&gt;

&lt;p&gt;On your command line enter the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;terraform init&lt;/code&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%2Fddvs8ceepwx8outtz5eq.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%2Fddvs8ceepwx8outtz5eq.png" width="800" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;terraform plan&lt;/code&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%2F8qus2bo79c2ths6w2v1p.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%2F8qus2bo79c2ths6w2v1p.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;terraform apply&lt;/code&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%2F09ourl1zv4j32zvl6z1q.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%2F09ourl1zv4j32zvl6z1q.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Type “yes” when prompted to deploy the resources or not.&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%2Fzgwndnchx48hjs6w65s9.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%2Fzgwndnchx48hjs6w65s9.png" alt="The Load Balancer’s IP address&amp;lt;br&amp;gt;
" width="720" height="98"&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%2Fgbx6ybq69ttnwc7btzh3.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%2Fgbx6ybq69ttnwc7btzh3.png" alt="The site is up and running!!!!!!!!" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;terraform destroy&lt;/code&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%2Flv1cm3dnaknotfw3cqy1.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%2Flv1cm3dnaknotfw3cqy1.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Terraform provides a robust solution for seamlessly orchestrating cloud resources. By adopting this technology, you can unlock new opportunities for innovation and enable developers to concentrate on creating exceptional applications. Leverage the capabilities of Terraform to elevate your AWS deployments to new heights.&lt;/p&gt;

&lt;p&gt;Chidubem Chinwuba is a dedicated Cloud/DevOps Engineer. He possesses a deep passion for technology and its transformative potential across industries. Overall, Chidubem is driven by his passion for technology and his aspiration to make a meaningful impact in the Cloud/DevOps domain. He is excited to continue his professional growth and contribute to projects that shape the future of technology.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Streamlined CI/CD Pipeline Management with Jenkins: Utilizing Termius and AWS for Flawless Integration</title>
      <dc:creator>BlacOrpheus</dc:creator>
      <pubDate>Wed, 16 Oct 2024 20:26:02 +0000</pubDate>
      <link>https://dev.to/blacorpheus/streamlined-cicd-pipeline-management-with-jenkins-utilizing-termius-and-aws-for-flawless-integration-a03</link>
      <guid>https://dev.to/blacorpheus/streamlined-cicd-pipeline-management-with-jenkins-utilizing-termius-and-aws-for-flawless-integration-a03</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fng3kjhexrxx0j396l8u6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fng3kjhexrxx0j396l8u6.png" alt="Image description" width="720" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synopsis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this project, we delve into the realm of Continuous Integration/Continuous Deployment (CI/CD) pipeline management, focusing on optimizing efficiency and integration through Jenkins, Termius, and AWS services. This comprehensive exploration showcases the power of automation in software development workflows.&lt;/p&gt;

&lt;p&gt;We begin by configuring Jenkins, a leading automation server, to orchestrate seamless build, test, and deployment processes. Leveraging its extensive plugin ecosystem, we customize pipelines to meet specific project requirements, ensuring rapid, reliable, and consistent delivery of applications.&lt;/p&gt;

&lt;p&gt;To enhance security and accessibility, we introduce Termius as a robust SSH client, establishing secure connections for remote server management. Through Termius, we demonstrate effective command-line interactions, enabling efficient deployment and monitoring tasks.&lt;/p&gt;

&lt;p&gt;By the conclusion of this endeavor, participants will have gained a deep understanding of Jenkins, Termius, and AWS integration, empowering them to implement robust CI/CD pipelines that accelerate software delivery while maintaining a high level of security and reliability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backstory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins stands as a cornerstone in modern software development, serving as an indispensable CI/CD (Continuous Integration/Continuous Deployment) tool. Its significance lies in its ability to streamline and automate critical aspects of the development pipeline. Its contribution in enhancing efficiency, quality, and collaboration cannot be overstated. As a foundational tool, Jenkins empowers organizations to deliver high-quality software with speed and confidence, thereby driving innovation and success in the digital landscape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An AWS Account&lt;/li&gt;
&lt;li&gt;Termius (SSH platform for Mobile and Desktop)&lt;/li&gt;
&lt;li&gt;Basic Understanding of Linux&lt;/li&gt;
&lt;li&gt;A GitHub Account&lt;/li&gt;
&lt;li&gt;A Jenkins Account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Termius&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Termius is a cross-platform SSH client that allows users to securely connect to remote servers, manage files, and execute commands over SSH (Secure Shell) protocol. It’s available for both mobile devices and desktop computers, providing a convenient way to access and manage remote servers from various platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub is a web-based platform designed for version control and collaborative software development. It allows individuals and teams to manage and track changes in code, enabling seamless collaboration on projects. GitHub provides tools for creating repositories (storage spaces for code), branching (creating separate lines of development), and merging (combining code changes). It also offers features like issue tracking, pull requests, and code reviews to facilitate efficient teamwork.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jenkins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins is an open-source automation server used for Continuous Integration and Continuous Deployment (CI/CD). It automates various stages of software development, including building, testing, and deploying code changes. Jenkins streamlines collaboration among development teams and enhances the efficiency of software delivery. With a vast library of plugins, Jenkins can be customized to integrate with a wide range of tools and technologies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procedure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Anyone can effortlessly reproduce this procedure on their personal computer by carefully following the provided instructions below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create an AWS instance and connect it to Termius&lt;br&gt;
In my previous article, I give a detailed approach on how to go about this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install Jenkins on you ec2 instance.&lt;br&gt;
Add the key to your system:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \&lt;br&gt;
    https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a Jenkins apt repository entry:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \&lt;br&gt;
    https://pkg.jenkins.io/debian-stable binary/ | sudo tee \&lt;br&gt;
    /etc/apt/sources.list.d/jenkins.list &amp;gt; /dev/null&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update your local package index, then finally install Jenkins:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;br&gt;
  sudo apt-get install fontconfig openjdk-11-jre&lt;br&gt;
  sudo apt-get install jenkins&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To Check the status of the installation:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl status jenkins&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Connect to Jenkins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;copy your AWS IP address and add a port 8080 to it, which is the default port Jenkins listens on.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;18.215.151.231:8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On your Termius terminal, type in the following to get your Jenkins Password and Login to Jenkins:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Create a new job in Jenkins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose a name for your project, I titled mine “my-first-jenkins-job”, select “Freestyle project” and click on “OK”.&lt;/p&gt;

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

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

&lt;ul&gt;
&lt;li&gt;Edit your Jenkins job&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Source Code Management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Input the repository &lt;a href="https://github.com/BlacOrpheus/Dating-App.git" rel="noopener noreferrer"&gt;Link&lt;/a&gt; and choose “*/master” as the Branch Specifier.&lt;/p&gt;

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

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

&lt;ul&gt;
&lt;li&gt;Build Triggers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Select “GitHub hook trigger for GITScm polling”&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Build Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select “Execute Shell” and type in the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cp -r index.js /var/www/sageapp&lt;br&gt;
 cp -r index.html /var/www/sageapp&lt;/code&gt;&lt;/p&gt;

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

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

&lt;p&gt;When the build is initiated, the “index.js” and “index.html” files are copied into “/var/www/sageapp” folder.&lt;/p&gt;

&lt;p&gt;Click on “Save” and “Apply”.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add GitHub webhook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go to your repository on GitHub and click on “Settings”, then click on “Webhooks” , click on “Add webhook” then enter your jenkins IP address followed by “//github-webhook/”, finally click on “Update webhook” and enter you GitHub Password.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Start with the process of continous integration and continous deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;`--c-brand: #996515;&lt;br&gt;
.text-uppercase{&lt;br&gt;
    color: #9F2B68;&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;.shade-of-pink{&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;color:#F2D2BD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}`&lt;/p&gt;

&lt;p&gt;Go back to your Termius Terminal and run the following set of commands&lt;/p&gt;

&lt;p&gt;` cd /var/lib/jenkins/workspace&lt;/p&gt;

&lt;p&gt;cd my-first-jenkins-job&lt;/p&gt;

&lt;p&gt;node index.js `&lt;/p&gt;

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

&lt;p&gt;Go back to the style.css file and edit the file again by changing the following:&lt;/p&gt;

&lt;p&gt;` --c-brand: #161748;&lt;/p&gt;

&lt;p&gt;.text-uppercase{&lt;br&gt;
    color: #c89666;&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;.shade-of-pink{&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;color:#161748;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;} `&lt;/p&gt;

&lt;p&gt;refresh your browser:&lt;/p&gt;

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

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

&lt;p&gt;To put it simply, mastering Efficient CI/CD Pipeline Management with Jenkins, and leveraging the power of Termius and AWS, represents a significant stride forward in modern software development. The seamless integration of these tools not only accelerates the development lifecycle but also ensures security, scalability, and reliability in the deployment process.&lt;/p&gt;

&lt;p&gt;Chidubem Chinwuba is a dedicated Cloud/DevOps Engineer. He possesses a deep passion for technology and its transformative potential across industries. Overall, Chidubem is driven by his passion for technology and his aspiration to make a meaningful impact in the Cloud/DevOps domain. He is excited to continue his professional growth and contribute to projects that shape the future of technology.&lt;/p&gt;

</description>
      <category>jenkins</category>
      <category>cicd</category>
      <category>aws</category>
      <category>termius</category>
    </item>
  </channel>
</rss>
