Hetzner Server Management 是使用 hcloud CLI 创建和管理 Hetzner Cloud 服务器的技能。
前置条件 需要安装 hcloud CLI(可经由 mise 安装,配置为 hcloud = "latest"),并完成认证:使用来自 https://console.hetzner.cloud 的 API token 执行 hcloud context create <name>。
云防火墙(Cloud Firewalls) 防火墙是创建服务器时可应用的可复用配置文件,也可在运行中的服务器上切换,使用 apply-to-resource / remove-from-resource。资料列出三种防火墙配置:ts-ssh,规则为 UDP 41641(Tailscale)+ TCP 22(SSH),用于开发机初始设置,之后可切换为 ts-only;ts-only,规则为 UDP 41641(Tailscale),仅 Tailscale 访问,无公开端口;ts-web,规则为 UDP 41641(Tailscale)+ TCP 80,443(HTTP/S),用于接受公开 Web 流量的服务器。在运行中切换防火墙的命令示例:先 hcloud firewall remove-from-resource ts-ssh --type server --server dev,再 hcloud firewall apply-to-resource ts-only --type server --server dev。
快速参考:创建服务器 资料给出多种创建命令。优先 ARM(性价比最佳):hcloud server create --name dev --type cax21 --image ubuntu-24.04 --location nbg1 --ssh-key connorads --ssh-key connor@penguin --firewall ts-ssh。x86 回退方案将 --type 换成 cpx21。仅 IPv6 方案(可省约 $0.60/月的 IPv4 费用)在上述命令后加 --without-ipv4。使用 user-data 自动运行安装脚本时,建议用 heredoc,因为进程替换 <(echo '...') 会错误转义 shebang;示例中通过 --user-data-from-file - 传入脚本,内容为 curl -fsSL https://raw.githubusercontent.com/connorads/dotfiles/master/install.sh | bash。dotfiles 安装约需 5 分钟,可用 ssh connor@$(hcloud server ip dev) 配合 cloud-init status、journalctl -u cloud-final -n 50 --no-pager、journalctl -u cloud-final -f 等方式查看进度,或用 which zsh mise && echo $SHELL 检查工具是否安装。
交换分区(swap) Ubuntu cloud 镜像默认不含 swap。可在创建时通过 cloud-init 添加,示例为 16GB swap(16GB RAM 服务器按 1:1 比例)。资料建议的 swap 大小:4GB RAM → 4-8GB swap;8GB RAM → 8GB swap;16GB+ RAM → 16GB swap(1:1 比例)。也可对已有服务器添加 swap:执行 fallocate -l 16G /swapfile、chmod 600、mkswap、swapon,并写入 /etc/fstab,最后用 free -h 验证。
常用命令 hcloud server list 列出服务器;hcloud server ip dev 获取 IP;ssh connor@$(hcloud server ip dev) 登录;hcloud server delete dev 删除;电源操作包括 poweroff、poweron、reboot;hcloud server rebuild dev --image ubuntu-24.04 可重装系统并保留 IP。
服务器类型(常用) 资料列出 EU 区域(美国区域约贵 20%)的参考价格与配置:cax11(ARM,2 vCPU,4GB RAM,40GB 磁盘,约 $4.50/月)、cax21(ARM,4 vCPU,8GB RAM,80GB,约 $8/月)、cax31(ARM,8 vCPU,16GB RAM,160GB,约 $16/月)、cpx21(x86,3 vCPU,4GB RAM,80GB,约 $9/月)、cpx31(x86,4 vCPU,8GB RAM,160GB,约 $18/月)。完整列表可用 hcloud server-type list。
位置 资料列出:fsn1(Falkenstein,DE)、nbg1(Nuremberg,DE)、hel1(Helsinki,FI)、ash(Ashburn,US)、hil(Hillsboro,US)、sin(Singapore,SG)。
SSH 密钥与镜像 hcloud ssh-key list 列出密钥;hcloud ssh-key create --name mykey --public-key-from-file ~/.ssh/id_ed25519.pub 添加密钥。hcloud image list --type system 列出系统镜像,加 --architecture arm 可筛选 ARM 镜像。
克隆 GitHub 仓库(SSH agent forwarding) 使用 <name>-agent SSH 主机(已启用 agent forwarding)克隆私有仓库,无需把密钥复制到服务器。若遇主机密钥错误,先添加 GitHub 主机密钥:ssh dev "ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null";用 ssh dev-agent "ssh-add -l" 确认 agent 可见;克隆时使用 -agent 后缀,例如 ssh dev-agent "mkdir -p ~/git && cd ~/git && git clone git@github.com:you/repo.git",也可在克隆后 checkout 指定分支,或进行 push/pull;交互式会话(如 lazygit)可先 ssh dev-agent 再操作。
创建后设置 创建服务器后,建议清除该 IP 的旧主机密钥(Hetzner 会复用 IP):ssh-keygen -R $(hcloud server ip dev) 2>/dev/null 和 ssh-keyscan $(hcloud server ip dev) >> ~/.ssh/known_hosts 2>/dev/null。然后生成/更新 SSH 配置:hcssh 更新 ~/.ssh/config 中的所有 Hetzner 服务器,hcssh --dry-run 可预览。每个服务器会在托管块(# BEGIN/END hetzner-managed)内创建两个 Host 条目:<name>(无 agent forwarding,对 AI agent 安全)和 <name>-agent(启用 agent forwarding,用于向 GitHub push/pull)。创建或删除服务器后再次运行 hcssh 以保持配置同步,这也能让 VS Code Remote-SSH 在下拉框中显示服务器。
可选:仅允许 Tailscale SSH 执行 ts up 并确认可通过 Tailscale SSH(ts ssh connor@dev)后,在服务器上运行 tsonlyssh 从 UFW 移除公开 22 端口,使 SSH 仅通过 Tailscale 接口可访问。若被锁定,可回退到 Hetzner Cloud Console VNC。
注意事项 ARM(cax*)服务器在开发工作中性价比最佳;仅 IPv6 可省钱,但从 IPv4 网络访问需要 Tailscale/cloudflared;user-data 在首次启动时以 root 运行;dotfiles 的 install.sh 负责创建用户 connor,并安装 Nix、home-manager 和 mise 工具。