标签: Docker
CamKeep:专为家庭 NAS 与小主机打造的轻量级自建视频监控系统
如今在家里装一两个网络摄像头,几乎成了许多家庭的刚需——有人为了看家防盗,有人为了随时看一眼熟睡的婴儿,还有人为了在上班时抓拍家里宠物的搞笑日常。 市面上的智能摄像头硬件往往几十到一百出头就能买到,性价比看似极高。但真正用上之后,许多人都会遇到几道躲不开的“坎”: 无休止的云存储订阅套路:不买云存储,历史录像就只能看十几秒甚至只有缩略图;如果家里装了三四个摄像头,一年光是交云存会员费就比摄像头本身还要贵。 挥之不去的隐私安全隐忧:家里的客厅、卧室、大门口实时画面,全部通过第三方厂商的云端中转和存储,隔三岔五爆出的“云端漏洞”或“监控泄露”新闻,让人心里总是不踏实。 传统开源 NVR 又重又繁琐:想在自己的 NAS 或软路由上自建 NVR(网络视频录像机)?市面上的传统方案要么配置复杂得像工业视频工程软件,要么对 CPU 和显卡性能要求苛刻,家里几十瓦的小主机跑上去风扇狂转、发热剧增,实在经不起长期 7×24 小时折腾。 正是出于**“想要一个极简、省电、好用且 100% 掌握在自己手中”**的初衷,我打磨了这款轻量级自托管 NVR——CamKeep。 今天这篇文章不聊晦涩的底层音视频编解码算法,就单纯从家庭用户和 HomeLab 爱好者的日常视角,聊聊它是如何帮我们轻松接管家庭安防的。 什么是 CamKeep? 简单来说,CamKeep 是一个专为家庭 NAS、迷你主机和小服务器设计的轻量级自建网络视频录像系统。 它的核心任务非常纯粹: 接入流:把家里各个品牌(海康、大华、TP-Link、各种海思/雄迈方案等)摄像头的视频流统一聚合起来; 录下来:按照你设定的时间规则,安静无感地把视频持久化存到你的 NAS 硬盘上; 查得到:提供一个清爽易用的 Web 网页端,让你随时随地像刷短视频一样顺滑地拖动时间轴回看录像。 它没有庞杂的企业级安防架构,也不强求高昂的硬件配置。只要你的设备支持运行 Docker(无论是群晖、威联通、Unraid、TrueNAS,还是装了 Linux 的小主机、N1 盒子、树莓派),一条命令就能轻松跑起来。 为什么选择 CamKeep?日常使用中的几大亮点 1. 100% 局域网本地优先,彻底告别云端与订阅 CamKeep 在设计之初就确立了**“内网安全、本地优先”**的原则: 零外部依赖:它不需要注册任何外部云端账号,不依赖厂商的云服务中转,更不会向外界上传你的任何视频片段与设备信息; 免订阅费:你的存储空间有多大,录像就能存多久。硬盘满了?系统会自动按设定的天数循环清理最旧的片段,全程全自动; 本地权限可控:系统内置了本地用户与权限管理,可以为家人创建只读账号,甚至单独限制某个账号只能看门口摄像头,兼顾便利与隐私。 2. 极致的低功耗设计,老旧小主机也能轻松常开 对于 24 小时开机的家庭设备,电耗和发热是必须考虑的现实问题。很多传统 NVR 动辄在后台对视频进行二次转码,导致 CPU 占用率居高不下。 CamKeep 深度复用了开源流媒体项目 go2rtc 的流处理能力,录制时默认采用**“直接流拷贝(Stream-Copy)”**技术——摄像头推过来什么格式,系统就原汁原味地分片写入磁盘,CPU 几乎只需要处理基础的 I/O 写入。这意味着即便是在几瓦功耗的软路由、老款 ARM 设备或低配 J4125 / N100 小主机上接入多路 2K/4K 摄像头,CPU 占用通常也仅有个位数,设备完全不会发烫。 ...
Docker安装的Mysql数据库定时备份脚本
功能说明: 使用 docker exec 调用 mysqldump,生成 .sql 备份文件; 文件名中包含当前时间,保存在 mysql_backup/ 目录; 自动清理: 删除 超过 7 天的备份文件; 保留每月 1 号的备份文件,不管时间多久。 脚本 mysql_backup.sh #!/bin/bash # ========== 配置 ========== CONTAINER_NAME="mysql" MYSQL_USER="dbuser" MYSQL_PASSWORD="dbpassword" BACKUP_DIR="/home/ubuntu/mysql_backup" # ========== 创建备份目录 ========== mkdir -p "$BACKUP_DIR" # ========== 生成备份文件名 ========== DATE=$(date '+%Y-%m-%d_%H-%M-%S') BACKUP_FILE="${BACKUP_DIR}/backup_${DATE}.sql" # ========== 执行备份 ========== echo "开始备份:$BACKUP_FILE" docker exec "$CONTAINER_NAME" mysqldump -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" --all-databases > "$BACKUP_FILE" # ========== 清理逻辑 ========== echo "清理旧备份..." # 找出所有 .sql 文件 find "$BACKUP_DIR" -type f -name "*.sql" | while read file; do # 提取文件名中的日期 filename=$(basename "$file") date_str=$(echo "$filename" | grep -oP '\d{4}-\d{2}-\d{2}') # 如果提取不到日期,跳过 if [[ -z "$date_str" ]]; then continue fi # 获取今天日期和文件日期的时间戳 file_ts=$(date -d "$date_str" +%s) today_ts=$(date +%s) # 计算文件和今天的天数差 age_days=$(( (today_ts - file_ts) / 86400 )) # 如果超过 7 天且不是每月 1 号 if [[ $age_days -gt 7 ]]; then day_of_month=$(date -d "$date_str" +%d) if [[ "$day_of_month" != "01" ]]; then echo "删除过期备份:$file" rm -f "$file" fi fi done echo "备份完成。" 设置定时任务 设置每天 12:00 和 20:00 备份一次,并将日志写入文件。 ...
Firewalld防火墙的规则无法控制Docker端口的问题
在 Ubuntu 系统中使用 firewalld 时,默认情况下,firewalld 不会对 Docker 容器的网络流量生效。这是因为 Docker 在启动时会自动创建自己的 iptables 规则来管理网络,绕过了 firewalld 的规则。这种行为可以确保 Docker 容器的网络功能正常,但也会导致 firewalld 的规则无法控制 Docker 端口。 具体原因有以下几点: 1. Docker 使用 iptables Docker 默认会直接操作 iptables 来管理网络连接,而不是通过 firewalld。因此,firewalld 中的规则不会影响 Docker 创建的容器的网络流量。 2. Docker 配置覆盖 firewalld Docker 会修改 iptables 规则,以确保容器能够进行网络连接和端口转发。这些规则可能与 firewalld 的设置发生冲突,导致 firewalld 对 Docker 的流量无效。 解决方案 如果你希望 firewalld 可以控制 Docker 容器的网络流量,可以尝试以下几种方法。 方法 1: 配置 Docker 使用 firewalld 管理规则 可以通过修改 Docker 的配置,禁用 Docker 自己管理 iptables,让 firewalld 接管。 打开 Docker 配置文件(如果文件不存在,可以新建一个): sudo nano /etc/docker/daemon.json 添加以下配置,禁用 Docker 自动修改 iptables: { "iptables": false } 重启 Docker 服务: sudo systemctl restart docker ...