code-push私有部署

本文最后更新于:2023年8月15日 下午

code-push私有部署

由于code-push服务器是在国外,微软这货又不开源服务器代码,国内有些用户更新的时候卡到生活不能自理

万能的git上有个大神搭建了code-push的私服:

https://github.com/lisong/code-push-server/

一开始我在windows上搭建好了,不过真的很麻烦,很多命令windows是不支持的,而且还要开ngrok域名,最好还是在linux上弄吧

按照文档安装还是比较顺利的

1、安装新版的node

     linux上的node版本可能是老的,我们去官网https://nodejs.org/en/download/下载linux二进制的对应版本

     wget https://nodejs.org/dist/v6.11.3/node-v6.11.3-linux-x64.tar.xz

     解压命令

        xz -d ****        xz文件先解压成tar文件

        tar -xvf ****    解压tar文件

     然后把node的主文件夹加到环境变量里

     echo $PATH

     vim ~/.bashrc  

     在文件末尾加这句:export PATH=/usr/local/node/bin:$PATH

     source ~/.bashrc #刷新环境变量

     网上有人说只需建立快捷方式在/usr/local/bin文件夹即可,

     ln -s /usr/local/node/bin/node  /usr/local/bin

     因为这个文件夹在path中,亲测可行,但是后面安装nrm,code-push等等全部要快捷方式一遍

     TIPS:后面安装cnpm和nrm时需要设置node文件夹的权限,不是很懂这个1,2,4的权限,大力出奇迹 sudo chmod 777 node 

2、按照readme文档安装code-push-server

1
2
$ npm install code-push-server -g #安装
$ code-push-server-db init --dbhost localhost --dbuser root --dbpassword ****** --dbport 33308 #初始化mysql数据库

     

3、配置

     vim config/config.js

     配置数据库的连接参数

     配置热更新压缩包存储方式,common中storageType,默认local,支持七牛云,亚马逊s3,阿里云oss,local

     配置local存储的文件夹和下载地址(文件夹需要手动新建 )

     common的dataDir好像是增量更新用的,cordova目前还不支持,RN的热更新支持

     sudo chmod 777 codepushworkspace

4、插件安装

     我这里只能说说cordova的相关内容,等啥时候玩RN再来补充(像我这么懒得,这句话还是当没看见好了)

     插件地址:https://github.com/Microsoft/cordova-plugin-code-push

     原始的是这样子的:

1
2
3
4
5
6
<platform name="android">
    <preference name="CodePushDeploymentKey" value="YOUR-ANDROID-DEPLOYMENT-KEY" />
</platform>
<platform name="ios">
    <preference name="CodePushDeploymentKey" value="YOUR-IOS-DEPLOYMENT-KEY" />
</platform>

     使用自己服务器的是这样子的:

1
2
3
4
5
6
7
8
<platform name="android">
    <preference name="CodePushDeploymentKey" value="nVHPr6asLSusnWoLBNCSktk9FWbiqLF160UDg" />
    <preference name="CodePushServerUrl" value="http://115.29.200.95:9000/" />
</platform>
<platform name="ios">
    <preference name="CodePushDeploymentKey" value="Iw5DMZSIrCOS7hbLsY5tHAHNITFQqLF160UDg" />
    <preference name="CodePushServerUrl" value="http://115.29.200.95:9000/" />
</platform>

5、命令行提交版本

     基本上和code-push的命令一直,也有不一样的地方

     1、登录

1
2
3
code-push login #默认是这样,登录是微软的地址
#我们这样写
code-push login http://ip:port

     2、app的名字

          code-push app add ioetest  #正常命令

          code-push-server的app名字必须包含android或者ios字段(不知道为什么这么玩)

            后面还要加上平台和cordova

          例如:code-push app add ioeandroid android cordova

            code-push app add ioeios ios cordova

6、其他问题

     1、用户和密码问题

          安装好的code-push-server里面只有一个用户 admin     123456

          如果希望新增或者更换用户的话可以使用web版本操作,我没装这个,因为用处不是很大,也有bug,后台返回了更新包的信息,页面却没有显示

          由于跨域,web无法正常使用,需要更改server版本的app.js,app.all那里的环境判断注释掉就行了

          所以这个web也就操作用户信息还比较有用

          也可以直接用命令行改密码:

1
curl -X PATCH -H "Authorization: Bearer mytoken" -H "Accept: application/json" -H "Content-Type:application/json" -d '{"oldPassword":"123456","newPassword":"654321"}' http://127.0.0.1:3000/users/password

     2、端口和启动问题

          默认的server端口是3000,也可以改,在bin/www里面

          不过一般我们使用pm2来管理,文件在docs/process.json,只需执行pm2 start process.json即可

          里面的命令实际上我并不懂

               “instances”:”max”好像是根据cpu核心数量来启动相应多个实例

          这里面可以直接改端口号

            env里面的config指的是config/config.js

            最好是用全路径,这样就可以在根目录建快捷方式了

            ln -s  /etc/node/lib/node_modules/code-push-server/docs/process.json  /process.json

            release的时候会报无法解析response的错,但是是成功的,等待code-push-server更新吧

          TIPS:pm2 stop是挂起程序,pm2 delete是kill程序

模拟请求

http://ip:port/updateCheck?gldeploymentKey=mbmYKM8kQkAYkhJMQEe358XgfuY74ksvOXqog&appVersion=3.6.26

一段时间遇到一个新问题:

之前搭建的私服停了,然后竟然logout出不来,删除access-key也不行,只能卸载了

目录:/usr/local/lib/node_modules    全名叫code-push-cli

我太天真了,卸载完重装依旧不行

我去lisong大神的code-push-server那里提了个issuse,回复说用户目录下有个隐藏文件

.code-push.config用来保存登录信息的,删除之,done!!!

结论:和wkwebview插件冲突

一年之后我又回来了,捣鼓了好久还是没找到和wkwebview冲突的解决办法,查看了我之前提的issue,竟然有人回答解决了,在code-push-server根目录下app.js中增加了一些http头就好了

x-codepush-plugin-name,x-codepush-plugin-version,x-codepush-sdk-version

我懒得再配置nginx转发了,就注释掉了env的环境判断

学到一个小知识 :pm2查看错误日志 pm2 log servername


code-push私有部署
http://bestkele.com/2019/09/06/investigation/code-push-deploy/
作者
kele
发布于
2019年9月6日
许可协议