首页 文章 精选 留言 我的

精选列表

搜索[代码可视化],共10000篇文章
优秀的个人博客,低调大师

运用hanlp 通过 python 结合jpype 导出依存句法可视化

效果图 from jpype import * ... startJVM(getDefaultJVMPath(), "-Djava.class.path=E:hanlphanlp-1.5.4.jar;E:hanlp", "-Xms1g", "-Xmx1g")HanLP = JClass('com.hankcs.hanlp.HanLP')print(HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。")) 1 徐先生 徐先生 nh nr _ 4 主谓关系 _ _2 还 还 d d 4 状中结构 _3 具体 具体 a a 4 状中结构 _4 帮助 帮助 v v 0 核心关系 _5 他 他 r rr _ 4 兼语 _ _6 确定 确定 v v 4 动宾关系 _7 了 了 u ule 6 右附加关系 _8 把 把 p pba 15 状中结构 _9 画 画 v v 8 介宾关系 _10 雄鹰 雄鹰 n n 9 动宾关系 _11 、 、 wp w 12 标点符号 _12 松鼠 松鼠 n n 10 并列关系 _13 和 和 c cc _ 14 左附加关系 _ _14 麻雀 麻雀 n n 10 并列关系 _15 作为 作为 p p 6 动宾关系 _16 主攻 主攻 v vn _ 17 定中关系 _ _17 目标 目标 n n 15 动宾关系 _18 。 。 wp w 4 标点符号 _ f = open("E:/ab.txt",'a+') print((HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。")),file = f) -------------------------出现了 utf-8 编码问题---------------------------------- ----------------------------------解决方法:另存为----------------------------- 文章来源于神创的博客

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

docker swarm 集群及可视化界面的安装及配置

