首页 文章 精选 留言 我的

精选列表

搜索[搭建],共10007篇文章
优秀的个人博客,低调大师

puppeteer搭建代理转发请求

使用方法 tnpm install -g @ali/tuzki tuzki set -a 你的账号 tuzki set -p 你的密码 tuzki start tuzki set -a --account ,设置域账号-p --passowrd ,设置域账号密码 tuzki config 输出当前配置的域账号和密码 tuzki start 运行代理,默认是 5000 端口,如果你在 start 后指定了一个端口则会在指定端口运行 tuzki start -p 9000 // 在9000端口运行 开发过程 koa Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。当然,这段话是我抄的。https://koa.bootcss.com/ puppeteer Puppeteer是一个Node库,它提供了高级API来通过DevTools协议控制Chrome或Chromium 。当然,这句话也是我抄的。https://github.com/puppeteer/puppeteer。简单的说就是Puppeteer提供了一个可供node环境使用的一个无界面、代码控制的谷歌浏览器。可以通过调用api来实现一个用户可能有的所有操作。说实话我用完以后觉得这个拿来当爬虫用真的杠杠的。。 方案 基本是围绕着怎么生成cookie,怎么请求接口进行。让puppeteer代替用户登陆平台,请求接口,拿到响应以后再用koa响应本地的前端请求。emm,大概就是下面这条线。 代码实现 代码实现思路大致分两部分,第一部分是让koa去识别和响应前端请求,第二部分是puppeteer收到koa拆解出协议和参数后,收发请求。 koa部分 用koa生成一个http server,开始监听某个端口的请求。这里使用了koa-log4帮助记录日志。 const Koa = require("koa"); const log4js = require("koa-log4"); const logger = log4js.getLogger("app"); const { PORT } = require("./config"); require("../log"); const bodyParser = require("koa-bodyparser"); const { instance: lubanProxy } = require("./lubanProxy"); async function server() { // init app & proxy const app = new Koa(); app.use(bodyParser()); app.use(log4js.koaLogger(log4js.getLogger("http"), { level: "auto" })); await lubanProxy.loginLuban(); // add logger to a request app.use(async (ctx, next) => { const start = new Date(); await next(); const ms = new Date() - start; logger.info(`${start} ${ctx.method} ${ctx.url} - ${ms}ms`); }); // send request to lb-test app.use(async ctx => { if (ctx.method === "GET") { let res = await lubanProxy.get(ctx.url); ctx.body = res; } else if (ctx.method === "POST") { let res = await lubanProxy.post(ctx.url, ctx.request.body); ctx.body = res; } }); app.on("error", (err, ctx) => { logger.error("server error", err, ctx); }); app.listen(PORT); } server(); puppeteer部分 生成一个浏览器,登陆平台,向koa提供get和post方法。 登陆部分 模拟真实用户的登陆操作即可。 loginLuban = async () => { this.browser = await puppeteer.launch(); const page = await this.browser.newPage(); await page .goto( "https://login.abc.com/login.html“ ) .catch(async e => { await page.waitFor(2000); logger.error(`load login page timeout,retrying...`); }); await page .evaluate(() => { document.querySelector("input[name='account']").focus(); }) .catch(async _ => { logger.error(`Cannot get login form`); }); await page.keyboard.type(ACCOUNT); await page .evaluate(() => { document.querySelector("input[name='password']").focus(); }) .catch(async _ => { logger.error(`Cannot get login form`); }); await page.keyboard.type(PASSWORD); await Promise.all([page.waitForNavigation(), page.click(".submit")]) .then(async () => { await page.goto("http://luban.abc.net/manage.htm"); console.log("proxy ready..."); }) .catch(async _ => { logger.error( `Navigation timeout of 30000 ms exceeded,restarting browser...` ); await this.restartBrowser(); }); }; get请求 puppeteer只能用来模拟用户操作,无法自如的发送ajax,所以get请求的思路是用page.goto来模拟。 get = async url => { const page = await this.browser.newPage(); let res = ""; await page .goto("http://luban.abc.net" + url) .then(async () => { res = await page.content(); res = res.slice(res.indexOf("{"), res.lastIndexOf("}") + 1); }) .catch(_ => { logger.error(`get request got net::ERR_CONNECTION_RESET error`); res = { code: -1, message: "Got a net error, try again?" }; }); await page.close(); return res; }; post请求 post请求比get复杂一些,因为get可以通过页面跳转,而post无法模拟。 /** * 用注入一段js的方式发送post请求 * 打开lb-test jarvis的index页面,同时注入一段js代码,将参数填充进js代码段中, * 将接口返回的内容写入div#root的innerHTML中,wait()接口请求时间后,获取div#root的innerHTML即为接口返回内容。 * 为每个请求单独开辟一个标签页,防止上一个请求没结束时即被新的请求覆盖, * 当请求结束时主动关闭标签页,释放占用的内存 * 若此过程成功,则返回json字符串,若失败,返回失败原因 * @param {string} url 请求的地址 * @param {object} param 请求的参数 * @return {string} json字符串 */ post = async (url, param) => { const page = await this.browser.newPage(); let res = ""; await page.goto( "http://lb-test.alibaba.net/project/jarvis/page/index.html" ); await page.addScriptTag({ content: ` $.post('http://lb-test.alibaba.net'+'${url}', {data: ${JSON.stringify( param.data )}}, function (result) { document.querySelector('#root').innerHTML = JSON.stringify(result) });` }); await page.waitFor(500); res = await page.evaluate(() => { return document.querySelector("#root").innerHTML; }); await page.close(); return res; };

