
# PushDeer 安装文档

  - ⚠️ 当前PushDeer依然在开发中，API和安装文档均有可能调整。
  - ⚠️ 当前安装文档仅 iOS 版可用

## API服务器的安装

默认的 `docker-compose` 是为开发准备的，不适合放置到线上，以下做调整：

1. 将`MySQL`服务独立出来，建议直接采用云厂商的数据库服务。
1. 设置环境变量，关闭调试信息和接口
1. 配置https

### STEP0：clone 项目代码

`git clone https://github.com/easychen/pushdeer.git`

### STEP1 ：编写线上环境的 docker-compose.yml ，替换环境变量 

```yml
version: '2'
services:
  redis: 
    image: 'bitnami/redis:6.0.16'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
  app:
    #image: 'webdevops/php-apache:8.0-alpine'
    build: './docker/web/'
    ports:
      - '80:80'
      - '443:443' # 开放 https 需要的接口
    depends_on:
      - redis
    volumes:
      - './:/app'
    environment:
      - DB_DATABASE=pushdeer
      - DB_HOST=clouddb.com
      - DB_PASSWORD=thep@ssw0rd
      - DB_PORT=3306
      - DB_TIMEZONE=+08:00
      - DB_USERNAME=pushdeer
      - APP_DEBUG=false
```

### STEP2：配置 SSL 证书

#### 放置证书文件

申请域名对应的 SSL 证书，获得证书文件（ `example.crt` ）和私钥文件（ `example.key`）。
在项目根目录下建立 `ssl` 目录，将证书文件重命名为 `server.crt` 和 私钥文件重命名为 `server.key` 。

如果你下载的证书中还包含根证书(root_crt)，可将根证书文本追加到 `server.crt` 之后。 

#### 修改虚拟host配置

修改 `docker/web/vhost.conf` 中被注释掉的[这三行](https://github.com/easychen/pushdeer/blob/10e4d3bb62d8d66d4739598a8f4af32eda4cceef/docker/web/vhost.conf#L27)。

```conf
<VirtualHost *:443>
    ServerName yourdomain.com
    ServerAlias *.vm docker.vm
    DocumentRoot "/app/api/public"
    <Directory /app/api/public>
        Options  FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    SSLEngine             on
    SSLCertificateFile    /app/ssl/server.crt
    SSLCertificateKeyFile /app/ssl/server.key
</VirtualHost>
```

### STEP3：配置推送证书

进入 push 目录，修改 `*.yml.sample` 为 `*.yml`。其中iOS应用和Clip使用两个分开的证书进行推送，`ios.yml` 是APP的配置、`clip.yml` 是Clip的配置。注意根据开发和产品状态，修改`yml`中的值`production`。

默认配置中，`c.p12` 是APP的推送证书、`cc.p12`是Clip的推送证书。

### STEP4：构建并运行镜像

运行 `docker-compose up -d --build`，启动API。访问 `https://yourdomain.com` 即可查看到API服务器默认网页。

## iOS客户端的编译

### 编译

参考 ios 目录下的[安装说明](https://github.com/easychen/pushdeer/tree/main/ios/PushDeer-iOS)，配置项目

修改以下内容：

1. 更换项目中的名称和标识（ 请勿直接使用PushDeer的名称和标识 ）
1. 将项目中的 Bundle Identifier （ xcode.proj文件、General标签 ）改为和通知证书响应的
1. 将项目中的 签名和team更换为用于上架的开发者的（xcode.proj文件、Signing & Capabilities标签）
1. 修改[API接口中的域名](https://github.com/easychen/pushdeer/blob/10e4d3bb62d8d66d4739598a8f4af32eda4cceef/ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift#L37)，替换为之前安装的服务



