From Zero to Live Server: My DevOps Journey

By Saruchi Arora — June 2026

I've been a .NET backend developer for years and have worked a lot with AWS services, but I did not have much experience with setting up and hosting my own server from scratch. So I started working on that. Here's exactly what I did, step by step.

1. Provisioned a Cloud Server (Oracle Cloud)

Spun up a free Ubuntu instance on Oracle Cloud (OCI). Free tier, real infrastructure. During creation, the public IP option was greyed out — so I assigned it after creation:

2. Opened Firewall Ports

OCI has multiple firewall layers — this caught me off guard. I had to open ports in the Security List (not "Network Firewalls" which is a paid service):

Source CIDRProtocolPort
0.0.0.0/0TCP80 (HTTP)
0.0.0.0/0TCP443 (HTTPS)

But the site still didn't load. The real blocker was iptables — Ubuntu's kernel-level firewall was rejecting all traffic:

sudo iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT
  sudo iptables -I INPUT 6 -p tcp --dport 443 -j ACCEPT
  sudo netfilter-persistent save

Bonus: AWS Linux vs Ubuntu — Not the Same!

I use Amazon Linux at work for staging and production servers. I assumed Linux is Linux — same commands everywhere. I was wrong.

The first difference I hit was nginx commands:

ActionUbuntuAmazon Linux
Installsudo apt install nginxsudo yum install nginx
Startsudo systemctl start nginxsudo service nginx start
Config location/etc/nginx/sites-available//etc/nginx/conf.d/
Default userubuntuec2-user

Ubuntu uses apt (Debian-based), Amazon Linux uses yum/dnf (Red Hat-based). Ubuntu has the sites-available / sites-enabled pattern for enabling/disabling sites. Amazon Linux puts all configs directly in conf.d/ — no enable/disable concept.

Small differences, but they'll catch you out if you blindly copy commands from tutorials without checking which distro they're written for.

3. SSH From Windows (WSL)

WSL can't change file permissions on Windows drives (/mnt/c/), so I had to copy the key to the Linux filesystem first:

mkdir -p ~/arorahub
  cp "/mnt/c/saruchi/dev playground/arorahub.com/OCI/ssh-key.key" ~/arorahub/
  chmod 400 ~/arorahub/ssh-key.key
  ssh -i ~/arorahub/ssh-key.key ubuntu@92.5.236.30

4. Connected My Domain (TransIP)

Pointed arorahub.com to my server. Key lesson: TransIP has a "default settings" mode that overrides your DNS — had to enable Advanced Domain Management first.

NameTypeValue
@A92.5.236.30
wwwCNAME@
saruchiA92.5.236.30
bharatA92.5.236.30

5. Installed & Configured Nginx

sudo apt update
  sudo apt install nginx -y
  sudo systemctl start nginx
  sudo systemctl enable nginx

Created separate config files per subdomain in /etc/nginx/sites-available/, then enabled them with symlinks:

sudo ln -s /etc/nginx/sites-available/saruchi.arorahub.com /etc/nginx/sites-enabled/
  sudo nginx -t
  sudo systemctl reload nginx

6. Free SSL with Certbot

sudo apt install certbot python3-certbot-nginx -y
  sudo certbot --nginx -d arorahub.com -d www.arorahub.com
  sudo certbot --nginx -d saruchi.arorahub.com
  sudo certbot --nginx -d bharat.arorahub.com

Certbot automatically configures nginx for HTTPS and sets up auto-renewal.

What's Next

#dotnet #devops #nginx #linux #oraclecloud #learninginpublic