From f257830b495fa9a88b68dde5a2ae910a75a29374 Mon Sep 17 00:00:00 2001 From: EasyChen Date: Wed, 2 Feb 2022 00:08:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8E=A8=E9=80=81ready?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE=EF=BC=8C=E4=B8=BA=E8=87=AA=E6=9E=B6?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=81=9A=E5=87=86=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++--- doc/安装文档.md | 6 +++++ docker-compose.self-hosted.yml | 35 ++++++++++++++++++++++++ push/.gitignore | 3 --- push/c.p12 | Bin 0 -> 3551 bytes push/cc.p12 | Bin 0 -> 3447 bytes push/clip.yml | 48 +++++++++++++++++++++++++++++++++ push/ios.yml | 48 +++++++++++++++++++++++++++++++++ 8 files changed, 139 insertions(+), 8 deletions(-) create mode 100644 docker-compose.self-hosted.yml delete mode 100644 push/.gitignore create mode 100644 push/c.p12 create mode 100644 push/cc.p12 create mode 100755 push/clip.yml create mode 100755 push/ios.yml diff --git a/README.md b/README.md index 98a888c..af62864 100644 --- a/README.md +++ b/README.md @@ -206,16 +206,13 @@ PushDeer主要面向以下三类用户 ```git clone https://github.com/easychen/pushdeer.git``` -### 配置推送证书 - -进入 `push` 目录,修改 `*.yml.sample` 为 `*.yml`。其中iOS应用和Clip使用两个分开的证书进行推送,`ios.yml` 是APP的配置、`clip.yml`是Clip的配置。注意根据开发和产品状态,修改`yml`中的值`production`。 - -默认配置中,`c.p12` 是APP的推送证书、`cc.p12`是Clip的推送证书。 ### 启动docker环境 运行 `docker-compose up -d`,启动API。默认访问地址为`http://127.0.0.1:8800`。可修改`docker-compose.yml`调整端口。 +> 亦可运行 `docker-compose -f docker-compose.self-hosted.yml up --build -d` 启动已配置推送功能的版本 + ### API 说明 [在线文档(Swagger)](https://ilovintit.github.io/pushdeer-api-doc/#/) diff --git a/doc/安装文档.md b/doc/安装文档.md index effedbf..3f4ad4e 100644 --- a/doc/安装文档.md +++ b/doc/安装文档.md @@ -44,6 +44,8 @@ services: - DB_TIMEZONE=+08:00 - DB_USERNAME=pushdeer - APP_DEBUG=false + - GO_PUSH_IOS_TOPIC=com.pushdeer.self.ios + - GO_PUSH_IOS_CLIP_TOPIC=com.pushdeer.self.ios.Clip ``` ### STEP2:配置 SSL 证书 @@ -80,6 +82,10 @@ services: #### iOS 推送 +可直接使用`PushDeer·自架版`客户端。 + +如自行编译客户端,需生成APP和Clip的推送证书,并按以下方式配置: + 进入 push 目录,修改 `*.yml.sample` 为 `*.yml`。其中iOS应用和Clip使用两个分开的证书进行推送,`ios.yml` 是APP的配置、`clip.yml` 是Clip的配置。注意根据开发和产品状态,修改`yml`中的值`production`。 默认配置中,`c.p12` 是APP的推送证书、`cc.p12`是Clip的推送证书。 diff --git a/docker-compose.self-hosted.yml b/docker-compose.self-hosted.yml new file mode 100644 index 0000000..7bcd2f1 --- /dev/null +++ b/docker-compose.self-hosted.yml @@ -0,0 +1,35 @@ +version: '2' +services: + mariadb: + image: 'mariadb:10.5.8-focal' + volumes: + - 'mariadb_data:/var/lib/mysql' + environment: + - MYSQL_ROOT_PASSWORD=theVeryp@ssw0rd + - MYSQL_DATABASE=pushdeer + ports: + - '3306:3306' + redis: + image: 'bitnami/redis:6.0.16' + environment: + - ALLOW_EMPTY_PASSWORD=yes + app: + #image: 'webdevops/php-apache:8.0-alpine' + build: './docker/web/' + ports: + - '8800:80' + volumes: + - './:/app' + depends_on: + - mariadb + - redis + environment: + - DB_HOST=mariadb + - DB_PORT=3306 + - DB_USERNAME=root + - DB_DATABASE=pushdeer + - DB_PASSWORD=theVeryp@ssw0rd + - GO_PUSH_IOS_TOPIC=com.pushdeer.self.ios + - GO_PUSH_IOS_CLIP_TOPIC=com.pushdeer.self.ios.Clip +volumes: + mariadb_data: \ No newline at end of file diff --git a/push/.gitignore b/push/.gitignore deleted file mode 100644 index 08039f1..0000000 --- a/push/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.yml -*.p12 -*.p8 \ No newline at end of file diff --git a/push/c.p12 b/push/c.p12 new file mode 100644 index 0000000000000000000000000000000000000000..6cffff2dc420615ad1e4d28dc949f4154e823802 GIT binary patch literal 3551 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 literal 0 HcmV?d00001 diff --git a/push/cc.p12 b/push/cc.p12 new file mode 100644 index 0000000000000000000000000000000000000000..3b98d88ddd229978d36e211b6077e3351e514773 GIT binary patch literal 3447 zcmY+Fc{CJ^yT@nDj3sMG6vEg-8T(EKnL!y_mhAgFgkH(ogjANXWglY;Awq_tsMpw+ z7-W4J#%>H*qHz12bMJlc{o^^$IiK(MJbykP7=|^34hVu_Sk>v7q!JJbN31{wARfai z4aTra{J~HdhJo;JM32WXRQ^F_bU?tLRrqfLgz?i~`0ooWKzbM(n2|Jc8;qMplj!Ie z0kIf{ARRtiT(H)+ZmVaIqv#Agwz3n>bQYs5w;7>6VhN?H-MeojohHuG!o6>=6Wd!X z!luTiN;Om&`M=UZ^5c94EEFF@oX94P?Y2x;(aP)Aml=hkT)SYK1k) z2^Jii&UxO7Ul-y+$PmK^-HZF$zB7WB{ypPl3&lrvC*s>v((4TSDz;bbr5GNP==SP` zRpuDzD1j;+(9nLWAbkbO$ziXQJ6gQXlg(-H_jdzA)IP2tHtW5Si++U2300W1XPL1^ov2n~afYYwNCy-^11Ej1-q=B!V3Pk4-t^dk=gy zq~?UyyEGZ;<$sy^x+O{6v__|=?^2opgmh++8GTS(mnBV@NMA9}DqI{q<>-)~4Rn9y z2b%RVZN6nq$Smz|4eHdCZcxfy*e#gEwXKx2@JY)Gx5_l=f3G5L&_*uWhLcu*(S(@g zRv4rMc_*BW4b5LN21d17$10R4H#u&3J16vZO<`8hA`>-J{Zg0@fp^bjk*%usyQ0TL zxP*_DeU>(00PYp0VMG@+W>O%#a@g2c25vg}FvHg-{O zcU7nlBQsbVLnN~bpMPnt<9Zv0I(;FAl=K^MO0zPkrc)**`kuay3d|XfyVvM#!9X{| z-(eBz9WW#~oIkX^#HIpTHQIhZR*oy~8T+FlU5ntx-^gxNA^uONkM~ z;3ZXJrn`!B$TUeQeMPA(=J~shKJ_n1W_@MA%qO|p_b!et6EA!>k-{rX!?p0gL(}%Y zb!NSOC78#S%yPNlW1f%^f^dy_$#MB;%+*Ca)Nft(JmF*l`BPd?-mcy?NQ93IynOZKL9QQoog@tewaFB~>-@TIqm~)|qS-hR-2D2Q_d=(B0ZZWciSiKJzW{ zsOG%Z6xk=EdPGx`4>K;rlA65SIxklktZ+8&w2Txe*|LCYDz>wEYa+@+bs|vrDJAZ& ztN0gITjRY>JT*6f>S|ry$2i2KSM+1r_8n*#4`1l$hD`pM*Mt$<_nhcobN>v8i|(D- zFtjgY&vW%4enUGkqy7o;10C!%ty#e%a$#dOV~JV)X;ez>mP9>nWAU#8KBzzUBZc4w zrpq8j{9#dnQ*f3kynS+Ex2vAsWHeK#J5*^fVSP&fK7pdleZSl_P&cqAVp>h+<`$M@qaD z^;u6pbFTBn7t93xt{WHG;5w4IgP*mkmGL7tk4t6sDxC(mH5|*J%ljV03*S@!7}NbU z5;yF%V^)D8l&sg0p4(7v)K?rHTCec-j5V5S`;h9cp9RlJ9$wDO^?dR=p|p8lYqYh@ z5}hvd{=gQ=l2evtT2$ChkLE=oN)jjr<{$Q{4{5_>0WX~>TuYT(W);rebI85;mT3fw z|Jznrc@oIARzY)pc?dJcSnd zha-S?Yd!6}S$r4La&|trcuQQy$yrNoBGCqC;Qhi%*bar1vU~Ns0}brk6~lN$6e43D zOWcifS2>yN%=Xt<%SB{r*2^Nga}hXjajAuk@t6W{&!)k~Lw4%co3KWr$xDVH6m^ZX z7#r!FXLVE=|G{=yMCR!N6wNN4pI?mM6LnE8Kze9Un{QP=1(n22#W3S4VN1Sh8`?(-~7_>^Gov4#^>8E)>OjFv^QlHYNzC;9|HXt&fpMv|9hvQ!6_Iq7S+?BGo3Zw37*D`_)wfa6=r2=i;WEA4DlZW?*xY}=$0e5V}pjq97$X--og zmZoC8#DeO~%qTHsaV(dNY}(QtC5h7gdTkelYvfK5Ti)annvnX=^0#4*Oc0AVVP*gF zC!T<#>#{Gc(Hn2d-3?_!=_eAqJ##YB+9i6g(kqSGRVUqS zf9@4jBNq{=!Kma3=K!8H!>^(VlcM%d`B=%N+ z-|;iL=n-B{BBtx?^Mi1jnMvo-$8W07K2T)TclR&sz_{dZn-3=AT%#Xf^klJu9{fyl z<3}HkJu@|y%Qj$>RR5Ww_(swGXw!~pU}094DMxS&fp@v=7!L_gU#^twT>WJO6kt zXV(Wu4Q#ql+c*-x_Q*nid^u?T#E};`$+V_$d2%fmZ|TD~-M!6UYpLAyA-|+RLGI@} z9)Zlb1rI9n(ma-oWqknBKyxu|yQNXCps>H!viyD|%!IeLE+s*;iT6XhxuJN{C)ytE zpZV2UE&;|}dahG3*Aof4cU$wKIU(GG77FHJVTd*mS?)?F3-OF6`sjUeOh_%R^nfkCXQ<7+1S?}IiY)~@hfkyYWD=GbpM5%{yBK& z9_LRh^RGE! Keys) + team_id: "HUJ6HAE4VU" # TeamID from developer account (View Account -> Membership) + +log: + format: "string" # string or json + access_log: "stdout" # stdout: output to console, or define log path like "log/access_log" + access_level: "debug" + error_log: "stderr" # stderr: output to console, or define log path like "log/error_log" + error_level: "error" + hide_token: true + +stat: + engine: "memory" # support memory, redis, boltdb, buntdb or leveldb diff --git a/push/ios.yml b/push/ios.yml new file mode 100755 index 0000000..f6f7b81 --- /dev/null +++ b/push/ios.yml @@ -0,0 +1,48 @@ +core: + enabled: true # enable httpd server + address: "127.0.0.1" # ip address to bind (default: any) + shutdown_timeout: 30 # default is 30 second + port: "8888" # ignore this port number if auto_tls is enabled (listen 443). + sync: false + max_notification: 1 + cert_path: "c.p12" + key_path: "" + cert_base64: "" + key_base64: "" + http_proxy: "" + pid: + enabled: false + path: "gorush.pid" + override: true + +api: + push_uri: "/api/push" + stat_go_uri: "/api/stat/go" + stat_app_uri: "/api/stat/app" + config_uri: "/api/config" + sys_stat_uri: "/sys/stats" + metric_uri: "/metrics" + health_uri: "/healthz" + +ios: + enabled: true + key_path: "c.p12" + key_base64: "" # load iOS key from base64 input + key_type: "p12" # could be pem, p12 or p8 type + password: "64wtMhU4mULj" # certificate password, default as empty string. + production: false + max_concurrent_pushes: 100 # just for push ios notification + max_retry: 0 # resend fail notification, default value zero is disabled + key_id: "66M7BD2GCV" # KeyID from developer account (Certificates, Identifiers & Profiles -> Keys) + team_id: "HUJ6HAE4VU" # TeamID from developer account (View Account -> Membership) + +log: + format: "string" # string or json + access_log: "stdout" # stdout: output to console, or define log path like "log/access_log" + access_level: "debug" + error_log: "stderr" # stderr: output to console, or define log path like "log/error_log" + error_level: "error" + hide_token: true + +stat: + engine: "memory" # support memory, redis, boltdb, buntdb or leveldb