Context: Researching free/cheap VM and app deployment options

Oracle Cloud Free Tier Setup

Signed up for Oracle Cloud Always Free tier in US-Ashburn region. Attempted to provision a VM.Standard.A1.Flex instance (4 OCPU / 24GB RAM ARM) but hit “Out of capacity” across all 3 availability domains.

Key Decisions Made

  • Home region: US-Ashburn (permanent, cannot be changed)
  • Shape: VM.Standard.A1.Flex (ARM Ampere)
  • Target config: 4 OCPUs, 24GB RAM
  • Enabled IMDSv2 (more secure, prevents SSRF attacks on metadata endpoint)
  • On-demand capacity type (not preemptible/dedicated)
  • Created new VCN and public subnet with defaults
  • Using existing SSH key (not Oracle-generated)

Gotchas Learned

  • Home region is permanent - choose carefully based on ARM capacity
  • Idle reclamation - Oracle stops instances if CPU <20% (95th percentile) over 7 days, or memory <10% for ARM
  • Account inactivity - 30 days no login = suspension, another 30 = permanent deletion
  • Port 25 blocked - need support request for outbound email
  • Storage deleted at trial end - if over 20GB object storage limit
  • Limited to 2 VCNs
  • No downgrade from PAYG once upgraded

Upgrading to PAYG (Next Step)

The consensus fix for capacity issues. Benefits:

  • Idle instances no longer reclaimed
  • “Out of Capacity” errors become rare (often instant provisioning)
  • Still $0 for Always Free resources
  • Set up budget alerts as a safety net

Auto-Retry Tools (If Staying Free Tier)

Other Free/Cheap Options Explored

  • Free VMs: Oracle (best), GCP e2-micro, AWS t2.micro (12mo), Azure B1s (12mo)
  • Cheap VMs: Hetzner (2/mo), Vultr/DO/Linode
  • Free PaaS: Fly.io, Railway, Render, Cloudflare Workers, Vercel, Netlify
  • Free GPU: Google Colab, Kaggle (30hr/wk T4), Lightning.ai (22hr/mo)
  • Cheap GPU: Vast.ai, RunPod ($0.15-0.40/hr)

Status

Resolved 2026-06-23 — running obsidian-mcp micro as the always-on host for the remote Obsidian MCP. The path there was bumpy:

  1. First launched a VM.Standard.E2.1.Micro in AD-2 (the micro had capacity even though the 4-OCPU A1 never did). But it turned out the micro reports only ~498 MB RAM (half the advertised 1 GB), and dnf got OOM-killed installing Node — too small.
  2. Tried to pivot to an Ampere A1 (1 OCPU / 6 GB) for headroom. A1 was “Out of capacity” in all three Ashburn ADs (AD-1/2/3) — the same wall as April, still unresolved on Free Tier. Terminated that attempt.
  3. Fell back to the micro, mitigated: 2 GB swap + vm.swappiness=100, disabled the OCI agents (oracle-cloud-agent*) to reclaim RAM, and installed Node 22 from the static tarball instead of dnf (dnf’s metadata spike is what OOM’d; the steady-state MCP workload fits fine).

Current box: obsidian-mcp, VM.Standard.E2.1.Micro, Oracle Linux 9.7, AD-2, OCID ...chmz4h4q, public IP 141.148.64.97 (ephemeral), SSH user opc with the ed25519 key, VCN vcn-20260623-0006 + public regional subnet. Toolchain installed: git 2.52.0, Node 22.12.0 / npm 10.9.0, cloudflared 2026.6.1, uv 0.11.23.

Still on Free Tier. Two open items: (a) A1 needs PAYG to ever get capacity (your note’s documented fix; stays $0 for Always Free) if you want the 6 GB box later; (b) idle reclamation still applies (CPU <20% over 7 days) — PAYG also fixes that. Earlier “couldn’t get a GPU machine” memory was a misremember: the block was ARM CPU capacity, and no VM had actually launched until now.

Remaining (MCP wiring, not yet done): two-way git vault sync, run mcpvault + mcp-proxy + cloudflared as systemd units, and a Cloudflare service token (headless host can’t do the Google OAuth browser flow).