思路
- homeassistant在onepanel的应用商店中有相应的应用,但是不是极速版的,并且安装后配置hacs繁琐报错。
- 使用ha极速版现成的激素版本compose进行部署安装。
一、在onepanel中输入响应compose
- 登录onepanel,如下图所示,找到相应的编排界面,在下方黑框中输入。

二、拉取镜像安装homeassistant
- 输入如下compose内容
bash
services:
homeassistant:
container_name: homeassistant
image: hacn/hacn:stable
volumes: # 映射容器内路径到硬盘
- /mnt/mydisk/hass/config:/config
- /mnt/mydisk/hass/media:/media
- /mnt/mydisk/hass/backup:/config/backups
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
privileged: true
network_mode: host
environment:
- TZ=Asia/Shanghai
command: # 容器内安装mysql相关依赖,后续配置数据库
sh -c "pip install pymysql && /init"
- 点击下面保存即可拉取镜像并运行容器
三、配置hacs
-
容器运行成功后,在浏览器录入ip:端口即可,端口默认8123,本地ip就是127.0.0.1
-
初始化后,进入主页面,如下图依次点击,添加hacs集成。


-
按照以上依次点击后,出现以下界面,勾选提交后,会产生报错:在集成hacs时,github验证通过后,在ha界面总是显示报错