优秀的个人博客,低调大师

CentOS-搭建MinIO集群

一、基础环境 操作系统:CentOS 7.x Minio在线演示 Minio下载 二、准备工作 2.1、机器资源 192.168.1.101 /data1 192.168.1.102 /data2 192.168.1.103 /data3 192.168.1.104 /data4 本集群由4台服务器构成(官方推荐集群最小4台服务器),每个服务器上挂载两个磁盘目录,最小数据挂载点为4个 2.2、创建相关目录(所有节点) 数据存储目录 $mkdir -p /var/minio/bin 启动脚本目录 $ cd /var/minio/bin $ wgethttps://dl.minio.io/server/minio/release/linux-amd64/minio $chmod +x minio 集群配置文件目录 $mkdir -p /etc/minio 三、编写集群启动脚本(所有节点配置文件相同) $vim /var/minio/bin/run.sh #!/bin/bash export MINIO_ACCESS_KEY=minio export MINIO_SECRET_KEY=test123456 /var/minio/bin/minio server --config-dir /etc/minio \ http://192.168.1.101/data1http://192.168.1.102/data2\ http://192.168.1.103/data3http://192.168.1.104/data4 其中,“MINIO_ACCESS_KEY”为用户名,“MINIO_SECRET_KEY”为密码,密码不能设置过于简单,不然minio会启动失败,“-config-dir”指定集群配置文件目录 $chmod +x/var/minio/bin/run.sh 四、编写服务脚本(所有节点) $ vim /usr/lib/systemd/system/minio.service [Unit] Description=Minio service Documentation=https://docs.minio.io/ [Service] WorkingDirectory=/var/minio/bin/ ExecStart=/var/minio/bin/run.sh Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target 其中,“WorkingDirectory”为启动脚本目录,“ExecStart”为指定集群启动脚本 $chmod +x /usr/lib/systemd/system/minio.service 五、启动测试 启动 systemctl daemon-reload systemctl start minio systemctl enable minio 测试 浏览器输入集群任意节点地址+9000端口,即可访问minio,用户名密码为前面设置的“MINIO_ACCESS_KEY”和“MINIO_SECRET_KEY”,可创建“bucket”并上传文件测试 六、配置nginx(可选) 配置nginx 支持lb(支持集群节点;支持多集群混用) upstream minio-server { server 192.168.1.101:9000 weight=25 max_fails=2 fail_timeout=30s; server 192.168.1.102:9000 weight=25 max_fails=2 fail_timeout=30s; server 192.168.1.103:9000 weight=25 max_fails=2 fail_timeout=30s; server 192.168.1.104:9000 weight=25 max_fails=2 fail_timeout=30s; } server { listen 80; server_name localhost; charset utf-8; default_type text/html; location /{ proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; client_body_buffer_size 10M; client_max_body_size 10G; proxy_buffers 1024 4k; proxy_read_timeout 300; proxy_next_upstream error timeout http_404; proxy_passhttp://minio-server; } } 七、配置桶的永久下载连接(可选) 安装客户端 首先是安装minio客户端,这个官方文档很清楚,各取所需吧,由于我使用的服务器没有外网,只能通过XFTP上传离线文件进行使用,所以下载二进制文件 二进制文件地址:https://dl.minio.io/client/mc/release/linux-amd64/mc $chmod +x mc 设置自定义命令 $alias mc="./mc" 至此,我们的minio client就安装完成了。 添加服务端host 使用 minio client 将我自己的 minio server 添加到 mc 的配置管理: $mc config host addminio-101http://192.168.1.101:9000/miniotest123456S3v4 $mc config host addminio-102http://192.168.1.102:9000/miniotest123456S3v4 $mc config host addminio-103http://192.168.1.103:9000/miniotest123456S3v4 $mc config host addminio-104http://192.168.1.104:9000/miniotest123456S3v4 这样我们才能直接管理这个 minio server 端。 配置下载策略(设置桶dev的policy) $mc policy set downloadminio-101/dev $mc policy set downloadminio-102/dev $mc policy set downloadminio-103/dev $mc policy set downloadminio-104/dev 这个命令的作用是将 server 端的 dev 桶设置为开放管理,可以直接通过 url (nginx或任意节点)进行下载。 [桶名]/[路径]可以一直拼接到具体的文件夹或文件 类似于以下http://xxx.xxx.xxx.xxx:9000/dev/xxx.zip,可用浏览器直接从此URL访问下载。

