homeassistant低负载轻量化笔记
香橙派(1核1G)Podman 部署 Home Assistant 低负载轻量化笔记
本笔记专为低配置(1核 CPU、1G 内存)嵌入式开发板(如 Orange Pi Zero 3)定制。通过严格限制系统组件、优化数据库写入机制、利用内存文件系统(tmpfs)以及硬性控制容器资源,最大程度减少磁盘 I/O 摩擦与 CPU 损耗,确保系统长期稳定运行。
一、 Podman Compose 配置文件
创建或修改 podman-compose.yml,限制容器资源额度,并将 SQLite 高频生成的临时日志文件挂载至内存。
在 configuration.yaml 中保留 commit_interval: 30,同时不写 tmpfs。测试tmpfs写后,ha能启动但有报错
这样虽然临时文件还在 TF 卡上,但写入频率从“每秒 1 次”变成了“30 秒 1 次”,I/O 压力已经下降了 96% 以上,既保证了系统能正常启动,又极大地保护了香橙派的 TF 卡。
version: '3'
services:
homeassistant:
image: docker.io/homeassistant/home-assistant:stable
container_name: ha
network_mode: host
# 作用:彻底关闭 Podman 容器层面的 stdout/stderr 日志输出,消除容器日志带来的磁盘 I/O
logging:
driver: none
environment:
- TZ=Asia/Shanghai
volumes:
- ./haconfig:/config:Z
# 作用:将 SQLite 数据库的高频读写临时文件(共享内存与预写日志)直接挂载到内存中
# 极大地保护 TF 卡/闪存寿命,大幅降低碎步写入造成的系统卡顿,重启容器不会丢失核心历史数据
#tmpfs:
# - /config/home-assistant_v2.db-shm:rw,nosuid,nodev,size=16m
# - /config/home-assistant_v2.db-wal:rw,nosuid,nodev,size=16m
# 作用:硬性限制容器资源,防止 HA 遭遇异常或高负载时榨干宿主机资源导致整机死机
deploy:
resources:
limits:
cpus: '0.8' # 限制最多使用 80% 的单核算力,为主机系统留出运行余量
memory: 600M # 限制最多使用 600M 内存,防止触发系统 OOM(内存溢出)
二、 Home Assistant 核心配置文件
修改 /config/configuration.yaml。核心逻辑是禁用默认的全家桶配置(default_config),改为按需手动加载,从源头上切断后台高负载的自动扫描组件(如 dhcp、ssdp、zeroconf 等)。
# ==========================================
# 1. 核心基础组件(手动按需启用)
# ==========================================
frontend: # 作用:启用网页端 UI 界面(必须保留)
http: # 作用:启用基础网络服务,并配置反向代理安全信任
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1 # 作用:信任本地内网穿透工具(如 frpc)的转发
- 10.89.0.0/24 # 作用:信任 Podman 默认的容器内网网段
- 192.168.10.90 # 作用:信任局域网特定中转网关
config: # 作用:启用网页端内的“配置”菜单,允许通过浏览器管理系统
person: # 作用:基础人员管理,HA 正常运行所需的基本依赖
zone: # 作用:基础区域管理,用于定义家或其他地理位置
# ==========================================
# 2. 自动化与脚本基础设施
# ==========================================
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
# ==========================================
# 3. 历史记录与数据库深度优化(关键降 I/O 区域)
# ==========================================
history: # 作用:允许前端网页加载并渲染历史状态折线图
recorder:
purge_keep_days: 1 # 作用:历史数据仅保留 1 天,严格限制数据库体积,防止撑爆缓存与磁盘
commit_interval: 30 # 作用:极其关键!将默认的每秒实时写入改为每 30 秒批量写入一次,I/O 压力降低至原本的几十分之一
# 作用:采用“黑名单”或“白名单”机制过滤不需要记录历史曲线的实体
exclude:
entity_globs:
- sensor.sun_* # 过滤太阳相关的频繁变动状态
- weather.* # 过滤天气预报等无需记录历史的数据
# ==========================================
# 4. 应用层日志截断
# ==========================================
logger:
default: error # 作用:将 HA 内部日志级别提升至 error(或 critical)。拒绝记录 warning 和 info,防止因插件报错导致日志文件(home-assistant.log)无限膨胀摩擦硬盘
三、 优化效果对账
- CPU 负载降低:不加载
default_config意味着后台不再高频运行dhcp、ssdp、zeroconf扫描线程,单核 CPU 在空闲时能保持极低占有率。 - 磁盘 I/O 绝杀:通过
logging: none抹除容器日志,通过logger: error限制应用日志,通过commit_interval: 30规避碎步写入,再通过tmpfs将 SQLite 的缓存(.db-shm/.db-wal)直接放在内存里摩擦,闪存/TF 卡读写频率逼近于 0。 - 系统稳定性保障:通过
deploy.resources锁死物理边界,即使配置出错,HA 也绝无可能拉垮香橙派宿主机的其他服务。