python-digitalocean:用 Python 管理 DigitalOcean 云资源

koalalorenzo/python-digitalocean 在 GitHub 上已经拿到 1,283 Star。

这是一个 Python 库,封装了 DigitalOcean 的完整 API。创建 Droplet、管理域名、配置防火墙、分配浮动 IP,全部可以用几行 Python 代码完成。

正文顶部截图

1、这库是干嘛的

DigitalOcean 是常见的云服务器提供商。如果你需要频繁操作 Droplet、镜像、域名等资源,每次打开网页点按钮效率太低。这个库把所有操作都变成了 Python 对象的方法调用。

核心就一个 Manager 类。拿到 token 之后,所有的资源操作都从这里发起。你不需要手写 HTTP 请求,也不用处理 JSON 响应,返回值直接是 Python 对象,带属性和方法。

2、能管理哪些东西

覆盖 DigitalOcean 的主要资源类型:

  • Droplet:创建、删除、开关机、重启、快照、调整配置
  • 镜像:获取用户私有镜像和公共镜像
  • 项目:列出项目、分配资源到项目
  • 标签:创建标签、给 Droplet 打标签、按标签筛选
  • 浮动 IP:创建和释放保留 IP
  • 防火墙:配置入站出站规则、绑定到特定 Droplet
  • 域名和记录:列出域名、增删改 DNS 记录
  • SSH 密钥:上传公钥到账户、创建 Droplet 时自动注入

README区域截图

3、安装和配置

一行命令安装:

pip install -U python-digitalocean

配置通过环境变量:

export DIGITALOCEAN_ACCESS_TOKEN='your_token_here'

也可以直接在代码里传 token:

import digitalocean
manager = digitalocean.Manager(token="your_token")

API 端点也可以自定义,通过 DIGITALOCEAN_END_POINT 环境变量指向其他地址。

4、典型用法示例

列出所有 Droplet:

my_droplets = manager.get_all_droplets()

按标签筛选 Droplet:

my_droplets = manager.get_all_droplets(tag_name="production")

创建一个 Droplet:

droplet = digitalocean.Droplet(
    token="your_token",
    name='Example',
    region='nyc2',
    image='ubuntu-20-04-x64',
    size_slug='s-1vcpu-1gb',
    backups=True
)
droplet.create()

批量关机:

for droplet in my_droplets:
    droplet.shutdown()

给 Droplet 加标签:

tag = digitalocean.Tag(token="your_token", name="production")
tag.create()
tag.add_droplets(["DROPLET_ID"])

配置防火墙:

from digitalocean import Firewall, InboundRule, OutboundRule, Sources, Destinations

inbound = InboundRule(protocol="tcp", ports="80",
    sources=Sources(load_balancer_uids=["..."]))
outbound = OutboundRule(protocol="tcp", ports="all",
    destinations=Destinations(addresses=["0.0.0.0/0", "::/0"]))

firewall = Firewall(token="your_token", name="web-firewall",
    inbound_rules=[inbound], outbound_rules=[outbound],
    droplet_ids=[12345, 12346])
firewall.create()

上传 SSH 密钥:

from digitalocean import SSHKey
user_key = open('/home/user/.ssh/id_rsa.pub').read()
key = SSHKey(token='your_token', name='my-server', public_key=user_key)
key.create()

创建 Droplet 时自动关联所有 SSH 密钥:

keys = manager.get_all_sshkeys()
droplet = digitalocean.Droplet(token="your_token", name='NewServer',
    region='ams3', image='ubuntu-20-04-x64', size_slug='s-1vcpu-1gb',
    ssh_keys=keys, backups=False)
droplet.create()

5、高级功能

HTTP 会话可以自定义。比如加失败重试:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

retry = Retry(connect=3)
adapter = HTTPAdapter(max_retries=retry)
manager._session.mount('https://', adapter)

也可以注册响应钩子,在特定状态码时触发自定义逻辑。

API 限流信息也会自动返回,可以通过 manager.ratelimit_remaining 查看剩余配额,ratelimit_reset 查看重置时间。

6、适合哪些人

  • 用 DigitalOcean 托管服务、需要批量管理资源的开发者
  • 写自动化脚本、需要程序化操作云基础设施的运维人员
  • 在做基础设施即代码、想把 DigitalOcean 资源纳入 Python 工作流的团队
  • 需要定时开关机、自动快照、批量配置防火墙等场景

6、适合哪些人

  • 用 DigitalOcean 托管服务、需要批量管理资源的开发者
  • 写自动化脚本、需要程序化操作云基础设施的运维人员
  • 在做基础设施即代码、想把 DigitalOcean 资源纳入 Python 工作流的团队
  • 需要定时开关机、自动快照、批量配置防火墙等场景
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