Reading view

There are new articles available, click to refresh the page.

cloudflared 用起来爽歪歪😊

(Abstract)感觉用了 cloudflared 之后,服务器已经没有暴露 SSH 端口的必要了。但是注意 cloudflared 默认会自动更新,更新后需要手动启动才能运行。如果是远程机器且无 root 权限的,注意关闭自动更新功能。

智能家居之第三方监控接入 HomeKit

智能家居之第三方监控接入 HomeKit

相信很多和我一样的有宠家庭,都会为了掌握宠物的行踪或拆家的进展而购买了监控摄像头,通过互联网掌握藏在家中猫猫狗狗的踪迹,抑或是其他的为了家庭安全而购买摄像头起安保作用的家庭,都会面临相同的几个问题:我们真的需要云存储吗?我们真的信任摄像头厂商吗?我回家以后需要关掉摄像头吗?

智能家居之第三方监控接入 HomeKit

猫猫和我一样表示怀疑,以及各个厂商的云存储价格,打消了我的想法。我一开始的方案是将监控接入了群晖的 Surveillance Station,打开了群晖的动态提醒,但随之而来的便是每天无数的提醒,监控视野内但凡有一点点风吹草动,便会让我手机震动不停。

智能家居之第三方监控接入 HomeKit

直到我后来看到一篇关于 iCloud 安防摄像头的文档,为何不接入 HomeKit 白嫖无限 iCloud 存储呢?苹果还是相当良心的,摄像头存储的录像并不占用原有的 iCloud 空间。50 GB 方案:可添加一个摄像头。200 GB 方案:最多可添加五个摄像头。2 TB 及更高方案:不限制摄像头数量。作为高贵的美区 Apple One 超大杯车主,理论上是可以添加无数个摄像头的。具体的内容大家可以看下面的文档。

在 iCloud 中使用 HomeKit 安全视频储存加密安保摄像头录制的视频
了解如何在 iCloud 中使用 HomeKit 安全视频储存安保摄像头的视频。
智能家居之第三方监控接入 HomeKitApple Support
智能家居之第三方监控接入 HomeKit

话不多说,那就准备开搞!以往来说,其他的设备加入 HomeKit 我会选择通过 Home Assistant 进行中转,但是因为 HA 接入的摄像头好像并不支持 动态监测、人脸识别等 HomeKit 安防高级功能,所以我们这里会使用一个新的工具。

GitHub - koush/scrypted: Scrypted is a high performance home video integration and automation platform
Scrypted is a high performance home video integration and automation platform - GitHub - koush/scrypted: Scrypted is a high performance home video integration and automation platform
智能家居之第三方监控接入 HomeKitGitHubkoush
智能家居之第三方监控接入 HomeKit

Scrypted Docker 安装

Scrypted 本身是支持 Home Assistant Add On 的,所以不是通过 Container 安装 Home Assistant 可以方便的跟随这里的文档进行安装:

Home Assistant | Scrypted Docs
Video Integration Platform
智能家居之第三方监控接入 HomeKitScrypted Docs
智能家居之第三方监控接入 HomeKit

因为我的 Home Assistant 是通过 Docker 安装的 HA Core,不支持 Add On,所以这里需要通过 Docker 来进行安装,之前提到过,我的 Home Server 运行的是 NixOS,所以可以很方便的配置 Docker,具体的配置项如下,将其改为 Docker Compose 也很方便,所以这里不再提供。

{ config, pkgs, ... }: {
  virtualisation.oci-containers.containers."scrypted" = {
    autoStart = true;
    image = "koush/scrypted:latest";
    volumes = [ "/orchestr/static/docker/scrypted:/server/volume" ];
    extraOptions = [ "--network=host" ];
    environment = { TZ = "Asia/Shanghai"; };
  };
}

Scrypted 配置

安装完成后,我们便可以在浏览器内进入 scrypted 后台,注意这里的 https 不可省略,具体的网址为:

https://your-host-ip:10443

按照网页提示设置账号密码进入主界面选择 Management Console 即可。

scrypted 插件安装

智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit

点击左侧栏内 Plugins,然后点击 Install 进入以下界面:

智能家居之第三方监控接入 HomeKit

安装以下插件:

  • HomeKit
  • Onvif Camera Plugin 或 RTSP Camera Plugin
  • OpenCV Motion Detection
  • Snapshot Plugin
  • Video Analysis Plugin
  • WebRTC Plugin

注意,安装完 HomeKit 插件后切勿着急配置,继续看完下文。

Scrypted Server Address 设置

注意,此步不可省略,不然会出现摄像头无画面的情况。依次点击左侧边栏 SettingsGeneral ,即可看到界面设置。

智能家居之第三方监控接入 HomeKit

scrypted 摄像头配置

这里以 Onvif 协议举例,RTSP 配置过程基本一致,点击 Onvif Camera Plugin 进入插件配置,点击 Add New,进入以下界面:

智能家居之第三方监控接入 HomeKit

