家用伺服器折腾手记-1:Mac mini 搭建青龙面板教程 🖥️

发布时间:2025-03-07 | 分类:服务器, Docker, 自动化

前言 📝

最近入手了一台 Mac mini M2,除了日常使用外,我还想把它变成一台家用服务器。考虑到 Mac mini 的性能强大、功耗低、噪音小等优点,它非常适合作为 24/7 运行的家用服务器。这篇文章将详细介绍如何在 Mac mini 上搭建 Docker 环境并运行青龙面板。

环境准备 🛠️

1. 安装 Homebrew

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

安装完成后,确保将 Homebrew 添加到 PATH 中。对于 Apple Silicon Mac,通常需要添加以下路径:

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

2. 安装 Docker

brew install --cask docker

安装完成后,启动 Docker Desktop 并等待其初始化完成。

3. 创建工作目录

mkdir -p ~/docker/qinglong
cd ~/docker/qinglong

部署青龙面板 🚀

1. 创建 docker-compose.yml

version: '3'
services:
  qinglong:
    image: whyour/qinglong:latest
    container_name: qinglong
    restart: unless-stopped
    ports:
      - "5700:5700"
    volumes:
      - ./data:/ql/data
    environment:
      - ENABLE_HANGUP=true
      - ENABLE_WEB_PANEL=true
      - TZ=Asia/Shanghai

2. 启动服务

docker-compose up -d

使用以下命令检查容器状态:

docker ps | grep qinglong

配置青龙面板 ⚙️

1. 初始化配置

访问 http://localhost:5700 进行初始化配置:

2. 配置依赖管理

在"依赖管理"页面安装以下基础依赖:

# NodeJS 依赖
npm install -g typescript ts-node

# Python 依赖
pip3 install requests
pip3 install PyExecJS

实用脚本示例 📜

1. 系统监控脚本

// monitor.js
const os = require('os');
const sendNotify = require('./sendNotify');

async function monitor() {
    const cpuUsage = os.loadavg()[0];
    const totalMem = os.totalmem();
    const freeMem = os.freemem();
    const usedMemPercentage = ((totalMem - freeMem) / totalMem * 100).toFixed(2);

    const message = [
        `系统状态报告`,
        `CPU 负载: ${cpuUsage.toFixed(2)}`,
        `内存使用: ${usedMemPercentage}%`,
        `空闲内存: ${(freeMem / 1024 / 1024 / 1024).toFixed(2)}GB`,
        `运行时间: ${(os.uptime() / 3600).toFixed(1)}小时`
    ].join('\n');

    if (cpuUsage > 2 || usedMemPercentage > 80) {
        await sendNotify.sendNotify('系统资源警告 ⚠️', message);
    }
}

monitor();

2. 自动备份脚本

# backup.py
import os
import time
from datetime import datetime
import shutil

def backup():
    # 备份目录
    backup_dir = "/ql/data/backup"
    if not os.path.exists(backup_dir):
        os.makedirs(backup_dir)
    
    # 创建备份文件名
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    backup_file = f"{backup_dir}/ql_backup_{timestamp}.tar.gz"
    
    # 需要备份的目录
    dirs_to_backup = [
        "/ql/data/config",
        "/ql/data/scripts",
        "/ql/data/db"
    ]
    
    # 创建备份
    backup_cmd = f"tar -czf {backup_file} {' '.join(dirs_to_backup)}"
    os.system(backup_cmd)
    
    # 清理旧备份(保留最近7天)
    files = [f for f in os.listdir(backup_dir) if f.endswith('.tar.gz')]
    files.sort()
    while len(files) > 7:
        os.remove(os.path.join(backup_dir, files[0]))
        files = files[1:]
    
    # 计算备份大小
    backup_size = os.path.getsize(backup_file) / 1024 / 1024  # MB
    print(f"备份完成: {backup_file} ({backup_size:.2f}MB)")

if __name__ == "__main__":
    backup()

性能优化建议 🚀

常见问题与解决方案 💡

1. 容器无法启动

2. 脚本运行失败

后续计划 🎯

这是家用服务器系列的第一篇文章,后续我们将继续探索更多有趣的应用场景:

返回首页 🏠