废旧 MacBook 改造家庭 AI 网关:OpenClaw + 内网穿透
本文介绍了如何将废旧 MacBook 改造为家庭 AI 网关的完整方案。通过部署 OpenClaw AI 服务、frp 内网穿透、Home Assistant 智能家居、Nextcloud 私有云等组件,构建了一个功能丰富的家庭智能系统。文章详细说明了硬件配置、软件栈选择、Ubuntu 系统安装、Docker 环境搭建,以及各服务的容器化部署方法,提供了完整的 docker-compose.yml
·
废旧 MacBook 改造家庭 AI 网关:OpenClaw + 内网穿透
废旧 MacBook 可以改造为一个功能强大的家庭 AI 网关,集成 OpenClaw 本地 AI 服务和内网穿透功能,实现外网访问家庭 AI 服务。本文将详细介绍如何部署和配置这套系统。
一、系统架构
1.1 整体架构
1.2 硬件配置
| 组件 | 规格 | 用途 |
|---|---|---|
| CPU | Intel i5-5257U @ 2.7GHz | 运行多个服务 |
| 内存 | 8GB DDR3L 1600MHz | 多服务并发 |
| 存储 | 256GB SSD | 系统和数据 |
| 网络 | Wi-Fi + 有线 | 网络连接 |
| 外置存储 | 2TB+ 硬盘 | 媒体文件存储 |
1.3 软件栈
| 服务 | 版本 | 用途 |
|---|---|---|
| Ubuntu | 22.04 LTS | 操作系统 |
| Docker | 最新版本 | 容器运行时 |
| Docker Compose | 最新版本 | 容器编排 |
| OpenClaw | 最新版本 | AI 服务 |
| frp | 最新版本 | 内网穿透 |
| Home Assistant | 最新版本 | 智能家居 |
| Nextcloud | 最新版本 | 私有云 |
| Nginx | 最新版本 | 反向代理 |
| Portainer | 最新版本 | 容器管理 |
二、系统准备
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 vim /etc/netplan/00-installer-config.yaml
网络配置示例:
network:
ethernets:
enx00e04c123456:
dhcp4: yes
optional: true
version: 2
应用网络配置:
sudo netplan apply
2.3 安装 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
三、OpenClaw 部署
3.1 创建工作目录
# 创建工作目录
mkdir -p /opt/home-ai
cd /opt/home-ai
# 创建数据目录
mkdir -p /data/openclaw
mkdir -p /data/homeassistant
mkdir -p /data/nextcloud
mkdir -p /data/nginx
mkdir -p /data/portainer
3.2 创建 docker-compose.yml
vim docker-compose.yml
docker-compose.yml 内容:
version: '3'
services:
# OpenClaw AI 服务
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: always
ports:
- "8080:8080"
volumes:
- /data/openclaw:/data
- ./openclaw/.env:/app/.env
environment:
- DB_HOST=postgres
- REDIS_HOST=redis
depends_on:
- postgres
- redis
networks:
- home-ai-net
# PostgreSQL 数据库
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:
- home-ai-net
# Redis 缓存
redis:
image: redis:7-alpine
container_name: openclaw-redis
restart: always
volumes:
- /data/openclaw/redis:/data
networks:
- home-ai-net
# Home Assistant 智能家居
homeassistant:
image: homeassistant/home-assistant:latest
container_name: homeassistant
restart: always
ports:
- "8123:8123"
volumes:
- /data/homeassistant:/config
environment:
- TZ=Asia/Shanghai
networks:
- home-ai-net
# Nextcloud 私有云
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: always
ports:
- "8081:80"
volumes:
- /data/nextcloud:/var/www/html
environment:
- TZ=Asia/Shanghai
networks:
- home-ai-net
# Nginx 反向代理
nginx:
image: nginx:alpine
container_name: nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /data/nginx/nginx.conf:/etc/nginx/nginx.conf
- /data/nginx/ssl:/etc/nginx/ssl
- /data/nginx/conf.d:/etc/nginx/conf.d
networks:
- home-ai-net
# frp 客户端
frpc:
image: snowdreamtech/frpc:latest
container_name: frpc
restart: always
volumes:
- ./frpc/frpc.ini:/etc/frp/frpc.ini
networks:
- home-ai-net
# Portainer 容器管理
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "9000:9000"
volumes:
- /data/portainer:/data
- /var/run/docker.sock:/var/run/docker.sock
networks:
- home-ai-net
networks:
home-ai-net:
driver: bridge
3.3 配置 OpenClaw
# 创建 OpenClaw 配置目录
mkdir -p openclaw
# 复制配置文件
cp .env.example openclaw/.env
# 编辑配置文件
vim openclaw/.env
OpenClaw 配置示例:
# 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=
# AI 模型配置
AI_MODEL_PATH=/data/openclaw/models
AI_MODEL_TYPE=llama
# 数据存储
DATA_PATH=/data/openclaw
# 日志配置
LOG_LEVEL=info
LOG_PATH=/var/log/openclaw
四、frp 内网穿透配置
4.1 配置 frp 服务端
# 创建 frp 配置目录
mkdir -p frps
# 创建配置文件
vim frps/frps.ini
frp 服务端配置:
[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin123
token = your-token
max_pool_count = 5
4.2 配置 frp 客户端
# 创建 frp 客户端配置
vim frpc/frpc.ini
frp 客户端配置:
[common]
server_addr = your-server-ip
server_port = 7000
token = your-token
[openclaw]
type = http
local_ip = 192.168.1.100
local_port = 8080
custom_domains = openclaw.yourdomain.com
[homeassistant]
type = http
local_ip = 192.168.1.100
local_port = 8123
custom_domains = home.yourdomain.com
[nextcloud]
type = http
local_ip = 192.168.1.100
local_port = 8081
custom_domains = cloud.yourdomain.com
[portainer]
type = http
local_ip = 192.168.1.100
local_port = 9000
custom_domains = portainer.yourdomain.com
4.3 启动 frp 服务
# 启动 frp 客户端
docker-compose up -d frpc
# 查看 frp 日志
docker-compose logs -f frpc
五、Nginx 反向代理配置
5.1 配置 Nginx
# 创建 Nginx 配置目录
mkdir -p /data/nginx/conf.d
# 创建主配置文件
vim /data/nginx/nginx.conf
Nginx 主配置文件:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
}
5.2 配置反向代理
# 创建 OpenClaw 反向代理配置
vim /data/nginx/conf.d/openclaw.conf
OpenClaw 反向代理配置:
upstream openclaw {
server openclaw:8080;
}
server {
listen 80;
server_name openclaw.yourdomain.com;
location / {
proxy_pass http://openclaw;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
创建 Home Assistant 反向代理配置:
vim /data/nginx/conf.d/homeassistant.conf
Home Assistant 反向代理配置:
upstream homeassistant {
server homeassistant:8123;
}
server {
listen 80;
server_name home.yourdomain.com;
location / {
proxy_pass http://homeassistant;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
六、家庭 AI 网关工作流程
为了确保家庭 AI 网关稳定运行,我们需要建立一套完整的工作流程。以下是家庭 AI 网关的工作流程图:
6.1 创建工作流程脚本
#!/bin/bash
LOG_FILE="/var/log/home-ai-gateway.log"
ALERT_EMAIL="admin@example.com"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
send_alert() {
local subject=$1
local message=$2
echo "$message" | mail -s "$subject" $ALERT_EMAIL
}
check_network() {
log "Checking network connection..."
ping -c 4 8.8.8.8 > /dev/null 2>&1
if [ $? -eq 0 ]; then
log "Network connection is normal"
return 0
else
log "Network connection failed"
return 1
fi
}
check_openclaw() {
log "Checking OpenClaw service..."
cd /opt/home-ai
if docker-compose ps | grep -q "openclaw.*Up"; then
log "OpenClaw service is running"
return 0
else
log "OpenClaw service is not running"
return 1
fi
}
check_frp() {
log "Checking frp service..."
cd /opt/home-ai
if docker-compose ps | grep -q "frpc.*Up"; then
log "frp service is running"
return 0
else
log "frp service is not running"
return 1
fi
}
check_homeassistant() {
log "Checking Home Assistant service..."
cd /opt/home-ai
if docker-compose ps | grep -q "homeassistant.*Up"; then
log "Home Assistant service is running"
return 0
else
log "Home Assistant service is not running"
return 1
fi
}
check_nextcloud() {
log "Checking Nextcloud service..."
cd /opt/home-ai
if docker-compose ps | grep -q "nextcloud.*Up"; then
log "Nextcloud service is running"
return 0
else
log "Nextcloud service is not running"
return 1
fi
}
check_nginx() {
log "Checking Nginx service..."
cd /opt/home-ai
if docker-compose ps | grep -q "nginx.*Up"; then
log "Nginx service is running"
return 0
else
log "Nginx service is not running"
return 1
fi
}
check_system_resources() {
log "Checking system resources..."
# 检查 CPU 使用率
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
log "CPU Usage: ${cpu_usage}%"
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
log "High CPU usage detected: ${cpu_usage}%"
send_alert "High CPU Usage" "CPU usage is ${cpu_usage}% on MacBook"
fi
# 检查内存使用率
local mem_usage=$(free | grep Mem | awk '{printf("%.0f"), $3/$2 * 100.0}')
log "Memory Usage: ${mem_usage}%"
if [ $mem_usage -gt 80 ]; then
log "High memory usage detected: ${mem_usage}%"
sync && echo 3 > /proc/sys/vm/drop_caches
send_alert "High Memory Usage" "Memory usage is ${mem_usage}% on MacBook"
fi
# 检查磁盘使用率
local disk_usage=$(df -h /data | tail -1 | awk '{print $5}' | cut -d'%' -f1)
log "Disk Usage: ${disk_usage}%"
if [ $disk_usage -gt 80 ]; then
log "High disk usage detected: ${disk_usage}%"
docker system prune -f
send_alert "High Disk Usage" "Disk usage is ${disk_usage}% on MacBook"
fi
}
restart_openclaw() {
log "Restarting OpenClaw service..."
cd /opt/home-ai
docker-compose restart openclaw
sleep 30
if check_openclaw; then
log "OpenClaw service restarted successfully"
return 0
else
log "Failed to restart OpenClaw service"
return 1
fi
}
restart_frp() {
log "Restarting frp service..."
cd /opt/home-ai
docker-compose restart frpc
sleep 10
if check_frp; then
log "frp service restarted successfully"
return 0
else
log "Failed to restart frp service"
return 1
fi
}
restart_homeassistant() {
log "Restarting Home Assistant service..."
cd /opt/home-ai
docker-compose restart homeassistant
sleep 30
if check_homeassistant; then
log "Home Assistant service restarted successfully"
return 0
else
log "Failed to restart Home Assistant service"
return 1
fi
}
restart_nextcloud() {
log "Restarting Nextcloud service..."
cd /opt/home-ai
docker-compose restart nextcloud
sleep 30
if check_nextcloud; then
log "Nextcloud service restarted successfully"
return 0
else
log "Failed to restart Nextcloud service"
return 1
fi
}
restart_nginx() {
log "Restarting Nginx service..."
cd /opt/home-ai
docker-compose restart nginx
sleep 10
if check_nginx; then
log "Nginx service restarted successfully"
return 0
else
log "Failed to restart Nginx service"
return 1
fi
}
main() {
log "=== Home AI Gateway Workflow Started ==="
check_network
if [ $? -ne 0 ]; then
log "Network check failed, attempting to fix..."
sudo systemctl restart networking
sleep 10
check_network
fi
check_openclaw
if [ $? -ne 0 ]; then
log "OpenClaw check failed, restarting..."
restart_openclaw
fi
check_frp
if [ $? -ne 0 ]; then
log "frp check failed, restarting..."
restart_frp
fi
check_homeassistant
if [ $? -ne 0 ]; then
log "Home Assistant check failed, restarting..."
restart_homeassistant
fi
check_nextcloud
if [ $? -ne 0 ]; then
log "Nextcloud check failed, restarting..."
restart_nextcloud
fi
check_nginx
if [ $? -ne 0 ]; then
log "Nginx check failed, restarting..."
restart_nginx
fi
check_system_resources
log "=== Home AI Gateway Workflow Completed ==="
}
main
添加执行权限:
sudo chmod +x /usr/local/bin/home-ai-gateway.sh
配置定时任务:
crontab -e
# 添加每 10 分钟执行一次工作流程
*/10 * * * * /usr/local/bin/home-ai-gateway.sh
七、启动所有服务
7.1 启动服务
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
7.2 验证服务
# 验证 OpenClaw
curl http://localhost:8080/api/health
# 验证 Home Assistant
curl http://localhost:8123
# 验证 Nextcloud
curl http://localhost:8081
# 验证 Portainer
curl http://localhost:9000
八、总结
通过以上步骤,我们成功将废旧 MacBook 改造为家庭 AI 网关,集成 OpenClaw 和内网穿透功能。
8.1 主要功能
- AI 服务:OpenClaw 提供智能对话服务
- 内网穿透:frp 实现外网访问
- 智能家居:Home Assistant 控制智能设备
- 私有云:Nextcloud 提供文件存储和共享
- 反向代理:Nginx 提供负载均衡和安全防护
- 容器管理:Portainer 提供容器管理界面
8.2 使用场景
| 场景 | 使用服务 | 功能描述 |
|---|---|---|
| 外网 AI 对话 | OpenClaw + frp | 随时随地使用 AI |
| 智能家居控制 | Home Assistant + frp | 远程控制家庭设备 |
| 文件访问 | Nextcloud + frp | 外网访问家庭文件 |
| 系统管理 | Portainer + frp | 远程管理容器 |
| 家庭监控 | Home Assistant + frp | 远程查看家庭状态 |
8.3 优化建议
- 性能优化:根据实际使用情况调整资源配置
- 安全加固:配置防火墙、SSL 证书、访问控制
- 备份策略:定期备份重要数据和配置
- 监控告警:配置系统监控和告警机制
- 自动化:配置自动化任务和场景
8.4 后续扩展
可以进一步扩展功能:
- 添加更多 AI 模型
- 集成更多智能家居设备
- 添加更多媒体服务
- 添加更多自动化场景
- 添加语音控制功能
希望这篇教程能帮助大家成功将废旧 MacBook 改造为家庭 AI 网关!

更多推荐




所有评论(0)