# Default username for Ubuntu is "ubuntu"
ssh -i ~/.ssh/your-key ubuntu@YOUR_PUBLIC_IP # Verify you're running on ARM
uname -m
# Output: aarch64
# Default username for Ubuntu is "ubuntu"
ssh -i ~/.ssh/your-key ubuntu@YOUR_PUBLIC_IP # Verify you're running on ARM
uname -m
# Output: aarch64
# Default username for Ubuntu is "ubuntu"
ssh -i ~/.ssh/your-key ubuntu@YOUR_PUBLIC_IP # Verify you're running on ARM
uname -m
# Output: aarch64
# Ubuntu — -weight: 500;">disable the default iptables rule that blocks everything
-weight: 600;">sudo iptables -F
-weight: 600;">sudo iptables -P INPUT ACCEPT # Or open specific ports only
-weight: 600;">sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-weight: 600;">sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
-weight: 600;">sudo netfilter-persistent save
# Ubuntu — -weight: 500;">disable the default iptables rule that blocks everything
-weight: 600;">sudo iptables -F
-weight: 600;">sudo iptables -P INPUT ACCEPT # Or open specific ports only
-weight: 600;">sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-weight: 600;">sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
-weight: 600;">sudo netfilter-persistent save
# Ubuntu — -weight: 500;">disable the default iptables rule that blocks everything
-weight: 600;">sudo iptables -F
-weight: 600;">sudo iptables -P INPUT ACCEPT # Or open specific ports only
-weight: 600;">sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-weight: 600;">sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
-weight: 600;">sudo netfilter-persistent save
# Deploy a Node.js app with Nginx reverse proxy
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">update && -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y nginx nodejs -weight: 500;">npm
-weight: 500;">npm -weight: 500;">install -g pm2
pm2 -weight: 500;">start app.js --name myapp
pm2 startup && pm2 save
# Deploy a Node.js app with Nginx reverse proxy
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">update && -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y nginx nodejs -weight: 500;">npm
-weight: 500;">npm -weight: 500;">install -g pm2
pm2 -weight: 500;">start app.js --name myapp
pm2 startup && pm2 save
# Deploy a Node.js app with Nginx reverse proxy
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">update && -weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y nginx nodejs -weight: 500;">npm
-weight: 500;">npm -weight: 500;">install -g pm2
pm2 -weight: 500;">start app.js --name myapp
pm2 startup && pm2 save
# Install Docker on ARM (Ubuntu)
-weight: 500;">curl -fsSL https://get.-weight: 500;">docker.com | sh
-weight: 600;">sudo usermod -aG -weight: 500;">docker ubuntu # Run a full stack app
-weight: 500;">docker compose up -d
# Install Docker on ARM (Ubuntu)
-weight: 500;">curl -fsSL https://get.-weight: 500;">docker.com | sh
-weight: 600;">sudo usermod -aG -weight: 500;">docker ubuntu # Run a full stack app
-weight: 500;">docker compose up -d
# Install Docker on ARM (Ubuntu)
-weight: 500;">curl -fsSL https://get.-weight: 500;">docker.com | sh
-weight: 600;">sudo usermod -aG -weight: 500;">docker ubuntu # Run a full stack app
-weight: 500;">docker compose up -d
# Install Ollama (ARM-compatible)
-weight: 500;">curl -fsSL https://ollama.com/-weight: 500;">install.sh | sh # Run Llama 3.2 (3B) — fits easily in 24 GB
ollama pull llama3.2
ollama run llama3.2 # Expose API on port 11434
OLLAMA_HOST=0.0.0.0 ollama serve
# Install Ollama (ARM-compatible)
-weight: 500;">curl -fsSL https://ollama.com/-weight: 500;">install.sh | sh # Run Llama 3.2 (3B) — fits easily in 24 GB
ollama pull llama3.2
ollama run llama3.2 # Expose API on port 11434
OLLAMA_HOST=0.0.0.0 ollama serve
# Install Ollama (ARM-compatible)
-weight: 500;">curl -fsSL https://ollama.com/-weight: 500;">install.sh | sh # Run Llama 3.2 (3B) — fits easily in 24 GB
ollama pull llama3.2
ollama run llama3.2 # Expose API on port 11434
OLLAMA_HOST=0.0.0.0 ollama serve
# Install k3s (lightweight Kubernetes)
-weight: 500;">curl -sfL https://get.k3s.io | sh - # Check -weight: 500;">status
-weight: 600;">sudo k3s -weight: 500;">kubectl get nodes
# Install k3s (lightweight Kubernetes)
-weight: 500;">curl -sfL https://get.k3s.io | sh - # Check -weight: 500;">status
-weight: 600;">sudo k3s -weight: 500;">kubectl get nodes
# Install k3s (lightweight Kubernetes)
-weight: 500;">curl -sfL https://get.k3s.io | sh - # Check -weight: 500;">status
-weight: 600;">sudo k3s -weight: 500;">kubectl get nodes
# Install WireGuard
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y wireguard # Use the automated setup script
-weight: 500;">curl -O https://raw.githubusercontent.com/angristan/wireguard--weight: 500;">install/master/wireguard--weight: 500;">install.sh
bash wireguard--weight: 500;">install.sh
# Install WireGuard
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y wireguard # Use the automated setup script
-weight: 500;">curl -O https://raw.githubusercontent.com/angristan/wireguard--weight: 500;">install/master/wireguard--weight: 500;">install.sh
bash wireguard--weight: 500;">install.sh
# Install WireGuard
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y wireguard # Use the automated setup script
-weight: 500;">curl -O https://raw.githubusercontent.com/angristan/wireguard--weight: 500;">install/master/wireguard--weight: 500;">install.sh
bash wireguard--weight: 500;">install.sh - Ampere A1 ARM instances: 4 OCPUs + 24 GB RAM total — allocate however you want (e.g., one 4-core 24 GB VM, or four 1-core 6 GB VMs)
- AMD Micro instances: 2 × VM.Standard.E2.1.Micro (1/8 OCPU, 1 GB RAM each)
- OS: Ubuntu, Oracle Linux, CentOS, Debian — your choice - Block storage: 200 GB total (across all volumes)
- Object storage: 20 GB (S3-compatible)
- Archive storage: 20 GB - Outbound bandwidth: 10 TB/month
- Load balancer: 1 × 10 Mbps
- VCN (Virtual Cloud Network): 2 free
- Public IPs: 2 free - Autonomous Database: 2 × 20 GB (supports Oracle DB, JSON, APEX) - OCI Vault: Key management
- Monitoring & logging: 500 million datapoints/month
- Email Delivery: 100 emails/day - Go to oracle.com/cloud/free and click Start for free
- Fill in your account details and verify your email
- You’ll need to provide a credit card — Oracle uses it for identity verification only. You won’t be charged unless you manually -weight: 500;">upgrade to a paid account
- Select your home region carefully — this cannot be changed later. US regions (Ashburn, Phoenix) tend to have the most A1 availability - In the OCI Console, go to Compute → Instances → Create Instance
- Under Image and shape, click Change shape
- Select Ampere → VM.Standard.A1.Flex
- Set OCPUs to 4 and RAM to 24 GB
- Under Add SSH keys, upload your public key or generate a new one
- Click Create - Try a less popular region (Tokyo, Singapore, Stockholm, Amsterdam)
- Try again at off-peak hours (2–5 AM UTC)
- Use the OCI CLI or API to retry automatically — many users write a script that polls every few minutes until an instance is created
- Create 4 separate 1-core 6 GB instances instead of one 4-core 24 GB — smaller instances are easier to allocate - You need a permanent free VPS with real resources (4 cores, 24 GB RAM)
- You want to self-host Docker apps, AI models, or databases for free
- You’re comfortable with OCI’s more complex console (it’s enterprise-grade) - You need GPU compute — Oracle has no free GPU tier
- You need managed databases at scale — the free Autonomous DB is limited
- You’re a complete beginner — OCI’s interface is more complex than DigitalOcean or Render - Render Free Hosting Review 2026: Deploy Web Apps, Databases, and Cron Jobs for Free
- Supabase vs Neon: Which Free PostgreSQL Database Should You Use in 2026?
- Vercel vs Netlify vs Cloudflare Pages: Free Frontend Hosting Compared
- Railway App Review 2026: The Best Heroku Alternative for Developers
- 7 Best Free Web Hosting for Developers: Cloudflare Pages, Vercel, Netlify and More