自建 Bark 后端服务
2022/04/08bark
bark-server
self-hosting
Bark 是一款可以给 iPhone 发送自定义推送的服务,你可以利用 Bark 做一些有趣的事情,比如我之前分享的:配合 SmsForward 转发 Android 设备的短信至 iPhone。Bark 本身提供后端服务,同时也开源了服务端代码,你可以利用 docker 轻松在服务器端部署私有化 Bark 后端服务。
之前在博客有提到过我闲置了一个腾讯云虚拟主机,由于域名备案的关系,现在无法正常使用。我想与其闲置在那里,不如拿来做点有趣的事情。
我本身对服务器这方面不是特别了解,看到 Bark 后端只提供了 docker 这一种部署方式。本来可以在腾讯云服务器的管理面板中直接重置系统镜像为 docker,这时忽然想起来,之前建站经常要用到的宝塔面板就可以安装 docker 管理器,宝塔面板里编辑服务器里的文件也比较方便,所以就先安装了宝塔面板,方便我后续进行操作。
按照官方的教程,我成功地在服务器中部署好了 Bark 后端服务。本来想解析一个二级域名push.iduan.me
在这台服务器上,方便配置。谁知解析生效还没过 10 分钟,就被腾讯云拦截了,由于这个域名还没有备案,按照相关法律法规的要求,解析是无法生效的,因此在配置后端服务时,只能填写 IP 地址,不过影响也不大~
最麻烦的是给这个自建的后端服务添加 SSL 支持,官方教程只是阐述了怎么部署支持 http 访问的后端,根本没提 SSL 的事情。以前在宝塔面板里为网站开启 https 访问的方法在这里完全行不通,为此又耗费大量时间去网络中搜索,等这套后端服务彻底搞好的时候已经是半夜两点了……
以下是服务搭建过程中开启 SSL 的一点点笔记:
✍🏻为 IP 地址申请 SSL 证书
大部分云服务商不支持为 IP 地址申请 SSL 证书,可以访问 ZeroSSL 申请 IP 地址的SSL证书,免费账户申请的证书有效期只有三个月,而且不支持自动续签。
将签发的证书(两个.crt
文件,一个.key
文件)上传至/www/server/nginx/conf/cert
目录下(没有 cert 文件夹就新建一个)
✍🏻为服务器启用 SSL
修改 /www/server/nginx/conf
路径下 nginx.conf
配置文件,添加以下内容:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name 1.2.3.4;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
ssl_certificate cert/certificate.crt;
ssl_certificate_key cert/private.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate cert/ca_bundle.crt;
location / {
proxy_pass http://127.0.0.1:8080;
}
注意:
- 请将第4行中的
1.2.3.4
修改为服务器 IP 地址; cert/certificate.crt
、cert/private.key
和cert/ca_bundle.crt
均为相对路径下存放的证书文件,绝对路径为:/www/server/nginx/conf/cert
✍🏻解决部分 Android App 连接 Bark 后端服务时报错的问题
开启 SSL 之后,在部分 Android 应用内访问服务器后端地址时可能会报错“java security cert.CertPathValidatorException: Trust anchor for certification path not found”,原因是后端服务在部署 SSL 时缺少了中间证书。
你可以利用 https://www.myssl.cn/tools/downloadchain.html 这个工具,使用已有的cert/certificate.crt
文件快速生成中间证书,最后会得到chain.crt
这个文件。
用文本编辑器打开certificate.crt
,在所有代码后面依次添加ca_bundle.crt
、chain.crt
这两个文件里的内容,最后的效果应该是这样的:
-----BEGIN CERTIFICATE-----
这里是 certificate.crt 原本的所有内容
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
这里是 ca_bundle.crt 文件中的所有内容
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
这里是 chain.crt 文件中的所有内容
-----END CERTIFICATE-----
保存文件,用这个编辑之后的certificate.crt
文件替换服务器中之前上传的的certificate.crt
,个别应用中报错的问题即可解决。