<?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: Joshua Edidiong</title>
    <description>The latest articles on DEV Community by Joshua Edidiong (@alphajosh).</description>
    <link>https://dev.to/alphajosh</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%2F3629693%2F50cfa40d-ecc5-4898-aeaa-926c31655dde.jpg</url>
      <title>DEV Community: Joshua Edidiong</title>
      <link>https://dev.to/alphajosh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alphajosh"/>
    <language>en</language>
    <item>
      <title>🚀My First Portfolio Deployment with Nginx on Killercoda: A Step-by-Step DevOps Walkthrough</title>
      <dc:creator>Joshua Edidiong</dc:creator>
      <pubDate>Thu, 27 Nov 2025 17:15:34 +0000</pubDate>
      <link>https://dev.to/alphajosh/my-first-portfolio-deployment-with-nginx-on-killercoda-a-step-by-step-devops-walkthrough-2p0l</link>
      <guid>https://dev.to/alphajosh/my-first-portfolio-deployment-with-nginx-on-killercoda-a-step-by-step-devops-walkthrough-2p0l</guid>
      <description>&lt;p&gt;Hey DevOps folks and aspiring engineers!&lt;br&gt;
Today I want to walk you through how I deployed my first portfolio website using Killercoda and Nginx — completely hands-on, beginner friendly, and perfect if you're just getting started with DevOps, servers, or deployment.&lt;/p&gt;

&lt;p&gt;This guide includes everything from downloading a template… to pushing code to GitHub… to spinning up Nginx on a Linux server… to finally seeing your site live on the web.&lt;/p&gt;

&lt;p&gt;Let’s dive in! 🔥&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐  1. Downloading a Starter Template with Bootstrap
&lt;/h2&gt;

&lt;p&gt;Every website starts with a structure.&lt;br&gt;
Since I'm not a UI designer (yet), I decided to use a Bootstrap starter template to shorten the setup process.&lt;/p&gt;

&lt;p&gt;Steps I followed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Went to StartBootstrap template 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%2Fa0wmjwyxk5g7fwez0axe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0wmjwyxk5g7fwez0axe.png" alt="Bootstrap landing page" width="800" height="469"&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%2Fx5u0n55cw7kgbowmhba0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5u0n55cw7kgbowmhba0.png" alt="Available templates from free to paid versions" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Picked a simple portfolio design&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%2F8pcifz2v0kg18st9qjvf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8pcifz2v0kg18st9qjvf.png" alt="Template samples used" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Downloaded the ZIP file&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Saved it into a development folder on my system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The goal here was simple: &lt;strong&gt;get a clean, responsive layout I can customize later.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⭐ 2. Extracting the Template &amp;amp; Opening It in VS Code
&lt;/h2&gt;

&lt;p&gt;Once the template ZIP was downloaded:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
I extracted it into a folder&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%2Fezwrzh3jnnwg90hp6oz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezwrzh3jnnwg90hp6oz9.png" alt="Extracting the zip file" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Then I opened the folder directly in VS Code using:&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%2F29mkds6z5wvq5ac050mi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29mkds6z5wvq5ac050mi.png" alt="Setting up VS code environment " width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In VS Code, I could now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Preview the site with the Live Server extension&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%2F7euuexv0e5035tsrbl56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7euuexv0e5035tsrbl56.png" alt="index code" width="800" height="525"&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%2Fvsakl8lllhzxek4c1e3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsakl8lllhzxek4c1e3f.png" alt="post embedded codes" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add my name, projects, images, and descriptions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This is where the website begins to feel like &lt;em&gt;my&lt;/em&gt; portfolio.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⭐ 3. Uploading the Portfolio Files to GitHub for Version Control
&lt;/h2&gt;

&lt;p&gt;Now that the site was working on my local machine, it was time to put it in the cloud.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;p&gt;✔ &lt;strong&gt;Initialize Git&lt;/strong&gt;&lt;br&gt;
✔ &lt;strong&gt;Create a GitHub repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On GitHub → New Repository → Add README → Create&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%2Fl50ex22vl3tybg22gzvc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl50ex22vl3tybg22gzvc.png" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Once this was done, my portfolio code was safe, version-controlled, and available for deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥Next Section: Making the Website Live Using Killercoda + Nginx
&lt;/h2&gt;

&lt;p&gt;Now for the DevOps part — the fun stuff.&lt;br&gt;
Let’s go step-by-step.&lt;/p&gt;

&lt;p&gt;Killercoda is an online platform that gives you temporary Linux servers to practice DevOps skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ 4. Launching a Fresh Killercoda Environment for Deployment
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Steps:
&lt;/h2&gt;

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

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

&lt;ul&gt;
&lt;li&gt;
Start the session (it loads a full Linux VM in your browser)&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%2Fmfrju6ssddy77iewbnl2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfrju6ssddy77iewbnl2.png" alt="Ubuntu playground " width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Once inside, you’re now operating inside a real server environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⭐ 5. Setting Up Nginx as the Web Server
&lt;/h2&gt;

&lt;p&gt;Nginx is a popular web server that can host static websites like our portfolio.&lt;/p&gt;

&lt;p&gt;To install it: &lt;br&gt;
&lt;code&gt;sudo apt install nginx -y&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%2Fh90j6wum6jinumhyt1ok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh90j6wum6jinumhyt1ok.png" alt=" " width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After installation, I checked its status:&lt;br&gt;
&lt;code&gt;sudo systemctl status nginx&lt;/code&gt;&lt;br&gt;
It showed "active (running)" — meaning the server is already serving a default page.&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%2Fwrw5xg3jir8ox1ivvtz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrw5xg3jir8ox1ivvtz5.png" alt=" " width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ 6. Enabling HTTP Access Through Port 80
&lt;/h2&gt;