输入摄像头相关参数,点击 Create ,进入摄像头配置界面,这时,应当能看到摄像头的 SnapShot ,因为我这里已经配置过一遍了,所以界面可能略有不同。点击右侧的 Extensions ,将以下的插件勾选后点击 Save

智能家居之第三方监控接入 HomeKit

Scrypted 插件功能

一般情况下如果使用没有异常,尽可能保留默认配置即可。

Stream

智能家居之第三方监控接入 HomeKit

一般的家用摄像头都会有两个视频流,一般其中一个为高画质,一个为低画质,大家可以根据自己的需求选择相应的视频流,比如在家时适用高画质,出门适用低画质等。

SnapShot

智能家居之第三方监控接入 HomeKit

可以选择一些视频预览画面的选项,比如从哪个视频流截取画面等。

Motion Detection

智能家居之第三方监控接入 HomeKit

这里需要说明的是 Built In Motion Sensor 选项,Assist 为使用摄像头默认内置的动态监测算法,Replace 为使用 OpenCV 进行替代,如果你的摄像头没有内建相应功能的话,建议选择 Replace

Homekit 配置

这里有一个坑大家需要注意,HomeKit 摄像头的配置不是在 Scrypted 的 HomeKit 插件页面进行配置,而是在摄像头的 Extensions 页面,因为 Homekit 摄像头这里的默认配置是 Accessory 而不是Bridge 。对于摄像头而言我更青睐于配件而非桥接,毕竟一次性桥接一串设备进去,将来如果有什么问题需要单独配置某个设备的话,需要整个桥接的所有设备一起移除重新配置,较为麻烦。

智能家居之第三方监控接入 HomeKit

这里有一个选项,RTP Sender 提供两个选择,FfmpegScrpytedFfmpeg 大家众所周知,不做赘述,Scrpyted 为一个实验性选项,在这里有着更快视频转接速度,即更低的延时。

注意,这里配置完成后可能需要重启 Homekie 或 Scrypted 服务,注意观看网页顶部蓝色框的提示,这里不再截图展示。

接下来点击 Pairing ,打开 Home App,点击添加设备,扫描屏幕上的二维码,可能需要输入下方的 Pairing Code ,完成后即可将摄像头加入家庭。

智能家居之第三方监控接入 HomeKit

Home App 设置

在添加完摄像头,App 内便会引导进行摄像头的配置,比如视频录制选项,在家或外出是是否仅串流或开启录制等,以及动态监测是否监测人,动物,包裹等,如果是室外摄像头,还可以监测汽车等,也可以开启人脸识别,避免自己在家时被 Home App 不停地通知监测到有人进入摄像头。

下面只贴一些完成后的截图吧。

智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit

结束语

到此为止,将第三方摄像头接入 Homekit 的工作就宣告结束,我们可以在这步完成后便关闭摄像头的联网权限。如果大家在配置过程中遇到什么问题,可以留言,博主将在看到后及时回复。如果你对这里的内容略感兴趣,可尝试订阅本站,点击这里即可

Sign up for Digital Immigrants

Nobody from nowhere, belonging to no one.

Email sent! Check your inbox to complete your signup.

No spam. Unsubscribe anytime.

在自己服务器上安装 GitLab,代替 GitHub!

我的服务器上部署的代码、配置文件等内容大多是使用 Git 进行版本控制。为了能够使用、配置起来更方便,通常使用一整套系统去管理。很显然,在一些代码和配置文件里会有一些机密的内容,如一些密钥什么的,所以必须不能公开。GitHub.com 虽然提供了 Private 存放处功能,但是由于此功能是付费的,而且对于 Organization 的 Plan 还是极贵,并不十分划算;就算能有免费的 Private 存放处,把自己的很多重要的密钥放在第三方服务器上还是很不安全,所以能够 Host 在自己的主机上的,并且能够替代 GitHub.com 的软件/服务就是不错的选择。 本文将讲一下我在自己服务器上安装 GitLab 遇到的坑,进阶使用,包括使用 .gitlab-ci.yml 文件实现自动 Build,实时同步镜像到 GitHub。

能够 Host 在自己的服务器上的软件/服务其实有很多,比如 GitHub Enterprise,Bitbucket Server。不过再此还是推荐完全开源、免费、由社区维护的 GitLab Community Edition,没有任何限制,只是相比 Enterprise Edition 少了些本来也用不着的功能。

安装及遇到的坑

