部署自己的Bark服务端

本文最后更新于:2022年11月4日 下午

Bark是一款开源的消息推送服务,用于给 iPhone 发送自定义的内容,支持文字和链接。我们可以使用Bark作者Fin提供的服务端来发送通知,也可以使用别人的。但通知过程所有数据都会保存在服务器,这样并不安全。通过部署自己的 Bark 服务端,我们可以安全地推送一些敏感信息。部署自己的 bark-server,来进行消息提醒。Bark 分为客户端和服务端。其中,客户端用于接收消息;服务端用于推送消息。

官方项目地址:

https://github.com/Finb/bark-server
https://github.com/Finb/Bark

安装

最简单的,docker部署:

1
docker run -dt --name bark -p 8080:8080 -v `pwd`/bark-data:/data finab/bark-server

或者docker-compose启动,方便之后修改参数:

1
2
3
mkdir bark-server && cd bark-server
curl -sL https://git.io/JvSRl > docker-compose.yaml
docker-compose up -d

【可选】健康检查

为了监控,增加了一个健康检查,先修改docker-compose.yml文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3.8'
services:
bark-server:
image: finab/bark-server
build:
context: ./
dockerfile: Dockerfile
container_name: bark-server
healthcheck:
test: curl http://127.0.0.1:8080/healthz
restart: always
volumes:
- ./data:/data
ports:
- "8080:8080"

但是原镜像是没有curl这个命令的,我们需要加上,所以创建Dockerfile文件,写入:

1
2
FROM finab/bark-server
RUN apk --update --no-cache add curl

然后启动即可

1
docker-compose up -d --build

docker ps查看:

1
2
CONTAINER ID   IMAGE               COMMAND         CREATED         STATUS                   PORTS                                       NAMES
3dba0f99f5ea finab/bark-server "bark-server" 4 minutes ago Up 4 minutes (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp bark-server

打开防火墙

如果你装了防火墙的话,不要忘记放开端口,否则不能外网访问:

1
2
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload

iptables是另外的方法。

检查可用性

safari ,在网址一栏输入 http://你的ip:8080/ping 打开,看是否返回类似下面的信息:

1
{"code":200,"message":"success","timestamp":1652768076}

或者输入 http://你的ip:8080/healthz ,看网页是否返回 ok

添加nginx反代

用IP访问确实难看,换成域名访问还需要用nginx反代,这里准备一个域名,解析到你的服务器IP。
创建nginx配置文件:

1
vim /etc/nginx/conf.d/bark.conf

填入一下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
server {
listen 80;
listen [::]:80;
# Replace bark.app.dev with your real domain name.
server_name bark.app.dev;

return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Replace bark.app.dev with your real domain name.
server_name bark.app.dev;

# ssl_certificate /path/to/signed_cert_plus_intermediates;
# ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;

# modern configuration
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;

# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;

# verify chain of trust of OCSP response using Root CA and Intermediate certs
# ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

# replace with the IP address of your resolver
#resolver 127.0.0.1;

location / {

log_not_found on;
# Replace http://192.168.1.123:8080 with the listening address of the bark server.
proxy_pass http://192.168.1.123:8080;

proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;

proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;

}
}

nginx -t 验证一下是否有问题。

申请SSL证书

certbot申请SSL证书,具体安装看官网👉certbot

我的是:

1
2
yum install certbot
certbot --nginx

按照指示来就好。

客户端使用

下载bark app,打开,点击右上角的 + 号,添加刚刚的域名或者ip

域名格式: https://你的域名 ,比如说 https://api2.day.app

ip格式: http://你的ip:你的端口 ,比如说 https://123.45.67.89:8080

之后回到首页,点击 注册设备 获取你的 Device Key

获取key

打开bark,在界面点击☁云朵图案。

然后点击要用的服务器,点击 Copy address and key。即可。