安裝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
-
解壓
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更新了就沒辦法恢復了