香橙派(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)无限膨胀摩擦硬盘

三、 优化效果对账

  1. CPU 负载降低:不加载 default_config 意味着后台不再高频运行 dhcpssdpzeroconf 扫描线程,单核 CPU 在空闲时能保持极低占有率。
  2. 磁盘 I/O 绝杀:通过 logging: none 抹除容器日志,通过 logger: error 限制应用日志,通过 commit_interval: 30 规避碎步写入,再通过 tmpfs 将 SQLite 的缓存(.db-shm/.db-wal)直接放在内存里摩擦,闪存/TF 卡读写频率逼近于 0。
  3. 系统稳定性保障:通过 deploy.resources 锁死物理边界,即使配置出错,HA 也绝无可能拉垮香橙派宿主机的其他服务。

标签: none

添加新评论