关于APP热更新,如何在Liunx服务器上搭建Code Push Server
公司的RN开发要搞热更新,所以要在服务器上搭建Code Push Server,自己以前也没搭过,所以也在网上查了很多资料,中间遇到很多问题,所以记录一下,防止以后再用。
基本上参考这个帖子上这位大哥的步骤,但是中间遇到很多问题,主要是解决这些问题。
https://hujiahua.site/?p=238
首先呢,公司项目的服务器是CentOS release 6.9,
第一步,在服务器上新建Code Push Server要用的文件夹,并从git上下载他的包安装
mkdir code-push-server && cd code-push-server
我是直接在/opt/下面新建的目录的。
然后,下载包,
git clone https://github.com/lisong/code-push-server.git
下载完之后,在通过yarn或者npm install安装。
yarn 或者 npm install
这块呢,出现了好几个问题,服务器上没安装git要安装,通过yarn命令安装要安装yarn软件, 或者npm要安装node.js。
-
安装git
这块可以参考这位大哥的帖子,linux安装git方法
他里面更新服务器的操作,我可以不去更新,因为我的服务器版本本身就比较高。
1.用git --version命令检查是否已经安装2.yum -y install git
但是yum源中安装的git版本是1.7.1,Github等需要的Git版本最低都不能低于1.7.2 。所以这样版本太低了。3.安装依赖的包
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker4.下载git源码并解压
wget https://github.com/git/git/archive/v2.3.0.zip
unzip v2.3.0.zip
cd git-2.3.0
(这块使用unzip命令可能会提示没有此命令,所以需要安装unzip软件)
下面是安装方法:命令: yum list | grep zip/unzip #获取安装列表
安装命令: yum install zip #提示输入时,请输入y;
安装命令:yum install unzip #提示输入时,请输入y;5.编译安装:
将其安装在“/usr/local/git”目录下。
make prefix=/usr/local/git all
make prefix=/usr/local/git install
因为服务器时间不对编译的过程中报错如下图,使用ntpdate自动校正系统时间。报错“Writing perl.mak for Git make[2]: *** [perl.mak] Error 1”,请重启apache服务,service httpd restart。6.编译完成之后使用git --version 查看git版本,居然还是1.7.1,这是因为它默认使用了"/usr/bin"下的git。
你可以用下面的命令查看git所在的路径:whereis git
git: /usr/bin/git /usr/local/git /usr/share/man/man1/git.1.gz
7.我们要把编译安装的git路径放到环境变量里,让它替换"/usr/bin"下的git。为此我们可以修改“/etc/profile”文件(或者/etc/bashrc文件)。(我是通过Xftp修改的profile文件)
vim /etc/profile
然后在文件的最后一行,添加export PATH=/usr/local/git/bin:$PATH
,然后保存退出。8.不想重启系统,使用source命令立即生效
使用source /etc/profile
然后再次使用git --version
查看git版本,发现输出2.3.0,表明安装成功。 -
安装完git后,我是通过npm安装的,所以,要安装Node.js.
这块可以参考这位大哥的帖子,Linux系统安装Nodejs
先去官网下载安装包,下载地址:http://nodejs.cn/download/
将安装包上传到指定位置(我放到:/root目录),并解压
tar -xvf node-v10.6.0-linux-x64.tar.xz
重命名文件夹
mv node-v10.6.0-linux-x64 nodejs
通过建立软连接变为全局
ln -s /usr/local/application/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/application/nodejs/bin/node /usr/local/bin/
最后检查是否安装成功,命令:node-v
这块我报了很多错,
libstdc++.so.6: version’GLIBCXX_3.4.20’ not found
version `GLIBC_2.14’ not found
很多个GCC编辑器版本缺失,
这块看了另外一个帖子,https://www.cnblogs.com/kumufengchun/p/10455537.html
在网上找到了高级的GCC版本替换掉就行,libstdc++.so.6.0.26
我们把上面这个文件下载下来拷贝到/usr/lib64目录下(或者直接Xftp放进服务器),
然后删除libstdc++.so.6符号连接,rm libstdc++.so.6
新建里符号连接,ln -s libstdc++.so.6.0.17 libstdc++.so.6
。再次查看就没有问题了。
我们再次使用node -v 发现还会报错,version ‘GLIBC_2.14’ not found
运行:strings /lib64/libc.so.6 |grep GLIBC_
。发现版本很低,多个版本没有,我们直接安装高级版本其他低级的就会有了。
下载:wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.18.tar.gz
解压:tar -zxvf glibc-2.18.tar.gz
进入解压文件夹,创建文件夹build:
mkdir build
cd build
运行configure配置,make,sudo make install
../configure --prefix=/usr
make -j4
sudo make install
再次node -v
,已经安装成功
然后,我们通过npm命令安装。
第二步,配置Code Push Server
- 初始化数据库
cd code-push-server
./bin/db init --dbhost localhost --dbuser root --dbpassword 'yourPWD'
这块yourPWD,是你的数据库密码,我的数据库是mysql。他的目的就是会在你的数据库中创建一个 database 名字是 codepush。
- 修改配置文件
code-push-server/bin/db
cd code-push-server
vim /bin/db
我这块都是用Xftp打开文件编辑的
修改匹配的数据库密码:
修改配置文件code-push-server/config/config.js
修改匹配密码和你的数据库密码一致
修改储存目录和下载地址
配置jwt密钥
先去https://www.grc.com/passwords.htm
这里选择
63 random alpha-numeric characters (a-z, A-Z, 0-9):的密钥,并设置在如下
storageDir修改成你实际的目录。事先要创建这个目录
downloadUrl需要换成服务器的IP
访问 https://www.grc.com/passwords.htm ,生成一个token
上面配置储存目录一定要正确,不然会面启动会报错的,还有下载地址记得配端口号,我这块配置完后,刚开始无法访问,最后发现,是服务器3000端口未开放,然后去阿里云后台把3000端口打开之后好了。
第三步,启动服务
进入code-push-server文件夹,运行./bin/www
测试启动成功。
重新命名www文件,使用pm2启动,这样可以保持后台运行。
重命名mv ./bin/www ./bin/yourName
启动pm2 start ./bin/yourName
然后,我们访问服务器3000端口,
页面弹出登陆热更新服务器就OK啦。
==================================================================================
上面这块使用到了pm2命令,如果没有安装pm2,则会提示pm2: command not found
,
下面说下pm2的安装,npm install pm2 -g
,
安装完后,执行pm2 list
,则会提示-bash: pm2: command not found
说明,没有配制到全局,虽然安装到全局,不知道为毛,linux下不像windows下能自动创造一个环境变量去实现我们的全局。所以我们需要创建一个linux下的软连接。
创建软连接:在linux上的设置软连接相当于是windows下的配制环境变量一个道理,只是这里用了命令完成的操作。这里我们就开始为pm2创建软连接,这里首先要明确的是,我们要知道谁和谁去连接,问题来了?知道是哪个和哪个连接吗?好了,答案是:我们的linux下的全局$PATH和我们pm2的安装路径。那么我们如何知道他们的路径分别是哪里呢?
找到全局环境PATH路径:echo $PATH
可以看到我们的环境变量:/usr/local/git/bin:/usr/root/jdk1.7.0_76/bin:/root/jdk1.7.0_76/jre/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
这里我们用/usr/local/bin,以:隔开的路径。
找到pm2的安装路径,上图红框中的路径就是我们pm2的安装路径,
如果没找到或者没看见,可以用whereis 或find 命令去查找。
这一步很重要,ln -s /root/nodejs/lib/node_modules/pm2/bin/pm2 /usr/local/bin/
执行完之后,我们使用pm2 list
再看下,出现下图则说明安装成功了,并且可以随处访问pm2。
a=================================================================================
第四步,客户端使用
配置 code-push login http://配置的ip:3000/
登陆默认账号密码:admin,123456
注册你的App,获得到Production
和 Staging
的key
注册android
:code-push app add wyApp.android android react-native
注册ios
:code-push app add wyApp.ios ios react-native
RN项目配置:
重新配置android/app/build.gradle
中的key
,
打开MainApplication.java
添加Code Push Server
地址
然后new CodePush(BuildConfig.CODEPUSH_KEY, getApplicationContext(), BuildConfig.DEBUG,"https://配置的IP:3000"),