欢迎光临
我们一直在努力

家庭服务器首选:Mac mini 跑 OpenClaw + 私有云 + 导航页

家庭服务器首选:Mac mini 跑 OpenClaw + 私有云 + 导航页

Mac mini 是家庭服务器的首选,可以同时运行 OpenClaw、私有云和导航页,打造完整的家庭数据中心。本文将详细介绍如何配置 Mac mini 作为家庭服务器,实现多服务集成。

一、家庭服务器架构

1.1 服务架构

服务端口功能资源占用
OpenClaw 8080 AI 对话服务 中等
Nextcloud 8081 私有云服务 中等
Homarr 8082 导航页服务
Portainer 9000 Docker 管理服务
Nginx 80/443 反向代理服务

1.2 网络架构

┌─────────────┐
│ Router │
└──────┬──────┘

┌──────▼──────┐
│ Mac mini │
│ (Server) │
└──────┬──────┘

┌────────────────┼────────────────┐
│ │ │
┌─────▼─────┐ ┌────▼─────┐ ┌───▼────┐
│ OpenClaw │ │Nextcloud │ │ Homarr │
│ :8080 │ │ :8081 │ │ :8082 │
└───────────┘ └──────────┘ └────────┘

二、系统准备

2.1 安装 Docker

# 安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 添加 Homebrew 到 PATH
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

# 安装 Docker Desktop
brew install –cask docker

# 启动 Docker Desktop
open /Applications/Docker.app

# 验证 Docker 安装
docker –version
docker-compose –version

2.2 创建工作目录

# 创建工作目录
mkdir -p ~/home-server/{openclaw,nextcloud,homarr,portainer,nginx}
cd ~/home-server

# 创建数据目录
mkdir -p ~/home-server/data/{openclaw,nextcloud,homarr,portainer,nginx}

三、OpenClaw 部署

3.1 创建 OpenClaw 配置

cd ~/home-server/openclaw

# 创建 docker-compose.yml
cat << 'EOF' > docker-compose.yml
version: '3'

services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: always
ports:
– "8080:8080"
volumes:
– ~/home-server/data/openclaw:/data
– ./.env:/app/.env
environment:
– DB_HOST=postgres
– REDIS_HOST=redis
depends_on:
– postgres
– redis
networks:
– home-server-net

postgres:
image: postgres:14
container_name: openclaw-postgres
restart: always
volumes:
– ~/home-server/data/openclaw/postgres:/var/lib/postgresql/data
environment:
– POSTGRES_DB=openclaw
– POSTGRES_USER=openclaw
– POSTGRES_PASSWORD=openclaw123
networks:
– home-server-net

redis:
image: redis:7-alpine
container_name: openclaw-redis
restart: always
volumes:
– ~/home-server/data/openclaw/redis:/data
networks:
– home-server-net

networks:
home-server-net:
external: true
EOF

# 创建配置文件
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

# AI 模型配置
AI_MODEL_PATH=/data/models
AI_MODEL_TYPE=llama

# 日志配置
LOG_LEVEL=info
LOG_PATH=/var/log/openclaw
EOF

3.2 启动 OpenClaw

# 创建网络
docker network create home-server-net

# 启动 OpenClaw
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

四、Nextcloud 部署

4.1 创建 Nextcloud 配置

cd ~/home-server/nextcloud

# 创建 docker-compose.yml
cat << 'EOF' > docker-compose.yml
version: '3'

services:
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: always
ports:
– "8081:80"
volumes:
– ~/home-server/data/nextcloud:/var/www/html
environment:
– MYSQL_HOST=nextcloud-db
– MYSQL_DATABASE=nextcloud
– MYSQL_USER=nextcloud
– MYSQL_PASSWORD=nextcloud123
depends_on:
– nextcloud-db
networks:
– home-server-net

nextcloud-db:
image: mariadb:latest
container_name: nextcloud-db
restart: always
volumes:
– ~/home-server/data/nextcloud/db:/var/lib/mysql
environment:
– MYSQL_ROOT_PASSWORD=root123
– MYSQL_DATABASE=nextcloud
– MYSQL_USER=nextcloud
– MYSQL_PASSWORD=nextcloud123
networks:
– home-server-net

networks:
home-server-net:
external: true
EOF

4.2 启动 Nextcloud

# 启动 Nextcloud
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

