用海外云服务器搭建 Home Assistant 智能家居中枢完整教程(2026最新版)
Meta Description: 手把手教你用海外云服务器搭建 Home Assistant 自建智能家居中枢:Docker Compose 部署 HA Container、初始化引导、MQTT/Zigbee 设备接入、Nginx 反向代理 + Let's Encrypt 免费 HTTPS、SQL…
- 前言
- 方案选型:Home Assistant 是什么,为什么值得自建
- 服务器选型:配置推荐与价格对比
- 准备工作:系统初始化与 Docker 安装
- 部署实战:用 Docker Compose 拉起 Home Assistant
- 完成初始化引导(Onboarding)
- 接入你的第一台设备
- Nginx 反向代理 + Let's Encrypt 免费 HTTPS
Meta Description: 手把手教你用海外云服务器搭建 Home Assistant 自建智能家居中枢:Docker Compose 部署 HA Container、初始化引导、MQTT/Zigbee 设备接入、Nginx 反向代理 + Let's Encrypt 免费 HTTPS、SQLite/PostgreSQL 历史数据库、备份与版本升级、安全加固与常见问题,附服务器配置推荐与价格对比。
关键词: Home Assistant搭建、自建智能家居、智能家居中枢、HA Container、Docker部署Home Assistant、MQTT、Zigbee、Nginx反向代理、海外云服务器、智能家居服务器
前言
如果你家里已经攒了几件智能设备,大概率会碰到同一个尴尬:灯是米家的、插座是涂鸦的、摄像头是另一个牌子的、音箱又只认自己的 App。想做一个「进门自动开灯 + 阴天关窗帘 + 没人时摄像头上线」的联动,就得在四五个 App 之间来回跳,还常常因为品牌不互通而根本做不成。
智能家居行业有个共识:真正的价值不在「单个设备能不能联网」,而在设备之间的联动与编排——谁来决定「如果……就……」,谁就是中枢。商业方案通常把中枢锁在自家生态里(米家、Apple Home、Google Home 各有各的围墙),而开源方案给的是另一种可能:中枢跑在你自己拥有的服务器上,设备、数据、自动化规则全归你。
本文的主角 Home Assistant(简称 HA)就是这类开源中枢里最流行的一个。它由 Python 写成,主打本地优先(local-first)——断网了自动化照跑、历史数据存在你自己的磁盘上、任何品牌只要能被集成就能接入。你要付出的,仅仅是一台服务器和一点点运维成本。
本教程要做的事很直接:
- 用一台海外云服务器,通过 Docker Compose 拉起 Home Assistant Container,把中枢搬到你自己的机器上;
- 完成初始化引导,设置账号、位置、时区,做出第一个仪表盘;
- 接入你的第一台设备——先用 MQTT 打通「会说话」的设备,再用 Zigbee 接入不需要 Wi-Fi 的传感器;
- 用 Nginx 反向代理 + Let's Encrypt 绑定域名、开启免费 HTTPS,让你在外网也能安全访问;
- 最后补齐历史数据库、备份、升级、安全加固这些「生产环境必须有」的环节。
🚀 搭建智能家居中枢需要云架构支持? 还没有海外云服务器?通过 5.chengzicloud.cloud 选购阿里云 / AWS / 腾讯云国际版,享专属折扣和中文技术支持。
一、方案选型:Home Assistant 是什么,为什么值得自建
动手之前,先把「智能家居中枢」这一类的几个主流方案分清楚。它们都能「管设备」,但回答的问题和前提条件差别很大,选错了会事倍功半。
| 方案 | 它回答的问题 | 前提条件 | 代价 |
|---|---|---|---|
| Home Assistant(本文) | 「不同品牌的设备要怎么互相联动」 | 你有一台能长期运行的服务器/主机、愿意折腾 | 需要自己部署与运维 |
| 米家 / Apple Home / Google Home | 「我只用这一个生态,怎么最省事」 | 设备都买同一生态 | 跨品牌联动受限、数据在厂商云、规则能力弱 |
| 云厂商 IoT 平台(阿里云 IoT、AWS IoT Core 等) | 「我要做企业级的设备接入与规模化管理」 | 会写代码、按设备数/消息数付费 | 面向开发者、不是给家庭用户用的开箱即用中枢 |
| 站内其他自建服务(监控/网盘/媒体) | 「服务本身活得好不好 / 文件怎么同步」 | 各自独立 | 它们管的是服务器,不是家里的设备 |
一句话定位:Home Assistant 是「设备控制与联动编排层」——站在所有设备之上,把不同协议、不同品牌的设备抽象成统一的「实体(entity)」,再用自动化把实体串起来。它和站内已有的 server-monitoring-guide(Prometheus + Grafana,管的是服务器指标)、uptime-kuma(管的是服务可用性)不是一回事:那两篇回答「我的服务器怎么样」,本篇回答「我家的设备该听谁指挥」。
选它还有三个现实理由:
- 本地优先,断网可用:自动化规则在本地执行,不依赖厂商云。厂商云挂了、你的宽带断了上游、甚至设备厂商倒闭了,家里的灯照常按规则开关。
- 集成数量可观:从 Zigbee、Z-Wave、Matter、Thread 到小米、涂鸦、飞利浦 Hue、Sonos、特斯拉、太阳能逆变器,官方集成覆盖了绝大多数能联网的东西;社区还有 HACS 这样的插件商店补足长尾设备。
- 数据主权:想想「可穿戴设备厂商把健康数据卖给保险」这类旧闻——智能家居记录的是你在不在家、几点回家、家里温度多少,这些数据的归属权值不值得我们认真对待,答案不言自明。
1.1 先搞清楚四种安装方式
Home Assistant 官方提供两大类安装方式,选错会在后面到处踩坑,所以务必先看清楚:
| 安装方式 | 一句话说明 | 支持「应用」 | 适合谁 |
|---|---|---|---|
| Home Assistant OS(HA OS) | 官方定制的嵌入式系统,刷到树莓派/迷你主机/虚拟机 | ✅ 支持 | 绝大多数人、想用官方生态开箱即用 |
| Home Assistant Container | 官方 Docker 镜像,跑在你自己的 Linux 上 | ❌ 不支持 | 已有服务器、习惯 Docker、想跟其他服务共用一台机器 |
| Home Assistant Supervised | 手动在 Debian 上装 Supervisor | ✅(但已非主推) | 高级用户,运维负担重 |
| Home Assistant Core | 直接跑 Python 包 | ❌ | 开发者、调试用 |
本文走的是 Home Assistant Container(Docker)路线,原因是:你已经在用一台海外云服务器,Docker 是复用度最高、最干净、最容易和其他自建服务(反向代理、监控、备份)协同的方式。但必须提前说清楚一个硬性限制:
⚠️ Container 安装不支持「应用」(Apps,即旧称 Add-ons)。所谓应用,是官方应用商店里那些一键安装的附加组件。更关键的是,Thread 和 Z-Wave 这类由「应用」驱动的集成,在 Container 安装下没有开箱即用的支持。如果你重度依赖 Z-Wave,官方推荐直接用 HA OS。
那 Container 是不是就不够用了?也不是。下面这些能力在 Container 下完全正常:仪表盘(Dashboard)、自动化(Automation)、集成(Integrations)、蓝图(Blueprints)、备份(Backups,需自行安排)。MQTT、Zigbee、以及绝大多数「云集成 / 局域网集成」都能用——差别只在于那些必须靠专属应用托管的协议。对大多数以 Wi-Fi 设备和 Zigbee 传感器为主的家庭场景,Container 完全够用。
二、服务器选型:配置推荐与价格对比
Home Assistant 本身并不吃资源——一个只有几十个实体的家庭部署,日常占用通常就在 1 核 / 1 GB 上下。但有几个「隐形吃资源」的因子会显著抬高门槛:
- 历史数据库(Recorder):每一条状态变化都要落库,设备越多、刷新越勤,磁盘和 I/O 压力越大;
- 摄像头 / 视频流:一旦接入 RTSP 摄像头或做实时转码,CPU 会瞬间被吃满;
- 附加组件与语音:跑本地语音识别、图像处理、Mosquitto 等,都会叠加内存占用。
2.1 配置推荐
| 场景 | 推荐配置 | 说明 |
|---|---|---|
| 体验/入门(< 20 个设备) | 1–2 vCPU / 2 GB 内存 / 50 GB 磁盘 | 只做灯、插座、传感器联动,非常够用 |
| 推荐起步(20–80 个设备) | 2 vCPU / 2 GB 内存 / 60 GB 磁盘 | 社区最主流的甜点档,跑 MQTT + 若干集成无压力 |
| 舒适(多区域 + 摄像头) | 2 vCPU / 4 GB 内存 / 80 GB 磁盘 | 有余量跑摄像头、数据库外置、附加服务 |
| 重度(大量摄像头 / 本地 AI) | 4 vCPU / 8 GB 内存 / 160 GB 磁盘 | 需要本地转码或跑本地方案时才上 |
💡 官方对 HA OS 虚拟机给出的最低配置是 2 GB 内存 + 2 vCPU。Container 路线可以更低,但内存不建议低于 1 GB,2 GB 起步会稳得多。
2.2 海外云服务器价格参考
下表为常见海外云服务商的入门到中档机型参考价(均为月付、Linux 系统口径):
| 服务商 | 内存 | vCPU | 磁盘 | 月流量 | 月费(USD) |
|---|---|---|---|---|---|
| DigitalOcean Droplet | 1 GB | 1 | 25 GB SSD | 1 TB | $6 |
| DigitalOcean Droplet | 2 GB | 1 | 50 GB SSD | 2 TB | $12 |
| DigitalOcean Droplet | 2 GB | 2 | 60 GB SSD | 3 TB | $18 |
| DigitalOcean Droplet | 4 GB | 2 | 80 GB SSD | 4 TB | $24 |
| DigitalOcean Droplet | 8 GB | 4 | 160 GB SSD | 5 TB | $48 |
| AWS Lightsail | 1 GB | 2* | 40 GB SSD | 2 TB | $7 |
| AWS Lightsail | 2 GB | 2* | 60 GB SSD | 3 TB | $12 |
| AWS Lightsail | 4 GB | 2 | 80 GB SSD | 4 TB | $24 |
| AWS Lightsail | 8 GB | 2 | 160 GB SSD | 5 TB | $44 |
| AWS Lightsail | 16 GB | 4 | 320 GB SSD | 6 TB | $84 |
| 阿里云国际版 轻量/ECS | 2–4 GB | 2 | 40–80 GB | 按套餐 | 约 $12–$30 |
| 腾讯云国际版 轻量/CVM | 2–4 GB | 2 | 40–80 GB | 按套餐 | 约 $12–$30 |
\* Lightsail 低档的 2 vCPU 为突发型(burstable),长期满载时会回落到基准性能;DigitalOcean、阿里云、腾讯云的国际版价格因机房、活动、计费方式差异较大,表中给的是常见公开区间,下单前请以官网实时价为准。
声明:本文价格数据采集于 2026 年 10 月,仅为公开官网参考区间,实际价格以各厂商官网实时报价为准;汇率波动、区域差异、促销活动均会影响最终价格。金额单位均为美元(USD)。
🚀 想要更划算的海外服务器? 通过 5.chengzicloud.cloud 购买阿里云 / AWS / 腾讯云国际版,享折扣与中文技术支持。
2.3 一句选型建议
对绝大多数家庭场景,「2 vCPU / 2 GB 内存 / 60 GB 磁盘」就是最优解——对应 DigitalOcean 的 $18 档或 AWS Lightsail 的 $12 档。省下来的预算建议优先加在磁盘上(历史库和备份都需要空间),而不是盲目堆 CPU:Home Assistant 的瓶颈几乎从不在算力,而在存储与网络。
如果你还会在同机部署 Nginx、Mosquitto、监控等伴随服务,直接上 2 vCPU / 4 GB 更从容,也避免将来为了加内存而折腾迁移。
三、准备工作:系统初始化与 Docker 安装
3.1 系统选择
Home Assistant Container 是官方维护的 Docker 镜像,只要宿主机能跑 Docker 即可,不挑发行版。但强烈建议用仍在维护期内的系统:
- ✅ 推荐:Ubuntu 22.04 LTS / 24.04 LTS、Debian 12
- ⚠️ 不建议:CentOS 7(已于 2024 年 6 月 EOL,软件源失效、内核偏旧,新机器不要再用)
选 Ubuntu 的另一个理由是社区资料最多——出问题时一搜一大把,排障成本最低。
3.2 初始化服务器
用 SSH 登录服务器后,先做基础更新并装好常用工具。以下命令可直接复制执行:
第 1 步,更新系统并安装基础工具
apt update && apt upgrade -y
apt install -y curl ca-certificates gnupg lsb-release git vim htop
第 2 步,设置时区
时区很重要——自动化(比如「日落开灯」)要靠它判断本地时间。这里以东京时区为例,请按你的实际所在地替换:
timedatectl set-timezone Asia/Tokyo
timedatectl
第 3 步,创建一个专用系统用户(可选但推荐)
为了不和 root 混用,可以给 HA 单独建一个用户,并把配置目录挂到它名下。如果你图省事也可以跳过,用 root 跑。
useradd -r -m -d /opt/homeassistant -s /usr/sbin/nologin ha
mkdir -p /opt/homeassistant/config
chown -R ha:ha /opt/homeassistant
3.3 安装 Docker Engine
Home Assistant Container 要求 Docker Engine 23.0.0 或更高版本,并且必须用 Docker Engine,不能用 Docker Desktop——后者是给桌面开发用的,在服务器上会带来网络与权限的坑。
第 1 步,添加 Docker 官方软件源
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
第 2 步,安装 Docker 与 Compose 插件
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
第 3 步,验证
docker --version
docker compose version
docker run --rm hello-world
看到 hello-world 正常输出、docker compose version 返回 v2.x 即可继续。若你用的是 Debian,把上面源地址里的 ubuntu 换成 debian 即可,其余不变。
四、部署实战:用 Docker Compose 拉起 Home Assistant
4.1 为什么用 Compose 而不是 docker run
官方的 docker run 一行命令也能跑起来,但参数已经相当长(网络模式、特权、多个挂载卷、优雅停机时间……)。用 docker compose 有两个现实好处:配置与命令分离、便于自动重启与升级;而且将来要改任何参数,只改一个 YAML 文件即可,不用回忆上次敲的那串命令。
4.2 编写 compose 文件
在配置目录下创建 compose.yaml。注意把 /opt/homeassistant/config 换成本文 3.2 节里你实际用的路径,TZ 换成你的时区:
services:
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
- /opt/homeassistant/config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
stop_grace_period: 60s
privileged: true
network_mode: host
environment:
TZ: Asia/Tokyo
逐个字段解释清楚,避免「抄了但不知道抄了什么」:
image:官方镜像在 GitHub Container Registry,即ghcr.io/home-assistant/home-assistant:stable。stable是稳定线标签;生产上若想锁版本,可换成具体版本号(如2026.10)。/opt/homeassistant/config:/config:配置目录是整个实例的命根子——账号、集成、自动化、SQLite 历史库home-assistant_v2.db、SSL 证书全在这里。这个目录必须持久化,且必须备份。/etc/localtime:/etc/localtime:ro:让容器读到宿主机时区,避免时间错乱导致的「日落开灯」在半夜触发。/run/dbus:/run/dbus:ro:只读挂载 D-Bus,如果你要用蓝牙集成就必须带上;不用蓝牙也可以留着,无副作用。restart: unless-stopped:宕机或服务器重启后自动拉起。stop_grace_period: 60s:这是最容易被忽略、但最该加的一行。Docker 默认只给容器 10 秒的 SIGTERM 超时,而 Home Assistant 关闭数据库可能超过 10 秒。若被强杀,下次启动日志会报Ended unfinished session和The system could not validate that the sqlite3 database ... was shutdown cleanly,长期如此还可能损坏历史库。加长到 60 秒即可(它是上限而非延迟,HA 退出后 Docker 会立刻继续)。privileged: true与network_mode: host:官方推荐写法。Host 网络让 HA 能发现局域网设备(mDNS/SSDP),特权模式则保证对某些硬件与网络接口的访问。
4.3 启动与查看日志
在 compose.yaml 所在目录执行:
docker compose up -d
查看是否正常启动:
docker compose ps
docker compose logs -f --tail=50
日志里出现 Home Assistant initialized 之类的行、容器状态为 running 即成功。默认监听 8123 端口,先在服务器本地验证:
curl -I http://127.0.0.1:8123
返回 200 或 302 就说明服务起来了。
4.4 一个常见的 ARM64 报错
如果你用的是 ARM64 服务器,日志里可能出现 <jemalloc>: Unsupported system page size。这是因为 HA 用了 jemalloc 做内存分配优化,而某些 ARM64 平台的内存页大小不是 4K。解法是禁用 jemalloc,在 environment: 下加一行:
environment:
TZ: Asia/Tokyo
DISABLE_JEMALLOC: "true"
改完执行 docker compose up -d(配置变了会自动重建容器),再查看日志确认报错消失。
五、完成初始化引导(Onboarding)
容器跑起来后,在浏览器访问 http://<你的服务器IP>:8123(正式环境会在第七节换成域名 + HTTPS),会进入首次配置向导。
第 1 步,创建管理员账号。 设置用户名与强密码。这一步创建的账号拥有全部权限,请务必使用强密码,并尽快在个人资料里开启两步验证(TOTP)。
第 2 步,填写家庭信息。 包括家庭名称、所在位置(用于日出日落、天气等服务)和时区。位置建议用经纬度精确填写而不是只选城市,这样「日落开灯」才会在你的真实日落时间触发。
第 3 步,选择是否匿名上报。 这一步会询问是否加入使用统计与崩溃报告,属于自愿,按偏好选即可。
第 4 步,等待设备自动发现。 HA 启动后会自动扫描局域网(mDNS/SSDP),把发现的设备(路由器、电视、音箱、NAS……)列出来,一键即可添加。这也正是要开 host 网络的原因。
完成后你就有了一个空的仪表盘。默认面板是「概览」,可以拖拽增删卡片;后续你也可以按房间/功能建多个仪表盘。
💡 别忘了立刻做第一件事——备份配置目录。 至少执行一次
tar czf /root/ha-backup-$(date +%F).tar.gz -C /opt/homeassistant config,把配置目录打个包。后面第八节会教自动化备份方案。
六、接入你的第一台设备
Home Assistant 的「接入」本质是把设备变成一个个实体(entity),再用自动化把它们串起来。下面给出两条最有代表性的路子。
6.1 路线一:云集成 / 局域网集成(最快上手)
对于支持标准协议的设备,最快的办法是直接在「设置 → 设备与服务 → 添加集成」里搜品牌名。例如:
- 小米 / 米家:搜索
Xiaomi或Xiaomi Miio; - 飞利浦 Hue、Sonos、Roborock 等:直接搜品牌;
- 支持 Matter/Thread 的新设备:添加
Matter集成(注意 Thread 在 Container 下受限,见 1.1 节)。
添加时通常需要填写账号密码或设备的 IP,按向导即可。这类集成对 Container 安装最友好,先把它们跑通,能快速获得成就感。
6.2 路线二:MQTT(打通「会说话」的设备)
MQTT 是智能家居里最通用的消息协议。很多 DIY 设备、刷了固件的插座、ESPHome 固件、以及 Zigbee2MQTT 转发的设备,都通过 MQTT 和 HA 通信。做法是:先跑一个 MQTT Broker(消息中间件),再让 HA 连上它。
官方推荐用 Mosquitto 作为 Broker。在 Container 方案里,Mosquitto 需要你自己再起一个容器。下面把它加进同一个 compose.yaml(追加到 services: 下):
mosquitto:
container_name: mosquitto
image: eclipse-mosquitto:2
restart: unless-stopped
ports:
- "1883:1883"
volumes:
- /opt/mosquitto/config:/mosquitto/config
- /opt/mosquitto/data:/mosquitto/data
- /opt/mosquitto/log:/mosquitto/log
创建配置目录与一个最基础的配置文件(注意:先开匿名,联调通了再按第九节加认证):
mkdir -p /opt/mosquitto/config /opt/mosquitto/data /opt/mosquitto/log
tee /opt/mosquitto/config/mosquitto.conf > /dev/null <<'CONF'
listener 1883
allow_anonymous true
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
CONF
然后拉起它,并在 HA 里「设置 → 设备与服务 → 添加集成 → MQTT」,Broker 地址填 127.0.0.1(因为 HA 用的是 host 网络),端口 1883。
⚠️ 安全提醒:
allow_anonymous true只应出现在内网联调阶段。一旦对外开放,必须按第九节配置用户名密码,否则任何人连上你的 1883 端口都能读取并伪造你家里的所有消息。
6.3 路线三:Zigbee 传感器
温湿度计、门磁、人体感应这类低功耗传感器大多走 Zigbee。常规做法是插一个 USB 协调器(如 Sonoff Zigbee 3.0 Dongle),但云服务器通常没有 USB 口——这正是「云上跑中枢」的一个真实短板。
因此若你重度依赖 Zigbee,有两条现实选择:
- 把 HA 部署在本地主机(HA OS / Container),USB 协调器直插本机,云服务器只作为站点镜像或备份;
- 云服务器上跑 HA + 内网放一个 Zigbee2MQTT 网关,由网关把 Zigbee 设备转成 MQTT 消息再上行到云端 HA。
如果你在 Container 里确实要挂载 USB 设备,需要显式映射设备节点:
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
并确保运行容器的用户对该设备有访问权限。结论:纯云方案更适合 Wi-Fi 设备 + MQTT + 云集成;Zigbee/Z-Wave 的硬件门槛决定了它们更适合本地部署。
七、Nginx 反向代理 + Let's Encrypt 免费 HTTPS
前面一直在用 IP:8123 访问,这既不好记,明文 HTTP 还会把登录密码暴露在公网上。正确做法是:用一个域名 + HTTPS,由 Nginx 反向代理到本机的 8123。站内 nginx-ssl-guide 已有完整的 Nginx + certbot 教程,这里只讲 Home Assistant 专属的两个关键点。
7.1 第 1 步,解析域名并签证书
先把一个子域名(如 home.example.com)的 A 记录解析到你的服务器 IP,然后在服务器上装 Nginx 与 certbot:
apt install -y nginx certbot python3-certbot-nginx
7.2 第 2 步,写 Nginx 反代配置
HA 的前端是实时应用,靠 WebSocket 维持长连接。如果反代不转发 WebSocket,页面会「打开但一直转圈」「状态不刷新」——这是 HA 反代最常见的坑。下面这份配置把关键头都写全了:
server {
listen 80;
server_name home.example.com;
location / {
proxy_pass http://127.0.0.1:8123;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
其中最后两行 Upgrade / Connection 就是 WebSocket 转发的关键,不能省。
7.3 第 3 步,开启 HTTPS
certbot --nginx -d home.example.com
certbot 会自动改写配置、申请 Let's Encrypt 证书并设置自动续期,同时把 HTTP 跳转到 HTTPS。
7.4 第 4 步,告诉 HA「我在反向代理后面」
这一步不做,HA 会拒绝来自反代的请求——从 Home Assistant 2026.8 起,HTTP 服务器设置搬到了界面里:进入「设置 → 系统 → 网络」的 HTTP 服务器区域,做两件事:
- 打开 Trust X-Forwarded-For(信任 X-Forwarded-For);
- 在 Trusted proxies(受信代理) 里加入你的反代地址,通常是
127.0.0.1(同机 Nginx)。
两个细节坑:
- 网段必须写「网络地址」而不是主机地址。也就是
192.168.1.0/24✅,192.168.1.50/24❌。 - 保存 HTTP 设置会重启 HA,重启后管理员需在 5 分钟内确认新设置,超时会自动回退到旧配置。
- 如果你用的是官方的 Home Assistant Cloud(现已更名 Home Assistant Link) 远程访问,请求走的是安全隧道而非传统反代,这两个选项对它无效、也不需要配。
同机 Nginx 反代时,Trusted proxies 填 127.0.0.1 即可(若 Nginx 与 HA 不在同一台机器上,填 Nginx 的内网 IP)。
7.5 关于 CDN 缓存
如果你在 HA 前面又套了一层 CDN(如 Cloudflare),要确保它不缓存动态内容,否则升级后浏览器可能一直加载旧的旧前端:
- 不要缓存
404响应、HTML 页面(含index.html)、以及服务 worker 文件(/sw-modern.js、/sw-legacy.js); - 不要缓存
/api/和/auth/下的响应——这些是实时数据与登录页,缓存会导致状态过时或登录失败; - 可以放心缓存
/frontend_latest/、/frontend_es5/、/static/下的静态资源。
好消息是,Nginx 与 Cloudflare 默认都不缓存 HTML,只要你没手动加过缓存规则,一般无需额外处理。
八、数据持久化、备份与版本升级
8.1 历史数据库:SQLite 还是 PostgreSQL
HA 的 Recorder(记录器) 集成默认开启,把每一个状态变化写进数据库。默认使用 SQLite,文件位置是配置目录下的 /config/home-assistant_v2.db,开箱即用、无需任何配置,对家庭场景完全够用。
若你要把数据库外置(换机器更从容、便于备份),Recorder 支持的数据库有:
| 数据库 | 官方支持版本 |
|---|---|
| MariaDB | ≥ 10.3 |
| MySQL | ≥ 8.0 |
| PostgreSQL | ≥ 12 |
| SQLite | ≥ 3.40.1 |
外置时在 configuration.yaml 里写 db_url 即可。但有一条铁律:
⚠️ 中途切换数据库会导致现有历史数据丢失,官方明确不支持数据迁移。 所以「要不要外置」最好在第一次部署时就决定。
8.2 让历史库别无限膨胀
Recorder 有几个默认值值得理解,它们就是「磁盘会不会被撑爆」的答案:
purge_keep_days(默认 10):保留多少天历史;auto_purge(默认 true):每天本地时间 04:12 自动清理;auto_repack(默认 true):每月第二个周日自动重整数据库(不重整的话,清理后文件大小可能不下降);commit_interval(默认 5 秒):状态变化多久提交一次数据库。调大可减少磁盘 I/O、延长 SSD/存储卡寿命,代价是数据库略滞后(注意:是数据库滞后,前端历史面板不滞后,因为变化会立刻流向前端)。
磁盘预留原则:官方要求你随时保留不少于数据库体积的空闲临时空间——因为重整/修复/升级时可能需要在磁盘上放一份数据库副本。数据库 1.5 GiB,就得常留 1.5 GiB。
按需排除:如果某个高频刷新的传感器(比如每秒上报的电表)把数据库撑爆,可以用 recorder 的 exclude(按 domains / entities / entity_globs)把它排除在外。
8.3 备份策略
请记住一句话:HA 的全部身家 = 配置目录。 备份就等于把 /opt/homeassistant/config 打包保存。建议三层:
- 本地定时打包:用 cron 每天凌晨打包一次配置目录,保留最近 7 份;
- 异地复制:把打包文件同步到对象存储(如站内
minio或云厂商 OSS/S3),或另一台机器; - 升级前必做:任何版本升级前,先手动打一个快照。
重要:如果你用的是官方 Home Assistant Cloud / Link 订阅,它自带异地备份(Offsite Backups)能力,可以把备份加密上传到官方,这也是它 $6.50/月订阅最实在的价值之一。
8.4 版本升级
Container 方案的升级动作很简单——拉新镜像再重建容器:
docker compose pull
docker compose up -d
但有两条纪律:
- 升级前先备份配置目录,尤其是跨大版本(如 2026.9 → 2026.10)时,数据库 schema 可能变化;
- 锁版本的生产环境更稳妥——想把
stable换成具体版本号,改image:一行后docker compose up -d即可,出问题能快速回退。
九、安全加固与性能优化
Home Assistant 一旦对外,就是一个「能控制你家所有设备」的入口,安全优先级高于一切。
9.1 必做的加固清单
- 只暴露 HTTPS:8123 端口不要直接对公网开放,只允许 Nginx 从本机转发(
127.0.0.1:8123)。 - 强密码 + 两步验证(TOTP):管理员账号务必开启 2FA。
- 开启 IP 封禁:在「设置 → 系统 → 网络」的 HTTP 服务器里打开 Enable IP banning 并设置 Login attempts before ban——多次登录失败后自动封禁来源 IP,名单写入配置目录的
ip_bans.yaml。注意封禁不会自动过期,解封要么删文件里对应条目,要么直接删掉整个文件(下次触发会重建)。 - MOSQUITTO 加认证:生产环境必须把
allow_anonymous关掉,改用用户名密码或 TLS。 - 别把静态目录当保险箱:配置目录下的
www/文件夹会以/local/路径对外提供静态文件,但它不经过 HA 的身份认证——只要有人知道 URL,就能下载里面的文件。敏感文件不要放这里。 - 少开端口:只开放 22(改密钥登录)、80、443;其余一律关闭。
9.2 API 访问
HA 提供 REST API,可用长期访问令牌(Long-Lived Access Token)在「个人资料 → 安全」里创建。拿到令牌后即可用 curl 读写实体状态,适合做外部脚本联动:
curl -H "Authorization: Bearer 你的长期访问令牌" http://127.0.0.1:8123/api/states
令牌等同于密码,泄露后对方能操作你所有实体,务必妥善保管、定期轮换。
9.3 反代层的额外加固
站内 website-security-hardening-guide 里的加固项同样适用于 HA 域名:限制请求速率、开启安全响应头、禁用不必要的 HTTP 方法、隐藏版本信息。此外,由于 HA 与 Nginx 同机,务必保证 Nginx 配置里没有把 8123 直接 proxy_pass 暴露给任意来源——反代只应服务你自己的域名。
十、常见问题 FAQ
Q1:Home Assistant 免费吗? 开源版完全免费。付费项是可选的官方订阅 Home Assistant Cloud(2026 年 12 月起更名为 Home Assistant Link):$6.50/月或 $65/年,含远程访问、异地备份、Alexa/Google 语音、语音处理(STT/TTS)等;月付还有 31 天免费试用。
Q2:云服务器上跑 HA,和买官方 Home Assistant Green 比哪个好? 官方 Home Assistant Green 售价 $199 / 179€(四核 ARM、4 GB 内存、32 GB eMMC),开箱即用、功耗低,适合纯家庭场景。云服务器胜在弹性、可与其他自建服务共用、任意地点访问;但要自己运维,且本地 Zigbee/Z-Wave 硬件受限。要硬件生态、图省事选 Green;要复用服务器、要远程访问选云。
Q3:Container 安装是不是比 HA OS 差很多? 谈不上「差」,是取舍不同。Container 不支持官方「应用」商店,且 Thread/Z-Wave 这类由应用驱动的集成没有开箱支持;但仪表盘、自动化、集成、备份、MQTT、Zigbee(走 Zigbee2MQTT)都正常。重度依赖 Z-Wave 的用户才建议改用 HA OS。
Q4:为什么我的页面能打开却一直转圈、状态不刷新?
99% 是反代没转发 WebSocket。回到 7.2 节,确认 Nginx 配置里有 proxy_http_version 1.1、Upgrade $http_upgrade 和 Connection "upgrade" 三行。
Q5:日志里出现 Ended unfinished session / sqlite3 database ... was shutdown cleanly 怎么办?
说明容器被强杀、数据库没来得及干净关闭。在 compose 里加 stop_grace_period: 60s 即可,见 4.2 节。
Q6:ARM64 上启动报 <jemalloc>: Unsupported system page size?
某些 ARM64 平台页大小非 4K 导致,加环境变量 DISABLE_JEMALLOC: "true" 即可,见 4.4 节。
Q7:历史数据太占磁盘,怎么瘦身?
先用 recorder 的 exclude 排除高频实体,再调小 purge_keep_days;数据库清理后不缩小是正常的——auto_repack 会在每月第二个周日重整。记住官方要求:随时保留不少于数据库体积的空闲空间。
Q8:换机器时怎么迁移?
HA 的全部身家就是配置目录。在新机器上装好同样的容器,把「备份好的配置目录」还原到 /config,重启即可,账号、集成、自动化、历史数据都在。这也是为什么第 8.3 节的备份必须做。
Q9:可以从 SQLite 换成 PostgreSQL 吗? 可以,但已有历史数据会丢失,官方不支持迁移。想换请尽早决定。
Q10:怎么在外网安全访问? 两条路:① 自己的域名 + Nginx 反代 + Let's Encrypt(本文第七节,免费);② 官方 Home Assistant Cloud/Link 订阅($6.50/月,走安全隧道、含异地备份)。千万不要把 8123 端口明文暴露到公网。
Q11:接入了摄像头后卡顿严重? 视频流与实时转码是最吃 CPU 的。先降码率/分辨率,仍不够就升级到 4 vCPU 档,或让摄像头走子码流(substream)只做低清预览。
Q12:为什么 HA 发现不了局域网设备?
两个常见原因:没有用 host 网络(默认桥接网络会隔离 mDNS/SSDP 发现),或防火墙拦了组播。确认 compose 里写了 network_mode: host。
Q13:Mosquitto 一定要自己装吗? 在 Container 方案下是的——官方应用商店不可用,Broker 需要你另起一个容器(本文 6.2 节)。用 HA OS 则可在应用里一键安装 Mosquitto。
Q14:HA 对服务器配置要求高吗? 不高。2 vCPU / 2 GB 内存 / 60 GB 磁盘是社区甜点档;瓶颈通常在存储(历史库)与摄像头转码(CPU),而不是日常联动逻辑。
Q15:CentOS 7 还能跑吗? Container 镜像本身与宿主机发行版无关,理论上能跑;但 CentOS 7 已于 2024 年 6 月 EOL,软件源失效、内核偏旧、Docker 版本难装到位,新机器请直接用 Ubuntu 22.04/24.04 或 Debian 12。
十一、总结
把 Home Assistant 搭在自己的海外云服务器上,本质上是用「一台机器的成本」换回三样东西:设备之间自由联动的能力、数据留在自己手里的确定性、以及一套随你心意长大的自动化系统。
回看整个流程,其实只有几步是真正需要动脑的:
- 选清安装方式——Container 复用现有服务器,代价是没有官方应用商店与 Z-Wave/Thread 的开箱支持;
- 用 Compose 起服务——记住那行
stop_grace_period: 60s,保护好你的历史数据库; - 反向代理别忘 WebSocket——
Upgrade/Connection三行是全篇最值钱的排错点; - 在 HA 里信任反代——「Trust X-Forwarded-For」+「Trusted proxies」不配,请求会被拒;
- 备份就是备份配置目录——记住这一句,你就能在任何机器上原地复活。
维护它其实很轻:每天备份配置目录、每月看一次历史库大小、需要新功能时 docker compose pull && docker compose up -d。剩下的时间,就交给那些终于肯听你指挥的灯、窗帘和传感器吧。
如果你还想在这套栈上继续扩展,下面这些站内教程都能无缝衔接。
延伸阅读:
- 用海外云服务器搭建 Docker + Portainer 容器管理平台教程
- Nginx 反向代理 + Let's Encrypt SSL 证书配置完整教程
- 海外云服务器备份与灾难恢复实战教程
- 海外云服务器监控告警搭建(Prometheus + Grafana)教程
- 海外云服务器 MySQL / PostgreSQL 数据库服务搭建教程
- 海外云服务器网站安全加固实战教程
本文由 5.chengzicloud.cloud 提供,点击访问首页了解更多海外云服务器部署方案和专属优惠。