跳转至

国内云开发主机标准配置

适用范围

用于一台 Ubuntu 国内云主机,角色固定为多电脑共享开发主机、Tailscale 内网管理入口和受控开发预览入口。

本文只覆盖开发工作区与开发环境,不覆盖长期运行服务目录、Portainer 编排和 /opt/infra 运行面;Tailscale 接入方式仅约定“沿用既有 Docker 版方案”。

目标状态

系统

Ubuntu LTS,时区 Asia/Shanghai,主机名建议 cn-bce-dev-01,仅保留一个日常登录用户 <dev-user> 并授予 sudo。本机按个人开发主机处理,日常用户允许 sudo NOPASSWD

SSH

公网仅开放 22/tcp,只允许密钥登录,禁止 root 直登,只允许指定用户登录。推荐 sshd_config 关键项:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
KbdInteractiveAuthentication no
X11Forwarding no
AllowUsers <dev-user>

防火墙

使用 ufw,默认 deny incomingallow outgoing。基础规则放行 22/tcp41641/udp80/tcp443/tcp 仅在启用 dev 预览时放行。

Tailscale

必须加入 tailnet,与其他服务器优先走 Tailscale 地址通信。本机 Tailscale 接入方式默认沿用既有 infra 体系,即 Docker 版 Tailscale。

顺序约定: - 先配置 ufw 基础规则并确保 SSH 不会断连 - 再准备 Docker 与 /opt/infra/bootstrap - 按既有方案写入 docker-compose.yml 并启动 Tailscale 容器 - Tailscale 接入成功后,再补 tailscale0 放行规则

DERP 约定: - 本机不把自建 DERP 作为首轮必做项 - 先优先验证是否能稳定直连 - 只有在频繁走 relay 且延迟明显偏高时,再单独评估是否补国内 DERP

目录

/srv/workspace        # 代码工作区
/srv/devtools         # 开发脚本与工具
/opt/infra/bootstrap  # 既有 Docker 版 Tailscale 启动目录

项目目录统一为:

/srv/workspace/<project-name>

开发工具

基础包最小集:gitcurltmuxzshhtopufwfail2ban

容器层:安装 dockerdocker compose,但只用于依赖服务、镜像验证和最小复现,不作为所有项目的默认长期开发环境,也不作为本机运行面的统一管理入口。

Docker 防火墙增强: - 本机默认不把 ufw-docker 作为首轮初始化必装项 - 如果后续频繁使用 docker -p、开发预览端口或长期运行的本机容器,再单独启用 ufw-docker - 在此之前,开发容器尽量只绑定 127.0.0.1

Docker 出网补救: - 如果开发机直连 docker.io 不稳定,优先给 Docker daemon 单独配置本地代理 - 不默认把整机流量全局代理化 - 当前可接受做法是在本机启动 sing-box,监听 127.0.0.1:7890,再让 Docker 仅通过该端口出网

语言环境采用“系统层轻、项目层隔离”: - Python 底座保留 python3python3-venvpipx - Python 项目环境统一使用 uv - Node.js 按需提供系统级 LTS 版本 - 不建议所有项目共用一套系统级 Python / Node 依赖环境

浏览器联调

默认方式:ssh -L local_port:127.0.0.1:remote_port

仅在 WebhookOAuth 回调或固定公网 URL 必需时启用 dev 子域名。启用后只反代开发服务,必须带访问控制,且不直接暴露原始开发端口。

Git 工作方式

GitHub 为正式同步面,活跃工作区只保留在本机,多台本地电脑只接入,不各自维护长期副本;临时状态需要落盘时使用 wip/* 分支。

初始化顺序

  1. 安装系统更新与 unattended-upgrades
  2. 创建 <dev-user> 并配置 sudo
  3. 写入 SSH 公钥
  4. 按目标状态修改 sshd_config
  5. 安装并启用 ufw
  6. 安装并启用 fail2ban
  7. 创建 /srv/workspace/srv/devtools/opt/infra/bootstrap
  8. 安装 docker 与语言环境底座,并为 Python 配置 uv
  9. 如 Docker 拉镜像受阻,先配置本地代理再继续
  10. 按既有 Docker 方案接入 Tailscale
  11. 从本地 IDE 连接并验证远程开发

验收项

ssh <dev-user>@<host> 可登录,密码登录失败,root 直登失败,ufw status 为启用状态,docker compose version 可用,uv --version 正常,/srv/workspace 可写,tailscale0 已出现,本机可访问 GitHub,也可通过 Tailscale 访问其他服务器。

流量边界

300G/月 足够承载 SSH / IDE 远程开发、Git 同步、包管理器下载、少量联调页面访问和日常运维命令。

不作为默认用途:大文件中转、备份包中转、镜像分发节点、高频公网预览和业务代理入口。