CodePush 是微软提供的一套用于热更新 React Native 和 Cordova 应用的服务。
CodePush 是提供给 React Native 和 Cordova 开发者直接部署移动应用更新给用户设备的云服务。CodePush 做为一个中央仓库,开发者能够推送更新 (JS, HTML, CSS and images),应用能够从客户端 SDK 里面查询更新。CodePush 可让应用有更多的可肯定性,也可让你直接接触用户群。在修复一些小问题和添加新特性的时候,不须要通过二进制打包,能够直接推送代码进行实时更新。html
code-push官方github地址:https://github.com/Microsoft/code-pushnode
从上图你们能够了解到,CodePush的云服务是Microsoft的,服务器有可能在国外,身在天朝的咱们以及用户更新速度确定是无比的慢;为了给用户最佳的用户体验,以及让代码和服务掌握在本身的手里,本身搭建code-push-server成为了必须!
mysql
一个相对不错的code-push-server库官方github地址
根据官方说明要启动server大体须要这么几步:android
$ git clone https://github.com/lisong/code-push-server.git $ cd code-push-server $ npm install $ ./bin/db init --dbhost localhost --dbuser root --dbpassword #初始化mysql数据库 $ ./bin/www #启动服务 浏览器中打开 http://127.0.0.1:3000
若是你只是测试玩玩这么几步下来一个完美的server已经能够跑起来了!可是为了保证咱们服务的健壮性咱们仍是有必要打成docker,打成docker 镜像以后咱们就能够交给运维人员帮咱们把负载均衡、监控、日志的收集最重要的一点就是CDN,OK那么我们只须要打成docker 镜像就能够了,剩下的仍是交给运维同窗吧!git
因为code-push服务须要数据库,没有数据库的同窗能够提早搭建一个,我在这里用docker启动一个,登录阿里云服务器或者登录以前建立jenkins的虚拟机,将下面的脚本保存为start-mysql.sh
github
或者参考个人另外一篇文章Contos 7 安装 Mysql 5.7sql
#mysql环境变量的说明 #MYSQL_ROOT_PASSWORD:必填项,设置root用户的密码 #MYSQL_DATABASE :启动时建立的数据库名称 #MYSQL_USER, MYSQL_PASSWORD 启动时建立数据的用户和密码 #MYSQL_ALLOW_EMPTY_PASSWORD :容许数据库密码为空启动(root)[yes/no] #MYSQL_ONETIME_PASSWORD : 强制用户首次登陆修改密码[yes/no] #MYSQL_ROOT_PASSWORD_FILE : 做为环境变量传递敏感信息的替代方案/run/secrets/mysql-root(目前,这仅支持MYSQL_ROOT_PASSWORD,MYSQL_ROOT_HOST,MYSQL_DATABASE,MYSQL_USER,和MYSQL_PASSWORD) #数据库默认存储在/var/lib/mysql下,-v "$PWD/mysql":/var/lib/mysql \ #定义容器名称名称 DOCKER_NAME=mysql #定义容器的端口号 DOCKER_PORT=3306 docker run \ -d \ --rm \ -p ${DOCKER_PORT}:3306 \ --name ${DOCKER_NAME} \ -e "MYSQL_ROOT_PASSWORD=123456" \ -e "MYSQL_DATABASE=code-push-db" \ -v "$PWD/mysql_datadir":/var/lib/mysql \ mysql:5.7
咱们只要执行下这个start-mysql.sh脚本一个数据库名称为 code-push-db 数据库用户为 root 数据库密码为 123456 的mysql服务就起来了docker
$ sh start-mysql.sh
开始以前声明下:这个库的做者也提供了docker版 说明文档在这里,做者写的挺好,用的docker-compose 和 docker swarm 挺强大挺厉害了,可是不一样的业务场景下可能会有不一样的需求!咱们公司如今有k8s环境,因此须要单独写个docker image 给运维同窗用!另外咱们须要对 code-push-server 作一些定制化的需求!好比check接口日志入库等等!shell
首先咱们建立一个code-push文件夹,用于咱们的工做目录,以后进入该目录,在终端下运行:
shell $ mkdir code-push $ cd code-push
数据库
获取code-push-server代码
$ git clone https://github.com/lisong/code-push-server.git
shell $ mkdir code-push-files $ mkdir code-push-files/storage $ mkdir code-push-files/tmp #建立两个文件使目录不为空就好 $ touch code-push-files/storage/README.md $ touch code-push-files/tmp/README.md
shell $ cd code-push-server #安装依赖 $ npm install #初始化mysql数据库 $ ./bin/db init --dbname codepush --dbhost localhost --dbport 3306 --dbuser root --dbpassword 123456
编辑配置文件
shell $ vim config/config.js
请检查以下配置是否和你的环境一致,尤为是downloadUrl参数
#数据库的配置 db: { username: process.env.RDS_USERNAME || "root", password: process.env.RDS_PASSWORD || "123456", 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, }, //七牛云存储配置 当storageType为qiniu时须要配置 qiniu: { accessKey: "", secretKey: "", bucketName: "", downloadUrl: "" //文件下载域名地址 }, //阿里云存储配置 当storageType为oss时须要配置 oss: { accessKeyId: "", secretAccessKey: "", endpoint: "", bucketName: "", prefix: "", // 对象Key的前缀,容许放到子文件夹里面 downloadUrl: "", // 文件下载域名地址,须要包含前缀 }, //文件存储在本地配置 当storageType为local时须要配置 local: { storageDir: "/code-push-files/storage", //文件下载地址 CodePush Server 地址 + '/download' download对应app.js里面的地址 //这里拿百度的网址举例子 downloadUrl: "http://codepush.baidu.com:3000/download", // public static download spacename. public: '/download' }, jwt: { // 登陆jwt签名密钥,必须更改,不然有安全隐患,可使用随机生成的字符串 // Recommended: 63 random alpha-numeric characters // Generate using: https://www.grc.com/passwords.htm tokenSecret: 'INSERT_RANDOM_TOKEN_KEY' }, common: { dataDir: "code-push-files/tmp", //选择存储类型,目前支持local,oss,qiniu,s3配置 storageType: "local" },
Dockerfile的编写
将下面的脚本保存名为Dockerfile文件,注意大小写,没有文件后缀名!位置放在code-push文件夹下,也就是同code-push-server同级下
FROM node:9.11.1-alpine MAINTAINER shuoer 690515591@qq.com RUN rm -rf /app && mkdir -p /app && mkdir /code-push-files COPY code-push-server /app/ WORKDIR /app RUN npm install CMD [ "npm","start" ] EXPOSE 3000
在当前目录下打开命令行执行如下命令build出docker image
#注意最后还有一个 点 别丢了! $ docker build -t codepush .
喝杯茶,抽根烟,稍等片刻就编译成功了!编译完成以后咱们能够执行如下命令测试是否能够启动
$ docker run \ -d \ --rm \ --name codepush \ -v "$PWD/code-push-files":/code-push-files \ -p 3000:3000 \ codepush:latest
打开浏览器看到这个页面表示启动成功了
若是将以上技术栈描述清楚须要不小的篇幅,因此我会将文章进行拆分: