安装STF
-
本地搭建能访问外网的ubuntu环境
- 安装virturalbox
- 创建ubuntu虚拟机,需要注意的是网络配置:
- 只需要配置1个网卡
- 网卡链接方式选择:网络地址转换NAT,否则grub-pc无法安装(这是引导程序)
- 配置端口转发,否则宿主机无法访问ubuntu,主要是为了ssh服务访问方便,而且vbox控制台中文乱码
- 端口转发配置如下:
- 首先查看宿主机的vbox虚拟网卡IP:
- ipconfig /all
- 配置端口转发,如:
- 主机IP 192.168.56.1 端口22
- 子系统IP 10.0.2.15 端口22
- 首先查看宿主机的vbox虚拟网卡IP:
-
配置xxxxx的ubuntu镜像(安装rethinkdb需要依赖其他包,其他包的源在xxxxx的镜像源里有)
- 先备份之前的镜像:
- cp /etc/apt/sources.list sources.list.bak
- 新建 vi sources.list
把如下内容插入sources.list
deb http://mirrors.xxxxx.com.cn/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.xxxxx.com.cn/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.xxxxx.com.cn/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.xxxxx.com.cn/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.xxxxx.com.cn/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.xxxxx.com.cn/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.xxxxx.com.cn/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.xxxxx.com.cn/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.xxxxx.com.cn/ubuntu/ trusty-backports main restricted universe multiverse
- 先备份之前的镜像:
-
安装gcc
apt-get install build-essential
-
安装nodejs
官网下载: node-v6.11.2-linux-x64.tar.xz
解压: tar -zxvf node-v6.11.2-linux-x64.tar.xz
把解压的node文件夹移动到自定义存放位置,如:mv node-v6.11.2-linux-x64 /opt/
把node命令映射到bin: ln -s /opt/node-v6.11.2-linux-x64/bin/node /user/local/bin/node
把npm命令映射到bin: ln -s /opt/node-v6.11.2-linux-x64/bin/npm /user/local/bin/npm
-
验证是否安装成功:
-
node -v
v6.9.1
-
npm -v
v2.15.1
-
-
配置cnpm(并把npm源改为taobao源)
npm install -g cnpm --registry=https://registry.npm.taobao.org
-
安装JDK(可选,不需要装)
官网或者公司软件下载中心下载: jdk-7u71-linux-x64.gz
解压: tar -zxvf jdk-7u71-linux-x64.gz
把解压的JDK文件夹移动到自定义存放位置,如:mv jdk-7u71-linux-x64 /opt/
-
设置环境变量:
vi /etc/profile
-
在profile中添加如下内容:
JAVA_HOME=/opt/jdk-7u71-linux-x64
JRE_HOME=/opt/jdk-7u71-linux-x64/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH -
使profile修改生效:
source /etc/profile
-
验证JDK有效性:
java -version
-
安装adb(依赖android的SDK)
apt-get install android-tools-adb
-
安装rethinkdb
https://download.rethinkdb.com/apt/pubkey.gpg可能在虚拟机无法访问,用本地电脑先下载下来,然后传到ubuntu中,用apt-key add pubkey.gpg安装
source /etc/lsb-release && echo "deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list wget -qO- https://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add - sudo apt-get update sudo apt-get install rethinkdb
-
编译源文件方式安装
- 安装依赖
sudo apt-get install build-essential protobuf-compiler python \ libprotobuf-dev libcurl4-openssl-dev \ libboost-all-dev libncurses5-dev \ libjemalloc-dev wget m4
- 获取源文件
wget https://download.rethinkdb.com/dist/rethinkdb-2.3.6.tgz tar xf rethinkdb-2.3.6.tgz
- 安装
cd rethinkdb-2.3.6 ./configure --allow-fetch make sudo make install
- 遇到的问题
protobuf要切回2.5.X或者2.6.0版本才能安装rethinkdb,否则3.3.0的不能安装rethinkdb.(通过apt命令可以直接安装2.5.X或者2.6版本,但是3.3.0得自己编译安装)
apt-get install libssl-dev需要安装,否则即使安装了openssl1.0.1t也会报crypto和ssl需要安装1.0.1t,libssl-dev看系统而定不需要一定是1.0.1t
可以先用apt-get install libssl-dev安装源自带版本,然后再编译安装1.0.1t版本-
openssl未安装
-
去openssl官网下载openssl-1.0.1t.tar.gz
https://www.openssl.org/source/old
-
解压
tar -zxvf openssl-1.0.1t.tar.gz
安装
./config --prefix=/usr/local/openssl ./config -t make make install
- 创建符号链接(这部可做可不做,看你的需求)
#ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl #ln -s /usr/local/openssl/include/openssl /usr/include/openssl
- 刷新动态库配置
#vim /etc/ld.so.conf 在文件末尾加入 include /usr/local/openssl/lib
- 测试(如果你没有创建符号链接,下面的命令要带上具体的路径)
openssl version -a
-
-
安装graphicsmagick
apt-get install graphicsmagick
-
安装libsodium(zeromq的依赖)---可选,在zeromq安装失败可根据错误选择性安装
-
github下载最新包:https://github.com/jedisct1/libsodium/releases
解压libsodium-1.0.3.tar.gz并控制台进入目录
执行./configure make sudo make install
-
-
安装zeromq
echo "deb http://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/ ./" >> /etc/apt/sources.list wget https://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/Release.key -O- | sudo apt-key add apt-get install libzmq3-dev
https://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/Release.key可能在虚拟机无法访问,用本地电脑先下载下来,然后传到ubuntu中,用apt-key add Release.key安装
-
离线安装方式
STF只支持libzmq.so.3.1.0的动态库,该动态库是zeromq.4.0.3.tar.gz版本的库,因此一定要下该版本的库
解压后./configure make make install
理论上应该直接生效了,通过stf doctor查看,但是貌似要安装如下的库才生效:
apt-get intall libzmq-dev
-
安装Protocol Buffers
-
把protobuf-cpp-3.0.0-alpha-3.tar.gz包下载下来,然后按如下执行:
./configure --prefix=/usr/local/protobuf make sudo make install vi /etc/profile export PATH=$PATH:/usr/local/protobuf/bin/ export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/ source /etc/profile
-
-
安装yasm(for compiling embedded libjpeg-turbo)
apt-get install yasm
npm install --save jpeg-turbo
-
安装pkg-config
apt-get install pkg-config
-
安装bower
npm install bower -g
bower -version
-
安装stf(失败的话多安装几次,网络问题)
cnpm install -g stf
启动STF
-
启动rethinkDB
- rethinkdb (最简单的启动)
- 指定端口和缓冲大小启动:rethinkdb --bind all --cache-size 8192 --http-port 8090
-
启动stf
指定ip和允许远程连接启动:stf local --public-ip 192.168.56.1 --allow-remote
-
在虚拟机环境下,需要在虚拟机设置-> 网络->端口转发,映射虚拟机的IP和端口:
比如: 虚拟机网卡是192.168.56.1,
虚拟机连接方式:网络地址转换(NAT)
虚拟机内部网络IP是10.0.2.15
则:ssh服务需要进行端口映射
10.0.2.15:22端口映射到192.168.56.1:22
stf的各种开放端口如果外部要访问都要进行映射
需要注意的是stf每连接一台设备会创建一个7400~7700之间的端口作为websocket进行连接
-
链接另一台adb服务的启动方式:
- stf local --public-ip 192.168.56.1 --allow-remote --adb-host xx.xx.xx.xx --adb-port 5037
-
只启动主服务,不启动节点服务:
stf local --public-ip 10.66.80.158 --allow-remote --auth-type cas --user-service-url 10.1.25.94
-
设备节点
stf provider --name test --min-port 7400 --max-port 7700 --connect-sub tcp://127.0.0.1:7114 --connect-push tcp://127.0.0.1:7116 --group-timeout 20000 --public-ip 10.66.80.158 --storage-url http://localhost:7100/ --adb-host 10.66.80.231 --adb-port 5037 --vnc-initial-size 600x800 --allow-remote
-
启动adb
adb start-server
-
查看设备连接情况:
- adb devices 或者lsusb
手机必须开启开发者模式
-
启动 adb server 并对外暴露 5037 端口(该方法试用于1.0.31版本)
adb -a -P 5037 fork-server server
介于1.0.31版本的adb经常容易断开设备,升级adb到1.0.39, 启动方法如下
adb nodaemon server -a
如果接入了手机,但是adb devices显示无设备,则是手机没有安装adb驱动
-
注意事项
如果stf是从github上下载的,则是一个干净的项目(没有安装依赖node_modules),需要进入到stf后执行npm install命令,自动安装需要的所有node_modules依赖包
-
gulp 命令是为二次开发编译stf用的,有如下2个命令:
gulp clean 清除build文件
gulp webpack:build 编译源文件
-
需要安装gulp:
npm install gulp-cli -g npm install gulp -D
确保stf目录下存在gulpfile.js和webpack.config.js文件
离线安装gulp:
把安装了的gulp从nodejs的lib/node_modules里直接拷贝到待部署的nodejs的lib/node_modules下,并且配置软连接即可
需要拷贝gulp和gulp-cli 2个库
ln -s /xxx/nodejs/lib/node_modules/gulp-cli/bin/gulp.js gulp.js
开发环境部署
-
使用webpack进行前端打包(研究了一下,貌似只能对前端代码修改自动编译,后端代码必须重启服务才能生效)
- STF默认有webpack.config.js文件,可以直接通过gulp命令进行构建
-
使用webpack-dev-server进行前端开发模式(可以废弃,因为STF自带开发环境)
-
确保安装了webpack-dev-server, STF的package.json里已包含依赖关系,默认会安装,如果没有安装自己手动安装
npm install --save-dev webpack-dev-server
-
STF默认有gulpfile.js配置文件,修改此文件
添加一行:
var WebpackDevServer = require("webpack-dev-server")
-
添加脚本命令:
gulp.task("webpack-dev-server", function(callback) { // Start a webpack-dev-server var myConfig = Object.create(webpackConfig); new WebpackDevServer(webpack(myConfig), { // server and middleware options }).listen(8080, "localhost", function(err) { if(err) throw new gutil.PluginError("webpack-dev-server", err); // Server listening gutil.log("[webpack-dev-server]", "http://localhost:8080/webpack-dev-server/index.html"); // keep the server alive or continue? // callback(); }); });
-
启动webpack-dev-server
gulp webpack-dev-server
-
-
STF自带前端开发模式
- 删除res/build整个文件夹即可,这样启动的时候就是webpack的开发环境
CAS单点登录
-
安装CAS
npm install cas-authentication
-
要使cas-authentication支持oa登录,需要修改cas的源码
-
打开cas-authentication下的index.js
修改CASAuthentication.prototype._handleTicket方法:
修改2个地方:
-
strictSSL: false
注释掉//strictSSL: false,
-
pathname: this.cas_path + this._validateUri,
改为pathname: this.cas_path + 'proxyValidate',
CASAuthentication.prototype._handleTicket = function(req, res, next) { var requestOptions = { host: this.cas_host, port: this.cas_port, //strictSSL: false, rejectUnauthorized: false, session_name: 'user', //必须设置,否则关闭浏览器的时候user无法置空,会出现user一直存在的问题 }; if (['1.0', '2.0', '3.0'].indexOf(this.cas_version) >= 0){ requestOptions.method = 'GET'; requestOptions.path = url.format({ pathname: this.cas_path + 'proxyValidate',//+ this._validateUri, query: { service: this.service_url + url.parse(req.url).pathname, ticket: req.query.ticket } }); } ......
-
-
修改源码, 把_login函数中的renew: this.renew注释掉,否则在异步跨域访问的时候单点登录需要重新登录
//renew:this.renew
建议把cas-authentication从node_modules中移动到项目中,因为修改了源码,如果node_modules更新了就没办法恢复了