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
}
}
注意
local.storageDir
存储地址。确保有读/写权限local.downloadUrl
文件下载地址。jwt.tokenSecret
登录jwt
签名密钥。从https://www.grc.com/passwords.htm
获取随机字符串,复制63 random alpha-numeric characters
的值替换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;
}
}