Get a free permanent ARM VPS (2 OCPU / 12 GB / 200 GB) on Oracle Cloud's Always-Free tier — without writing Terraform, without babysitting the "Out of Capacity" wall, with Telegram notifications on success.
- Status: Production-ready (June 2026)
- Region:
ap-singapore-1recommended for Southeast Asia - Cost:
$0/month— PAYG tier held but Always Free resources incur no charge - Limit model: Hours-budget (1,500 OCPU-h + 9,000 GB-h / month, equivalent to 2 OCPU / 12 GB 24/7)
- License: MIT (this toolkit) + MIT (vendored jitendhull) | GPL-3.0 fallback via Docker
- Last verified: 2026-06-18 against
rssnyder/oracle-cloud-free-tier-guide(June 16, 2026 comments),mosesman831/OCI-OcC-Fix,jitendhull/oracle-vps-script, andedunavajas.com(cross-checked; seedocs/SOURCES.md)
git clone https://github.com/Timcuan/Oracle-create-script-
cd Oracle-create-script-
sudo bash install.sh
# follow /opt/oracle-tools/README-timc.mdOracle Cloud's Always-Free tier offers a permanent ARM instance
(VM.Standard.A1.Flex) functionally equivalent to a $20-30/month
hosting plan. The catch: free capacity is so oversubscribed that manual
attempts to click Create instance fail with Out of host capacity
every time. The community has converged on three strategies:
- Manual retry loop in the browser (works, painful, I/O bound)
- Automated API retry against the OCI SDK (Python or Bash)
- Terraform via Oracle Resource Manager (most resilient)
This toolkit bundles #2 (jitendhull) as the primary path and
#3 (mosesman Python) via Docker as a fallback, wrapped behind one
install.sh and a config injector that enforces
"all-three-fields-filled-or-we-don't-run" safety.
Hetzner control plane (this repo installed here)
/opt/oracle-tools/
bin/inject-config.sh validate + sed
config/oracle-a1-stack.ini Master Timc edits
keys/oracle-arm-ed25519(.pub)
README-timc.md operator runbook
scripts/
jitendhull-oracle-arm.sh PRIMARY retry
mosesman-occ/ Python fallback
post-provision.sh harden new VM
venv-oci/ OCI CLI 3.87.0
logs/oracle_automation_v2.log
screen / tmux / nohup (24/7 unattended)
|
v OCI REST API + Resource Manager
Oracle Cloud tenant
PAYG tier confirmed via email
Region: ap-singapore-1
Resource Manager Stack (Terraform auto-generated)
ARM instance VM.Standard.A1.Flex (2 OCPU / 12 GB / 50 GB)
Public IP (ephemeral)
capacity hit
v
new ARM joins Tailnet 100.x.x.x
> Master Timc SSHs 100.x.x.x directly
See docs/ARCHITECTURE.md for the full breakdown.
When the bot reports success:
- Permanent ARM VPS —
$0/monthwithin Free Tier limits - 2 OCPU / 12 GB RAM / 50 GB disk within hours-budget envelope
- Public IP that survives reboots
- Tailscale-ready so the box joins your existing tailnet
- No payment processor drama — Oracle does instant
$93refunds on the PAYG upgrade hold - No manual babysitting —
screen+ exponential backoff = 24/7 - Telegram pings on capacity hit + rate-limit windows
git clone https://github.com/Timcuan/Oracle-create-script-
cd Oracle-create-script-
sudo bash install.shAfter install follow /opt/oracle-tools/README-timc.md — the
operator-facing runbook with nine numbered steps. The toolkit itself
doesn't automate Oracle signup (KYC + credit-card hold + real-name
verification) because that part genuinely requires a human in the loop.
| Need | Why |
|---|---|
| Real-name credit card | Oracle KYC rejects mismatches between cardholder name and account name. Country-restricted cards (IN 2026-02, parts of LATAM) get rejected. |
| Debit card | Sometimes works (~50/50). Credit is safer. |
| Browser with JavaScript | Oracle's console UI uses Forms; breaks in some headless browsers. |
| Telegram account | Real-time notifications on capacity hit. Free. |
| Tailscale (optional) | Lets new ARM join your existing tailnet for private SSH. |
| Control-plane host | Any Linux box works (Hetzner, Oracle E2 micro, laptop). Writes to /opt/oracle-tools/. |
| Python 3.10+ | Only needed for mosesman Python fallback (not Docker variant). |
| Docker (optional) | For mosesman via Docker — keeps MCP pollution off your host. Docker 29.5.3 verified. |
Short answer: NO. Oracle cut Always Free on 2026-06-15. See docs/RISK.md
for full audit; relevant quotes:
Oracle docs (2026-06-12): "All tenancies get the first 1,500 OCPU hours and 9,000 GB hours per month for free for VM instances using the VM.Standard.A1.Flex shape. For Always Free tenancies, this is equivalent to 2 OCPUs and 12 GB of memory."
Reddit r/oraclecloud (Upstairs-Bread-4545): "Free Tier Users will have their instance(s) shut down and PAYG User will get charged if they dont change their shape!"
Your realistic options for >2/12:
- Burst pattern — spin 4/24 (or 12/64) for short time, pay hourly
See
docs/FALLBACKS.mdF7 for full recipe + cost formula - Hetzner CAX31 (16 GB ARM) €17/month flat — predictable paid cost
- Stay at 2/12 24/7 — $0/month, fits the budget envelope
Oracle-create-script-/
+-- README.md (this file)
+-- LICENSE (MIT, this toolkit)
+-- LICENSE-MIT-jitendhull (vendored dependency)
+-- LICENSE-GPL-mosesman-ref (Docker-only reference)
+-- .gitignore
+-- install.sh (one-shot installer)
+-- lib/
| +-- inject-config.sh (validate + sed-inject)
| +-- post-provision.sh (harden new VM)
| +-- oracle-a1-stack.ini.template
| +-- README.md (lib-level notes)
+-- vendor/
| +-- jitendhull/
| +-- oracle_a1_automation-v2.sh (PRIMARY)
| +-- LICENSE-MIT
+-- docs/
| +-- SOURCES.md
| +-- RISK.md
| +-- DECISIONS.md
| +-- FALLBACKS.md
| +-- FAQ.md
+-- tests/
+-- smoke.sh (syntax + placeholder guards)
After install.sh completes:
- Open
https://signup.cloud.oracle.com/in a browser - Sign up with real-name + matching credit card
- After email verify, upgrade to Pay-as-you-go (still free within
tier limits —
$93hold, instant refund) - Follow steps 3-9 of
/opt/oracle-tools/README-timc.md - Telegram pings when capacity hit — your ARM is live
Two independent tools with different retry mechanics = strict
improvement over picking only one. If jitendhull hits oracle-cloud
rate limits hard, mosesman uses different OCI surface area. If both
fail, manual oci compute instance launch documented in
docs/FALLBACKS.md.
- Terraform wrapper as 3rd path
- Auto-failover when
STACK_IDauto-discovery returns nothing - Region rotation beyond SG / Sydney / Ashburn
- IPv6-only fallback when no public IPv4 available
- Hetzner-to-Oracle rsync backup recipes
- Docker Compose mode for mosesman
Issues and PRs welcome. Particularly:
- Region availability update for the current month
- Capacity edge cases you've hit
- Better back-off tuning for rate limits
Do not contribute:
- Real
STACK_IDs / OCI private keys / Telegram bot tokens (> CI scans.ini/.shfor accidental secrets; redact before PR) - Mining, scraping, or anything that violates Oracle ToS (> this toolkit will be DMCA'd if it encourages resource abuse)
This toolkit is a thin wrapper around:
jitendhull/oracle-vps-script— MIT, automated retry via OCI Resource Managermosesman831/OCI-OcC-Fix— GPL-3.0, Python direct-API retryrssnyder/oracle-cloud-free-tier-guide— community gist, June 2026 live statusedunavajas.com— onboarding blog, 2024-era tutorial
See docs/SOURCES.md for full citations, dates,
and divergence analysis.
MIT for the wrapper code. Vendored jitendhull script retains its MIT
license (see LICENSE-MIT-jitendhull). mosesman is referenced as a
Docker invocation only — host code does not link against it, so the
GPL does not propagate.
Copyright (c) 2026 Endymuhammad Bahtiar M.M. (Timcuan) and contributors.