&lt;p&gt;For a website to be accessible online, port 80 (HTTP) must be open.&lt;br&gt;
This confirmed that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nginx is running&lt;/li&gt;
&lt;li&gt;Port 80 is open&lt;/li&gt;
&lt;li&gt;The server is serving a default webpage&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%2Ftnjji7a1zz47iipnh2r3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftnjji7a1zz47iipnh2r3.png" alt=" " width="800" height="471"&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%2Fxe0ikdlqblvib7dxlsff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxe0ikdlqblvib7dxlsff.png" alt=" " width="800" height="481"&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%2Fi8fv89gl8zqjoijbzaci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8fv89gl8zqjoijbzaci.png" alt=" " width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On Killercoda, this is usually handled automatically, but for Linux servers, you typically do:&lt;br&gt;
&lt;code&gt;sudo ufw allow 'Nginx HTTP'&lt;/code&gt;&lt;br&gt;
&lt;code&gt;sudo ufw allow 80&lt;/code&gt;&lt;br&gt;
This ensures visitors can see your website.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ 7.Navigating to Nginx’s Web Root Folder
&lt;/h2&gt;

&lt;p&gt;Nginx stores its public HTML files here:&lt;br&gt;
ls /var/www/html&lt;/p&gt;

&lt;p&gt;Inside this folder, you'll find:&lt;br&gt;
index.nginx-debian.html&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%2Fofa2un1pmzcx9ntcbbmt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofa2un1pmzcx9ntcbbmt.png" alt=" " width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s the default Nginx landing page.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ 8. Clearing Out the Preinstalled Nginx Homepage
&lt;/h2&gt;

&lt;p&gt;We don’t need the default page, so I deleted it:&lt;br&gt;
&lt;code&gt;sudo rm index.nginx-debian.html&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%2Fkebfmagg2ymx7kn8w6mg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkebfmagg2ymx7kn8w6mg.png" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;br&gt;
Now the directory is empty and ready for my portfolio files.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ 9. Downloading My Portfolio Code from GitHub
&lt;/h2&gt;

&lt;p&gt;To pull my portfolio from GitHub into the server:&lt;br&gt;
&lt;code&gt;sudo git clone https://github.com/&amp;lt;username&amp;gt;/&amp;lt;repo&amp;gt;.git&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%2Fkr3z3p51znwi45blntv7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkr3z3p51znwi45blntv7.png" alt=" " width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, move only the website contents into the web directory:&lt;br&gt;
&lt;code&gt;sudo cp -r &amp;lt;repo-folder&amp;gt;/* /var/www/html/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;At this point, the server now contains my full portfolio website.&lt;/p&gt;

&lt;p&gt;Another way to go about this is to work directly with the Ubuntu playground &lt;br&gt;
In the play ground;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Write &lt;code&gt;nano index.html&lt;/code&gt;
Then paste your index source code from VScode
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9axgkhtztj2ml99lmfl.png" alt=" " width="800" height="477"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click on CtrlX and then Y to save buffer, then click 'enter'&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Next, write &lt;code&gt;nano style.css&lt;/code&gt;
Then paste your css source code from VScode
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv36tu6w707q9iun6nxc.png" alt=" " width="800" height="472"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click on CtrlX and then Y to save buffer, then click 'enter'&lt;/p&gt;

&lt;p&gt;You should have something like this on your playground:&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%2Fcla8oxc4scd9qdjys69b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcla8oxc4scd9qdjys69b.png" alt=" " width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Next, move the index.html into the root
&lt;code&gt;mv index.html /var/www/html/&lt;/code&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%2Fj28xi01k8grjcogn1tpp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj28xi01k8grjcogn1tpp.png" alt=" " width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Copy the style.css into the root
&lt;code&gt;cp style.css /var/www/html/&lt;/code&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%2Fwtarjvotwdmhjhabo5ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtarjvotwdmhjhabo5ih.png" alt=" " width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ 10. Viewing the Live Website
&lt;/h2&gt;

&lt;p&gt;Killercoda provides a Public Web Access URL for port 80.&lt;br&gt;
Clicking it instantly loads your deployed site.&lt;/p&gt;

&lt;p&gt;If everything worked correctly, you’ll see your real, live portfolio hosted by Nginx. 🚀🔥&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%2F3dkcop9ww2c6qvkzltux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dkcop9ww2c6qvkzltux.png" alt=" " width="800" height="500"&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%2F5h8av1tnai04wfu4vszm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8av1tnai04wfu4vszm.png" alt=" " width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At that moment… it hits you…&lt;br&gt;
You deployed your first website like a real DevOps engineer.&lt;/p&gt;

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

&lt;p&gt;Deploying my first portfolio using Killercoda and Nginx was a huge milestone in my DevOps journey.&lt;br&gt;
I learned:&lt;/p&gt;

&lt;p&gt;How to work with HTML templates&lt;/p&gt;

&lt;p&gt;How Git and GitHub fit into a workflow&lt;/p&gt;

&lt;p&gt;How to manage a Linux server&lt;/p&gt;

&lt;p&gt;How Nginx hosts static websites&lt;/p&gt;

&lt;p&gt;How deployment works in real life&lt;/p&gt;

&lt;p&gt;If you're starting out in DevOps, this project is perfect practice.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>devops</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