优秀的个人博客,低调大师

ubuntu golang vscode环境搭建

安装golang # 到官网下载二进制包https://golang.org/dl/ 或者 https://studygolang.com/dl # 解压包 tar -xvf go1.12.9.linux-amd64.tar.gz # 移动到正常目录下 sudo mv go /usr/local/ # 添加环境变量, 配置代理, 启用gomod sudo vim /etc/profile.d/golang.sh export PATH=$PATH:/usr/local/go/bin export GO111MODULE=on export GOPROXY=https://goproxy.io # 加载环境变量 source /etc/profile.d/golang.sh # 测试安装 go version 安装vscode 到官网下载vscode https://code.visualstudio.com/下载deb包双击安装或者dpkg -i 安装即可 安装vscode 的go插件 安装其他工具 如果因为墙原因无法安装,请翻墙,或者手动安装https://github.com/Microsoft/vscode-go/wiki/Go-tools-that-the-Go-extension-depends-on安装日志Installing github.com/mdempsky/gocode SUCCEEDEDInstalling github.com/uudashr/gopkgs/cmd/gopkgs SUCCEEDEDInstalling github.com/ramya-rao-a/go-outline SUCCEEDEDInstalling github.com/acroca/go-symbols SUCCEEDEDInstalling golang.org/x/tools/cmd/guru SUCCEEDEDInstalling golang.org/x/tools/cmd/gorename SUCCEEDEDInstalling github.com/go-delve/delve/cmd/dlv SUCCEEDEDInstalling github.com/stamblerre/gocode SUCCEEDEDInstalling github.com/rogpeppe/godef SUCCEEDEDInstalling github.com/sqs/goreturns SUCCEEDEDInstalling golang.org/x/lint/golint SUCCEEDEDInstalling github.com/cweill/gotests/... SUCCEEDEDInstalling github.com/fatih/gomodifytags SUCCEEDEDInstalling github.com/josharian/impl SUCCEEDEDInstalling github.com/davidrjenni/reftools/cmd/fillstruct SUCCEEDEDInstalling github.com/haya14busa/goplay/cmd/goplay SUCCEEDEDInstalling github.com/godoctor/godoctor SUCCEEDED 配置vscode { "files.autoSave": "afterDelay", "go.buildOnSave": "workspace", "go.lintOnSave": "package", "go.vetOnSave": "package", "go.formatTool": "goreturns", "go.goroot": "/usr/local/go", "go.useLanguageServer": true, "go.alternateTools": { "go-langserver": "gopls", }, "go.languageServerExperimentalFeatures": { "format": true, "autoComplete": true }, "[go]": { "editor.codeActionsOnSave": { "source.organizeImports": true }, } }

优秀的个人博客,低调大师

hadoop搭建之hive安装

