Introduction
This is Part 2 of the Zero Dollar AI Assistant series. Part 1- Running a Personal AI Assistant for $0 - Architecture covers the full stack and why it works.
AWS, Google Cloud, and Azure have a free tier. However, they all have one thing in common: a clock ticking. Twelve months, then the bill starts.
Oracle Cloud is different. Their Always Free Tier has no expiry date. The server you provision today will still be running and free, as long as your account stays active. The benefit also includes the block storage capacity and its free tier. That's the foundation this entire stack is built on.
This article walks you through setting up that foundation: creating a properly configured Oracle Cloud account, provisioning an ARM instance with the right specs, and solving every gotcha along the way.
Understanding Oracle's Always Free Tier
Before touching the console, know what you're getting into:
Always Free compute:
- Up to 4 ARM CPU cores and 24GB RAM total across ARM instances — permanently free
- 2x
VM.Standard.E2.1.Micro(1 OCPU, 1GB RAM each) — also permanently free x86 instances, but avoid these for this stack — 1GB RAM is far too tight for Ollama - These are not trial credits. They don't expire.
Always Free storage:
- 200GB total block storage
- Enough for your server's boot volume with room to spare
What costs money:
- Going beyond 4 OCPU / 24GB RAM on ARM
- Reserved public IPs that aren't attached to a running instance
- Outbound data beyond 10TB/month — in practice, a personal AI assistant will never get close to this
The shape you want is VM.Standard.A1.Flex — Oracle's ARM instance. Use the full free allocation: 4 OCPU and 24GB RAM. This gives Ollama maximum headroom and keeps the system responsive under load.
Account Setup
Free Tier vs Pay As You Go
Start by creating an Oracle Cloud account at cloud.oracle.com. You'll be on the Free Tier by default.
Here's the catch: ARM capacity on the free tier is frequently exhausted. You'll often see "Out of Capacity" errors across all availability domains. The fix is upgrading to Pay As You Go (PAYG).
PAYG sounds alarming, but it isn't:
- Always Free resources remain free — your ARM instance still costs $0
- You only pay if you exceed free tier limits
- Oracle places a temporary $100 authorization hold on your card when you upgrade — this is a verification hold, not a charge, and disappears within 3-5 business days
Upgrade via: Billing → Upgrade and Manage Payment
Set a budget alert immediately after upgrading:
- Billing → Budgets → Create Budget
- Amount: $1
- Alert at 50% and 100%
This ensures you're notified before any real spend happens. In practice, for this setup, you'll never see the alert trigger.
Creating the VCN
Before launching an instance, you need a Virtual Cloud Network (VCN) with internet connectivity. This is where most people hit their first obstacle.
The critical mistake to avoid: Don't use the blue "Create VCN" button on the VCN list page. It creates a bare VCN with nothing attached — no subnets, no internet gateway, no routing. You'll end up with an instance that has no public IP and no way to SSH in.
The correct path — VCN Wizard:
Option A — From the Console home page:
- Look for "Set up a network with a wizard" in the build section
- Click it
Option B — From the VCN list page:
- Hamburger (☰) → Networking → Virtual Cloud Networks
- Look for "Start VCN Wizard" — it's separate from the "Create VCN" button
Either way, select "Create VCN with Internet Connectivity" and proceed. Give it a name (e.g., openclaw-vcn works), leave CIDR defaults, and click through.
The wizard automatically creates:
- Public subnet with internet routing
- Private subnet
- Internet Gateway
- NAT Gateway
- Route tables and security lists — all pre-wired
Add SSH Access
After the VCN is created:
- Go into your VCN → Subnets → click the Public Subnet
- Click Default Security List → Add Ingress Rules
- Add:
- Source CIDR:
0.0.0.0/0 - Protocol: TCP
- Destination port:
22
- Source CIDR:
- Save
Provisioning the Instance
Hamburger (☰) → Compute → Instances → Create Instance
Work through each section:
Image
Click Change Image and look carefully. Oracle lists ARM and x86 variants of Ubuntu side by side with nearly identical names:
-
Canonical Ubuntu 24.04→ x86 ❌ -
Canonical Ubuntu 24.04 Minimal aarch64→ ARM ✅
The aarch64 or Minimal aarch64 variant is what you want. Selecting the wrong one produces an "incompatible settings" error when combined with the ARM shape.
Recommended: Canonical Ubuntu 24.04 Minimal aarch64
The Minimal image strips unnecessary packages — smaller attack surface, less memory overhead, cleaner slate. Install any tools you need explicitly.
Shape
- Shape:
VM.Standard.A1.Flex - OCPUs: 4
- Memory: 24GB
If you see "Out of Capacity":
- Try each availability domain (AD-1, AD-2, AD-3)
- Set fault domain to "No preference."
- Try a different region
- If all else fails, this is the primary reason to upgrade to PAYG — capacity is significantly more available
Networking
- Select your
openclaw-vcn - Select the public subnet
- Check "Assign a public IPv4 address" ← easy to miss, critical
Boot Volume
Check "Specify a custom boot volume size" and set it to 100GB.
The default 46.6GB disappears quickly once Ubuntu, Node.js, Ollama, and a 5GB model are installed. 100GB stays well within your 200GB free storage allocation.
Leave in-transit encryption and confidential computing unchecked — both add overhead with no meaningful benefit for this use case.
SSH Keys
Generate a key pair or upload your existing public key. Alternatively, you can download and save the private key — you'll need it every time you SSH in.
Click Create and wait 2-3 minutes for provisioning.🕛
Initial Server Configuration
Use the previously configured SSH key to SSH into the Oracle cloud server you just provisioned. SSH from your laptop. Get the Public IP from your instance provisioned.
SSH in:
chmod 400 ~/.ssh/id_rsa
ssh -i ~/.ssh/id_rsa ubuntu@YOUR_INSTANCE_PUBLIC_IP
NOTE: Run these steps in order — don't skip them
System Update
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential curl wget tmux
Install tmux immediately — you'll use it for every long-running command. Starting a download without tmux and having SSH disconnect is a painful lesson.
Disable IPv6
Oracle Cloud's network doesn't support IPv6 for outbound connections in most configurations. OpenClaw's Telegram integration will repeatedly timeout and fail if IPv6 is active:
echo 'net.ipv6.conf.all.disable_ipv6 = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.default.disable_ipv6 = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Verify it worked:
curl -6 https://api.telegram.org 2>&1 | head -3
# Should fail immediately — that's correct
curl -4 https://api.telegram.org 2>&1 | head -3
# Should succeed
Install Node.js
OpenClaw requires Node.js 22+. Install via NVM for flexibility:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
source ~/.bashrc
nvm install 22
nvm use 22
nvm alias default 22
node --version # should show v22.x.x
Also install system-level Node (used by OpenClaw's systemd service):
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
Useful Aliases
echo "alias clearmem=\"sudo sh -c 'sync && echo 3 > /proc/sys/vm/drop_caches'\"" >> ~/.bashrc
source ~/.bashrc
clearmem clears the page cache when memory gets tight. You'll use it occasionally, even on 18GB RAM.
Verifying the Setup
Before moving on to Ollama and OpenClaw installation, confirm everything is healthy:
# Verify ARM architecture
uname -m
# Expected: aarch64
# Verify disk space
df -h
# /dev/sda1 should show ~96GB available
# Verify Node.js
node --version
# Should show v22.x.x
# Verify IPv6 is disabled
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
# Should show: 1
# Verify internet connectivity
curl -s https://api.telegram.org | head -3
# Should respond
If all five pass, your foundation is set up. You're ready for Part 3 — installing Ollama and picking the right model for your hardware.
Common Issues and Fixes
This instance has incompatible settings
You selected the x86 Ubuntu image with the ARM shape. Go back to image selection and choose theaarch64variant.Out of Capacity for VM.Standard.A1.Flex
Try all three ADs, set fault domain to "No preference", and consider upgrading to PAYG. Capacity is the single most common blocker for new Oracle free-tier accounts.Instance created but no public IP showing
The public subnet wasn't selected during creation, or "Assign a public IPv4 address" wasn't checked. Easiest fix: terminate and recreate with the correct networking settings.SSH connection refused
The SSH ingress rule wasn't added to the security list. Go to VCN → Public Subnet → Default Security List → add TCP ingress on port 22.SSH times out after a few minutes of inactivity
Add to~/.ssh/configon your local machine:
Host *
ServerAliveInterval 60
ServerAliveCountMax 10
What's Next
With your Oracle Cloud instance running, IPv6 disabled, and Node.js installed, the infrastructure layer is done.
Part 3 of this zero-dollar AI Assistant series will cover installing Ollama on ARM, choosing the right model for CPU inference, managing disk space with large model files, and the hybrid local + Gemini fallback architecture that makes the whole thing actually usable.
This article is the second in a five-part series:
- Running a Personal AI Assistant for $0 - Architecture
- Setting Up Free Cloud Server — VCN, ARM instances, static IPs, the gotchas ← you are here
- Running Ollama on ARM — model selection, disk management, CPU inference reality
- Installing OpenClaw on Linux — avoiding every trap
- The Complete Setup — Telegram, Gemini fallback, end-to-end testing
Stay tuned, all links will be updated as articles are published.
If you have reached this point, I have made a satisfactory effort to keep you reading. Please be kind enough to leave any comments or share any corrections.


Top comments (0)