背景
目前微软的appcenter已经不再提供Cordova的code-push服务,只能自己搭建服务器了:
Cordova不再支持:https://devblogs.microsoft.com/appcenter/announcing-apache-cordova-retirement/
Github
上有个开源版本,地址:https://github.com/lisong/code-push-server
注意,这个仓库2019年后就没更新了,只能使用比较老的code-push版本
下载安装
需要Nodejs
环境,以及MySQL
,最好再有Redis
和Nginx
安装Node环境
# 下载
wget https://nodejs.org/dist/v16.13.0/node-v16.13.0-linux-x64.tar.xz
sudo mkdir -p /usr/local/lib/nodejs
# 解压
sudo tar -xJvf node-v16.13.0-linux-x64.tar.xz -C /usr/local/lib/nodejs
配置环境变量path
vi .bash_profile
#添加一行
export PATH=/usr/local/lib/nodejs/node-v16.13.0-linux-x64/bin:$PATH
# 刷新
source .bash_profile
# 测试
node -v
# 输出:v16.13.0
从仓库下载
下载 code-push-server 仓库
git clone https://github.com/lisong/code-push-server.git
cd code-push-server
# 安装依赖
npm install
配置code-push-server
需要配置数据库以及文件存储路径,code-push-server
支持很多种对象存储,本地直接使用本地文件存储即可,STORAGE_TYPE=local
配置config.js
找到config/config.js配置数据库和本地存储路径
配置数据库
// config/config.js
db: {
username: process.env.RDS_USERNAME || "root",
password: process.env.RDS_PASSWORD || "xxxxx",
database: process.env.DATA_BASE || "codepush",
host: process.env.RDS_HOST || "127.0.0.1",
port: process.env.RDS_PORT || 3306,
dialect: "mysql",
logging: false,
operatorsAliases: false,
}
配置本地存储
配置本地存储storageDir和dataDir,先把相关目录建好,不然会报错。
mkdir -p /root/codepush/storage /root/codepush/data
注意:downloadUrl比较重要,app访问的时候需要配置成可以访问的外网地址。
// 配置本地地址
local: {
storageDir: process.env.STORAGE_DIR || "/root/codepush/storage",
downloadUrl: process.env.LOCAL_DOWNLOAD_URL || "http://codepush.xxxx.com/download",
public: '/download'
},
common: {
/*
* tryLoginTimes is control login error times to avoid force attack.
* if value is 0, no limit for login auth, it may not safe for account. when it's a number, it means you can
* try that times today. but it need config redis server.
*/
tryLoginTimes: 0,
// CodePush Web(https://github.com/lisong/code-push-web) login address.
//codePushWebUrl: "http://127.0.0.1:3001/login",
// create patch updates's number. default value is 3
diffNums: 3,
// data dir for caclulate diff files. it's optimization.
dataDir: process.env.DATA_DIR || '/root/codepush/data',
// storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3"| "oss" || "tencentcloud")
storageType: process.env.STORAGE_TYPE || "local",
// options value is (true | false), when it's true, it will cache updateCheck results in redis.
updateCheckCache: false,
// options value is (true | false), when it's true, it will cache rollout results in redis
rolloutClientUniqueIdCache: false,
}
配置Jwt密码
生成tokenSecret,配置jwt,随机产生一个就可以
https://www.grc.com/passwords.htm
jwt: {
// Recommended: 63 random alpha-numeric characters
// Generate using: https://www.grc.com/passwords.htm
tokenSecret: process.env.TOKEN_SECRET ||'6GGSdSsY27vD6L0iIZUbuVjUnTjLuyxp3HEyCy9s85P085syYkOa8aAnGWefY3p'
},
初始化数据库
新建好数据库之后,可以执行sql下面的文件
sql/codepush-*.sql
,不过一般用命令初始化数据
./bin/db init --dbhost 127.0.0.1 --dbuser root --dbpassword 'yourPWD'
启动code-push-server
启动code-push-server
运行命令:
#后台运行
nohup ./bin/www &
# 如果退出shellj停止执行,可以使用setsid,在新会话中执行
setsid ./bin/www &
#[2021-12-01T13:40:44.397] [INFO] startup - Listening on port 3000
curl localhost:3000
# <!DOCTYPE html><html><head><title>CodePushServer</title>...
配置nginx访问
前提已经有nginx服务器了,需要在nginx的配置文件扫描路径下增加一个codepush.conf
server {
server_name codepush.xxxx.com;
location / {
proxy_pass http://127.0.0.1:3000/;
}
}
# 重启服务
nginx -s reload
code-push客户端访问
安装使用code-push-cli
需要降级使用code-push-cli,最新的3.0.0不兼容(迁移到微软appcenter了),默认账户密码:admin/123456
跳转到:http://codepush.xxxx.com/auth/login?hostname=xxxxx
npm i code-push-cli@2.1.9 -g
code-push login http://codepush.xxxx.com
# Successfully logged-in. Your session file was written to C:Usersgary.fuAppDataLocal.code-push.config. You can run the code-push logout command at any time to delete this file and terminate your session.
登录:
登录成功后复制Token,填入命令行提示中。
创建app
登录成功之后:
# 创建应用
code-push app add ConnectApp Android Cordova
code-push app add ConnectAppIOS iOS Cordova
# 查看列表
code-push app list
# 查看keys
code-push deployment list ConnectApp --displayKeys
Codova中使用
配置cordova插件
需要安装cordova-plugin-code-push插件。
配置config.xml
<platform name="android">
<!--Production生产环境-->
<preference name="CodePushDeploymentKey" value="Pni_8l4_HHxGEm5d0x31vWxb8xxxxxxxxxx" />
<preference name="CodePushServerURL" value="http://codepush.xxxxx.com" />
</platform>
<platform name="ios">
<!--Production生产环境-->
<preference name="CodePushDeploymentKey" value="Pni_8l4_HHxGEm5d0x31vWxbxxxxxxxxxxxxx" />
<preference name="CodePushServerURL" value="http://codepush.xxxxx.com" />
</platform>
发布Release
使用code-push发布命令,Android和iOS需要分开两个发布:
code-push release-cordova ConnectApp Android -d Production --description "new android release"
code-push release-cordova ConnectAppIOS iOS -d Production --description "new ios release"
App中调用
在Cordova的App中使用:
if (window.cordova && window.codePush) {
window.codePush.sync() // 默认ON_NEXT_RESTART安装
}
账户管理
默认账户是admin,可以修改密码使用,也可以注册新账号
修改默认密码
使用curl命令修改密码,也可以使用code-push-web客户端,注意需要使用登录获取的Token。
curl -X PATCH -H "Authorization: Bearer ${token}" -H "Accept: application/json" -H "Content-Type:application/json" -d '{"oldPassword":"123456","newPassword":"654321"}' http://127.0.0.1:3000/users/password
# 响应{"status":"OK"}表示成功了,可以使用新密码登录
也可以在启动code-push-web之后图形界面中修改密码。
注册账号
注册账号似乎只能用code-push-web客户端操作,命令行似乎没有效果,在自己本地启动客户端即可
注意:注册需要发送激活邮件,code-push-server需要配置了smtp相关配置:
smtpConfig:{
host: "smtp.163.com",
port: 465,
secure: true,
auth: {
user: "",
pass: ""
}
},
下载code-push-web
下载客户端:
git clone https://github.com/lisong/code-push-web.git
cd code-push-web
npm install
修改配置并启动
修改src/config.js文件
export const common = {
api: {
URL: 'http://codepush.xxx.com', // production code-push-server address
devURL: 'http://codepush.xxx.com', // development code-push-server address
},
};
启动:
npm start
# http://localhost:3000
剩下的都是图形界面操作,这里不再截图了。
配置自动重启
code-push-server似乎不是很稳定,容易崩溃,可以使用pm2管理起来,自动重启
下载pm2
npm install -g pm2
# 启动
pm2 start ./bin/www --watch
查看状态
pm2 status
##################
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ www │ fork │ 32 │ online │ 0% │ 70.6mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