Mac mini 7×24小时自动化部署全流程指南

一、部署前环境准备

1.1 硬件兼容性检查

Mac mini作为部署载体需满足以下条件:

  • 硬件配置:建议配备16GB内存+512GB SSD存储
  • 系统版本:需运行macOS 12 Monterey或更新版本
  • 网络要求:固定IP地址或DDNS动态域名解析
  • 电源管理:建议使用UPS不间断电源保障供电

1.2 基础工具链安装

通过终端执行以下命令完成开发环境准备:

  1. # 安装Xcode命令行工具(含编译环境)
  2. xcode-select --install
  3. # 配置包管理工具(若未安装)
  4. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  5. # 安装基础开发工具
  6. brew install git wget curl coreutils

二、系统级持久化配置

2.1 电源管理优化

通过pmset命令禁用系统休眠机制,确保服务持续运行:

  1. # 禁用所有休眠模式(核心配置)
  2. sudo pmset -a disablesleep 1
  3. sudo pmset -a hibernatemode 0
  4. sudo pmset -a standby 0
  5. sudo pmset -a autopoweroff 0
  6. # 验证配置生效
  7. pmset -g | grep -E "sleep|hibernate|standby"

2.2 远程管理配置

开启SSH服务实现远程维护(生产环境建议配合防火墙规则):

  1. # 启用远程登录(需管理员权限)
  2. sudo systemsetup -setremotelogin on
  3. # 配置SSH安全策略(可选)
  4. echo "PermitRootLogin no" | sudo tee -a /etc/ssh/sshd_config
  5. echo "PasswordAuthentication no" | sudo tee -a /etc/ssh/sshd_config
  6. sudo systemsetup -setrestartfreeze on # 系统冻结时自动重启

2.3 运行时环境检查

确保Node.js环境满足应用要求:

  1. # 检查当前版本
  2. node --version
  3. # 通过包管理器安装指定版本(示例为LTS版本)
  4. brew install node@18 # 根据实际需求调整版本号
  5. # 配置环境变量(可选)
  6. echo 'export PATH="/usr/local/opt/node@18/bin:$PATH"' >> ~/.zshrc
  7. source ~/.zshrc

三、应用部署方案

3.1 自动化安装方案

推荐使用标准化安装脚本快速部署:

  1. # 下载并执行安装程序(建议先验证脚本来源)
  2. curl -fsSL https://example.com/deploy/install.sh | bash
  3. # 典型安装流程包含:
  4. # 1. 环境检测与报错处理
  5. # 2. 依赖项自动安装
  6. # 3. 服务进程守护配置
  7. # 4. 开机自启注册

3.2 开发者源码部署

适用于需要定制开发的场景:

  1. # 克隆官方仓库(需提前配置Git)
  2. git clone https://github.com/example/repo.git
  3. cd repo
  4. # 使用pnpm管理依赖(比npm更高效)
  5. npm install -g pnpm
  6. pnpm install --frozen-lockfile
  7. # 构建生产环境包
  8. pnpm build
  9. # 启动开发服务器(带热更新)
  10. pnpm dev

3.3 容器化部署方案

对于复杂应用推荐使用容器技术:

  1. # 安装Docker Desktop(社区版)
  2. brew install --cask docker
  3. # 构建Docker镜像
  4. docker build -t my-app .
  5. # 运行容器(建议配置重启策略)
  6. docker run -d \
  7. --restart unless-stopped \
  8. -p 3000:3000 \
  9. --name my-service \
  10. my-app

四、服务守护与监控

4.1 进程管理配置

使用launchd实现原生守护进程:

  1. <!-- 示例plist配置文件 ~/Library/LaunchAgents/com.example.service.plist -->
  2. <plist version="1.0">
  3. <dict>
  4. <key>Label</key>
  5. <string>com.example.service</string>
  6. <key>ProgramArguments</key>
  7. <array>
  8. <string>/usr/local/bin/node</string>
  9. <string>/path/to/main.js</string>
  10. </array>
  11. <key>RunAtLoad</key>
  12. <true/>
  13. <key>KeepAlive</key>
  14. <true/>
  15. <key>StandardOutPath</key>
  16. <string>/tmp/service.log</string>
  17. <key>StandardErrorPath</key>
  18. <string>/tmp/service.error.log</string>
  19. </dict>
  20. </plist>

