IP,操作系统OS,国家,浏览器信息GIF展示图 发布于 三月 24, 2021 图片URL:https://www.wieistmeineip.de/ip-address/ 图片URL:https://www.mzwu.com/pic/20070121/ipimg/ipimg.asp 评论
CentOS 7 下安装KVM和WebVirtCloud管理面板 发布于 三月 10, 2020 写在前面 本教程依据官方Wiki和现有教程以及自身实践编写而成,更正了官网Wiki的部分错误并简化了内容,适合一把梭操作,转载请标注来源。 WebVirtCloud 开源地址: https://github.com/retspen/webvirtcloud 感谢 @a350064 KVM安装 检查环境是否支持KVM cat /proc/cpuinfo | egrep 'vmx|svm' 若环境支持则有内容返回 关闭SELinux vi /etc/sysconfig/selinux 修改 SELinux=enforcing 为 SELinux=disabled 安装KVM环境 使用yum软件包管理器进行安装 yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install 检查KVM模块是否被加载 lsmod | grep kvm 若被正确加载则返回如下 kvm_intel 249856 0 kvm 655360 1 kvm_intel irqbypass 16384 1 kvm 配置 libvirt 启用TCP服务 命令行输入: LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf LIBVIRTD_ARGS="--listen" 修改 /etc/sysconfig/libvirtd 文件 去除 LIBVIRTD_ARGS="--listen" 前的#号 修改 /etc/libvirt/libvirtd.conf 文件 listen_tls = 0 listen_tcp = 1 tcp_port = "16509" auth_tcp = "none" 若为单机运行则需修改为 listen_addr = "127.0.0.1" 否则需修改为 listen_addr = "0.0.0.0" 开启服务并... 阅读全文
前端错误日志上报及网站统计(sentry+matomo) 发布于 十二月 14, 2020 本文配合 rancher1.6(手头一个测试集群没升级到最新的 2.x)讲解如何搭建并配置日志错误上报框架 Sentry 及网站统计分析框架 matomo 的搭建及接入 vue(本文以 iview-admin 为例)项目。 背景简述 sentry 项目运行过程中,难免出现 bug,前端不像后端可以很方便的采集项目日志(比如 log4j + elk),导致每次出问题后还原车祸现场费时费力。另外现在随着 vue 等兴起,构建项目时打成 min.js,无疑又加大了前端定位问题的难度。而 sentry 是一款专注于错误采集的框架,支持常见的主流语言 采集,聚合,并推送错误信息。注意,sentry 并不是日志平台(e.g. log4j + elk),也不是监控平台,sentry 专注于项目中的 Error 信息的采集,聚合,报警。 matomo 前身 Pwiki,是一款开源的 web 网站分析利器。类似于 Google Analytics。具体的特性,参见 Premium Web Analytics ,比如绘制页面热力图,录制会话,访问漏斗,A/B Test 等(这几样都是收费插件功能)。 注意:本文假设你已经有 rancher1.6 的环境 安装 matomo rancher 创建 matomo 在 rancher 主机上 ## 创建必要文件夹 mkdir -p /data/matomo/{config,logs,php,maxmind}/ ## 安装maxmind ip数据库 wget -P /tmp/ https://github.com/maxmind/geoipupdate/releases/download/v4.0.3/geoipupdate_4.0.3_linux_amd64.deb dpkg -i /tmp/geoipupdate_4.0.3_linux_amd64.deb mv /etc/GeoIP.conf{,.bak} cat << EOF | sudo tee -a /etc/GeoIP.conf AccountID 0 LicenseKey 000000000000 EditionIDs GeoLite2-Country GeoLite2-City GeoLite2-ASN DatabaseDirectory ... 阅读全文
Blogger搭建国内可正常访问博客(超详细教程) 发布于 十一月 15, 2019 二、国内访问 Blogger 1 首先准备 请确认自己能够科学上网。 不会的话,我这里写有一篇教程: http://mooc1.chaoxing.com/zt/201723393.html 购买域名。没什么好讲的,各个地方都能买,我图便利,直接在阿里云买的域名。(同一个域名,在腾讯云买还要便宜点,不过因为我上一个域名就在阿里云买的,所以这次顺便就在阿里云买了) 2.设置解析 1.Blogger要求的设置 打开Blogger后台,找到设置—基本,Blogger 会提示你需要设置两个 CNAME 分别解析到 ghs.google.com 和 ***.dv.googlehosted.com (每一个人的都不一样) 为了 Blogger 可以在国内访问,我们不能直接按上述的解析。 我们得将第一个 CNAME 解析:记录类型: A 记录,主机记录:WWW,记录值由「ghs.google.com」改成 「国内可访问的 IP」 后面的一个CNAME 解析不变:记录类型:CNAME,主机记录:ai76xxxxxxxxxxx,记录值:gv-j5jxxxxxxxxxx 2. 寻找国内可访问的 IP 可以使用站长之家 Ping 工具:http://ping.chinaz.com/ 如下图所示,Ping检测:ghs.google.com 找一个国内可访问的 IP。 注意:香港的IP延迟虽然小,但是不行。 3.域名后台设置解析 打开阿里云控制台—域名—域名列表—解析,照第一步所说的那样样设置,如下图: 至此,域名解析设置完成,当然这样还不够,我们还得修改Blogger自带的博客模板。 备注:如果想要实现不带www访问 添加:记录类型: A 记录,主机记录:@,记录值同为找到的 「国内可访问的 IP」 如下图这样: 这样用 axutongxue.com 也可以访问我的博客了 4.启用https 之前大佬说在设置https时,不能直接设置: https://blog.iljw.me/2018/07/enable-blogger-https.html 不过现在blogger好像改了,按上面那样设置之后,我们就可以直接在Blogger后台开启https了 ... 阅读全文
从零开始学习iftop流量监控(找出服务器耗费流量最多的ip和端口) 发布于 四月 13, 2020 一、iftop是什么 iftop是类似于top的实时流量监控工具。 作用:监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等 官网: http://www.ex-parrot.com/~pdw/iftop/ 二、界面说明 =>代表发送数据,<= 代表接收数据 TX:发送流量 RX:接收流量 TOTAL:总流量 Cumm:运行iftop到目前时间的总流量 peak:流量峰值 rates:分别表示过去 2s 10s 40s 的平均流量 三、常用参数 -i 指定需要检测的网卡, 如果有多个网络接口,则需要注意网络接口的选择,如:# iftop -i eth1 -B 将输出以byte为单位显示网卡流量,默认是bit -n 将输出的主机信息都通过IP显示,不进行DNS解析 -N 只显示连接端口号,不显示端口对应的服务名称 -F 显示特定网段的网卡进出流量 如iftop -F 192.168.85.0/24 -h 帮助,显示参数信息 -p 以混杂模式运行iftop,此时iftop可以用作网络嗅探器 ; -P 显示主机以及端口信息 -m 设置输出界面中最上面的流量刻度最大值,流量刻度分5个大段显示 如:# iftop -m 100M -f 使用筛选码选择数据包来计数 如iftop -f filter code -b 不显示流量图形条 -c 指定可选的配置文件 如iftop -c config file -t 使用不带ncurses的文本界面, 以下两个是只和-t一起用的: -s num num秒后打印一次文本输出然后退出,-t -s 60组合使用,表示取60秒网络流量输出到终端 -L num 打印的行数 -f 参数支持tcpdump的语法,可以使用各种过滤条件。 四、进入界面后的操作 一般参数 P 切换暂停/继续显示 h 在交互界面/状态输出界面之间切换 b 切换是否显示平均流量图形条 B 切换显示 2s 10s 和 40s 内的平均流量 T 切换是否显示每个连接的总流量 j/k 向上或向下滚动屏幕显示当前的连接信息 f 编辑筛选码 l 打开iftop输出过滤功能 ,如输入要显示... 阅读全文
重新学习并解锁emby4.6.7,4.7.2版本 发布于 六月 14, 2022 版本历史与建议 2022.6.4: 更新4.7.2版本. 更新docker镜像,更新双端文件,更新群晖一键脚本. 更新4.7.*版本群晖脚本的sb小bug.相比于4.7.1, emby官方 1.在媒体库选项中增加剧集介绍检测功能. 2.增加用户配置选项,可以跳片头. 3.修复从文件名中解析集数时的集数倒退问题. 4.修复家庭录像的文件名在文件名的最后一个点之后被截断的问题. 5.修复删除下载任务时重新下载的问题. 6.如果启用字幕选择,记住即使用户字幕模式被设置为默认为无. 从这个版本开始不再做所谓的美化包, 不再更新ubuntu脚本, 由于更新一次全端耗时太长,除非有重大更新,否则以后只能做到随缘更新了. 请各位手动关掉自动更新, 位置在 设置 - 自动更新 - 允许服务器自动重启以应用更新. 取消勾选然后点击保存. 2022.5.26: 更新4.7.1版本. 相比于4.7.0.60, 官方 1.修复了windows上不必要的ffmpeg依赖问题, 2.提升了内嵌中文字幕和音轨的体验, 3.修复了一堆错乱抽风的按钮(4.7.0.60版本所有人都会遇到), 4.歌词开始显示时间轴. 已经安装了4.7.0.60的同学可以考虑升级。 2022.5.20: 修复群辉一键脚本,更新ubuntu一键脚本的sb小bug,更新群晖命令。修复受到影响的docker镜像。 2022.5.19: 更新4.7.0.60正式版,更新群辉一键脚本,更新ubuntu一键脚本,更新docker,更新美化包。更新unraid模板。 2022.5.9: 更新群晖一键脚本到v1.2,解决运行脚本后套件无法启动的问题。更新4.7.38双平台测试版。 2022.4.8: 更新unraid模板, 默认加上了代理的字段, 需要自己设置好http和https代理地址。不需要的话请删掉这两个字段 前言 以前,emby开心用户靠neko.re老哥的第三方激活服务器和加速套件得以存活,今天,发现老哥的服务器已经全关了,意料之中,早晚的事,幸亏能用的时候就备份了老哥原来的返回格式。 1 2 3 4 5 6 7 8 //https://crackemby.mb6.top/admin/service/registration/validateDevice.php? {"cacheExpirationDays... 阅读全文
编写 docker-entrypoint.sh 入口文件 发布于 十一月 29, 2019 在 docker 的官方 Registry 中(store.docker.com) 流行的第三方应用在自己的页面中都提供了 dockerfile 的链接. 而很多 dockerfile 的 ENTRYPOINT 命令都是这么写的 ["docker-entrypoint.sh"] 本篇文章就扫盲下 docker-entrypoint.sh 的特殊用法和设计逻辑 MySQL set -e 你写的每个脚本都应该在文件开头加上 set -e , 这句语句告诉bash如果任何语句的执行结果不是 true 则应该退出. 这样的好处是防止错误像滚雪球般变大导致一个致命的错误, 而这些错误本应该在之前就被处理掉. 如果要增加可读性, 可以使用 set -o errexit , 它的作用与 set -e 相同 set -o pipefail 设计用途同上, 就是希望在执行错误之后立即退出, 不要再向下执行了. 而 -o pipefail 的作用域是管道, 也就是说在 Linux 脚本中的管道, 如果前面的命令执行出了问题, 应该立即退出 shopt -s nullglob 在使用 Linux 中的通配符时 * ?等 如果没有匹配到任何文件, 不会报 No such file or directory 而是将命令后面的参数去掉执行 if [ “${1:0:1}” = ‘-‘ ]; then… 这是一个判断语句, 在官方文件中, 上一行已经给出了注释: if command starts with an option, prepend mysqld 这个判断语句是 ${1:0:1} 意思是判断 $1(调用该脚本的第一个参数), 偏移量0(不偏移), 取一个字符(取字符串的长度) 如果判断出来调用这个脚本后面所跟的参数第一个字符是 - 中横线的话, 就认为后面的所有字符串都是 mysqld 的启动参数 上面的这个操作类似于 Python 的字符串切片 set – mysqld “$@” 在上面判断完第一个参数是 - 开头之后, 紧接着就执行了 set -- mysqld "$@" 这个命令. 使用了 set -- 的用法. set — 会将他后面所有以空格区分的字符串, 按顺序分别存储到$1,... 阅读全文
Base:一种Acid的替代方案 发布于 九月 17, 2019 本文是Ebay的架构师在2008年发表给ACM的文章,是一篇解释BASE原则,或者说最终一致性的经典文章. 文中Dan讨论了BASE与ACID原则的基本差异, 以及如何设计大型网站以满足不断增长的可伸缩性需求,期间如何对业务做调整与折衷. 以及一些具体的折衷技术的介绍. 在数据库分区中,以一致性换取可用性会显著提高系统伸缩性。 在过去的十年里,网络应用越来越普及。不管你正在为终端用户还是应用程序开发人员构建应用程序(即服务),您都希望您的应用程序得到广泛的采用,而广泛采用将会带来交易增长。如果您的应用程序依赖于持久化,那么数据存储可能会成为您的瓶颈。 有两种方法可用于扩展任何应用程序。第一个,也是最简单的,是垂直扩展:将应用程序移动到更大的计算机上。垂直扩展不影响数据的合理性,但是有几个限制。最明显的限制是超过系统的最大可用容量。垂直扩展也很昂贵,因为增加交易容量通常需要购买下一个更大的系统。垂直扩展通常会带来供应商依赖,从而进一步增加成本 水平扩展提供了更多的灵活性,但也相当复杂。水平数据扩展可以沿着两个维度进行。功能扩展,包括按功能分组数据,还有将不同的功能组分布到不同数据库。第二个维度是在功能区域内分割数据,分布到不同数据库,这也叫分片。图1说明了横向数据扩展策略。 如图1所示,水平扩展的两种方法都可以同时应用。用户、产品和事务可以在不同的数据库中。此外,每个功能区域都可以根据交易量跨多个数据库分割。如图所示,功能区域可以相互独立扩展。 功能分区 功能分区对于获得高的可伸缩性非常重要。任何优秀的数据库架构都会将schema分解为按功能分组的表。用户、产品、交易和通信都是功能的例子。利用诸如外键之类的数据库概念是保持这些功能区域一致性的常见方法。 依赖于数据库约束来确保跨功能组的一致性,会导致数据库在部署策略上的高耦合。为了使约束生效,表必须驻留在单个数据库服务器上,从而不能在交易数量增长时水平伸缩。在许多情况下,最简单的扩展方案是将功能组数据移动到相互独立数据库服务器上。 当交易量非常高的时候,不同的功能数据将在不同的数据库服务器。这需要将数据约束从数据库移出并在应用程序解决。这就带来了本文后面将讨论的几个挑战。 CAP原理 加州大学伯克利分校(University of California, Berkeley)教授、Ink... 阅读全文
nginx中location的顺序(优先级)及rewrite规则写法 发布于 七月 03, 2019 一、location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ configuration C ] } location ~ /documents/Abc { # 匹配任何以 /documents/Abc 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ configuration CC ] } location ^~ /images/ { # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。 [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配所有以 gif,jpg或jpeg 结尾的请求 # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则 [ configuration E ] } location /images/ { # 字符匹配到 /images/,继续往下,会发现 ^~ 存在 [ configuration F ] } location /images/abc { # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在 # F与G的放置顺序是没有关系的 [ configuration G ] } location ~ /images/abc/ { # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用 [ configuration H ] } l... 阅读全文
PHP使用SnowFlake算法生成唯一ID 发布于 七月 09, 2019 前言 本篇主要介绍高并发算法Snowflake是怎么应用到实战项目中的。 对于怎么理解Snowflake算法,大家可以从网上搜索‘Snowflake’,大量资源可供查看,这里就不一一详诉,这里主要介绍怎么实战应用。 为什么有Snowflake算法的出现呢? 首先它是Twitter提出来的。 前世今生 以前我们可以用UUID作为唯一标识,但是UUID是无序的,又是英文、数字、横杆的结合。当我们要生成有序的id并且按时间排序时,UUID必然不是最好的选择。 当我们需要有序的id时,可以用数据库的自增长id,但是在当今高并发系统时代下,自增长id速度太慢,满足不了需求。然而,对于有‘有序的id按时间排序’这一需求时,Twitter提出了它的算法,并且用于Twitter中。 需要注意的地方 可达并发量根据不同的配置不同,每秒上万并发量不成问题。 id可用时间:69年 使用限制 使用Snowflake其实有个限制,就是必须知道运行中是哪台机器。比如我们用Azure云,配置了10个实例(机器),要知道这10个机器是哪一台。 原理 ID由64bit组成 其中 第一个bit空缺 41bit用于存放毫秒级时间戳 10bit用于存放机器id 12bit用于存放自增ID 除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定。默认情况下41bit的时间戳可以支持该算法使用到2082年,10bit的工作机器id可以支持1023台机器,序列号支持1毫秒产生4095个自增序列id。 开始用Snowflake 下面是PHP源码 <?php namespace App \ Services ; abstract class Particle { const EPOCH = 1479533469598 ; const max12bit = 4095 ; const max41bit = 1099511627775 ; static $machineId = null ; public static function machineId ($mId = 0 ) { self ::$mac... 阅读全文
评论