本文hive安装环境系统:centos6.9jdk:jdk1.8.0_201hadoop:hadoop-2.7.2HBase:hbase-1.2.4 zookeeper:zookeeper-3.4.9mysql:mysql-server hive安装版本:apache-hive-2.1.1 mysql数据库连接安装包mysql-connector-java-5.1.44-bin.jar 1、下载安装包apache-hive-2.1.1-bin.tar.gz 2、将下载的安装包上传到centos6.9b并解压,重新命名为hive 3、配置环境变量(在root下) 输入命令vi /ect/profile # Hive environment export HIVE_HOME=/opt/modules/hive export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH 4、source /etc/profile 生效环境变量 5、将mysql连接安装包mysql-connector-java-5.1.44-bin.jar放到hive中的lib文件下 5、修改hive配置文件,切换至目录cd /opt/modules/hive/conf,把初始化文件复制一份并改名 cp hive-env.sh.template hive-env.sh cp hive-default.xml.template hive-site.xml cp hive-log4j2.properties.template hive-log4j2.properties cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties 6、新建hive在hdfs的缓存目录(配置文件会用到) hadoop fs -mkdir hbase hadoop fs -mkdir hbase/temp 7、在hive目录下,建立temp文件夹(配置文件会用到) 8、修改hive-env.sh #hadoop这里根据你的地址 export HADOOP_HOME=/opt/modules/hadoop export HIVE_CONF_DIR=/opt/modules/hive/conf export HIVE_HOME=/opt/modules/hive export HIVE_AUX_JARS_PATH=/opt/modules/hive/lib 9、在mysql数据库中新建hive数据库 10、修改hive-site.xml(文件信息比较多,用Ctrl搜索name值,修改value值即可) 配置数据库 <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://主机名:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value> </property> #配置连接驱动 <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> #配置数据库用户名 <property> <name>javax.jdo.option.ConnectionUserName</name> <value>用户名</value> </property> #配置数据库密码 <property> <name>javax.jdo.option.ConnectionPassword</name> <value>密码</value> </property> #配置缓存目录: <property> <name>hive.metastore.warehouse.dir</name> #刚才创建的第一个 <value>/hbase</value> <description> location of default database for the warehouse </description> </property> <property> <name>hive.exec.scratchdir</name> #刚才建的第二个目录 <value>/hbase/temp</value> <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description> </property> #配置刚才在hive建的temp文件 <property> <name>hive.querylog.location</name> <value>/opt/modules/hive/tmp${user.name}</value> <description>Location of Hive run time structured log file</description> </property> 在配置文件 hive-site.xml 里面把 {system:java.io.tmpdir} 改成 /opt/modules/hive/temp 把 {system:user.name} 改成 {user.name} 11、初始化hive,输入命令 schematool -initSchema -dbType mysql 初始化成功会有以下提示Starting metastore schema initialization to 2.1.0Initialization script hive-schema-2.1.0.derby.sqlInitialization script completed 12、输入命令hive,进入hive进行测试 总结:最近在学习配置的时候,对于路径的理解不是很深入,总是会出现大大小小的问题,经过练习,对于路径能熟悉很多,大多数的事情都是从不熟悉到熟悉,慢慢坚持

优秀的个人博客,低调大师

一秒搭建gitbook

gitbook docker 镜像 为gitbook docker镜像 效果图 效果如下图所示 使用说明 环境准备 需要docker环境。 使用步骤 第一种 请先frok本项目 frok完成以后,登录主机,输入如下命令,项目拉取下来 git clone [您的frok项目地址]; 进行本地构建,输入如下代码 sudo docker build ./ -t gitbook:vo 运行该镜像 sudo docker run -p 4000:4000 gitbook:vo 访问地址 http://[服务器ip]:4000/ 使用自动化工具进行构建(推荐) 推荐使用自动化构建工具,在本地自动化构建推荐的工具有 docker hub https://cloud.docker.com/travis-ci https://travis-ci.orgdaocloud https://dashboard.daocloud.io 日常使用 当自动化构建完成以后,日常使用如下 本地clone项目 git clone [您的github地址] 在work目录下进行编辑使用详见gitbook的使用教程 栗子 已经有一个已经部署好的啦。访问http://test.iming.info/ github地址 https://github.com/mySoul8012/gitbook_docker

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

JDK

JDK

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。