服务器端code-push-server、mysql服务的架设

CodePush 简介

CodePush 是微软提供的一套用于热更新 React Native 和 Cordova 应用的服务。

CodePush 是提供给 React Native 和 Cordova 开发者直接部署移动应用更新给用户设备的云服务。CodePush 作为一个中央仓库,开发者可以推送更新 (JS, HTML, CSS and images),应用可以从客户端 SDK 里面查询更新。CodePush 可以让应用有更多的可确定性,也可以让你直接接触用户群。在修复一些小问题和添加新特性的时候,不需要经过二进制打包,可以直接推送代码进行实时更新。

code-push官方github地址:https://github.com/Microsoft/code-push

code-push 应用更新的流程

从上图大家可以了解到,CodePush的云服务是Microsoft的,服务器有可能在国外,身在天朝的我们以及用户更新速度肯定是无比的慢;为了给用户最佳的用户体验,以及让代码和服务掌握在自己的手里,自己搭建code-push-server成为了必须!

code-push-server 简介

一个相对不错的code-push-server库官方github地址

根据官方说明要启动server大致需要这么几步:

$ 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 镜像就可以了,剩下的还是交给运维同学吧!

使用 docker 启动一个 mysql 数据库

由于code-push服务需要数据库,没有数据库的同学可以提前搭建一个,我在这里用docker启动一个,登陆阿里云服务器或者登陆之前创建jenkins的虚拟机,将下面的脚本保存为start-mysql.sh

或者参考我的另一篇文章Contos 7 安装 Mysql 5.7

#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服务就起来了

$ sh start-mysql.sh

将 code-push-server 打成 docker 镜像

开始之前声明下:这个库的作者也提供了docker版 说明文档在这里,作者写的挺好,用的docker-compose 和 docker swarm 挺强大挺厉害了,但是不同的业务场景下可能会有不同的需求!我们公司现在有k8s环境,所以需要单独写个docker image 给运维同学用!

  1. 首先我们创建一个code-push文件夹,用于我们的工作目录,之后进入该目录,在终端下运行:

    shell $ mkdir code-push $ cd code-push

  2. 获取code-push-server代码
    $ git clone https://github.com/lisong/code-push-server.git
  3. 创建code-push-server所需要的目录

    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

  4. 安装依赖文件及初始化数据库

    shell $ cd code-push-server #安装依赖 $ npm install #初始化mysql数据库 $ ./bin/db init --dbname codepush --dbhost localhost --dbport 3306 --dbuser root --dbpassword 123456

  5. 编辑配置文件

    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"
      },
  6. Dockerfile的编写

    将下面的脚本保存名为Dockerfile文件,注意大小写,没有文件后缀名!位置放在code-push文件夹下,也就是同code-push-server同级下

    FROM node:9.11.1-alpine
    MAINTAINER shuoer [email protected]
    
    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

    打开浏览器看到这个页面表示启动成功了

说明

如果将以上技术栈描述清楚需要不小的篇幅,所以我会将文章进行拆分:

1. Hybrid App 开发实践总结 ~开篇
2. cordova的环境配置和创建第一个android App
3. 使用 jenkins 自动化编译cordova android 生成 APK
4. 服务器端code-push-server、mysql服务的架设(本文)
5. 客户端code-push插件的引入及code-push-cli的使用
7. 如何使用纯shell编写一个快速搭建开发者环境的命令行工具和安卓端真机调试

原文地址:https://www.cnblogs.com/shuoer/p/9581886.html

时间: 2024-11-01 13:29:57

服务器端code-push-server、mysql服务的架设的相关文章

启动Mysql服务提示Can’t connect to local MySQL server through socket的解决方法

启动Mysql服务常会提示下面错误: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 这是由于修改mysql服务的了socket文件mysql.sock位置,而导致无法通过mysql socket文件连接到mysql服务引起的,具体解决办法如下: 1.查看mysql服务的socket文件位置:mysql socket文件的位置是在/etc/my.c