4.3 配置 Nextcloud

  • 访问 http://localhost:8081
  • 创建管理员账户
  • 配置数据库(使用预配置的数据库)
  • 完成安装
  • 五、Homarr 部署

    5.1 创建 Homarr 配置

    cd ~/home-server/homarr

    # 创建 docker-compose.yml
    cat << 'EOF' > docker-compose.yml
    version: '3'

    services:
    homarr:
    image: ghcr.io/homarr-labs/homarr:latest
    container_name: homarr
    restart: always
    ports:
    – "8082:7575"
    volumes:
    – ~/home-server/data/homarr/configs:/app/data/configs
    – ~/home-server/data/homarr/icons:/app/public/icons
    environment:
    – TZ=Asia/Shanghai
    networks:
    – home-server-net

    networks:
    home-server-net:
    external: true
    EOF

    5.2 启动 Homarr

    # 启动 Homarr
    docker-compose up -d

    # 查看服务状态
    docker-compose ps

    # 查看日志
    docker-compose logs -f

    5.3 配置 Homarr

  • 访问 http://localhost:8082
  • 创建管理员账户
  • 添加服务卡片:
    • OpenClaw: http://localhost:8080
    • Nextcloud: http://localhost:8081
    • Portainer: http://localhost:9000
  • 六、Portainer 部署

    6.1 创建 Portainer 配置

    cd ~/home-server/portainer

    # 创建 docker-compose.yml
    cat << 'EOF' > docker-compose.yml
    version: '3'

    services:
    portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    ports:
    – "9000:9000"
    volumes:
    – ~/home-server/data/portainer:/data
    – /var/run/docker.sock:/var/run/docker.sock
    networks:
    – home-server-net

    networks:
    home-server-net:
    external: true
    EOF

    6.2 启动 Portainer

    # 启动 Portainer
    docker-compose up -d

    # 查看服务状态
    docker-compose ps

    # 查看日志
    docker-compose logs -f

    6.3 配置 Portainer

  • 访问 http://localhost:9000
  • 创建管理员账户
  • 配置 Docker 环境
  • 添加其他服务
  • 七、Nginx 反向代理配置

    7.1 创建 Nginx 配置

    cd ~/home-server/nginx

    # 创建 docker-compose.yml
    cat << 'EOF' > docker-compose.yml
    version: '3'

    services:
    nginx:
    image: nginx:latest
    container_name: nginx
    restart: always
    ports:
    – "80:80"
    – "443:443"
    volumes:
    – ./nginx.conf:/etc/nginx/nginx.conf:ro
    – ./conf.d:/etc/nginx/conf.d:ro
    – ./ssl:/etc/nginx/ssl:ro
    – ~/home-server/data/nginx/logs:/var/log/nginx
    networks:
    – home-server-net

    networks:
    home-server-net:
    external: true
    EOF

    # 创建 nginx.conf
    cat << 'EOF' > nginx.conf
    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;
    keepalive_timeout 65;
    gzip on;

    include /etc/nginx/conf.d/*.conf;
    }
    EOF

    # 创建 OpenClaw 反向代理配置
    cat << 'EOF' > conf.d/openclaw.conf
    server {
    listen 80;
    server_name openclaw.local;

    location / {
    proxy_pass http://openclaw:8080;
    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;
    }
    }
    EOF

    # 创建 Nextcloud 反向代理配置
    cat << 'EOF' > conf.d/nextcloud.conf
    server {
    listen 80;
    server_name nextcloud.local;

    location / {
    proxy_pass http://nextcloud:80;
    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;
    }
    }
    EOF

    # 创建 Homarr 反向代理配置
    cat << 'EOF' > conf.d/homarr.conf
    server {
    listen 80;
    server_name homarr.local;

    location / {
    proxy_pass http://homarr:7575;
    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;
    }
    }
    EOF

    # 创建 Portainer 反向代理配置
    cat << 'EOF' > conf.d/portainer.conf
    server {
    listen 80;
    server_name portainer.local;

    location / {
    proxy_pass http://portainer:9000;
    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;
    }
    }
    EOF

    7.2 启动 Nginx

    # 启动 Nginx
    docker-compose up -d

    # 查看服务状态
    docker-compose ps

    # 查看日志
    docker-compose logs -f

    7.3 配置 DNS

    在路由器或本地 hosts 文件中添加域名解析:

    # 编辑 hosts 文件
    sudo vim /etc/hosts

    # 添加以下内容
    127.0.0.1 openclaw.local
    127.0.0.1 nextcloud.local
    127.0.0.1 homarr.local
    127.0.0.1 portainer.local

    八、家庭服务器配置流程

    为了确保 Mac mini 成功部署家庭服务器,我们需要建立一套完整的配置流程。以下是家庭服务器配置的流程图:

    #mermaid-svg-ixgU9Wmv4jONepq1{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-ixgU9Wmv4jONepq1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ixgU9Wmv4jONepq1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ixgU9Wmv4jONepq1 .error-icon{fill:#552222;}#mermaid-svg-ixgU9Wmv4jONepq1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ixgU9Wmv4jONepq1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ixgU9Wmv4jONepq1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ixgU9Wmv4jONepq1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ixgU9Wmv4jONepq1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ixgU9Wmv4jONepq1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ixgU9Wmv4jONepq1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ixgU9Wmv4jONepq1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ixgU9Wmv4jONepq1 .marker.cross{stroke:#333333;}#mermaid-svg-ixgU9Wmv4jONepq1 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ixgU9Wmv4jONepq1 p{margin:0;}#mermaid-svg-ixgU9Wmv4jONepq1 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ixgU9Wmv4jONepq1 .cluster-label text{fill:#333;}#mermaid-svg-ixgU9Wmv4jONepq1 .cluster-label span{color:#333;}#mermaid-svg-ixgU9Wmv4jONepq1 .cluster-label span p{background-color:transparent;}#mermaid-svg-ixgU9Wmv4jONepq1 .label text,#mermaid-svg-ixgU9Wmv4jONepq1 span{fill:#333;color:#333;}#mermaid-svg-ixgU9Wmv4jONepq1 .node rect,#mermaid-svg-ixgU9Wmv4jONepq1 .node circle,#mermaid-svg-ixgU9Wmv4jONepq1 .node ellipse,#mermaid-svg-ixgU9Wmv4jONepq1 .node polygon,#mermaid-svg-ixgU9Wmv4jONepq1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ixgU9Wmv4jONepq1 .rough-node .label text,#mermaid-svg-ixgU9Wmv4jONepq1 .node .label text,#mermaid-svg-ixgU9Wmv4jONepq1 .image-shape .label,#mermaid-svg-ixgU9Wmv4jONepq1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-ixgU9Wmv4jONepq1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ixgU9Wmv4jONepq1 .rough-node .label,#mermaid-svg-ixgU9Wmv4jONepq1 .node .label,#mermaid-svg-ixgU9Wmv4jONepq1 .image-shape .label,#mermaid-svg-ixgU9Wmv4jONepq1 .icon-shape .label{text-align:center;}#mermaid-svg-ixgU9Wmv4jONepq1 .node.clickable{cursor:pointer;}#mermaid-svg-ixgU9Wmv4jONepq1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ixgU9Wmv4jONepq1 .arrowheadPath{fill:#333333;}#mermaid-svg-ixgU9Wmv4jONepq1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ixgU9Wmv4jONepq1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ixgU9Wmv4jONepq1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ixgU9Wmv4jONepq1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ixgU9Wmv4jONepq1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ixgU9Wmv4jONepq1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ixgU9Wmv4jONepq1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ixgU9Wmv4jONepq1 .cluster text{fill:#333;}#mermaid-svg-ixgU9Wmv4jONepq1 .cluster span{color:#333;}#mermaid-svg-ixgU9Wmv4jONepq1 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-ixgU9Wmv4jONepq1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ixgU9Wmv4jONepq1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-ixgU9Wmv4jONepq1 .icon-shape,#mermaid-svg-ixgU9Wmv4jONepq1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ixgU9Wmv4jONepq1 .icon-shape p,#mermaid-svg-ixgU9Wmv4jONepq1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ixgU9Wmv4jONepq1 .icon-shape rect,#mermaid-svg-ixgU9Wmv4jONepq1 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ixgU9Wmv4jONepq1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ixgU9Wmv4jONepq1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ixgU9Wmv4jONepq1 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    is

    开始配置

    系统准备

    安装 Docker

    Docker 安装成功?

    检查网络连接

    网络正常?

    配置网络

    检查系统版本

    系统版本兼容?

    升级系统

    检查存储空间

    存储空间足够?

    清理存储空间

    查看详细日志

    可解决?

    修复错误

    联系技术支持

    创建工作目录

    部署 OpenClaw

    OpenClaw 部署成功?

    检查配置文件

    配置文件正确?

    修改配置文件

    检查资源

    资源足够?

    优化资源配置

    部署 Nextcloud

    Nextcloud 部署成功?

    检查配置文件

    配置文件正确?

    修改配置文件

    部署 Homarr

    Homarr 部署成功?

    检查配置文件

    配置文件正确?

    修改配置文件

    部署 Portainer

    Portainer 部署成功?

    检查配置文件

    配置文件正确?

    修改配置文件

    部署 Nginx

    Nginx 部署成功?

    检查配置文件

    配置文件正确?

    修改配置文件

    检查端口占用

    端口被占用?

    修改端口

    检查网络配置

    网络配置正确?

    修改网络配置

    配置 DNS

    DNS 配置成功?

    检查 hosts 文件

    hosts 文件正确?

    修改 hosts 文件

    检查路由器配置

    路由器配置正确?

    修改路由器配置

    测试服务访问

    所有服务可访问?

    检查网络连接

    网络连接正常?

    检查服务状态

    服务状态正常?

    重启服务

    检查防火墙

    防火墙配置正确?

    配置防火墙

    检查反向代理

    反向代理正常?

    修改反向代理配置

    配置 Homarr

    Homarr 配置成功?

    检查配置

    配置正确?

    修改配置

    检查网络连接

    网络连接正常?

    检查服务状态

    服务状态正常?

    配置 Nextcloud

    Nextcloud 配置成功?

    配置 Portainer

    Portainer 配置成功?

    测试集成

    集成测试通过?

    检查服务间连接

    服务间连接正常?

    检查网络配置

    网络配置正确?

    检查防火墙

    防火墙配置正确?

    检查反向代理

    反向代理正常?

    配置监控告警

    监控告警配置成功?

    检查监控脚本

    脚本正确?

    修改脚本

    检查定时任务

    任务配置正确?

    修改任务配置

    测试长期运行

    长期运行稳定?

    检查系统资源

    资源占用正常?

    检查服务状态

    服务状态正常?

    检查网络连接

    网络连接正常?

    检查散热

    散热正常?

    清理散热

    查看详细日志

    配置完成

    九、监控告警

    9.1 创建监控脚本

    cat << 'EOF' > ~/home-server/monitor.sh
    #!/bin/bash

    LOG_FILE=~/home-server/logs/monitor.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_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 ~/home-server/openclaw
    docker-compose restart
    sleep 30

    health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/api/health)
    if [ "$health_check" = "200" ]; then
    log "OpenClaw service restarted successfully"
    else
    log "Failed to restart OpenClaw service"
    send_alert "OpenClaw Service Failed" "Failed to restart OpenClaw service"
    fi
    fi
    }

    check_nextcloud() {
    local health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8081/status.php)
    log "Nextcloud health check: $health_check"

    if [ "$health_check" != "200" ]; then
    log "Nextcloud service is not running, restarting…"
    cd ~/home-server/nextcloud
    docker-compose restart
    sleep 30

    health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8081/status.php)
    if [ "$health_check" = "200" ]; then
    log "Nextcloud service restarted successfully"
    else
    log "Failed to restart Nextcloud service"
    send_alert "Nextcloud Service Failed" "Failed to restart Nextcloud service"
    fi
    fi
    }

    check_homarr() {
    local health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8082)
    log "Homarr health check: $health_check"

    if [ "$health_check" != "200" ]; then
    log "Homarr service is not running, restarting…"
    cd ~/home-server/homarr
    docker-compose restart
    sleep 30

    health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8082)
    if [ "$health_check" = "200" ]; then
    log "Homarr service restarted successfully"
    else
    log "Failed to restart Homarr service"
    send_alert "Homarr Service Failed" "Failed to restart Homarr service"
    fi
    fi
    }

    check_portainer() {
    local health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:9000/api/status)
    log "Portainer health check: $health_check"

    if [ "$health_check" != "200" ]; then
    log "Portainer service is not running, restarting…"
    cd ~/home-server/portainer
    docker-compose restart
    sleep 30

    health_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:9000/api/status)
    if [ "$health_check" = "200" ]; then
    log "Portainer service restarted successfully"
    else
    log "Failed to restart Portainer service"
    send_alert "Portainer Service Failed" "Failed to restart Portainer service"
    fi
    fi
    }

    check_system_resources() {
    local cpu_usage=$(top -l 1 | grep "CPU usage" | awk '{print $3}' | cut -d'%' -f1)
    log "CPU Usage: ${cpu_usage}%"

    local mem_usage=$(vm_stat | perl -ne '/page size of (\\d+)/ and $ps=$1; /Pages free:\\s+(\\d+)/ and printf("%.0f", ($1*$ps)/1048576); /Pages inactive:\\s+(\\d+)/ and printf("%.0f", ($1*$ps)/1048576); /Pages active:\\s+(\\d+)/ and printf("%.0f", ($1*$ps)/1048576); /Pages wired:\\s+(\\d+)/ and printf("%.0f", ($1*$ps)/1048576); /Pages speculative:\\s+(\\d+)/ and printf("%.0f", ($1*$ps)/1048576); END {print "";}')
    log "Memory Usage: ${mem_usage}GB"

    local disk_usage=$(df -h ~/home-server/data | tail -1 | awk '{print $5}' | cut -d'%' -f1)
    log "Disk Usage: ${disk_usage}%"

    if (( $(echo "$cpu_usage > 80" | bc -l) )); then
    log "High CPU usage: ${cpu_usage}%"
    send_alert "High CPU Usage" "CPU usage is ${cpu_usage}%"
    fi

    if [ $disk_usage -gt 80 ]; then
    log "High disk usage: ${disk_usage}%"
    docker system prune -f
    send_alert "High Disk Usage" "Disk usage is ${disk_usage}%"
    fi
    }

    main() {
    log "=== Home Server Monitor Started ==="

    check_openclaw
    check_nextcloud
    check_homarr
    check_portainer
    check_system_resources

    log "=== Home Server Monitor Completed ==="
    }

    main
    EOF

    chmod +x ~/home-server/monitor.sh

    9.2 配置定时任务

    # 安装 launchd
    brew install launchd

    # 创建定时任务
    cat << 'EOF' > ~/Library/LaunchAgents/com.home-server.monitor.plist
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
    <string>com.home-server.monitor</string>
    <key>ProgramArguments</key>
    <array>
    <string>/Users/$(whoami)/home-server/monitor.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>RunAtLoad</key>
    <true/>
    </dict>
    </plist>
    EOF

    # 加载定时任务
    launchctl load ~/Library/LaunchAgents/com.home-server.monitor.plist

    十、总结

    通过以上配置,我们成功将 Mac mini 配置为家庭服务器,同时运行 OpenClaw、Nextcloud、Homarr 和 Portainer 等多个服务。

    10.1 主要优势

  • 多服务集成:同时运行多个服务,功能丰富
  • 统一管理:通过 Homarr 导航页统一管理所有服务
  • 私有云存储:Nextcloud 提供私有云存储服务
  • 容器化管理:Portainer 提供可视化的容器管理
  • 反向代理:Nginx 提供统一的访问入口
  • 10.2 服务对比

    服务功能资源占用易用性推荐度
    OpenClaw AI 对话 中等 优秀
    Nextcloud 私有云 中等 优秀
    Homarr 导航页 优秀
    Portainer 容器管理 优秀
    Nginx 反向代理 良好

    10.3 推荐配置

    OpenClaw + Nextcloud + Homarr + Portainer + Nginx

    推荐理由:

    • OpenClaw 提供 AI 对话服务
    • Nextcloud 提供私有云存储
    • Homarr 提供统一导航页
    • Portainer 提供容器管理
    • Nginx 提供反向代理

    10.4 适用场景

    场景OpenClawNextcloudHomarrPortainerNginx
    家庭使用 优秀 优秀 优秀 良好 良好
    小型办公 优秀 优秀 优秀 优秀 优秀
    开发测试 优秀 良好 良好 优秀 良好
    个人学习 优秀 优秀 优秀 良好 良好

    10.5 后续优化

    可以进一步优化:

    • 配置 SSL 证书
    • 添加更多服务
    • 优化性能配置
    • 增强安全防护
    • 配置备份恢复

    希望这篇教程能帮助大家成功配置 Mac mini 作为家庭服务器!

    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 家庭服务器首选:Mac mini 跑 OpenClaw + 私有云 + 导航页
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址