Ever wanted a computer in the cloud you can open from your phone, laptop, or any device — just by typing a URL in a browser?
No app to install. No VPN. Just open a link and you're staring at a full desktop.
I set this up for free using Oracle Cloud's Always Free tier. Here's exactly how I did it, including the mistakes I made along the way.
Why Oracle Cloud?
Before we start, here's why Oracle Cloud is the best free option:
| Provider | Free CPU | Free RAM | Free Forever? |
|---|---|---|---|
| Oracle Cloud | 2 ARM cores | 12 GB | ✅ Yes |
| Google Cloud | 1 shared vCPU | 0.6 GB | ✅ Yes (but too slow for a browser) |
| AWS | 1 vCPU | 1 GB | ❌ 12 months only |
| Azure | 1 vCPU | 1 GB | ❌ 12 months only |
Note: Oracle reduced their Always Free ARM tier from 4 OCPUs/24 GB to 2 OCPUs/12 GB in August 2026. It's still the most generous free tier available — Google's free VM has 0.6 GB RAM which can't even run a browser properly.
What You'll Have at the End
- A free Ubuntu 22.04 VM running 24/7
- Full XFCE desktop environment
- Firefox browser running in that VM
- Access from any browser via
http://YOUR_IP:6080/vnc.html - Works on mobile, laptop, tablet — anything with a browser
- A platform to host web servers, bots, scripts, and side projects — all for free
Step 1: Create an Oracle Cloud Account
Go to cloud.oracle.com → Start for free
You'll need:
- An email address
- A Visa or Mastercard for identity verification (a ~$1 temporary hold is placed and auto-refunded in 3-5 days — RuPay is not accepted)
- Choose your Home Region carefully — you can't change it later
Indian users: Oracle charges through their Singapore entity for APAC. The temporary hold appears in SGD (~₹85), not INR. It disappears on its own.
Step 2: Create the Free VM
- Go to Compute → Instances → Create Instance
- Click Change Image → Select Ubuntu 22.04
- Click Change Shape → Ampere (ARM) → VM.Standard.A1.Flex
- Set OCPUs: 2 and Memory: 12 GB
- Under Networking → Select Create new virtual cloud network
- Under Add SSH Keys → Download the private key and save it safely
- Click Create and wait 2-3 minutes
Step 3: Assign a Public IP
New VMs sometimes don't get a public IP automatically. Here's how to fix that:
- Click your instance → Networking tab
- Click the VNIC name → IP Administration tab
- Click ⋯ on the row → Edit
- Select Ephemeral public IP → Update
Note your public IP — you'll need it throughout this guide.
Step 4: SSH Into the VM
Windows (PowerShell):
ssh -i C:\path\to\your-key.key ubuntu@YOUR_PUBLIC_IP
Mac/Linux:
ssh -i ~/path/to/your-key.key ubuntu@YOUR_PUBLIC_IP
Type yes when asked about the fingerprint. You should see the Ubuntu welcome screen.
Step 5: Install Everything
Run these commands one by one:
# Update the system
sudo apt update && sudo apt upgrade -y
When prompted about restarting services, just press Enter to accept defaults.
# Install XFCE desktop + VNC + noVNC
sudo apt install -y xfce4 xfce4-goodies tightvncserver novnc websockify
# Install Firefox (non-snap version — important!)
sudo add-apt-repository ppa:mozillateam/ppa -y
sudo apt install -y firefox-esr
Why non-snap Firefox? Ubuntu's default Firefox is installed as a snap package, which doesn't work inside a VNC session. Always use
firefox-esrfrom the Mozilla PPA instead.
Step 6: Configure VNC
Set your VNC password:
vncserver :1
Enter a password (max 8 characters). Type n when asked about a view-only password.
Configure XFCE as the desktop:
vncserver -kill :1
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
EOF
chmod +x ~/.vnc/xstartup
Start VNC with your screen resolution:
vncserver :1 -geometry 1920x1080 -depth 24
Step 7: Start noVNC
noVNC is what turns the VNC desktop into something you can open in any browser:
websockify --web=/usr/share/novnc/ 6080 localhost:5901 &
Step 8: Open the Firewall
You need to open port 6080 in two places:
1. Inside the VM:
sudo apt install -y iptables-persistent
sudo iptables -I INPUT -p tcp --dport 6080 -j ACCEPT
sudo netfilter-persistent save
The
iptables-persistentpart is important — without it, the firewall rule disappears every time the VM reboots.
2. In Oracle Cloud Console:
- Go to Networking → Virtual Cloud Networks → Your VCN
- Click Security tab → Default Security List
- Click Add Ingress Rules:
- Source CIDR:
0.0.0.0/0 - Protocol: TCP
- Destination Port Range:
6080
- Source CIDR:
- Click Add Ingress Rules
Step 9: Access from Any Device
Open any browser and go to:
http://YOUR_PUBLIC_IP:6080/vnc.html
Enter your VNC password → Click Connect.
You'll see the full Ubuntu desktop. Open Firefox from Applications → Web Browser.
That's it. You can now open this URL from your phone, your office laptop, a friend's computer — anywhere.
Make It Survive Reboots
Set up systemd services so everything starts automatically:
sudo bash -c 'cat > /etc/systemd/system/vncserver.service << EOF
[Unit]
Description=VNC Server
After=network.target
[Service]
User=ubuntu
Type=forking
ExecStartPre=-/usr/bin/vncserver -kill :1
ExecStartPre=-/bin/rm -f /tmp/.X1-lock /tmp/.X11-unix/X1
ExecStart=/usr/bin/vncserver :1 -geometry 1920x1080 -depth 24
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF'
sudo bash -c 'cat > /etc/systemd/system/novnc.service << EOF
[Unit]
Description=noVNC
After=vncserver.service
Requires=vncserver.service
[Service]
User=ubuntu
ExecStart=/usr/bin/websockify --web=/usr/share/novnc/ 6080 localhost:5901
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF'
sudo systemctl daemon-reload
sudo systemctl enable vncserver novnc
sudo systemctl start vncserver novnc
Now VNC + noVNC start automatically on every reboot. No SSH needed to get back in.
Transferring Files to Your VM
Copy a file from your local machine to the VM:
scp -i /path/to/key.key /local/file.pdf ubuntu@YOUR_IP:/home/ubuntu/
What Else Can You Do With This VM?
A free cloud VM with 2 cores and 12 GB RAM is surprisingly capable. Here's what you can run on it beyond just browsing:
🛠️ Development & Coding
- Host a web server — deploy a Node.js, Python Flask, or any backend API for free
- VS Code in the browser — install code-server and get a full IDE accessible from any device
- Database server — run PostgreSQL, MongoDB, or Redis
- Docker containers — spin up multiple services on one VM
📚 Learning & Practice
- Linux practice — a safe sandbox to learn terminal commands without breaking your own machine
- Learn DevOps — practice Docker, CI/CD pipelines, nginx configs
- Self-host your side projects — deploy and share your projects for free
- Run Python/ML scripts — small AI experiments and data processing
⚡ Always-On Tasks
- Background downloads — leave large downloads running 24/7 without keeping your laptop on
- Scheduled cron jobs — run scripts at specific times automatically
- Telegram/Discord bots — keep them always online
- Web scrapers — run data collection scripts continuously
🔒 Privacy
- Browse with a different IP — websites see the VM's IP, not yours
- Isolated browsing — keep work and personal browsing completely separate
Gotchas I Hit (So You Don't Have To)
1. Public IP not assigned by default
New Oracle VMs sometimes have no public IP. Go to Networking → VNIC → IP Administration to assign one.
2. Snap browsers don't work in VNC
Both chromium-browser and firefox on Ubuntu 22.04 install as snap packages which crash inside VNC with a cgroup error. Use firefox-esr from the Mozilla PPA instead.
3. iptables rules reset on reboot
After resizing the VM (changing CPU/RAM), Oracle reboots it and iptables resets. The fix is iptables-persistent which saves rules permanently.
4. Mumbai region capacity
If you're in India, the Mumbai region is often at capacity for free ARM VMs. You may get fewer OCPUs/RAM than the limit allows. Try resizing after creation, or add the Singapore region to your account.
Security
- Don't share your URL + VNC password with anyone you don't trust
- Enable MFA on your Oracle account: Profile → Security → MFA
- The connection is HTTP (not HTTPS) — don't do internet banking or enter real passwords inside the VM
- Change your VNC password anytime with
vncpasswd
Final Thoughts
For ₹0 a month, you get a cloud computer with 2 cores and 12 GB RAM running 24/7, accessible from any device on the planet.
Is it blazing fast? No. Is it free forever and genuinely useful? Absolutely.
I use it for browsing, running scripts, and keeping things running in the background — without touching my local machine's resources.
If this helped you, drop a ❤️! And if you hit any issues, ask in the comments — I've probably already made that mistake. 😄
Top comments (0)