家用伺服器折腾手记-1:Mac mini 搭建青龙面板教程 🖥️
前言 📝
最近入手了一台 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
进行初始化配置:
- 设置管理员账号密码
- 配置通知方式(推荐使用 Bark 或 Telegram)
- 添加定时任务
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()
性能优化建议 🚀
- 合理设置定时任务间隔,避免任务重叠执行
- 定期清理日志文件和临时文件
- 使用
cron
表达式优化任务执行时间 - 对于资源密集型任务,建议在低峰期执行
常见问题与解决方案 💡
1. 容器无法启动
- 检查端口 5700 是否被占用:
lsof -i:5700
- 检查目录权限:
chmod -R 777 ~/docker/qinglong/data
- 查看 Docker 日志:
docker logs qinglong
2. 脚本运行失败
- 检查依赖是否安装完整
- 查看错误日志:
docker exec -it qinglong cat /ql/log/[脚本名称].log
- 确认环境变量配置正确
后续计划 🎯
这是家用服务器系列的第一篇文章,后续我们将继续探索更多有趣的应用场景:
- 搭建 Homebridge 实现智能家居集成
- 部署 Nginx 反向代理实现外网访问
- 使用 Docker Compose 管理多个服务
- 配置 SSL 证书实现安全访问