Rain Blog
Ollama API 使用指南
📋 服务信息 配置项 值 服务地址 http://192.168.6.9:11434 API 基础路径 http://192.168.6.9:11434/v1 已安装模型 qwen2.5:0.5b (397 MB) API Key ollama(或任意字符串,Ollama 不验证) 🔌 OpenAI 兼容接口 Ollama 提供与 OpenAI API 完全兼容的接口,可直接使用支持 OpenAI 的客户端和工具。 可用端点 端点 说明 GET /v1/models 列出可用模型 POST /v1/chat/completions 聊天完成(推荐) POST /v1/completions 文本补全 POST /v1/embeddings 嵌入向量 🚀 API 调用示例 1. curl 命令行 列出模型 curl http://192.168.6.9:11434/v1/models 聊天请求 curl http://192.168.6.9:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5:0.5b", "messages": [ {"role": "user", "content": "你好,请介绍一下自己"} ], "temperature": 0.7, "max_tokens": 512 }' 流式响应 curl http://192.168.6.9:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5:0.5b", "messages": [{"role": "user", "content": "你好"}], "stream": true }' 2. Python (OpenAI SDK) from openai import OpenAI # 创建客户端 client = OpenAI( base_url="http://192.168.6.9:11434/v1", api_key="ollama" # 任意值即可 ) # 聊天请求 response = client.chat.completions.create( model="qwen2.5:0.5b", messages=[ {"role": "system", "content": "你是一个有帮助的助手"}, {"role": "user", "content": "你好,请介绍一下自己"} ], temperature=0.7, max_tokens=512 ) print(response.choices[0].message.content) 流式响应 from openai import OpenAI client = OpenAI( base_url="http://192.168.6.9:11434/v1", api_key="ollama" ) response = client.chat.completions.create( model="qwen2.5:0.5b", messages=[{"role": "user", "content": "你好"}], stream=True ) for chunk in response: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True) 安装依赖 pip install openai 3. JavaScript/TypeScript (Node.js) import OpenAI from "openai"; const client = new OpenAI({ baseURL: "http://192.168.6.9:11434/v1", apiKey: "ollama" }); const response = await client.chat.completions.create({ model: "qwen2.5:0.5b", messages: [{ role: "user", content: "你好" }], temperature: 0.7, max_tokens: 512 }); console.log(response.choices[0].message.content); 安装依赖 npm install openai 4. HTTP 请求参数说明 请求体参数 参数 类型 说明 默认值 model string 模型名称 必填 messages array 消息列表 必填 temperature float 温度 (0-2) 0.7 max_tokens int 最大输出 token 数 无限制 stream boolean 是否流式输出 false top_p float 核采样阈值 0.9 frequency_penalty float 频率惩罚 0 presence_penalty float 存在惩罚 0 消息格式 { "role": "user" | "assistant" | "system", "content": "消息内容" } 📱 常用客户端配置 ChatGPT-Next-Web / LobeChat / Cherry Studio 配置项 值 API 接口地址 http://192.168.6.9:11434/v1 API Key ollama 模型名称 qwen2.5:0.5b Open WebUI docker run -d -p 3000:8080 \ -e OLLAMA_BASE_URL=http://192.168.6.9:11434 \ --add-host=host.docker.internal:host-gateway \ --name open-webui \ --restart always \ openwebui/open-webui:main 🔧 服务管理命令 # 查看服务状态 sudo systemctl status ollama # 重启服务 sudo systemctl restart ollama # 查看日志 sudo journalctl -u ollama -f # 停止服务 sudo systemctl stop ollama # 启动服务 sudo systemctl start ollama 📦 Ollama 命令行工具 # 列出已安装模型 ollama list # 运行模型(交互式) ollama run qwen2.5:0.5b # 拉取新模型 ollama pull qwen2.5:1.5b # 删除模型 ollama rm qwen2.5:0.5b # 查看模型详情 ollama show qwen2.5:0.5b ⚙️ 配置文件位置 文件/目录 说明 /etc/systemd/system/ollama.service.d/override.conf Ollama 服务配置 /usr/share/ollama/.ollama/models/ 模型存储目录 当前服务环境变量 OLLAMA_HOST=0.0.0.0:11434 HTTP_PROXY=http://127.0.0.1:20171 HTTPS_PROXY=http://127.0.0.1:20171 NO_PROXY=127.0.0.1,localhost,::1,... 🔐 安全建议 局域网访问:当前配置允许局域网内所有设备访问 防火墙设置:如需限制访问,可配置防火墙规则 sudo ufw allow from 192.168.6.0/24 to any port 11434 生产环境:建议使用反向代理(如 Nginx)添加认证和 HTTPS 📊 性能说明 由于运行在 ARM64 Cortex-A53 设备上: ...
Hugo → WordPress 自动同步方案总结
一、目标 每次运行 Hugo 博客脚本发布新文章时,自动将该文章同步到 WordPress 作为备份。 二、整体流程 note.txt → 生成 MD 文件 → 复制到 Hugo content/posts ↓ Hugo 生成静态网站 (public / public2 / public3) ↓ Git push 到 GitHub / Git FTP 上传 ↓ WordPress 自动同步(新增模块) 三、核心原理 1. 同步入口 在 all_fpt_ok.py 脚本末尾追加 WordPress 同步模块,每次运行 Hugo 发布脚本时自动触发,无需额外操作。 2. 文件定位 每次只同步今天生成的一篇文章(YYYY-MM-DD.md),通过当前日期匹配文件名。 3. 解析 Frontmatter 读取 MD 文件开头的 frontmatter,提取: 字段 示例 用途 title "Debian 系统精簡" WordPress 文章标题 date 2025-12-12 WordPress 文章发布日期 4. Markdown → HTML 使用 Python 的 markdown 库将 MD 正文转为 HTML,支持: ...
Python/PHP 服务适配sv66容器
1. 方案目标 在 sv66(无 root、共享容器环境)上部署轻量 Python/PHP 服务,并通过 Cloudflare 反向代理/CDN 对外提供稳定访问。 核心链路: 用户 -> Cloudflare(反向代理/CDN/WAF) -> cloudflared 隧道 -> 127.0.0.1:本地服务端口 该方案不依赖公网高位端口直连,通常比直接开放端口更稳定。 2. 架构与端口规划 api.yourdomain.com -> Python 服务 127.0.0.1:18080 php.yourdomain.com -> PHP 服务 127.0.0.1:18081 cloudflared 以普通用户方式常驻运行(无需 root) 3. 部署 Python 轻服务(示例) mkdir -p ~/apps/py-api cat > ~/apps/py-api/server.py <<'PY' #!/usr/bin/env python3 # 简单健康检查接口 from http.server import BaseHTTPRequestHandler, HTTPServer class H(BaseHTTPRequestHandler): def do_GET(self): if self.path == "/health": body = b'{"ok":true,"service":"py-api"}' self.send_response(200) self.send_header("Content-Type", "application/json") self.send_header("Content-Length", str(len(body))) self.end_headers() self.wfile.write(body) else: self.send_response(404) self.end_headers() HTTPServer(("127.0.0.1", 18080), H).serve_forever() PY nohup python3 ~/apps/py-api/server.py > ~/apps/py-api/run.log 2>&1 & curl -sS http://127.0.0.1:18080/health 4. 部署 PHP 轻服务(示例) mkdir -p ~/apps/php-web/public cat > ~/apps/php-web/public/index.php <<'PHP' <?php header('Content-Type: application/json; charset=utf-8'); echo json_encode(['ok'=>true,'service'=>'php-web']); PHP nohup php -S 127.0.0.1:18081 -t ~/apps/php-web/public > ~/apps/php-web/run.log 2>&1 & curl -sS http://127.0.0.1:18081/ 5. 接入 Cloudflare Tunnel(推荐) 方式A(最快) 在 Cloudflare Zero Trust 后台创建 Tunnel,获取 token。 在 sv66 下载并运行 cloudflared(用户态): mkdir -p ~/bin ~/cloudflared cd ~/bin curl -L -o cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 chmod +x cloudflared nohup ~/bin/cloudflared tunnel --no-autoupdate run --token '你的TOKEN' > ~/cloudflared/run.log 2>&1 & 在 Cloudflare 后台给 Tunnel 绑定 Hostname: api.yourdomain.com -> http://127.0.0.1:18080 php.yourdomain.com -> http://127.0.0.1:18081 6. 保活(已验证 sv66 的 crontab 可用) 编辑 crontab: ...
supabase 免费版
官方规则: Supabase 免费版通常在 1 周(7 天) 没有任何活动后会将项目设为“暂停(Paused)”。 Supabase 的保活机制监测的是 API 活跃度。只要你的脚本向数据库发送了请求,并且数据库返回了响应(即便只是返回一个空数组或一行数据),系统就会判定你的项目处于“活跃”状态。 1. Supabase URL (项目地址) 这是最基础的。API Key 是钥匙,URL 就是门牌号。 位置: 就在 API Key 页面上方,或者 Settings -> API -> Project URL。 样子: https://xxxxxx.supabase.co 2. 对应的 SDK(“翻译官”) 你不能直接用嘴跟数据库说话,得用它的语言。Supabase 官方提供了非常好用的库: 如果你用 Python: 需要安装 supabase 库。 pip install supabase 如果你用 Node.js (Vercel/Armbian): 需要安装 @supabase/supabase-js。 npm install @supabase/supabase-js 3. 表名和字段名 (Table & Columns) 你需要知道你要操作哪张表,以及表里有哪些“格子”(列)。 比如你的保活脚本操作的是 keep_alive 表。 如果你要存用户,你得知道字段是叫 username 还是 user_name。 4. RLS 策略 (Row Level Security) —— 最容易踩坑的地方 这是 Supabase 的“保安”。即便你拿到了 anon 钥匙,如果没有配置 RLS,你的脚本依然读不到数据(返回空数组或报错)。 ...
SSH_skills高级运维技能
这份 SKILL.md 整体结构非常清晰,核心原则抓得很准。但正如你所提到的,你的主机环境跨度很大,尤其是 Termux 与标准的 Ubuntu/Debian/Armbian 在底层架构上有巨大的差异(比如文件系统路径、包管理器、服务管理工具以及权限模型)。 如果不在执行前强制确认环境,AI 极容易在 Termux 里执行 systemctl 或试图向 /etc/ 写文件,从而导致不断报错。 我为你优化了这份配置,重点强化了环境侦测机制和差异化处理逻辑。 优化后的 SKILL.md --- name: sys-admin description: 专门用于本地 Shell 操作或通过 SSH 连接远程主机,执行系统配置、应用安装部署和系统错误排查的高级运维技能。能够智能识别并适配 Termux, Ubuntu, Debian, Armbian 等不同宿主环境。 disable-model-invocation: true argument-hint: "[操作指令或目标主机及任务]" --- 你现在是一位资深的 Linux 运维工程师、DevOps 专家和安全研究员。你的任务是通过本地 Shell 或 SSH 连接,帮我安全、高效地完成系统配置、应用部署或故障排查任务。 当前用户输入的具体任务和参数是:$ARGUMENTS ### 🎯 核心执行原则与工作流: 1. **环境侦测与适配 (Environment Profiling)**: - **首要动作**:在执行任何安装、配置或排错前,**必须先执行侦测命令**(如 `uname -a`, `cat /etc/os-release`, 检查 `$PREFIX` 环境变量等),以明确当前主机的操作系统(Termux / Ubuntu / Debian / Armbian)及 CPU 架构(x86_64 / aarch64 等)。 - **严格遵循环境差异**: - **Termux 环境**:绝对禁止使用 `systemctl` 或默认向 `/etc/`、`/var/` 写入。必须使用 `pkg` 管理软件,使用 `termux-services` (sv) 管理服务。所有绝对路径必须基于 `$PREFIX`(即 `/data/data/com.termux/files/usr/`)。注意默认运行在非 root 权限下。 - **Ubuntu/Debian 环境**:标准 Linux 逻辑,使用 `apt` 管理包,使用 `systemd` (`systemctl`, `journalctl`) 管理服务与日志。 - **Armbian 环境**:基本同 Debian/Ubuntu,但涉及底层硬件(如网卡、存储、GPIO)或 Docker 镜像拉取时,必须特别注意 ARM 架构的兼容性问题。 - **连接确认**:如果是远程操作,请先构造安全的 SSH 命令。如果用户未提供用户名或 IP,请先询问。 2. **渐进式部署与配置 (Step-by-Step)**: - 对于复杂的安装部署(如配置反向代理、部署容器、搭建数据库等),**严禁一次性生成并执行超长脚本**。 - 必须将任务拆解为逻辑清晰的单个步骤(例如:1. 检查依赖 -> 2. 下载安装 -> 3. 修改配置 -> 4. 启动服务 -> 5. 验证状态),每一步执行后都要读取终端返回结果,确认无误后再进行下一步。 3. **智能错误排查 (Root-cause-tracing)**: - 如果在执行命令、编译代码或启动服务时遇到错误,**不要要求我手动去查日志**,你需要主动去调取日志。 - **注意日志获取的环境差异**: - 标准 Linux:使用 `journalctl -xe`、`tail -n 50 /var/log/syslog` 或 `/var/log/messages`。 - Termux:通常没有全局的 syslog 或 journalctl,必须直接查看对应应用的专属日志文件,或尝试在前台运行服务以捕获 stdout/stderr 报错。 - 追踪并分析导致错误的根本原因,然后提出修复方案并帮我执行。 4. **安全与防御性操作 (Safety First)**: - 在修改核心配置文件(如 `fstab`, `sshd_config`, `nginx.conf` 等)之前,**必须先使用 `cp` 命令备份原文件**。 - 遇到具有破坏性的高危操作(如 `rm -rf` 关键目录、清空数据库、重启生产级核心服务、重置网络/防火墙规则等),在执行前必须向我清晰地说明该操作的后果,并等待我的明确授权确认。 5. **透明沟通**: - 每次执行命令前,简短告知我你打算执行什么命令以及目的。 - 如果遇到环境特定的疑难杂症(例如某个库在当前 ARM 架构下无法编译),及时向我同步阻碍点及备选方案。 请基于以上原则,开始评估并执行 `$ARGUMENTS` 指定的任务。 主要改进点说明: 强制的“首要动作”:要求 AI 在接手任务后,第一步永远是运行 cat /etc/os-release 和查 $PREFIX,用客观命令返回的结果来决定后续策略,而不是靠猜。 明确 Termux 的特殊性:明确指出了 Termux 没有 systemd,路径不同,且默认非 root。这能极大地减少 AI 在手机/平板终端上犯低级错误(比如疯狂尝试 sudo apt install 或 systemctl start)。 区分 ARM 架构:针对 Armbian,提醒 AI 在拉取镜像(比如 Docker 镜像)或编译软件时,主动注意 aarch64/arm64 兼容性。 日志排错的差异化:特别强调了 Termux 环境下找日志的方式与常规 Linux 不同,避免 AI 卡在“找不到 journalctl 命令”的死循环里。
大模型标准计费解读
这类计费被称为“按量计费”(Pay-as-you-go),即按使用量付费,没有月租。为了让你直观理解,我们可以把 Token 类比成“字数”(通常 1M Tokens 约为 75 万个英文单词或 50 万个汉字)。 以下是四个维度的详细解读: 1. 基础计费:输入与补全 这是最核心的部分,每次对话都会产生这两项费用。 输入价格 ($0.80 / 1M Tokens): 指的是你发送给 AI 的指令、背景资料或之前的对话历史。 例子: 你发送了一个 1 万 Tokens 的长文档,费用就是 $0.008。 补全价格 ($4.00 / 1M Tokens): 指的是 AI 回复给你的内容。由于生成内容需要消耗更多算力,所以回复的价格是输入的 5 倍。 例子: AI 回复了 5000 个 Tokens,费用就是 $0.02。 2. 高级功能:提示词缓存 (Prompt Caching) 这是为了降低成本、提高速度推出的功能。如果你经常发送重复的大段背景资料(如代码库、法律条文),这个功能非常省钱。 缓存创建价格 ($1.00 / 1M Tokens): 当你第一次把一段长文本存入缓存时,价格会比普通输入贵 25%(从 $0.8 变为 $1.0)。 缓存读取价格 ($0.08 / 1M Tokens): 当你第二次及以后使用这段已缓存的内容时,价格会骤降。 划算在哪里? 读取缓存的价格仅为普通输入的 1/10。 3. 场景模拟计算 假设你正在开发一个 AI 助手,系统内置了 2 万 Tokens 的背景知识库。 ...
Claude Code Router (CCR)路由配置指南
你可以把 CCR 想象成一个**“智能包工头”**。当你在终端里使用 ccr code 敲代码时,官方的 Claude Code 程序会在后台发出各种不同类型的请求。CCR 会拦截这些请求,并根据你 Router 里的规则,自动把任务分配给最合适的模型。 具体来说,这些路由规则是这样在实际中发挥作用的: 1. default(默认路由) 如何触发: 当你在终端里正常提问,比如输入“帮我写一个测试函数”或“解释一下这段代码”时。 原理: 这是你最常感知的常规对话,CCR 会把你的直接指令发送给配置的默认主力模型(如你的 gpt-5.2-codex)。 2. background(后台路由) 如何触发: 全自动触发,你无需干预。 原理: Claude Code 在运行中,经常会在后台偷偷做一些“杂活”。比如:你刚打开项目时它会悄悄扫描目录结构、你需要修改长文件时它会先在后台总结一下文件大纲、或者帮你自动生成 Git 提交信息。这些任务不需要极高的智商,但需要速度快、成本低。CCR 识别到这些后台请求时,就会自动使用 background 指定的模型去悄悄处理。 3. think(深度思考路由) 如何触发: 通常是在你面临极其复杂的架构设计、难以排查的 Bug 时,通过特定的命令(比如在交互界面输入 /think 相关的指令,或者启动时带上特定参数)触发。 原理: 当系统判定当前任务需要极其严密的逻辑推理时,CCR 会把这个请求单独剥离出来,发送给专门擅长推理的模型(比如 DeepSeek-R1 或开启了 thinking 模式的 Claude 3.7)。 4. longContext(长上下文路由) 如何触发: 根据你的对话长度自动触发。 原理: 你的配置里有一个 longContextThreshold: 60000。当你们的对话越来越长,或者你让 AI 一次性读取了好几个巨大的代码文件,导致上下文的词汇量(Token)超过了 60,000 时,CCR 会立刻判定:“内容太多了,默认模型可能处理不了或者会丢失记忆!” 然后它会自动、无缝地切换到你指定的 longContext 模型来接管对话。 5. webSearch(联网搜索路由) 如何触发: 全自动。当你问的问题需要最新的互联网知识(比如“查一下最新的 React 官方文档关于某个 API 的用法”),Claude Code 决定调用联网搜索工具时。 原理: 这个搜索的动作会被路由到你指定的模型去执行。 "Router": { "default": "openrouter-channel,anthropic/claude-3.5-sonnet", // 默认日常敲代码的主力模型 "background": "official-anthropic,claude-3-5-haiku-20241022", // 后台轻量级任务(如总结、快速分析) "think": "openrouter-channel,deepseek/deepseek-r1", // 专门处理复杂思考 (thinking) 模式 "longContext": "my-custom-proxy,gemini-2.5-pro" // 遇到超长上下文(如大文件读取)时自动切换 } 总结一下: 在实际使用中,你的操作方式没有任何改变,依然是和 AI 正常聊天下指令。Router 配置的意义在于帮你省钱和提效——它把简单的杂活分给便宜快速的模型,把核心代码交给主力模型,遇到超大文件自动换能支持长文本的模型。
在 Termux 中使用 `pure-ftpd` 搭建FTP
如何在 Termux 中使用 pure-ftpd 搭建一个安全的 FTP 服务。 1. 安装 pure-ftpd 在 Termux 中使用 pkg install 命令安装 pure-ftpd。 pkg install pure-ftpd 2. 创建 FTP 用户并设置密码 使用 pure-pw 命令创建一个新的 FTP 用户。以下是命令的含义: pure-pw useradd tianya -u 1001 -g 1001 -d /sdcard/Download pure-pw useradd tianya:添加用户名为 tianya 的 FTP 用户。 -u 1001 -g 1001:指定此用户的 UID 和 GID。通常,Termux 中默认用户的 UID 和 GID 是 1001。 -d /sdcard/Download:设置该用户的主目录为 /sdcard/Download,即该用户登录 FTP 后只能访问这个目录。 执行后系统会提示输入密码。输入你希望为 djd1226 用户设置的 FTP 密码,并确认密码。 3. 生成 pure-ftpd 用户数据库 每次添加或更新用户后,都需要使用以下命令更新数据库: ...
在 Debian 服务器上部署 `frps`(服务端)
第一步:检查系统架构 首先,确认你 Debian 服务器的 CPU 架构,以便下载正确的版本: arch 如果显示 x86_64,下载 amd64 版本。 如果显示 aarch64,下载 arm64 版本。 第二步:下载并解压 frp 访问 frp GitHub Releases 获取最新版本。以下以 v0.54.0 版本为例: # 创建文件夹并进入 mkdir -p /root/frp && cd /root/frp # 下载压缩包 (请根据架构替换文件名) wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz # 解压 tar -zxvf frp_0.54.0_linux_amd64.tar.gz # 进入解压后的目录 cd frp_0.54.0_linux_amd64 第三步:配置 frps 在解压出的文件夹中,你会看到 frps(程序文件)和 frps.toml(配置文件)。 编辑配置文件: nano frps.toml 输入以下基础配置(请根据注释修改): bindPort = 7000 # 服务端监听端口,用于接收来自客户端的连接 # 鉴权配置(强烈建议设置,防止被他人非法使用) auth.method = "token" auth.token = "你的强密码" # 客户端连接时必须提供此密码 # 可选:仪表盘界面(可以通过网页查看穿透状态) webServer.addr = "0.0.0.0" # 修改为 0.0.0.0,允许外网访问 webServer.port = 7500 webServer.user = "admin" webServer.password = "你的后台管理密码" 按下 Ctrl + O 保存,Ctrl + X 退出。 ...
Debian 系统精簡
这两个目录是 Debian 系统中常见的大户,进一步清理可以重点针对它们。 1. /usr 目录清理建议 /usr 主要存放系统程序和共享资源,通常包含: /usr/share/doc:软件说明文档 /usr/share/man:手册页 /usr/share/locale:多语言本地化文件 /usr/share/fonts:字体文件 /usr/lib:库文件和程序文件 /usr/bin、/usr/sbin:可执行文件 清理重点 删除说明文档和手册页 rm -rf /usr/share/doc/* rm -rf /usr/share/man/* rm -rf /usr/share/info/* 删除不需要的语言文件 如果只需要简体中文(zh_CN)和英文(en),可以删除其他语言的本地化文件: find /usr/share/locale -mindepth 1 -maxdepth 1 ! -name "zh_CN" ! -name "en" -exec rm -rf {} + 字体清理 同之前脚本,保留简体中文和英文字体,删除其他字体。 检查大文件 你可以用如下命令列出 /usr 下大于 10MB 的文件,确认是否有可删文件: find /usr -type f -size +10M -exec ls -lh {} \; 2. /var 目录清理建议 /var 目录通常包含: /var/cache:缓存文件 /var/log:日志文件 /var/lib:应用程序数据 /var/tmp:临时文件 清理重点 清理 apt 缓存 ...