🎯 一句话总结:Oracle Cloud提供永久免费ARM云服务器(4核24GB+200GB+10TB/月),注册需信用卡验证,手动创建99%提示容量不足,需通过API脚本24小时自动抢。

Oracle Cloud免费VPS配置


📌 永久免费额度

Oracle的Always Free是资源永不到期,只要账号活跃就不回收。新注册还附赠 $300 试用额度(30天有效),可测试所有OCI服务。

Oracle Cloud免费额度详情

ARM实例(Ampere A1.Flex)

资源项免费额度
OCPU4核(ARM64/aarch64)
内存24GB
存储200GB引导卷(与AMD共享)
流量每月10TB出口
实例数最多4台,自由分配OCPU/内存

4核24G可拆分为1台4C24G / 2台2C12G / 4台1C6G等任意组合。

AMD实例(VM.Standard.E2.1.Micro)

资源项免费额度
规格1/8 OCPU + 1GB内存
数量最多2台

最优组合:1台ARM 4C24G + 2台AMD 1/8C1G = 3台永久免费服务器


📝 注册账号

注册地址:oracle.com/cn/cloud/free/

以下环节直接影响注册成功率。

Home Region主区域

选定后不可更改。 决定后续所有资源的物理位置。

Oracle Cloud区域选择

区域示例创建难度延迟
亚太热门东京、首尔、新加坡⭐⭐⭐⭐
亚太冷门孟买、悉尼⭐⭐
北美凤凰城、圣何塞
欧洲伦敦、法兰克福⭐⭐

2026年5月实测:新加坡ARM资源几乎时刻满载。不在意延迟的话,凤凰城或伦敦是最好的选择。

地址填写

必须用英文,且地址、IP、信用卡账单地址三者一致。

英文地址填写示例

  • 地址行用英文:No.123 Tianhe Road, Tianhe District
  • 城市用拼音:Guangzhou
  • 三者差异过大 → 报ABC错误(Abnormal Billing Cycle)

信用卡验证

信用卡验证

绑卡时会收到扣款通知和失败通知(不会真正扣费)。2026年4月实测招商银行Visa / 建设银行Visa均可通过。

⚠️ 虚拟卡 / 预付卡基本都过不了认证,建议使用实体信用卡或双币借记卡。


⚙️ API密钥配置

注册完成、不要指望手动创建能成功——99%会报Out of host capacity。需要通过OCI API定时发送创建请求。

1. 生成API Key

登录控制台 → 右上角点头像 → My Profile → 左侧 API KeysAdd API Key

  1. 选择 Generate API Key Pair(一键生成)
  2. 下载.pem私钥文件
  3. 复制页面显示的config预览(user、fingerprint、tenancy、region)

⚠️ API Key和SSH Key是两样东西:SSH Key用来登录服务器,API Key用来调创建接口。

2. 配置文件

pip3 install oci
mkdir -p ~/oracle-arm
chmod 700 ~/oracle-arm
mv /path/to/oci_api_key.pem ~/oracle-arm/oci_api_key.pem
chmod 600 ~/oracle-arm/oci_api_key.pem

创建~/oracle-arm/config(替换为你的OCID和fingerprint):

[DEFAULT]
user=ocid1.user.oc1...(你的user OCID)
fingerprint=XX:XX:XX:XX:XX:XX...(页面显示的fingerprint)
tenancy=ocid1.tenancy.oc1...(你的tenancy OCID)
region=ap-singapore-1(你的Home Region)
key_file=/root/oracle-arm/oci_api_key.pem

3. 获取必要OCID

参数获取方式
Compartment IDIdentity & Security → Compartments → 复制root compartment OCID
Subnet IDNetworking → VCN → 点进Public Subnet → 复制OCID
Image ID用脚本查询(见下方)
ADCompute → Create Instance → Placement栏显示

没有VCN的话:左上角Start VCN WizardCreate VCN with Internet Connectivity → 默认配置创建。

4. 查询Ubuntu ARM镜像ID

必须用Ubuntu 22.04 aarch64,24.04有ARM兼容性问题:

import oci
config = oci.config.from_file("~/oracle-arm/config")
compute = oci.core.ComputeClient(config)

images = compute.list_images(
    compartment_id=config["tenancy"],
    operating_system="Canonical Ubuntu",
    operating_system_version="22.04",
    shape="VM.Standard.A1.Flex",
    sort_by="TIMECREATED",
    limit=3
).data

for img in images:
    print(f"{img.display_name} | {img.id}")
# 选最新的Canonical-Ubuntu-22.04-aarch64-...镜像ID

🤖 自动抢购脚本

完整脚本

创建~/oracle-arm/grab.py

#!/usr/bin/env python3
import oci, time, random, sys, signal
from datetime import datetime

CONFIG = "/root/oracle-arm/config"
COMPARTMENT = "你的compartment OCID"
SUBNET = "你的subnet OCID"
IMAGE = "你的Ubuntu 22.04 aarch64镜像OCID"
ADS = ["xxxx:REGION-AD-1"]          # 新加坡只有一个AD,其他区域可能有多个
NAME, OCPUS, MEM, VOL = "arm-free-1", 4, 24, 50
SSH_KEY = "ssh-rsa AAAA... 你的SSH公钥"
INTERVAL = (30, 60)               # 秒,避免429限流

