『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 81573|回复: 133

[经验分享] 群晖部署天猫精灵网关 For Docker

   关闭 [复制链接]

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
发表于 2018-8-16 13:36:20 | 显示全部楼层 |阅读模式
本帖最后由 neroxps 于 2018-11-8 09:58 编辑

2018年11月8日更新

从0.3.13开始,支持长访问令牌(long live token)认证放弃旧的 API_PASSWD 方式。

长访问令牌可以在你的hass用户管理页面最下方设置(HA从0.78开始支持)。http://你的ha_ip地址:8123/profile

群晖部署天猫精灵网关 For Docker

看了标题进来的同学你没眼花,对的,其实所有 addons 都可以应用在安装 docker 的机器上,甚至是群晖。(只要addons没有使用 hassio_api来编写)

下面我将演示如何在群晖上部署天猫精灵网关 Addons。

原理分析

Addons 本质上就是一个符合 Hassio 格式的容器,那么我们其实可以手动建立一个符合 Hassio 规范的容器,将对应的文件放置到容器内部相应的目录即可。

Hassio Addons 的部分规范

  1. /data/options.json 读取 addons 的配置信息。
  2. 所有数据存储在 /data
  3. 可以通过 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   下载映像。



01.png

3、建立天猫精灵配置文件夹

  1. 在群晖 Docker 目录下新建一个名为 tmall 的文件夹。
  2. tmall 文件夹下再新建两个文件夹,分别是 datassl
  3. 上传一个名为 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 日志,方便排错。
  1. 将第一步骤准备的三个证书文件放置在 docker/tmall/ssl 目录下,入下图所示。


02.png

03.png

04.png

4、运行 Dcoker 容器

  1. 打开群晖 Docker 映像,选择 neroxps/amd64-tmall-bot-x1-addon:latest 映像,启动。
  2. 选择高级配置。
  3. 勾选启动自动重新启动。


05.png

  1. 选择标签页,选择添加文件夹,将上一步骤建立的 datassl 文件夹添加入卷中,装在路径分别是 /data/ssl


06.png

  1. 网络标签页默认。


07.png

  1. 端口设置标签页分别是:本地端口 8443 对应容器端口 443 ,本地端口 880 对应容器端口 80,类型默认TCP。(本地端口可以按照自己的群晖端口占用情况修改其他端口)


08.png

  1. 连接标签页保持默认。


09.png

  1. 环境标签页添加两个变量(群晖翻译有误,可变应该叫变量),分别是可变填写 HA_URL 对应值 http://你homeassistant的内网ip地址:8123可变填写 HA_PASSWD 对应值 HA的API密码(如何设置api密码请看 https://www.home-assistant.io/components/http/
    0.3.13 版本开始,支持新的 auth 认证模式,放弃旧的 api_passwd 认证,请在可变填写 HA_PASSWD 对应值 HA用户那边设置的 long live token(长访问令牌) 长访问令牌可以在你的hass用户管理页面最下方设置(HA从0.78开始支持)。http://你的ha_ip地址:8123/profile


10.jpg

  1. 最终点击应用,再应用,容器就运行起来了。我们可以打开容器的日志查看一下运行状态,最后一句应该是 [INFO] Starting Nginx...,这代表容器已经运行起来了。


11.png

5、端口映射

由于群晖默认占用 443 端口,所以在上一步骤端口设置里面我选择了 8443 作为监听端口,那么在路由器端口映射上,应该如下设置:(以爱快为例)

  • 内网地址: 群晖内网的ip地址。
  • 内网端口: 上一步骤设置的 8443
  • 协议: 保持默认tcp。
  • 外网地址: 保持默认全部。
  • 外网端口: 这里填写 443(如果你家的 443 端口被封了,那么也可以写8443,只要端口不冲突就行)。
  • 备注(可选): 备注一下这个端口映射是用来干嘛的,我这里写天猫精灵网关。


12.png

这时候可以用手机切换到 4g 网络,使用浏览器输入 https://你的域名:端口(如果你是上面端口映射设置的是 443 的话,冒号和端口都不需要写),这时候会弹出对话框,提示你需要输入用户名密码。我们回到群晖上一步的容器日志界面中有下图所示的 USERNAMEPASSWORD,这个就是系统自动生成的 web 用户密码。



