搭建code-push-server热更新Cordova项目

背景

目前微软的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,最好再有RedisNginx

安装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.

登录:

搭建code-push-server热更新Cordova项目

登录成功后复制Token,填入命令行提示中。

搭建code-push-server热更新Cordova项目

创建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   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

pm2的文档地址:https://pm2.keymetrics.io/docs/usage/quick-start/

给TA打赏
共{{data.count}}人
人已打赏
运维

VueJS的H5包装成Cordova APP

2024-11-19 10:37:26

运维

Calibre桌面版豆瓣插件

2024-11-19 10:37:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索