撸免费的oracle cloud服务器并使用脚本自动化部署云服务器
Oracle Cloud 免费套餐一直很吸引人,但真正麻烦的地方通常不是注册,而是热门区域经常在创建实例时直接返回 Out of host capacity。如果手工反复点控制台,很费时间,也不稳定。
这篇文章记录一个更实用的思路:先在控制台完成一次基础创建并把关键参数记下来,再用 oci-cli 或简单脚本自动重试创建实例,直到抢到可用资源。
本人环境centos,ubuntu有所不同,自己根据环境可能需要更换某些环境相关参数。
开始前先确认
- 你的 Oracle Cloud 账号已经通过审核
- 已经在控制台成功创建过至少一次实例,方便提取参数
- 你准备好了自己的 SSH 公钥,不要直接使用示例值
必要条件:
- 手机号
- 信用卡
前2天一张信用卡可以注册多个账号,被mjj们注册的有点多。现在只能一张信用卡注册一个了。
现在好像中国地区的卡都被限制了,奉劝各位mjj适可而止0-0。
我这就弄了一个韩国的号而已。。。不要冤枉我。
收获云资源
- 2 个 Autonomous Database (自主数据仓库或自主事务处理),每个 Autonomous Database 都有 1 个 OCPU 和 20 GB 存储资源;
- 2 个 Compute VM,每个 Compute VM 有 1/8 OCPU 和 1 GB 内存;
- 2 个 Block Volumes,总共 100 GB,最多 5 个免费备份;
- 10 GB Object Storage、10 GB Archive Storage 和每月 50000 个 API 请求;
- 1 个 Load Balancer,10 Mbps 带宽;
- 每月 10 TB 的出站数据传输;
- 5 亿个摄取数据点和 10 亿个服务监测数据点;
- 每月传递 100 万个通知的选项和每月 1000 封电子邮件。
主要步骤
- 注册oracle cloud账号
- 建立第一个服务器并记录信息
- 下载安装oci-cli命令行管理工具
- 配置oci-cli账号信息,添加api key
- 使用cli-cli命令自动化脚建立服务器
- 使用cli命令自动化脚建立arm服务器
这篇文章最适合什么场景
如果你符合下面任一情况,这套方法就很实用:
- 免费区域经常抢不到机器,需要自动重试
- 想用 CLI 固化实例创建流程,而不是每次手工点控制台
- 想把 ARM 机型也纳入自动化尝试流程
1. 注册oracle cloud账号
首先进入 oracle官网,
开始注册,填写邮箱
地址
手机号,需要接受验证码
信用卡,需要扣费验证
注册完成
按提示一步一步填写自己的内容,推荐使用gmail邮箱。我这里使用的是美国的一个地址,没有可以网上生成,这里由于我注册过了,所以拒绝,如果没注册过就能过。
等待自动跳转到主页注册就完成了。注册过后查看邮箱,会有邮件
提示正在review,一天过后再收到邮件就是成功了。

2. 建立第一个服务器并记录信息
推荐使用chrome谷歌浏览器打开邮件里面的链接。进入控制台
从
进入
创建第一个永久免费服务器信息
右键网页打开chrome控制台,提交
在网络请求中找到instances请求并查看headers详情
找到如下信息并记录
- availabilityDomain #跟地区相关,我是韩国
- compartmentId # 账号相关
- subnetId #子网络
- shape #服务器类型,永久免费为VM.Standard.E2.1.Micro,可以不变
- ssh_authorized_keys #这个是服务器的公钥文件
- imageId #这是系统类型
另外需要用户ocid信息,首先进入用户页面
右上角点击进入查看tenancy ocid。

用小本本记录下这些信息,后面要用。
3. 下载安装oci命令行管理工具
直接上命令
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
一路回车就好了,结束使用下面命令查看安装是否成功
oci -v

4. 配置cli账号信息,添加api key
oci setup config
接下来需要把公共秘钥传到控制台,回到浏览器,同样进入用户界面查看