4.2 日志管理系统

配置日志轮转与集中存储:

  1. # 创建日志目录
  2. sudo mkdir /var/log/myapp
  3. sudo chown $(whoami) /var/log/myapp
  4. # 使用logrotate配置(示例)
  5. cat > /etc/logrotate.d/myapp <<EOF
  6. /var/log/myapp/*.log {
  7. daily
  8. missingok
  9. rotate 7
  10. compress
  11. delaycompress
  12. notifempty
  13. create 644 $(whoami) admin
  14. sharedscripts
  15. postrotate
  16. /bin/kill -HUP SYSLOG senderID >/dev/null 2>&1 || true
  17. endscript
  18. }
  19. EOF

4.3 监控告警方案

集成基础监控工具链:

  1. # 安装系统监控工具
  2. brew install htop glances
  3. # 配置基础告警规则(示例使用系统命令)
  4. while true; do
  5. if ! pgrep -f "node main.js" > /dev/null; then
  6. osascript -e 'display notification "服务异常重启中" with title "告警"'
  7. /path/to/startup.sh
  8. fi
  9. sleep 60
  10. done

五、维护与故障处理

5.1 常见问题排查

现象 可能原因 解决方案
服务频繁重启 内存泄漏 增加swap空间或优化代码
远程连接失败 防火墙拦截 检查pfctl规则或云服务商安全组
日志不更新 权限问题 检查日志目录写权限
构建失败 依赖冲突 删除node_modules重新安装

5.2 备份恢复策略

建议实施3-2-1备份原则:

  1. # 每日自动备份脚本示例
  2. backup_dir="/Volumes/Backup/myapp_$(date +%Y%m%d)"
  3. mkdir -p "$backup_dir"
  4. # 数据库备份
  5. mongodump --out "$backup_dir/db"
  6. # 配置文件备份
  7. cp -r /etc/myapp "$backup_dir/config"
  8. # 压缩打包
  9. tar -czf "$backup_dir.tar.gz" "$backup_dir"
  10. # 异地上传(示例使用scp)
  11. scp "$backup_dir.tar.gz" user@backup-server:/storage/

5.3 性能优化建议

  • 内存优化:调整Node.js堆内存限制
  • 磁盘I/O:将日志存储到独立磁盘
  • 网络优化:启用HTTP/2协议
  • CPU亲和性:对于多核设备配置进程绑定

六、进阶部署方案

6.1 集群化部署

使用PM2实现多进程管理:

  1. # 安装进程管理器
  2. npm install -g pm2
  3. # 启动集群(4个工作进程)
  4. pm2 start main.js -i 4
  5. # 配置负载均衡
  6. pm2 startup # 生成开机启动配置
  7. pm2 save # 保存当前进程状态

6.2 蓝绿部署方案

实现零停机更新:

  1. # 版本1运行在3000端口
  2. node main.js --port 3000 &
  3. # 版本2运行在3001端口(测试验证)
  4. node main.js --port 3001 --env staging &
  5. # 通过Nginx切换流量
  6. # 验证通过后终止3000端口进程

6.3 混合云部署

对于高可用需求:

  1. 主节点部署在本地Mac mini
  2. 备节点部署在行业常见技术方案虚拟机
  3. 使用Keepalived实现VIP切换
  4. 共享存储使用NFS或对象存储服务

本方案通过系统化的配置管理和自动化工具链,实现了Mac mini设备的稳定7×24小时运行。实际部署时建议先在测试环境验证所有流程,生产环境需配合完善的监控告警体系。根据具体业务需求,可灵活选择基础部署方案或进阶集群化方案,平衡稳定性与运维成本。