本文是swarm docker集群的实施文档 环境: centos 7 192.168.1.23 swarm-manager rethinkdb controller swarm-agent consul-c1 registrator 192.168.1.45 registrator swarm-agent consul-s3 192.168.1.65 registrator swarm-agent consul-s2 192.168.1.66 registrator swarm-agent consul-s2 192.168.1.70 registrator consul-c2 consul-template (nginx、haproxy) 192.168.1.71 registrator consul-c2 consul-template (nginx、haproxy) docker-engine 1.12.4 一、安装docker-engine 1.12.4 1、先检查是否安装旧版本docker rpm-qa|grepdocker 如果有先卸载 yumremovedocker* 2.编辑docker.repo文件,写入如下内容 cat>>/etc/yum.repos.d/docker-main.repo<<EOF name=DockermainRepository baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey= EOF 3.安装docker yum-yinstalldocker-engine 4.关闭防火墙和selinux systemctlstopfirewalld.service systemctldisablefirewalld.service 关闭selinux sed-i's/SELINUX=.*/SELINUX=disabled/g'/etc/selinux/config 重启 5.增加tcp监听端口 修改/lib/systemd/system/docker.service sed-i's/ExecStart=.*/ExecStart=\/usr\/bin\/dockerd-Hunix\:\/\/\/var\/run\/docker.sock-D-Htcp\:\/\/0.0.0.0\:2375/g'/lib/systemd/system/docker.service 6.重启docker systemctlenabledocker.service systemctlrestartdocker ps-ef|grepdocker 能看到docker启动及2375端口 7、安装pip及docker api yum-yinstallepel-release yum-yinstallpython-pip pipinstalldocker-pydocker-compose 二、配置consul cluster 1、创建consul 用户及组 groupadd-g1000consul useradd-u100-g1000-s/sbin/nologinconsul 2、创建consul 数据存储文件夹 mkdir-p/opt/consul/{data,conf} chown-Rconsul:/opt/consul 3、拉取consul镜像 dockerpullprogrium/consul 提示:目录没有官方出consul镜像,以上consul镜像是星数最高的,也是consul官方推荐的第三方dockerp_w_picpath 4、启动consul server 192.168.1.66 dockerrun-d\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ -hconsul-s1\ --restart=always\ --name=consul-s1\ progrium/consul\ -server-bootstrap-expect=1\ -ui-dir=/ui\ -client0.0.0.0\ -advertise192.168.1.66 5、启动consul server 192.168.1.65 dockerrun-d\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ -hconsul-s2\ --restart=always\ --name=consul-s2\ progrium/consul\ -server\ -ui-dir=/ui\ -client0.0.0.0\ -advertise192.168.1.65-join192.168.1.66 6、启动consul server 192.168.1.45 dockerrun-d\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ -hconsul-s3\ --restart=always\ --name=consul-s3\ progrium/consul\ -server\ -ui-dir=/ui\ -client0.0.0.0\ -advertise192.168.1.45-join192.168.1.66 7、启动consul Client192.168.1.23 dockerrun-d-hconsul-c1\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ --restart=always\ --name=consul-c1\ progrium/consul-advertise192.168.1.23-join192.168.1.66 8、启动consulClient192.168.1.70 dockerrun-d-hconsul-c2\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ --restart=always\ --name=consul-c2\ progrium/consul-advertise192.168.1.70-join192.168.1.66 9、启动consulClient192.168.1.71 dockerrun-d-hconsul-c3\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ --restart=always\ --name=consul-c3\ progrium/consul-advertise192.168.1.71-join192.168.1.66 10、关闭consul-s1并删除容器 dockerrm-fconsul-s1 重新启动一个新容器 dockerrun-d\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ -hconsul-s2\ --restart=always\ --name=consul-s2\ progrium/consul\ -server\ -ui-dir=/ui\ -client0.0.0.0\ -advertise192.168.1.66-join192.168.1.65 进入容器运行consulinfo查询是否实现自动选举Leader 三、registrator状态获取 依次启动 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.66\ consul://192.168.1.66:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.65\ consul://192.168.1.65:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.45\ consul://192.168.1.45:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.23\ consul://192.168.1.23:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.70\ consul://192.168.1.70:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.71\ consul://192.168.1.71:8500 四、安装Shipyard+Swarm 1、 192.168.1.23 dockerrun-tid\ -p3375:3375\ --restart=always\ --nameshipyard-swarm-manager\ swarm:latest\ manage--hosttcp://0.0.0.0:3375consul://192.168.1.66:8500 dockerrun-tid\ --restart=always\ --name=shipyard-rethinkdb\ -p28015:28015\ -p29015:29015\ -v/data/rethinkdb:/data\ index.tenxcloud.com/docker_library/rethinkdb dockerrun-tid\ --restart=always\ --nameshipyard-controller\ --linkshipyard-rethinkdb:rethinkdb\ --linkshipyard-swarm-manager:swarm\ -p8080:8080\ dockerclub/shipyard:latest\ server\ -dtcp://swarm:3375#中文镜像 dockerrun-tid\ --restart=always\ --nameshipyard-swarm-agent\ swarm:latest\ join--addr192.168.1.23:2375consul://192.168.1.66:8500 2、安装swarm-agent (192.168.1.66,192.168.1.65,192.168.1.45) dockerrun-tid\ --restart=always\ --nameshipyard-swarm-agent\ swarm:latest\ join--addr192.168.1.66:2375consul://192.168.1.66:8500 dockerrun-tid\ --restart=always\ --nameshipyard-swarm-agent\ swarm:latest\ join--addr192.168.1.65:2375consul://192.168.1.66:8500 dockerrun-tid\ --restart=always\ --nameshipyard-swarm-agent\ swarm:latest\ join--addr192.168.1.45:2375consul://192.168.1.66:8500 五、安装haproxy or nginx (192.168.1.70,192.168.1.71) 1、安装haproxy http://www.haproxy.org/download/1.7/src/haproxy-1.7.0.tar.gz yum-yinstallgitpatchgccgcc-c++readline-develzlib-devellibffi-devel\ opensslopenssl-develmakeautoconfautomakelibtoolbisonlibxml2\ libxml2-devellibxslt-devellibyaml-develpythonpython-docutils\ cmakeimakeexpat-devellibaiolibaio-develbzrncurses-develwget\ libjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devel\ pcre-develcurl-devellibmcryptlibmcrypt-devel cd/tmp wgethttp://www.haproxy.org/download/1.7/src/haproxy-1.7.0.tar.gz tar-xvf/tmp/haproxy-1.7.0.tar.gz makeTARGET=linux31PREFIX=/opt/haproxy makeinstallPREFIX=/opt/haproxy 2、配置/opt/haproxy/conf/haproxy.conf global log127.0.0.1local0 #log127.0.0.1local1notice #logloghostlocal0info maxconn50000 chroot/opt/haproxy uid99 gid99 daemon nbproc2 pidfile/opt/haproxy/run/haproxy.pid #debug #quiet defaults modetcp optiondontlognull optionforwardfor optionredispatch retries2 balancestatic-rr statsenable statsuri/ha?stats#haproxy运行状态查看自定义uri timeoutconnect3000 timeoutclient50000 timeoutserver50000 listenadmin_stat #监听端口 bind*:8888 #http的7层模式 modehttp #logglobal #统计页面自动刷新时间 statsrefresh30s #统计页面URL statsuri/admin?stats #统计页面密码框上提示文本 statsrealmHaproxy\Statistics #统计页面用户名和密码设置 statsauthadmin:admin #隐藏统计页面上HAProxy的版本信息 #statshide-version listenlogin bind*:9999 modetcp balanceroundrobin optionhttpchk #maxconn50000 #log127.0.0.1local0debug 3、haproxy 启动脚本/etc/init.d/haproxy #!/bin/bash #chkconfig:-8515 #description:haproxyisaWorldWideWebserver.Itisusedtoserve PROGDIR=/opt/haproxy PROGNAME=haproxy DAEMON=$PROGDIR/sbin/$PROGNAME CONFIG=$PROGDIR/conf/$PROGNAME.conf PIDFILE=$PROGDIR/run/$PROGNAME.pid DESC="HAProxydaemon" SCRIPTNAME=/opt/haproxy/init.d/$PROGNAME #Gracefullyexitifthepackagehasbeenremoved. test-x$DAEMON||exit0 start() { echo-n"Starting$DESC:$PROGNAME" $DAEMON-f$CONFIG echo"." } stop() {echo-n"Stopping$DESC:$PROGNAME" cat$PIDFILE|xargskill echo"." } reload() {echo-n"reloading$DESC:$PROGNAME" $DAEMON-f$CONFIG-p$PIDFILE-sf$(cat$PIDFILE) } case"$1"in start) start ;; stop) stop ;; reload) reload ;; *) echo"Usage:$SCRIPTNAME{start|stop|reload}">&2 exit1 ;; esac exit0 4、启动 haproxy 并加入开机启动 chmod+xhaproxy chkconfighaproxyon servicehaproxystart 5、安装nginx 并支支持数字证书 https://www.openssl.org/source/openssl-1.1.0c.tar.gz http://nginx.org/download/nginx-1.11.7.tar.gz yum-yinstallgitpatchgccgcc-c++readline-develzlib-devellibffi-devel\ opensslopenssl-develmakeautoconfautomakelibtoolbisonlibxml2\ libxml2-devellibxslt-devellibyaml-develpythonpython-docutils\ cmakeimakeexpat-devellibaiolibaio-develbzrncurses-develwget\ libjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devel\ pcre-develcurl-devellibmcryptlibmcrypt-devel 下载安装openssl cd/tmp wgethttps://www.openssl.org/source/openssl-1.1.0c.tar.gz tar-xvfopenssl-1.1.0c.tar.gz cd/tmp/openssl-1.1.0c ./config--openssldir=/usr/local/ssl make&&makeinstall ./configshared--openssldir=/usr/local/ssl makeclean make&&makeinstall 下载安装nginx cd/tmp wgethttp://nginx.org/download/nginx-1.11.7.tar.gz groupadd-rnginx useradd-gnginx-rnginx tar-xvfnginx-1.11.7.tar.gz cd/tmp/nginx-1.11.7 ./configure--prefix=/usr/local/nginx\ --sbin-path=/usr/sbin/nginx\ --conf-path=/etc/nginx/nginx.conf\ --error-log-path=/var/log/nginx/error.log\ --http-log-path=/var/log/nginx/access.log\ --pid-path=/var/run/nginx.pid\ --lock-path=/var/run/nginx.lock\ --http-client-body-temp-path=/var/cache/nginx/client_temp\ --http-proxy-temp-path=/var/cache/nginx/proxy_temp\ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp\ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp\ --http-scgi-temp-path=/var/cache/nginx/scgi_temp\ --user=nginx\ --group=nginx\ --with-http_ssl_module\ --with-http_realip_module\ --with-http_addition_module\ --with-http_sub_module\ --with-http_dav_module\ --with-http_flv_module\ --with-http_mp4_module\ --with-http_gunzip_module\ --with-http_gzip_static_module\ --with-http_random_index_module\ --with-http_secure_link_module\ --with-http_stub_status_module\ --with-http_auth_request_module\ --with-threads\ --with-stream\ --with-openssl=/tmp/openssl-1.1.0c\#openssl源码路径 --with-stream_ssl_module\ --with-http_slice_module\ --with-mail\ --with-mail_ssl_module\ --with-file-aio\ --with-http_v2_module\ --with-ipv6 mkdir-pv/var/cache/nginx/{client_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp} make&&makeinstall 6、nginx 配置文件 修改/etc/nginx/nginx.conf usernginx; worker_processes1; error_log/var/log/nginx/error.logwarn; pid/var/run/nginx.pid; events{ worker_connections1024; } http{ include/etc/nginx/mime.types; default_typeapplication/octet-stream; log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_log/var/log/nginx/access.logmain; sendfileon; tcp_nopushon; keepalive_timeout65; gzipon; include/etc/nginx/conf.d/*.conf; } 创建/etc/nginx/conf.d文件夹 mkdir-p/etc/nginx/conf.d 添加nginx默认web配置文件 /etc/nginx/conf.d/default.conf server{ listen80; server_namelocalhost; #charsetkoi8-r; #access_loglogs/host.access.logmain; location/{ root/usr/local/nginx/html; indexindex.phpindex.htmlindex.htm; } #error_page404/404.html; #redirectservererrorpagestothestaticpage/50x.html # error_page500502503504/50x.html; location=/50x.html{ roothtml; } #proxythePHPscriptstoApachelisteningon127.0.0.1:80 # #location~\.php${ #proxy_passhttp://127.0.0.1; #} #passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000 # location~\.php${ root/usr/local/nginx/html; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; } location~*^.+\.(jpg|jpeg|gif|png|bmp)${ access_logoff; rootopencart; expires30d; break; } } 7、创建nginx 启动脚本/etc/init.d/nginx #chkconfig:23451090 #description:StartandStopredis PATH=/usr/local/bin:/sbin:/usr/bin:/bin EXEC=/usr/sbin/nginx PIDFILE=/var/run/nginx.pid CONF="/etc/nginx/nginx.conf" AUTH="1234" case"$1"in start) if[-f$PIDFILE] then echo"$PIDFILEexists,processisalreadyrunningorcrashed." else echo"Startingnginxserver..." $EXEC& fi if["$?"="0"] then echo"nginxisrunning..." fi ;; stop) if[!-f$PIDFILE] then echo"$PIDFILEexists,processisnotrunning." else PID=$(cat$PIDFILE) echo"Stopping..." kill-9$PID PID=$(pidofnginx) kill-9$PID rm-rf/var/run/nginx.pid sleep2 while[-x$PIDFILE] do echo"Waitingfornginxtoshutdown..." sleep1 done echo"nginxstopped" fi ;; restart|force-reload) ${0}stop ${0}start ;; *) echo"Usage:/etc/init.d/nginx{start|stop|restart|force-reload}">&2 exit1 esac 8、设置nginx开机启动并启动nginx chmod+xnginx chkconfignginxon servicenginxstart 六、安装consul-template 实现服务器自动发现 1、下载consul-template https://releases.hashicorp.com/consul-template/0.16.0/consul-template_0.16.0_linux_amd64.zip cd/tmp wgethttps://releases.hashicorp.com/consul-template/0.16.0/consul-template_0.16.0_linux_amd64.zip yum-yinstallunzip unzip/tmp/consul-template_0.16.0_linux_amd64.zip-d/usr/bin/ 2、consul-template haproxy配置 cat>/opt/consul/conf/haproxy_ctmpl.json<<EOF consul="127.0.0.1:8500" template{ source="/opt/haproxy/conf/haproxy.ctmpl" destination="/opt/haproxy/conf/haproxy.conf" command="/etc/init.d/haproxyreload" } EOF 3、/opt/haproxy/conf/haproxy.ctmpl 配置 global log127.0.0.1local0 #log127.0.0.1local1notice #logloghostlocal0info maxconn50000 chroot/opt/haproxy uid99 gid99 daemon nbproc2 pidfile/opt/haproxy/run/haproxy.pid #debug #quiet defaults modetcp optiondontlognull optionforwardfor optionredispatch retries2 balancestatic-rr statsenable statsuri/ha?stats timeoutconnect3000 timeoutclient50000 timeoutserver50000 listenadmin_stat bind*:8888 modehttp #logglobal statsrefresh30s statsuri/admin?stats statsrealmHaproxy\Statistics statsauthadmin:admin #statshide-version frontendwww bind*:80 modehttp aclapachehdr(HOST)apache.zone.com aclnginxhdr(HOST)nginx.zone.com use_backendapache.qkazone.comifapache use_backendnginx.qkazone.comifnginx backendapache.zone.com balanceroundrobin modehttp {{rangeservice"apache-php-80"}} serverapache``.`Address`:``.`Port`check`end` backendnginx.zone.com modehttp balanceroundrobin {{rangeservice"nginx-80"}} servernginx``.`Address`:``.`Port`check`end` listenlogin bind*:9999 modetcp balanceroundrobin #log127.0.0.1local0debug {{rangeservice"centos7"}} serverssh``.`Address`:``.`Port`check`end` 4、配置consul-template haproxy 启动脚本/etc/init.d/haproxy_ctmpl #!/bin/bash #chkconfig:23451090 #description:StartandStopredis PATH=/usr/local/bin:/sbin:/usr/bin:/bin EXEC=/usr/bin/consul-template CONF="/opt/consul/conf/haproxy_ctmpl.json" case"$1"in start) PID=$(ps-ef|grep-vgrep|grep"$EXEC-config$CONF"|awk'{print$2}') if[-n"$PID"] then echo"haproxy_ctmplisrunning..." else echo"Startinghaproxy_ctmplserver..." $EXEC-config$CONF>/tmp/haproxy_ctmpl.out2>&1& fi ;; stop) PID=$(ps-ef|grep-vgrep|grep"$EXEC-config$CONF"|awk'{print$2}') if[-n"$PID"] then echo"Stopping..." kill-9$PID sleep2 else echo"haproxy_ctmplexists,processisnotrunning." fi ;; restart|force-reload) ${0}stop ${0}start ;; *) echo"Usage:/etc/init.d/tmpl{start|stop|restart|force-reload}">&2 exit1 esac 5、设置开机启动,启动 chmod+xhaproxy_ctmpl chkconfighaproxy_ctmplon servicehaproxy_ctmplstart 6、consul-template nginx配置/opt/consul/conf/nginx_ctmpl.json cat>/opt/consul/conf/nginx_ctmpl.json<<EOF consul="127.0.0.1:8500" template{ source="/etc/nginx/conf.d/nginx_web.ctmpl" destination="/etc/nginx/conf.d/nginx_web.conf" command="/usr/sbin/nginx-sreload" } EOF 7、/etc/nginx/conf.d/nginx_web.ctmpl配置 upstreamapache{ ip_hash; #Refer:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream #least_conn; #least_time; {{rangeservice"apache-php-80"}} server``.`Address`:``.`Port`fail_timeout=0; `end` keepalive64; } server{ listen80; server_nameapache.zone.com; location/{ client_max_body_size0; proxy_connect_timeout300s; proxy_send_timeout900; proxy_read_timeout900; proxy_buffer_size32k; proxy_buffers432k; proxy_busy_buffers_size64k; proxy_redirectoff; proxy_hide_headerVary; proxy_set_headerAccept-Encoding''; proxy_set_headerHost$host; proxy_set_headerReferer$http_referer; proxy_set_headerCookie$http_cookie; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerHost$host; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_headers_hash_max_size51200; proxy_headers_hash_bucket_size6400; proxy_passhttp://apache/; } } upstreamnginx{ ip_hash; #Refer:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream #least_conn; #least_time; {{rangeservice"nginx-80"}} server``.`Address`:``.`Port`fail_timeout=0; `end` keepalive64; } server{ listen80; server_namenginx.zone.com; location/{ client_max_body_size0; proxy_connect_timeout300s; proxy_send_timeout900; proxy_read_timeout900; proxy_buffer_size32k; proxy_buffers432k; proxy_busy_buffers_size64k; proxy_redirectoff; proxy_hide_headerVary; proxy_set_headerAccept-Encoding''; proxy_set_headerHost$host; proxy_set_headerReferer$http_referer; proxy_set_headerCookie$http_cookie; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerHost$host; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_headers_hash_max_size51200; proxy_headers_hash_bucket_size6400; proxy_passhttp://nginx/; } } 8、配置consul-template nginx启动脚本/etc/init.d/nginx_ctmpl #!/bin/bash #chkconfig:23451090 #description:StartandStopredis PATH=/usr/local/bin:/sbin:/usr/bin:/bin EXEC=/usr/bin/consul-template CONF="/opt/consul/conf/nginx_ctmpl.json" case"$1"in start) PID=$(ps-ef|grep-vgrep|grep"$EXEC-config$CONF"|awk'{print$2}') if[-n"$PID"] then echo"haproxy_ctmplisrunning..." else echo"Startinghaproxy_ctmplserver..." $EXEC-config$CONF>/tmp/nginx_ctmpl.out2>&1& fi ;; stop) PID=$(ps-ef|grep-vgrep|grep"$EXEC-config$CONF"|awk'{print$2}') if[-n"$PID"] then echo"Stopping..." kill-9$PID sleep2 else echo"haproxy_ctmplexists,processisnotrunning." fi ;; restart|force-reload) ${0}stop ${0}start ;; *) echo"Usage:/etc/init.d/tmpl{start|stop|restart|force-reload}">&2 exit1 esac 9、设置开机启动 chmod+xnginx_ctmpl chkconfignginx_ctmplon servicenginx_ctmplstart 七、测试是否自动发现 dockerrun-ti-d-p:80eboraas/apache-php dockerrun-d-ti-p:80nginx 1、打开http://192.168.1.66:8500/ui/#/dc1/services 2、http://192.168.1.23:8080/#/containers 查看shipyard 管理平台 账号admin密码shipyard 3、haproxy http://192.168.1.70:8888/admin?stats http://192.168.1.71:8888/admin?stats 账号:admin 密码admin 最后:注意事项:consul registrator 是基于端口发现的不映射端口是发现不了的 consul 服务挂了整个宿主机运行应用将不可见。registrator 是基于镜像名加端口服务 镜像名称为nginx 多端口暴露 对外发现的服务名称nginx-80 单个端口暴露就是镜像名称为服务名 像集群添加宿主机 consul registrator swarm-agent registrator 链接consul 端口请使用宿主机的consul 端口 使用其它机器端口如果其它机器挂了这台宿主机的应用不可被发现

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