13.png

输入用户密码,即可登陆管理界面,根据要求添加相应的设备到管理平台内。

6、关于内网访问管理平台

由于使用了 https 协议,所以必须使用域名访问否则会访问出错。

最简单方法是在本地电脑的 hosts 文件里面添加如下配置:

#群晖的IP地址  你公网的域名
192.168.1.70  tmall.abc.com

这样我们通过电脑 https://tmall.abc.com 访问就可以访问管理平台了。

7、设置天猫精灵开发者平台

上一步我们已经确定从公网访问我们的天猫精灵管理平台没有任何问题了,那么就需要到 天猫精灵开发者平台 登陆执行一下操作。

  1. 选择智能家居,填写技能名称。
  2. 账户授权连接: https://你的域名/authorize.php
  3. Client ID: 填写第三步 options.json 里面的 client_id,我这例子应该就是 qwertyuiopasdfghjkl
  4. Client Secret: 填写第三步 options.json 里面的 client_secret,我这例子应该就是zxcvbnmasdfghjkl
  5. 跳转 URL: 无需修改
  6. Access Token URL: https://你的域名/token.php
  7. 厂商登出 URL: 此项不填。
  8. 开发者网关地址: https://你的域名/gate.php
  9. 设备管理跳转连接: 此项不填
  10. 天猫精灵APP: 此项不填

