国内云开发主机标准配置¶
适用范围¶
用于一台 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 incoming、allow outgoing。基础规则放行 22/tcp 与 41641/udp,80/tcp 和 443/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>
开发工具¶
基础包最小集:git、curl、tmux、zsh、htop、ufw、fail2ban
容器层:安装 docker、docker 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 底座保留 python3、python3-venv、pipx
- Python 项目环境统一使用 uv
- Node.js 按需提供系统级 LTS 版本
- 不建议所有项目共用一套系统级 Python / Node 依赖环境
浏览器联调¶
默认方式:ssh -L local_port:127.0.0.1:remote_port
仅在 Webhook、OAuth 回调或固定公网 URL 必需时启用 dev 子域名。启用后只反代开发服务,必须带访问控制,且不直接暴露原始开发端口。
Git 工作方式¶
GitHub 为正式同步面,活跃工作区只保留在本机,多台本地电脑只接入,不各自维护长期副本;临时状态需要落盘时使用 wip/* 分支。
初始化顺序¶
- 安装系统更新与
unattended-upgrades - 创建
<dev-user>并配置sudo - 写入 SSH 公钥
- 按目标状态修改
sshd_config - 安装并启用
ufw - 安装并启用
fail2ban - 创建
/srv/workspace、/srv/devtools与/opt/infra/bootstrap - 安装
docker与语言环境底座,并为 Python 配置uv - 如 Docker 拉镜像受阻,先配置本地代理再继续
- 按既有 Docker 方案接入 Tailscale
- 从本地 IDE 连接并验证远程开发
验收项¶
ssh <dev-user>@<host> 可登录,密码登录失败,root 直登失败,ufw status 为启用状态,docker compose version 可用,uv --version 正常,/srv/workspace 可写,tailscale0 已出现,本机可访问 GitHub,也可通过 Tailscale 访问其他服务器。
流量边界¶
300G/月 足够承载 SSH / IDE 远程开发、Git 同步、包管理器下载、少量联调页面访问和日常运维命令。
不作为默认用途:大文件中转、备份包中转、镜像分发节点、高频公网预览和业务代理入口。