def log(msg):
    print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {msg}", flush=True)

def handler(sig, frame):
    log("Signal received, exiting")
    sys.exit(0)
signal.signal(signal.SIGTERM, handler)

def main():
    cfg = oci.config.from_file(CONFIG)
    client = oci.core.ComputeClient(cfg)
    client.base_client.timeout = (10, 30)
    n = 0
    while True:
        n += 1
        ad = ADS[0]
        log(f"Attempt {n} | AD: {ad}")
        try:
            resp = client.launch_instance(oci.core.models.LaunchInstanceDetails(
                compartment_id=COMPARTMENT,
                availability_domain=ad,
                display_name=NAME,
                shape="VM.Standard.A1.Flex",
                shape_config=oci.core.models.LaunchInstanceShapeConfigDetails(
                    ocpus=OCPUS, memory_in_gbs=MEM),
                source_details=oci.core.models.InstanceSourceViaImageDetails(
                    source_type="image", image_id=IMAGE,
                    boot_volume_size_in_gbs=VOL),
                create_vnic_details=oci.core.models.CreateVnicDetails(
                    subnet_id=SUBNET, assign_public_ip=True),
                metadata={"ssh_authorized_keys": SSH_KEY}))
            log(f"SUCCESS! ID: {resp.data.id}")
            sys.exit(0)
        except oci.exceptions.ServiceError as e:
            msg, code = str(e.message), str(e.code)
            if "Out of host capacity" in msg:
                log(f"Capacity full (status={e.status})")
            elif e.status == 429:
                log("Rate limited, wait 120s")
                time.sleep(120); continue
            elif "LimitExceeded" in code:
                log(f"Limit reached! {code}"); sys.exit(1)
            else:
                log(f"Error: {e.status} {code} {msg[:100]}")
        except Exception as e:
            log(f"Unknown: {type(e).__name__} {str(e)[:100]}")
        w = random.randint(*INTERVAL)
        log(f"Wait {w}s"); time.sleep(w)

if __name__ == "__main__":
    log("Starting Oracle ARM grab script")
    main()

后台运行

cd ~/oracle-arm
nohup python3 -u grab.py > grab.log 2>&1 &
tail -f grab.log

日志示例:

[2026-05-13 09:46:56] Starting Oracle ARM grab script
[2026-05-13 09:46:56] Attempt 1 | AD: MlGb:AP-SINGAPORE-1-AD-1
[2026-05-13 09:46:57] Capacity full (status=500)
[2026-05-13 09:46:57] Wait 57s

⚠️ 必须用nohuptmux运行,SSH断开会杀死进程。服务器重启需手动重新nohup。


💣 实测避坑

新加坡区域的容量问题

实测数据:连续运行15分钟,每30~60秒一次请求,所有返回均为500 Out of host capacity。新加坡ARM资源极少,2026年竞争更加激烈。

不急就继续跑;想快速上线:注册时选冷门区域(凤凰城/蒙特利尔/伦敦),升级为Pay As You Go不会自动扣费但能提高优先级。

Fingerprint必须与PEM匹配

上传PEM后,config里的fingerprint必须与PEM计算结果一致:

from cryptography.hazmat.primitives.serialization import load_pem_private_key, Encoding, PublicFormat
import hashlib

with open("oci_api_key.pem", "rb") as f:
    key = load_pem_private_key(f.read(), password=None)
pub = key.public_key().public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo)
fp = ":".join(hashlib.md5(pub).hexdigest()[i:i+2] for i in range(0, 32, 2))
print(f"fingerprint: {fp}")

不一致 → 401 NotAuthenticated。

Ubuntu版本别选24.04

24.04 aarch64与ARM实例存在兼容性问题(网络驱动/内核模块不匹配)。用22.04。

免费额度别超

上限4 OCPU + 24 GB,超过报LimitExceeded。可建4台1C6G,但不能多台4C24G。

SSH连接

ssh -i oci_api_key.pem ubuntu@<公网IP>

默认只开22端口,其他端口需VCN → Security Lists → Add Ingress Rules。


❓ FAQ

Q: "Out of host capacity"什么意思? A: 该区域/可用域没有空闲ARM资源。用脚本持续重试,有人释放就能抢到。

Q: 429错误怎么办? A: 请求太频繁被限流。把间隔调大(脚本已自动处理120秒冷却)。

Q: 抢到后会被回收吗? A: Always Free资源原则上永久,但CPU连续7天<10%可能被回收。保持一定使用率。

Q: 跑了一周都没结果正常吗? A: 正常。热门区域经常数月无空闲资源。建议冷门区域注册,抢到后升级Pay As You Go提高优先级。

Q: 升级Pay As You Go会扣费吗? A: 不会。Always Free资源仍然免费,付费账号的优势是更高优先级。


参考:Oracle Cloud Free Tier · OCI文档 · 脚本源码