首页
关于
Search
1
AdGuardHome 安装及部署教程
47,819 阅读
2
关于微软Azure学生白嫖指南
12,186 阅读
3
Oracle开放全部端口并关闭防火墙
12,169 阅读
4
搭建基于telegram的无限网盘
11,539 阅读
5
最新Cloudflare免费自选IP教程(非Partner)
10,195 阅读
默认分类
技术搬砖
教学设计
故事奇谈
生活琐事
错题分析
精品软件
登录
找到
104
篇与
技术搬砖
相关的结果
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
昨天
0
2
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
昨天
0
2
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
1
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
9月23日
0
8
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
9月23日
0
12
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
9月22日
0
12
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
9月20日
0
26
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
7月10日
0
65
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
5月22日
0
134
0
2025-05-22
自建 Wallabag 服务
自建 Wallabag 服务 图片 Wallabag 简介 wallabag 是一个网络应用程序,允许您保存网页以供以后阅读。单击,保存并在需要时阅读。它提取内容,这样您就不会被弹出窗口 您可以将其安装在自己的服务器上,也可以在 wallabag.it 上创建一个帐户。 项目展示 GitHub 原项目地址:https://github.com/wallabag/wallabag 官网地址:https://wallabag.org/ 官方文档地址:https://doc.wallabag.org/en/admin/installation/requirements.html 官方镜像:https://hub.docker.com/r/wallabag/wallabag 图片预览 图片 图片 图片 图片 搭建环境 系统 Debian12 域名一枚,并做好解析到服务器上 安装好Docker、Docker-compose 账号密码:wallabag:wallabag 开始搭建 sudo -i # 切换到root用户 apt update -y # 升级packages apt install wget curl sudo vim git -y # 安装常用的软件创建一下安装的目录: mkdir -p /home/wallabag cd /home/wallabag vim docker-compose.ymldocker-compose.yml填入以下内容: sql版本 version: '3' services: wallabag: image: wallabag/wallabag environment: - SYMFONY__ENV__FROM_EMAIL=xxxxx@163.com # 修改成你自己的邮箱 - SYMFONY__ENV__DOMAIN_NAME=https://xxxxxx.com # 修改成稍后要反向代理的域名 - SYMFONY__ENV__SERVER_NAME="Achen" #修改成你自己的网站名称 - SYMFONY__ENV__LOCALE=zh ports: - 8080:80 # 8080可以修改成其他的自己想用的端口 volumes: - ./images:/var/www/wallabag/web/assets/images # 将图片映射挂载到本地,这样docker停止了,数据不会丢失 - ./data:/var/www/wallabag/datamysql 版本 version: '3' services: wallabag: image: wallabag/wallabag environment: - MYSQL_ROOT_PASSWORD=wallaroot - SYMFONY__ENV__DATABASE_DRIVER=pdo_mysql - SYMFONY__ENV__DATABASE_HOST=db - SYMFONY__ENV__DATABASE_PORT=3306 - SYMFONY__ENV__DATABASE_NAME=wallabag - SYMFONY__ENV__DATABASE_USER=wallabag - SYMFONY__ENV__DATABASE_PASSWORD=wallapass - SYMFONY__ENV__DATABASE_CHARSET=utf8mb4 - SYMFONY__ENV__MAILER_HOST=127.0.0.1 - SYMFONY__ENV__MAILER_USER=~ - SYMFONY__ENV__MAILER_PASSWORD=~ - SYMFONY__ENV__FROM_EMAIL=xxxxx@163.com # 修改成你自己的邮箱 - SYMFONY__ENV__DOMAIN_NAME=https://xxxxxx.com # 修改成稍后要反向代理的域名 - SYMFONY__ENV__SERVER_NAME="Achen" - SYMFONY__ENV__LOCALE=zh ports: - 8000:80 # 8000可以修改成其他的自己想用的端口 volumes: - /root/achen/achen_wanjia/wallabag/images:/var/www/wallabag/web/assets/images # 将图片映射挂载到本地,这样docker停止了,数据不会丢失 healthcheck: test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost"] interval: 1m timeout: 3s depends_on: - db - redis db: image: mariadb environment: - MYSQL_ROOT_PASSWORD=wallaroot volumes: - ./data:/var/lib/mysql # 将数据映射挂载到本地,这样docker停止了,数据不会丢失 - ./images:/var/www/wallabag/web/assets/images # 将图片映射挂载到本地,这样docker停止了,数据不会丢失 healthcheck: test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] interval: 20s timeout: 3s redis: image: redis:alpine healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 20s timeout: 3spostgres 版本 这里额外提供一份以postgresql作为数据库的配置,用于替换mariadb以支持一些mariadb不支持的系统架构,例如linux/arm/v7架构。如果遇到架构不支持的问题,请尝试以下配置 version: '3' services: wallabag: image: wallabag/wallabag restart: always environment: - POSTGRES_PASSWORD=wallaroot # 自行设置密码 - POSTGRES_USER=wallabag_admin # 自行设置用户名 - SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql # 适用于 pgsql 的驱动 - SYMFONY__ENV__DATABASE_HOST=db - SYMFONY__ENV__DATABASE_PORT=5432 # pgsql 的默认端口 - SYMFONY__ENV__DATABASE_NAME=wallabag - SYMFONY__ENV__DATABASE_USER=wallabag - SYMFONY__ENV__DATABASE_PASSWORD=wallapass # 自行设置密码 - SYMFONY__ENV__DATABASE_TABLE_PREFIX="wallabag_" - SYMFONY__ENV__MAILER_DSN=smtp://127.0.0.1 - SYMFONY__ENV__FROM_EMAIL=example@example.com # 自行设置邮箱 - SYMFONY__ENV__DOMAIN_NAME=http://127.0.0.1:8888 # 自定义域名 - SYMFONY__ENV__SERVER_NAME="wallabag service" # 服务名称 ports: - "8888:80" volumes: - ./images:/var/www/wallabag/web/assets/images healthcheck: test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost"] interval: 1m timeout: 3s depends_on: - db - redis db: image: postgres:9.6 restart: always environment: - POSTGRES_PASSWORD=wallaroot # 这里对应前面同名环境变量的密码 - POSTGRES_USER=wallabag_admin # 这里对应前面同名环境变量的用户名 volumes: - ./data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] interval: 20s timeout: 3s redis: image: redis:alpine restart: always healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 20s timeout: 3s简便修改版 如果本地宿主机安装了mysql或postgresql和redis version: '3' services: wallabag: image: wallabag/wallabag environment: - MYSQL_ROOT_PASSWORD=wallaroot # 修改成你自己的mysql-root密码,需要此项来创建数据库和用户 - SYMFONY__ENV__DATABASE_DRIVER=pdo_mysql - SYMFONY__ENV__DATABASE_HOST=172.17.0.1 #这里修改成宿主机在docker中的内网地址 - SYMFONY__ENV__DATABASE_PORT=3306 - SYMFONY__ENV__DATABASE_NAME=wallabag # 修改成你自己的mysql数据库名 - SYMFONY__ENV__DATABASE_USER=wallabag # 修改成你自己的mysql数据库账户名 - SYMFONY__ENV__DATABASE_PASSWORD=wallapass # 修改成你自己的mysql数据库账户密码 - SYMFONY__ENV__REDIS_HOST=172.17.0.1 #这里修改成宿主机在docker中的内网地址 - SYMFONY__ENV__REDIS_PORT=6379 - SYMFONY__ENV__REDIS_PASSWORD= #这里修改成宿主机在redis密码 - SYMFONY__ENV__DATABASE_CHARSET=utf8mb4 - SYMFONY__ENV__FROM_EMAIL=xxxxx@163.com # 修改成你自己的邮箱 - SYMFONY__ENV__DOMAIN_NAME=https://xxxxxx.com # 修改成稍后要反向代理的域名 - SYMFONY__ENV__SERVER_NAME="Achen" #修改成你自己的网站名称 - SYMFONY__ENV__LOCALE=zh ports: - 8080:80 # 8080可以修改成其他的自己想用的端口 volumes: - ./images:/var/www/wallabag/web/assets/images # 将图片映射挂载到本地,这样docker停止了,数据不会丢失 - ./data:/var/www/wallabag/data然后运行: docker-compose up -d利用宝塔面板反向代理 新建一个站点,不要数据库,不要 php,纯静态 然后打开下面的配置,修改 Nginx 的配置 注释掉上图内容 图片 添加下列代码: 图片 默认的用户名和密码都是wallabag(这个在 docker hub 文档中有说明)登录之后,先去 Config 中修改 PASSWORD,修改完成后再进行 API 服务的配置 创建 API 服务 image图片 创建一个新的客户端,取一个名称,然后创建即可。 image图片 创建完客户端之后就会提供客户端 ID 和密钥,此时不要直接刷新网页避免重置 ID 和密钥。 设置中文 image图片 image图片 之后再点击下方的SAVE进行保存即可 配置插件 Chrome 搜索:应用商店 图片 搜索 Wallabag 图片 点击添加到Chrome 图片 点击浏览器插件 image图片 将需要的网页添加到Wallabag即可! 图片 这样就可以进到Wallabag查看了! 图片 手机安装相应的 App 即可同步查看! 导入 worker 要运行 异步 redis 导入 worker,请使用以下命令: $ docker run --name wallabag --link wallabag-db:wallabag-db --link redis:redis -e <... your config variables here ...> wallabag/wallabag import <type>其中 是 pocket、readability、instapaper、wallabag_v1、wallabag_v2、firefox 或 chrome 之一。 启用 Redis 作为异步导入的缓存 进入 wallbag 网页界面,登录后,点击右上角的头像,选择【内部设置】,点击【导入】标签,下方的 启用 Redis 来异步导入数据 值默认是 0 ,改为 1 后点击“应用”按钮,就可以开启 Redis 作为异步导入的缓存了 此时再次点击右上角的头像,选择【导入】,应该能看到页面顶部有一行很显眼的提示: 导入是异步进行的。一旦导入任务开始,一个外部 worker 就会一次处理一个 job。目前的服务是: Redis此时选择一个导入途径,比如选择了【Firefox】,然后点击“导入内容”,选择待导入的文件,点击“上传文件”,此时右上角应该会提示: 导入情况摘要: 1 个项目正在等待导入。此时如果刷新一下【导入】页面,会发现右上角有个提示: Messages in queue: 1多次刷新也之后提示这一句,看上去导入任务并没有开始的样子。。 此时需要去手动执行一下同步任务才能开始: docker exec -it wallabag /var/www/wallabag/bin/console wallabag:import:redis-worker firefox --env=prod导入完成后,刷新一下 wallabag 网页,应该能看到导入的内容了。 保存的文章不显示图片 如果你保存的文章不显示图片,需要到NAS中对docker这个文件夹开启写入权限,因为没有写入权限,图片因此无法保存到本地 然后在宿主机执行下面这个命令,将宿主机挂载目录的权限调整至 777 ,也就是允许(任何)其他用户读写: sudo chmod -R 777 data终究还是翻了一下官方的 dockerfile ,原来容器内的用户和组都是 nobody 最根本的办法,就是在宿主机将挂载目录的归属指定为 nobody 用户和组。 但是这个特殊的用户和组直接 sudo chown nobody:nobody data 是不行的,需要指定 uid 和 gid 才行: sudo chown -R 65534:65534 data最后再执行一下 docker compose up -d 重建容器就可以了(因为刚才修改了 compose 配置文件)。
技术搬砖
# docker
# 稍后阅读
# Wallabag
admin
5月22日
0
52
0
1
2
...
11
下一页