OrbStack Machine 文件共享方式 符号链接(symlink)方案:连接开发与运行环境

社区话题 Linux/macOS 与自动化运维 OrbStack Machine 文件共享方式 符号链接(symlink)方案:连接开发与运行环境

标签: ,

  • 该话题为空。
正在查看 0 条回复
  • 作者
    帖子
    • #1205

      追光
      管理员

      🔗 符号链接(symlink)方案:连接开发与运行环境

      🎯 目标
      将 macOS 上的项目目录(如

      ~/Sites/myapp

      )通过 symlink 映射到 Linux 的 Web 目录(如

      /home/wwwroot

      ),实现:
      – Mac 上用 VS Code 编辑
      – Linux 中 Nginx/PHP 直接运行
      – AMH 面板可管理

      ✅ 正确操作步骤(关键:先删目录,再建 symlink)

      1. 备份原目录(如有重要数据)  
      sudo cp -r /home/wwwroot /home/wwwroot.bak$(date +%Y%m%d)
      
      2. 删除原目录(必须!避免嵌套)  
      sudo rm -rf /home/wwwroot
      
      3. 创建 symlink(名字就是 /home/wwwroot)  
      sudo ln -sf /Users/xbaby/Sites/Machine-sites/wwwroot /home/wwwroot
      
      4. 验证  
      ls -l /home/wwwroot  # 应显示 symlink  
      ls /home/wwwroot     # 应直接列出项目文件(如 lnmp/)
      

      ⚠️ 错误做法:

      ln -s ... /home/wwwroot

      /home/wwwroot

      是目录时 → 会在内部创建

      wwwroot

      子链接,导致路径嵌套:

      /home/wwwroot/wwwroot/...

      📦 三目录批量处理脚本(推荐)

      #!/bin/bash
      MACBASE="/Users/xbaby/Sites/Machine-sites"
      
      # 定义映射
      declare -A MAP=(
      ["/home/usrdata/madmin"]="$MACBASE/madmin"
      ["/home/wwwroot"]="$MACBASE/wwwroot"
      ["/home/backup"]="$MACBASE/backup"
      )
      
      for linuxpath in "${!MAP[@]}"; do
        macpath="${MAP[$linuxpath]}"
        parent=$(dirname "$linuxpath")
      
        sudo mkdir -p "$parent"
        [ -e "$linuxpath" ] && sudo cp -r "$linuxpath" "${linuxpath}.bak$(date +%Y%m%d)"
        sudo rm -rf "$linuxpath"
        sudo ln -sf "$macpath" "$linuxpath"
      done
      

      ⚙️ Web 服务(Nginx/PHP/AMH)兼容性配置

      1. PHP openbasedir 限制(必须配置!)
      AMH 默认限制 PHP 只能访问

      /home:/tmp

      ,需放行

      /Users

      echo 'openbasedir = /home:/tmp:/Users:/mnt' | sudo tee /home/wwwroot/.user.ini
      amh php81 restart  # 重启 PHP-FPM
      

      2. Nginx 配置(通常无需改动)

      server {
          root /home/wwwroot;  # symlink 会被自动解析
          ...
      }
      

      ✅ Nginx 和 PHP-FPM 均能正确解析 symlink 的真实路径。

      🧪 验证命令清单

      1. 检查 symlink 是否正确  
      ls -l /home/wwwroot
      
      2. 检查能否读取 Mac 文件  
      cat /home/wwwroot/index.php
      
      3. 检查 PHP 限制  
      cat /home/wwwroot/.user.ini
      
      4. 测试 Web 访问  
      echo "" > ~/Sites/Machine-sites/wwwroot/test.php  
      curl http://localhost/test.php  # 应返回 "OK"
      

      📌 最佳实践总结

      | 场景 | 推荐做法 |
      |——|———-|
      | 日常开发 | Mac 编辑

      ~/Sites/...

      → Linux 通过 symlink 运行 |
      | 项目管理 | Git 仓库放在 Mac,Linux 只运行 |
      | 安全测试 | 利用 symlink 快速切换不同项目环境 |
      | 避免 | 不要直接在 Linux 中修改 symlink 指向的文件(应通过 Mac) |

      ❌ 常见误区澄清

      | 误区 | 事实 |
      |——|——|
      | “symlink 会降低性能” | ❌ OrbStack 对 symlink 有优化,性能无损 |
      | “AMH 不支持 symlink” | ❌ 支持,只需配置 openbasedir |
      | “必须用 rsync 同步” | ❌ 实时共享,无需同步 |

      💡 黄金法则:
      “Mac 存文件,Linux 跑服务,symlink 做桥梁,openbasedir 开绿灯。”

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。