1. 程式人生 > >服務器端code-push-server、mysql服務的架設

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

doc 支持 install password key 有一個 獲取 第一個 應用更新

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編寫一個快速搭建開發者環境的命令行工具和安卓端真機調試

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