(以上域名后放如果在第五步端口映射中的端口不是443端口的话,请在域名后方加入冒号端口。例:https://abc.com:8443

接下来下一步,点击开始测试。

此时会看到一个界面,点击账号配置。天猫精灵授权确认点击 yes。

等待转跳完毕看到您刚刚在上一步骤添加的设备证明已经成功了。

最后提供一个非群晖用户的 docker 命令模板

datassl 的目录内容和群晖的一样。

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!


评分

参与人数 11金钱 +101 收起 理由
jznhpt + 5 在下对你的景仰犹如滔滔长江之水,连绵不绝.
charles0568 + 5 在下对你的景仰犹如滔滔长江之水,连绵不绝.
dodojie + 7 在下对你的景仰犹如滔滔长江之水,连绵不绝.
leonxis + 5 膜拜大神!
zyang911 + 7 我来瀚思就为看你!
windgo + 10 膜拜大神!
Milo + 20 再来个小度在家
咸味土豆 + 10 又如滚滚黄河之水,一发不可收拾…….
qq200800704 + 7 又如滚滚黄河之水,一发不可收拾…….
lff520520 + 5 抢了沙发
Mirukuteii + 20 在下对你的景仰犹如滔滔长江之水,连绵不绝.

查看全部评分

Nero
回复

使用道具 举报

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
 楼主| 发表于 2018-8-18 15:20:37 | 显示全部楼层
leonxis 发表于 2018-8-17 20:14
同样增加失败了。
去掉了SSL后顺利的点开了增加设备,但是无法增加设备
而且日志里没有任何错误显示

我今天再部署一遍,排查过,发现在 server.php 中有bug。插入数据的数据库语句少了 zone,这个应该是 qebabe 大遗留下来的?

就是不知道为什么以前插入数据库,mysql没报错,但现在插入报错了。

如果出现无法新增的问题只需要给数据库 zone 字段添加默认值就好了。

群晖方法如下。

  1. 打开 Docker,选择我们的容器,点击详细按钮。
  2. 点击终端机,新建一个终端机。
  3. 复制这段命令 mysql -Dtmall -e "ALTER TABLE oauth_devices ALTER zone SET DEFAULT '';"
  4. Ctrl+A 再按 Ctrl+V,最后按 回车

14.png

问题修复。

Nero
回复

使用道具 举报

2

主题

99

帖子

665

积分

高级会员

Rank: 4

积分
665
金钱
566
HASS币
0
发表于 2018-9-13 09:42:22 来自手机 | 显示全部楼层
zyang911 发表于 2018-8-22 08:55
请问我用的是阿里云的证书 请问下载哪一个呢 用阿里云证书怎么配置options.json文件呢
所有的都运行成功了 ...

将阿里的证书逐一打开对比内容后发现,可下载阿里apache的证书来对应本配置。下载后解压得四个文件,chain.pem照用即可。那个.key文件直接改名成为privkey.pem使用(对,连扩展名都照改),而fullchain.pem则是那个对应你的域名以很长一串数字为文件名的那个.pem文件,文件名改过来即可(这个文件内含父子两级证书)。剩下的那个public.pem弃用。

评分

参与人数 2金钱 +15 收起 理由
番茄鸡蛋面 + 5 最新阿里证书,apache 下载下来三个,还有.
neroxps + 10

查看全部评分

回复

使用道具 举报

2

主题

47

帖子

266

积分

论坛积极会员

积分
266
金钱
219
HASS币
0
发表于 2019-3-20 02:04:24 | 显示全部楼层
grunner 发表于 2018-9-13 09:42
将阿里的证书逐一打开对比内容后发现,可下载阿里apache的证书来对应本配置。下载后解压得四个文件,chai ...

最新阿里证书,apache 下载下来三个,还有一个其他也下载,一共是5个两个重复的,XXXchain.crt对应更改后缀对应chain.pem。。那个.key文件直接改名成为privkey.pem使用,其他里面有一个.pem对应fullchain.pem
回复

使用道具 举报

26

主题

553

帖子

2726

积分

金牌会员

Rank: 6Rank: 6

积分
2726
金钱
2148
HASS币
100

教程狂人

发表于 2018-8-16 13:43:01 | 显示全部楼层
沙发已占,此贴又大大降低了猫精本地化门槛。
回复

使用道具 举报

13

主题

238

帖子

3278

积分

论坛元老

Rank: 8Rank: 8

积分
3278
金钱
3040
HASS币
0
发表于 2018-8-16 13:52:19 | 显示全部楼层
先打上一炮在看具体教程
回复

使用道具 举报

39

主题

1042

帖子

3826

积分

论坛元老

Rank: 8Rank: 8

积分
3826
金钱
2784
HASS币
0
发表于 2018-8-16 15:21:24 | 显示全部楼层
666 ,学习了 。顺带问一下, n大,在n1上能不能用这个容器啊 ,
回复

使用道具 举报

4

主题

282

帖子

3653

积分

论坛元老

Rank: 8Rank: 8

积分
3653
金钱
3371
HASS币
0
发表于 2018-8-16 15:52:55 | 显示全部楼层
看看,可以在x86上搞一搞
回复

使用道具 举报

0

主题

316

帖子

1732

积分

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1416
HASS币
0
发表于 2018-8-16 16:28:46 | 显示全部楼层
N神 厉害厉害  昨天还在说今天就有了  
回复

使用道具 举报

6

主题

181

帖子

613

积分

高级会员

Rank: 4

积分
613
金钱
432
HASS币
0
发表于 2018-8-16 17:45:14 | 显示全部楼层
666,这样反应就更快了
回复

使用道具 举报

74

主题

1942

帖子

7885

积分

元老级技术达人

积分
7885
金钱
5893
HASS币
430

活跃会员教程狂人

发表于 2018-8-16 20:42:05 | 显示全部楼层
我的猫精和小度最近好像不行了,哪天再折腾折腾,谢谢N大分享。
所有过往,皆为序章。
回复

使用道具 举报

6

主题

181

帖子

613

积分

高级会员

Rank: 4

积分
613
金钱
432
HASS币
0
发表于 2018-8-16 22:33:20 | 显示全部楼层
版主,出问题了。一直到第5步登陆都没问题,但是点添加设备就提示  超时或其他错误Empty reply from server

环境:1、  我的ha开启了https链接,放了SSL证书,地址是https://192.168.2.2:8888
然后群晖的环境变量设置了pass跟url是192.168.2.2:8888(这里试了填https://192.168.2.2:8888也是同样的问题)
2、我的群晖端口映射是443-8843,80-8880,路由器是8843-8843,8880-8880
请问这个是哪里的问题呢
回复

使用道具 举报

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
 楼主| 发表于 2018-8-17 08:53:24 | 显示全部楼层
leonxis 发表于 2018-8-16 22:33
版主,出问题了。一直到第5步登陆都没问题,但是点添加设备就提示  超时或其他错误Empty reply from server ...

把 ha证书去掉,SSL证书是基于域名验证,你用ip访问肯定是不合法证书,会访问api失败的。
Nero
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-20 08:05 , Processed in 0.091924 second(s), 41 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表