Skip to content

物理机与虚拟机迁移指南 ​

任务: 将核心服务 (Hub, Neat) 从虚拟机 (192.168.233.130) 迁移到 物理笔记本 (Ubuntu 20.04)。 同时部署: 将新的个人主页 (Home) 部署到物理机。 状态: 虚拟机作为测试环境保留,物理机作为生产环境。

📋 1. 迁移前准备 (Preparation) ​

1.1 物理机网络配置 ​

  • 目标: 确保物理机有一个固定的内网 IP,防止重启后 IP 变动。
  • 操作:
    1. 登录物理机终端。
    2. 查看网卡名称: ip addr (通常是 enpXsX 或 wlpXsX)。
    3. 编辑 Netplan 配置 (假设使用有线连接):
      bash
      sudo nano /etc/netplan/00-installer-config.yaml
    4. 参考配置 (请根据实际路由器网段修改,假设路由是 192.168.31.1):
      yaml
      network:
        ethernets:
          enp3s0:  # 替换为你的网卡名
            dhcp4: no
            addresses: [192.168.31.200/24]  # 物理机固定IP
            gateway4: 192.168.31.1
            nameservers:
              addresses: [223.5.5.5, 114.114.114.114]
        version: 2
    5. 应用配置: sudo netplan apply
    6. 记录: 物理机新 IP = 192.168.31.200 (示例)

1.2 目录结构初始化 (物理机) ​

  • 目标: 建立标准的 /srv 目录结构 (参考之前的架构文档)。
  • 操作:
    bash
    # 切换到 root 或使用 sudo
    sudo mkdir -p /srv/{core,site,app,hub,monitor,data,backup}
    sudo chown -R $USER:$USER /srv  # 将权限给当前用户,方便操作

1.3 基础软件检查 ​

  • 检查清单:
    • [ ] docker -v (应 > 20.10)
    • [ ] docker compose version (应 > v2.0)
    • [ ] rsync --version (用于同步数据)
    • [ ] git --version

🚚 2. 数据迁移 (Data Migration) ​

策略: 使用 rsync 从虚拟机 推 数据到 物理机,或者在物理机上 拉 数据。这里推荐在 虚拟机 上操作,推送到物理机。

2.1 停止虚拟机服务 (VM) ​

为了保证数据一致性(特别是数据库),建议先停止服务。

bash
# 在虚拟机 (192.168.233.130) 上执行
cd /srv/hub
docker compose down

cd /srv/app/neat
docker compose down

2.2 同步数据 (VM -> Laptop) ​

假设物理机 IP 为 192.168.31.200,用户名为 allen。

bash
# 在虚拟机上执行 rsync
# 1. 同步 Hub 数据
rsync -avzP /srv/hub/ allen@192.168.31.200:/srv/hub/

# 2. 同步 Neat 项目
rsync -avzP /srv/app/neat/ allen@192.168.31.200:/srv/app/neat/

# 3. 同步持久化数据 (如果有独立挂载的 data 目录)
rsync -avzP /srv/data/ allen@192.168.31.200:/srv/data/

注意: 如果 SSH 端口不是 22,请加 -e 'ssh -p 端口号' 参数。


🚀 3. 服务启动与配置调整 (Service Startup) ​

3.1 启动 Hub 服务 (物理机) ​

  1. 登录物理机。
  2. 进入目录: cd /srv/hub
  3. 修改配置:
    • 检查 frp/frpc.ini: 确保 server_addr 指向你的公网 VPS IP (通常不用变)。
    • 检查 docker-compose.yml: 确认端口没有冲突。
  4. 启动:
    bash
    docker compose up -d
  5. 验证: docker compose ps 确保所有容器 (nginx, frpc, nextcloud...) 状态为 Up。

3.2 启动 Neat 项目 (物理机) ​

  1. 进入目录: cd /srv/app/neat
  2. 修改配置:
    • 检查 deploy/nginx/conf.d/app.conf: 确认反向代理指向正确的后端容器。
  3. 启动:
    bash
    docker compose up -d

3.3 部署个人主页 (Home) - 新部署 ​

由于这是新部署,我们需要将本地构建好的静态文件上传到物理机。

  1. 本地构建 (Windows):
    powershell
    cd c:\Users\hongj\source\lab\home
    npm run generate  # 生成 .output/public 目录
  2. 上传文件:
    powershell
    # 使用 scp 上传到物理机 /srv/site/home
    scp -r .output/public/* allen@192.168.31.200:/srv/site/home/
  3. Nginx 配置 (物理机):
    • 在 Hub 的 Nginx 配置目录 (/srv/hub/nginx/conf.d/) 新增 home.conf:
    nginx
    server {
        listen 80;
        server_name home.hongjy.cn;  # 你的域名
    
        location / {
            root /srv/site/home;  # 指向刚才上传的目录
            index index.html;
            try_files $uri $uri/ /index.html;
        }
    }
    • 注意:需要将 /srv/site/home 挂载到 Hub 的 Nginx 容器中。
    • 修改 /srv/hub/docker-compose.yml:
      yaml
      services:
        nginx:
          volumes:
            - /srv/site:/srv/site:ro  # 添加这就行
    • 重启 Nginx: docker compose restart nginx

🔄 4. 流量切换 (Traffic Switch) ​

4.1 修改 DNS / Host ​

  • 在局域网内,将域名的 DNS 解析指向 物理机 IP (192.168.31.200)。
  • 或者在路由器中设置静态 DHCP 和 端口转发(如果需要公网直连)。

4.2 验证访问 ​

  • 访问 http://192.168.31.200 (Hub 首页)
  • 访问 http://192.168.31.200:xxx (Neat 服务)
  • 访问 home.hongjy.cn (如果配置了本地 hosts 或 DNS)

4.3 虚拟机处理 ​

  • 确认物理机运行稳定 3-7 天后,可以关闭虚拟机,或将其重置用于其他测试。

🛠️ 5. 故障排查 (Troubleshooting) ​

  • 端口冲突: 如果启动失败,检查 netstat -tulpn | grep 端口号。
  • 权限问题: 确保 /srv/data 下的数据库文件权限正确 (通常 docker 容器会自动处理,若不行则 sudo chown -R 1001:1001 ...)。
  • FRP 连不上: 检查物理机能否 ping 通公网 VPS,检查防火墙 sudo ufw status 是否允许了相关端口。

方舟 · Ark