-
经过排查log日志文件,报错如下
bash
Traceback (most recent call last):
File "/config/custom_components/hacs/config_flow.py", line 104, in async_step_device
response = await self.device.register ()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.14/site-packages/aiogithubapi/device.py", line 103, in register
response = await self._client.async_call_api (
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<9 lines>...
)
^
File "/usr/local/lib/python3.14/site-packages/aiogithubapi/client.py", line 147, in async_call_api
raise GitHubConnectionException (
...<2 lines>...
) from None
aiogithubapi.exceptions.GitHubConnectionException: Timeout of 20 reached while waiting for https://github.com/login/device/code
2026-06-22 21:22:16.355 ERROR (MainThread) [aiohttp.server] Error handling request from 192.168.3.51
Traceback (most recent call last):
File "/usr/local/lib/python3.14/site-packages/aiohttp/web_protocol.py", line 517, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.14/site-packages/aiohttp/web_app.py", line 569, in _handle
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.14/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 90, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 86, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 24, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 88, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 261, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 39, in headers_middleware
response = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 91, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 81, in with_admin
return await func(self, request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 226, in get
return await super().get(request, flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 104, in get
result = await self._flow_mgr.async_configure(flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 334, in async_configure
result = await self._async_configure(flow_id, user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1564, in _async_configure
return await super()._async_configure(flow_id, user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 382, in _async_configure
result = await self._async_handle_step(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
flow, cur_step["step_id"], user_input
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 482, in _async_handle_step
result: _FlowResultT = await getattr(flow, method)(user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/hacs/config_flow.py", line 174, in async_step_device_done
"use_shared": user_input.get('use_shared', False),
^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'
- 解决方法,修改代码
- 修改hacs的配置文件 /xxxxx/config/custom_components/hacs/config_flow.py
- 定位到async_step_device_done函数
bash
cd /mnt/mydisk/hass/config/custom_components/hacs/
vim config_flow.py

- 在以上位置插入以下代码,重新构建镜像即可。
bash
# 增加这行判断,如果 user_input 为空,直接跳转下一步
if user_input is None:
return await self.async_step_device_done({}) # 传入空字典
四、安装mqtt服务
- 按照第二步的流程在homeassistant的compose语句下加入以下内容,构建mqtt容器,后续如何使用还没有研究
bash
# ====== MQTT Broker ======
mosquitto:
image: eclipse-mosquitto:2.0.15
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883" # MQTT
- "9001:9001" # WebSocket(可选)
volumes:
- /mnt/mydisk/hass/mosquitto/data:/mosquitto/data
- /mnt/mydisk/hass/mosquitto/log:/mosquitto/log
- /mnt/mydisk/hass/mosquitto/config:/mosquitto/config
environment:
- TZ=Asia/Shanghai
五、安装并配置Mariadb数据库并配置
- 按照第二步的流程在mqtt的compose语句下加入以下内容,构建mariadb容器。
bash
# ====== MariaDB 数据库(替代 PostgreSQL) ======
mariadb:
image: mariadb:11.4 # 当前稳定版本
container_name: mariadb
restart: unless-stopped
ports:
- "3306:3306"
volumes:
- /mnt/mydisk/hass/mariadb/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password # 必填,修改为强密码
- MYSQL_DATABASE=homeassistant # 自动创建数据库
- MYSQL_USER=ha # 专用用户
- MYSQL_PASSWORD=password # 修改为强密码
- TZ=Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci # 确保支持中文和 Emoji
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-u", "root", "-ppassword"]
interval: 10s
timeout: 5s
- 如图所示依次点击,安装adminer管理数据库工具


- 安装完成后再侧边栏数据库中进行配置可进入数据库查看相关内容
六、homeassistant整合mariadb
- 进入homeassistant的配置目录,由于已经将容器中的配置文件映射到硬盘中,直接进入硬盘中ha对应的配置文件修改即可。
bash
cd /mnt/mydisk/hass/config
vim configuration.yaml
# 插入以下内容:
recorder:
db_url: mysql+pymysql://ha:your_user_password@localhost:3306/homeassistant?charset=utf8mb4
purge_keep_days: 30 # 历史数据保留天数
commit_interval: 30 # 数据提交到数据库的间隔,30s
-
如下图所示:

-
重启ha的docker即可
七、总结
- 最终的compose如下
bash
services:
homeassistant:
container_name: homeassistant
image: hacn/hacn:stable
volumes:
- /mnt/mydisk/hass/config:/config
- /mnt/mydisk/hass/media:/media
- /mnt/mydisk/hass/backup:/config/backups
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
privileged: true
network_mode: host
environment:
- TZ=Asia/Shanghai
command:
sh -c "pip install pymysql && /init"
# ====== MQTT Broker ======
mosquitto:
image: eclipse-mosquitto:2.0.15
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883" # MQTT
- "9001:9001" # WebSocket(可选)
volumes:
- /mnt/mydisk/hass/mosquitto/data:/mosquitto/data
- /mnt/mydisk/hass/mosquitto/log:/mosquitto/log
- /mnt/mydisk/hass/mosquitto/config:/mosquitto/config
environment:
- TZ=Asia/Shanghai
# ====== Zigbee2MQTT ======
# zigbee2mqtt:
# image: koenkk/zigbee2mqtt:latest
# container_name: zigbee2mqtt
# restart: unless-stopped
# ports:
# - "8081:8080" # Web 管理界面
# volumes:
# - /mnt/mydisk/hass/zigbee2mqtt/data:/app/data
# - /run/dbus:/run/dbus:ro
# devices:
# - /dev/ttyACM0:/dev/ttyACM0 # 根据实际 USB 设备修改
# environment:
# - TZ=Asia/Shanghai
# - ZIGBEE2MQTT_CONFIG_MQTT_SERVER=mqtt://mosquitto:1883
# - ZIGBEE2MQTT_CONFIG_SERIAL_PORT=/dev/ttyACM0
# - ZIGBEE2MQTT_CONFIG_FRONTEND_PORT=8080
# depends_on:
# - mosquitto
# ====== MariaDB 数据库(替代 PostgreSQL) ======
mariadb:
image: mariadb:11.4 # 当前稳定版本
container_name: mariadb
restart: unless-stopped
ports:
- "3306:3306"
volumes:
- /mnt/mydisk/hass/mariadb/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=passWord # 必填,修改为强密码
- MYSQL_DATABASE=homeassistant # 自动创建数据库
- MYSQL_USER=ha # 专用用户
- MYSQL_PASSWORD=passWord # 修改为强密码
- TZ=Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci # 确保支持中文和 Emoji
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-u", "root", "-ppassWord"]
interval: 10s
timeout: 5s
retries: 5
- 别忘了修改mariadb中的passWord为你自己的密码