Set up VirtualBox, install Ubuntu Linux, configure a web server, set up storage, and simulate cloud infrastructure — all on your local computer. This is your first real hands-on cloud engineering experience.
In a real cloud environment, you would provision virtual machines on AWS, Azure, or Google Cloud. In this project, you will simulate that exact same architecture on your own computer using VirtualBox. VirtualBox is a free program that lets your computer run multiple virtual computers inside it — this is exactly how cloud providers work (they run millions of VMs on their physical servers).
You will complete this project in three major phases: (1) Install VirtualBox and set up Ubuntu, (2) Configure the web server and storage, and (3) Verify everything is working. Take screenshots at each major step — these are part of your deliverables.
VirtualBox is the program that allows your computer to run Ubuntu Linux as a virtual machine. Think of it as a computer inside your computer. This is the same technology cloud providers use — just on a massive scale.
https://www.virtualbox.org/wiki/DownloadsVirtualBox-7.x.x-Win.exeUbuntu is the Linux distribution we will use. LTS stands for "Long Term Support" — it receives security updates for 5 years. Ubuntu 22.04 is one of the most widely used Linux versions in cloud environments. The ISO file is like a digital DVD — it contains the complete operating system.
https://ubuntu.com/download/serverC:\VMs\ISOs\ubuntu-22.04.x-live-server-amd64.iso — verify the download completed fully (the file size should be approximately 1.5–1.8 GB).Now you will create the virtual machine. Think of this as purchasing and configuring a cloud VM — you are choosing the number of CPUs, amount of RAM, and disk size, just like selecting an instance type in AWS or Azure.
ABC-Retail-WebServer
Linux
Ubuntu (64-bit)
2048 MB (2 GB) if you have 8 GB total, or 4096 MB (4 GB) if you have 16 GB or more. Then click "Next".20 GB. Then click "Create".Now you will actually install the Ubuntu operating system. This process is similar to what happens automatically when a cloud provider provisions a VM — they install the OS from a pre-built image. You are doing it manually to understand exactly what's happening inside.
"GNU GRUB" and a menu. Use the arrow keys to select "Try or Install Ubuntu Server" and press Enter.cloudadmin
abc-retail-web
cloudadmin
CloudPass@123 (or something you will remember — write it down!)
"Please remove the installation medium, then press ENTER" — just press Enter. The VM will restart.cloudadmin and press Enter. Then type your password (it won't show on screen — this is normal for Linux) and press Enter.cloudadmin@abc-retail-web:~$ — This means Ubuntu is installed and you are logged in as the system administrator. Congratulations — you have a running Linux server!
The Linux command line is how you control cloud servers. Every command you type here is the same type of command used by cloud engineers at Amazon, Google, and Microsoft to manage production servers. Take time to understand each command — don't just copy-paste without reading the explanation.
ip addr show command displays all network interfaces and their IP addresses on this machine. You will see two interfaces: enp0s3 (your NAT connection to the internet) and enp0s8 (your Host-only adapter). Look for the IP address next to "inet" on the enp0s8 interface — it will look like 192.168.56.xxx. Write this IP down — you will need it to access the website later.sudo command means "Super User Do" — it runs the following command with administrator (root) privileges. In Linux, regular users cannot install software without administrator permission. The apt update command contacts Ubuntu's software repositories and downloads the latest list of available packages. It does NOT install anything yet — it just refreshes the list.apt upgrade command downloads and installs all available updates for software already installed on the system. The -y flag automatically answers "Yes" to any confirmation prompts. Running updates before installing anything else is a security best practice — cloud servers should always be patched before being exposed to the network.hostname command displays the name assigned to this server. You should see abc-retail-web — the name you chose during installation. In cloud environments, hostnames are important for DNS resolution, monitoring systems, and log aggregation. Every server should have a meaningful, descriptive hostname.df command stands for "disk free" — it shows disk usage for all file systems. The -h flag means "human readable" — instead of showing numbers in bytes, it shows them in MB and GB. You should see that the 20 GB virtual disk you created is mostly empty. This command is used daily by cloud engineers to monitor storage capacity before it runs out.free command shows how much RAM is being used and how much is available. The -h flag makes it human-readable. You will see "total", "used", "free", "shared", "buff/cache", and "available" columns. The "available" number is what can be allocated to new processes. Cloud engineers monitor this metric to determine if a server needs more RAM or if the application is using too much memory.Nginx (pronounced "Engine-X") is one of the world's most popular web servers. It is used by Netflix, Cloudflare, and thousands of other companies. You will install it to serve the ABC Retail website from your virtual machine.
apt install nginx command downloads and installs the Nginx web server package and all its dependencies. After installation, Ubuntu automatically starts the Nginx service. This single command replaces what used to require hours of manual configuration on physical servers — this is the power of package management in Linux.systemctl status command checks the current status of a system service. For Nginx, you should see green text saying ● nginx.service - A high performance web server... with Active: active (running) below it. If it says "inactive" or "failed", something went wrong during installation — run sudo systemctl start nginx to try starting it manually. The systemctl tool is how Linux manages all background services (called daemons).mkdir command (make directory) creates a new folder. The -p flag creates all parent directories if they don't exist. /var/www/ is the standard Linux location for web content. In cloud environments, web content is often stored in this location or on attached storage volumes. We're creating a specific folder for ABC Retail to keep things organized.chown command changes file ownership. The -R flag applies the change recursively (to all files inside the directory). $USER is an environment variable that automatically inserts your current username. This is important because Nginx needs permission to read website files. Incorrect file permissions are one of the most common causes of "403 Forbidden" errors in web servers.cat > command combined with << 'EOF' is called a "here document" — it lets you write multiple lines of text directly into a file from the terminal without opening a text editor. Everything between the two EOF markers is written to the file. This is a technique used in cloud automation scripts to create configuration files programmatically.nano text editor opens a simple in-terminal editor. The file you are opening is a new Nginx "server block" configuration file — this tells Nginx how to handle requests for the ABC Retail website. The /etc/nginx/sites-available/ directory is where Nginx configurations are stored. Using nano, type the configuration in the next step./var/www/abc-retail/html directory, and use index.html as the default page. The location / block handles all URL paths. When a browser requests / (the homepage), Nginx tries to find a file matching that path, then a directory, and returns 404 if neither exists.Ctrl+O then press Enter (to save), then press Ctrl+X (to exit nano).ln -s command creates a symbolic link (shortcut). Nginx has two directories: sites-available (where configurations are stored) and sites-enabled (what Nginx actually loads). By creating a link in sites-enabled pointing to our configuration in sites-available, we activate the site without duplicating the file. This design allows you to quickly enable/disable sites by creating or deleting links.nginx -t command parses all configuration files and checks for syntax errors without actually restarting Nginx. This is critical — never reload Nginx without testing first. A syntax error in the configuration would cause Nginx to fail to restart, taking down the website. You should see "syntax is ok" and "test is successful".systemctl reload command sends a signal to Nginx to re-read its configuration files without stopping active connections. This is different from restart — a reload maintains existing connections, meaning website visitors don't experience any interruption. In production environments, reloads are always preferred over restarts for zero-downtime configuration changes.curl command sends an HTTP request to a URL and displays the response. When you run curl http://localhost, you are telling your VM to request its own website. You should see the HTML code of your ABC Retail page in the terminal output. This verifies that Nginx is serving the website correctly. If you see the HTML, the web server is working.Now you will access the website you just deployed — from your main computer's web browser, just like a real user would access it from the internet.
| symbol is called a "pipe" — it sends the output of ip addr show into the grep command, which filters for lines containing "inet " (the IPv4 address line). You should see something like inet 192.168.56.101/24 — the number before /24 is your VM's IP address.192.168.56.101. Write it down.http://192.168.56.101) and press Enter.Cloud environments have multiple types of storage. In this step, you will simulate block storage (by adding a virtual disk) and practice Linux storage management commands that are essential for cloud engineers.
ABC-Retail-DataDisk, and click "Create".lsblk command lists all block devices (storage devices) attached to the system. You should now see two disks: sda (your original 20GB OS disk) and sdb (your new 5GB data disk). This is the equivalent of looking at what EBS volumes are attached to an EC2 instance in AWS. Note that sdb has no partitions or mount points yet — it's a raw disk.mkfs.ext4 command creates a filesystem on the disk. EXT4 is the standard Linux filesystem, equivalent to NTFS on Windows. Think of this as "initializing" a blank hard drive before you can use it. In AWS, when you create an EBS volume and attach it to an EC2 instance, you also need to format it before use. Type y and press Enter if asked to proceed./data or /mnt. This mirrors how cloud block storage works — in AWS, you mount an EBS volume to a directory path on the EC2 instance.mount command attaches a storage device to the filesystem at a specified path. After this command, any files written to /data/abc-retail/ are physically stored on the /dev/sdb disk. This separation is important: if the OS disk (sda) fails, the data disk (sdb) and all its contents remain safe./data/abc-retail mount point. You should see approximately 5 GB total with most of it available. This is exactly the information you would check after attaching and mounting a cloud block storage volume to verify it is correctly configured./etc/fstab file (filesystem table) tells Linux which disks to mount automatically when the system boots. Without adding an entry here, the disk would need to be manually re-mounted after every reboot. The tee -a command appends the text to the file. In cloud environments, auto-mounting persistent storage is essential — cloud VMs restart periodically for maintenance.ls -la command lists all files with detailed information including permissions, ownership, and size. This directory structure simulates how an organization would organize files on cloud block storage.Cloud engineers constantly monitor their infrastructure. In this step, you will run monitoring commands and document the state of your server — an important professional habit.
ps aux command lists all running processes on the system. The grep nginx filter shows only lines containing "nginx". You should see the Nginx master process and worker processes. In a real cloud environment, monitoring tools like AWS CloudWatch automatically track these processes — here you are doing it manually to understand what's happening.tail command shows the last lines of a file, and -20 shows the last 20 lines. The Nginx access log records every HTTP request received by the server — the time, the client IP, the requested URL, and the response code. When you accessed the website from your browser, that request was logged here. Log analysis is a critical cloud operations skill for troubleshooting and security monitoring.This diagram shows the automated pipeline that cloud providers use to provision new virtual machines — which mirrors the manual steps you just completed.
df -h output showing storagesudo systemctl status nginxsudo ufw status verboseapt, systemctl, ufw, df, ip addr, curl, tail — these appear in job descriptions for Cloud Engineer, DevOps Engineer, and SRE roles.