服务器部署 · Sekiro系统文档 (iinti.cn)http://sekiro.iinti.cn/sekiro-doc/02_server/1.busniess_server.html所用环境是Ubuntu20
安装步骤:
我参照的是这个文档
(48条消息) Ubuntu安装 Docker_胡八一 的博客-CSDN博客_ubuntu安装dockerhttps://blog.csdn.net/qq_44732146/article/details/121207737
sudo pip install docker-compose
启动docker之后,执行如下命令,如果失败,可以直接执行下面的quickstart.sh文件
curl https://oss.iinti.cn/sekiro/quickstart.sh | bash
或者直接执行下面这个quickstart.sh
#!/usr/bin/env bash
now_dir=`pwd`
if [ ! -d sekiro_compose ]; then
mkdir "sekiro_compose"
else
rm -rf sekiro_compose/*
fi
cd sekiro_compose
curl -o "sekiro_compose.zip" "https://oss.iinti.cn/sekiro/sekiro-compose.zip"
(unzip --help) /dev/null 2>&1 || {
echo
echo "no unzip cmd , please install unzip first: yum install -y unzip"
exit 4
}
unzip sekiro_compose.zip
sudo docker-compose down;
sudo docker pull registry.cn-beijing.aliyuncs.com/iinti/common:sekiro3server-latest
sudo docker-compose up -d
如下图:
打开网址http://服务器的IP:5612
注册账号,第一个注册账号是超级管理员
下面的截图是官方的教程
(1)构造子域名的方法
在服务器的/etc/hosts文件里面配置如下
127.0.0.1 sekiro.licdn.com (后面的这个域名是自己随便起的)
现在浏览器打开 http://sekiro.licdn.com:5612 看看是不是能正常打开进去网站,用刚刚注册的账号密码进行登录,这个带域名的网站和刚刚的网站是同一个网站。
下一步安装CA证书,官网有提供证书,直接下载。我下载的是pem格式的证书。
SSL证书方案 · Sekiro系统文档http://sekiro.iinti.cn/sekiro-doc/01_user_manual/6.sslForWebsocket.htmlUbuntu命令行安装证书,直接搜索网上的,可以使用。
过程图
现在浏览器打开 https://sekiro.licdn.com:5612 看看是不是能正常打开进去网站,注意http修改成了https,我到这一步的时候,还是会报不安全,截图如下:
安装证书还是提示Warning: Potential Security Risk Ahead,后来我在浏览器上调整了浏览器安全证书的容忍度,也是网上搜的,好像调整一下就好了,具体记不清楚了,大家可以试一下。
接下来注入js代码,并建立wss连接,复制官方的代码:
如下并做局部修改,将下面的wss://www.linkedin.cn/business/register?group=ws-group&clientId=修改为wss://sekiro.licdn.com:5612/business/register?group=ws-group&clientId=
function SekiroClient(e){if(this.wsURL=e,this.handlers={},this.socket={},!e)throw new Error("wsURL can not be empty!!");this.webSocketFactory=this.resolveWebSocketFactory(),this.connect()}SekiroClient.prototype.resolveWebSocketFactory=function(){if("object"==typeof window){var e=window.WebSocket?window.WebSocket:window.MozWebSocket;return function(o){function t(o){this.mSocket=new e(o)}return t.prototype.close=function(){this.mSocket.close()},t.prototype.onmessage=function(e){this.mSocket.onmessage=e},t.prototype.onopen=function(e){this.mSocket.onopen=e},t.prototype.onclose=function(e){this.mSocket.onclose=e},t.prototype.send=function(e){this.mSocket.send(e)},new t(o)}}if("object"==typeof weex)try{console.log("test webSocket for weex");var o=weex.requireModule("webSocket");return console.log("find webSocket for weex:"+o),function(e){try{o.close()}catch(t){}return o.WebSocket(e,""),o}}catch(t){console.log(t)}if("object"==typeof WebSocket)return function(o){return new e(o)};throw new Error("the js environment do not support websocket")},SekiroClient.prototype.connect=function(){console.log("sekiro: begin of connect to wsURL: "+this.wsURL);var e=this;try{this.socket=this.webSocketFactory(this.wsURL)}catch(o){console.log("sekiro: create connection failed,reconnect after 2s"),setTimeout(function(){e.connect()},2e3)}this.socket.onmessage(function(o){e.handleSekiroRequest(o.data)}),this.socket.onopen(function(e){console.log("sekiro: open a sekiro client connection")}),this.socket.onclose(function(o){console.log("sekiro: disconnected ,reconnection after 2s"),setTimeout(function(){e.connect()},2e3)})},SekiroClient.prototype.handleSekiroRequest=function(e){console.log("receive sekiro request: "+e);var o=JSON.parse(e),t=o.__sekiro_seq__;if(!o.action)return void this.sendFailed(t,"need request param {action}");var n=o.action;if(!this.handlers[n])return void this.sendFailed(t,"no action handler: "+n+" defined");var s=this.handlers[n],i=this;try{s(o,function(e){try{i.sendSuccess(t,e)}catch(o){i.sendFailed(t,"e:"+o)}},function(e){i.sendFailed(t,e)})}catch(r){console.log("error: "+r),i.sendFailed(t,":"+r)}},SekiroClient.prototype.sendSuccess=function(e,o){var t;if("string"==typeof o)try{t=JSON.parse(o)}catch(n){t={},t.data=o}else"object"==typeof o?t=o:(t={},t.data=o);(Array.isArray(t)||"string"==typeof t)&&(t={data:t,code:0}),t.code?t.code=0:t.status?t.status=0:t.status=0,t.__sekiro_seq__=e;var s=JSON.stringify(t);console.log("response :"+s),this.socket.send(s)},SekiroClient.prototype.sendFailed=function(e,o){"string"!=typeof o&&(o=JSON.stringify(o));var t={};t.message=o,t.status=-1,t.__sekiro_seq__=e;var n=JSON.stringify(t);console.log("sekiro: response :"+n),this.socket.send(n)},SekiroClient.prototype.registerAction=function(e,o){if("string"!=typeof e)throw new Error("an action must be string");if("function"!=typeof o)throw new Error("a handler must be function");return console.log("sekiro: register action: "+e),this.handlers[e]=o,this};
var client = new SekiroClient("wss://www.linkedin.cn/business/register?group=ws-group&clientId=" + Math.random());
client.registerAction("testAction", function (request, resolve, reject) {
c = undefined;
resolve(window.ja("d_incareer2_profile_homepage", c));
});
回车如下:
但是好景不长呀,后面没多久就出问题了,如下:
在其他HTTPS网站是可以用的,但是到这个网站就不行,可能是这个网站的安全等级比较高,可能是证书问题嘛?也不太清楚 , 后来我访问https://sekiro.licdn.com:5612/时,发现还是不安全的。
当天这个问题没有解决,第二天了,继续。
更新一下docker
给浏览器设置代理到127.0.0.1 5612,这样浏览器访问就会经过sekiro服务器
重新将上面的wss连接进行修改如下:
var client = new SekiroClient("wss://www.linkedin.cn/business/register?group=ws-group&clientId=xxxxx");这样wss建立连接的时候,访问www.linkedin.cn就会走到sekiro服务器上
浏览器调用接口
测试成功!!!!
(2)sekiro和浏览器不在同一台电脑
sekiro启动成功之后,wss从客户端和服务端建立连接的时候,连接可以写域名或者服务器的ip地址,如var client = new SekiroClient("wss://192.168.126.131:5612/business/register?group=ws-group&clientId=xxxxx");或者var client = new SekiroClient("wss://sekiro.licdn.com:5612//business/register?group=ws-group&clientId=xxxxx");要保证的是电脑得配置hosts
这样就可以通过RPC远程调用JS函数,拿到数据,进行访问请求。
初次接触,写的不对的地方,请大家见谅,部分图片来源网络,如有请权,立即删除。