Linux中搭建code-push-server

Linux中搭建code-push-server
 最后更新于 2024年10月02日 07:52:45

code-push-server

安装

// 通过git下载仓库
git clone https://github.com/lisong/code-push-server.git
// 安装环境依赖
cd code-push-server && npm install

修改配置

// config/config.js

var os = require('os');

var config = {};
config.development = {
  // mysql数据库配置
  db: {
    username: process.env.RDS_USERNAME || "root",
    password: process.env.RDS_PASSWORD || "数据库密码",
    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 local 时需要配置
  local: {
    // Binary files storage dir, Do not use tmpdir and it's public download dir.
    storageDir: process.env.STORAGE_DIR || "/home/code-push-server/storage",
    // 文件下载地址 CodePush Server 地址 + '/download' download 对应 app.js 里面的地址
    downloadUrl: process.env.LOCAL_DOWNLOAD_URL || "https://codeServer.xulizhong.top/download",
    // public static download spacename.
    public: '/download'
  },
  jwt: {
    // 63位 token 加密字符串
    tokenSecret: 'm1P2GKgtUrIZpeDxElvRVqg3Tc6MSTVFUvDO62suFx6BForqjIOovB1EAAPr9Sd'
  },
  common: {
    /*
     * 当天登录密码错误尝试次数,超过次数帐户将会锁定。0:表示无限制,可能会出现暴力破解。 大于0:必须开启redis服务。
     */
    tryLoginTimes: 0,
    // CodePush Web 地址
    codePushWebUrl: "https://code.xulizhong.top",
    // 差异化更新版本生成数目 默认为3
    diffNums: 3,
    // 数据目录,优化选项
    dataDir: process.env.DATA_DIR || os.tmpdir(),
    // 存储类型,目前支持 "local" | "qiniu" | "s3"| "oss" || "tencentcloud"
    storageType: process.env.STORAGE_TYPE || "local",
    // options value is (true | false), when it's true, it will cache updateCheck results in redis.
    updateCheckCache: false,
    // options value is (true | false), when it's true, it will cache rollout results in redis
    rolloutClientUniqueIdCache: false
  }
}

注意

  1. local.storageDir 存储地址。确保有读/写权限
  2. local.downloadUrl 文件下载地址。
  3. jwt.tokenSecret 登录 jwt 签名密钥。从https://www.grc.com/passwords.htm 获取随机字符串,复制 63 random alpha-numeric characters 的值替换
  4. common.dataDir 数据目录。修改为项目中的路径,确保该目录有读/写权限

初始化数据库

./bin/db init --dbhost "127.0.0.1" --dbport "3306"  --dbuser "root" --dbpassword "数据库密码"

创建 pm2 配置文件

在根目录下创建 pm2 配置文件 process.json

{
  "apps": [
    {
      "name": "code-push-server", // pm2 守护的进程名
      "max_memory_restart": "300M",
      "script": "./bin/www",
      "instances": "max",
      "exec_mode": "fork",
      "env": {
        "NODE_ENV": "production",
        "PORT": 8003, // 服务监听的端口号
        "CONFIG_FILE": "./config/config.js" // 服务配置文件
      }
    }
  ]
}

支持的储存模式

  • local (default) 默认本地
  • qiniu 七牛云存储
  • s3 (aws) 亚马逊云存储
  • oss (aliyun) 阿里云存储
  • tencentcloud 腾讯云存储

常用命令

code-push login https://codeServer.xulizhong.top
code-push logout 注销
code-push access-key ls 列出登录的token
code-push access-key rm <accessKye> 删除某个 access-key
code-push app add 在账号里面添加一个新的app
code-push app remove 或者 rm 在账号里移除一个app
code-push app rename 重命名一个存在app
code-push app list 或则 ls 列出账号下面的所有app
code-push app transfer 把app的所有权转移到另外一个账号

pm2 启动服务

pm2 start process.json

启用服务之后可以通过 netstat -ntlp 查看服务列表,查询是否已经有服务监听 8003端口

可以使用 pm2 monit code-push-server 查看服务运行情况

在浏览器中访问 https://codeServer.xulizhong.top,默认账号:admin,密码:123456

Loading...

code-push-web

安装

// 下载仓库
git clone https://github.com/lisong/code-push-web.git
// 安装依赖
cd code-push-web && npm install

修改配置

// src/config.js

export const port = process.env.PORT || 8004; // web管理服务监听的地址

export const common = {
  api: {
    // 生产环境,code-push-server 地址
    URL: 'https://codeServer.xulizhong.top',

    // 开发环境,code-push-server 地址
    devURL: 'https://codeServer.xulizhong.top'
  },
};

运行

该 Web 管理服务需要打包后才可以使用执行,不然会出现几个 JS 文件加载 404 错误。

// 开发环境下命令。实际中发现缺少必要的JS文件
npm start

// 正式发布先 build打包
> npm run build
> cd build && npm install
> pm2 start server.js --name code-push-web // pm2 管理服务

nginx 配置

# codePush Server
server {
        listen                      443;
        server_name                 codeServer.xulizhong.top;
        charset                     utf-8;
        access_log                  logs/codeServer.log;

        ssl                         on;
        ssl_session_timeout         5m;
        ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers                 ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers   on;
        ssl_certificate             ca/1_codeServer.xulizhong.top_bundle.crt;
        ssl_certificate_key         ca/2_codeServer.xulizhong.top.key;

        location / {
          proxy_pass      http://127.0.0.1:8003;
          proxy_redirect  off;

          proxy_set_header  Host  $host;
          proxy_set_header  X-Real-IP  $remote_addr;
          proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
          proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }

        location ^~ {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, DELETE, PUT';
            add_header 'Access-Control-Allow-Headers' 'X-ASK-SKEY, Origin, X-Requested-With, Content-Type, Accept';
        }
    }

# codePush web
server {
        listen                      443;
        server_name                 code.xulizhong.top;
        charset                     utf-8;
        access_log                  logs/code.log;

        ssl                         on;
        ssl_session_timeout         5m;
        ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers                 ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers   on;
        ssl_certificate             ca/1_code.xulizhong.top_bundle.crt;
        ssl_certificate_key         ca/2_code.xulizhong.top.key;

        location / {
          proxy_pass      http://127.0.0.1:8004;
          proxy_redirect  off;

          proxy_set_header  Host  $host;
          proxy_set_header  X-Real-IP  $remote_addr;
          proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
          proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
    }