yun.ixm.pw
Open in
urlscan Pro
47.238.146.222
Public Scan
URL:
https://yun.ixm.pw/
Submission: On August 16 via api from US — Scanned from US
Submission: On August 16 via api from US — Scanned from US
Form analysis
2 forms found in the DOMPOST https://isedu.top/
<form class="joe_header__above-search" method="post" action="https://isedu.top/">
<input maxlength="16" autocomplete="off" placeholder="请输入关键字..." name="s" value="" class="input" type="text">
<button type="submit" class="submit">Search</button>
<span class="icon"></span>
<nav class="result">
<a href="https://yun.ixm.pw/index.php/archives/23/" title="AdGuardHome 安装及部署教程" class="item">
<span class="sort">1</span>
<span class="text">AdGuardHome 安装及部署教程</span>
<span class="views">37,400 阅读</span>
</a>
<a href="https://yun.ixm.pw/index.php/archives/31/" title="搭建基于telegram的无限网盘" class="item">
<span class="sort">2</span>
<span class="text">搭建基于telegram的无限网盘</span>
<span class="views">9,504 阅读</span>
</a>
<a href="https://yun.ixm.pw/index.php/archives/53/" title="最新Cloudflare免费自选IP教程(非Partner)" class="item">
<span class="sort">3</span>
<span class="text">最新Cloudflare免费自选IP教程(非Partner)</span>
<span class="views">8,807 阅读</span>
</a>
<a href="https://yun.ixm.pw/index.php/archives/52/" title="关于微软Azure学生白嫖指南" class="item">
<span class="sort">4</span>
<span class="text">关于微软Azure学生白嫖指南</span>
<span class="views">8,555 阅读</span>
</a>
<a href="https://yun.ixm.pw/index.php/archives/33/" title="Oracle开放全部端口并关闭防火墙" class="item">
<span class="sort">5</span>
<span class="text">Oracle开放全部端口并关闭防火墙</span>
<span class="views">8,443 阅读</span>
</a>
</nav>
</form>
POST https://isedu.top/
<form class="search" method="post" action="https://isedu.top/">
<input maxlength="16" autocomplete="off" placeholder="请输入关键字..." name="s" value="" class="input" type="text">
<button type="submit" class="submit">Search</button>
</form>
Text Content
首页 关于 Search 1 AdGuardHome 安装及部署教程 37,400 阅读 2 搭建基于telegram的无限网盘 9,504 阅读 3 最新Cloudflare免费自选IP教程(非Partner) 8,807 阅读 4 关于微软Azure学生白嫖指南 8,555 阅读 5 Oracle开放全部端口并关闭防火墙 8,443 阅读 默认分类 技术搬砖 教学设计 故事奇谈 生活琐事 错题分析 精品软件 登录 Search 标签搜索 * docker * 张至顺 * Cloudflare * 金刚长寿功 * PT * qBittorrent * 阿里云 * onedrive * telegram * 图床 * 青龙 * python * 内网穿透 * 一键 * 签到框架 * 目录列表 * onedrive第三方 * 直链解析 * searx * 自建搜索引擎 myedunote 不患无位,患所以立。不患莫己知,求为可知也。 * 累计撰写 91 篇文章 * 累计收到 1 条评论 * 首页 * 栏目 * 默认分类 * 技术搬砖 * 教学设计 * 故事奇谈 * 生活琐事 * 错题分析 * 精品软件 * 页面 * 关于 * 最新文章 * 热门文章 * 评论最多 * 点赞最多 * * 2022-02-12 置顶VPS常用脚本合集 常用命令yum install net-tools netstat -tunlpyum install -y epel-release && yum install -y nethogs ifconfig nethogs -d 2 loyum install losf lsof -i:80 kill -s 9 PID综合工具箱wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh宝塔面板Centos:yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484becUbuntu:wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484becDebian:wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh ed8484becX-UI开源地址:x-uibash <(curl -Ls https://raw.githubusercontent.com/FranzKafkaYu/x-ui/master/install.sh)nezha探针curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh sudo ./nezha.sh一、GNU/Linux 一键更换国内软件源脚本bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/ChangeMirrors.sh)二、BBR+锐速一键脚本1、不卸载内核:wget -N --no-check-certificate "https://github.000060000.xyz/tcpx.sh"; chmod +x tcpx.sh2、卸载内核:wget -N --no-check-certificate "https://github.000060000.xyz/tcp.sh" && chmod +x tcp.sh && ./tcp.sh三、Glances:跨平台的系统性能监控利器curl -L https://bit.ly/glances | bash wget -O- https://bit.ly/glances | bash四、CNS搭建一键脚本:wget -O builds.sh http://binary.quicknet.cyou/builds.sh && sh builds.sh安装:`type curl &>/dev/null && echo 'curl -O' || echo 'wget -O cns.sh'` http://binary.quicknet.cyou/cns/cns.sh && sh cns.sh卸载:`type curl &>/dev/null && echo 'curl -O' || echo 'wget -O cns.sh'` http://binary.quicknet.cyou/cns/cns.sh && sh cns.sh uninstall五、测速脚本一键融合怪curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.shIP质量检测bash <(wget -qO- --no-check-certificate https://gitlab.com/spiritysdx/za/-/raw/main/qzcheck.sh)其他常用wget -qO- bench.sh | bash 或 curl -Lso- bench.sh | bashbash <(curl -Lso- https://git.io/superspeed_uxh)bash <(curl -Lso- https://git.io/superspeed)bash <(curl -Lso- https://git.io/J1SEh) 或 wget -O jcnf.sh https://raw.githubusercontent.com/Netflixxp/jcnfbesttrace/main/jcnf.sh bash jcnf.sh六、检测Netflix解锁脚本bash <(curl -sSL "https://github.com/CoiaPrant/MediaUnlock_Test/raw/main/check.sh")bash <(curl -sL haoduck.com/sh/nf.sh)wget -O nf https://github.com/sjlleo/netflix-verify/releases/download/2.5/nf_2.5_linux_amd64 && chmod +x nf && clear && ./nf全媒体:bash <(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)bash <(curl -L -s check.unlock.media)七、mtproxy搭建wget -N --no-check-certificate https://github.com/whunt1/onekeymakemtg/raw/master/mtproxy_go.sh && chmod +x mtproxy_go.sh && bash mtproxy_go.sh八、 安装 Docker及面板1、 升级源并安装软件(下面两行命令二选一,根据你自己的系统)Debian / Ubuntuapt-get update && apt-get install -y wget vimCentOSyum update && yum install -y wget vim2、 执行此命令等候自动安装 Dockerwget -qO- get.docker.com | bashcurl -sSL https://get.daocloud.io/docker | sh说明:请使用 KVM 架构的 VPS,OpenVZ 架构的 VPS 不支持安装 Docker,另外 CentOS 8 不支持用此脚本来安装 Docker。4、针对 Docker 执行以下命令启动 Docker 服务systemctl start docker查看 Docker 运行状态systemctl status docker将 Docker 服务加入开机自启动systemctl enable docker进入容器内部docker exec -it 容器id /bin/bash查看所有容器,包括未运行docker ps -adocker容器与主机之间传输文件docker cp 主机文件 id:容器路径5、DOCKER容器可视化管理系统x86一键安装代码docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce docker ps -a #查看所有容器 docker stop id #停止上面运行portainer docker pull portainer/helper-reset-password #下载帮助镜像 docker run --rm -v portainer_data:/data portainer/helper-reset-password #运行重置命令 docker start id #重新运行portainer自定义安装,自动更新到最新版本portainer-ce中文sh -c "$(curl -kfsSl https://gitee.com/expin/public/raw/master/onex86.sh)"arm64一键安装代码docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce:linux-arm64自定义安装,自动更新到最新版本portainer-ce中文sh -c "$(curl -kfsSl https://gitee.com/expin/public/raw/master/one.sh)"访问hub.docker.com网络慢,或者以上代码都无法安装成功尝试以下代码docker pull hub-mirror.c.163.com/6053537/portainer-ce docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce安装完成后在浏览器访问 http://服务器IP地址或域名:9000 。首次登录需要注册,注册成功后即可正常使用。6、linux更新相关apt-get update // 更新安装源(Source) apt-get upgrade // 更新已安装的软件包 apt-get dist-upgrade // 更新已安装的软件包(识别并处理依赖关系的改变)7、rclone更新相关#onedrive授权 rclone authorize "onedrive" # 复制到网盘,并显示实时传输进度,设置并行上传数为8,默认4 rclone copy -P /home/SunPma GD:/home/SunPma --transfers=8 # 如果需要服务端对服务端的传输可加以下参数(不消耗本地流量) rclone copy 配置名称:网盘路径 配置名称:网盘路径 --drive-server-side-across-configs九、优先使用swapvi /etc/sysctl.conf #文档末尾添加 vm.swappiness=80修改后保存,重启后生效十、DD网络重装脚本甲骨文、三毛、Vir、RN等大部分VPS通用,三毛、甲骨文 记得去掉 -firmwarebash <(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -d 11 -v 64 -p 密码 -port 端口 -a -firmwarePS:如果你是腾讯云记得卸载组件 否则会导致报错 DD失败国内VPS需要更换镜像源否则很慢!我这里使用的华为源,如果你是腾讯云后面可以换成内网源,节省流量,下面有写!bash <(wget --no-check-certificate -qO- 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh') -d 11 -v 64 -a --mirror 'https://mirrors.huaweicloud.com/debian/' -p 自定义密码DD windowshttps://git.beta.gs/#1、安装重装系统的前提组件: #Debian/Ubuntu: apt-get install -y xz-utils openssl gawk file wget screen && screen -S os #RedHat/CentOS: yum install -y xz openssl gawk file glibc-common wget screen && screen -S os #2、如果出现异常,请刷新Mirrors缓存或更换镜像源。 #RedHat/CentOS: yum makecache && yum update -y #Debian/Ubuntu: apt update -y && apt dist-upgrade -y #使用: wget --no-check-certificate -O NewReinstall.sh https://git.io/newbetags && chmod a+x NewReinstall.sh && bash NewReinstall.sh #如为CN主机(部分主机商已不能使用),可能出现报错或不能下载脚本的问题,可执行以下命令开始安装. wget --no-check-certificate -O NewReinstall.sh https://cdn.jsdelivr.net/gh/fcurrk/reinstall@master/NewReinstall.sh && chmod a+x NewReinstall.sh && bash NewReinstall.sh41合一系统密码:1、CentOS 7.7 (已关闭防火墙及SELinux,默认密码Pwd@CentOS)2、CentOS 7 (默认密码cxthhhhh.com)3、CentOS 7 (支持ARM64、UEFI,默认密码cxthhhhh.com)4、CentOS 8 (默认密码cxthhhhh.com)5、Rocky 8 (默认密码cxthhhhh.com)6、Rocky 8 (支持UEFI,默认密码cxthhhhh.com)7、Rocky 8 (支持ARM64、UEFI,默认密码cxthhhhh.com)8、CentOS 9 (默认密码cxthhhhh.com)9、CentOS 6 (官方源原版,默认密码Minijer.com)10、Debian 11 (官方源原版,默认密码Minijer.com)11、Debian 10 (官方源原版,默认密码Minijer.com)12、Debian 9 (官方源原版,默认密码Minijer.com)13、Debian 8 (官方源原版,默认密码Minijer.com)14、Ubuntu 20.04 (官方源原版,默认密码Minijer.com)15、Ubuntu 18.04 (官方源原版,默认密码Minijer.com)16、Ubuntu 16.04 (官方源原版,默认密码Minijer.com)17、Windows Server 2022 (默认密码cxthhhhh.com)18、Windows Server 2022 (支持UEFI,默认密码cxthhhhh.com)19、Windows Server 2019 (默认密码cxthhhhh.com)20、Windows Server 2016 (默认密码cxthhhhh.com)21、Windows Server 2012 (默认密码cxthhhhh.com)22、Windows Server 2008 (默认密码cxthhhhh.com)23、Windows Server 2003 (默认密码cxthhhhh.com)24、Windows 10 LTSC (默认密码Teddysun.com)25、Windows 10 LTSC (支持UEFI,默认密码Teddysun.com)26、Windows 7 x86 Lite (默认密码nat.ee)27、Windows 7 x86 Lite (阿里云专用,默认密码nat.ee)28、Windows 7 x64 Lite (默认密码nat.ee)29、Windows 7 x64 Lite (支持UEFI,默认密码nat.ee)30、Windows 10 LTSC Lite (默认密码nat.ee)31、Windows 10 LTSC Lite (阿里云专用,默认密码nat.ee)32、Windows 10 LTSC Lite (支持UEFI,默认密码nat.ee)33、Windows Server 2003 Lite (C盘默认10G,默认密码WinSrv2003x86-Chinese)34、Windows Server 2008 Lite (默认密码nat.ee)35、Windows Server 2008 Lite (支持UEFI,默认密码nat.ee)36、Windows Server 2012 Lite (默认密码nat.ee)37、Windows Server 2012 Lite (支持UEFI,默认密码nat.ee)38、Windows Server 2016 Lite (默认密码nat.ee)39、Windows Server 2016 Lite (支持UEFI,默认密码nat.ee)40、Windows Server 2022 Lite (默认密码nat.ee)41、Windows Server 2022 Lite (支持UEFI,默认密码nat.ee)99、自定义镜像 * 2022年02月12日 * 2,318 阅读 * 0 评论 * 3 点赞 技术搬砖 * 2024-08-13 置顶使用阿里云 OSS 存储服务 + CloudFlare 配置图床 前言带宽联盟是 Cloudflare 推出的一项服务,由一群具有前瞻性思维的云服务和网络公司组成,致力于为共同客户降低或免除数据传输(带宽)费用。为什么能做到非常低甚至能免除成本呢?云厂商跟 Cloudflare 直接的数据传输,是通过专用网络接口 (PNI) 或专用互连的,中间不经过任何网络提供商(比如电信),既然是直连,那么就不存在 PNI 的增量成本了,自然也就便宜了。虽然阿里云不是第一批加入带宽联盟的,但是到现在为止也加入一年多了(我白嫖也一年多了 * 2024年08月13日 * 6 阅读 * 0 评论 * 0 点赞 技术搬砖 * 2024-08-10 置顶云函数自建 Vaultwarden 密码管理器: 稳定、低成本、高可用、安全 最近看到 Chrome 密码管理器出现问题了,虽然没有波及到我,但感觉用谷歌浏览器的密码管理器还是不太安全,所以准备自建。自建目标稳定低成本高可用安全经过考虑, 选择了 Vaultwarden,并用阿里云函数通过 docker 部署。Vaultwarden 简介Vaultwarden 是一款开源密码管理器, 通过 Rust 编写并基于 Bitwarden API 实现。客户端仍使用 Bitwarden, 只需对接 Vaultwarden 的 API 即可。准备工作一个阿里云账号(腾讯云不知道有没有 docker 部署)本地 docker 环境或具有 docker 环境的 VPS (最好是国内的, 传输更快)部署步骤1. 创建阿里云容器镜像服务实例登录阿里云账号, 进入容器镜像服务控制台开通免费个人实例创建命名空间 (名称随意)创建名为 "vaultwarden" 的镜像仓库设置访问凭证密码2. 登录 Docker 到阿里云docker login --username=xxxxxxxxxxxx registry.cn-shenzhen.aliyuncs.comxxxxx 是你的阿里云账号,就是右上角头像那里,看清楚不是 id,一般新用户是 “aliyun” 开头的,改了的自己看清楚登录密码就是上面访问凭证设置的密码3. 准备并上传 Docker 镜像# 拉取官方镜像 docker pull vaultwarden/server:latest # 查看镜像ID docker images # 标记镜像 docker tag 9ae942f38c7c registry.cn-shenzhen.aliyuncs.com/space/vaultwarden:2024.8.5 # 推送镜像到阿里云 docker push registry.cn-shenzhen.aliyuncs.com/space/vaultwarden:2024.8.5这一步很重要,是为了上传镜像到阿里云(阿里不允许从公用 hub 直接 pull)cn-shenzhen 是地域,自己换成自己开的地域,space 是上面设置的命名空间,vaultwarden 就是上面设置的你准备上传到阿里的镜像仓库名称,2024.8.5 是 tag,自己随便设置就行,我喜欢设置日期,方便后面更新的时候对比。4. 创建阿里云函数打开函数计算控制台创建 Web 函数, 选择自定义容器镜像选择刚才上传的镜像设置监听端口为 80配置 CPU 和内存 (0.25 CPU, 256MB 内存),个人使用是够了的,别开高了,等会内存泄漏,反薅设置单实例并发为 100选择上海时区5. 配置函数开启专有网络 (自动配置)开通 NAS 文件系统 (自动配置),会挂载一个点,自己看挂载的目录添加环境变量:# 数据目录 DATA_FOLDER=/mnt/vaultwarden # 这个不解释,自己搜索 ENABLE_DB_WAL=false部署函数6. 临时访问设置自己在阿里云有已经备案过的域名可以跳过 6 和 7 步,直接绑定自己的。由于近期云函数整改, 需要通过以下步骤实现临时访问:创建新的 Flask 应用获取 30 天有效域名将该域名绑定到 Vaultwarden 函数,在进行 web 操作7. 后续操作在 30 天域名过期前, 通过 Web 导入密码库之后直接使用函数原始 URL 调用 API成本估算免费套餐结束后, 个人使用年费用预计在几块钱左右,小 cpu 加冷启动会更便宜云函数正价、nas 存储的成本自己去看阿里云的价格表注意别让反薅了 * 2024年08月10日 * 17 阅读 * 0 评论 * 0 点赞 技术搬砖 * 2024-08-03 置顶一个Linux服务器WEB SSH面板(webSSH&webSFTP) [!WARNING]初次部署EasyNode,登录系统后务必记得修改默认账户密码 admin/admin![!WARNING]强烈建议使用 iptables 或 fail2ban 等安全服务限制IP访问,谨慎暴露面板服务到公网。[!NOTE]客户端信息监控与webssh功能都将以该服务器作为中转。中国大陆连接建议使用香港、新加坡、日本、韩国等地区的低延迟服务器来安装服务端功能[ ] webssh终端&SFTP[ ] 批量导入(Xshell&FinalShell)[ ] 实例分组[ ] 凭据托管[ ] 邮件通知[ ] 服务器状态推送[ ] 脚本库[ ] 批量指令[x] 终端自定义安装服务端安装占用端口:8082 推荐使用docker镜像安装Dockerdocker run -d --net=host --name=easynode-server -v $PWD/easynode/db:/easynode/app/db chaoszhu/easynode访问:http://yourip:8082手动部署依赖Nodejs版本 > 20+git clone https://github.com/chaos-zhu/easynode cd easynode yarn cd web yarn build mv dist/* ../server/app/static cd ../server yarn start # 后台运行需安装pm2 pm2 start index.js --name easynode-server访问:http://yourip:8082查看日志:pm2 log easynode-server启动服务:pm2 start easynode-server停止服务:pm2 stop easynode-server删除服务:pm2 delete easynode-server客户端安装客户端用于实时向服务端推送系统、公网IP、CPU、内存、硬盘、网卡等基础信息,不安装不影响使用面板,但是无法实时同步基础信息。占用端口:22022安装curl -o- https://mirror.ghproxy.com/https://raw.githubusercontent.com/chaos-zhu/easynode/main/client/easynode-client-install.sh | bash卸载curl -o- https://mirror.ghproxy.com/https://raw.githubusercontent.com/chaos-zhu/easynode/main/client/easynode-client-uninstall.sh | bash查看客户端状态:systemctl status easynode-client查看客户端日志: journalctl --follow -u easynode-client查看详细日志:journalctl -xe-- * 2024年08月03日 * 26 阅读 * 0 评论 * 1 点赞 技术搬砖 * 2024-07-30 置顶Docker部署搜索工具SearXNG SearXNG 是用 Python 编写的一款开源搜索工具安装前准备工作SearXNG 文档地址:网页链接Github 开源地址:网页链接Docker 安装教程 (菜鸟教程):网页链接Docker-Compose 安装教程 (菜鸟教程):网页链接文章参考:我不是咕咕鸽大佬的博客安装部署步骤一、创建项目存放路径并克隆源码cd /opt #在opt目录下创建 git clone https://github.com/searxng/searxng-docker.git #克隆源码 mv searxng-docker searxng #强迫症改名步骤二、修改 Docker-Compose 配置文件cd searxng vim docker-compose.yaml将运行 candy 部分注释掉,因为我们不用 Candy 做反向代理将这里的 IP 地址从 127.0.0.1 改成 0.0.0.0 以便局域网访问,将冒号前面的端口修改成自己服务器上没有被占用的端口编辑环境配置vim .env将域名修改成自己准备好的域名步骤三、编辑容器配置文件cd searxng生成密钥sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" settings.yml修改配置文件,取消限制,将 limter 改成 false步骤四、启动容器cd /opt/searxng docker-compose up -d步骤五、开启宝塔面板反向代理将反向代理配置部分修改如下location ^~ { proxy_pass http://127.0.0.1:自定义的端口; proxy_set_header Host $host; proxy_set_header Connection $http_connection; proxy_set_header X-Scheme $scheme; proxy_set_header X-Script-Name /searxng; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } * 2024年07月30日 * 27 阅读 * 0 评论 * 2 点赞 技术搬砖 * 2024-07-30 置顶Docker部署MeloTTS高质量多语言文本转语音(TTS) MeloTTS:由MyShell AI开发的一个高质量的多语言文本到语音(TTS)库。 支持英语、西班牙语、法语、中文、日语和韩语等多种语言。 速度非常快,支持中英混合的发音,能生成清晰、自然的语音输出。 即使在普通的在CPU上也能实现实时语音合成。主要功能:多语言支持:MeloTTS支持多种语言的文本到语音转换,包括英语(有美国、英国、印度、澳大利亚等多种口音)、西班牙语、法语、中文、日语和韩语。这使得它适用于全球多种语言环境的应用场景。中英混合发音:特别对于中文,MeloTTS支持中英混合的发音,这是在多语言交流中非常实用的功能,能够处理包含英文单词的中文文本。实时CPU推理:MeloTTS设计优化以确保即使在没有GPU加速的情况下,也能在CPU上实现实时语音合成,这提高了其在不同硬件环境下的可用性。高质量语音输出:MeloTTS旨在生成清晰、自然的语音输出,力求在各种支持的语言中保持语音的自然度和清晰度。易于安装和使用:提供了简单的安装指南和Python API,使得用户可以轻松地在Linux环境中安装MeloTTS,并通过几行代码实现文本到语音的转换。Linux and macOS InstallThe repo is developed and tested on Ubuntu 20.04 and Python 3.9.git clone https://github.com/myshell-ai/MeloTTS.git cd MeloTTS pip install -e . python -m unidic downloadDocker InstallBuild Dockergit clone https://github.com/myshell-ai/MeloTTS.git cd MeloTTS docker build -t melotts . Run Dockerdocker run -it -p 8888:8888 melottsIf your local machine has GPU, then you can choose to run:docker run --gpus all -it -p 8888:8888 melottsThen open http://localhost:8888 in your browser to use the app.Python APIfrom melo.api import TTS # Speed is adjustable speed = 1.0 device = 'cpu' # or cuda:0 text = "我最近在学习machine learning,希望能够在未来的artificial intelligence领域有所建树。" model = TTS(language='ZH', device=device) speaker_ids = model.hps.data.spk2id output_path = 'zh.wav' model.tts_to_file(text, speaker_ids['ZH'], output_path, speed=speed) * 2024年07月30日 * 33 阅读 * 0 评论 * 0 点赞 技术搬砖 * 2024-07-30 置顶部署changedetection.io,一个网站更改检测、监控和通知的开源工具 官方Github: https://github.com/dgtlmoon/changedetection.ioWeb Site Change Detection, Monitoring and Notification. Live your data-life pro-actively, Detect website changes and perform meaningful actions, trigger notifications via Discord, Email, Slack, Telegram, API calls and many more.网站更改检测、监控和通知。 主动体验您的数据生活,检测网站更改并执行有意义的操作,通过 Discord、电子邮件、Slack、电报、API 调用等触发通知。准备工作Docker 安装教程 (菜鸟教程):网页链接Docker-Compose 安装教程 (菜鸟教程):网页链接宝塔面板,反代环境部署执行以下命令,新建目录mkdir -p /opt/docker/changedetection.io && cd /opt/docker/changedetection.io新建docker-compose.yaml文件然后输入以下配置内容:version: "3" services: changedetection: image: ghcr.io/dgtlmoon/changedetection.io container_name: changedetection hostname: changedetection restart: unless-stopped environment: - USE_X_SETTINGS=1 - BASE_URL=https:// #修改成你的域名 - PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000/ ports: - 20041:5000 #2077为暴露端口,如被占用,请自行更改替换,需要在云服务器的控制台防火墙开放相应端口! volumes: - changedetection-data:/datastore playwright-chrome: image: browserless/chrome hostname: playwright-chrome restart: unless-stopped volumes: changedetection-data:输入执行以下命令后台启动容器docker compose up -d访问 https://ip:20041 进入主页修改网页抓取方式点击SETTINGS,Fetching中的Fetch Method,将其改为Playwright Chromium/Javascript via 'ws://playwright-chrome:3000/',然后Save即可!监控可以改监控间隔,点击 Edit:General: URL: https://api.bilibili.com/x/space/wbi/arc/search?mid=8366990&ps=30&tid=0&pn=1&keyword=&order=pubdate&order_avoided=true&w_rid=b37f7220280dbec445b877940e8bbc36&wts=1671982474 Time Between Check: 0 0 0 5 0 Request: Fetch Method: Basic fast Plaintext/HTTP Client Request method: GET Request headers: { accept: application/json, text/plain, */* accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9,en-AS;q=0.8,en;q=0.7 cache-control: no-cache cookie: buvid3=F8D5D1C8-55E2-23AC-AA4B-CD66147A8A0488878infoc; i-wanna-go-back=-1; b_ut=7; _uuid=938E2C3F-2567-F173-BA77-8E34C109BC47888980infoc; buvid_fp=a65c806ec103b5691068a7fe2d31f818; buvid4=891AB099-8FE4-6031-3245-4DCA36CEBFD789604-022051401-sluv7aFmF1Lh17bDnV1PEA%3D%3D; CURRENT_FNVAL=4048; blackside_state=1; PVID=5; b_lsid=F10E97E10F_18549E99616 dnt: 1 origin: https://space.bilibili.com pragma: no-cache referer: https://space.bilibili.com/8366990/video sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "macOS" sec-fetch-dest: empty sec-fetch-mode: cors sec-fetch-site: same-site user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 } Filters & Triggers: CSS/JSONPath/JQ/XPath Filters: json:$.data.list.vlist[0].[title] Notifications: tgram://5705562690:AAasdasddbaInDL0lHh8bcab-A7O4BpWv9_gvfE/2053317177/最新案例:想象一下,你想添加你最喜欢的网站 Opensource.com 进行监控。你只想知道主要标注文章何时包含 “python” 一词,并且通过 Matrix 收到通知。要做到这点,首先要使用“视觉选择器Visual Filter Selector”工具。(这需要连接 playwright 浏览器界面)。该工具会自动计算出针对内容的最佳 Xpath 或 CSS 过滤器。否则,你会从每天的页面更新中得到大量的噪音。接下来,访问“Filters & Triggers”标签。在 “CSS/JSON/XPATH Filter”区域(蓝色圆圈),你可以看到上一步自动生成的 CSS 过滤器。有几个有用的过滤器,比如“Remove elements”(适合移除嘈杂的元素)、“忽略文本Ignore text”、“触发/等待文本Trigger/wait for text”,和“如果文本匹配则阻止变化检测Block change-detection if text matches”(用于等待一些文本消失,如“售罄”)。在“触发/等待文本Trigger/wait for text”(红色圆圈)中,输入你想监测的关键词。(在这个例子中是 “python”)。最后一步是在“通知Notifications”选项卡中,你要在那里配置你想收到的通知。下面我使用邮箱、telegram添加了一个 通知目标。JSON API 监控案例找一个天气预报的 JSON API,请求是restfull 风格,city_code 为 9 位数字。只要拼接在地址 “http://t.weather.itboy.net/api/weather/city/+city_code” 后面即可。city_code 可以在这里查询: https://github.com/baichengzhou/weather.api/blob/master/src/main/resources/citycode-2019-08-23.json比如上海的 city_code 为 101020100所以在浏览器中输入 http://t.weather.itboy.net/api/weather/city/101020100 就能看到上海的天气信息将网页上的文本全部复制(Ctrl+A 然后 Ctrl+C),接着打开网页:https://jsonpath.com这个网址可用于 JSON 的语法测试将前面复制的内容粘贴到左侧的 Inputs,因为希望返回所有的数据,所以在 JSONPath Syntax 中输入了 $右侧的 Evaluation Results 不仅返回了所有的数据,并且对 JSON 数据进行了格式化处理,更易于阅读如果只是需要获取温度,可以在 JSONPath Syntax 中输入 $.data.wendu准备工作到这里就差不多了,返回到 Changedetection 新增一个监控,分别填入下面的内容后,点 Watch网址:http://t.weather.itboy.net/api/weather/city/101020100tag:天气在 CSS/JSON Filter 中输入 json:$.data.wendu,其中前缀 json: 是必须要的通知邮箱推送点右上角的 SETTINGS 是 default global settings,只需要在 Notification URL List 中设置通知方式Changedetection 采用了 apprise 项目来实现 通知 功能,可惜除了 邮件 ,老苏没找到手机上已经安装的应用所有支持的通知方式都在这里:https://github.com/caronc/apprise邮件发送的 URL 地址是 * 2024年07月30日 * 18 阅读 * 0 评论 * 0 点赞 技术搬砖 * 2024-07-30 置顶不绑信用卡,设置 Cloudflare 团队账户(Zero Trust) 绑定或不绑定信用卡,申请 Cloudflare Zero Trust (团队账户)免费科学上网Cloudflare 上网方式有三种。1、warp 账户,默认开通送 1G 流量。2、warp + 账户,相当于 warp pro 账户,通过关注 telegram 相关频道可获得 23.84PB 流量,这是多少?我给大家简单换算一下,1G 等于 1 千兆,1T 等于 1 千 G,1PG 等于 1 千 T)这些浏流量对于普通用户来说已经足足够用了,3、但还有比这更好的方案,那就是使用团队账户上网,如果开通了 teams 团队账户(Zero Trust 账户),就相当于获得了无限的流量。第一步:注册 Cloudflare 账户Cloudflare 注册对区域,邮箱没有要求,国内的 QQ 邮箱、163 邮箱都可注册 Cloudflare 账户,但得是真实的邮箱,能够接收验证邮件。1、打开 Cloudflare 官网:2、输入邮箱和密码3、验证邮箱:第二步:Zero Trust 设置1、登录 CF登录后,点击 Zero Trust 开始进入设置2、输入团队名称团队名称可任意起名,系统会验证是否重名。注册 Cloudflare 后第一次登陆,进入 Zero Trust 时会看到下面的页面。如果已经添加过团队名称会看到下面的页面3、选择免费计划(Free $0 / user / month)输入团队名称后,点击 Next 进入付费计划选择页面,选免费计划。4、选择继续支付(proceed to payment)这块不用担心,由于我们选择的是免费计划,输入信用卡信息点击支付时不会扣费。免费计划支持 50 个用户登陆访问。5、添加支付方式点 Add payment method 按钮进入支付信息填写页面下面的步骤需要绑定信用卡,想绑定信用卡的朋友接着往下看,不想绑定信用卡的朋友跳到【第五步】[](#89252ce1df494d9b88bd553d96488dc9 "6、添加支付信息")6、添加支付信息信用卡需使用可以支付外币的信用卡,比如带 VISA/MASTER 标识的信用卡卡。用户名称用汉语拼音填写,与信用卡一致,地址信息照实填写就行,也可以找一个虚拟地址。7、点下一步支付这里我们可以看到,费用是零。这里也可看到,团队用户计划中,可以允许 50 个用户登陆访问。第三步:设置客户端验证规则1、Settings 进入客户端设置点击 Settings,再点 WARP Client2、点击 Manage 进入客户端规则设置注意:只有绑定了支付信息的用户,才能看到 WARP Client 下的 Manage 按钮。3、点击 Add a rule 添加规则在这里添加的规则面对的是想登录的客户端用户4、设置用户登录规则Rule name:规则名称,名称可以任意填写Rule action:规则动作,保持默认(Allow)Selector:选择约束条件,这里选择以邮箱后缀最为约束条件(Emails ending in)Value:允许登录的邮箱后缀。如下图中添加了四个邮箱后缀,表示只有这四类邮箱才可以注册登录。Save:添加完成后,一定要记得保存第四步:下载客户端Cloudflare 支持五种客户端,macOS、windows、iOS、Android、Linux点 Downloads 进入客户端下载页面。也可打开 https://1.1.1.1 页面下载第五步:无卡注册步骤1、链接设备从支付信息填写页面退出后,点击 My Team 下的 Devices 调出 Connect a device 按钮。第一次进入时看不到 Connect a device 按钮,需按照下面方法操作。操作方法:先点击 My Team 下的 Users,再点击 Devices,如果没有出现,再次按顺序点 Users 和 Devices,直到 Devices 下出现 Connect a device 按钮,如下图所示。2、添加验证规则点击【 Connect a device 】打开添加登陆规则页面,点击【Create an enrollment policy】按钮3、输入登陆规则系统默认以邮箱后缀作为客户端的验证规则。这里填写需要验证的邮箱后缀(如:@hotmail.com),然后点 save 保存。4、获取团队名称点击页面中的 Windows 按钮,系统会自动打开一个页面,不用管。5、复制团队名称5.1、点击选项卡,返回之前的页面5.2、返回后会看到团队名称。复制团队名称,复制完成后这个页面不要关闭,一直保持这个状态。第六步:客户端设置1、安装客户端此处以 windwos 版安装为例。除了 Win 版,Cloudflare 还提供了 macOS、安卓版、苹果版、Linux 版。安装非常简单,双击运行安装文件,按照提示点击下一步完成安装即可。安装完成后,会在右下角看到一个类似云朵的图标。点击右下角的 Cloudflare 图标,按照提示点击下一步,并同意并接受协议。2、设置团队账户(Zero Trust)2.1、点击右下角 Cloadflare 图标,点击齿轮图标2.2、添加偏好设置2.3、点击账户→ 使用 Cloudflare Zero Trust 登陆2.4、点下一步并同意隐私条款2.5、输入团队名称并确定2.6、发送验证码输入要登陆的邮箱地址后,点击发送按钮(send me a code),系统会发一串验证码到这个邮箱。2.7、接受验证码并验证验证成功后点击右下角的 Cloadflare 图标,稍等片刻后,图标由红色的 warp + 改为蓝色的 Zero Trust,注册完成。点击按钮后显示已连接,表示已经成功联网,可以科学上网了。绑定信用卡与未绑定的不同绑定信用卡后,登陆账户可以随时编辑、修改、删除客户端登陆规则。未绑定信用卡的用户登陆后,无法看到已有的规则、虽然能添加规则,但无法修改和删除规则,添加规则操作不直观也不方便,操作相对繁琐。 * 2024年07月30日 * 57 阅读 * 0 评论 * 0 点赞 技术搬砖 * 2024-06-27 置顶国内无法访问下载 Docker 镜像的多种解决方案 简介2023 年 5 月, hub.docker.com "不知" 何种原因国内均无法正常访问了。当时只是官网不能访问,但不影响 pull 镜像。2024年6月7日,GFW正式DNS污染+SNI阻断了docker.com及其相关域名。从国内解析得到的IP地址为Twitter/Facebook的IP,符合大墙DNS污染的特征。而如果使用海外解析得到的正常IP地址从国内访问则会被SNI重置阻断链接。2024 年 6 月,国内几家 Docker Hub 镜像服务平台均发公告说 "被" 要求下架,停止服务。不知以后是否开放?或开启白名单模式?与此同时,上交镜像站等一系列中国大陆公益镜像站点也“接上级主管部门通知,暂时关闭 Docker Hub 镜像缓存服务”。(通知链接 1 2)更新:南京大学、中科大、上海交大 目前明确停止docker镜像 网易之前死了 腾讯微软据说内网可用 阿里登陆后就可以拿到子域名 百度好像也挂了 dockerproxy被墙这里不讨论其原因!这里分享几个便捷方法,帮助有需求的朋友正常的拉取 Docker 镜像!零门槛境外镜像优点:不需大量修改,只需几个命令缺点:网络可能慢或者不稳定下面命令可直接执行~sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://noohub.ru" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker命令行执行 docker info,如果从结果中看到了如下内容,说明配置成功。Registry Mirrors: [...] https://docker.m.daocloud.ioDocker Hub 镜像加速器列表以下镜像站来源于互联网(感谢热心网友),可能出现宕机、转内网、关停等情况,建议同时配置多个镜像源。2024年6月27日 亲测可用镜像加速器地址其他说明https://dockerpull.comCF的workers来搭建https://dockerproxy.cnCF的workers来搭建https://docker.1panel.live1Panel 面板提供(推荐)https://hub.rat.dev耗子面板提供https://docker.chenby.cnDocker Hubhttps://docker.anyhub.us.kgDockerHub 镜像加速代理https://dockerhub.icuDocker镜像加速站https://docker.ckyl.meDocker镜像加速站https://dockerhub.jobcher.comDocker Hubhttps://docker.hpcloud.cloud镜像使用说明https://docker.awsl9527.cn镜像使用说明https://www.hallodocker.com/镜像使用说明Yandex 容器加速优点:适合单独 pull 镜像使用,俄罗斯大厂提供服务缺点:不支持配置到 daemon.json官方镜像:https://mirror.yandex.ru/使用方式:docker pull cr.yandex/mirror/nginx低门槛Docker 使用 HTTP 代理优点:可从 Docker 官方直接拉取这里主要介绍如何让服务器的 Docker Pull 的时候能走代理!1,新建目录mkdir -p /etc/systemd/system/docker.service.d2,新建文件,粘贴并内容,并保存!vim /etc/systemd/system/docker.service.d/http-proxy.conf以下粘贴内容,IP 一定要换成你代理软件运行的电脑的内网 IP,通过 ipconfig 可以查看端口一定要是代理软件设置的局域网端口![Service] Environment="HTTP_PROXY=http://USERNAME:PASSWORD@[your.proxy.server]:[port]" Environment="HTTPS_PROXY=http://USERNAME:PASSWORD@[your.proxy.server]:[port]0" Environment="NO_PROXY=localhost,127.0.0.1,.example.com"3,重启 Dockersystemctl daemon-reload systemctl restart docker4,检查环境变量是否生效systemctl show --property=Environment docker高门槛Cloudflare 反向代理优点:只需有 CF 账号就行,自己专属,不用自己签发证书缺点:CF 在国内有 DNS 污染,可能无法正常访问简要步骤:1,登录到 CFhttps://dash.cloudflare.com/2,创建Workers控制台面板 -> 左侧 Workers 和 Pages -> 创建应用程序 -> 创建 Worker -> 点击保存 -> 点击完成 -> 编辑代码worker.js 内容// _worker.js // Docker镜像仓库主机地址 let hub_host = 'registry-1.docker.io' // Docker认证服务器地址 const auth_url = 'https://auth.docker.io' // 自定义的工作服务器地址 let workers_url = 'https://你的域名' // 根据主机名选择对应的上游地址 function routeByHosts(host) { // 定义路由表 const routes = { // 生产环境 "quay": "quay.io", "gcr": "gcr.io", "k8s-gcr": "k8s.gcr.io", "k8s": "registry.k8s.io", "ghcr": "ghcr.io", "cloudsmith": "docker.cloudsmith.io", // 测试环境 "test": "registry-1.docker.io", }; if (host in routes) return [ routes[host], false ]; else return [ hub_host, true ]; } /** @type {RequestInit} */ const PREFLIGHT_INIT = { // 预检请求配置 headers: new Headers({ 'access-control-allow-origin': '*', // 允许所有来源 'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS', // 允许的HTTP方法 'access-control-max-age': '1728000', // 预检请求的缓存时间 }), } /** * 构造响应 * @param {any} body 响应体 * @param {number} status 响应状态码 * @param {Object<string, string>} headers 响应头 */ function makeRes(body, status = 200, headers = {}) { headers['access-control-allow-origin'] = '*' // 允许所有来源 return new Response(body, { status, headers }) // 返回新构造的响应 } /** * 构造新的URL对象 * @param {string} urlStr URL字符串 */ function newUrl(urlStr) { try { return new URL(urlStr) // 尝试构造新的URL对象 } catch (err) { return null // 构造失败返回null } } function isUUID(uuid) { // 定义一个正则表达式来匹配 UUID 格式 const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; // 使用正则表达式测试 UUID 字符串 return uuidRegex.test(uuid); } async function nginx() { const text = ` <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> ` return text ; } export default { async fetch(request, env, ctx) { const getReqHeader = (key) => request.headers.get(key); // 获取请求头 let url = new URL(request.url); // 解析请求URL workers_url = `https://${url.hostname}`; const pathname = url.pathname; const hostname = url.searchParams.get('hubhost') || url.hostname; const hostTop = hostname.split('.')[0];// 获取主机名的第一部分 const checkHost = routeByHosts(hostTop); hub_host = checkHost[0]; // 获取上游地址 const fakePage = checkHost[1]; console.log(`域名头部: ${hostTop}\n反代地址: ${hub_host}\n伪装首页: ${fakePage}`); const isUuid = isUUID(pathname.split('/')[1].split('/')[0]); const conditions = [ isUuid, pathname.includes('/_'), pathname.includes('/r'), pathname.includes('/v2/user'), pathname.includes('/v2/orgs'), pathname.includes('/v2/_catalog'), pathname.includes('/v2/categories'), pathname.includes('/v2/feature-flags'), pathname.includes('search'), pathname.includes('source'), pathname === '/', pathname === '/favicon.ico', pathname === '/auth/profile', ]; if (conditions.some(condition => condition) && (fakePage === true || hostTop == 'docker')) { if (env.URL302){ return Response.redirect(env.URL302, 302); } else if (env.URL){ if (env.URL.toLowerCase() == 'nginx'){ //首页改成一个nginx伪装页 return new Response(await nginx(), { headers: { 'Content-Type': 'text/html; charset=UTF-8', }, }); } else return fetch(new Request(env.URL, request)); } const newUrl = new URL("https://registry.hub.docker.com" + pathname + url.search); // 复制原始请求的标头 const headers = new Headers(request.headers); // 确保 Host 头部被替换为 hub.docker.com headers.set('Host', 'registry.hub.docker.com'); const newRequest = new Request(newUrl, { method: request.method, headers: headers, body: request.method !== 'GET' && request.method !== 'HEAD' ? await request.blob() : null, redirect: 'follow' }); return fetch(newRequest); } // 修改包含 %2F 和 %3A 的请求 if (!/%2F/.test(url.search) && /%3A/.test(url.toString())) { let modifiedUrl = url.toString().replace(/%3A(?=.*?&)/, '%3Alibrary%2F'); url = new URL(modifiedUrl); console.log(`handle_url: ${url}`) } // 处理token请求 if (url.pathname.includes('/token')) { let token_parameter = { headers: { 'Host': 'auth.docker.io', 'User-Agent': getReqHeader("User-Agent"), 'Accept': getReqHeader("Accept"), 'Accept-Language': getReqHeader("Accept-Language"), 'Accept-Encoding': getReqHeader("Accept-Encoding"), 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0' } }; let token_url = auth_url + url.pathname + url.search return fetch(new Request(token_url, request), token_parameter) } // 修改 /v2/ 请求路径 if (/^\/v2\/[^/]+\/[^/]+\/[^/]+$/.test(url.pathname) && !/^\/v2\/library/.test(url.pathname)) { url.pathname = url.pathname.replace(/\/v2\//, '/v2/library/'); console.log(`modified_url: ${url.pathname}`) } // 更改请求的主机名 url.hostname = hub_host; // 构造请求参数 let parameter = { headers: { 'Host': hub_host, 'User-Agent': getReqHeader("User-Agent"), 'Accept': getReqHeader("Accept"), 'Accept-Language': getReqHeader("Accept-Language"), 'Accept-Encoding': getReqHeader("Accept-Encoding"), 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0' }, cacheTtl: 3600 // 缓存时间 }; // 添加Authorization头 if (request.headers.has("Authorization")) { parameter.headers.Authorization = getReqHeader("Authorization"); } // 发起请求并处理响应 let original_response = await fetch(new Request(url, request), parameter) let original_response_clone = original_response.clone(); let original_text = original_response_clone.body; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; // 修改 Www-Authenticate 头 if (new_response_headers.get("Www-Authenticate")) { let auth = new_response_headers.get("Www-Authenticate"); let re = new RegExp(auth_url, 'g'); new_response_headers.set("Www-Authenticate", response_headers.get("Www-Authenticate").replace(re, workers_url)); } // 处理重定向 if (new_response_headers.get("Location")) { return httpHandler(request, new_response_headers.get("Location")) } // 返回修改后的响应 let response = new Response(original_text, { status, headers: new_response_headers }) return response; } }; /** * 处理HTTP请求 * @param {Request} req 请求对象 * @param {string} pathname 请求路径 */ function httpHandler(req, pathname) { const reqHdrRaw = req.headers // 处理预检请求 if (req.method === 'OPTIONS' && reqHdrRaw.has('access-control-request-headers') ) { return new Response(null, PREFLIGHT_INIT) } let rawLen = '' const reqHdrNew = new Headers(reqHdrRaw) const refer = reqHdrNew.get('referer') let urlStr = pathname const urlObj = newUrl(urlStr) /** @type {RequestInit} */ const reqInit = { method: req.method, headers: reqHdrNew, redirect: 'follow', body: req.body } return proxy(urlObj, reqInit, rawLen) } /** * 代理请求 * @param {URL} urlObj URL对象 * @param {RequestInit} reqInit 请求初始化对象 * @param {string} rawLen 原始长度 */ async function proxy(urlObj, reqInit, rawLen) { const res = await fetch(urlObj.href, reqInit) const resHdrOld = res.headers const resHdrNew = new Headers(resHdrOld) // 验证长度 if (rawLen) { const newLen = resHdrOld.get('content-length') || '' const badLen = (rawLen !== newLen) if (badLen) { return makeRes(res.body, 400, { '--error': `bad len: ${newLen}, except: ${rawLen}`, 'access-control-expose-headers': '--error', }) } } const status = res.status resHdrNew.set('access-control-expose-headers', '*') resHdrNew.set('access-control-allow-origin', '*') resHdrNew.set('Cache-Control', 'max-age=1500') // 删除不必要的头 resHdrNew.delete('content-security-policy') resHdrNew.delete('content-security-policy-report-only') resHdrNew.delete('clear-site-data') return new Response(res.body, { status, headers: resHdrNew }) }修改自定义域名 需要是托管dns在cloudflare的域名才可以3,点击部署即可,右上角 deploy保存4,绑定自定义域名设置 -> 触发器 -> 自定义域 -> 点击【添加自定义域】这里添加上自定义域名 [假如我的是mirrors.dockerpull.com]保存 大功告成 现在可以用这个自定义的域名访问了演示地址:dockerhub.o0o.us.kg接下来还有可以选择开启的环境变量功能 就是伪装首页变量说明变量名示例备注URL302https://baidu.com主页302跳转URLhttps://dockerpull.com 121主页伪装(设为nginx则伪装为nginx默认页面)如果你像我的dockerpull.com 40无所畏惧 就可以不管 如果你想自己稳定使用 不想公开的话 可以设置伪装页面 找到设置 环境变量如果想别人访问域名首页的时候重定向到别的网站 可以加入环境变量URL302必须要大写的哈 然后值填写需要目标域名 我以跳转到百度为例保存之后 访问首页就会自动跳转到百度 但是拉取docker镜像的时候 不会受到影响第二种 是伪装首页 可以伪装成任意的网页首页 变量名称改为URL 也是要大写 值输入https://dockerpull.com 保存这时候访问域名 就会出现我的那个镜像站的页面,当然也可以用别的页面使用服务器自建优点:需要有境外服务器缺点:网络可能慢或者不稳定这种方法需要自己有一台境外服务器,签发域名证书。按下面配置即可!工作原理当您首次从本地注册表镜像请求图像时,它会从公共Docker注册表中拉取图像,并在将其返回给您之前将其存储在本地。在后续的请求中,本地注册表镜像可以从自己的存储中提供图像。前期准备1.一个没有被墙的、延迟和带宽较好的非大陆小鸡(墙了的话可以试试套cf)2.一个域名,无需备案,解析到你的小鸡的ip上,申请好证书,后续反代需要3.安装好了docker及docker-composedocker安装docker-compose安装首先创建一个docker-compose文件vi registry/docker-compose.yml然后粘贴如下内容#version: '3' #最新版本docker 不在需要此字段 services: registry: image: registry:2 ports: - "15000:5000" environment: REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io # 上游源 REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR: inmemory # 内存缓存 volumes: - ./data:/var/lib/registry使用docker-compose命令一键启动docker-compose up -d反向代理需要注意的是如果仅仅作为镜像源,需要把push功能ban掉,推荐使用nginx反代的时候禁止其他http method# 端口, 域名 都改为自己的 server { listen 80; server_name my-registry-domain.com; location / { # 仅允许 GET 请求 limit_except GET { deny all; } proxy_pass http://localhost:15000; # 假设 Docker Registry 运行在本地的 15000 端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }项目脚本部署GitHub项目地址:https://github.com/dqzboy/Docker-Proxy一键脚本执行✨️ 一键部署Docker镜像代理服务的功能,支持基于官方Docker Registry的镜像代理.✨️ 支持多个镜像仓库的代理,包括Docker Hub、GitHub Container Registry (ghcr.io)、Quay Container Registry (quay.io)和 Kubernetes Container Registry (k8s.gcr.io)✨️ 自动检查并安装所需的依赖软件,如Docker、Nginx等,并确保系统环境满足运行要求.✨️ 自动清理注册表上传目录中的那些不再被任何镜像或清单引用的文件✨️ 提供了重启服务、更新服务、更新配置和卸载服务的功能,方便用户进行日常管理和维护✨️ 支持主流Linux发行版操作系统,例如centos、Ubuntu、Rocky、Debian、Rhel等✨️ 支持主流ARCH架构下部署,包括linux/amd64、linux/arm64# CentOS yum -y install wget curl # ubuntu apt -y install wget curl bash -c "$(curl -fsSL https://raw.githubusercontent.com/dqzboy/Docker-Proxy/main/install/DockerProxy_Install.sh)"配置nginx反向代理### docker hub 51000 ### gchr 52000 ### gcr 53000 ### k8s-gcr 54000 ### quay 55000 location ^~ / { proxy_pass http://127.0.0.1:51000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; add_header X-Cache $upstream_cache_status; add_header Strict-Transport-Security "max-age=31536000"; }直接nginx反代这里博主并未测试,下面内容仅供参考server { listen 443 ssl; server_name 域名; ssl_certificate 证书地址; ssl_certificate_key 密钥地址; proxy_ssl_server_name on; # 启用SNI ssl_session_timeout 24h; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; location / { proxy_pass https://registry-1.docker.io; # Docker Hub 的官方镜像仓库 proxy_set_header Host registry-1.docker.io; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 关闭缓存 proxy_buffering off; # 转发认证相关的头部 proxy_set_header Authorization $http_authorization; proxy_pass_header Authorization; # 对 upstream 状态码检查,实现 error_page 错误重定向 proxy_intercept_errors on; # error_page 指令默认只检查了第一次后端返回的状态码,开启后可以跟随多次重定向。 recursive_error_pages on; # 根据状态码执行对应操作,以下为301、302、307状态码都会触发 #error_page 301 302 307 = @handle_redirect; error_page 429 = @handle_too_many_requests; } #处理重定向 location @handle_redirect { resolver 1.1.1.1; set $saved_redirect_location '$upstream_http_location'; proxy_pass $saved_redirect_location; } # 处理429错误 location @handle_too_many_requests { proxy_set_header Host 替换为在CloudFlare Worker设置的域名; # 替换为另一个服务器的地址 proxy_pass http://替换为在CloudFlare Worker设置的域名; proxy_set_header Host $http_host; } }其他开源项目https://github.com/NoCLin/LightMirrorshttps://github.com/bboysoulcn/registry-mirror最后总结1,如临时使用,建议参与零门槛几个方案,方便快捷2,据说后面 pip 源可能也会受到影响,可用采用 HTTP 代理方式 * 2024年06月27日 * 91 阅读 * 0 评论 * 1 点赞 技术搬砖 * 2024-03-12 置顶OVH Cloud 服务器配置 IPV6 地址 前言前段时间黑五的时候入手了一款年付17.88美元的OVH服务器,最近才发现后台分配了IPV6地址,但机器上默认并没有配置上IPV6连接,原来需要自己手动配置,这里就记录下如何给OVH的机器配置IPV6连接;开始在 OVH 的后台可以看到分配的 IPV6 地址及网关; 然后用 SSH 工具连接上服务器后开始配置;方法一方法一为临时配置,重启后失效 用root用户依次运行以下命令:ip addr add IPV6地址/64 dev ens3 ip -6 route add IPV6网关 dev ens3 ip -6 route add default via IPV6网关 dev ens3注意:将命令中的IPV6地址和IPV6网关替换成你自己后台分配的地址及网关方法二此方法配置后重启不会失效,永久有效,不支持Ubuntu18.04 编辑/etc/network/interfaces文件vi /etc/network/interfaces将以下代码添加到文件中iface ens3 inet6 static address IPV6地址 netmask 64 gateway IPV6网关 autoconf 0注意:将命令中的IPV6地址和IPV6网关替换成你自己后台分配的地址及网关 添加完成后保存退出,然后重启网络配置使其生效即可/etc/init.d/networking restart测试IPV6 测试命令ping6 ipv6.google.com # 或者 ping6 ipv6.baidu.com # 测试结果 root@sunpma:~# ping6 ipv6.google.com PING ipv6.google.com(lga25s62-in-x0e.1e100.net) 56 data bytes 64 bytes from lga25s62-in-x0e.1e100.net: icmp_seq=2 ttl=48 time=6.82 ms 64 bytes from lga25s62-in-x0e.1e100.net: icmp_seq=3 ttl=48 time=6.81 ms 64 bytes from lga25s62-in-x0e.1e100.net: icmp_seq=4 ttl=48 time=6.72 ms 64 bytes from lga25s62-in-x0e.1e100.net: icmp_seq=5 ttl=48 time=6.78 ms 64 bytes from lga25s62-in-x0e.1e100.net: icmp_seq=6 ttl=48 time=6.80 ms 64 bytes from lga25s62-in-x0e.1e100.net: icmp_seq=7 ttl=48 time=6.72 ms 64 bytes from lga25s62-in-x0e.1e100.net: icmp_seq=8 ttl=48 time=6.78 ms 64 bytes from lga25s62-in-x0e.1e100.net: icmp_seq=9 ttl=48 time=6.86 ms一键脚本测试: * 2024年03月12日 * 92 阅读 * 0 评论 * 1 点赞 技术搬砖 * 2024-03-12 置顶GKD 一款 APP 去广告神器 3000 + 规则订阅 GKD 的功能是 “自动点击”,帮助你点击升级屏幕跳过, 支持 “订阅规则”,满足各种各样的 APP规则订阅Adpro-Team,支持 621 个应用,总共有 1402 条规则组https://raw.gitmirror.com/Adpro-Team/GKD_subscription/main/dist/Adpro_gkd.json5Alsouler,支持 684 个应用,总共有 1562 条规则组https://raw.gitmirror.com/AIsouler/GKD_subscription/main/dist/AIsouler_gkd.json5奥怪https://registry.npmmirror.com/@aoguai/subscription/latest/files教程第一次打开需要在主页开启 “无障碍权限授权”,然后来到【订阅】,点击右下角➕,输入链接,完成订阅,可以点击【应用规则】选择应用详细的广告跳过规则。下载开源地址基于无障碍 + 高级选择器 + 订阅规则的自定义屏幕点击 Android APP | An Android APP with custom screen tapping based on Accessibility, Advanced Selectors, and Subscription Rules https://gkd.li/guide/文章参考【分享】去广告神器!GKD!3000 + 规则分享 * 2024年03月12日 * 1,453 阅读 * 0 评论 * 1 点赞 精品软件 * * 查看更多 myedunote 不患无位,患所以立。不患莫己知,求为可知也。 91 文章数 1 评论量 * 湖湘名校联合体·2023届高三9月大联考 * 安卓手机搭建青龙面板详细教程 * proxychains搭建使用教程 * 搭建Veno File Manager个人私有云网盘 标签云 docker张至顺Cloudflare金刚长寿功PTqBittorrent阿里云onedrivetelegram图床青龙python内网穿透一键签到框架目录列表onedrive第三方直链解析searx自建搜索引擎 * * * * * * * * * * * * * * * * * * * * 舔狗日记 今天好开心啊,和你一起在峡谷嬉戏,打完一波团战之后看到你在打大龙,残血的我跳过去直接被龙爪拍死,但这一刻我觉得好浪漫,死在你的脚旁边,这是我离你最近的一次。 2019 - 2023 © Reach - Joe 已运行 777 天 07 时 07 分 28 秒 RSS MAP