适用于Tailscale+Portainer的OCI免费层虚拟机
前提条件
- OCI CLI配置在~/.OCI/config(默认配置文件或设置var OCI_config文件)
- 来自管理控制台的Tailscale身份验证密钥
布局
. ├── terraform.tf ├── providers.tf ├── variables.tf ├── 网络.tf ├── compute.tf ├── 输出.f ├── terraform.tfvars示例 └── 模板/ └── 云探测器
跑
地形模板检查 地形初始化 地形验证 地形平面图 地形适用
访问
- 应用后,等待云初始化:
cloud-init status --wait - 检查:
tailscale status - 入口:
https://:9443(到达尾标)
______________________________________________________________________
概述
提供一个只能通过Tailscale访问的OCI免费层ARM VM(A1.Flex)(零信任)。Cloud init引导Tailscale、Docker和Portainer CE(LTS)。只有当有较新的LTS映像可用时,夜间作业才会刷新Portainer。OCI中没有公开入口规则;SSH访问是通过Tailscale SSH进行的。
建筑
- VCN:10.0.0.0/16,公用子网10.0.1.0/24
- 互联网网关+路由表:出口到互联网进行软件包安装和Docker拉取
- 安全列表:允许所有人离开;无入口规则(仅通过Tailscale访问)
- 计算:Ubuntu 22.04开启
VM.Standard.A1.Flex默认配备1个OCPU和6GB RAM - 云初始化:安装Tailscale+Docker,启动Portainer CE LTS,配置无人值守升级和夜间刷新脚本
零信任模型
- 未创建OCI入口安全规则
- Tailscale提供安全访问和SSH(
tailscaled+tailscale up --ssh) - Portainer可通过9443上的Tailscale IP或MagicDNS名称访问
这部署了什么
- VCN、路由表、互联网网关、安全列表、子网
- 具有用于出站连接的公共IP分配的单个计算实例
- 云初始化:
- 安装Tailscale并使用您的身份验证密钥启动节点 - 安装Docker并启用服务 - 使用持久Docker卷运行Portainer CE(LTS) - 设置05:00自动重启窗口的无人值守安全升级(美国/芝加哥) - 安排每天04:10的检查,仅在图像发生更改时刷新Portainer
变量
看 variables.tf 和 terraform.tfvars.example 默认值和示例。
关于配置文件的说明\ 以下值在这些文件之间可以互换使用: -terraform.tfvars或secret.auto.tfvars(由Terraform使用) 更新这些值时,请确保它们在两个位置都匹配: -COMPARTMENT_OCID↔compartment_ocid-TAILSCALE_AUTH_KEY↔tailscale_auth_key-PROFILE↔oci_config_profile-REGION(用于脚本,映射到Terraform中的OCI提供者区域)
oci_config_profile(string):中的OCI CLI/SDK配置文件~/.oci/config(默认值:DEFAULT)compartment_ocid(字符串,必填):目标隔间OCIDinstance_display_name(string):实例名称(默认值:mcp-host)instance_shape(字符串):形状(默认值:VM.Standard.A1.Flex)ocpus(数字):A1 Flex的OCPU(默认值:1)memory_in_gbs(数字):A1 Flex的RAM(默认值:6)tailscale_auth_key(字符串,敏感,必填):Tailscale身份验证密钥image_ocid_override(string | null):固定一个特定的Ubuntu镜像OCID(默认值:null)ad_index(数字):可用性域索引(从0开始,默认值:0)
设置
- 确保您的OCI CLI配置在
~/.oci/config您的个人资料可用。 - 在Tailscale Admin中创建可重用的身份验证密钥(临时或可重用,如果需要,启用SSH)。
- 复制和编辑变量:
- cp terraform.tfvars.example terraform.tfvars - 填充 compartment_ocid 和 tailscale_auth_key。可选择调整形状/AD。
用法
Terraform工作流
terraform fmt -check
terraform init
terraform validate
terraform plan
terraform apply输出包括实例的公共/私有IP(注意:通过Tailscale访问)和一条简短的提示,提醒在哪里可以访问Portainer。
访问主机和门户
- 等待云初始化在首次启动时完成:
cloud-init status --wait - 在Tailscale Admin中或从其他节点验证节点是否存在:
tailscale status - SSH(通过Tailscale SSH):
ssh ubuntu@ - 门户用户界面:
https://:9443
首次访问时进行初始Portainer管理员设置。数据保存在 portainer_data Docker卷。
成本和限制
- 设计用于适应OCI免费等级
VM.Standard.A1.Flex配备1个OCPU/6GB RAM。您的租赁配额和区域可用性可能会有所不同。 - 根据使用情况,出站出口可能会产生带宽成本。
清理
要销毁此模块创建的所有资源,请执行以下操作:
terraform destroy故障排除
- 尾秤未连接:检查
sudo journalctl -u tailscaled -f并重新运行tailscale up如果需要的话。 - 云初始化日志:
/var/log/cloud-init.log和/var/log/cloud-init-output.log. - Portainer容器日志:
docker logs -f portainer. - 夜间刷新输出:
/var/log/portainer-refresh.log.
安全说明
- 未配置安全列表入口规则;访问权限仅限于Tailscale。
- 云初始化中启用了Tailscale SSH;通过Tailscale ACL和关键策略管理访问。
- 无人值守的安全更新是通过05:00的重新启动窗口启用的(美国/芝加哥)。如果需要,调整模板中的时区/cron。
