liubobuzhidao

CodePush之服务器的搭建

本来是不想写,但奈何自己的CPU不够用,内存小,所以还是在此记录一下搭建的过程。

备注:为了避免不必要的麻烦,本文选择直接安装在服务器上。其实你也可以先在本地配置,弄完以后直接上传到服务器就行。

Step1 前提准备

​ 先把最主要的部分:code-push-server clone到本地,还有后续的codepush命令需要全局安装code-push-cli,npm install code-push-cli@latest -g,这么搞是为了可以在项目以外可以继续使用CodePush相关命令。如果不想,可以安装局部。

​ 如果为了比较好的人机交互,那就顺带把他家的code-push-web 也clone下来。

Step2 修改配置参数

​ 按照给出的文档操作是没啥问题的,但是始终需要使用admin 123456这个账号登录进行管理,虽然也给出了curl修改方式,但感觉不太好,而且注册账号啥的也不太方便,既然已经提供了一个web 管理界面,索性就直接一块儿clone了。如果你不想安装其实也是可以略过的,只是需要你对CodePush相关命令比较熟知,

1、修改config/config.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
db: {
username: "root",
password: null,
database: "codepush",
host: "127.0.0.1",
dialect: "mysql"
},
//七牛云存储配置 当storageType为qiniu时需要配置
qiniu: {
accessKey: "",
secretKey: "",
bucketName: "",
downloadUrl: "" //文件下载域名地址
},
//阿里云存储配置 当storageType为oss时需要配置
oss: {
accessKeyId: "",
secretAccessKey: "",
endpoint: "",
bucketName: "",
prefix: "", // 对象Key的前缀,允许放到子文件夹里面
downloadUrl: "", // 文件下载域名地址,需要包含前缀
},
//文件存储在本地配置 当storageType为local时需要配置
local: {
storageDir: "/Users/tablee/workspaces/storage",
//文件下载地址 CodePush Server 地址 + '/download' download对应app.js里面的地址
downloadUrl: "http://localhost: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: "/Users/tablee/workspaces/data",
//选择存储类型,目前支持local,oss,qiniu,s3配置
storageType: "local",
codePushWebUrl: "Your CodePush Web address"
},
// Config for smtp email,register module need validate user email project source https://github.com/nodemailer/nodemailer
smtpConfig:{
host: "smtp.aliyun.com",
port: 465,
secure: true,
auth: {
user: "",
pass: ""
}
},
// Config for redis (register module, tryLoginTimes module)
redis: {
default: {
host: "127.0.0.1",
port: 6379,
retry_strategy: function (options) {
if (options.error.code === 'ECONNREFUSED') {
// End reconnecting on a specific error and flush all commands with a individual error
return new Error('The server refused the connection');
}
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands with a individual error
return new Error('Retry time exhausted');
}
if (options.times_connected > 10) {
// End reconnecting with built in error
return undefined;
}
// reconnect after
return Math.max(options.attempt * 100, 3000);
}
}
}

上面是官方文档给出的说明,我在这儿需要说明一下几点:

db:这个是存储用户信息的,你发到服务器上的账号必须有创建数据库的权限,否则会执行失败。

qiniu/oss/local:这个是你生成的js文件存放的位置和下载文件的地址信息,local顾名思义就是本地的意思,我选择把文件放在服务器上是因为我的用户量少,不存在用户访问量的问题,也不用做负载和监控,因我用的是local,所以我以local的为例,当你配置这个参数的时候,首先需要自行创建storageDir的路径,为什么要这么搞?因为会报权限问题,所以我当时就自己使用mkdir -p ...创建了个路径,创建完成以后将绝对路径copy到storageDir后面。downloadUrl后面的地址localhost需要改成服务器对外的ip地址。这个地址是后期codepush SDK请求更新的地址。

jwt:根据提供的地址随便生成一个字符串填上去就ok了。

common:这个是干么的不太清楚,其中dataDir也是需要手动创建的,storageType是你需要什么类别的就填什么样的,比如我选的是local。codepushweburl是你的web端地址。

redis:这个在官方文档里面是没有说明的,具体的内容在源码中,我把这部分copy出来说明一下,这个是发邮件必须的配置。

smtpConfig:这个和redis是一样的,也是发邮件的必须配置,这个邮箱相当于管理员,当你注册成功后会通过这个邮箱给你发消息。

2、上述配置信息配置完成以后,执行下面命令:

1
2
3
4
5
$ 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://本机ip:3000

启动成功以后出现这样的界面:

codepush1

点击登录以后出现下面的界面:账号密码是admin 123456

登录以后就可以获取一个token值,然后你就可以使用codepush的各种命令了,至此基本上搭建完成了自己的server。

Notice:这里要提示的是使用codepush register时需要添加上服务器地址,例如:code-push register http://XXXX:3000,你在配置移动端的信息时也要在MainApplication中添加上服务器地址,其中key值最好是放在local.properties中,这里有一篇文章 ,在它的中部位置有详细的说明。

Step3 CodePushWeb

这个需要配置一下config.js文件,该文件的内容如下

你需要把图中的localhost和端口号修改成正式环境的ip和端口。配置完成以后执行下面的代码,

1
2
3
4
5
$ cd /path/to/code-push-web
$ npm run build -- --release
$ cd ./build
$ npm install
$ node ./server.js

server启动后直接访问上述配置的地址,就可以看到下面的界面:

这个界面其实是有问题的,在chrome浏览器下偶尔会报错TypeError: Cannot read property 'length' of null,当你遇到报错的时候不用担心,换firefox浏览器重新打开就ok.

Notice:这里需要注意的是注册账号的时候用到了redis服务,所以你需要在code-push-server的配置文件中进行配置,要不然会注册不了。

暂时就写这么多吧,如有想起来的再添加上去。有什么问题的可以发邮件给我lb12625@gmail.com