添加好后就可以来看看oci命令行工具行不行了。
oci iam availability-domain list
查看配置文件是否正确
如果没有报错说明配置成功。
如何确认 CLI 环境已经可用
建议至少验证下面两步:
oci -v
oci iam availability-domain list
如果版本能正常输出,且可用区查询没有认证错误,说明本地 CLI、配置文件和 API Key 基本都已经联通。
5. 使用cli命令自动化脚建立服务器
前面已经配置好了cli,这里就可以使用命令来尝试建立云计算服务器了。
oci compute instance launch --availability-domain JCbl:AP-SEOUL-1-AD-1 --display-name seoul1 --image-id ocid1.image.oc1.ap-seoul-1.aaaaaaaa4e3nhzytej7iwr4qh6aov3d5yxswfek7wzjyd2tpaqtlwt3kmqta --subnet-id ocid1.subnet.oc1.ap-seoul-1.aaaaaaaa... --shape VM.Standard.E2.1.Micro --assign-public-ip true --metadata '{"ssh_authorized_keys": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+Sk1M9GX6AOoI1RtK33zaltsuSIGofdtI0sT9YqULEP0zSvrHPh8TEWY7XQdz1TbWcXLG7V0YNZgzUMEr6khI4zRygCU8N5OYX/M3VH36FddD0Jr6HiEkHTECVYdxxvJ7Lq8iCe5VP9IfomphjWTVZfml+jX0deR6gHY3MVblEnwLdhxT61aLOUe8Q1P3m6SWjukpSl9Wk/rf96YQIyw23+lWILWw9TkEhJOXwwV89nvlM11jN4fjh1yl1ax+yRl4BsMfRUrfT8CZ+OhR8qZILKPhsY8ehOZs8TbbWU8G55y/PJS8WjhhP3I0BpETazMZWuY41 zhang"}' --compartment-id ocid1.tenancy.oc1...
这里几个参数多是前面用小本本记录下来的信息
- availability-domain #有记录
- display-name #云服务器名称,随意,最好不要加这个参数,不然只能创建一个,第二个时名字一样了
- image-id # 前面有记录,我这是centos7的
- subnet-id #前面有记录
- shape #永久免费就是这一款VM.Standard.E2.1.Micro
- assign-public-ip true #是否需要公网ip,当然是true
- metadata #这里就是添加了一个免登录秘钥,改成你自己的就行
- compartment-id #前面有记录
运行命令,如果一会儿有输出的话那么就没问题了,接下来就可以定时执行命令创建云服务器了。
使用crontab定时执行,第二天再来查看是否创建成功就可以了。
首先把命令写成oci.sh的bash脚本
alias ic="ibmcloud"
export PATH=/root/bin:$PATH
#如果你们的bash环境下直接下面这句没报错,只用这一句也是ok的
#上面这些主要是加入你们默认shell的内容,防止出现跟系统环境有关的错误,可改为source /root/.bashrc,这里.bashrc为你们的默认shell
oci compute instance launch --availability-domain JCbl:AP-SEOUL-1-AD-1 --image-id ocid1.image.oc1.ap-seoul-1.aaaaaaaa4e3nhzytej7iwr4qh6aov3d5yxswfek7wzjyd2tpaqtlwt3kmqta --subnet-id ocid1.subnet.oc1.ap-seoul-1.aaaaaaaa... --shape VM.Standard.E2.1.Micro --assign-public-ip true --metadata '{"ssh_authorized_keys": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+Sk1M9GX6AOoI1RtK33zaltsuSIGofdtI0sT9YqULEP0zSvrHPh8TEWY7XQdz1TbWcXLG7V0YNZgzUMEr6khI4zRygCU8N5OYX/M3VH36FddD0Jr6HiEkHTECVYdxxvJ7Lq8iCe5VP9IfomphjWTVZfml+jX0deR6gHY3MVblEnwLdhxT61aLOUe8Q1P3m6SWjukpSl9Wk/rf96YQIyw23+lWILWw9TkEhJOXwwV89nvlM11jN4fjh1yl1ax+yRl4BsMfRUrfT8CZ+OhR8qZILKPhsY8ehOZs8TbbWU8G55y/PJS8WjhhP3I0BpETazMZWuY41 zhang"}' --compartment-id ocid1.tenancy.oc1...
然后用定时任务每分钟请求部署免费机器一次
crontab -e
#
#* * * * * /bin/bash /root/oci.sh >> /root/oracle.log 2>&1
#根据需要更改
#我这里是每1分钟执行一次。,让他自动刷可用的机器,建议也是1分钟一次,多了会报错,请求太多
要实时显示刷的信息,可以使用下面命令查看(不推荐)
tail -F /root/oracle.log
由于后面oracle把韩国区的机子取消了,会出现以下错误,请无视,继续添加有机器会自动刷到
ServiceError:
{
"code": "**",
"message": "Out of host capacity.",
"opc-request-id": "***6646B193854ED4671EE408/C804B0F793A70D6D32665B4262C4AF8F/CDB0E9ED6E992F4E989FBFF765B886A1",
"status": 500
}
现在韩国区又重上了免费鸡,没有机器的时候出现500就对了。
常见问题
1. 一直报 Out of host capacity
这通常不是脚本错了,而是目标区域确实暂时没有资源。优先确认:
shape是否仍在免费范围内- 区域是否正确
- 账号本身是否已经达到免费实例数量上限
2. oci 命令能安装,但调用时报认证错误
一般是配置文件、tenancy OCID、user OCID、fingerprint 或 API key 上传环节有问题,先回头检查 oci setup config 的输入值。
3. ARM 命令一直失败
先确认你所在区域是否真的开放了对应的 VM.Standard.A1.Flex 资源,以及 shape-config 参数是否符合当前限制。
6. 使用cli命令自动化脚建立arm服务器
最近oracle新上了arm的机器,官网描述
4 Arm-based Ampere A1 cores and 24 GB of memory usable as one VM or up to 4 VMs.
arm机器性能比较强,且可以配置4核24g内存,自然是首选 机器一出就遭mjj疯抢,一度十分火爆,使用程序自动自然是必不可少的了 这里我是东京的主区域,首先删除所有的服务器,存储卷等等,做到干干净净。然后再来运行 配置部分完全一样,不同的仅仅是最终的创建服务器的命令参数变化而已,这里用python采用循环方式获取,就不用crontab了,代码如下,这里采用ubuntu20操作系统用于后续方便dd。
#!/usr/bin/env python
from subprocess import Popen,run,PIPE
cmd = '''
oci compute instance launch --availability-domain NFWU:AP-TOKYO-1-AD-1 --display-name ja_arm --image-id ocid1.image.oc1.ap-tokyo-1.aa... --subnet-id ocid1.subnet.oc1.ap-tokyo-1.aaaaa... --shape VM.Standard.A1.Flex --assign-public-ip false --compartment-id ocid1.tenancy.oc1..aaaaaaaauyhx7xy... --shape-config '{"ocpus":4,"memory_in_gbs":24,"local_disks":200}' --metadata '{"ssh_authorized_keys": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+Sk1M9GX6AOoI1RtK33zaltsuSIGofdtI0sT9YqULEP0zSvrHPh8TEWY7XQdz1TbWcXLG7V0YNZgzUMEr6khI4zRygCU8N5OYX/M3VH36FddD0Jr6HiEkHTECVYdxxvJ7Lq8iCe5VP9IfomphjWTVZfml+jX0deR6gHY3MVblEnwLdhxT61aLOUe8Q1P3m6SWjukpSl9Wk/rf96YQIyw23+lWILWw9TkEhJOXwwV89nvlM11jN4fjh1yl1ax+yRl4BsMfRUrfT8CZ+OhR8qZILKPhsY8ehOZs8TbbWU8G55y/PJS8WjhhP3I0BpETazMZWuY41JJqKDp77YU6GwNH t@te"}'
'''
import time
while True:
a = Popen(cmd,shell=True,stdout=PIPE,stderr=PIPE,encoding="utf-8")
res = a.communicate()[1]
if 'LimitExceeded' in res:
print(u"脚本配置失败或者已经成功创建机器")
break
time.sleep(10)
成功后就可以自己去添加ipv4,ipv6了,折腾其他的。 这里刷了2天才创建成功东京的4c24g机器。。耐心等脚本成功吧。
延伸阅读
总结
到这就全部结束了,本文从注册oracle cloud(甲骨文云)开始,到尝试建立vm云服务器,最后从oci命令行工具和rest api中选择了oci来自动创建永久免费服务器,最后使用linux中的crontab定时任务来重复执行创建流程,达到全自动化挂机。最终达到可以在大陆用户热门地区比如韩国和日本创建终身免费服务器的目的。这里更新arm机器,性能非常强悍。如有问题,可邮件联系博主(如果仔细看过的话应该找得到邮箱,嘿嘿)。
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/612.html
- 版权声明:本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。