这篇文章主要是作为我另一篇文章的搭配使用,codepush用微软的固然方便,但是总是会有需要自定义的时候,这就需要自己搭建推送服务端了,话不多少,进入正题。
参考:
环境:
Linux CentOS 7.5 + mysql80-community-release-el7-1.noarch.rpm + node.js 10.14.0 + code-push-server 0.5.2
由于这是在虚拟机上操作,Linux都是刚安装的,因此从零开始将步骤记录下来
Linux安装不写了,附上我用的os下载地址:http://mirrors.aliyun.com/centos/7.5.1804/isos/x86_64/CentOS-7-x86_64-Everything-1804.iso
系统跑起来后,发现连wget下载指令都跑不了,先用yum -y install wget
解决一下
安装git
yum install git-core
安装vim
yum -y install vim
安装screen(方便多屏操作,这里暂时用不上)
yum install screen
然后自然是把MySQL官网的下载地址拿过来执行下载(Linux下载文件指令:"wget -P" + 存放目录 + 下载地址):
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
rpm文件很小,下载好之后配置好yum源
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
这时候看看哪些版本是可用的(通过命令vi /etc/yum.repos.d/mysql-community.repo进入编辑格式,将你需要的版本enabled改为1,其它的版本改为0,当所有版本enabled=1时,默认启动最新版本的MySQL)
这里装的是5.7版本
yum repolist all | grep mysql
然后开始安装,安装过程中会需要确认安装内容,输入y
回车即可
yum install mysql-community-server
安装完成之后启动服务
service mysqld start
然后查看服务状态
service mysqld status
MySQL初始会生成一个随机密码,这时候通过日志查看随机密码
grep "temporary password" /var/log/mysqld.log
接下来登录MySQL
mysql -u root -p
输入密码登录成功后修改一下密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Test.1234';
然后下载node.js、解压、删除压缩包
cd /
wget https://nodejs.org/dist/v10.14.0/node-v10.14.0-linux-x64.tar.xz
tar -xvf node-v10.14.0-linux-x64.tar.xz -C /
rm -rf node-v10.14.0-linux-x64.tar.xz
建立软连接,建立完查看版本号试试是否成功
ln -s /node-v10.14.0-linux-x64/bin/npm /usr/local/bin/
ln -s /node-v10.14.0-linux-x64/bin/node /usr/local/bin/
node -v
code-push搭建
安装PM2
npm i -g pm2
ln -s /node-v10.14.0-linux-x64/lib/node_modules/pm2/bin/pm2 /usr/local/bin
这里有两种方法(两种方法后面会有一点不一样):
1、直接安装code-push-server,修改配置文件
npm install code-push-server -g
cd /node-v10.14.0-linux-x64/lib/node_modules/code-push-server/config
vim config.js
2、将code-push代码下载到本地,修改配置文件
git clone https://github.com/lisong/code-push-server.git
cd code-push-server
npm install
cd config
vim config.js
配置文件修改说明:
初始化数据库之前,需要修改一下配置文件config.js,首先把数据库配置修改一下(其实这里只修改了密码),然后需要修改local.storageDir、local.downloadUrl、common.dataDir、jwt.tokenSecret几个值分别说明一下:
1、local.storageDir:修改为自己的路径,确保有读/写权限(图中路径是提前创建好的文件夹)
2、local.downloadUrl:文件下载地址 CodePush Server 地址 + '/download' download对应app.js里面的地址(这里只修改了IP地址)
3、jwt.tokenSecret:登录jwt签名密钥,从https://www.grc.com/passwords.htm获取随机字符串,并替换值INSERT_RANDOM_TOKEN_KEY
4、common.dataDir:修改为自己的路径,确保有读/写权限(图中路径是提前创建好的文件夹)
初始化code-push-server的MySQL数据库
cd ../
./bin/db init --dbhost "127.0.0.1" --dbport "3306" --dbuser "root" --dbpassword "Test.1234"
创建process.json配置文件
vim process.json
代码如下(其中script是code-push-server的代码路径,CONFIG_FILE则使用刚才修改的config.js配置文件):
{
"apps" : [
{
"name" : "code-push-server",
"max_memory_restart" : "300M",
"script" : "bin/www",
//如果是使用方法二,也就是从github直接下载源码安装的话,script使用安装路径下的bin/www
"instances" : "max", //开启实例数量,max为cpu核数
"exec_mode" : "cluster", //集群模式,最大提升网站并发
"env" : {
"NODE_ENV" : "production",
"PORT" : 3000,
"CONFIG_FILE" : "/node-v10.14.0-linux-x64/lib/node_modules/code-push-server/config/config.js"
//如果是使用方法二,也就是从github直接下载源码安装的话,CONFIG_FILE使用安装路径下的config/config.js
}
}
]
}
添加cors库(解决跨域访问)
npm install cors
编辑app.js,引用cors库
vim app.js
增加以下代码引用cors
var cors = require('cors')
app.use(cors());
列一下pm2几个命令:
pm2 start process.json // 开启
pm2 restart process.json //重启
pm2 stop process.json // 停止
// pm2查看日志
pm2 ls
pm2 show code-push-server
tail -f "output file path"
再用命令验证一下页面
curl -I http://192.168.216.128:3000/
注意:
按照步骤走到这里会发现打不开页面,因为虚拟机中的Linux系统并没有开发端口,需要开放端口
firewall-cmd --zone=public --add-port=3000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port
效果图:
默认账号admin,密码123456
更新code-push-server
// 方法一:通过npm直接安装code-push-server
npm install -g code-push-server@latest
cd /node-v10.14.0-linux-x64/lib/node_modules/code-push-server
./bin/db upgrade --dbhost "127.0.0.1" --dbport "3306" --dbuser "root" --dbpassword "Test.1234"
// 更新数据库
pm2 restart code-push-server # restart service
// 方法二:从github直接下载源码安装code-push-server
cd /path/to/code-push-server
git pull --rebase origin master
./bin/db upgrade --dbhost "127.0.0.1" --dbport "3306" --dbuser "root" --dbpassword "Test.1234"
// 更新数据库
pm2 restart code-push-server # restart service
App端
Ionic具体可参考原生安卓集成Ionic3+CodePush,react native资料稍微多一点就网上自己找吧
code-push-server搭建完成运行起来了,客户端这里通过code-push-cli去管理code-push-server。
code-push login http://192.168.216.128:3000
// 修改管理员密码 示例:
curl -X PATCH -H "Authorization: Bearer mytoken" -H "Accept: application/json" -H "Content-Type:application/json" -d '{"oldPassword":"123456","newPassword":"654321"}' http://192.168.216.128:3000/users/password
App端配置config.js
<platform name="android">
<preference name="CodePushDeploymentKey" value="****" />
<preference name="CodePushServerUrl" value="http://192.168.216.128:3000/" />
</platform>
<platform name="ios">
<preference name="CodePushDeploymentKey" value="****" />
<preference name="CodePushServerUrl" value="http://192.168.216.128:3000/" />
</platform>
通过Web管理code-push-server
不想用code-push-cli可以使用web管理code-push-server。
修改code-push-server的配置,在config.js中的common中加入web的地址:
"codePushWebUrl":"http://192.168.216.128:3001"
把code-push-web源码下载到本地,安装后修改配置(正式线与测试线的地址)
cd /
git clone https://github.com/lisong/code-push-web.git
cd code-push-web
npm install
vim ./src/config.js
运行:
// 测试直接运行即可
npm start
// 正式发布先build打包
npm run build --release
cd build
npm install
node server.js
code-push常用命令
code-push login http://192.168.216.128:3000
code-push logout 注销
code-push access-key ls 列出登录的token
code-push access-key rm <accessKye> 删除某个 access-key
code-push app add 在账号里面添加一个新的app
code-push app remove 或者 rm 在账号里移除一个app
code-push app rename 重命名一个存在app
code-push app list 或则 ls 列出账号下面的所有app
code-push app transfer 把app的所有权转移到另外一个账号
code-push deployment add <appName> <deploymentName> 部署一个环境
code-push deployment rm <appName> 删除部署
code-push deployment ls <appName> 列出应用的部署
code-push deployment ls <appName> -k 查询部署环境的key
code-push deployment history <appName> <deploymentNmae> 查看部署的历史版本信息
code-push deployment rename <appName> <currentDeploymentName> <newDeploymentName> 重命名一个部署
支持的储存模式
local (default) // 默认本地
qiniu (qiniu) // 七牛云存储
s3 (aws) // 亚马逊云存储
oss (aliyun) // 阿里云存储
tencentcloud // 腾讯云存储