Back

【新手向】在 Ubuntu Linux 上配置自己的水表助手 FCM 推送服务端

水表助手一直以来使用的都是第三方的查询 API,获取动态更新一般都只能在本地轮询,考虑到会消耗流量以及电量,不能设置太高的频率。终于一天打算开坑做一个服务端,让服务器代替客户端进行更高频率的轮询,并通过 Google 家的 FCM 推送送达用户手机,减少流量电量消耗的同时,还能保证数据及时更新。

更高频率的轮询的代价就是,给第三方 API 造成较大的压力,尤其是我的服务端代码还不够完善,目前还没有过滤已签收的包裹和根据上一条动态更新时间进行弹性调整的特性,被发现之后服务器 IP 很快就被 Ban 了。尽管可以更换一台新的 VPS,或支持更多的 API 来解决,但不是长久解决之方案。

哔哔了这么多,就是希望每个有能力的用户自己搭建一个服务端(Windows 教程不提供了,安装 MongoDB、NodeJS 都比较简单,而且 Windows VPS 性价比较低,普通用户较少)。

服务器需求

  • 已安装 Linux 系统(本教程默认为全新 Ubuntu,不带 NodeJS 的)
  • 能够正常连接到 Firebase 服务器,一般选择墙外的机房

安装 Node.js

为了降低难度,我们直接使用 Linux 自带包管理器来安装。

在终端中依次运行下列命令:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

(如果你不是 Debian/Ubuntu 系 Linux,请到 这里 看如何安装)

安装好后,运行 node --version 查看版本号,确保你的 Node.js 安装版本是 8.4.0 或更高,否则服务端将无法运行。

安装 MongoDB

水表助手服务端以 MongoDB 作为数据库存放用户实例 ID 和快递包裹列表。

这里依旧使用包管理安装 MongoDB,请按照顺序执行命令完成安装:

添加公钥

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

创建并更新 apt 列表

根据实际系统版本选择要执行的命令:

Ubuntu 12.04 用户:

echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Ubuntu 14.04 用户:

echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Ubuntu 16.04 用户:

echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

更新

sudo apt-get update

安装

sudo apt-get install -y mongodb-org

执行完这行代码之后,再运行 sudo service mongod start 就可以启动数据库了(可能会自动启动好了)。

安装 Git

代码存放在 GitHub 上,克隆下来的时候需要用到 git

因此我们也需要安装 git(部分主机的系统可能自带):

sudo apt-get install git

下载最新服务端代码

寻找一个合适的位置存放水表助手服务端程序,在这里我偷个懒直接用 /root

将代码克隆到本地: git clone https://github.com/fython/PackageTracker-NodeServer

打开目录: cd PackageTracker-NodeServer

执行 npm install 安装服务端依赖。

编辑配置文件

复制一份 config.sample.js 并改名为 config.jscp config.sample.js config.js

根据需求编辑内容(可运行 nano config.js 打开编辑),示例:

config = {
  mongodb_server_url: 'mongodb://127.0.0.1:27017/ptpush', // MongoDB 数据库地址
  server_http_port: 3000, // HTTP 端口
  server_https_port: 3001, // HTTPS 端口 (可选)
  enable_https: true, // 是否启用 HTTPS,true 为启用,false 为禁用
  private_key_path: './cert/private.pem', // 证书私钥目录 (可选)
  certificate_path: './cert/file.crt' // 证书目录 (可选)
}

module.exports = config; // 其它请不要随意改动

通过 forever 守护进程启动

安装 forever 到全局:

npm install forever -g

启动服务器,并输出日志到指定文件:

forever start -o out.log -e err.log ./server.js

大功告成

你的服务器这时候应该跑起来了,在客户端填入你的服务器地址(不带 http://https://)和正确的端口,点击 “立即同步” 试试能否连通。

Submit
    西木野羰基
    西木野羰基  2017-12-10, 00:27

    我遇到了https服务器启动不起来的问题,因为不熟悉Node.Js,于是不知到怎样排错。https的私钥是pem文件,证书同时尝试了DER与PEM编码都不行。
    也没有看到日志里面有什么错误