首页
关于
Search
1
AdGuardHome 安装及部署教程
48,935 阅读
2
Oracle开放全部端口并关闭防火墙
13,000 阅读
3
关于微软Azure学生白嫖指南
12,709 阅读
4
搭建基于telegram的无限网盘
11,955 阅读
5
最新Cloudflare免费自选IP教程(非Partner)
10,500 阅读
默认分类
技术搬砖
教学设计
故事奇谈
生活琐事
错题分析
精品软件
登录
找到
105
篇与
技术搬砖
相关的结果
2026-04-28
Mosdns+ADG实现DNS分流、缓存、去广告
Mosdns+ADG实现DNS分流、缓存、去广告 参考链接:https://linux.do/t/topic/155566 参考链接:https://linux.do/t/topic/1146529 Mosdns:仅负责 DNS 分流查询 AdGuard Home(ADG):负责 DNS 去广告、缓存 DNS泄漏: " 所谓的DNS泄露国内节点,只是在IP分流时,查询了国内DNS引起,仅在理论上有安全问题。当然这个DoH使用境外服务器进行IP分流,完美解决泄漏问题 [DNS分流与泄露分析] "境内检测:https://nstool.netease.com 境外检测:DNS Leak Test - BrowserLeaks MosDNS搭建 官方文档:mosdns wiki | mosdns-wiki-zh 配置文件 下载分流所需文件 使用以下脚本,修改变量 v2dat_dir 为你的保存路径 (保存为 .sh 文件后, 记得 chmod +x xxx.sh 赋权): #!/bin/sh set -e # Exit if any command fails TMPDIR=$(mktemp -d) trap 'rm -rf "$TMPDIR"' EXIT # Ensure temporary directory is removed on script exit v2dat_dir=<自定义路径>/mosdns geodat_update() { curl --connect-timeout 5 -m 60 -kfSL -o "$TMPDIR/geoip.dat" "https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat" curl --connect-timeout 5 -m 60 -kfSL -o "$TMPDIR/geosite.dat" "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" \cp -a "$TMPDIR"/geoip.dat "$TMPDIR"/geosite.dat $v2dat_dir } # Unpack and process the data v2dat_dump() { mkdir -p "$v2dat_dir/rules/" curl -fSL -o "$v2dat_dir/v2dat" "https://raw.githubusercontent.com/xukecheng/scripts/main/v2dat" chmod +x "$v2dat_dir/v2dat" rm -f "$v2dat_dir/rules/geo"*.txt "$v2dat_dir/v2dat" unpack geoip -o "$v2dat_dir/rules/" -f cn "$v2dat_dir/geoip.dat" "$v2dat_dir/v2dat" unpack geosite -o "$v2dat_dir/rules/" -f apple -f cn -f 'geolocation-!cn' "$v2dat_dir/geosite.dat" rm -rf "$v2dat_dir/v2dat" } update_local_ptr() { curl --connect-timeout 5 -m 60 -kfSL -o "$v2dat_dir/rules/local-ptr.txt" "https://raw.githubusercontent.com/sbwml/luci-app-mosdns/v5/luci-app-mosdns/root/etc/mosdns/rule/local-ptr.txt" } geodat_update v2dat_dump update_local_ptr touch $v2dat_dir/rules/force-nocn.txt touch $v2dat_dir/rules/force-cn.txt # force-cn 是强制本地解析域名,force-nocn 是强制非本地解析域名 echo "localhost 127.0.0.1" >> $v2dat_dir/rules/hosts.txtchmod +x xxx.sh ./xxx.sh检查文件 tree -f <变量 v2dat_dir 定义的路径><变量 v2dat_dir 定义的路径> ├── <变量 v2dat_dir 定义的路径>/geoip.dat ├── <变量 v2dat_dir 定义的路径>/geosite.dat └── <变量 v2dat_dir 定义的路径>/rules ├── <变量 v2dat_dir 定义的路径>/rules/force-cn.txt ├── <变量 v2dat_dir 定义的路径>/rules/force-nocn.txt ├── <变量 v2dat_dir 定义的路径>/rules/geoip_cn.txt ├── <变量 v2dat_dir 定义的路径>/rules/geosite_apple.txt ├── <变量 v2dat_dir 定义的路径>/rules/geosite_cn.txt ├── <变量 v2dat_dir 定义的路径>/rules/geosite_geolocation-!cn.txt ├── <变量 v2dat_dir 定义的路径>/rules/hosts.txt └── <变量 v2dat_dir 定义的路径>/rules/local-ptr.txtDNS 配置文件 dns.yaml ################ DNS Plugins ################# plugins: - tag: google type: forward args: concurrent: 2 upstreams: - addr: "tls://dns.google" dial_addr: "8.8.8.8" enable_pipeline: true # TCP/DoT 启用 RFC 7766 新的 query pipelining 连接复用模式 - addr: "tls://dns.google" dial_addr: "8.8.4.4" enable_pipeline: true - tag: cloudflare type: forward args: concurrent: 2 upstreams: - addr: "tls://1dot1dot1dot1.cloudflare-dns.com" dial_addr: "1.1.1.1" enable_pipeline: true - addr: "tls://1dot1dot1dot1.cloudflare-dns.com" dial_addr: "1.0.0.1" enable_pipeline: true - tag: ali type: forward args: concurrent: 2 upstreams: - addr: "tls://dns.alidns.com" dial_addr: "223.5.5.5" enable_pipeline: false - addr: "tls://dns.alidns.com" dial_addr: "223.6.6.6" enable_pipeline: false # dnspod doh dot - tag: dnspod type: forward args: concurrent: 2 upstreams: - addr: "tls://dot.pub" dial_addr: "120.53.53.53" enable_pipeline: true - addr: "tls://dot.pub" dial_addr: "1.12.12.12" enable_pipeline: true # local dns # - tag: local # type: forward # args: # concurrent: 1 # upstreams: # - addr: "udp://192.168.1.1:53" # server 失败 - tag: reject_2 type: sequence args: - exec: reject 2 # 拒绝响应 - tag: reject_3 type: sequence args: - exec: reject 3 # 不支持的操作 - tag: reject_5 type: sequence args: - exec: reject 5配置文件 config.yaml 在本配置中,禁用了对IPv6的解析。如需启用,去除 prefer_ipv4 相关即可 配置中设置了ECS 并固定了IP(见 ecs_cn 部分),建议自行修改,否则可能明显减速 ECS: EDNS Client Subnet 附官方文档关于 ECS 部分:可执行插件 | mosdns-wiki-zh (gitbook.io) log: level: info # file: "/etc/mosdns/mosdns.log" api: http: "0.0.0.0:5534" include: ['/etc/mosdns/dns.yaml'] plugins: # 国内域名 - tag: geosite_cn type: domain_set args: files: - "/etc/mosdns/rules/geosite_cn.txt" # 国内 IP - tag: geoip_cn type: ip_set args: files: - "/etc/mosdns/rules/geoip_cn.txt" # 苹果域名 - tag: geosite_apple type: domain_set args: files: - "/etc/mosdns/rules/geosite_apple.txt" # 国外域名 - tag: geosite_no_cn type: domain_set args: files: - "/etc/mosdns/rules/geosite_geolocation-!cn.txt" - tag: hosts type: hosts args: files: - "/etc/mosdns/rules/hosts.txt" - tag: local_ptr type: domain_set args: files: - "/etc/mosdns/rules/local-ptr.txt" - tag: forward_udp type: forward args: concurrent: 2 upstreams: - addr: "223.5.5.5" - addr: "119.29.29.29" - tag: forward_local type: fallback args: primary: ali # 主dns secondary: dnspod # 备用dns threshold: 500 always_standby: true - tag: forward_remote type: fallback args: primary: cloudflare # 主dns secondary: google # 备用dns threshold: 500 always_standby: true # ECS - tag: ecs_cn type: "ecs_handler" args: forward: false # 是否转发来自下游的 ecs preset: 202.38.193.28 # 发送预设 ecs | 华工IP send: false # 是否发送 ecs mask4: 24 # ipv4 掩码。默认 24 | 12 mask6: 48 # ipv6 掩码。默认 48 | 32 - tag: no_ecs type: "ecs_handler" args: forward: false # 是否转发来自下游的 ecs preset: "" # 发送预设 ecs send: false # 是否发送 ecs mask4: 24 mask6: 48 # 国外解析 - tag: forward_remote_upstream type: sequence args: - exec: $no_ecs - exec: prefer_ipv4 - exec: query_summary forward_remote - exec: $forward_remote # 响应操作 - tag: has_resp_sequence type: sequence args: - matches: has_resp exec: accept # 查询国内域名 # 返回非国内IP则 drop_resp - tag: query_is_non_local_ip type: sequence args: - exec: $ecs_cn - exec: prefer_ipv4 - exec: $forward_local - matches: "!resp_ip $geoip_cn" exec: drop_resp # fallback: 失败时回滚 # 回滚机制: 如果 primary 抛出错误,或返回但没有应答,或在 threshold 毫秒内无响应,则执行 secondary 。因无响应触发 fallback 时,如果 primary 比 secondary 先返回了应答,则依旧会采用 primary 的应答。 # 错误处理: 如果 primary 和 secondary 都无应答 (抛出了错误,无响应直到超时,返回了但无应答),则抛出错误。 ## 此处做了防止DNS泄露的处理: 强制转发到远程DNS (摘自Github: sbwml/luci-app-mosdns) - tag: fallback type: fallback args: primary: forward_remote_upstream secondary: forward_remote_upstream threshold: 500 always_standby: true # 原做法 # - tag: fallback # type: fallback # args: # primary: query_is_non_local_ip # secondary: forward_remote_upstream # threshold: 500 # always_standby: true - tag: apple_domain_fallback type: fallback args: primary: query_is_non_local_ip secondary: forward_udp threshold: 100 always_standby: true # 匹配苹果域名的插件 - tag: query_is_apple_domain type: sequence args: - matches: qname $geosite_apple exec: $apple_domain_fallback - exec: query_summary apple_domain_fallback # 匹配本地域名的插件 - tag: query_is_local_domain type: sequence args: - exec: $ecs_cn - exec: prefer_ipv4 - matches: qname $geosite_cn exec: $forward_local - exec: query_summary forward_local # 查询国外域名 - tag: query_is_no_local_domain type: sequence args: - matches: qname $geosite_no_cn exec: $forward_remote_upstream - tag: query_is_reject_domain type: sequence args: - matches: - qtype 12 - qname $local_ptr exec: reject 3 - matches: qtype 65 exec: reject 3 # 主要的运行逻辑插件 # sequence 插件中调用的插件 tag 必须在 sequence 前定义, # 否则 sequence 找不到对应插件。 - tag: main_sequence type: sequence args: - exec: $hosts - exec: jump has_resp_sequence - exec: forward_edns0opt 8 - exec: $query_is_apple_domain - exec: jump has_resp_sequence - exec: $query_is_reject_domain - exec: jump has_resp_sequence - exec: $query_is_local_domain - exec: jump has_resp_sequence - exec: $query_is_no_local_domain - exec: jump has_resp_sequence - exec: $fallback - exec: jump has_resp_sequence # 启动 udp 服务器 - tag: udp_server type: udp_server args: entry: main_sequence listen: ":5353" # 启动 tcp 服务器 - tag: tcp_server type: tcp_server args: entry: main_sequence listen: ":5353"末尾两项配置为 Mosdns 的 DNS 服务端口配置 Cloudflare 优选IP配置 保存Cloudflare IP网段 cd rules wget https://www.cloudflare.com/ips-v4 -O cf4.txt wget https://www.cloudflare.com/ips-v6 -O cf6.txt cat cf4.txt cf6.txt > cloudflare-cidr.txt 需要自行创建优选 Cloudflare IP文件:cloudflare-ip.txt config.yaml 加入配置: ## 原配置文件新增: # 匹配 Cloudflare IP # source: https://www.cloudflare.com/zh-cn/ips - tag: cloudflare_cidr type: ip_set args: files: - "/etc/mosdns/rules/cloudflare-cidr.txt" # 优选 Cloudflare IP # 需自行创建填写 - tag: cloudflare_ip type: ip_set args: files: - "/etc/mosdns/rules/cloudflare-ip.txt" ## 原配置文件修改: # 有响应终止返回 - tag: has_resp_sequence type: sequence args: - matches: has_resp exec: accept - matches: resp_ip $cloudflare_cidr exec: black_hole $cloudflare_ip启动 Docker 创建docker-compose.yaml文件 services: mosdns: image: irinesistiana/mosdns:latest container_name: mosdns restart: unless-stopped network_mode: host environment: - TZ=Asia/Shanghai volumes: # 请将下面的 "<自定义路径>" 替换为你实际想要的宿主机路径,例如 ./mosdns 或 /opt/mosdns - <自定义路径>:/etc/mosdnsdocker-compose up -d测试可用性 dig +short www.baidu.com @127.0.0.1 -p 5353正常会有IP输出,否则请检查 Mosdns 容器日志看启动是否正常 AdGuard Home 官方脚本安装 在终端中运行以下命令: curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh如果提示 curl: command not found ,那是因为没装 Curl ubuntu/debian 系统安装 Curl 方法: apt-get install curl -ycentos 系统安装 Curl 方法: yum install curl -y以 IP:映射出的端口 方式进入引导配置界面(如:http://127.0.0.1:3000),在引导步骤中配置各服务监听端口 监听的端口需要是宿主机未使用的端口,因为后面会以 host 网络模式重建容器 【网页管理界面】的监听端口默认 80 ,这个端口很可能会有冲突,特别是在 云服务器 上部署的,建议修改 【DNS服务器】监听接口默认53,国内未经备案使用,可能被主机商检测到,建议修改 image图片 设置管理用户 设置的用户名与密码请三思。因为后续无法在面板上直接更改,只能通过 htpasswd 重新生成hash再修改到配置文件,麻烦了点 image图片 后面一路选择 “下一步” 即可。 最后如果你点击了 “打开仪表盘”,若是先前的【网页管理界面】的监听端口设置的不是已映射的端口,跳转后打不开是正常的基础设置 1. 将上游DNS服务器设置为Mosdns image图片 应用设置: image图片 image图片 2. 禁用 IPv6 解析 由于上面 Mosdns 的配置里也禁用了对 IPv6 的解析,所以这里顺便也禁用吧image图片 3. DNS 缓存 image图片 4. 去广告 image图片 添加规则集: image图片 # 黑名单: filters: - enabled: true url: https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt name: AdGuard DNS filter id: 1 - enabled: true url: https://adguardteam.github.io/HostlistsRegistry/assets/filter_2.txt name: AdAway Default Blocklist id: 2 - enabled: true url: https://anti-ad.net/easylist.txt name: Anti-ad id: 1717366234 - enabled: true url: https://gist.githubusercontent.com/Ewpratten/a25ae63a7200c02c850fede2f32453cf/raw/b9318009399b99e822515d388b8458557d828c37/hosts-yt-ads name: YouTobe id: 1717366236 - enabled: true url: https://cdn.jsdelivr.net/gh/jdlingyu/ad-wars@master/hosts name: 大圣净化 id: 1717366237 - enabled: true url: https://raw.githubusercontent.com/xinggsf/Adblock-Plus-Rule/master/mv.txt name: 乘风视频 id: 1717366238 - enabled: true url: https://easylist-downloads.adblockplus.org/easylistchina.txt name: easylistchina id: 1717366239 - enabled: true url: https://easylist-downloads.adblockplus.org/easylist.txt name: easylist id: 1717366240 - enabled: true url: https://raw.githubusercontent.com/Cats-Team/AdRules/main/dns.txt name: ad-dns id: 1717366242 - enabled: true url: https://raw.githubusercontent.com/Goooler/1024_hosts/master/hosts name: 澳门皇家赌场 id: 1717366244 - enabled: true url: https://raw.githubusercontent.com/TG-Twilight/AWAvenue-Ads-Rule/main/AWAvenue-Ads-Rule.txt name: 秋风 id: 1718626718 - enabled: true url: https://adguardteam.github.io/HostlistsRegistry/assets/filter_29.txt name: 'CHN: AdRules DNS List' id: 1720846363可在 自定义过滤规则 中单独放行/拉黑(子)域名 # 白名单(自定义过滤规则): @@||dataflow.biliapi.com^$important @@||lxcdn.dl.files.xiaomi.net^$important ||u3.ucweb.com^ @@||ip.taobao.com^$important @@||adashbc.ut.taobao.com^$important @@||s.click.tmall.com^$important @@||s.click.taobao.com^$important @@||taobao.com^ @@||clientlog3.music.163.com^$important @@||app-monitor.ele.me^$important @@||mon.snssdk.com^$important @@||datacollector-drcn.dt.hicloud.com^$important @@||ele.me^ @@||elemcdn.com^ @@||alipayobjects.com^ @@||jianshu.com^ #||ctobsnssdk.com^ #||pangolin.snssdk.com^ #||pangolin-sdk-toutiao.com^ #||pangolin-sdk-toutiao-b.com^ #||pglstatp-toutiao.com^ #||dm.toutiao.com^ #||ulogs.umeng.com^ #||aaid.umeng.com^ #||tnc*.zijieapi.com^ #||mssdk-bu.bytedance.com^ ||api2.coolapk.com/v6/feed/detail$replace=/"include_goods_ids":\[.*?]\,"include_goods":\[.*?]\,/ / ||api2.coolapk.com/v6/feed/detail$replace=/\,"detailSponsorCard":{.*}/}}/ # csdn广告 ||lupic.cdn.bcebos.com^ # 简书广告 ||pp.chuzushijian.cn^ ||cdn-file-ssl-wan.ludashi.com^ ||cdn-file-ssl-wan.ludashi.com/wan/newswf/dlgglm^$important # 解除张大妈 @@||smzdm.com^ @@||zdmimg.com^ # 贴吧 ## tieba-ares.cdn.bcebos.com/mis/2023-5/1683789351139/ac0b4431fb1b.gif ||tieba-ares.cdn.bcebos.com/mis^$important ||tieba-ares.cdn.bcebos.com^$important # 解除夸克 @@||myquark.cn^ @@||quark.cn^ # 解除阿里 @@||aliyuncs.com^ # @@||netease.com^ # 酷安_测试faild #||tr.byteurl.cn^$important #||pull-flv-f29.douyincdn.com^$important #||pull-hls-vr-l11.douyincdn.com^$important #||frontier100-toutiao.toutiaoapi.com^$important #||p3-shortvideo-sign.toutiaoimg.com^$important #||niu-agjsnj.snssdk.com^$important #||mssdk3-normal-lf.zijieapi.com^$important # 酷安+番茄 ||pangolin-sdk-toutiao.com^ ||zijieapi.com^$app=com.dragon.read ||frontier-toutiao.snssdk.com^$app=com.dragon.read ||pangolin-sdk-toutiao-b.com^ ||ads5-normal-lf.zijieapi.com^$app=com.dragon.read ||pglstatp-toutiao.com^ # 解除CSDN #@@||blog.csdn.net # 解除哔哩哔哩 @@||bilibili.com^ # 同花顺看点 @@||10jqka.com.cn^$important #@@||mo.baidu.com^$important # 京东 @@||jd.com^$important @@||360buyimg.com^$important # 王者 @@||ap6.ssl.msdk.qq.com^$important @@||szlong.weixin.qq.com^$important # 快手? @@||kuaishou.httpdns.pro^$important @@||mime.baidu.com^$important #||astrill4u.com^$client='103.98.17.11' #||astrill4u.com^$important @@||dc.sigmob.cn^$important # Copilot @@||githubusercontent.com^$important @@||github.com^$important # 阻止扫描 ||astrill4u.com^$important #@@||qq.com^$important @@||3g.qq.com^$important @@||public.gdtimg.com^$important # shoppy @@||shoppy.gg^$important # QQ @@||qpic.cn^$important #@@||qq.com^$important @@||t9.baidu.com^$important @@||b.bdstatic.com^$important @@||t7.baidu.com^$important @@||sofire.baidu.com^$important @@||t8.baidu.com^$important @@||smartop-sdkapi.jiguang.cn^$importantDOH / DOT / DOQ 配置 首先你需要一个域名,并为其申请好了证书 1. 配置域名 & 端口 转到【设置】\=\>【加密设置】: image图片 注意:如果配置了 DOH 端口,那么这个端口也是可以直接访问ADG面板!! 2. 配置域名证书 & 密钥 这里选择直接粘贴。当然你也可以配置路径image图片 配置完成后,各协议的使用地址见菜单栏的【设置指导】,如: https://域名:DOH端口/dns-query quic://域名:DOQ端口 tls://域名:DOT端口安卓的系统设置中的【私密/加密DNS】为 DOT 协议,且只能填写域名、使用 853 端口,无法更改 如果你的 853 端口惨遭阻断,可以使用 AdGuard 这个APP 3. Nginx反代 如果不想使用带端口的地址,需要Nginx反代,共用443端口 location /dns-query { # 关键修改点:使用 https 协议,并且指向你截图中的 DOH 端口 proxy_ssl_server_name on; proxy_ssl_name $host; proxy_pass https://127.0.0.1:你的doh端口/dns-query; proxy_http_version 1.1; 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_read_timeout 60s; proxy_send_timeout 60s; }使用教程 IPhone启用系统级DoH,从此直连L站 第一步:获取并下载描述文件 (:⚠️: 必须使用 Safari 浏览器) 苹果系统限制了只有自带的 Safari 浏览器才能触发描述文件的下载和安装机制。 打开手机上的 Safari 浏览器。访问专门为苹果设备生成 DNS 描述文件的开源工具网站。推荐使用这个极简又安全的生成器: DNS Profile Creator (这是一个著名的开源项目,专门生成苹果系统能认的 .mobileconfig 文件) (如图:选择DoH,并填写DoH server URL:https://域名/dns-query,上面还有个Name of DNS provider,随便取个名字就行) image图片 第二步:点击最下面add to profile,之后在跳转的这个界面里面点击download下载,之后会有个弹出框,需要点击一下允许 image图片 第三步:在 iOS 设备进入 设置 → 通用 → VPN 与设备管理,找到 EMAS HTTPDNS DoH Configuration,点击安装 image图片 电脑端DoH服务器使用教程 对于Edge,打开设置\=\>隐私、搜索和服务\=\>安全性,然后修改以下的选项成图中的样子 image图片 对于Chrome,打开设置\=\>隐私与安全\=\>安全,然后启用"使用安全DNS",像下面这样! image图片 其他自建DOH方案 RethinkDNS 无需服务器,Deno/Cloudflare等均可部署, ①Cloudflare一键部署本方案 注意:由于worker域名被墙,最好有一个托管在cf的域名指向这个worker ②Deno教程: 先去这个项目的Github地址,Fork一份到自己的仓库 image图片 打开deno部署官网,登陆Github账号 点击 image图片 来创建新的来自Github的项目 然后,点击自己的头像,找到你Fork的"serverless-dns项目" 就像这样! image图片 仿照这样填完,点击"Deploy Project"! image图片 稍等两分钟左右 等待部署好后,你就拥有了自己的DoH服务器! 食用方法: image图片 复制这里的部署地址,然后拼贴到下面这个网址中就是你的DoH服务地址(我使用Edge,所以这里也是Edge的配置!) https://[上面你获取的地址]/dns-query{?dns}NbDNS 前提 首先,你要有一台外国的Linux服务器,面板可选(如果你没有我就默认你可以自己完成下面的文件操作!) 十分建议配置反向代理,如果你不配置也可以,但你的DoH服务将会裸奔 打开/home/nbdns/data文件夹 首先在其中创建config.json,并复制粘贴以下内容进去 { "serve_addr": "127.0.0.1:8853", "web_addr": "0.0.0.0:8854", "strategy": 2, "timeout": 4, "built_in_cache": false, "bootstrap": [ {"address": "tcp://8.8.4.4:53"}, {"address": "tcp://1.0.0.1:53"} ], "upstreams": [ {"address": "tcp-tls://dns.google:853"}, {"address": "tcp-tls://one.one.one.one:853"}, {"address": "https://dns.google/dns-query"}, {"address": "https://cloudflare-dns.com/dns-query"}, {"address": "https://dns.opendns.com/dns-query"}, {"address": "https://doh.sb/dns-query"}, {"address": "https://dns9.quad9.net/dns-query"} ], "doh_server": { }, "blacklist": [".discord.com",".linux.do",".github.com"] }下载 china.txt 并改名为 china_ip_list.txt 到 data 文件夹 wget https://raw.githubusercontent.com/gaoyifan/china-operator-ip/refs/heads/ip-lists/china.txt -O data/china_ip_list.txt文件结构: |- home |- nbdns |- data |- config.json |- china_ip_list.txt直接Docker部署! services: nbdns: volumes: - '/home/nbdns/data:/nbdns/data' ports: - '8853:8853/udp' - '8854:8854' container_name: nbdns image: ghcr.io/naiba/nbdnsdocker-compose up -d本配置没有为DoH服务配置密码,所以十分建议使用Nginx反代端口(8854)后使用https+域名访问 Cloudflare DOH 进入Cloudflare Zero Trust界面 image图片 创建 DNS 位置,位置名称自定义,并如图勾选,然后依次点击 继续 - 完成 完成创建 image图片 记录好 基于 HTTPS 的 DNS 的值,形如 https://xxxxxx.cloudflare-gateway.com/dns-query 后面将会用到 创建描述文件 替换 DoH 接入地址后将文件重命名为 dns-over-https.mobileconfig 后下载到 iOS 设备,这里提供一个临时文件中转服务:FF2A File,然后在 iOS 设备进入 设置 → 通用 → VPN 与设备管理,找到 EMAS HTTPDNS DoH Configuration,点击安装 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>DNSSettings</key> <dict> <key>DNSProtocol</key> <string>HTTPS</string> <key>ServerURL</key> <!---- 把此处的地址替换为 DoH 接入地址 ---> <string>https://xxxxxx.cloudflare-gateway.com/dns-query</string> </dict> <key>PayloadDescription</key> <string>Configures iOS to use EMAS HTTPDNS DoH</string> <key>PayloadDisplayName</key> <string>EMAS HTTPDNS DoH</string> <key>PayloadIdentifier</key> <string>com.apple.dnsSettings.managed.9B498EC0C-EF6C-44F0-BFB7-0000658B99AC</string> <key>PayloadType</key> <string>com.apple.dnsSettings.managed</string> <key>PayloadUUID</key> <string>465AB183-5E34-4794-9BEB-B5327CF61F27</string> <key>PayloadVersion</key> <integer>1</integer> <key>ProhibitDisablement</key> <false/> </dict> </array> <key>PayloadDescription</key> <string>Adds EMAS HTTPDNS DoH configuration to iOS</string> <key>PayloadDisplayName</key> <string>EMAS HTTPDNS DoH Configuration</string> <key>PayloadIdentifier</key> <string>com.emas.apple-dns</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>130E6D6F-69A2-4515-9D77-99342CB9AE76</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>各种Cloudflare Worker-Doh脚本 [!NOTE] Cloudflare脚本的使用都差不多,你所需要做的只是 \=\>进入你的Cloudflare控制主页 \=\>计算与AI \=\>Workers与Pages \=\>创建应用程序 \=\> 点击从 Hello World! 开始右侧的开始使用 \=\>编辑代码 \=\>粘贴你获得到的代码(我们称这个为Worker代码) 非常推荐的步骤(拥有域名的前提下,设置自定义域):\=\> 设置 \=\> 域和路由 \=\> + 添加 \=\> 自定义域 \=\> 填入你需要的域名名称 (这个域名需要在你的CF账户内) \=\> 添加域 (可选,此举可以提高安全性)\=\> 回到域与路由 \=\> 类型workers.dev右侧的三个点 \=\>禁用域 然后你的"Worker地址"应该为你最新绑定的域名,否则为原显示域名 可选/部分项目要求的步骤:\=\>设置 \=\>变量与机密 \=\>+ 添加 \=\>填写表单 变量名称与值视项目所定 jqknono佬的CF-Doh项目 jqknono/cloudflare-doh: 使用cloudflare代理DoH 本项目的Worker代码链接为 复制这个里面获得的所有文本 然后添加环境变量 变量名称为 DOMAIN_MAPPINGS内容为 { "/google": { "targetDomain": "dns.google", "pathMapping": { "/query-dns": "/dns-query" } }, "/cloudflare": { "targetDomain": "one.one.one.one", "pathMapping": { "/query-dns": "/dns-query" } }, "/quad9": { "targetDomain": "dns.quad9.net", "pathMapping": { "/query-dns": "/dns-query" } } }之后,你可以拥有以下端点的DoH服务器 GoogleDoH https://[你的Worker地址]/google/query-dns{?dns}CloudflareDoH https://[你的Worker地址]/cloudflare/query-dns{?dns}Quad9DoH https://[你的Worker地址]/quad9/query-dns{?dns}cmliu佬的cf-DoH项目 cmliu/CF-Workers-DoH: CF-Workers-DoH 是一个基于 Cloudflare Workers 构建的 DNS over HTTPS (DoH) 解析服务。 本项目的Worker代码链接为:复制这个里面获得的所有文本 直接部署即可食用,默认DoH为Cloudflare,可参照项目修改 之后,你可以拥有以下端点的DoH服务器 CloudflareDoH https://[你的Worker地址]/dns-query{?dns}
技术搬砖
# AdGuard Home
# Cloudflare
# Mosdns
# DOH
admin
7小时前
0
6
0
2025-10-06
Debian 12 系统下 Docker 安装及卸载教程
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,而且容器性能开销极低。 注:本教程仅针对 Debian。 安装 Docker curl -fsSL https://get.docker.com | bash -s docker卸载 Docker 卸载Docker CE、Docker EE,删除 Docker 镜像、容器、数据卷等文件。 apt-get purge docker-ce apt-get purge docker-ee rm -rf /var/lib/docker删除自动安装的所有包: apt-get autoremove docker docker-ce docker-engine docker.io containerd runc查看其它没有卸载干净的包: dpkg -l | grep docker卸载相应的包: apt-get autoremove docker-*删除 Docker 相关配置&目录: rm -rf /etc/systemd/system/docker.service.d rm -rf /var/lib/docker rm -rf /var/run/docker.sock groupdel docker确定 Docker 完全卸载 docker --version
技术搬砖
# docker
# Debian
# 卸载
admin
1年前
0
49
0
2025-10-06
Emby搭建教程(网盘服)
一个容器就搞定了strm生成和302转发安装 Docker和Docker Compose curl -fsSL https://get.docker.com | bash -s dockerapt install docker-compose -y方案一:qmediasync 介绍 默认用户名 admin,密码 admin123 emby代理端口默认:http-8095 https-8094 支持的同步源: CD2本地挂载 NAS系统的远程挂载 OpenList 115开放平台 核心功能: STRM生成 元数据下载 元数据上传 播放链接解析 emby外网302 特点: 免费 支持添加多个115或者openlist账号 如果进行了本地刮削,在同步时会自动将元数据上传到网盘 内置emby的外网302(直链)播放,使用8095端口代理emby 内置115下载链接代理,用于解决部分客户端因为UA问题导致不能播放的问题(下载链接代理和emby外网302播放冲突,只能选其一) 115使用开放平台接口,不担心风控,不担心暴毙,且做了对应的性能优化,3W多文件的库全量大概10分钟,增量30秒左右可以完成同步 同步时按照目录划分,可以添加多个不同或者同类型的同步目录 使用定时任务进行同步,最小间隔半小时,如果内容变更不频繁可以关闭某个同步目录的定时任务 每次同步时会检查元数据的大小,如果网盘和本地文件大小不同,则会下载网盘文件到本地 支持电报通知 支持windows,linux,macos可执行文件直接运行 支持docker镜像运行 支持amd64和arm64架构 缺点: 由于使用开放平台接口,所以每次同步其实都全量查询了115文件列表,所以速度天生不可能快 由于速度不可能快,所以增加了缓存,所有增量同步都是基于缓存的;所以导致的结果是无法感知到115的文件夹重命名或者移动,当然不影响文件的新增和改动 openlist和本地挂载模式没有办法优化所以同步效率不行,但是可以借此支持更多网盘。 不开源 Docker Compose安装 创建 docker-compose.yml 文件(见下方示例) version: "2.3" services: emby: volumes: - ./config/emby:/config - ./strm:/data devices: - /dev/dri:/dev/dri ports: - "8096:8096" networks: - all environment: - TZ=Asia/Shanghai # 推荐:省略 UID/GID=0,以非特权用户运行 # user: "1000:1000" # 如果需要指定用户,请使用非0的ID restart: always container_name: emby image: amilys/embyserver:4.9.0.46 qmediasync: image: qicfan/qmediasync:latest container_name: qmediasync restart: unless-stopped ports: - "12333:12333" - "8095:8095" networks: - all volumes: - ./config/qmediasync:/app/config - ./strm:/media environment: - TZ=Asia/Shanghai networks: all: driver: bridge 运行以下命令: # 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down目录映射说明 容器内路径宿主机路径说明/app/config./config/qmediasync配置文、数据、日志目录/media./strm存放 STRM 和元数据的目录环境变量 变量名默认值说明TZAsia/Shanghai时区设置端口说明 12333: Web 服务端口 8095: Emby代理接口,http协议 8094: Emby代理接口,https协议 使用教程: 然后打开http://yourip:12333 image图片 进入:系统设置-网盘账号管理 添加一个网盘账号,比如115类型 image图片 添加成功后,该账号会出现在列表中,然后点击列表中该账号卡片右下放的授权按钮 image图片 这是会打开二维码扫码弹窗 打开115客户端扫码屏幕上的二维码完成授权 这时会自动关闭弹窗并刷新账号列表,新添加的账号会显示为:已授权 image图片 打开 系统设置-STRM设置,根据自己的需要修改其中的设置,如果不明白也可以什么都不改,默认值都是可用的。 image图片 打开 同步-同步目录,然后添加右上方的 添加同步目录 按钮,如图进行添加 image图片 添加完成后,新添加的同步目录会出现在列表中,如图: image图片 如果需要关闭或打开定时任务直接点击卡片的开关即可 如果开启了定时任务,可以等待自动同步;或者手动点击全量同步 开始同步后,可以打开 同步-同步记录 来查看同步状态,如图: image图片 image图片 如果有需要可以配置302 image图片 emby的配置就很简单去媒体库把/data这个目录刮削就行了,这里就不展开说了 方案二:SmartStrm 一个媒体库 STRM 文件生成工具。 和 Emby 优雅配合,媒体资源丝滑入库,支持 302 直链播放,支持同步删除远端文件。 配合 Quark-Auto-Save/CloudSaver, OpenList, Emby 力求即存即看 介绍: - 支持 OpenList、WebDAV、Quark、115、天翼云盘 等网络驱动 - 任务管理 - 基于 Crontab 的定时任务 - 单个任务独立日志 - 任务工具箱:内容替换、一键清理 - STRM 生成 - 目录时间检查 - 增量/同步生成:可清理远端已删文件 - 指定生成的媒体后缀、文件大小阈值 - 指定复制的文件后缀 - Webhook - 联动 QAS、CloudSaver 转存即触发任务 - 配合油猴脚本,网页转存即触发任务 - Emby 中删除媒体,同步删除远端文件 - CloudDrive2 文件变更通知实时触发任务 (Pro) - 粗糙但极其友好的管理页面 - 存储浏览、批量重命名 - 任务日志查看 - 一站式 Emby Jellyfin 302 直链播放 (Pro)Docker Compose安装 创建 docker-compose.yml 文件(见下方示例) version: "2.3" services: emby: volumes: - ./config/emby:/config - ./strm:/strm devices: - /dev/dri:/dev/dri ports: - "8096:8096" networks: - all environment: - TZ=Asia/Shanghai # 推荐:省略 UID/GID=0,以非特权用户运行 # user: "1000:1000" # 如果需要指定用户,请使用非0的ID restart: always container_name: emby image: amilys/embyserver:4.9.0.46 smartstrm: image: cp0204/smartstrm:latest container_name: smartstrm restart: unless-stopped ports: - "8024:8024" - "8097:8097" networks: - all volumes: - ./config/smartstrm:/app/config # 挂载配置目录 - ./logs:/app/logs # 挂载日志目录,可选 - ./strm:/strm # 挂载 STRM 生成目录 environment: - PORT=8024 # 管理端口,可选 - ADMIN_USERNAME=admin # 管理用户名 - ADMIN_PASSWORD=admin # 管理用户密码 - TZ=Asia/Shanghai #- LICENSE= #购买付费pro服务可以填写凭证 networks: all: driver: bridge 运行以下命令: # 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose downSmartStrm 配置详解 SmartStrm:http://宿主机IP:8024 Emby:http://宿主机IP:8096 1)开启 302 代理 系统设置 → 302 代理 服务端口:8097 媒体服务器地址:http://192.168.x.x:8096 这里填 emby 宿主机 的地址 需要 emby 外部播放器按钮可打开 重要: Emby 播放器需要通过代理端口 8097 访问,而不是直接访问 8096。 image图片 2)配置 STRM 规则 媒体后缀:mp4,mkv,mov,avi (可根据需要添加) 大小阈值: 建议 >= 20 MB 以排除过小的文件。 生成根目录:/strm (必须与 Emby 容器的映射路径一致) SmartStrm 地址: 填写 http://宿主机IP:8024 image图片 3)添加存储(夸克) 存储管理 → 添加存储 驱动:夸克网盘 Cookie:浏览器登录后 F12 复制整段 Cookie 粘贴 STRM 模式:智能回落(Pro) image图片 创建任务并生成 STRM 1)任务管理 → + 添加任务 存储:选择 quark 路径:选择需要同步的文件夹(如 /来自:分享/电影、/来自:分享/电视剧 等) 定时:0 0 *(每天 00:00),或手动 “运行” 2)生成位置 容器内:/strm/任务名 宿主机对应:./strm/任务名 image图片 image图片 配置 Emby 媒体库 Emby 后台 → 媒体库 → 添加 类型(电影 / 电视剧 / 音乐) 文件夹路径:容器内 /strm/任务名 保存并扫描刮削 排查:如库为空,确认已生成 .strm、路径映射一致、大小阈值不致过滤 播放验证 为了验证 302 直链播放是否成功,请确保您的播放器(如:TV Box)或客户端是通过代理地址 http://宿主机IP:8097 访问 Emby 服务器image图片 image图片 image图片 可以尝试拖动进度条,如果是秒播且视频链接是 SmartStrm 的地址,观察日志是否命中,飞牛是否有高速网络波动来判断配置是否成功了!您现在可以尽情享受由夸克网盘直接提供的极速流畅的观影体验,无需再担心本地服务器的上行带宽瓶颈 高级操作 Quark-Auto-Save自动转存资源并 Emby 入库 Quark-Auto-Save 是一个强大的自动化工具,可以实现资源的自动转存和 Emby 入库,大大简化了资源管理流程,追番神器! image图片 SmartStrm 插件配置: webhook:http://192.168.x.x:8024/webhook/d74dc... strmtask:国外动画,电视剧集,国漫等 (对应 SmartStrm 的任务名称) xlist_path_fix:不用alist或者openlist这里不用填 Emby 插件配置: url:http://192.168.x.x:8096 token:88e7b11df00c47bd91... (Emby API Token) 企业微信推送: image图片 Cloud Saver 手动转存资源并 Emby 入库(手动推送) 适用场景:临时 / 单次保存分享资源,保存后立即触发 SmartStrm 生成 STRM,并立刻让 Emby 入库,无需等待自动任务。 1)扩展 → 新建自定义推送(Webhook) image图片 Cloud Saver 侧边栏 → 扩展 → “+ 新建自定义推送” 参考下述配置(与截图一致): 接口地址(SmartStrm Webhook): 示例:http://192.168.x.x:8024/webhook/ 你的 WebhookToken 请求类型:POST 请求体格式:JSON 触发延迟时间(秒):1 字段(新增三项): event:cs_strm savepath:/{savePath}/{shareTitle} strmtask:电影,电视剧,国漫,国外动画 保存后启用该推送卡片。 2)在资源卡片发起 “保存后推送” image图片 进入 Cloud Saver 资源列表,点选要保存的条目。 在弹出的 “选择保存目录” 窗口中: 选择网盘保存路径(如:/ 根目录 / 来自:分享 / 电影)。 右下角选择 “保存后执行推送 → 夸克网盘”(自定义名称,见下一节配置)。 点击 “保存” 开始转存并等待推送执行 可以看到保存并推送的时间是 14:30
技术搬砖
# 网盘
# emby
# 302直链
admin
1年前
0
299
0
2025-10-05
批量更换博客全站图床链接
批量更换博客全站图床链接 原文地址 https://imkee.com/45.html 需要大批修正一切文章的所用图片链接和一些文件链接地址,手动修正不太现实,因为一般这种连接比较多,难以准确查找,下面就说一下通过phpMyAdmin工具快速修正数据库文章图片,文件链接地址,此方式也可以批量替换指定内容 一、Typecho phpMyAdmin 管理工具 由于本站使用虚拟主机,所以可以登录数据库管理 phpMyAdmin 进行修改。 打开数据库管理工具,选择 Typecho 的数据库,选择 typecho_contents 表,点击 SQL,执行下列 sql 语句。 image图片 1、选中typecho_contents文章这个表 image图片 2、点击“SQL” image图片 3、输入下面的命令: /* 更改文章内图片 */ UPDATE typecho_contents SET text = REPLACE(text,'旧域名地址','新域名地址');/* 更改封面图片 */ UPDATE typecho_fields SET str_value = REPLACE(str_value,'旧域名地址','新域名地址'); 执行后即显示批量更改成功,此时就可以回到博客的文章中查看图片链接是否正确、图片是否正常显示了~ 知识延伸 修改 typecho_options 表 将网站的设置里的域名替换成新的域名: UPDATE `typecho_options` SET `value` = '新域名地址' WHERE `typecho_options`.`name` = 'siteUrl' AND `typecho_options`.`user` =0;修改 typecho_users 表 将管理员的个人网站进行替换: UPDATE `typecho_users` SET `url` = REPLACE(`url`,'旧域名地址','新域名地址');修改 typecho_comments 表 对评论中的管理员的域名,和评论中的旧域名进行替换: UPDATE `typecho_comments` SET `url` = REPLACE(`url`,'旧域名地址','新域名地址');UPDATE `typecho_comments` SET `text` = REPLACE(`text`,'旧域名地址','新域名地址');如果使用域名邮箱也可以进行更换: UPDATE `typecho_comments` SET `mail` = REPLACE(`mail`,'旧域名地址','新域名地址');二、Wordpress 数据库命令批量替换通过MySQL的操作命令语句进行更新Update所有的文章中图片链接地址。需要注意的是,新手在操作前一定要备份好数据库,以免操作错误还有后路可退。如何备份数据库,这里就不详说自行在网上搜索相关教程。登录自己的数据库管理后台,登录PHPMyadmin数据库管理软件,登陆后台选择对应的数据库wp_posts表,如下图: image图片 执行SQL命令行操作: UPDATE wp_posts SET post_content = REPLACE( post_content, '旧路径', '新路径' );image图片 UPDATE语句命令说明 UPDATE 表名 SET 字段 \= REPLACE(字段,'待替换内容','替换值'); 表名和字段名都不需要引号,只是在待替换内容和替换值上是需要引号的,因为他们是字符串类型的这里要注意。 这里可以使用wordpress插件WPReplace image图片 image图片
技术搬砖
# wordpress
# typecho
# 一键替换
admin
1年前
0
32
0
2025-09-23
利用甲骨文云 Oracle 免费邮件传送服务 Email Delivery 搭建 SMTP 发信服务
利用甲骨文云 Oracle 免费邮件传送服务 Email Delivery 搭建 SMTP 发信服务 原文地址 https://www.nodeseek.com/post-458800-1图片 用 OCI 白嫖发信服务的经历 之前我也尝试过自建 Postfix / Exim,结果发现:复杂、麻烦,好不容易搭建好了还容易进垃圾箱。后来偶然发现 Oracle Always Free 居然提供免费的 Email Delivery 服务,那就动手搞一搞。过程写下来,算是一个小记。 1. 进入控制台 先登录 OCI 后台: 选择 开发人员服务 → 应用程序集成 → 电子邮件传送 图片 2. 创建电子邮件域 点击 添加电子邮件域。 图片 图片 3. 配置 DKIM 进入刚刚添加的电子邮件域 → DKIM → 添加 DKIM。 图片 设置一个 DKIM 选择器前缀(随意输入)。 图片 获取到 CNAME 记录和值: 图片 4. 在 Cloudflare 添加 CNAME 解析 以 Cloudflare 为例: CNAME 记录: dkim-selector._domainkey.yourdomain.com. CNAME 值: dkim-selector.yourdomain.com.dkim.xsp1.oracleemaildelivery.com图片 Name: dkim-selector._domainkey Target: dkim-selector.yourdomain.com.dkim.xsp1.oracleemaildelivery.com Proxy: 关闭(灰云),只保留 DNS。 ⚠️ 千万别整串粘贴 dkim-selector._domainkey.yourdomain.com. 到 Name,Cloudflare 会进行域名拼接,仔细检查图中圈出来的部分 5. 验证 DKIM 状态 等一会儿,刷新后变绿: 图片 6. 创建批准的发件人 进入 批准的发件人 → 创建批准的发件人。 图片 示例:no-reply@yourdomain.com 图片 7. 配置 SPF 路径:电子邮件域 → yourdomain.com → 批准的发件人 → 查看 SPF。 图片 选择地区: 图片 比如: v=spf1 include:rp.oracleemaildelivery.com include:ap.rp.oracleemaildelivery.com include:eu.rp.oracleemaildelivery.com ~all8. 确认域配置 全部都显示 活动: 生命周期状态 DKIM 签名 SPF 如果 SPF 一直不亮,先继续下一步,发个测试邮件再回来,通常就好了。9. 获取 SMTP Endpoint 控制台 → 配置 → 查看 SMTP/HTTP 端点。 图片 10. 生成 SMTP 凭证 路径:右上角头像 → 用户设置 → 生成身份证明。 图片 图片 凭证只会显示一次,记得存好。 免费账户最多 2 个 SMTP 身份。 图片 11. Python 脚本测试 # send_oci_email.py import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import formataddr SMTP_SERVER = "smtp.email.<your-region>.oci.oraclecloud.com" SMTP_PORT = 587 SMTP_USER = "OCI SMTP username" SMTP_PASS = "OCI SMTP password" FROM_ADDR = "approved-sender@yourdomain.com" FROM_NAME = "测试发送人" TO_ADDR = "target@example.com" msg = MIMEText("Hello from OCI Email Delivery!", "plain", "utf-8") msg["Subject"] = Header("OCI Email Test", "utf-8") msg["From"] = formataddr((str(Header(FROM_NAME, "utf-8")), FROM_ADDR)) msg["To"] = TO_ADDR try: with smtplib.SMTP(SMTP_SERVER, SMTP_PORT, timeout=20) as server: server.ehlo() server.starttls() server.ehlo() server.login(SMTP_USER, SMTP_PASS) server.sendmail(FROM_ADDR, [TO_ADDR], msg.as_string()) print("邮件发送成功!") except Exception as e: print("邮件发送失败:", e)12. 免费额度 每天 200 封(2 MB = 1 封邮件,超过按比例计算)。 最多 2000 个发件人。 每分钟最多 10 封。 附件支持,最大 2 MB(含 base64 和 header) 。 图片 总结 现在你就得到了一个 稳定又不进垃圾箱的邮件发信服务,亲测 Outlook 和 Gmail 都不会进入垃圾邮件。而且配置下来也没多复杂。相比折腾自建 MTA,OCI 的方案更加简单且免费,作为一些个人项目的验证码发信服务完全足够了。
技术搬砖
# 永久免费
# Oracle
# SMTP
# 发信服务
admin
1年前
0
75
0
2025-09-23
Cloudflare域名临时邮箱
一、cloudflare_temp_email image图片 image图片 部署地址:https://temp-mail-docs.awsl.uk/ 核心功能 邮件处理 使用 rust wasm 解析邮件,解析速度快,几乎所有邮件都能解析,node 的解析模块解析邮件失败的邮件,rust wasm 也能解析成功 支持发送邮件,支持 DKIM 验证 支持 SMTP 和 Resend 等多种发送方式 增加查看 附件 功能,支持附件图片显示 支持 S3 附件存储和删除功能 垃圾邮件检测和黑白名单配置 邮件转发功能,支持全局转发地址 用户管理 使用 凭证 重新登录之前的邮箱 添加完整的用户注册登录功能,可绑定邮箱地址,绑定后可自动获取邮箱JWT凭证切换不同邮箱 支持 OAuth2 第三方登录(Github、Authentik 等) 支持 Passkey 无密码登录 用户角色管理,支持多角色域名和前缀配置 用户收件箱查看,支持地址和关键词过滤 管理功能 完整的 admin 控制台 admin 后台创建无前缀邮箱 admin 用户管理页面,增加用户地址查看功能 定时清理功能,支持多种清理策略 获取自定义名字的邮箱,admin 可配置黑名单 增加访问密码,可作为私人站点 集成与扩展 完整的 Telegram Bot 支持,以及 Telegram 推送,Telegram Bot 小程序 添加 SMTP proxy server,支持 SMTP 发送邮件,IMAP 查看邮件 Webhook 支持,消息推送集成支持 CF Turnstile 人机验证限流配置,防止滥用 Gihub Actions 部署 初始化/更新 D1 数据库 创建数据库 打开 cloudflare 控制台,选择 Storage & Databases -> D1 SQL Database -> Create Database,点击创建数据库 image图片 创建完成后,我们在 cloudflare 的控制台可以看到 D1 数据库 初始化数据库注意 你也可以跳过初始化数据库,在部署完成后,在 admin 页面的 快速设置 -> 数据库 中,点击 初始化数据库 按钮来初始化数据库打开 Console 标签页,输入仓库中 db/schema.sql 文件的内容,点击 Execute 执行 image图片 更新数据库 schema schema 更新,请确认你之前部署的版本, 查看 更新日志 找到需要执行的 patch 文件, 执行, 例如: db/2024-01-13-patch.sql 打开 Console 标签页,输入 patch 文件的内容,点击 Execute 执行 image图片 Github Actions 配置 Fork 仓库并启用 Actions 在 GitHub fork 本仓库 打开仓库的 Actions 页面 找到 Deploy Backend 点击 enable workflow 启用 workflow 如果需要前后端分离部署, 找到Deploy Frontend 点击 enable workflow 启用 workflow 配置 Secrets 然后在仓库页面 Settings -> Secrets and variables -> Actions -> Repository secrets, 添加以下 secrets: 公共 secrets 名称说明CLOUDFLARE_ACCOUNT_IDCloudflare 账户 ID, 参考文档CLOUDFLARE_API_TOKENCloudflare API Token, 参考文档 worker 后端 secrets 名称说明BACKEND_TOML后端配置文件,参考此处DEBUG_MODE(可选) 是否开启调试模式,配置为 true 开启, 默认 worker 部署日志不会输出到 Github Actions 页面,开启后会输出BACKEND_USE_MAIL_WASM_PARSER(可选) 是否使用 wasm 解析邮件,配置为 true 开启, 功能参考 配置 worker 使用 wasm 解析邮件USE_WORKER_ASSETS(可选) 部署带有前端资源的 Worker, 配置为 true 开启 pages 前端 secrets 注意 如果选择部署带有前端资源的 Worker, 则无须配置这些 secrets 名称说明FRONTEND_ENV前端配置文件,请复制 frontend/.env.example 的内容,并参考此处修改FRONTEND_NAME你在 Cloudflare Pages 创建的项目名称,可通过 用户界面 或者 命令行 创建FRONTEND_BRANCH(可选) pages 部署的分支,可不配置,默认 productionTG_FRONTEND_NAME(可选) 你在 Cloudflare Pages 创建的项目名称,同 FRONTEND_NAME,如果需要 Telegram Mini App 功能,请填写 部署 打开仓库的 Actions 页面 找到 Deploy Backend 点击 Run workflow 选择分支手动部署 如果需要前后端分离部署, 找到 Deploy Frontend, 点击 Run workflow 选择分支手动部署 如何配置自动更新 打开仓库的 Actions 页面,找到 Upstream Sync,点击 enable workflow 启用 workflow 如果 Upstream Sync 运行失败,到仓库主页点击 Sync 手动同步即可 配置邮件转发 设置完成后才能接收邮件了 回到 cloudflare 控制台,点击菜单账户主页,再点你的域名 图片 菜单栏会发生变化 图片 图片 图片 启用电子邮件 图片 图片 设置转发到 worker 图片 图片 设置完成的样子 图片 使用 Resend 发送邮件 1. 在 Resend 绑定并验证发信域名 登录 Resend 后台,进入 Domains,点击 Add Domain。 按向导添加你的发件域名,并在 DNS 处添加相应记录,待验证通过。 示意图(流程参考): 图片 图片 图片 图片 图片 完成后,确保域名状态为 Verified。发件地址必须使用该已验证域名,例如:no-reply@yourdomain.com 2. 创建 Resend API Key 进入 Resend → API Keys,点击 Create API Key。 建议选择可读写权限(Emails: send/read/update),并妥善保存生成的 Key。 参考截图: 图片 图片 图片 3. 在 Cloudflare Workers 配置变量 可以在 Cloudflare 的 UI 界面中,在Variables and Secrets 下面,将变量 RESEND_TOKEN 添加到 secrets 中 配置 Telegram Bot 注意:worker 默认的 worker.dev 域名的证书是不被 telegram 支持的,配置 Telegram Bot 请使用自定义域名 注意:如果要使用 Telegram Bot, 请先新建KV并后端绑定 KV 配置 worker 使用 wasm 解析邮件 如果你使用了 webhook 转发,或者 telegram bot 接受邮件,但是邮件内容是乱码,或者无法解析,你对解析的需要更高的要求,可以使用这个功能。 下载 worker-with-wasm-mail-parser.zip 回到 Overview,找到刚刚创建的 worker,点击 Edit Code, 删除原来的文件,上传 worker.js 和 wasm 后缀的文件, 点击 Deploy NOTE 上传需要先点击左侧菜单的 Explorer, 在文件列表的窗口里点击鼠标右键,在右键菜单里找到 Upload image图片 image图片 Telegram Bot 配置 请先创建一个 Telegram Bot,然后获取 token,然后在 Cloudflare 的 UI 界面中添加变量:TELEGRAM_BOT_TOKEN到 Variables and Secrets 下面 可设置白名单用户 点击初始化即可完成配置。 点击查看状态,可以查看当前配置的状态。 image图片 Mini App部署 从这里下载 zip, telegram-frontend.zip 修改压缩包里面的 index-xxx.js 文件 ,xx 是随机的字符串 搜索 https://temp-email-api.xxx.xxx ,替换成你worker 的域名,然后部署新的zip文件 部署完成后,请在 admin 后台的 设置 -\> 电报小程序 页面 电报小程序 URL 中填写网页 URL。 请在 @BotFather 处执行 /setmenubutton,然后输入你的网页地址,设置左下角的 Open App 按钮。 请在 @BotFather 处执行 /newapp 新建 app 来注册 mini app。 二、MoeMail部署 image图片 image图片 image图片 特性 隐私保护:保护您的真实邮箱地址,远离垃圾邮件和不必要的订阅 实时收件:自动轮询,即时接收邮件通知 灵活有效期:支持 1 小时、24 小时、3 天或永久有效 主题切换:支持亮色和暗色模式 响应式设计:完美适配桌面和移动设备 自动清理:自动清理过期的邮箱和邮件 PWA 支持:支持 PWA 安装 免费自部署:基于 Cloudflare 构建, 可实现免费自部署,无需任何费用 可爱的 UI:简洁可爱萌萌哒 UI 界面 发件功能:支持使用临时邮箱发送邮件,基于 Resend 服务 Webhook 通知:支持通过 webhook 接收新邮件通知 权限系统:支持基于角色的权限控制系统 OpenAPI:支持通过 API Key 访问 OpenAPI Github Actions 部署 自动触发:推送新的 tag 时自动触发部署流程 手动触发:在 GitHub Actions 页面手动触发 部署步骤 在 GitHub 仓库设置中添加以下 Secrets: CLOUDFLARE_API_TOKEN: Cloudflare API 令牌 CLOUDFLARE_ACCOUNT_ID: Cloudflare 账户 ID AUTH_GITHUB_ID: GitHub OAuth App ID AUTH_GITHUB_SECRET: GitHub OAuth App Secret AUTH_SECRET: NextAuth Secret,用来加密 session,请设置一个随机字符串 CUSTOM_DOMAIN: 网站自定义域名,用于访问 MoeMail (可选, 如果不填, 则会使用 Cloudflare Pages 默认域名) PROJECT_NAME: Pages 项目名 (可选,如果不填,则为 moemail) DATABASE_NAME: D1 数据库名称 (可选,如果不填,则为 moemail-db) KV_NAMESPACE_NAME: Cloudflare KV namespace 名称,用于存储网站配置 (可选,如果不填,则为 moemail-kv) 选择触发方式: 方式一:推送 tag 触发 # 创建新的 tag git tag v1.0.0 # 推送 tag 到远程仓库 git push origin v1.0.0方式二:手动触发 进入仓库的 Actions 页面 选择 "Deploy" workflow 点击 "Run workflow" 部署进度可以在仓库的 Actions 标签页查看 注意事项 确保所有 Secrets 都已正确设置 使用 tag 触发时,tag 必须以 v 开头(例如:v1.0.0) Deploy to Cloudflare Workers图片Deploy to Cloudflare Workers 邮箱域名配置 在 MoeMail 个人中心页面,可以配置网站的邮箱域名,支持多域名配置,多个域名用逗号分隔 title="邮箱域名配置"图片 Cloudflare 邮件路由配置 为了使邮箱域名生效,还需要在 Cloudflare 控制台配置邮件路由,将收到的邮件转发给 Email Worker 处理。 登录 Cloudflare 控制台 选择您的域名 点击左侧菜单的 "电子邮件" -> "电子邮件路由" 如果显示 “电子邮件路由当前被禁用,没有在路由电子邮件”,请点击 "启用电子邮件路由" title="启用电子邮件路由"图片 点击后,会提示你添加电子邮件路由 DNS 记录,点击 “添加记录并启用” 即可 title="添加电子邮件路由 DNS 记录"图片 配置路由规则: Catch-all 地址: 启用 "Catch-all" 编辑 Catch-all 地址 操作: 选择 "发送到 Worker" 目标位置: 选择刚刚部署的 "email-receiver-worker" 保存 title="配置路由规则"图片 注意事项 确保域名的 DNS 托管在 Cloudflare Email Worker 必须已经部署成功 如果 Catch-All 状态不可用(一直 loading),请点击路由规则旁边的目标地址, 进去绑定一个邮箱 权限系统 本项目采用基于角色的权限控制系统(RBAC)。 角色配置 新用户默认角色由皇帝在个人中心的网站设置中配置: 公爵:新用户将获得临时邮箱、Webhook 配置权限以及 API Key 管理权限 骑士:新用户将获得临时邮箱和 Webhook 配置权限 平民:新用户无任何权限,需要等待皇帝册封为骑士或公爵 角色等级 系统包含四个角色等级: 皇帝(Emperor) 网站所有者 拥有所有权限 每个站点只能有一个皇帝 公爵(Duke) 超级用户 可以使用临时邮箱功能 可以配置 Webhook 可以使用创建 API Key 调用 OpenAPI 可以被皇帝贬为骑士或平民 骑士(Knight) 高级用户 可以使用临时邮箱功能 可以配置 Webhook 可以被皇帝贬为平民或册封为公爵 平民(Civilian) 普通用户 无任何权限 可以被皇帝册封为骑士或者公爵 角色升级 成为皇帝 第一个访问 /api/roles/init-emperor 接口的用户将成为皇帝,即网站所有者 站点已有皇帝后,无法再提升其他用户为皇帝 角色变更 皇帝可以在个人中心页面将其他用户设为公爵、骑士或平民 权限说明 邮箱管理:创建和管理临时邮箱 Webhook 管理:配置邮件通知的 Webhook API Key 管理:创建和管理 API 访问密钥 用户管理:升降用户角色 系统设置:管理系统全局设置 系统设置 系统设置存储在 Cloudflare KV 中,包括以下内容: DEFAULT_ROLE: 新注册用户默认角色,可选值为 CIVILIAN、KNIGHT、DUKE EMAIL_DOMAINS: 支持的邮箱域名,多个域名用逗号分隔 ADMIN_CONTACT: 管理员联系方式 MAX_EMAILS: 每个用户可创建的最大邮箱数量 皇帝角色可以在个人中心页面设置 发件功能 MoeMail 支持使用临时邮箱发送邮件,基于 Resend 服务。 功能特性 临时邮箱发件:可以使用创建的临时邮箱作为发件人发送邮件 角色权限控制:不同角色有不同的每日发件限制 支持 HTML:支持发送富文本格式邮件 角色发件权限 角色每日发件限制说明皇帝 (Emperor)无限制网站管理员,无发件限制公爵 (Duke)5封/天默认每日可发送5封邮件骑士 (Knight)2封/天默认每日可发送2封邮件平民 (Civilian)禁止发件无发件权限提示:皇帝可以在个人中心的邮件服务配置中自定义公爵和骑士的每日发件限制。配置发件服务 获取 Resend API Key 访问 Resend 官网 注册账号 在控制台中创建 API Key 复制 API Key 供后续配置使用 配置发件服务 皇帝角色登录 MoeMail 进入个人中心页面 在"Resend 发件服务配置"部分: 启用发件服务开关 填入 Resend API Key 设置公爵和骑士的每日发件限制(可选) 点击保存配置 验证配置 配置保存后,有权限的用户在邮箱列表页面会看到"发送邮件"按钮 点击按钮可以打开发件对话框进行测试 注意事项 Resend 限制:请注意 Resend 服务的发送限制和定价政策 域名验证:使用自定义域名发件需要在 Resend 中验证域名 反垃圾邮件:请遵守邮件发送规范,避免发送垃圾邮件 配额监控:系统会自动统计每日发件数量,达到限额后将无法继续发送 配额重置:每日发件配额在每天 00:00 自动重置 三、Cloud-Mail image图片 image图片 部署文档:https://doc.skymail.ink/ 首先你要注册一个域名,如果你要拿来注册一些网站或者游戏比如 steam 不要用 top xyz 这种廉价域名有可能会网站被当临时邮箱拦截 1 绑定域名 注册账号登录到 cloudflare 控制台,开始绑定域名(如果你已经绑定好了可以直接跳到第二步) 图片 图片 选择免费的计划 图片 图片 设置 dns 图片 不同的厂商的修改 dns 都差不多,这里以华为云为例 图片 设置完成后可能要等几分钟,期间可以刷新浏览器看有没有完成 图片 完成后的界面 图片 这样子账户主页就会显示你的域名了,域名绑定完成 图片 2 创建 worker 项目 到项目仓库 fork 项目代码到你的仓库 图片 图片 这样子仓库就会复制到你那边了 图片 回到 cloudflare 控制台,找到 workers 页面导入你的 github 仓库代码 图片 图片 图片 设置启动目录 图片 等待构建部署完成 图片 构建完成后的页面 图片 这时候项目就会出现在 worker 列表了,点击名字进入可以查看和设置 图片 3 设置环境变量 服务还需要设置一些环境变量和绑定数据库才能正常运行 图片 添加以下变量,注意 domain 是 json 类型的,管理员账号之后需要你在注册页面注册 变量名值类型作用domain["你的域名"], 示例:["mornglow.top"],多域名 ["doamin1","domain2"]JSON网站会使用这个域名作为邮箱域名admin管理员的邮箱,示例:admin@mornglow.top纯文本对应的用户变成管理员jwt_secret随便输入一串字符串,示例:Z7f!xPq8mV@L2bC$r9X&N1t纯文本登录身份令牌的安全密钥图片 设置完成自定义域名和环境变量的样子 图片 4 绑定数据库 找到左侧菜单存储和数据库,创建 kv 数据库,数据库名字随意 图片 创建 d1 数据库,数据库名字随意 位置选择离你近的地方 图片 回到 worker 设置界面绑定刚刚创建的数据库 d1 数据库 变量名为 db kv 数据库 变量名为 kv 图片 浏览器输入 https:// 你的自定义域名 / api/init / 你绑定的的 jwt_secret 会自动初始化数据库 (如果之前部署过只会更新不会覆盖原有数据) 图片 浏览器输入你绑定的自定义域名网站已经能打开了,注册登录了 图片 5 启用邮件接收 设置完成后才能接收邮件了 回到 cloudflare 控制台,点击菜单账户主页,再点你的域名 图片 菜单栏会发生变化 图片 图片 图片 启用电子邮件 图片 图片 设置转发到 worker 图片 图片 设置完成的样子 图片 测试接收邮件 图片 6 附件收发 设置完这一步后才能接收附件和发送附件,如果你不需要可以跳过 回到上一级菜单,找到 r2 对象存储,创建存储桶 图片 桶名字可以随便填 位置选择离你近的地方 图片 设置自定义域名 图片 图片 自定义域名添加到项目设置里面 图片 回到 worker 绑定刚才创建的 r2 存储桶 r2 存储桶 变量名为 r2 图片 7 邮件发送 使用第三方服务 resend 发送邮件 浏览器输入 resend.com 注册 图片 添加域名 图片 图片 图片 图片 等待验证完成 图片 验证完成后的样子 图片 创建 apiKey 图片 图片 图片 回到项目网站设置 图片 设置邮件状态回调接口 图片 回调接口 https:// 你的项目自定义域 / api/webhooks 图片 图片 8 人机验证 设置这一步后可以开启人机验证,防止网站被机器人批量注册 菜单栏找到 turnstile 图片 图片 添加你的域名 图片 名字随意 图片 复制这两个密钥 图片 回到项目设置页面设置密钥 图片 9 TG 和其他邮箱转发 在 TG 搜索找到这个人 图片 创建机器人并且获取 token 图片 给机器人一条发消息 图片 浏览器输入 https://api.telegram.org/bot 你的机器 TOKEN/getUpdates 获取 chat_id 如果获取不到就再给机器人发几条消息 图片 设置 token 和 chat_id 图片 转发到其他服务商邮箱 在 cloudflare 验证邮箱 图片 设置邮箱 图片 四、freemail image图片 image图片 image图片 image图片 功能特性 现代化界面 毛玻璃效果:采用现代化的毛玻璃(Glassmorphism)设计风格 简约美观:浅色背景,动态渐变,视觉效果出色 响应式设计:完美适配桌面和移动设备 动画效果:平滑的过渡动画和微交互反馈 邮箱管理 智能生成:随机生成临时邮箱地址,支持自定义长度和域名 历史记录:自动保存历史生成的邮箱,方便重复使用 便捷删除:支持删除单个邮箱和批量管理 一键切换:快速在不同邮箱间切换 用户管理功能 角色与权限: 三层权限模型(严格管理员 Strict Admin / 高级用户 Admin / 普通用户 User),严格管理员拥有全部权限 用户列表: 查看用户名、角色、邮箱上限/已用、是否允许发件、创建时间等关键信息 用户邮箱: 查看指定用户名下的邮箱列表,支持一键复制邮箱地址 创建用户: 通过用户名/密码/角色创建新用户 编辑用户: 支持改名、重置密码、角色切换、发件权限开关、调整邮箱上限 分配邮箱: 批量为用户分配邮箱地址(支持多行粘贴,自动格式校验) 删除用户: 解除用户与邮箱的绑定关系(不会删除邮箱实体与邮件数据) 前端权限防护: 管理页进入前进行快速鉴权,未授权自动跳转,避免内容闪现 操作确认与反馈: 关键操作提供二次确认弹窗与统一 Toast 提示,操作状态与结果清晰可见 邮件功能 实时接收:自动接收和显示邮件,支持HTML和纯文本 自动刷新:选中邮箱后每8秒自动检查新邮件 智能预览:自动提取和高亮显示验证码内容 详细查看:优化的邮件详情显示,支持完整内容渲染 一键复制:智能识别验证码并优先复制,或复制完整邮件内容 灵活删除:支持删除单个邮件或清空整个邮箱 发件支持(Resend) :已接入 Resend,可使用临时邮箱地址发送邮件并查看发件记录(发件箱),支持自定义发件显示名(fromName)与批量/定时/取消等能力 一键部署 Deploy to Cloudflare Workers图片Deploy to Cloudflare Workers 1. 首先点击 Deploy to Cloudflare 2 登陆账号后会进入,推荐选择亚洲地区(当然不选择亚洲也没关系) 不要修改数据库名称和R2名称 可能导致无法查询 图片 3. 点击创建部署,然后耐心等待克隆部署 图片 4. 点击继续处理项目,绑定必须的环境变量 图片 环境变量说明 变量名说明必需TEMP_MAIL_DBD1 数据库绑定是MAIL_EMLR2 存储桶绑定,用于保存完整的邮件 EML 文件是MAIL_DOMAIN用于生成临时邮箱的域名,支持多个,使用逗号或空格分隔(如 iding.asia, example.com)是ADMIN_PASSWORD后台访问密码(严格管理员登录)是ADMIN_NAME严格管理员用户名(默认 admin)否JWT_TOKEN / JWT_SECRETJWT 签名密钥(二选一,推荐 JWT_TOKEN)是RESEND_API_KEYResend 发件 API Key。使用发件功能需要配置否FORWARD_RULES邮件转发(转发到指定邮箱)。支持两种格式:JSON 数组 或 逗号分隔 KV否图片 5. 添加完成后点击部署即可 注:这三个变量是必须的,其他变量例如 管理员名称,发邮件密钥可自行决定是否添加 最后就可以打开对应的 worker 连接登陆了 图片 6. 默认管理员账号为 admin 7. 记得将域名邮箱的 catch-all 绑定到 worker 上(不绑定无法接收到邮件) 进入域名的 Email Routing 设置 添加 Catch-all 规则 目标设置为 Worker: temp-mail-worker 图片/idingi 8、设置自定义域名(可选) 在 Worker 设置中添加自定义域名,或使用 workers.dev 子域名。 9、FORWARD_RULES 示例 说明:规则按前缀匹配,命中第一个前缀即转发;* 为兜底规则。未配置或设置为空/disabled/none 时不进行任何转发。 逗号分隔(KV): FORWARD_RULES="vip=a@example.com,news=b@example.com,*=fallback@example.com" JSON 数组: FORWARD_RULES='[{"prefix":"vip","email":"a@example.com"},{"prefix":"*","email":"fallback@example.com"}]' 仅指定某些前缀(无兜底): FORWARD_RULES="code=a@example.com,login=b@example.com" 禁用转发: FORWARD_RULES="" 或 FORWARD_RULES="disabled" 或 FORWARD_RULES="none" 或 FORWARD_RULES="[]" 转发的目标地址需要在 Cloudflare 的 Email Addresses 中添加/验证 注意事项 静态资源缓存:Workers + Assets 对静态文件可能有缓存。更新 index.html 后如未生效,请在 Cloudflare 控制台进行 Purge Everything,并在浏览器执行强制刷新(Ctrl/Cmd+F5)。 图标路径:favicon 建议使用相对路径(例如 favicon.svg),避免挂在子路径时 404。 邮件路由:若需接收真实邮件,请正确配置 Cloudflare Email Routing(MX 记录、Catch‑all → 绑定到 Worker)。 R2 存储:R2 用于保存完整的邮件 EML 文件,支持邮件下载功能。R2 有免费额度限制,建议定期清理过期邮件。 数据库与费用:D1 有免费额度限制;建议定期清理过期邮件以节省存储空间与额度。 安全:务必在生产环境修改 ADMIN_PASSWORD、JWT_TOKEN,并限制仓库/项目的敏感信息暴露。 Resend 教程(发件) 1. 在 Resend 绑定并验证发信域名 登录 Resend 后台,进入 Domains,点击 Add Domain。 按向导添加你的发件域名,并在 DNS 处添加相应记录,待验证通过。 示意图(流程参考): 图片 图片 图片 图片 图片 完成后,确保域名状态为 Verified。发件地址必须使用该已验证域名,例如:no-reply@yourdomain.com 2. 创建 Resend API Key 进入 Resend → API Keys,点击 Create API Key。 建议选择可读写权限(Emails: send/read/update),并妥善保存生成的 Key。 参考截图: 图片 图片 图片 3. 在 Cloudflare Workers 配置变量 本项目运行在 Cloudflare Workers,需把密钥配置为 Secret,域名配置为普通变量。 方式一:命令行(Wrangler) # 设置 Resend 密钥(Secret) wrangler secret put RESEND_API_KEY # 或者使用下面同义变量(不推荐):RESEND_TOKEN / RESEND # 设置普通变量(可写入 wrangler.toml 的 [vars]) # 多域名用逗号/空格分隔 # 例:MAIL_DOMAIN="iding.asia, example.com"方式二:Dashboard(Git 集成部署常用) 进入 Cloudflare Dashboard → Workers → 选中你的 Worker → Settings → Variables。 在 Secrets 添加 RESEND_API_KEY。 在 Variables 添加 MAIL_DOMAIN,值为你用于收取 / 发件的域名列表(需与 Resend 已验证域名一致)。 4. 关联项目并部署 # 本地开发 wrangler dev # 正式部署 wrangler deploy确保 wrangler.toml 已绑定 D1 数据库与静态资源(仓库已配置)。 5. 前端使用发件功能(发件箱) 在首页先生成或选择一个邮箱地址。 点击 “发邮件”,填写收件人、主题与内容,点击发送。 后端会调用 Resend API 发出邮件,并在数据库记录,前端可在 “发件箱” 查看记录与详情。 注意: 发件地址为当前选中邮箱(形如 xxx@你的域名)。你的域名需在 Resend 已验证。 若返回 未配置 Resend API Key,说明没有设置或没有以 Secret 形式提供 RESEND_API_KEY。 6. 常见问题 403/Unauthorized:域名未验证或 From 与已验证域名不一致。 429 / 限流:短时间大量请求,稍后重试或开启队列。 中文 / HTML 内容:本项目会将 HTML 直接提交给 Resend,同时自动生成纯文本版本,提升兼容性。 7. 相关后端接口 POST /api/send 发送单封邮件 GET /api/sent?from=xxx@domain 获取发件记录列表 GET /api/sent/:id 获取发件详情 DELETE /api/sent/:id 删除发件记录 以上接口由 src/apiHandlers.js 与 src/emailSender.js 实现,调用 Resend REST API 完成发件 / 查询 / 取消等操作。 故障排除 邮件接收不到 检查 Cloudflare 邮件路由配置是否正确 确认域名的 MX 记录设置 验证 MAIL_DOMAIN 环境变量配置 数据库连接错误 确认 D1 数据库绑定名称为 TEMP_MAIL_DB 检查 wrangler.toml 中的数据库 ID 是否正确 运行 wrangler d1 list 确认数据库存在 登录问题 确认 ADMIN_PASSWORD 环境变量已设置 检查 JWT_TOKEN 或 JWT_SECRET 配置 尝试清除浏览器缓存和 Cookie 界面显示异常 确认静态资源路径配置正确 检查浏览器控制台是否有 JavaScript 错误 验证 CSS 文件加载是否正常 自动刷新不工作 确认已选中邮箱地址 检查浏览器是否支持 Page Visibility API 查看网络连接是否稳定 调试技巧 使用 wrangler dev 进行本地调试 查看 Worker 的实时日志:wrangler tail 使用浏览器开发者工具检查网络请求 检查 D1 数据库中的数据:wrangler d1 execute TEMP_MAIL_DB --command "SELECT * FROM mailboxes LIMIT 10"
技术搬砖
# Cloudflare
# 临时邮箱
# Catch
# Resend
admin
1年前
0
273
0
2025-09-22
RustDesk 通过 API 防止服务器被滥用 自动编译将服务器等信息内置客户端
RustDesk 通过 API 防止服务器被滥用 自动编译将服务器等信息内置客户端 原文地址 https://smianao.com/1414.htmlimage图片 引言 现在,Github 无法通过设置变量,将服务器等信息编译进客户端!这可能是作者更新了源码,或者 Github 升级的缘故!同时,可以通过 API,控制客户端的使用,防止服务器被滥用 服务端及 API 安装 若想通过 API,控制 RustDesk 客户端使用,我们用到 Github 大佬 lejianwen 修改的服务端源码,以及该大佬开源的 API 项目。 服务器后台开放端口 1Panel 安装好后,按住 Ctrl 点击这个地址,即可访问 1Panel 面板。多数情况,不能正常访问,我们还需要在服务器后台,开放该端口。同时,我们将 rustdesk 服务端及 API 用到的端口,也一并开启。这类教程,鼠标也讲了很多次,不会的,看这期视频,这里以阿里云为例,进行操作演示。 开放端口列表: TCP:21114-21119,6666(1Panel 自定义端口) UDP:21116Compose 一键部署 RustDesk 服务端及 API 访问 1Panel 面板,左侧导航点击容器,编排 - 创建编排,名称随意,便于区分就好,粘贴如下代码: networks: rustdesk-net: external: false services: rustdesk: ports: - 21114:21114 - 21115:21115 - 21116:21116 - 21116:21116/udp - 21117:21117 - 21118:21118 - 21119:21119 image: lejianwen/rustdesk-server-s6:latest environment: - RELAY=<relay_server[:port]> - ENCRYPTED_ONLY=1 - MUST_LOGIN=N - TZ=Asia/Shanghai - RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]> - RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]> - RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]> - RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub - RUSTDESK_API_JWT_KEY=xxxxxx # jwt key volumes: - /data/rustdesk/server:/data - /data/rustdesk/api:/app/data #将数据库挂载 networks: - rustdesk-net restart: unless-stopped参数提示: RELAY=<relay_server[:port]> #中继服务器:21117 MUST_LOGIN=N #默认为 N,设置为 Y 则必须登录才能链接 RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]> #ID 服务器 RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]> #中继服务器 RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]> #API 服务器 RUSTDESK_API_JWT_KEY=xxxxxx #随便设置个字符串 /data/rustdesk/server #查看 key点击确定,等待拉取 docker 镜像,出现这个提示,意味着 rustdesk 服务端及 API 部署完成。一个 compose 文件,将 rustdesk 服务端,以及 API 都安装好了,服务端是作者基于原版修改,目的是更兼容作者的第三方 API,同时也添加了一些功能,譬如,只有登录客户端,才能发起远程连接,这就有效杜绝客户端被滥用的情况。 通过 docker 挂载的路径,可以查看客户端所用的 key。 API 登录地址为服务器 IP:21114, 用户名默认是 admin,密码可以通过刚部署的容器里日志查看,登录 API 后台后,切记及时修改密码。 ./apimain reset-admin-pwd < 你的新密码 >测试部署的服务端及 API 将服务器、API,以及 Key 等信息填入 rustdesk 客户端,进行远程连接测试,不出意外的情况,一切都正常,确定不登录客户端的情况,无法发起远程协助。 通过 Github Action 编译 rustdesk 利用 Github 的环境变量,将服务器等信息,编译到客户端,现在已经失效,无法将服务器等信息编译到 rustdesk 客户端。上一步,我们已经部署好了 rustdesk 的服务端及 API,接下来,鼠标将通过修改源码的方式,将服务器等信息,保存到客户端源码,并用 Github 的 Actions 自动编译客户端。 修改源码准备工作 修改 rustdesk 源码,我们用到 Git,用来克隆源码到本地修改,并且推送修改后的源码。因为 rustdesk 源码包含子模块,鼠标不会直接在 Github 上修改,所以只能采取 git 的方式。还有就是代码编辑器,使用更好用更美观的 HBuilder X git 下载安装 软件官网下载 git,全程选项保持默认下一步即可。安装好后,通过终端输入 git 命令,测试安装是否成功。 Fork 或者 import rustdesk 项目 Github 注册登录账号,import rustdesk 及子模块项目到自己的账号下。rustdesk 项目 代码页,点击 libs 后再点击这个 hbb,即可跳转到该 子模块项目,直接 import 到自己账号下即可。(建议 import 并设置不公开,因为后面如果需要固定被控端密码的话,你的密码会以明文的形式公开在自己名下的仓库中) 配置 github SSHkey 想要正常克隆推送 github 源码,我们需要配置 github 的 sshkey,以此对接 git 和 github。任务栏搜索框,搜索 git bash 并运行。在 git bash 代码框,依次输入如下代码并执行: # 配置 Git 的用户名和邮箱 git config --global user.name "用户名" git config --global user.email "邮箱" #生成密钥(一直回车直至这个界面)ssh-keygen -t rsa -C "邮箱" #查看公钥 cat ~/.ssh/id_rsa.pub打开 github 个人中心 - 设置,左侧导航点击 SSH and GPG keys,再点击 New SSH key,标题随意,将 git bash 窗口公钥复制到 key 这里,最后点击 这里添加保存。 打开 Windows 终端或者 git bash,运行如下代码,测试是否可以成功链接 gtihub # 测试连接 github ssh -T git@github.com终端询问是否继续连接,输入 Yes 回车确认,出现这个提示,就意味着我们通过 SSH 方式,可以正常连接 gtihub。 克隆主项目并配置子模块 本地任意目录,运行 Windows 终端或者 git bash,复制我们 fork 的 rustdesk 项目 SSH 地址,终端输入如下命令 +SSH 地址,将 RustDesk 源码仓库克隆到本地。 git clone --recurse-submodules <SSH 地址 > #--recurse-submodules 参数,递归克隆子模块修改子模块路径 输入如下命令,进入主仓库目 cd RestDesk修改主目录下. gitmodules 文件,将原作者的子模块 URL 替换为我们 Fork 的 地址,运行 HBuilder X,将文件直接拖放到 HBuilder X 主窗口,修改替换如下内容: [submodule "libs/hbb_common"] path = libs/hbb_common url = < 替换为我们 fork 的 hbb_common 项目地址 >同步子模块地址 git submodule sync提交修改后的代码,并推送到主仓库: git add .gitmodules git commit -m "更新所有子模块地址至我的 Fork(备注内容)" git push origin < 主仓库分支名,默认 master>修改 ID/ 中继服务器 进入子模块文件夹 cd libs/hbb_common配置子模块并创建新分支 git checkout -b < 新建分支名 >修改子模块源码 libs\hbb_common\src\config.rs #修改该文件的 101-102 行,分别是服务器及 KEY原代码: pub const RENDEZVOUS_SERVERS: &[&str] = &["rs-ny.rustdesk.com"]; pub const RS_PUB_KEY: &str = "OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=";pub const RENDEZVOUS_SERVERS: &[&str] = &["<自己的id_server>,不带端口"]; pub const RS_PUB_KEY: &str = "<自己的id_ed25519.pub>";或者找到 HARD_SETTINGS 字段 将那一整行替换为如下代码块: pub static ref HARD_SETTINGS: RwLock<HashMap<String, String>> = { let mut map = HashMap::new(); map.insert("password".to_string(), "<明文填写你要固定的被控端密码>".to_string()); RwLock::new(map) };提交修改后的代码,并推送到子模块仓库: git add . git commit -m "改为自己的 ID/ 中继服务器" git push origin < 新建的分支名 > # 推送分支到我们子模块 Fork(hbb_common 仓库的相关改动直接在网页修改也可以) 返回主仓库主目录: cd ../../..更新子模块的 Commit ID: git add libs/hbb_common # 提交子模块的新 Commit git commit -m "更新修改后的子模块" git push origin < 主仓库分支名 >配置主项目文件 修改替换 API 地址 仓库主目录,修改如下文件:src\common.rs #1027 行替换 API 地址 可以通过搜索get_custom_rendezvous_server,然后往下翻找到.to_owned(),替换前面的URL即可 let s0 = get_custom_rendezvous_server(custom); if !s0.is_empty() { let s = crate::increase_port(&s0, -2); if s == s0 { return format!("http://{}:{}", s, config::RENDEZVOUS_PORT - 2); } else { return format!("http://{}", s); } } "https://admin.rustdesk.com".to_owned() }提交修改并推送到主仓库: git add . git commit -m "修改替换 API 地址" git push origin < 主仓库分支名,默认 master>删除客户端广告提示 仓库主目录,修改如下文件: 打开flutter/lib/desktop/pages/connection_page.dart 原代码为: #原代码为: setupServerWidget() => Flexible( child: Offstage( offstage: !(!_svcStopped.value && stateGlobal.svcStatus.value == SvcStatus.ready && _svcIsUsingPublicServer.value), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text(', ', style: TextStyle(fontSize: em)), Flexible( child: InkWell( onTap: onUsePublicServerGuide, child: Row( children: [ Flexible( child: Text( translate('setup_server_tip'), style: TextStyle( decoration: TextDecoration.underline, fontSize: em), ), ), ], ), ), ) ], ), ), );81-110 行代码替换如下: Widget setupServerWidget() => Flexible( child: Offstage( offstage: !(!_svcStopped.value && stateGlobal.svcStatus.value == SvcStatus.ready && _svcIsUsingPublicServer.value), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [], ), ), );提交修改并推送到主仓库: git add . git commit -m "修改删除客户端广告" git push origin < 主仓库分支名,默认 master>git clone 你自己名下的 rustdesk 仓库到本地,首先删除官方源码中的引用 hbb_common 子模块(直接在本地删除 libs/hbb_common 那个空文件夹即可) cd 到本地 rustdesk 仓库根目录,添加上面自己修改过的 hbb_common 子模块 git submodule add https://github.com/<你自己的github用户名>/hbb_common libs/hbb_common替换过子模块后 push,再输一次如下指令强制更新子模块 git submodule syncGithub Action开始编译 在 <自己名下的>/rustdesk 项目,找到 Settings → Actions → General,确保勾选 Allow all actions and reusable workflows 和 Read and write permissions 两项 回到本地 rustdesk 仓库,创建一个 tag git tag -a <自己拟一个tag名> -m "这是我的自定义客户端tag"在 <自己名下的>/rustdesk 项目,找到 Actions,点击 "i understand xxxx" 那个按钮,回到本地 rustdesk 仓库,输入 git push --tags将刚才新创建的标签同步到远程仓库 在 Action 页面中,选择 Flutter Nightly Build, 并点开 branch 下拉,选择刚才创建的标签 image图片
技术搬砖
# Github Action
# rustdesk
# 编译
# rustdesk-api
admin
1年前
0
69
0
2025-09-20
可托管cloudflare免费域名泛域名解析教程
image图片 一、需双向解析的免费域名 https://x10hosting.com/ 注:60 天不活跃会删号 elementfx.com x10.mx https://www.cloudns.net/ 注:域名没有解析访问会删除 cloudns.club dnsabr.com ip-ddns.com cloudns.cX cloudns.eu cloudns.in cloudns.info ddns-ip.net dns-cloud.net dns-dynamic.net cloudns.nz cloudns.org ip-dynamic.org cloudns.ph cloudns.pro cloudns.pw cloudns.us 二、泛域名解析教程(以x10为例) 1、x10添加NS记录 @(用于 CF 验证),两个 ns 记录都要改成 cf 的,框选起来的 "." 要留着 image图片 _acme-challenge(用于证书申请),新增两个 NS 记录,名称: "_acme-challenge" ,值: CF 给的两个NS域名,一样要加点 image图片 2、x10添加CNAME记录 * 指向优选域名,比如cloudflare.182682.xyz,这样就成功泛解析了,以后只需要在cloudflare添加dns解析即可使用,而且还是Cloudflare的优选CDN网络 最后的记录应该长这样: image图片 3、托管Cloudflare 与顶级域名托管到Cloudflare步骤一致,但添加子域名解析时,一定要设置仅DNS,不能开小黄云
技术搬砖
# Cloudflare
# x10hosting
# cloudns
# 双向解析
admin
1年前
0
288
0
2025-07-10
自建Vaultwarden密码管理器,并实现自动备份和EdgeOne加速
自建Vaultwarden密码管理器,并实现自动备份和EdgeOne加速 image图片 Vaultwarden 是一款基于 Rust 语言开发的 Bitwarden 兼容服务器,专为自托管场景设计。其核心目标是提供高性能、低资源占用的密码管理解决方案,同时保持与官方 Bitwarden 客户端的完全兼容。通过轻量化设计和模块化架构,Vaultwarden 能够在树莓派、NAS 或低配 VPS 上高效运行,成为自托管用户的理想选择。 Vaultwarden 采用 Rust 语言开发,内存占用极低,通常仅需 10-50MB,远低于官方 Bitwarden 服务器的资源需求。其模块化设计支持 Docker 容器化部署,默认镜像体积小巧,约 100MB,启动速度快,适合资源有限的环境。无论是个人用户还是小型团队,Vaultwarden 都能在不牺牲功能的前提下,提供流畅的使用体验。 Vaultwarden 实现了 Bitwarden 客户端 API 的几乎所有功能,包括个人保险库、组织共享、多因素认证、附件与图标支持以及管理后台。个人保险库支持存储密码、笔记、信用卡等数据,而组织共享功能则允许用户通过集合、用户组和角色管理实现团队协作。多因素认证集成了 FIDO2 WebAuthn、YubiKey 和 Duo 等硬件密钥,进一步提升账户安全性。此外,Vaultwarden 还支持文件上传和网站图标自动抓取,并通过 Web 端管理界面提供用户管理和策略配置功能。 一、环境准备 在开始部署之前,需要确保你的系统环境满足以下条件: 操作系统:支持大多数 Linux 发行版,如 Ubuntu、Debian、CentOS 等。也可以在 Windows 和 macOS 上运行,但主要推荐在 Linux 服务器上部署。 硬件要求:虽然 Vaultwarden 以低资源消耗闻名,但至少应确保有 1GB RAM 和 1GHz CPU,以保证运行的流畅性。磁盘空间根据你的用户量和存储的数据量来决定,起步至少需要 10GB。 网络配置:确保服务器的指定端口(默认为 80 和 443)对外开放,以便用户访问 Vaultwarden 服务 Docker Engine:用于容器化部署和管理。 Docker Compose:支持configs的版本,用于多容器应用的编排 SSH 客户端,宝塔面板 一个域名 (强烈建议,用于HTTPS) 一个有EdgeOne免费套餐的腾讯云账号 二、部署过程 1、安装Docker和Docker Compose bash <(curl -sSL https://linuxmirrors.cn/docker.sh)国外选官方,国内除官方以外都可以 image图片 国外选官方,国内建议选第一个毫秒镜像 image图片 2、安装宝塔面板及网站环境 if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec成功安装完面板后进入首页,只需要安装推荐的Nginx 3、创建部署目录并编辑部署文件 mkdir -p /home/vaultwarden && cd /home/vaultwarden在部署目录下,创建docker-compose.yaml文件,示例内容如下: vim docker-compose.yamlservices: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden network_mode: bridge #使用默认的桥接网络 restart: always environment: - TZ=Asia/Shanghai - ADMIN_TOKEN=xxxxxx #此值是Vaultwarden管理员面板的令牌(一种密码)。为了安全起见,这应该是一个长的随机字符串。如果未设置此值,则管理员面板将被禁用。建议openssl rand -base64 48生成ADMIN_TOKEN确保安全 - SIGNUPS_ALLOWED=true #允许注册,一般在第一次注册之后关闭 - SIGNUPS_VERIFY=true #设置注册邮箱验证,此处设置需要配置好SMTP才生效 - ADMIN_SESSION_LIFETIME=20 #会话持续时间 - ADMIN_RATELIMIT_SECONDS=60 #这是来自同一IP的登录请求之间的平均秒数,在Vaultwarden限制登录次数之前 - LOGIN_RATELIMIT_MAX_BURST=10 #允许在一阵登录/两步验证尝试中的最大请求次数。 - LOGIN_RATELIMIT_SECONDS=60 #这与ADMIN_LOGIN_RATELIMIT_SECONDS相同 - DOMAIN=https://xxxxx.yourdomain.com # 这是您希望与您的Vaultwarden实例关联的域名 - ADMIN_RATELIMIT_MAX_BURST=10 # 这与LOGIN_RATELIMIT_MAX_BURST相同,只争对admin面板 - WEB_VAULT_ENABLED=true #是否开启web UI - SENDS_ALLOWED=false #是否开启send功能 - EMERGENCY_ACCESS_ALLOWED=true - PUSH_ENABLED=true #启用移动端推送 - PUSH_INSTALLATION_ID=xxxxxxx #访问https://bitwarden.com/host/,输入您的电子邮箱地址,然后您将获得一个 INSTALLATION ID 和 KEY - PUSH_INSTALLATION_KEY=xxxxxx # 请确保选择 bitwarden.com(美国)作为数据区域 - SMTP_HOST=smtp.domain.tld - SMTP_FROM=vaultwarden@domain.tld - SMTP_PORT=587 - SMTP_SECURITY=starttls - SMTP_USERNAME=myusername - SMTP_PASSWORD=MyPassw0rd - LOG_FILE=/log/vaultwarden.log - LOG_LEVEL=warn - EXTENDED_LOGGING=true volumes: - ./data:/data #在docker-compose.yml同级目录创建的文件夹 - ./log:/log ports: - 8888:80 #映射80端口 vaultwarden_backup: image: ttionya/vaultwarden-backup:latest restart: always depends_on: - vaultwarden volumes: - vaultwarden-rclone-data:/config - ./data:/data environment: - DATA_DIR=/data #指定存放 vaultwarden 数据的目录 - XDG_CONFIG_HOME=/config #指定存放 rclone config 配置的目录 - LOCALTIME_FILE=/tmp/localtime - RCLONE_REMOTE_NAME=BitwardenBackup #Rclone远程名称,它需要和rclone config中的远程名称保持一致 - RCLONE_REMOTE_DIR=/BitwardenBackup/ #远程存储系统中存放备份文件的文件夹路径 - ZIP_PASSWORD=WHEREISMYPASSWORD? #压缩文件的密码。请注意,打包备份文件时始终会使用密码 - BACKUP_KEEP_DAYS=0 #在远程存储系统中保留最近 X 天的备份文件。设置为 0 会保留所有备份文件 - TIMEZONE=Asia/Shanghai #设置你的时区名称 - ZIP_TYPE=7z #只支持 zip 和 7z 格式 volumes: vaultwarden-data: # Specify the name of the volume where you save the vaultwarden data, # use vaultwarden-data for new users # and bitwardenrs-data for migrated users name: vaultwarden-data # name: bitwardenrs-data vaultwarden-rclone-data: external: true # Specify the name of the volume where you save the rclone configuration, # use vaultwarden-rclone-data for new users # and bitwardenrs-rclone-data for migrated users name: vaultwarden-rclone-data # name: bitwardenrs-rclone-data这里 SMTP 相关环境变量可以不填,但不填的话登录 Vaultwarden 二次验证就是不能选择邮件验证,但你可以选择其他方式进行二验 在docker-compose.yml 文件所在目录执行操作 # Start docker-compose up -d # Stop docker-compose stop # Restart docker-compose restart # Remove docker-compose down4、反向代理设置 image图片 image图片 image图片 签发证书,其他默认 启用 HTTPS:强烈建议通过反向代理启用 HTTPS,以确保数据传输过程中的加密。 定期更新:定期更新 Docker 镜像或 Vaultwarden 本身,以确保安全漏洞得到修复 三、创建用户,使用教程 反代设置好以后,接下来访问 web 页面创建用户 image图片 填写账号信息创建用户。创建完毕后,记得修改 compose 文件的环境变量 SIGNUPS_ALLOWED 为 false image图片 接下来可以设置二验,并保存恢复代码以防万一。 image图片 接下来就是安装客户端,再进行登录就完事了。PC 端推荐使用浏览器并安装插件,移动端推荐安装 App ,都可以在 bitwarden下载页面 找到。 需要注意的是,登陆时需要选择自托管,并填写自己的网址才可以使用。 image图片 另外现在越来越多网站可以开启TOTP二次验证,vaultwarden 当然也是支持的 image图片 四、自动备份教程 1、配置Rclone 我们通过 Rclone 同步备份文件到远程存储系统。 访问 GitHub 了解更多存储系统使用教程,不同的系统获得 Token 的方式不同。 你可以通过下面的命令获得 Token docker run --rm -it \ --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \ ttionya/vaultwarden-backup:latest \ rclone config我们建议将远程名称设置为 BitwardenBackup,否则你需要指定环境变量 RCLONE_REMOTE_NAME 为你设置的远程名称。 2、自动备份 如果你有一个正在运行的 vaultwarden,但是不想使用 docker-compose.yml,我们同样为你提供了备份方法。 确保你的 vaultwarden 容器被命名为 vaultwarden,否则你需要自行替换 docker run 的 --volumes-from 部分。 默认情况下 vaultwarden 的数据文件夹是 /data,你需要显式使用环境变量 DATA_DIR 指定数据文件夹。 使用默认设置启动容器(每小时的 05 分自动备份) docker run -d \ --restart=always \ --name vaultwarden_backup \ --volumes-from=vaultwarden \ --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \ -e DATA_DIR="/data" \ ttionya/vaultwarden-backup:latest3、还原备份 重要: 还原备份会覆盖已存在的文件。你需要在还原备份前停止 Docker 容器。 你也需要下载备份文件到本地计算机。 因为主机的文件无法在 Docker 容器中直接访问,所以要将需要还原的备份文件所在目录映射到 Docker 容器中。 首先进入待还原的备份文件所在目录。 如果你使用的是“自动备份”,请确认 vaultwarden 卷的命名,并替换 --mount source 部分。 同时不要忘记使用环境变量 DATA\_DIR 指定数据目录(-e DATA\_DIR\="/data")。 docker run --rm -it \ \ # 如果你将本地目录映射到 Docker 容器中,就像 `vw-data` 一样 --mount type=bind,source="本地目录的绝对路径",target=/data/ \ \ # 如果你使用 Docker 卷 --mount type=volume,source="Docker 卷名称",target=/data/ \ --mount type=bind,source=$(pwd),target=/bitwarden/restore/ \ -e DATA_DIR="/data" \ ttionya/vaultwarden-backup:latest restore \ [OPTIONS]五、EdgeOne加速 边缘安全加速平台 EO(Tencent cloud EdgeOne,下文简称为 EO )基于腾讯边缘计算节点提供加速和安全的解决方案,为电商与零售、金融服务、内容资讯与游戏等行业保驾护航,提升用户体验。 加速方面:边缘节点更贴近用户,有效降低了数据访问时间延迟,避免数据传输抖动,保障大量数据传输的稳定性和有效性。同时,产品提供了动静态数据加速,跨国加速,智能路由优化等加速特性,高效支撑对时延敏感的相关业务。 安全方面:提供 WAF,DDoS 安全防护服务。节点识别并拦截 L3/L4/L7层各类攻击请求,对 DDoS 攻击流量进行清洗,智能 AI 引擎、BOT 策略引擎对 Web、BOT、CC 类型攻击进行行为分析并更新拦截策略,阻断恶意请求到达用户源站,保障业务访问流畅稳定。 image图片 腾讯云国际站 6月13日开始限量内测 EdgeOne网站安全加速免费版!不限流量,不限请求次数!已备案域名还能享受中国大陆节点加速! 内测时间到2025 年7月15日晚上 11:59:59!内测结束会应该就会公测了! 目前EdgeOne国际版,无需实名,无需绑卡,就能使用服务!! 腾讯云国际版才有免费版,注册账号和购买时一定要注意! 腾讯云国际站:https://www.tencentcloud.com/zh EdgeOne国际站:https://edgeone.ai/zh/redemption 1、免费计划 只限一个站点(一个主域,不限制子域名) 不限流量 不限请求次数 长期有效("永"不过期) 已备案域名支持中国大陆CDN加速 自动签发SSL证书 官方介绍:https://edgeone.ai/zh/document/70405 2、Get兑换码 官方推荐有3种方式: 第一:推特发布宣传内容,有机会获得兑换码(回复非常慢慢慢, 推特默认私信是关闭的要去手动打开)。 第二:在 Discord 上“抢”兑换码。北京时间下午三点/六点/晚上九点 准时发1兑换码)。 第三:参与Github活动可获取,https://edgeone.ai/blog/details/github-developer 另外一种方式,寻找EdgeOne人员PY一个码字。EdgeOne国内版国外版都是同一拨人! 3、绑定站点 访问 EO控制台 image图片 填写站点域名,一定要谨慎。因为目前暂时不能更换主域名。 特别提醒,域名有国内备案才能享受国内CDN加速!否则只有海外加速!速度相差太多了! image图片 第二步:绑定已经拥有的免费版。点击下一步后稍等一会! image图片 第三步:选择加速区域。已备案域名可选【全球可用区】。接入模式支持 CNAME 和 NS,根据自己的情况选择! 全球可用区支持中国大陆加速!! image图片 image图片 image图片 image图片 image图片 4、加速vaultwarden站点 image图片 image图片 image图片 image图片 可以看到加速域名已经在部署中了,我们可以按以上步骤把所有需要加速的域名全部添加上 image图片 接下来我们给加速域名配置 SSL 证书,点击如图处的 编辑 image图片 为了省去手动更新证书的麻烦,我们直接选择 申请免费证书 ,点击 确定 image图片 可以看到,证书正在申请中,我们可以按以上步骤把所有加速域名的证书配置完成 image图片 稍等片刻,我们可以看到证书已经全部配置完毕 image图片 创建加速规则,否则无法进行设备审批登陆 image图片 image图片 添加以下路径为 不缓存(EdgeOne → 规则引擎 → 缓存规则): /notifications/* /identity/* /api/* /admin/*启用真实客户端 IP 传递 在 EdgeOne → 站点配置 → 网络 中,确保 X-Forwarded-For 头已启用 image图片 进入vaultwarden admin:https://xxxxx.yourdomain.com/admin 页面,输入环境变量中的Admin_token image图片 修改Client IP header为 X-Forwarded-For image图片
技术搬砖
# Vaultwarden
# edgeone
# 自动备份
# 密码管理
admin
1年前
0
130
0
2025-05-22
自建Karakeep服务
自建Karakeep服务 image图片 Karakeep简介 Karakeep是一款支持自托管的全能书签管理工具,它能将你收藏的网页链接、随手记的文本片段、甚至截图都整合到同一个平台,并通过AI自动打标签+全文搜索实现秒级定位。更牛逼的是官方还提供了安卓/iOS客户端和浏览器插件,真正做到全平台覆盖。 GitHub 原项目地址:https://github.com/karakeep-app/karakeep 官网地址:https://karakeep.app/ 官方文档地址:https://docs.karakeep.app/ Karakeep功能 收藏链接、做简单笔记并存储图像和 PDF 文件。( Bookmark links, take simple notes and store images and pdfs.) 自动获取链接标题、描述和图像。( Automatic fetching for link titles, descriptions and images.) 将您的书签整理成列表。( Sort your bookmarks into lists.) 对所有存储的内容进行全文搜索。 基于人工智能(又名 chatgpt)的自动标签。支持使用 ollama 的本地模型! OCR 用于从图像中提取文本。 Chrome 插件 和 Firefox 插件 用于快速添加书签。 一个 iOS 应用 ,以及一个 Android 应用 。 从 RSS feed 自动收集。 REST API。 多语言支持。 标记并存储您囤积内容中的亮点。 整页存档(使用 monolith)以防止链接失效。使用 youtube-dl 自动视频存档。 支持批量操作。 SSO 支持,深色模式支持, 自托管优先 搭建环境 系统 Debian12 域名一枚,并做好解析到服务器上 安装好Docker、Docker-compose 开始搭建 sudo -i # 切换到root用户 apt update -y # 升级packages apt install wget curl sudo vim git -y # 安装常用的软件创建一下安装的目录: mkdir -p /home/karakeep cd /home/karakeep vim docker-compose.ymldocker-compose.yml填入以下内容: services: web: image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release} restart: unless-stopped volumes: # By default, the data is stored in a docker volume called "data". # If you want to mount a custom directory, change the volume mapping to: # - /path/to/your/directory:/data - data:/data ports: - 3000:3000 env_file: - .env environment: MEILI_ADDR: http://meilisearch:7700 BROWSER_WEB_URL: http://chrome:9222 # OPENAI_API_KEY: ... # You almost never want to change the value of the DATA_DIR variable. # If you want to mount a custom directory, change the volume mapping above instead. DATA_DIR: /data # DON'T CHANGE THIS chrome: image: gcr.io/zenika-hub/alpine-chrome:123 restart: unless-stopped command: - --no-sandbox - --disable-gpu - --disable-dev-shm-usage - --remote-debugging-address=0.0.0.0 - --remote-debugging-port=9222 - --hide-scrollbars meilisearch: image: getmeili/meilisearch:v1.13.3 restart: unless-stopped env_file: - .env environment: MEILI_NO_ANALYTICS: "true" volumes: - meilisearch:/meili_data volumes: meilisearch: data:同目录创建.env See https://docs.karakeep.app/configuration for more information DATA_DIR=/data MEILI_ADDR=http://127.0.0.1:7700 MEILI_MASTER_KEY=[generate with <openssl rand -base64 36>] NEXTAUTH_URL=http://localhost:3000 NEXTAUTH_SECRET=[generate with <openssl rand -base64 36>]要启用自动标记,您需要配置 OpenAI 按照 OpenAI 的帮助获取 API 密钥 将 OpenAI API 密钥添加到 env 文件中: OPENAI_API_KEY=<key> OPENAI_BASE_URL=然后运行: docker-compose up -d利用宝塔面板反向代理 新建一个站点,不要数据库,不要 php,纯静态 然后打开下面的配置,修改 Nginx 的配置 注释掉上图内容 图片 添加下列代码: 图片 第一次首次登陆需要自行注册账号,默认管理员 如果需要关闭注册,需要在.env文件中添加环境变量 DISABLE_SIGNUPS=true请记住,每次更改 .env 文件时,都需要重新运行 docker-compose up -d 如果你想要更多的配置参数,请在此处查看配置文档。
技术搬砖
# docker
# 稍后阅读
# karakeep
admin
1年前
0
234
0
1
2
...
11
下一页