180行JavaScript代码实现的小球随机移动代码

<html> <body> <div id ='desc'><b>test1:</b>test2</div> <canvas id = 'canvas'></canvas> </body> <script> window.onload = init(); function init() { canvas = document.getElementById('canvas'); context = canvas.getContext('2d'); canvas.height = window.innerHeight; canvas.width = window.innerWidth; mouse = {x:0,y:0}; colors = [ '#af0','#7CD14E','#1CDCFF','#FFFF00','#FF0000','#aee137','#bef202','#00b2ff','#7fff24','#13cd4b','#c0fa38','#f0a','#a0f','#0af','#000000' ]; canvas.addEventListener('mousemove',MouseMove,false); canvas.addEventListener('mousedown',MouseDown,false); canvas.addEventListener('mouseup',MouseUp,false); window.addEventListener('resize',canvasResize,false); dotsHolder = []; mouseMove = false; mouseDown = false; for(i = 0;i < 100;i++){ dotsHolder.push(new dots()); } /*REQUEST ANIMATION FRAME*/ (function() { var lastTime = 0; var vendors = ['ms', 'moz', 'webkit', 'o']; for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; } if (window.requestAnimationFrame) window.requestAnimationFrame = function(callback, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); console.log("timetoCall : " + timeToCall); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); console.log("id: " + id); lastTime = currTime + timeToCall; console.log("last time: " + lastTime); //return id; }; if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function(id) { clearTimeout(id); }; }()); } function canvasResize(event) { canvas.height = window.innerHeight; canvas.width = window.innerWidth; cancelAnimationFrame(animate); } function MouseUp(event) { if(mouseMove) { mouseMove = false;} if(mouseDown) { mouseDown = false; } } function MouseDown(event) { mouseDown = true; } function MouseMove(event) { mouse.x = event.pageX - canvas.offsetLeft; mouse.y = event.pageY - canvas.offsetTop; if(mouseMove) { context.lineTo(mouseX,mouseY); context.stroke(); } } function dots(){ this.xPos = Math.random()*canvas.width; this.yPos = Math.random()*canvas.height; this.color = colors[Math.floor(Math.random()*colors.length)]; this.radius = Math.random()*10; this.vx = Math.cos(this.radius); this.vy = Math.sin(this.radius); this.stepSize = Math.random() / 10; this.step = 0; this.friction = 7; this.speedX = this.vx; this.speedY = this.vy; } dots.draw = function() { context.clearRect(0,0,canvas.width,canvas.height); for(var c = 0; c < dotsHolder.length;c++) { dot = dotsHolder[c]; context.beginPath(); distanceX = dot.xPos - mouse.x; distanceY = dot.yPos - mouse.y; var particleDistance = Math.sqrt(distanceX*distanceX + distanceY*distanceY); var particleMouse = Math.max( Math.min( 75 / ( particleDistance /dot.radius ), 7 ), 1 ); context.fillStyle = dot.color; dot.xPos += dot.vx; dot.yPos += dot.vy; if(dot.xPos < -50) { dot.xPos = canvas.width+50; } if(dot.yPos < -50) { dot.yPos = canvas.height+50; } if(dot.xPos > canvas.width+50) { dot.xPos = -50; } if(dot.yPos > canvas.height+50) { dot.yPos = -50; } context.arc(dot.xPos,dot.yPos,(dot.radius/2.5)*particleMouse,0,2*Math.PI,false); //console.log("circle x: " + dot.xPos + " y: " + dot.yPos); context.fill(); if(mouseDown) { var minimumDistance = 164, distance = Math.sqrt((dot.xPos - mouse.x) * (dot.xPos - mouse.x) + (dot.yPos - mouse.y) * (dot.yPos - mouse.y)), distanceX = dot.xPos - mouse.x, distanceY = dot.yPos - mouse.y; if (distance < minimumDistance) { var forceFactor = minimumDistance / (distance * distance), xforce = (mouse.x - dot.xPos) % distance/7, yforce = (mouse.y - dot.yPos) % distance/dot.friction, forceField = forceFactor * 2/dot.friction; dot.vx -= forceField * xforce; dot.vy -= forceField * yforce; } if(dot.vx > dot.speed) { dot.vx = dot.speed/dot.friction; dot.vy = dot.speed/dot.friction; } else if (dot.vy > dot.speed) { dot.vy = dot.speed/dot.friction; } } } } function animate(){ requestAnimationFrame(animate); dots.draw(); } animate(); </script> </html> 鼠标单击小球后,会立即改变其移动方向和速度: 这是通过给canvas标签页注册的mousemove,mousedown响应函数实现的: 本文来自云栖社区合作伙伴“汪子熙”,了解相关信息可以关注微信公众号"汪子熙"。

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册