具体安装方法见文档,目前官方推荐的系统环境是 Ubuntu 16.04 LTS,安装起来非常简便,整个 Web 环境都会配置好。安装后的更多配置请参见文档。如果你的主机上跑了不只一个 Web 程序,那就需要对现有的 Web 软件做修改,需要参见官方的 Nginx 的配置文档。我的代码中使用了 sub_filter 来实现替换默认的标题,实现更好的 SEO,更加品牌化。 然后为了能达到更好的使用效果,还应该配置 SMTP 发件服务器,我使用的是 AWS SES;然后还需要一个支持 IMAP 的收件服务器实现 Reply by email,我使用的是 Gmail,收邮件的限制总比发邮件的限制少吧~这些的具体设置方法官方文档里都有。 安装后默认是允许注册的,如果你不想让外人注册,你需要直接去 Web 后台禁用。如果你想要开放注册,那么最好先想好新注册用户能干什么,比如和我一样:只允许新用户创建 Issues 和 Snippets,那就在 Web 后台将 Default projects limit 设置为 0,然后编辑后台的配置文件,禁止新用户创建 Group。同时建议在 Web 后台启用 reCAPTCHA 和 Akismet,防止恶意注册和恶意发 Issues。既然允许注册,那么也建议使用 OmniAuth 来支持第三方 OAuth 的方式登陆。

GitLab Runner

GitLab Runner 十分强大,但是并不是内置的,它可以极其方便的实现自动部署等非常有用的功能。安装配置好 Runner 后,在项目根目录下添加一个名为 .gitlab-ci.yml 的文件,以 master 分支为例,为了实现每次 commit 到 master 都将文件部署到 /var/gitlab/myapp ,那么文件内容应该是这样的:

1
2
3
4
5
6
7
pages:
stage: deploy
script:
- mkdir -p /var/gitlab/myapp
- git --work-tree=/var/gitlab/myapp checkout -f
only:
- master

注意,你需要先创建 /var/gitlab 文件夹,并设置这个文件夹的用户组为 gitlab-runner:gitlab-runner

1
$ sudo chown -R gitlab-runner:gitlab-runner /var/gitlab

.gitlab-ci.yml 核心的部分就是 script: ,这里的脚本都是由用户 gitlab-runner 执行的,你可以根据需要修改,后文中也给了几种范例。 然后 commit,去设置页面里里激活这个项目的 Runner。建议在设置里设置 Builds 为 git clone 而不是 git fetch ,因为后者常常出现奇奇怪怪的问题,前者的速度瓶颈主要在于网络传输。

部署 Runner 在同一个主机上,Or not?

官方的文档里强烈不推荐把 Runner 部署在同一个主机上,其实这种说法并不正确。官方不推荐这样做是因为一些 build 会花费很长时间,占用很多的 CPU 和内存资源。但是如果你执行的 build 脚本并不会这样,那么安装在同一个主机上也未尝不可。

常见的部署范例

这几种部署是我比较常用的,大家可以当作范例,具体根据自己的需要弄各种不同的部署。 以下几种 Web 的部署方式所消耗的系统资源都不多,而且由于使用了 nice ,并不会阻塞其他任务,可以部署在同一台主机上。

Jekyll

修改之前那个 .gitlab-ci.yml 文件的 git checkout 一行,替换为:

1
jekyll build --incremental -d /var/gitlab/myapp

检查 PHP 的编译错误

也是添加以下代码到 .gitlab-ci.yml 即可自动检查所有 PHP 文件的编译错误,编译通过的文件不会显示,只会显示编译错误的:

1
if find . -type f -name "*.php" -exec nice php -l {} \;  grep -v "No syntax errors"; then false; else echo "No syntax errors"; fi

自动与 GitHub 同步

以下过程需要 root 权限登陆到主机,或者在每行命令前添加 sudo。 首先,需要先给 gitlab-runner 用户一个单独的 SSH Key:

1
$ ssh-keygen -f /home/gitlab-runner/.ssh/id_rsa

然后,创建 /home/gitlab-runner/.ssh/known_hosts ,内容是:

1
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

之后,获取 /home/gitlab-runner/.ssh/id_rsa.pub 文件内容,在 GitHub 上添加这个 SSH Key。 由于是使用 root 帐号,弄完了之后不要忘了修改用户组:

1
$ sudo chown -R gitlab-runner:gitlab-runner /home/gitlab-runner/.ssh

然后,同样是通过 .gitlab-ci.yml 实现自动同步:

1
git push --force --mirror git@github.com:[Organization]/[Project].git

修改 [Organization][Project] 为你自己的名称即可。

谈谈安装在自己服务器上的 GitLab 的好处

文件都存储在自己的服务器里,安全性比较有保障,自己有最高权限,不会遇到项目被删的情况。部署时延迟极低,可靠性也高,不会遇到自己服务器没问题但是第三方服务宕机导致无法部署的窘况。 可以根据情况部署到离自己最近的服务器,或者是内部服务器,像 GitHub 的服务器就在美国东岸,亚洲这边连接并不快,国内也不稳定。 最关键的是,如果你本来就有个 VPS 什么的,也有很大的空闲,那么相当于你可以免费获得私有存放处,但是要注意性能需求,没有足够的空闲还是不要启用。 由于能够配置好实时同步镜像到 GitHub,GitLab 还有那么多 GitHub 没有的功能,其实已经可以完全使用 GitLab 作为主要的版本控制工具,GitHub 只是存一份镜像备用。

❌