DEV Community

Emmanuel Omoiya
Emmanuel Omoiya

Posted on

Setting Up NGINX on Ubuntu: DevOps Stage 0

Introduction

As part of my DevOps internship journey, I was tasked with setting up and configuring NGINX on a fresh Ubuntu server. This task aimed to evaluate my ability to work with web server configurations and ensure I could deliver a functional web server. The final goal was to serve a custom HTML page displaying the message:

"Welcome to DevOps Stage 0 - Emmanuel Omoiya / Emmanuel Omoiya"

This blog post documents my approach, challenges faced, and key learnings from completing this task.


Step 1: Setting Up the Ubuntu Server

To begin, I set up an Ubuntu server on my preferred cloud platform. I used AWS EC2, but other options like Google Cloud or DigitalOcean could also be used. After launching the instance, I connected via SSH:

ssh ubuntu@<your-server-ip>
Enter fullscreen mode Exit fullscreen mode

Tip: Ensure your security group allows inbound traffic on port 80 to make the NGINX server accessible publicly.


Step 2: Installing NGINX

Installing NGINX on Ubuntu was straightforward using the package manager:

sudo apt update  
sudo apt install nginx -y
Enter fullscreen mode Exit fullscreen mode

Once installed, I verified that NGINX was running with:

sudo systemctl status nginx
Enter fullscreen mode Exit fullscreen mode

If not running, I started the service:

sudo systemctl start nginx
Enter fullscreen mode Exit fullscreen mode

And enabled it to start on boot:

sudo systemctl enable nginx
Enter fullscreen mode Exit fullscreen mode

At this stage, visiting http://<your-server-ip>/ in a browser should display the default NGINX Welcome Page.


Step 3: Configuring the Custom HTML Page

Next, I created a simple HTML file to serve as the default page:

sudo nano /var/www/html/index.html
Enter fullscreen mode Exit fullscreen mode

I replaced its content with:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DevOps Stage 0</title>
</head>
<body>
    <h1>Welcome to DevOps Stage 0 - Emmanuel Omoiya / Emmanuel Omoiya</h1>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

After saving the file, I restarted NGINX to apply the changes:

sudo systemctl restart nginx
Enter fullscreen mode Exit fullscreen mode

Now, visiting http://<your-server-ip>/ displayed the custom message.


Step 4: Verifying the Setup

To confirm everything was working correctly, I ran:

curl http://localhost/
Enter fullscreen mode Exit fullscreen mode

The expected output should display the HTML content of my page. Additionally, I tested my server from a browser using the public IP address.


Challenges Faced and Solutions

1️⃣ NGINX Not Starting Due to Conflicts

At first, NGINX failed to start due to a port conflict. Running:

sudo lsof -i :80
Enter fullscreen mode Exit fullscreen mode

showed that another process was using port 80. I resolved this by stopping the conflicting process:

sudo systemctl stop apache2
sudo systemctl disable apache2
Enter fullscreen mode Exit fullscreen mode

2️⃣ Permission Issues While Editing HTML Files

When trying to edit /var/www/html/index.html, I encountered permission errors. Granting necessary access fixed this:

sudo chmod -R 755 /var/www/html
Enter fullscreen mode Exit fullscreen mode

Key Takeaways

This task reinforced several important DevOps concepts:

Server Setup & Configuration – I gained hands-on experience installing and configuring NGINX on a cloud-based Ubuntu server.

Web Server Basics – Understanding how NGINX serves static content and how to customize the default page was invaluable.

Troubleshooting Skills – Debugging issues like port conflicts and permission errors improved my problem-solving skills.

This foundational knowledge will be crucial as I advance in my DevOps journey, especially in Site Reliability Engineering and Cloud Engineering.


Final Thoughts

Completing this task gave me a deeper understanding of NGINX, a core component in web infrastructure. It also prepared me for more advanced topics like reverse proxying, load balancing, and SSL configurations.

For those interested in DevOps roles, check out:

🔹 Site Reliability Engineers

🔹 Cloud Engineers

Would love to hear about your experience with NGINX! Drop a comment below. 🚀

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay