本帖最后由 neroxps 于 2018-11-8 09:58 编辑
2018年11月8日更新
从0.3.13开始,支持长访问令牌(long live token)认证放弃旧的 API_PASSWD 方式。
群晖部署天猫精灵网关 For Docker
看了标题进来的同学你没眼花,对的,其实所有 addons 都可以应用在安装 docker 的机器上,甚至是群晖。(只要addons没有使用 hassio_api来编写)
下面我将演示如何在群晖上部署天猫精灵网关 Addons。
原理分析
Addons 本质上就是一个符合 Hassio 格式的容器,那么我们其实可以手动建立一个符合 Hassio 规范的容器,将对应的文件放置到容器内部相应的目录即可。
Hassio Addons 的部分规范
- 从
/data/options.json 读取 addons 的配置信息。
- 所有数据存储在
/data 。
- 可以通过 Hassio API 控制 home-assistant 或 hassio。
并非所有 addons 都需要使用 hassio api,但如果调用了 hassio api 的 addons 就只能应用在 hassio 里面了。
所以,我们建立的容器符合以上 1 和 2 条件,就能在所有支持 docker 的设备上跑 addons。
在群晖上部署天猫精灵网关
1、准备工作
- 一个域名(用于证书申请)。
- 通过域名申请来的 SSL 证书。
- 可供外网访问的IP地址(穿透也可以,但内网穿透不在本文范围内)。
2、拉取天猫精灵网关容器
打开群晖 Docker 程序,在注册表关键字中输入 neroxps/amd64-tmall-bot-x1-addon ,选择 latest 下载映像。
3、建立天猫精灵配置文件夹
- 在群晖 Docker 目录下新建一个名为 tmall 的文件夹。
- 在 tmall 文件夹下再新建两个文件夹,分别是 data 和 ssl 。
- 上传一个名为 options.json 的文件到 data 目录。
options.json 目录内容如下:
(更多配置说明请查看 https://github.com/neroxps/hassio-addons/blob/master/tmall-bot-x1/README.md)
{
"remote_database":{},
"ssl":{
"ssl_trusted_certificate":"/ssl/chain.pem",
"ssl_certificate":"/ssl/fullchain.pem",
"ssl_key":"/ssl/privkey.pem"
},
"client_id":"qwertyuiopasdfghjkl",
"client_secret":"zxcvbnmasdfghjkl",
"httpd_error_log":true
}
以上配置说明:
- remote_database:留空即可,此选项是可以使用其他的 mysql 数据库,容器内置数据库,不懂设置请不要修改此项。
- ssl:从证书机构那边得到的 SSL 证书路径,这个路径就是对应群晖的
docker/tmall/ssl 下。
- client_id:这个可以自己随便写(英文数字组合),待会在天猫精灵开发者里面填写的内容。
- client_secrte:同上
- httpd_error_log:顾名思义就是打开 http 的日志,将 PHP 日志输出到容器日志内,可以使用
docker logs 容器名称 的方式查看 PHP 日志,方便排错。
- 将第一步骤准备的三个证书文件放置在 docker/tmall/ssl 目录下,入下图所示。
4、运行 Dcoker 容器
- 打开群晖 Docker 映像,选择 neroxps/amd64-tmall-bot-x1-addon:latest 映像,启动。
- 选择高级配置。
- 勾选启动自动重新启动。
- 选择卷标签页,选择添加文件夹,将上一步骤建立的 data 和 ssl 文件夹添加入卷中,装在路径分别是
/data 和 /ssl 。
- 端口设置标签页分别是:本地端口 8443 对应容器端口 443 ,本地端口 880 对应容器端口 80,类型默认TCP。(本地端口可以按照自己的群晖端口占用情况修改其他端口)
- 最终点击应用,再应用,容器就运行起来了。我们可以打开容器的日志查看一下运行状态,最后一句应该是
[INFO] Starting Nginx... ,这代表容器已经运行起来了。
5、端口映射
由于群晖默认占用 443 端口,所以在上一步骤端口设置里面我选择了 8443 作为监听端口,那么在路由器端口映射上,应该如下设置:(以爱快为例)
- 内网地址: 群晖内网的ip地址。
- 内网端口: 上一步骤设置的 8443。
- 协议: 保持默认tcp。
- 外网地址: 保持默认全部。
- 外网端口: 这里填写 443(如果你家的 443 端口被封了,那么也可以写8443,只要端口不冲突就行)。
- 备注(可选): 备注一下这个端口映射是用来干嘛的,我这里写天猫精灵网关。
这时候可以用手机切换到 4g 网络,使用浏览器输入 https://你的域名:端口(如果你是上面端口映射设置的是 443 的话,冒号和端口都不需要写),这时候会弹出对话框,提示你需要输入用户名密码。我们回到群晖上一步的容器日志界面中有下图所示的 USERNAME 和 PASSWORD,这个就是系统自动生成的 web 用户密码。
输入用户密码,即可登陆管理界面,根据要求添加相应的设备到管理平台内。
6、关于内网访问管理平台
由于使用了 https 协议,所以必须使用域名访问否则会访问出错。
最简单方法是在本地电脑的 hosts 文件里面添加如下配置:
#群晖的IP地址 你公网的域名
192.168.1.70 tmall.abc.com
这样我们通过电脑 https://tmall.abc.com 访问就可以访问管理平台了。
7、设置天猫精灵开发者平台
上一步我们已经确定从公网访问我们的天猫精灵管理平台没有任何问题了,那么就需要到 天猫精灵开发者平台 登陆执行一下操作。
- 选择智能家居,填写技能名称。
- 账户授权连接: https://你的域名/authorize.php
- Client ID: 填写第三步 options.json 里面的 client_id,我这例子应该就是
qwertyuiopasdfghjkl 。
- Client Secret: 填写第三步 options.json 里面的 client_secret,我这例子应该就是
zxcvbnmasdfghjkl 。
- 跳转 URL: 无需修改
- Access Token URL: https://你的域名/token.php
- 厂商登出 URL: 此项不填。
- 开发者网关地址: https://你的域名/gate.php
- 设备管理跳转连接: 此项不填
- 天猫精灵APP: 此项不填
(以上域名后放如果在第五步端口映射中的端口不是443端口的话,请在域名后方加入冒号端口。例:https://abc.com:8443 )
接下来下一步,点击开始测试。
此时会看到一个界面,点击账号配置。天猫精灵授权确认点击 yes。
等待转跳完毕看到您刚刚在上一步骤添加的设备证明已经成功了。
最后提供一个非群晖用户的 docker 命令模板
data 和 ssl 的目录内容和群晖的一样。
docker run -d -it \
--restart=always \
--name tmallbot \
-v /root/ssl:/ssl \
-v /root/data:/data \
-p 443:443 \
-p 80:80 \
-e "HA_URL=ha网址" \
-e "HA_PASSWD=ha long live token" \
neroxps/amd64-tmall-bot-x1-addon:latest
不同系统架构使用镜像名称
- 树莓派或者N164位系统: neroxps/aarch64-tmall-bot-x1-addon:latest
- 树莓派或者N132位系统: neroxps/armhf-tmall-bot-x1-addon:latest
- X86_64位系统: neroxps/amd64-tmall-bot-x1-addon:latest
- X86_32位系统: neroxps/i386-tmall-bot-x1-addon:latest
enjoy!
|