用老 Mac 跑本地 AI:OpenClaw 环境一键搭建
老款 Mac 可以通过一键搭建 OpenClaw 环境,快速部署本地 AI 服务。本文将详细介绍如何使用自动化脚本一键搭建 OpenClaw 环境,让老 Mac 发挥余热,成为强大的本地 AI 工作站。
一、硬件要求
1.1 最低配置
| CPU | Intel i3 第 3 代 | Intel i5 第 4 代及以上 | 支持 VT-x/VT-d |
| 内存 | 4GB | 8GB 或更高 | DDR3 |
| 存储 | 128GB SSD | 256GB SSD 或更高 | SATA 或 NVMe |
| 网络 | Wi-Fi | Wi-Fi + 有线 | 有线网络优先 |
1.2 支持的 Mac 型号
| MacBook Pro 13" | 2012-2015 | i5/i7 | 4-16GB | 128-512GB |
| MacBook Air 13" | 2013-2017 | i5/i7 | 4-8GB | 128-512GB |
| MacBook 12" | 2015-2019 | m3/m5/m7 | 8-16GB | 256-512GB |
| iMac 21.5" | 2013-2017 | i5/i7 | 8-32GB | 1TB Fusion |
| Mac mini | 2012-2014 | i5/i7 | 4-16GB | 500GB-1TB |
二、系统准备
2.1 安装 Ubuntu
# 下载 Ubuntu 22.04 LTS
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-desktop-amd64.iso
# 制作启动盘
sudo dd if=ubuntu-22.04.3-desktop-amd64.iso of=/dev/sdX bs=4M
# 安装 Ubuntu Server
# 按照安装向导完成安装
2.2 系统优化
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装常用工具
sudo apt install -y vim git curl wget htop net-tools tmux
# 配置时区
sudo timedatectl set-timezone Asia/Shanghai
# 配置主机名
sudo hostnamectl set-hostname macbook-ai
三、一键搭建脚本
3.1 创建主脚本
#!/bin/bash
LOG_FILE="/var/log/openclaw-install.log"
ALERT_EMAIL="admin@example.com"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
send_alert() {
local subject=$1
local message=$2
echo "$message" | mail -s "$subject" $ALERT_EMAIL
}
check_system() {
log "=== Checking System Requirements ==="
# 检查 CPU
local cpu_model=$(cat /proc/cpuinfo | grep 'model name' | head -1 | cut -d':' -f2 | xargs)
log "CPU Model: $cpu_model"
# 检查内存
local total_mem=$(free -h | grep Mem | awk '{print $2}')
log "Total Memory: $total_mem"
# 检查磁盘
local disk_size=$(df -h / | tail -1 | awk '{print $2}')
log "Disk Size: $disk_size"
# 检查网络
ping -c 4 8.8.8.8 > /dev/null 2>&1
if [ $? -eq 0 ]; then
log "Network connection is normal"
else
log "Network connection failed"
return 1
fi
log "=== System Requirements Check Completed ==="
return 0
}
install_docker() {
log "=== Installing Docker ==="
# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER
# 验证 Docker 安装
docker –version
docker-compose –version
log "=== Docker Installation Completed ==="
}
install_openclaw() {
log "=== Installing OpenClaw ==="
# 创建工作目录
mkdir -p /opt/openclaw
cd /opt/openclaw
# 克隆 OpenClaw 仓库
git clone https://github.com/openclaw/openclaw.git
# 进入项目目录
cd openclaw
# 复制配置文件
cp .env.example .env
# 编辑配置文件
cat << 'EOF' > .env
# OpenClaw 配置
OPENCLAW_PORT=8080
OPENCLAW_HOST=0.0.0.0
# 数据库配置
DB_HOST=postgres
DB_PORT=5432
DB_NAME=openclaw
DB_USER=openclaw
DB_PASSWORD=openclaw123
# Redis 配置
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
# 数据存储
DATA_PATH=/data/openclaw
# AI 模型配置
AI_MODEL_PATH=/data/openclaw/models
AI_MODEL_TYPE=llama
# 日志配置
LOG_LEVEL=info
LOG_PATH=/var/log/openclaw
EOF
log "=== OpenClaw Installation Completed ==="
}
create_docker_compose() {
log "=== Creating Docker Compose Configuration ==="
cat << 'EOF' > /opt/openclaw/openclaw/docker-compose.yml
version: '3'
services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: always
ports:
– "8080:8080"
volumes:
– /data/openclaw:/data
– ./.env:/app/.env
environment:
– DB_HOST=postgres
– REDIS_HOST=redis
depends_on:
– postgres
– redis
networks:
– openclaw-net
postgres:
image: postgres:14
container_name: openclaw-postgres
restart: always
volumes:
– /data/openclaw/postgres:/var/lib/postgresql/data
environment:
– POSTGRES_DB=openclaw
– POSTGRES_USER=openclaw
– POSTGRES_PASSWORD=openclaw123
networks:
– openclaw-net
redis:
image: redis:7-alpine
container_name: openclaw-redis
restart: always
volumes:
– /data/openclaw/redis:/data
networks:
– openclaw-net
networks:
openclaw-net:
driver: bridge
EOF
log "=== Docker Compose Configuration Created ==="
}
start_openclaw() {
log "=== Starting OpenClaw ==="
# 创建数据目录
sudo mkdir -p /data/openclaw
# 启动所有服务
cd /opt/openclaw/openclaw
docker-compose up -d
# 等待服务启动
sleep 30
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs –tail=50
log "=== OpenClaw Started ==="
}
test_openclaw() {
log "=== Testing OpenClaw ==="
# 等待服务完全启动
sleep 30
# 测试 API
local health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/api/health)
log "OpenClaw health check: $health_check"
if [ "$health_check" = "200" ]; then
log "OpenClaw is running normally"
return 0
else
log "OpenClaw is not running"
return 1
fi
}
configure_autostart() {
log "=== Configuring Autostart ==="
# 创建 systemd 服务文件
cat << 'EOF' | sudo tee /etc/systemd/system/openclaw.service > /dev/null
[Unit]
Description=OpenClaw AI Service
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/openclaw/openclaw
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
EOF
# 启用服务
sudo systemctl daemon-reload
sudo systemctl enable openclaw
sudo systemctl start openclaw
log "=== Autostart Configuration Completed ==="
}
configure_ssh() {
log "=== Configuring SSH ==="
# 安装 SSH 服务器
sudo apt install -y openssh-server
# 启动 SSH 服务
sudo systemctl enable ssh
sudo systemctl start ssh
# 配置防火墙
sudo ufw allow 22/tcp
sudo ufw –force enable
log "=== SSH Configuration Completed ==="
}
configure_firewall() {
log "=== Configuring Firewall ==="
# 配置防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 8080/tcp
sudo ufw –force enable
log "=== Firewall Configuration Completed ==="
}
create_monitor_script() {
log "=== Creating Monitor Script ==="
cat << 'EOF' | sudo tee /usr/local/bin/openclaw-monitor.sh > /dev/null
#!/bin/bash
LOG_FILE="/var/log/openclaw-monitor.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
check_openclaw() {
local health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/api/health)
log "OpenClaw health check: $health_check"
if [ "$health_check" != "200" ]; then
log "OpenClaw service is not running, restarting…"
cd /opt/openclaw/openclaw
docker-compose restart
sleep 30
fi
}
check_system_resources() {
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
log "CPU Usage: ${cpu_usage}%"
local mem_usage=$(free | grep Mem | awk '{printf("%.0f"), $3/$2 * 100.0}')
log "Memory Usage: ${mem_usage}%"
local disk_usage=$(df -h /data | tail -1 | awk '{print $5}' | cut -d'%' -f1)
log "Disk Usage: ${disk_usage}%"
if [ $mem_usage -gt 80 ]; then
log "High memory usage: ${mem_usage}%"
sync && echo 3 > /proc/sys/vm/drop_caches
fi
if [ $disk_usage -gt 80 ]; then
log "High disk usage: ${disk_usage}%"
docker system prune -f
fi
}
main() {
log "=== OpenClaw Monitor Started ==="
check_openclaw
check_system_resources
log "=== OpenClaw Monitor Completed ==="
}
main
EOF
sudo chmod +x /usr/local/bin/openclaw-monitor.sh
log "=== Monitor Script Created ==="
}
configure_cron() {
log "=== Configuring Cron Jobs ==="
# 配置定时任务
(crontab -l 2>/dev/null; echo "*/5 * * * * /usr/local/bin/openclaw-monitor.sh") | crontab –
log "=== Cron Jobs Configuration Completed ==="
}
print_summary() {
log "=== Installation Summary ==="
echo ""
echo "OpenClaw has been successfully installed on your Mac!"
echo ""
echo "Access Information:"
echo " – OpenClaw Web UI: http://localhost:8080"
echo " – SSH Access: ssh user@$(hostname -I | awk '{print $1}')"
echo ""
echo "Service Status:"
echo " – OpenClaw: $(systemctl is-active openclaw)"
echo " – Docker: $(systemctl is-active docker)"
echo " – SSH: $(systemctl is-active ssh)"
echo ""
echo "Next Steps:"
echo " 1. Access OpenClaw Web UI at http://localhost:8080"
echo " 2. Configure your AI models and settings"
echo " 3. Start using OpenClaw for AI tasks"
echo ""
echo "For more information, visit: https://github.com/openclaw/openclaw"
echo ""
}
main() {
log "=== OpenClaw One-Click Installation Started ==="
# 检查系统要求
check_system
if [ $? -ne 0 ]; then
log "System requirements check failed"
exit 1
fi
# 安装 Docker
install_docker
# 安装 OpenClaw
install_openclaw
# 创建 Docker Compose 配置
create_docker_compose
# 启动 OpenClaw
start_openclaw
# 测试 OpenClaw
test_openclaw
if [ $? -ne 0 ]; then
log "OpenClaw test failed"
exit 1
fi
# 配置开机自启
configure_autostart
# 配置 SSH
configure_ssh
# 配置防火墙
configure_firewall
# 创建监控脚本
create_monitor_script
# 配置定时任务
configure_cron
# 打印安装摘要
print_summary
log "=== OpenClaw One-Click Installation Completed ==="
}
main
3.2 执行一键安装
# 下载一键安装脚本
wget https://raw.githubusercontent.com/openclaw/install-scripts/main/install-openclaw-mac.sh
# 添加执行权限
chmod +x install-openclaw-mac.sh
# 执行安装
sudo ./install-openclaw-mac.sh
四、OpenClaw 环境搭建流程
为了确保 OpenClaw 环境一键搭建成功,我们需要建立一套完整的搭建流程。以下是 OpenClaw 环境搭建的流程图:
#mermaid-svg-cL1XQ3KSBDeYDw44{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-cL1XQ3KSBDeYDw44 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-cL1XQ3KSBDeYDw44 .error-icon{fill:#552222;}#mermaid-svg-cL1XQ3KSBDeYDw44 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cL1XQ3KSBDeYDw44 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cL1XQ3KSBDeYDw44 .marker.cross{stroke:#333333;}#mermaid-svg-cL1XQ3KSBDeYDw44 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cL1XQ3KSBDeYDw44 p{margin:0;}#mermaid-svg-cL1XQ3KSBDeYDw44 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-cL1XQ3KSBDeYDw44 .cluster-label text{fill:#333;}#mermaid-svg-cL1XQ3KSBDeYDw44 .cluster-label span{color:#333;}#mermaid-svg-cL1XQ3KSBDeYDw44 .cluster-label span p{background-color:transparent;}#mermaid-svg-cL1XQ3KSBDeYDw44 .label text,#mermaid-svg-cL1XQ3KSBDeYDw44 span{fill:#333;color:#333;}#mermaid-svg-cL1XQ3KSBDeYDw44 .node rect,#mermaid-svg-cL1XQ3KSBDeYDw44 .node circle,#mermaid-svg-cL1XQ3KSBDeYDw44 .node ellipse,#mermaid-svg-cL1XQ3KSBDeYDw44 .node polygon,#mermaid-svg-cL1XQ3KSBDeYDw44 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cL1XQ3KSBDeYDw44 .rough-node .label text,#mermaid-svg-cL1XQ3KSBDeYDw44 .node .label text,#mermaid-svg-cL1XQ3KSBDeYDw44 .image-shape .label,#mermaid-svg-cL1XQ3KSBDeYDw44 .icon-shape .label{text-anchor:middle;}#mermaid-svg-cL1XQ3KSBDeYDw44 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-cL1XQ3KSBDeYDw44 .rough-node .label,#mermaid-svg-cL1XQ3KSBDeYDw44 .node .label,#mermaid-svg-cL1XQ3KSBDeYDw44 .image-shape .label,#mermaid-svg-cL1XQ3KSBDeYDw44 .icon-shape .label{text-align:center;}#mermaid-svg-cL1XQ3KSBDeYDw44 .node.clickable{cursor:pointer;}#mermaid-svg-cL1XQ3KSBDeYDw44 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-cL1XQ3KSBDeYDw44 .arrowheadPath{fill:#333333;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cL1XQ3KSBDeYDw44 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cL1XQ3KSBDeYDw44 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-cL1XQ3KSBDeYDw44 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cL1XQ3KSBDeYDw44 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-cL1XQ3KSBDeYDw44 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cL1XQ3KSBDeYDw44 .cluster text{fill:#333;}#mermaid-svg-cL1XQ3KSBDeYDw44 .cluster span{color:#333;}#mermaid-svg-cL1XQ3KSBDeYDw44 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-cL1XQ3KSBDeYDw44 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-cL1XQ3KSBDeYDw44 rect.text{fill:none;stroke-width:0;}#mermaid-svg-cL1XQ3KSBDeYDw44 .icon-shape,#mermaid-svg-cL1XQ3KSBDeYDw44 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cL1XQ3KSBDeYDw44 .icon-shape p,#mermaid-svg-cL1XQ3KSBDeYDw44 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-cL1XQ3KSBDeYDw44 .icon-shape rect,#mermaid-svg-cL1XQ3KSBDeYDw44 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cL1XQ3KSBDeYDw44 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-cL1XQ3KSBDeYDw44 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-cL1XQ3KSBDeYDw44 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
否
是
否
否
是
是
否
否
是
是
否
配置错误
资源不足
其他错误
是
否
是
否
否
是
否
是
否
是
是
否
是
开始一键搭建
检查系统要求
系统要求满足?
提示升级硬件
安装 Docker
Docker 安装成功?
检查网络连接
网络正常?
配置网络
重试 Docker 安装
下载 OpenClaw
下载成功?
检查网络连接
网络正常?
重试下载
创建配置文件
创建 Docker Compose
启动 OpenClaw
启动成功?
检查 Docker 日志
错误信息?
修改配置
优化资源
查看详细日志
可解决?
修复错误
联系技术支持
测试 OpenClaw
测试通过?
检查服务状态
服务正常?
重启服务
检查网络连接
网络正常?
检查防火墙
防火墙配置正确?
配置防火墙
检查端口占用
端口被占用?
修改端口
查看详细日志
配置开机自启
配置 SSH
配置防火墙
创建监控脚本
配置定时任务
打印安装摘要
安装完成
五、高级配置
5.1 性能优化
# 创建性能优化脚本
cat << 'EOF' | sudo tee /usr/local/bin/openclaw-optimize.sh > /dev/null
#!/bin/bash
LOG_FILE="/var/log/openclaw-optimize.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
optimize_cpu() {
log "Optimizing CPU settings…"
# 安装 CPU 频率调节工具
sudo apt install -y cpufrequtils
# 设置 CPU 调节器
echo 'GOVERNOR="ondemand"' | sudo tee -a /etc/default/cpufrequtils
# 重启服务
sudo systemctl restart cpufrequtils
log "CPU optimization completed"
}
optimize_memory() {
log "Optimizing memory settings…"
# 配置内存优化
cat << 'EOF' | sudo tee /etc/sysctl.d/99-memory-optimization.conf > /dev/null
# 内存优化
vm.swappiness=10
vm.vfs_cache_pressure=50
vm.dirty_ratio=15
vm.dirty_background_ratio=5
EOF
# 应用配置
sudo sysctl -p /etc/sysctl.d/99-memory-optimization.conf
log "Memory optimization completed"
}
optimize_disk() {
log "Optimizing disk settings…"
# 配置磁盘优化
cat << 'EOF' | sudo tee /etc/sysctl.d/99-disk-optimization.conf > /dev/null
# 磁盘优化
vm.swappiness=10
vm.vfs_cache_pressure=50
vm.dirty_ratio=15
vm.dirty_background_ratio=5
EOF
# 应用配置
sudo sysctl -p /etc/sysctl.d/99-disk-optimization.conf
log "Disk optimization completed"
}
optimize_network() {
log "Optimizing network settings…"
# 配置网络优化
cat << 'EOF' | sudo tee /etc/sysctl.d/99-network-optimization.conf > /dev/null
# 网络优化
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_window_scaling = 1
EOF
# 应用配置
sudo sysctl -p /etc/sysctl.d/99-network-optimization.conf
log "Network optimization completed"
}
main() {
log "=== OpenClaw Optimization Started ==="
optimize_cpu
optimize_memory
optimize_disk
optimize_network
log "=== OpenClaw Optimization Completed ==="
}
main
EOF
sudo chmod +x /usr/local/bin/openclaw-optimize.sh
5.2 配置备份
# 创建备份脚本
cat << 'EOF' | sudo tee /usr/local/bin/openclaw-backup.sh > /dev/null
#!/bin/bash
LOG_FILE="/var/log/openclaw-backup.log"
BACKUP_DIR="/backup/openclaw"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
backup_data() {
log "Backing up OpenClaw data…"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据
tar -czf $BACKUP_DIR/openclaw-data-$(date +%Y%m%d).tar.gz /data/openclaw
# 备份配置
tar -czf $BACKUP_DIR/openclaw-config-$(date +%Y%m%d).tar.gz /opt/openclaw/openclaw
# 清理旧备份(保留最近 7 天)
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
log "Backup completed"
}
main() {
log "=== OpenClaw Backup Started ==="
backup_data
log "=== OpenClaw Backup Completed ==="
}
main
EOF
sudo chmod +x /usr/local/bin/openclaw-backup.sh
配置定时备份:
crontab -e
# 添加每天凌晨 2 点执行备份
0 2 * * * /usr/local/bin/openclaw-backup.sh
六、使用指南
6.1 访问 OpenClaw
# 本地访问
curl http://localhost:8080
# 远程访问
curl http://your-macbook-ip:8080
6.2 测试 AI 功能
# 测试简单对话
curl -X POST http://localhost:8080/api/chat \\
-H "Content-Type: application/json" \\
-d '{"message": "Hello, how are you?"}'
# 测试代码生成
curl -X POST http://localhost:8080/api/chat \\
-H "Content-Type: application/json" \\
-d '{"message": "Write a Python function to calculate Fibonacci numbers."}'
# 测试智能问答
curl -X POST http://localhost:8080/api/chat \\
-H "Content-Type: application/json" \\
-d '{"message": "What is machine learning?"}'
6.3 查看日志
# 查看 OpenClaw 日志
docker-compose logs -f openclaw
# 查看系统日志
tail -f /var/log/openclaw-install.log
# 查看监控日志
tail -f /var/log/openclaw-monitor.log
七、故障排查
7.1 常见问题
| Docker 安装失败 | 网络问题 | 检查网络连接,重试安装 |
| OpenClaw 启动失败 | 配置错误 | 检查配置文件,修改错误 |
| 服务无法访问 | 防火墙阻止 | 配置防火墙规则 |
| 性能低下 | 资源不足 | 优化资源配置 |
| 内存不足 | 内存占用高 | 清理缓存,优化内存 |
7.2 故障排查脚本
# 创建故障排查脚本
cat << 'EOF' | sudo tee /usr/local/bin/openclaw-troubleshoot.sh > /dev/null
#!/bin/bash
LOG_FILE="/var/log/openclaw-troubleshoot.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
check_docker() {
log "Checking Docker…"
if systemctl is-active –quiet docker; then
log "Docker service is running"
docker –version
else
log "Docker service is not running"
sudo systemctl start docker
fi
}
check_openclaw() {
log "Checking OpenClaw…"
cd /opt/openclaw/openclaw
docker-compose ps
local health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/api/health)
log "OpenClaw health check: $health_check"
}
check_network() {
log "Checking network…"
ping -c 4 8.8.8.8 > /dev/null 2>&1
if [ $? -eq 0 ]; then
log "Network connection is normal"
else
log "Network connection failed"
fi
}
check_resources() {
log "Checking system resources…"
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
log "CPU Usage: ${cpu_usage}%"
local mem_usage=$(free | grep Mem | awk '{printf("%.0f"), $3/$2 * 100.0}')
log "Memory Usage: ${mem_usage}%"
local disk_usage=$(df -h /data | tail -1 | awk '{print $5}' | cut -d'%' -f1)
log "Disk Usage: ${disk_usage}%"
}
check_logs() {
log "Checking logs…"
log "=== OpenClaw Logs ==="
docker-compose logs –tail=50 openclaw
log "=== System Logs ==="
tail -50 /var/log/syslog
}
main() {
log "=== OpenClaw Troubleshoot Started ==="
check_docker
check_openclaw
check_network
check_resources
check_logs
log "=== OpenClaw Troubleshoot Completed ==="
}
main
EOF
sudo chmod +x /usr/local/bin/openclaw-troubleshoot.sh
八、总结
通过一键搭建脚本,我们可以快速在老 Mac 上部署 OpenClaw 环境,实现本地 AI 服务。
8.1 主要优势
8.2 使用场景
| 个人学习 | 优秀 | 快速搭建 AI 环境 |
| 家庭服务器 | 优秀 | 长期稳定运行 |
| 开发测试 | 优秀 | 快速部署测试环境 |
| 商业应用 | 良好 | 需要额外优化 |
| 教育演示 | 优秀 | 简单易用 |
8.3 后续优化
可以进一步优化:
- 配置高可用
- 添加更多 AI 模型
- 集成更多服务
- 优化性能配置
- 增强安全防护
希望这篇教程能帮助大家成功在老 Mac 上一键搭建 OpenClaw 环境!



