完整开源的 Bark 服务后端,用来接收用户的推送请求并转发给苹果APNS。

mritd 646a6c673e Merge pull request #290 from Finb/dependabot/go_modules/golang.org/x/net-0.30.0 2 周之前
.github a7dfc96d97 Update ci.yaml 2 年之前
apns dc8de8416c Fix the problem of PAYLOAD SIZE being smaller than the actual available size 1 年之前
database 818c47c79e Fix the issue that any device can be registered in serverless mode 2 年之前
deploy f3651b0b74 fix-env iterate error 1 年之前
docs 7cf48306b0 update 1 年之前
.gitignore b5ef857446 Ignore .idea and format code 3 年之前
LICENSE db76c27cc9 add LICENSE 3 年之前
Procfile 29f045981d support serverless 2 年之前
README.md cf140a00f1 Update README.md 1 年之前
Taskfile.yaml 2f24a8f790 chore(task): add freebsd support 1 年之前
app.json 29f045981d support serverless 2 年之前
go.mod 059b9cf32f chore(deps): bump golang.org/x/net from 0.29.0 to 0.30.0 2 周之前
go.sum 059b9cf32f chore(deps): bump golang.org/x/net from 0.29.0 to 0.30.0 2 周之前
main.go 29f045981d support serverless 2 年之前
route_auth.go 306764bc17 Add support for URLPrefix 3 年之前
route_misc.go 306764bc17 Add support for URLPrefix 3 年之前
route_push.go 78f2e02891 support query args in json request 2 年之前
route_register.go 86894d6f11 Fixed the register failed without new key 3 年之前
router.go 306764bc17 Add support for URLPrefix 3 年之前
util.go a3113e21c6 feat(register): remove uuid, fix query parse 3 年之前

README.md

Bark

Bark is an iOS App which allows you to push customed notifications to your iPhone.

Table of Contents

Installation

For Docker User

Docker Automated build Image Size License

The docker image is already available, you can use the following command to run the bark server:

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

If you use the docker-compose tool, you can copy docker-copose.yaml under this project to any directory and run it:

mkdir bark-server && cd bark-server
curl -sL https://github.com/Finb/bark-server/raw/master/deploy/docker-compose.yaml > docker-compose.yaml
docker compose up -d

For General User

  • 1、Download precompiled binaries from the releases page
  • 2、Add executable permissions to the bark-server binary: chmod +x bark-server
  • 3、Start bark-server: ./bark-server --addr 0.0.0.0:8080 --data ./bark-data
  • 4、Test the server: curl localhost:8080/ping

Note: Bark-server uses the /data directory to store data by default. Make sure that bark-server has permission to write to the /data directory, otherwise use the -d option to change the directory.

For Developer

Developers can compile this project by themselves, and the dependencies required for compilation:

  • Golang 1.18+
  • Go Mod Enabled(env GO111MODULE=on)
  • Go Mod Proxy Enabled(env GOPROXY=https://goproxy.cn)
  • go-task Installed

Run the following command to compile this project:

# Cross compile all platforms
task

# Compile the specified platform (please refer to Taskfile.yaml)
task linux_amd64
task linux_amd64_v3

Note: The linux amd64 v3 architecture was added in go 1.18, see https://github.com/golang/go/wiki/MinimumRequirements#amd64

Nginx Proxy

Most users want to deploy the bark server on the intranet server, and then use Nginx to reverse proxy the bark server; here is a simple Nginx configuration example (we assume that the bark server is listening at 192.168.1.123:8080)

# generated 2020-03-26, Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.1.1d, modern configuration
# https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=modern&openssl=1.1.1d&guideline=5.4
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;

    }
}

Use MySQL instead of Bbolt

Just run the server with -dsn=user:pass@tcp(mysql_host)/bark, it will use MySQL instead of file database Bbolt

API V2

Please read API_V2.md.

Other

中文

Markdown support:

Contributing to bark-server

Development environment

This project requires at least the golang 1.12 version to compile and requires Go mod support.

  • Golang 1.16
  • GoLand 2020.3 or other Go IDE
  • Docker(Optional)

Update

Now the push certificate embedded in the program will never expire. You only need to update the program if the push fails due to the expired certificate.