服務器端code-push-server、mysql服務的架設

CodePush 簡介

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

code-push 應用更新的流程


從上圖你們能夠了解到,CodePush的雲服務是Microsoft的,服務器有可能在國外,身在天朝的咱們以及用戶更新速度確定是無比的慢;爲了給用戶最佳的用戶體驗,以及讓代碼和服務掌握在本身的手裏,本身搭建code-push-server成爲了必須!
mysql

code-push-server 簡介

一個相對不錯的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

使用 docker 啓動一個 mysql 數據庫

因爲code-push服務須要數據庫,沒有數據庫的同窗能夠提早搭建一個,我在這裏用docker啓動一個,登錄阿里雲服務器或者登錄以前建立jenkins的虛擬機,將下面的腳本保存爲start-mysql.shgithub

或者參考個人另外一篇文章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

將 code-push-server 打成 docker 鏡像

開始以前聲明下:這個庫的做者也提供了docker版 說明文檔在這裏,做者寫的挺好,用的docker-compose 和 docker swarm 挺強大挺厲害了,可是不一樣的業務場景下可能會有不一樣的需求!咱們公司如今有k8s環境,因此須要單獨寫個docker image 給運維同窗用!另外咱們須要對 code-push-server 作一些定製化的需求!好比check接口日誌入庫等等!shell

  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 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

    打開瀏覽器看到這個頁面表示啓動成功了

說明

若是將以上技術棧描述清楚須要不小的篇幅,因此我會將文章進行拆分:

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編寫一個快速搭建開發者環境的命令行工具和安卓端真機調試
相關文章
相關標籤/搜索