Windows Server 2003开机自动启动MySQL服务设置方法

Windows Server 2003开机自动启动MySQL服务设置方法 发布时间:2014-12-19 更新时间:2014-12-24 来源:网络 作者:eaglezhong 关键词: 2003 exe 开机 nbsp; 设置方法 &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   每次开机我都要去点击mysqld-nt.exe执行文件才启动mysql,虽然将创建了mysqld-nt.exe快捷方式到桌面,但还

mysql 服务重启报MySQL server PID file could not be found!*pid...

今天只是想发表个感慨,同时将这部分教训写出来,让大家有个经验,很简单的mysql数据库搭建,网上有很多安装教程,不用多说. 我只是把我安装后遇到的问题写出来,给自己提个醒,MySQL数据库装完之后(是卸载删除了以前的mysql重装的),我就直接启动mysql服务,service mysql restart ,发现报出如下错误. [[email protected] mysql]# service mysql restartMySQL server PID file could not be fo

MYSQL服务 ERROR 2003 (HY000): Can't connect to MySQL server on "********" 的问题解决

今早来到公司发现昨晚还好好的数据库跑不起来了,这对于本是C语言主编的本人刚刚操作后台来说未免一头雾水. 而且该问题的出现大多是因为一夜突发毫无征兆,或者因为mysql重装.而且网上的题解也有好多答复重装,真是... 具体问题如下: 想必看到这个对于刚刚上手操作mysql的朋友来说都回去查看一下10061这是个什么错误吧. 可恰巧,本人用的是windows系统,网上大多题解都是linux操作环境下的(说到这里,作为程序猿真应该研究一下linux,那也得等现在的项目完毕啊). 像my.cnf配置文件

MySQL服务无法启动(2003 - Can't connect to MySQL server on‘localhost' (10061).)

学过了SQL Server.Oracle等大型的数据库系统,最近想了解研究一下体积相对较小,功能相对较差MySQL数据库.以前做一些课程设计的时候,都用的是SQL Server和Oracle数据库,现在想想真是大材小用了.于是说干就干,首先下载,这个不费吹灰之力,"mysql-essential-5.1.54-win32.zip"大小只有三十四MB.接下来自然是解压,然后开始安装.对了,我用的系统是Windows7普通家庭版. 安装过程很顺利,而且网上有大量的安装教程.安装完成之后,怀

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061),mysql服务已启动

1 前言 在mysql服务已启动,用命令行进入或者heidisql工具都提示ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061). 2 解决方案 原来关闭了防火墙就好了,哎呀,这个坑,仅作为记录使用.原因是防火墙没有开3306端口 ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061),mysql服务已启动 原文地址

监控利器Nagios之一:监控本地NFS和外部HTTP、MySQL服务

监控利器Nagios之一:监控本地NFS和外部HTTP.MySQL服务 Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知. Nagios的特点: 1.监控服务http.MySQL.nfs.tcp.ping等 2.监控主机资源cpu.负载.I/O.虚拟及内存磁盘利用率等 3.支持邮件微信等报警通信. 4.可选we

CentOS 7下MySQL服务启动失败的解决思路

今天,启动MySQL服务器失败,如下所示: [[email protected] ~]# /etc/init.d/mysqld start Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -

20150924 Web Server(Http服务)

第一:Web Service基础 @1:补充  TCP.UDP OSI模型,TCP(应用.表示.会话)资源子网,下四具为通信子网. 前三层在用户进程进行(用户空间用户程序,后四层在内核中. Ip地址主机至主机(通信双方) 数据链路层mac设备到设备之间的通信 TCP/IP提供进程地址(端口号) TCP:面向链接在通信前创建虚拟链路(三次握手),通信完成后 还要拆除链路.可提供可靠流协议.0-65535 UDP:用户数据报协议(User dataGram Protocol),无链接协议( 无法保证