在群晖中安装acme并申请SSL同时设置自动续期
前言最近一只在折腾家里的服务器,现在 ipv6 已经普及了,很多宽带也有 IPV6 公网地址了,于是就可以告别内网穿透,跑慢家里的 100M 上传带宽了。群晖自带的域名在每次重启之后会有很长一段时间才能够解析到公网 IP,所以换用自己的域名。 设备 群晖 DS218+,ds7.1 需要自备域名且最好托管到 DNS 服务器上(推荐 Cloudflare,免费好用且安全) docker 安装 DDNS 将域名解析到公网 开始安装 在群晖中打开 ssh 连接功能 使用 ssh 连接到群晖 并需要使用 root 用户登录或者获取 root 权限 安装 acme.sh 123curl https://get.acme.sh | sh -s [email protected] --force~~curl https://get.acme.sh | sh~~ 注意:如果不使用 email 的命令,群晖默认会报莫名其妙的错误,原因不明,个人测试发现必须要使用 email 参数才能正常安装 acme.sh 导入 cloudflare 的 API 密钥 12export...
使用Navidrome搭建个人音乐库并配合音流客户端随时随地听音乐
使用 Navidrome 搭建个人音乐库并配合音流客户端随时随地听音乐前言本人是一个音乐爱好者,喜欢收集和听各种类型的音乐。但是目前市面上的音乐平台大多广告多、界面复杂且有版权限制。在网上寻找解决方案时,发现了 Navidrome 这个开源音乐服务器项目。它可以帮助我在本地或服务器上搭建一个个人音乐库,并通过音流(Substreamer)来配置客户端,实现音乐自由。 一、Navidrome 简介Navidrome 是一个用 Go 语言开发的现代化音乐服务器,支持多平台部署(Windows、macOS、Linux、Docker),界面美观,资源占用极低,支持多用户、自动扫描音乐库、歌词、封面、播放列表等功能。 GitHub 地址:https://github.com/navidrome/navidrome 二、Docker Compose 部署 Navidrome1. 编写 docker-compose.yml1234567891011version: "3.8"services: navidrome: image:...
使用 Cloudflare R2 免费图床功能详解
使用 Cloudflare R2 免费图床功能详解一、R2 简介与优势 免费额度:每月 10GB 存储和 1,000,000 次请求免费 全球 CDN 加速,访问速度快 兼容 S3 协议,支持主流上传工具 支持自定义域名、无出站流量费 二、注册与开通 R2 注册 Cloudflare 账号 登录 Cloudflare 控制台,左侧菜单选择“R2” 点击“创建存储桶(Bucket)”,填写名称(如 my-images) 创建后可在“存储桶”列表中看到 三、获取 API 密钥 控制台右上角头像 > “My Profile” > “API Tokens” 选择“Create Token”,可用“Edit Cloudflare R2 Storage Bucket”模板 生成后保存 Access Key ID 和 Secret Access Key 四、上传图片到 R2方式一:使用 Cloudflare 官方网页上传 进入 R2 存储桶页面,点击“上传对象”即可选择本地图片上传 方式二:使用 S3 兼容工具(PicGo)以 PicGo 为例: 下载并安装...
使用 Python、Ollama、LangChain 和 RAG 本地部署智能 Agent
使用 Python、Ollama、LangChain 和 RAG 本地部署智能 Agent前言经过上次初步部署大模型到本地,现在又继续学系结合 Python、Ollama、LangChain 和 RAG 技术,完成本地智能 Agent 的搭建。 一、环境准备 安装 Python 3.8+ 安装 Ollama 访问 Ollama 官网 下载并安装适用于 macOS 的 Ollama。 启动 Ollama 服务:1ollama serve 安装依赖包:1pip install langchain langchain-ollama langchain-chroma pandas 依赖包可根据实际需求调整。 二、下载并运行本地大模型以 deepseek-r1:8b 和 mxbai-embed-large 为例: 12ollama pull deepseek-r1:8bollama pull mxbai-embed-large 三、构建本地 RAG Agent 示例以下为一个简单的本地 RAG Agent 示例,结合 Ollama 本地大模型、LangChain 框架和...
使用 HuggingFace + LangChain 本地调用 DeepSeek
使用 HuggingFace + LangChain 本地调用 DeepSeek前言最近 LLM 也是非常火,我也一直在学习相关知识。记录一下在本地通过 HuggingFace Transformers 和 LangChain 调用 DeepSeek 模型。 一、环境准备 安装 Python 3.8+ 注册 HuggingFace 账号,获取 API Token,并在终端登录:1huggingface-cli login 建议使用虚拟环境:12python3 -m venv venvsource venv/bin/activate 安装依赖包:1pip install torch transformers langchain Apple Silicon 用户可用:1pip3 install torch --index-url https://download.pytorch.org/whl/metal.html 测试 PyTorch 是否可用:123import torchx = torch.rand(5, 3)print(x) 二、下载 DeepSeek...
VSCode 保存时 Prettier 卡顿很久,保存速度变慢的解决办法
VSCode 保存时 Prettier 卡顿很久,保存速度变慢的解决办法引言最近在前端开发中,遇到一个极其影响效率的问题:每次保存代码时,Prettier 都会卡住十几秒甚至更久,严重拖慢开发节奏。查阅了大量资料,尝试了各种方法,终于找到了解决方案。 问题表现 保存代码时,状态栏显示“正在通过 Prettier 格式化”,但长时间无响应。 保存一次代码需要等待十几秒甚至更久。 解决方案经过多次排查和尝试,最终通过以下两个方法彻底解决了卡顿问题: 方案一:删除 editor.codeActionsOnSave 配置 打开 VSCode 设置(settings.json)。 查找并删除如下配置: 123"editor.codeActionsOnSave": { // ...可能的内容} 保存并重启 VSCode。 该配置会在保存时触发额外的代码操作,与 Prettier 可能存在冲突或性能问题,删除后保存速度明显提升。 方案二:替换 Auto import 插件如果你安装了 Auto import -...
JS中的防抖与节流详解(React实践)
在前端开发中,防抖(debounce)和节流(throttle)是常用的性能优化手段,尤其适用于高频事件(如输入、滚动、窗口缩放等)。 一、什么是防抖(Debounce)?防抖是指在事件被触发 n 秒后再执行回调,如果 n 秒内事件又被触发,则重新计时。常用于输入框实时搜索、窗口 resize 等场景。 可以理解为 moba 游戏中的回城。如果被打断,则重新计时。 典型应用场景 搜索框输入自动联想 窗口大小调整 表单验证 手动实现防抖函数123456789function debounce(fn, delay = 300) { let timer = null; return function (...args) { clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, args); }, delay); };} React 中使用防抖12345678910111213import {...
JS中的闭包
最近学习到闭包的概念,发现它在 JavaScript 中非常重要闭包(Closure)是 JavaScript 中非常重要的概念,理解闭包对于掌握作用域、数据保护、回调、React 组件开发等都有极大帮助。 一、什么是闭包?闭包是指函数能够“记住”并访问它定义时的词法作用域,即使这个函数在其词法作用域之外被调用。 通俗理解:闭包就是“函数+定义该函数的环境”。 形成条件 函数嵌套函数 内部函数引用了外部函数的变量 外部函数返回了内部函数或将其传递到外部 二、闭包的经典例子1. 基础例子12345678910function makeCounter() { let count = 0; return function () { count++; return count; };}const counter = makeCounter();console.log(counter()); // 1console.log(counter()); // 2 2....
JS中深拷贝与浅拷贝
在前端开发时遇到一个问题,在我使用 扩展运算符 ... 或 Object.assign() 进行对象拷贝时,发现修改新对象的嵌套属性会影响原对象。这让我意识到 JavaScript 中的对象拷贝分为浅拷贝和深拷贝两种方式。 一、浅拷贝(Shallow Copy)浅拷贝是指只复制对象的第一层属性,如果属性值是引用类型(如对象、数组),则只复制其引用地址。 常见浅拷贝方法 Object.assign() 展开运算符 ... Array.prototype.slice()、concat() 示例:1234const obj1 = { a: 1, b: { c: 2 } };const obj2 = { ...obj1 };obj2.b.c = 100;console.log(obj1.b.c); // 100,说明 b 只是引用 二、深拷贝(Deep...
在 Docker 中安装 OpenWrt 作为旁路由
在 Docker 中安装 OpenWrt 作为旁路由由于本人随时都会使用魔法上网,手上的设备也比较多,家里刚好又有一台闲置的旧电脑,于是给旧电脑装上了 OpenWrt 作为旁路由,来管理家里的网络流量。 步骤详解1. 创建 macvlan1docker network create <vlan name> -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 --ip-range=192.168.0.240/28 -o parent=enp2s0 2. 设置网卡为混杂模式1ip link set <网卡名称> promisc on 3. 拉取镜像并启动 OpenWrt 容器1docker run -d --restart unless-stopped --network <vlan name> --privileged --name openwrt sulinggg/openwrt:x86_64 /sbin/init 4. 进入容器1docker exec -it...