海外 VPS 开发机不是“买台服务器然后直接装项目”这么简单。对小白来说,真正重要的是:能安全登录、能稳定拉代码、能跑 Node / Docker、密钥不会误提交、坏了能恢复。这篇给你一份可以逐项照做的初始化清单。
本文适合个人开发机、AI 编程工具远程环境、小型项目测试机。正式生产环境还需要更严格的监控、审计、权限分离和备份演练。
🎯 这台开发机要做到什么程度
一台合格的海外 VPS 开发机,至少要满足这几个条件:
- 不用 root 长期写代码,有普通开发用户。
- SSH 密钥能登录,密码登录逐步收紧。
- Node、Git、Docker、Python 等基础工具可用。
- 项目密钥放在 `.env`,不会被提交到 Git。
- 有快照、代码仓库、关键数据备份,出事能恢复。
- GitHub、npm、Docker Registry、OpenAI API 网络可检查。
🧳 登录前先准备什么
不要等服务器买完才想“我要装什么”。先准备这几样:
- 服务器 IP、root 初始密码或云厂商 SSH Key。
- 本地 SSH 客户端:Windows Terminal、PowerShell、Termius、PuTTY 都可以。
- 一个 GitHub / GitLab 仓库,用来保存代码。
- 一个密码管理器,用来保存服务器、Git、API Key 和恢复码。
🧱 第一步:系统更新与基础工具
第一次登录后先更新系统,不要急着装项目。
# Debian / Ubuntu 常用初始化
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git unzip ca-certificates gnupg ufw htop tmux build-essential
# 设置时区,可按习惯选择 UTC 或 Asia/Shanghai
timedatectl status
sudo timedatectl set-timezone Asia/Shanghai
如果命令报错,先停下来查系统版本和源,不要复制一堆脚本继续往下跑。
🔐 第二步:普通用户与 SSH 密钥
小白最容易犯的错是长期用 root 开发。建议创建普通用户,项目都放在普通用户目录下。
# 创建普通开发用户,不要长期用 root 写项目
sudo adduser dev
sudo usermod -aG sudo dev
# 切换到 dev 用户测试
su - dev
whoami
然后配置 SSH 密钥登录。密钥登录成功前,不要急着禁用密码登录,避免把自己锁在门外。
# 本地电脑生成密钥,已经有密钥可跳过
ssh-keygen -t ed25519 -C "dev-machine"
# 复制公钥到服务器,替换 IP 和用户名
ssh-copy-id dev@你的服务器IP
# 测试密钥登录成功后,再考虑禁用密码登录
🧯 第三步:防火墙和端口边界
开发机不是靶场,端口越少越好。SSH 能连通之后,再启用防火墙。
# 先确认 SSH 能连,再开防火墙
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose
# 不要随手开放 3000、5173、8000 到公网
# 开发预览优先用 SSH 隧道或 Tailscale
Astro、Vite、Next.js、FastAPI 这类开发端口,优先通过 SSH 隧道或私有网络访问,不要直接暴露给公网。
⚙️ 第四步:Node、Git、Python 和 Docker
先装基础运行时,再按项目需要补充。不要为了“全能”一次装十几套环境。
# Git 身份
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
# Node 建议按项目要求安装 LTS 版本,这里先检查是否已有
node -v
npm -v
# Python 基础
python3 --version
python3 -m venv --help
项目需要容器时再安装 Docker。普通用户加入 docker 组后,权限接近 root,要理解风险。
# Docker 按官方文档安装后,先检查版本
docker --version
docker compose version
# 如需普通用户使用 Docker,理解权限影响后再加入 docker 组
sudo usermod -aG docker dev
📁 第五步:项目目录和 .env 隔离
目录结构不用复杂,但要清楚地区分代码、密钥和备份。
~/projects/
my-site/
.env # 真实密钥,只留服务器本地
.env.example # 示例变量,可提交
docker-compose.yml
README.md
~/backups/
my-site/
db/
uploads/
snapshots/
每个项目都应该有 `.env.example`,但真实 `.env` 不能进 Git。
.env
.env.*
!.env.example
node_modules/
dist/
.DS_Store
如果你已经把 API Key 提交过,正确做法是先去平台轮换密钥,再清理 Git 历史,而不是只删文件。
💾 第六步:快照、Git、Rclone 三层备份
开发机备份至少分三层:代码用 Git,整机用云厂商快照,关键数据用异地备份。
# 1. Git:保存代码历史,不保存密钥和数据库
git status
git remote -v
# 2. 打包项目数据示例
mkdir -p ~/backups/my-site
tar -czf ~/backups/my-site/files-$(date +%F).tar.gz ~/projects/my-site
# 3. 数据库、上传文件、配置文件要单独列清楚
# 备份不是“想起来才做”,而是恢复时真的能用
- Git 适合代码,不适合保存数据库、上传文件和密钥。
- 快照适合整机回滚,但依赖同一家云厂商。
- 异地备份适合保命,尤其是数据库、上传文件和配置。
🩺 第七步:上线前健康检查
初始化完成后,跑一轮健康检查。能看到明确结果,比“感觉能用”可靠。
# 基础健康检查
uptime
df -h
free -h
ss -tulpn
# 网络检查
curl ipinfo.io
curl -I https://github.com
curl -I https://registry.npmjs.org
curl -I https://api.openai.com/v1/models
- 能用普通用户 SSH 密钥登录。
- 防火墙只开放必要端口。
- Git、Node、Python、Docker 版本可查询。
- 项目目录和备份目录分开。
- .env 不进 Git,仓库有 .env.example。
- 至少有 Git 远程仓库、云快照、关键数据异地备份三层保护。
- curl GitHub、npm、OpenAI API 能返回明确状态。
⚠️ 小白最容易踩的坑
长期 root 开发
root 权限太大,误删、误改、密钥泄露后影响更严重。
所有端口直接公网开放
开发预览端口不要裸奔,优先 SSH 隧道、Tailscale 或反向代理加认证。
.env 提交到 Git
API Key、数据库密码、Token 一旦提交,要先轮换密钥,再清理历史。
只做云厂商快照
快照能救整机,但不能替代 Git、数据库导出和异地备份。
没有恢复演练
备份是否有效,要看能不能在新机器上恢复,而不是看文件是否存在。