[{"content":"这是博主开源到github的另一个项目，此处贴的是使用文档。如果是跟我一样使用hugo建站并且苦于如何发布的小伙伴们，我强力推荐这个api，你会用上的！！\n✿✿✿来支持一波吧✿✿✿\n👇👇👇\ngrayfalcon666/hugo_api: Quickly publish posts for your Hugo blog!\npreview： 一个用 Go 编写的轻量级 API 服务，支持通过 表单提交（直接复制 Markdown）快速创建 Hugo 静态博客文章，自动生成 Front Matter 并触发 Hugo 构建，无需手动操作文件或执行命令。\n🌟 核心功能 发送文章与动态： /api/hugo/create-post /api/hugo/create-moment 外置config文件: 可自定义文章发布路径、密钥、api监听端口号 自动处理： 生成 Hugo 标准 Front Matter（标题、时间、标签、分类等） 自动触发 Hugo 构建，发布后立即生效 🚀 快速开始 1. 克隆仓库到本地 2. 配置 config.json 在项目根目录创建 config.json 文件，按实际环境填写配置：\n1{ 2 \u0026#34;api_key\u0026#34;: \u0026#34;your-strong-secret-key\u0026#34;, 3 \u0026#34;hugo_content_path\u0026#34;: \u0026#34;/home/user/blog/content/posts\u0026#34;, 4 \u0026#34;hugo_moment_path\u0026#34;: \u0026#34;/home/user/blog/content/moments\u0026#34;, 5 \u0026#34;hugo_project_path\u0026#34;: \u0026#34;/home/user/blog\u0026#34;, 6 \u0026#34;hugo_exec_path\u0026#34;: \u0026#34;/usr/local/bin/hugo\u0026#34;, 7 \u0026#34;listen_addr\u0026#34;: \u0026#34;:8080\u0026#34; 8} 3. 编译与启动 1# 编译（生成可执行文件） 2go build -o hugo-api hugo-api.go 3 4# 启动服务 5./hugo-api 后台运行 linux 写一个系统服务即可，以下为示例:\n1[Unit] 2Description=Hugo Blog Upload API 3After=network.target nginx.service 4 5[Service] 6User=grayfalcon 7WorkingDirectory=/home/grayfalcon/Hugo_Sites/hugo_api 8ExecStart=/home/grayfalcon/Hugo_Sites/hugo_api/hugo_api 9Restart=always 10RestartSec=5 11 12[Install] 13WantedBy=multi-user.target 4. 验证启动成功 若输出以下日志，说明服务正常运行：\n1✅ API服务启动成功 2📌 监听地址：:8080 3📌 /create-post 文章路径：/home/user/blog/content/posts 4📌 /create-moment 文章路径：/home/user/blog/content/moments 📡 API 使用文档 1. 路由 1：创建普通文章 /api/hugo/create-post 文章将保存到 config.json 配置的 hugo_content_path 目录。\n请求参数说明 参数名 类型 是否必填 说明 示例 title 字符串 ✅ 是 文章标题（支持中文 / 特殊字符） \u0026quot;Go语言入门：从Hello World到API\u0026quot; content 字符串 ✅ 是 文章正文（支持 Markdown，表单提交可直接复制，JSON 需转义 \\n） \u0026quot;# 前言\\n这是一篇测试文章\\n\\n## 正文\u0026quot; tags 字符串数组 ❌ 否 文章标签（JSON 传数组，表单传逗号分隔字符串） JSON: [\u0026quot;Go\u0026quot;,\u0026quot;Hugo\u0026quot;]；表单: \u0026quot;Go,Hugo\u0026quot; categories 字符串数组 ❌ 否 文章分类（规则同 tags） JSON: [\u0026quot;技术教程\u0026quot;]；表单: \u0026quot;技术教程\u0026quot; filename 字符串 ❌ 否 自定义文件名（无需带 .md，默认用「时间戳 + 标题」生成） \u0026quot;go-starter-tutorial\u0026quot; draft 布尔值 ❌ 否 是否为草稿（默认 false，表单传 \u0026quot;true\u0026quot;/\u0026quot;false\u0026quot;） false date 字符串 ❌ 否 自定义文章时间（格式：2006-01-02 15:04:05，默认当前北京时间） \u0026quot;2025-10-03 09:30:00\u0026quot; 请求示例 使用 curl 提交表单，content 字段可直接粘贴 Markdown 内容：\n1curl -X POST http://localhost:8080/api/hugo/create-post \\ 2 -H \u0026#34;X-API-Key: your-strong-secret-key-123\u0026#34; \\ 3 -F \u0026#34;title=Go语言入门：从Hello World到API\u0026#34; \\ 4 -F \u0026#34;content=# 1. 环境准备\\n需安装Go 1.20+\\n\\n# 2. Hello World代码\\n```go\\npackage main\\nimport \\\u0026#34;fmt\\\u0026#34;\\nfunc main() { fmt.Println(\\\u0026#34;Hello\\\u0026#34;) }\\n```\u0026#34; \\ 5 -F \u0026#34;tags=Go,编程,后端\u0026#34; \\ 6 -F \u0026#34;categories=技术教程\u0026#34; \\ 7 -F \u0026#34;draft=false\u0026#34; 2. 路由 2：创建动态 / 短内容 /api/hugo/create-moment 功能与 /create-post 完全一致，仅构建文件路径不同。\n🤝 贡献 欢迎提交 Issue 或 Pull Request 改进功能，例如：\n增加文章更新 / 删除接口 支持更多 Hugo 配置（如自定义 Front Matter 字段） 📄 许可证 MIT License允许自由使用、修改和分发，仅需保留原作者版权声明。\n","permalink":"https://tech.jamaisvu.cn/posts/hugo-api%E5%BF%AB%E9%80%9F%E5%8F%91%E5%B8%83%E4%BD%A0%E7%9A%84hugo%E6%96%87%E7%AB%A0/","summary":"\u003cp\u003e这是博主开源到github的另一个项目，此处贴的是使用文档。如果是跟我一样使用hugo建站并且苦于如何发布的小伙伴们，我强力推荐这个api，你会用上的！！\u003c/p\u003e\n\u003cp\u003e✿✿✿来支持一波吧✿✿✿\u003c/p\u003e\n\u003cp\u003e👇👇👇\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/grayfalcon666/hugo_api\"\u003egrayfalcon666/hugo_api: Quickly publish posts for your Hugo blog!\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003epreview\u003c/strong\u003e：\n\u003cimg alt=\"hugo-api-preview.gif|750\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO2/refs/heads/main//hugo-api-preview.gif\"\u003e\u003c/p\u003e\n\u003cp\u003e一个用 Go 编写的轻量级 API 服务，支持通过 \u003cstrong\u003e表单提交\u003c/strong\u003e（直接复制 Markdown）快速创建 Hugo 静态博客文章，自动生成 Front Matter 并触发 Hugo 构建，无需手动操作文件或执行命令。\u003c/p\u003e\n\u003ch2 id=\"-核心功能\"\u003e🌟 核心功能\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e发送文章与动态\u003c/strong\u003e：\n\u003cul\u003e\n\u003cli\u003e/api/hugo/create-post\u003c/li\u003e\n\u003cli\u003e/api/hugo/create-moment\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e外置config文件\u003c/strong\u003e: 可自定义文章发布路径、密钥、api监听端口号\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e自动处理\u003c/strong\u003e：\n\u003cul\u003e\n\u003cli\u003e生成 Hugo 标准 Front Matter（标题、时间、标签、分类等）\u003c/li\u003e\n\u003cli\u003e自动触发 Hugo 构建，发布后立即生效\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"-快速开始\"\u003e🚀 快速开始\u003c/h2\u003e\n\u003ch3 id=\"1-克隆仓库到本地\"\u003e1. 克隆仓库到本地\u003c/h3\u003e\n\u003ch3 id=\"2-配置configjson\"\u003e2. 配置 \u003ccode\u003econfig.json\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003e在项目根目录创建 \u003ccode\u003econfig.json\u003c/code\u003e 文件，按实际环境填写配置：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\u003c/span\u003e\u003cspan\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\u003c/span\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003e\u0026#34;api_key\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;your-strong-secret-key\u0026#34;\u003c/span\u003e,  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\u003c/span\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003e\u0026#34;hugo_content_path\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/home/user/blog/content/posts\u0026#34;\u003c/span\u003e, \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\u003c/span\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003e\u0026#34;hugo_moment_path\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/home/user/blog/content/moments\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e5\u003c/span\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003e\u0026#34;hugo_project_path\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/home/user/blog\u0026#34;\u003c/span\u003e,  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e6\u003c/span\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003e\u0026#34;hugo_exec_path\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/usr/local/bin/hugo\u0026#34;\u003c/span\u003e,  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e7\u003c/span\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003e\u0026#34;listen_addr\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;:8080\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e8\u003c/span\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"3-编译与启动\"\u003e3. 编译与启动\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\u003c/span\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 编译（生成可执行文件）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\u003c/span\u003e\u003cspan\u003ego build -o hugo-api hugo-api.go\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\u003c/span\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 启动服务\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e5\u003c/span\u003e\u003cspan\u003e./hugo-api\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"后台运行\"\u003e后台运行\u003c/h4\u003e\n\u003cp\u003elinux 写一个系统服务即可，以下为示例:\u003c/p\u003e","title":"Hugo API：快速发布你的hugo文章!"},{"content":"环境介绍 OS: Ubuntu 24.04.2 LTS GPU: NVIDIA GeForce GTX 1050 Ti immich: docker compose部署 date: 2025-10-05 network: need proxy 模型下载 下载地址： immich-app/XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k at main\n下载须知：\n给下载目标路径的目录预留充足磁盘空间，\u0026gt;20GB。 需安装git-lfs（管理git大文件的拓展） 1sudo apt-get install git-lfs 2 3df -h ~/path # 查看仓库所在分区的空间 4 5#若目录下磁盘空间不足，迁移到别的目录，以下是迁移指令 6rsync -av 原路径 目标路径 7# `-a`：归档模式，保留文件权限、时间戳等所有属性 8# `-v`：显示复制进度 9 10rm -rf ~/path 11 12#断点续连 13git restore --source=HEAD :/ 把下载来的模型放在clip文件夹以下的位置：\n1path-to-your-dir 2└── modelcache 3 └── clip 4 └── XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k 硬件加速 ps：硬件加速对于显存要求较高，如果你在尝试以下操作后，机器学习容器日志报错显存不足，建议使用更轻量的模型，或者换回cpu。\n更换独显 1#查询电脑所有显卡信息 2lspci | grep -i vga 3 4#查询目前使用显卡 5prime-select query 6 7#更换到NVIDIA独立显卡 8sudo prime-select nvidia 9 10#之后加速完毕，用此命令回退到按需选择显卡 11sudo prime-select on-demand 更改后需重启\n显卡驱动 显卡换好了，检查一下驱动：\n先输入以下命令，看一下显卡驱动是否正常\n1nvidia-smi 若出现NVIDIA-SMI has failed的报错，先打驱动：\n1sudo ubuntu-drivers autoinstall 重启后再次检查驱动是否正常。\n容器调用 想要docker容器调用GPU，我们还需要按以下步骤操作：\n1# 添加密钥和仓库 2curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg 3 4curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \\ 5 sed \u0026#39;s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g\u0026#39; | \\ 6 sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list 7 8#安装nvidia-container-toolkit 9sudo apt-get update 10sudo apt-get install -y nvidia-container-toolkit 运行测试容器，如果输出与宿主机一样的gpu信息，说明成功！此时我们的容器已经可以成功启用硬件加速。\n1docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu24.04 nvidia-smi 配置immich Immich 支持多种 GPU 加速类型，需根据硬件选择：\nNVIDIA 显卡：选择 cuda AMD 显卡：选择 rocm Intel 显卡 / NPU：选择 openvino（普通 Intel 设备）或 openvino-wsl（WSL2 环境的 Intel 设备） ARM 架构设备（如瑞芯微 RK3588 等）：选择 rknn ARM 设备（带 NN 加速）：选择 armnn 配置docker-compose 启用硬件加速的情况： 在docker-compose.yml同级目录输入以下指令，下载hwaccel.ml.yml：\n1wget https://github.com/immich-app/immich/blob/main/docker/hwaccel.ml.yml docker-compose.yml：\n1 #只展现机器学习部分 2 immich-machine-learning: 3 container_name: immich_machine_learning 4 # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. 5 # Example tag: ${IMMICH_VERSION:-release}-cuda 6 image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-cuda 7 #extends: 8 #file: hwaccel.ml.yml 9 #service: cuda 10 11 volumes: 12\t#注意这里要换成你自己存放模型的目录 13 - \u0026#39;./modelcache:/cache\u0026#39; 14 env_file: 15 - .env 16 restart: always 17 networks: 18 - my-network 19 healthcheck: 20 disable: false 21 deploy: 22 resources: 23 reservations: 24 devices: 25 - driver: nvidia 26 count: 1 27 capabilities: 28 - gpu 不启用的情况： docker-compose.yml：\n1 immich-machine-learning: 2 container_name: immich_machine_learning 3 image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} 4 volumes: 5 - \u0026#39;./modelcache:/cache\u0026#39; 6 env_file: 7 - .env 8 restart: always 9 networks: 10 - my-network 11 healthcheck: 12 disable: false 13 deploy: 14 resources: 15 limits: 16 cpus: \u0026#39;3\u0026#39; # 分配3核CPU 17 memory: 4G # 分配6GB内存（避免CPU加载模型时内存不足） 启用智能搜索 输入你的模型名 然后进行任务，点击全部。 耐心等待机器学习完毕\u0026hellip;\u0026hellip;\n如果你开启了GPU加速，去 immich_machine_learning 容器的日记里看一下，是否出现跟以下类似的输出，Setting execution providers to ['CUDAExecutionProvider', 'CPUExecutionProvider'] 说明服务正在优先使用GPU，这就说明我们的配置正确无误！ 最后，搜索你想要的关键字，哒哒，成功啦！ 配置人脸识别也是一样的步骤，由于博主服务器的显存捉襟见肘，这里就不演示啦。😭 欢迎评论区交流~~~\n参考文章 鸣谢：\nHardware-Accelerated Machine Learning | Immich\nUbuntu 24.04 安装 NVIDIA Container Toolkit 全指南：让Docker拥抱GPU-CSDN博客\nimmich机器学习基础和配置使用-腾讯云开发者社区-腾讯云\n","permalink":"https://tech.jamaisvu.cn/posts/%E4%B8%BAimmich%E9%85%8D%E7%BD%AE%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/","summary":"\u003ch2 id=\"环境介绍\"\u003e环境介绍\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOS: Ubuntu 24.04.2 LTS\u003c/li\u003e\n\u003cli\u003eGPU: NVIDIA GeForce GTX 1050 Ti\u003c/li\u003e\n\u003cli\u003eimmich: docker compose部署\u003c/li\u003e\n\u003cli\u003edate: 2025-10-05\u003c/li\u003e\n\u003cli\u003enetwork: need proxy\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"模型下载\"\u003e模型下载\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e下载地址\u003c/strong\u003e：\n\u003ca href=\"https://huggingface.co/immich-app/XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k/tree/main\"\u003eimmich-app/XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k at main\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e下载须知\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e给下载目标路径的目录预留充足磁盘空间，\u0026gt;20GB。\u003c/li\u003e\n\u003cli\u003e需安装git-lfs（管理git大文件的拓展）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\u003c/span\u003e\u003cspan\u003esudo apt-get install git-lfs\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\u003c/span\u003e\u003cspan\u003edf -h ~/path  \u003cspan style=\"color:#75715e\"\u003e# 查看仓库所在分区的空间\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\u003c/span\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#若目录下磁盘空间不足，迁移到别的目录，以下是迁移指令\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\u003c/span\u003e\u003cspan\u003ersync -av 原路径 目标路径\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\u003c/span\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# `-a`：归档模式，保留文件权限、时间戳等所有属性\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\u003c/span\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# `-v`：显示复制进度\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\u003c/span\u003e\u003cspan\u003erm -rf ~/path\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\u003c/span\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#断点续连\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\u003c/span\u003e\u003cspan\u003egit restore --source\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eHEAD :/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e把下载来的模型放在clip文件夹以下的位置：\u003c/p\u003e","title":"为immich配置机器学习与硬件加速"},{"content":"从简开始 相信不少人刚开始折腾内核的时候，都是一脸茫然的，要配置的内容太多，对新手不友好。所以我们从最简单的方法做起，力求先把内核跑起来，然后再慢慢拓展。\n搞代理的前提是你需要去各大机场订阅节点，或者你自己拥有节点。通常机场会给你提供一个订阅链接🔗，复制下来。\n下载内核 先去mihomo仓库，根据你的电脑下一个适合的内核版本（去参考官方文档），我下的是这个版本: 获取配置 在任意位置建一个文件夹，就叫mihomo吧。 在该位置打开cmd，输入\n1curl -k -H \u0026#34;User-Agent: Clash\u0026#34; -o config.yaml \u0026#34;你的订阅链接\u0026#34; 添加-k参数跳过证书验证（仅临时测试使用） -H \u0026quot;User-Agent: Clash\u0026quot; 的作用是将请求头中的用户代理标识为 Clash，部分机场可能会根据此标识返回适配的配置格式。 如果机场支持连接转换成clash格式的话，此时你的mihomo文件夹下会出现一个新的config.yaml文件，打开看一下，这个就是机场给你配好的基础配置。 运行内核 是不是很简单?这个配置已经足够内核正常运行了，我们接着把它跑起来。\n打开powershell，输入\n1.\\mihomo-windows-amd64.exe -d .\\ -f config.yaml -d .\\ 用于指定程序的工作目录 -f config.yaml 用于指定配置文件路径 第一次运行需要拉取geoip文件，可能需要给powershell设置代理才能拉取成功（实在不行暂时用客户端吧，开个tun模式）\n在性能管理器里检查一下，发现内核正在运行，说明内核启动成功： 开启代理 启动了内核之后的最后一步：我们要到系统设置中手动开启系统代理： 至此，我们学会了如何使用裸核mihomo开启代理，不管那些有的没的，至少我们已经可以成功运行啦。\n要想在windows的终端使用代理，就在当前会话输入 set http_proxy=http://127.0.0.1:7890，如图所示： 我们已经与google正常连通。\n更进一步 现在我们用的完全是机场给我们的配置，当然会有很多细节处没有匹配我们的个人需求，所以我们需要自己去改进一下这个配置，当然如果你觉得这样已经够用，那么不必接着往下看。\n自己写规则最主要的目的显然是为了能够让一些自己的服务器或者一些特殊地址能够直连\\走代理，其实整个代理配置说白了就是 规定了谁要走直连，谁要走代理，方便我们使用代理时可以实现全自动化策略调控。\n要想自己写配置，我们首先要搞懂mihomo的配置分为哪些部分，每一部分是干什么的。让我带大家初步了解一下mihomo的配置中的几个主要模块：\n主要模块 proxy-providers 作用 定义 从哪里获取代理节点，支持在线订阅、本地文件等方式，是代理节点的 “源头”。\n常用参数 参数 含义 url 代理订阅链接 path 订阅内容的本地保存路径 type 订阅类型为 http（常见类型还有 file 本地文件、clash 标准格式等）。 interval 订阅更新间隔，通常是设定86400 秒 = 1 天，即每天自动更新一次代理节点。 全局配置 作用 定义 mihomo 的基础运行参数、网络入口（端口）、全局模式等，是软件启动的 基础设置。\n常用参数 类别 关键参数 \u0026amp; 含义 端口配置 - port: 7891：HTTP 代理端口；\n- socks-port: 7892：SOCKS5 代理端口；\n- mixed-port: 7890：混合端口 网络开关 - allow-lan: true：允许局域网设备（如手机、平板）连接该代理； 运行模式 - mode: rule：规则模式（核心模式，按 rules 分流，优先推荐）； 界面与控制 - external-controller: 127.0.0.1:9090：外部控制接口（用于 Web 管理或第三方客户端连接）；\n- secret: 控制接口的密码；\n- external-ui: zashboard：自定义 Web 界面（用 external-ui-url 拉取界面文件）。 地理数据 - geodata-mode: true：启用地理数据（用于 GEOSITE/GEOIP 规则）；\n- geo-auto-update: true：自动更新地理数据库（geoip/geosite 等）；\n- geox-url：指定地理数据库的下载地址（用 MetaCubeX 的精简库，体积小）。 DNS 作用 解决 DNS 污染问题，确保域名能正确解析到真实 IP，同时按规则分流 DNS 请求（比如国内域名用国内 DNS，国外域名用代理 DNS）。\n常用参数 参数 含义 enable: true 启用 mihomo 自带 DNS（必须开，否则可能 DNS 污染）。 listen: 0.0.0.0:1053 DNS 监听地址（局域网设备可将 DNS 设为该地址，共享无污染解析）。 enhanced-mode: fake-ip 增强模式：fake-ip（核心！用 “伪装 IP” 替代真实 IP，避免解析延迟，同时防 DNS 泄漏）。 nameserver 主要 DNS 服务器（用支持 HTTP/3 的国内 DNS，如阿里 120.53.53.53，速度快）。 proxy-server-nameserver 走代理的 DNS（解析国外域名时用，避免污染，比如访问 google.com 时用这个）。 proxy-groups（核心模块） 作用 将代理节点按 功能 或 地区 分组，方便管理和使用（比如 “AI 流量走美国组”“奈飞走新加坡组”），是规则分流的 “目标载体”\n如何工作 比如我自己的代理组分为两层，第一层是功能组，第二层是地区组，我举个好理解的例子：\n我现在要访问ChatGPT，我的rules 里有一条规则： - GEOSITE,category-ai-!cn,AIGC 意思是 “所有非国内的 AI 类流量（比如 ChatGPT），都交给 AIGC 这个功能组处理”—— 这一步确定了 “用哪个上层组”。\n然后AIGC里面有很多的地区组，我选择了美国组。\n接着，由于United States 组是 fallback 模式（自动故障转移），它会：\n从 proxy-providers 拉取的所有节点中，用 filter: *FilterUS 筛选出 “美国节点”（比如有 3 个美国节点：US-1、US-2、US-3）； 按顺序自动检测节点可用性（先测 US-1，再测 US-2\u0026hellip;）； 优先使用「第一个可用的节点」（比如 US-1 能连，就用 US-1；如果 US-1 失效，自动切到 US-2）； 全程不需要手动干预，自动保障连接稳定。 rules（核心模块） 作用 按「优先级」定义 “什么样的流量走哪个代理 / 直连 / 拒绝”。规则优先级：上 → 下，先匹配的先生效。\n各种规则 1. 拒绝规则 - RULE-SET,awavenue,REJECT：匹配 awavenue 广告规则的流量，直接拒绝（拦截广告）。 2. 直连规则 私有地址 / 公共 Tracker：GEOSITE,private/ category-public-tracker,DIRECT（本地局域网、BT Tracker 直连）； 国内服务：GEOSITE,apple@cn/ icloud/ microsoft@cn,DIRECT（苹果 / 微软国内服务直连）； 国内域名：DOMAIN-SUFFIX,cn,DIRECT（所有 .cn 域名直连）； 国内 IP：RULE-SET,domestic_ip/ china_ip/ china_ip_ipv6,DIRECT（国内 IP 段直连）。 3. 特定服务规则 AI 服务：GEOSITE,category-ai-!cn,AIGC（非国内 AI 流量，走 AIGC 组）； 流媒体：GEOSITE,spotify,Spotify（Spotify 走 Spotify 组）、GEOSITE,netflix/ disney,Netflix（奈飞 / 迪士尼走 Netflix 组）； 即时通讯：GEOSITE,telegram,Proxy（Telegram 走 Proxy 组）； OneDrive 特例：DOMAIN-SUFFIX,onedrive.live.com,Proxy（OneDrive 国际版走代理，国内版直连）。 4. 通用代理规则 CDN 流量：RULE-SET,cdn_domainset/ cdn_non_ip,Proxy（CDN 流量走 Proxy 组）； 国外非 IP 流量：RULE-SET,global_non_ip,Proxy（国外非 IP 规则流量走 Proxy 组）。 5. 兜底规则 - MATCH,Proxy：所有没被上面规则匹配的流量，默认走 Proxy 组（确保国外流量都能走代理）。 重写配置 有了以上的知识储备，我们就可以自己写一个新的配置文件了，这里贴出我的配置：\n1proxy-providers: 2 JingLingXueYuan: 3 # 敏感信息：原链接中的 Token 已替换为占位符，请替换为自己的有效订阅 Token 4 url: \u0026#39;https://pd9jg1kf94.laoyao.ltd/api/v1/client/subscribe?token=[你的订阅Token]\u0026#39; 5 path: \u0026#39;./proxy-providers/JingLingXueYuan.yaml\u0026#39; 6 type: http 7 interval: 86400 8 health-check: 9 enable: true 10 lazy: true 11 url: http://latency-test.skk.moe/endpoint 12 interval: 60 13 14port: 7891 15socks-port: 7892 16mixed-port: 7890 17unified-delay: true 18tcp-concurrent: true 19allow-lan: true 20mode: rule 21log-level: info 22ipv6: true 23udp: true 24profile: 25 store-selected: true 26 store-fake-ip: true 27find-process-mode: strict 28global-client-fingerprint: chrome 29geodata-mode: true 30geodata-loader: standard 31geo-auto-update: true 32geo-update-interval: 24 33geox-url: 34 geoip: https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat 35 geosite: https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat 36 mmdb: https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb 37 asn: https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb 38external-controller: 127.0.0.1:9090 39# 敏感信息：原固定密钥已替换为占位符，请设置为自定义的复杂密钥（建议包含字母、数字、符号） 40secret: [自定义安全密钥] 41external-ui: ui 42external-ui-name: zashboard 43external-ui-url: https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip 44sniffer: 45 enable: true 46 force-dns-mapping: true 47 parse-pure-ip: true 48 override-destination: true 49 sniff: 50 HTTP: 51 ports: 52 - 80 53 - 8080-8880 54 override-destination: true 55 TLS: 56 ports: 57 - 443 58 - 8443 59 QUIC: 60 ports: 61 - 443 62 - 8443 63 force-domain: 64 - +.v2ex.com 65 skip-domain: 66 - Mijia Cloud 67 - +.push.apple.com 68 skip-src-address: 69 - 192.168.1.1/24 70 skip-dst-address: 71 - 91.105.192.0/23 72 - 91.108.4.0/22 73 - 91.108.8.0/21 74 - 91.108.16.0/21 75 - 91.108.56.0/22 76 - 95.161.64.0/20 77 - 149.154.160.0/20 78 - 185.76.151.0/24 79 - 2001:67c:4e8::/48 80 - 2001:b28:f23c::/47 81 - 2001:b28:f23f::/48 82 - 2a0a:f280:203::/48 83tun: 84 enable: false 85 stack: mixed 86 device: utun0 87 dns-hijack: 88 - any:53 89 - tcp://any:53 90 auto-route: true 91 auto-detect-interface: true 92 strict-route: true 93dns: 94 enable: true 95 listen: 0.0.0.0:1053 96 ipv6: true 97 prefer-h3: true 98 use-hosts: true 99 use-system-hosts: true 100 respect-rules: true 101 enhanced-mode: fake-ip 102 fake-ip-range: 28.0.0.1/8 103 fake-ip-filter: 104 - \u0026#39;rule-set:fake_ip_filter\u0026#39; 105 default-nameserver: 106 - 223.5.5.5 107 - 119.29.29.29 108 nameserver: 109 - https://120.53.53.53/dns-query#h3=true 110 - https://223.6.6.6/dns-query#h3=true 111 - https://223.5.5.5/dns-query#h3=true 112 proxy-server-nameserver: 113 - https://120.53.53.53/dns-query 114 - https://223.5.5.5/dns-query 115 116FilterHK: \u0026amp;FilterHK \u0026#39;(?=.*(🇭🇰|港|HK|(?i)Hong))^((?!(日|坡|狮|美)).)*$\u0026#39; 117FilterJP: \u0026amp;FilterJP \u0026#39;(?=.*(🇯🇵|(?\u0026lt;!尼)日|JP|(?i)Japan))^((?!(港|坡|狮|美)).)*$\u0026#39; 118FilterSG: \u0026amp;FilterSG \u0026#39;(?=.*(🇸🇬|坡|狮|獅|SG|(?i)Singapore))^((?!(港|日|美)).)*$\u0026#39; 119FilterUS: \u0026amp;FilterUS \u0026#39;(?=.*(🇺🇸|美|US|(?i)States|American))^((?!(港|日|坡|狮)).)*$\u0026#39; 120FilterOther: \u0026amp;FilterOther \u0026#39;^((?!(🇭🇰|🇸🇬|🇺🇸|🇯🇵|港|美|日|坡|狮|广告|剩余|官网|到期|流量|HK|US|JP|SG|Hong|Singapore|Japan|United)).)*$\u0026#39; 121 122Select: \u0026amp;select 123 type: select 124 disable-udp: false 125 hidden: false 126UrlTest: \u0026amp;urltest 127 type: url-test 128 interval: 6 129 tolerance: 20 130 lazy: true 131 url: http://latency-test.skk.moe/endpoint 132 disable-udp: false 133 timeout: 2000 134 max-failed-times: 3 135 hidden: false 136FallBack: \u0026amp;fallback 137 type: fallback 138 interval: 6 139 lazy: true 140 url: http://latency-test.skk.moe/endpoint 141 disable-udp: false 142 timeout: 2000 143 max-failed-times: 3 144 hidden: false 145LoadBalance: 146 type: load-balance 147 interval: 6 148 lazy: true 149 url: http://latency-test.skk.moe/endpoint 150 disable-udp: false 151 strategy: consistent-hashing 152 timeout: 2000 153 max-failed-times: 3 154 hidden: false 155 156Classical: \u0026amp;classical 157 type: http 158 behavior: classical 159 interval: 86400 160Domain: \u0026amp;domain 161 type: http 162 behavior: domain 163 interval: 86400 164IP: \u0026amp;ip 165 type: http 166 behavior: ipcidr 167 interval: 86400 168 169proxy-groups: 170 - name: Proxy 171 \u0026lt;\u0026lt;: *select 172 icon: https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Proxy.png 173 proxies: 174 - Hong Kong 175 - Japan 176 - Singapore 177 - United States 178 - Others 179 - name: AIGC 180 \u0026lt;\u0026lt;: *select 181 icon: https://raw.githubusercontent.com/Orz-3/mini/master/Color/OpenAI.png 182 proxies: 183 - United States 184 - Hong Kong 185 - Japan 186 - Singapore 187 - Others 188 - name: Netflix 189 \u0026lt;\u0026lt;: *select 190 icon: https://raw.githubusercontent.com/Orz-3/mini/master/Color/Netflix.png 191 proxies: 192 - Singapore 193 - Hong Kong 194 - Japan 195 - United States 196 - Others 197 - name: Spotify 198 \u0026lt;\u0026lt;: *select 199 icon: https://raw.githubusercontent.com/Orz-3/mini/master/Color/Spotify.png 200 proxies: 201 - DIRECT 202 - Hong Kong 203 - Japan 204 - Singapore 205 - United States 206 - Others 207 - name: Hong Kong 208 include-all: true 209 \u0026lt;\u0026lt;: *fallback 210 filter: *FilterHK 211 icon: https://raw.githubusercontent.com/Orz-3/mini/master/Color/HK.png 212 - name: Japan 213 include-all: true 214 \u0026lt;\u0026lt;: *fallback 215 filter: *FilterJP 216 icon: https://raw.githubusercontent.com/Orz-3/mini/master/Color/JP.png 217 - name: Singapore 218 include-all: true 219 \u0026lt;\u0026lt;: *fallback 220 filter: *FilterSG 221 icon: https://raw.githubusercontent.com/Orz-3/mini/master/Color/SG.png 222 - name: United States 223 include-all: true 224 \u0026lt;\u0026lt;: *fallback 225 filter: *FilterUS 226 icon: https://raw.githubusercontent.com/Orz-3/mini/master/Color/US.png 227 - name: Others 228 include-all: true 229 \u0026lt;\u0026lt;: *select 230 filter: *FilterOther 231 icon: https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/World_Map.png 232 233rule-providers: 234 awavenue: 235 \u0026lt;\u0026lt;: *domain 236 format: yaml 237 path: ./rule-providers/awavenue.yaml 238 url: https://raw.githubusercontent.com/TG-Twilight/AWAvenue-Ads-Rule/main/Filters/AWAvenue-Ads-Rule-Clash.yaml 239 fake_ip_filter: 240 \u0026lt;\u0026lt;: *domain 241 format: text 242 path: ./rule-providers/fake_ip_filter.list 243 url: https://cdn.jsdelivr.net/gh/juewuy/ShellCrash@dev/public/fake_ip_filter.list 244 applications: 245 \u0026lt;\u0026lt;: *classical 246 format: text 247 path: ./rule-providers/direct.txt 248 url: https://ruleset.skk.moe/Clash/non_ip/direct.txt 249 global_non_ip: 250 \u0026lt;\u0026lt;: *classical 251 format: text 252 path: ./rule-providers/global_non_ip.txt 253 url: https://ruleset.skk.moe/Clash/non_ip/global.txt 254 cdn_domainset: 255 \u0026lt;\u0026lt;: *domain 256 format: text 257 path: ./rule-providers/cdn_domainset.txt 258 url: https://ruleset.skk.moe/Clash/domainset/cdn.txt 259 cdn_non_ip: 260 \u0026lt;\u0026lt;: *classical 261 format: text 262 path: ./rule-providers/cdn_non_ip.txt 263 url: https://ruleset.skk.moe/Clash/non_ip/cdn.txt 264 domestic_non_ip: 265 \u0026lt;\u0026lt;: *classical 266 format: text 267 path: ./rule-providers/domestic_non_ip.txt 268 url: https://ruleset.skk.moe/Clash/non_ip/domestic.txt 269 domestic_ip: 270 \u0026lt;\u0026lt;: *classical 271 format: text 272 path: ./rule-providers/domestic_ip.txt 273 url: https://ruleset.skk.moe/Clash/ip/domestic.txt 274 china_ip: 275 \u0026lt;\u0026lt;: *ip 276 format: text 277 path: ./rule-providers/china_ip.txt 278 url: https://ruleset.skk.moe/Clash/ip/china_ip.txt 279 china_ip_ipv6: 280 \u0026lt;\u0026lt;: *ip 281 format: text 282 path: ./rule-providers/china_ip_ipv6.txt 283 url: https://ruleset.skk.moe/Clash/ip/china_ip_ipv6.txt 284 285rules: 286 - RULE-SET,awavenue,REJECT 287 - GEOSITE,private,DIRECT 288 - GEOSITE,category-public-tracker,DIRECT 289 - GEOSITE,category-games@cn,DIRECT 290 - GEOSITE,apple@cn,DIRECT 291 - GEOSITE,icloud,DIRECT 292 - GEOSITE,microsoft@cn,DIRECT 293 - DOMAIN-SUFFIX,onedrive.live.com,Proxy 294 - GEOSITE,onedrive,DIRECT 295 - GEOSITE,microsoft,Proxy 296 - GEOSITE,telegram,Proxy 297 - GEOSITE,category-ai-!cn,AIGC 298 - GEOSITE,spotify,Spotify 299 - GEOSITE,netflix,Netflix 300 - GEOSITE,disney,Netflix 301 - RULE-SET,cdn_domainset,Proxy 302 - RULE-SET,cdn_non_ip,Proxy 303 - RULE-SET,global_non_ip,Proxy 304 - RULE-SET,applications,DIRECT 305 - RULE-SET,domestic_non_ip,DIRECT 306 - DOMAIN-SUFFIX,cn,DIRECT 307 - GEOIP,telegram,Proxy,no-resolve 308 - GEOIP,netflix,Netflix,no-resolve 309 - GEOIP,private,DIRECT,no-resolve 310 - RULE-SET,domestic_ip,DIRECT,no-resolve 311 - RULE-SET,china_ip,DIRECT,no-resolve 312 - RULE-SET,china_ip_ipv6,DIRECT,no-resolve 313 - MATCH,Proxy 参考：Windows 下 Mihomo 裸核使用分享 - 开发调优 - LINUX DO\n手搓脚本 有了一个自定义的配置文件，接下来只要运行内核，开启代理即可，你可以使用我们上面讲到的方法，也可以选择折腾一点，自己手搓脚本。至少需要写以下几个满足基本需求的脚本：\n启动内核 启动代理 切换tun\\系统代理模式 关闭代理 关闭内核 我自己改写了一套迁移性比较好的脚本（windows上使用ps1后缀的脚本），可供参考： 我的脚本仓库 （暂时还未开放，可能过几天）。\n写好脚本后，给文件添加快捷图标，右击图标选择属性，在 目标 前添加C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -ExecutionPolicy Bypass -NoExit -File 如果你希望弹出自动关闭，就去掉 -NoExit 。 然后点击 高级 勾选以管理员运行。 小结 此配置文件内置了zashboard web管理面板，在浏览器输入127.0.0.1:9090/ui即可查看面板。可以比较方便地手动切换代理组与节点。\n如果你希望开机自启，就给内核添加一个计划程序即可。\n之后想要改写规则的时候，直接在config.yaml上续写就好了，非常方便。\n","permalink":"https://tech.jamaisvu.cn/posts/20251003170845-%E5%9C%A8windows%E4%B8%8A%E4%BD%BF%E7%94%A8mihomo%E8%A3%B8%E6%A0%B8/","summary":"\u003ch1 id=\"从简开始\"\u003e从简开始\u003c/h1\u003e\n\u003cp\u003e相信不少人刚开始折腾内核的时候，都是一脸茫然的，要配置的内容太多，对新手不友好。所以我们从最简单的方法做起，力求先把内核跑起来，然后再慢慢拓展。\u003c/p\u003e\n\u003cp\u003e搞代理的前提是你需要去各大机场订阅节点，或者你自己拥有节点。通常机场会给你提供一个订阅链接🔗，复制下来。\u003c/p\u003e\n\u003ch2 id=\"下载内核\"\u003e下载内核\u003c/h2\u003e\n\u003cp\u003e先去\u003ca href=\"https://github.com/MetaCubeX/mihomo/releases\"\u003emihomo仓库\u003c/a\u003e，根据你的电脑下一个适合的内核版本（去参考官方文档），我下的是这个版本:\n\u003cimg alt=\"图一.jpg\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/img/1759472020924.jpg\"\u003e\u003c/p\u003e\n\u003ch2 id=\"获取配置\"\u003e获取配置\u003c/h2\u003e\n\u003cp\u003e在任意位置建一个文件夹，就叫mihomo吧。\n在该位置打开cmd，输入\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-powershell\" data-lang=\"powershell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\u003c/span\u003e\u003cspan\u003ecurl -k -H \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;User-Agent: Clash\u0026#34;\u003c/span\u003e -o config.yaml \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;你的订阅链接\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e添加\u003ccode\u003e-k\u003c/code\u003e参数跳过证书验证（仅临时测试使用）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-H \u0026quot;User-Agent: Clash\u0026quot;\u003c/code\u003e 的作用是将请求头中的用户代理标识为 \u003ccode\u003eClash\u003c/code\u003e，部分机场可能会根据此标识返回适配的配置格式。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e如果机场支持连接转换成clash格式的话，此时你的mihomo文件夹下会出现一个新的config.yaml文件，打开看一下，这个就是机场给你配好的基础配置。\n\u003cimg alt=\"图二.png|294\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO2/refs/heads/main//20251003151529612.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"运行内核\"\u003e运行内核\u003c/h2\u003e\n\u003cp\u003e是不是很简单?这个配置已经足够内核正常运行了，我们接着把它跑起来。\u003c/p\u003e\n\u003cp\u003e打开powershell，输入\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-powershell\" data-lang=\"powershell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\u003c/span\u003e\u003cspan\u003e.\\mihomo-windows-amd64.exe -d .\\ \u003cspan style=\"color:#f92672\"\u003e-f\u003c/span\u003e config.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e-d .\\ 用于指定程序的\u003cstrong\u003e工作目录\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e-f config.yaml 用于指定\u003cstrong\u003e配置文件路径\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e第一次运行需要拉取geoip文件，可能需要给powershell设置代理才能拉取成功（实在不行暂时用客户端吧，开个tun模式）\u003c/p\u003e\n\u003cp\u003e在性能管理器里检查一下，发现内核正在运行，说明内核启动成功：\n\u003cimg alt=\"图三|275\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO2/refs/heads/main//20251003153147051.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"开启代理\"\u003e开启代理\u003c/h2\u003e\n\u003cp\u003e启动了内核之后的最后一步：我们要到系统设置中手动开启系统代理：\n\u003cimg alt=\"image.png|325\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO2/refs/heads/main//20251003153418415.png\"\u003e\u003c/p\u003e\n\u003cp\u003e至此，我们学会了如何使用裸核mihomo开启代理，不管那些有的没的，至少我们已经可以成功运行啦。\u003c/p\u003e\n\u003cp\u003e要想在windows的终端使用代理，就在当前会话输入\n\u003ccode\u003eset http_proxy=http://127.0.0.1:7890\u003c/code\u003e，如图所示：\n\u003cimg alt=\"image.png\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO2/refs/heads/main//20251003153926794.png\"\u003e\n我们已经与google正常连通。\u003c/p\u003e\n\u003ch1 id=\"更进一步\"\u003e更进一步\u003c/h1\u003e\n\u003cp\u003e现在我们用的完全是机场给我们的配置，当然会有很多细节处没有匹配我们的个人需求，所以我们需要自己去改进一下这个配置，当然如果你觉得这样已经够用，那么不必接着往下看。\u003c/p\u003e\n\u003cp\u003e自己写规则最主要的目的显然是为了能够让一些自己的服务器或者一些特殊地址能够直连\\走代理，其实整个代理配置说白了就是 \u003cem\u003e\u003cstrong\u003e规定了谁要走直连，谁要走代理\u003c/strong\u003e\u003c/em\u003e，方便我们使用代理时可以实现全自动化策略调控。\u003c/p\u003e\n\u003cp\u003e要想自己写配置，我们首先要搞懂mihomo的配置分为哪些部分，每一部分是干什么的。让我带大家初步了解一下mihomo的配置中的几个主要模块：\u003c/p\u003e\n\u003ch2 id=\"主要模块\"\u003e主要模块\u003c/h2\u003e\n\u003ch3 id=\"proxy-providers\"\u003eproxy-providers\u003c/h3\u003e\n\u003ch4 id=\"作用\"\u003e作用\u003c/h4\u003e\n\u003cp\u003e定义 \u003cstrong\u003e从哪里获取代理节点\u003c/strong\u003e，支持在线订阅、本地文件等方式，是代理节点的 “源头”。\u003c/p\u003e\n\u003ch4 id=\"常用参数\"\u003e常用参数\u003c/h4\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e参数\u003c/th\u003e\n          \u003cth\u003e含义\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003eurl\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e代理订阅链接\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003epath\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e订阅内容的本地保存路径\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e订阅类型为 \u003ccode\u003ehttp\u003c/code\u003e（常见类型还有 \u003ccode\u003efile\u003c/code\u003e 本地文件、\u003ccode\u003eclash\u003c/code\u003e 标准格式等）。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003einterval\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e订阅更新间隔，通常是设定\u003ccode\u003e86400\u003c/code\u003e 秒 = 1 天，即每天自动更新一次代理节点。\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"全局配置\"\u003e全局配置\u003c/h3\u003e\n\u003ch4 id=\"作用-1\"\u003e作用\u003c/h4\u003e\n\u003cp\u003e定义 mihomo 的基础运行参数、网络入口（端口）、全局模式等，是软件启动的 \u003cstrong\u003e基础设置\u003c/strong\u003e。\u003c/p\u003e","title":"在windows上使用mihomo裸核"},{"content":"基本区别 许多小白第一次接触webhook的时候常常会与api混淆，那么我们先来看看两者的本质差别在哪：\napi 一般用于用户主动发起请求，目标系统返回用户需要的数据、结果。API 用途广泛，涉及查询、修改、执行等\nwebhook 一般用于用户提前设置好触发条件与通知方式，当符合条件，目标系统会主动给用户推送信息、执行动作，无须用户主动查询。webhook 用途单一，仅用于事件发生时的实时推送通知。\n**ps：**webhook 是 API 的一种，所有 webhook 都是 API，但不是所有 API 都是 webhook。\n深入了解webhook webhook的特征 webhook基于HTTP/HTTPS协议，以POST为主，少数用GET\n常用 JSON（简洁易解析），也有用 XML、表单（form-data）的场景\n下面，我们来看看webhook服务的两边各有什么特点。\nprovider(提供者) **谁来当？**通常是 “被触发动作的系统”（比如企业微信消息推送、GitHub、钉钉机器人等）。\n做什么？\n提供一个 “专属的 webhook 地址”（就是https://qyapi.weixin.qq.com/...?key=xxx 这类 URL），作为接收请求的 “入口”； 定义 “规则”：比如请求必须用什么格式（JSON / 表单）、需要带什么验证信息（比如你的 key）、支持触发哪些动作（比如企业微信只支持 “推送消息”，GitHub 支持 “代码提交通知”）； 收到合法请求后，执行预设动作（比如企业微信把消息推到群里，GitHub 把代码更新信息发给你）。 举例：企业微信就是典型的 “webhook 提供者”—— 它给了你带 key 的 URL，规定了必须发 JSON 格式的请求，并且收到后会执行 “推送消息” 的动作。\ncaller(调用者) **谁来当？**通常是 “主动触发动作的一方”（比如本地电脑、服务器脚本、第三方工具等）。\n做什么？\n知道提供者的 webhook 地址和规则（比如 “必须用 JSON 格式，要带 key”）； 在需要的时候，按照规则构造请求并发送（比如你用 curl 命令发消息内容）； 目的是 “让提供者执行某个动作”（而不是向提供者要数据）。 举例：你用 curl 命令发送请求时，你的本地电脑就是 “webhook 调用者”—— 你按照企业微信的规则发了 JSON 请求，目的是让企业微信执行 “推送消息” 的动作。\n小结一下， **推送方是这样的。**接收方只要挂个公网 IP、开对端口、保证网络能被找到就可以，反正数据来了接住就行。可推送方要考虑的事情就多了：得算签名防伪造请求、调重试机制防网络丢包、盯死 JSON 格式防解析报错，还得备着容错方案防接收方宕机 —— 毕竟消息发丢了锅全是自己的，可太费脑子咯。（doge） 一句话总结 webhook 是 API 的一种特殊类型，其核心价值是 “实时自动化”，一般用于推送消息，我这里举几个webhook的热门自动化部署方案，学会的小伙伴们可以快乐地用webhook去搭建自己的自动化方案啦！\n场景 推送方 接收方 触发事件 推送内容 企业微信消息推送 你的系统 企业微信服务器 有新通知需要发送 消息文本、图片等 支付结果通知 支付平台（微信支付 / 支付宝） 商户服务器 用户支付成功 / 失败 支付金额、订单号、支付状态 GitHub 代码通知 GitHub 服务器 你的 CI/CD 系统 代码提交、PR 创建 提交者、修改内容、分支信息 监控报警 监控系统（Zabbix/Prometheus） 企业微信群 / 邮件 服务器 CPU 过高、服务宕机 报警级别、故障详情、时间 电商订单同步 电商平台 仓库管理系统 新订单创建、订单取消 订单信息、操作类型 ","permalink":"https://tech.jamaisvu.cn/posts/20250928233615-%E4%B8%80%E7%AF%87%E8%AE%B2%E6%B8%85api%E4%B8%8Ewebhook/","summary":"\u003ch2 id=\"基本区别\"\u003e基本区别\u003c/h2\u003e\n\u003cp\u003e许多小白第一次接触webhook的时候常常会与api混淆，那么我们先来看看两者的本质差别在哪：\u003c/p\u003e\n\u003ch3 id=\"api\"\u003eapi\u003c/h3\u003e\n\u003cp\u003e一般用于用户主动发起请求，目标系统返回用户需要的数据、结果。API 用途广泛，涉及查询、修改、执行等\u003c/p\u003e\n\u003ch3 id=\"webhook\"\u003ewebhook\u003c/h3\u003e\n\u003cp\u003e一般用于用户提前设置好触发条件与通知方式，当符合条件，目标系统会主动给用户推送信息、执行动作，无须用户主动查询。webhook 用途单一，仅用于事件发生时的实时推送通知。\u003c/p\u003e\n\u003cp\u003e**ps：**webhook 是 API 的一种，所有 webhook 都是 API，但不是所有 API 都是 webhook。\u003c/p\u003e\n\u003ch2 id=\"深入了解webhook\"\u003e深入了解webhook\u003c/h2\u003e\n\u003ch3 id=\"webhook的特征\"\u003ewebhook的特征\u003c/h3\u003e\n\u003cp\u003ewebhook基于HTTP/HTTPS协议，以POST为主，少数用GET\u003c/p\u003e\n\u003cp\u003e常用 JSON（简洁易解析），也有用 XML、表单（form-data）的场景\u003c/p\u003e\n\u003cp\u003e下面，我们来看看webhook服务的两边各有什么特点。\u003c/p\u003e\n\u003ch3 id=\"provider提供者\"\u003eprovider(提供者)\u003c/h3\u003e\n\u003cp\u003e**谁来当？**通常是 “被触发动作的系统”（比如企业微信消息推送、GitHub、钉钉机器人等）。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e做什么？\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e提供一个 “专属的 webhook 地址”（就是\u003ccode\u003ehttps://qyapi.weixin.qq.com/...?key=xxx\u003c/code\u003e 这类 URL），作为接收请求的 “入口”；\u003c/li\u003e\n\u003cli\u003e定义 “规则”：比如请求必须用什么格式（JSON / 表单）、需要带什么验证信息（比如你的 \u003ccode\u003ekey\u003c/code\u003e）、支持触发哪些动作（比如企业微信只支持 “推送消息”，GitHub 支持 “代码提交通知”）；\u003c/li\u003e\n\u003cli\u003e收到合法请求后，\u003cstrong\u003e执行预设动作\u003c/strong\u003e（比如企业微信把消息推到群里，GitHub 把代码更新信息发给你）。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e举例\u003c/strong\u003e：企业微信就是典型的 “webhook 提供者”—— 它给了你带 key 的 URL，规定了必须发 JSON 格式的请求，并且收到后会执行 “推送消息” 的动作。\u003c/p\u003e\n\u003ch3 id=\"caller调用者\"\u003ecaller(调用者)\u003c/h3\u003e\n\u003cp\u003e**谁来当？**通常是 “主动触发动作的一方”（比如本地电脑、服务器脚本、第三方工具等）。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e做什么？\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e知道提供者的 webhook 地址和规则（比如 “必须用 JSON 格式，要带 key”）；\u003c/li\u003e\n\u003cli\u003e在需要的时候，\u003cstrong\u003e按照规则构造请求并发送\u003c/strong\u003e（比如你用 curl 命令发消息内容）；\u003c/li\u003e\n\u003cli\u003e目的是 “让提供者执行某个动作”（而不是向提供者要数据）。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e举例\u003c/strong\u003e：你用 curl 命令发送请求时，你的本地电脑就是 “webhook 调用者”—— 你按照企业微信的规则发了 JSON 请求，目的是让企业微信执行 “推送消息” 的动作。\u003c/p\u003e","title":"一篇讲清api与webhook"},{"content":"由博主开发的docker镜像，现已发布在dokcer hub上 grayfalcon/excalicloudstore 通过 Docker 单机部署 和 Docker Compose 部署 两种方式，快速使用 grayfalcon/excalicloudstore 镜像（基于 Excalidraw 开发，支持 S3 兼容存储的云端绘图工具）。\n一、前提条件 在开始部署前，请确保您的环境已满足以下要求：\n安装 Docker Engine（参考：Docker 官方安装文档） Linux 系统：需确保 Docker 服务已启动（systemctl start docker） Windows/macOS 系统：安装 Docker Desktop 并启动 （可选）安装 Docker Compose（若使用 Compose 部署，参考：Docker Compose 安装文档） 准备好 S3 兼容存储配置（如 AWS S3、七牛云 Kodo、阿里云 OSS 等），需包含： 访问密钥（Access Key ID） 秘密密钥（Secret Access Key） 存储区域（Region） 终端节点（Endpoint） 存储桶名称（Bucket Name） 二、方式一：Docker 单机部署 适合快速启动单个容器，步骤简单，适合测试或小型场景。\n1. 核心部署命令 将以下命令中的 占位符（如 your_access_key_here） 替换为您的实际配置，直接在终端执行：\nbash\n1# Linux/macOS 系统（续行符为 \\） 2docker run -d \\ 3 -p 8080:80 \\ # 宿主机端口:容器内端口（容器内默认80，可修改宿主机端口如 80:80） 4 --name excalicloudstore \\ # 容器名称（可自定义） 5 --restart unless-stopped \\ # 容器意外退出时自动重启 6 -e PORT=3001 \\ # 后端服务端口（容器内固定，无需修改） 7 -e NODE_ENV=production \\ # 环境类型（production 生产环境，development 开发环境） 8 -e AWS_ACCESS_KEY_ID=your_access_key_here \\ # 替换为 S3 访问密钥 9 -e AWS_SECRET_ACCESS_KEY=your_secret_key_here \\ # 替换为 S3 秘密密钥 10 -e S3_REGION=your_s3_region_here \\ # 替换为 S3 区域（如 cn-east-1、us-east-1） 11 -e S3_ENDPOINT=your_s3_endpoint_here \\ # 替换为 S3 终端节点 12 -e S3_BUCKET=your_s3_bucket_name_here \\ # 替换为 S3 存储桶名称 13 -e STORAGE_PATH_PREFIX=Excalidraw/web_canvas/ \\ # S3 存储路径前缀（可自定义，如无需求保持默认） 14 -e S3_FORCE_PATH_STYLE=true \\ # 强制使用路径风格访问 S3（兼容多数存储服务） 15 -e S3_TLS=false \\ # 是否启用 TLS（true 为 HTTPS，false 为 HTTP，根据 S3 配置选择） 16 grayfalcon/excalicloudstore:latest # 镜像名称（:latest 为最新版本，可指定具体版本如 :v1） powershell\n1# Windows PowerShell 系统（续行符为 `） 2docker run -d ` 3 -p 8080:80 ` 4 --name excalicloudstore ` 5 --restart unless-stopped ` 6 -e PORT=3001 ` 7 -e NODE_ENV=production ` 8 -e AWS_ACCESS_KEY_ID=your_access_key_here ` 9 -e AWS_SECRET_ACCESS_KEY=your_secret_key_here ` 10 -e S3_REGION=your_s3_region_here ` 11 -e S3_ENDPOINT=your_s3_endpoint_here ` 12 -e S3_BUCKET=your_s3_bucket_name_here ` 13 -e STORAGE_PATH_PREFIX=Excalidraw/web_canvas/ ` 14 -e S3_FORCE_PATH_STYLE=true ` 15 -e S3_TLS=false ` 16 grayfalcon/excalicloudstore:latest 2. 部署后验证 查看容器状态：确认容器是否正常启动\nbash\n1docker ps | grep excalicloudstore 若 STATUS 为 Up X minutes，表示启动成功。\n访问应用：打开浏览器，输入 http://宿主机IP:8080（如本地部署则为 http://localhost:8080），即可进入 Excalidraw 绘图页面。\n查看日志：若启动失败或应用异常，可查看日志排查问题\nbash\n1docker logs -f excalicloudstore 三、方式二：Docker Compose 部署 适合多服务协同（如后续需添加数据库、后端服务等），配置文件化管理，便于维护和扩展。\n1. 创建 Compose 配置文件 在任意目录下创建 docker-compose.yml 文件，内容如下（替换占位符为实际配置）：\nyaml\n1version: \u0026#34;3.8\u0026#34; # 兼容大部分 Docker Compose 版本 2 3services: 4 excalicloudstore: 5 image: grayfalcon/excalicloudstore:latest # 镜像名称 6 container_name: excalicloudstore # 容器名称 7 restart: unless-stopped # 自动重启策略 8 ports: 9 - \u0026#34;8080:80\u0026#34; # 端口映射（宿主机端口:容器内端口） 10 environment: 11 # 核心环境变量（替换占位符） 12 - PORT=3001 13 - NODE_ENV=production 14 - AWS_ACCESS_KEY_ID=your_access_key_here 15 - AWS_SECRET_ACCESS_KEY=your_secret_key_here 16 - S3_REGION=your_s3_region_here 17 - S3_ENDPOINT=your_s3_endpoint_here 18 - S3_BUCKET=your_s3_bucket_name_here 19 - STORAGE_PATH_PREFIX=Excalidraw/web_canvas/ 20 - S3_FORCE_PATH_STYLE=true 21 - S3_TLS=false 22 # （可选）挂载目录（如需持久化配置或日志，可添加） 23 # volumes: 24 # - ./excalidraw-logs:/var/log/excalidraw # 日志持久化 25 # - ./excalidraw-config:/opt/node_app/config # 配置持久化 2. 启动服务 在 docker-compose.yml 所在目录执行以下命令：\nbash\n1# 后台启动服务（-d 表示 detached 模式） 2docker compose up -d 3 4# 查看服务状态 5docker compose ps 3. 停止 / 删除服务 bash\n1# 停止服务（容器保留） 2docker compose stop 3 4# 停止并删除服务（容器、网络会被删除，挂载卷保留） 5docker compose down 四、环境变量说明 环境变量 作用说明 是否必填 示例值 PORT 容器内后端服务端口（固定为 3001，无需修改） 否 3001 NODE_ENV 环境类型（生产环境用 production） 否 production / development AWS_ACCESS_KEY_ID S3 兼容存储的访问密钥 是 AKIAXXXXXXXXXXXXXXXX AWS_SECRET_ACCESS_KEY S3 兼容存储的秘密密钥 是 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX S3_REGION S3 存储区域 是 cn-east-1（七牛）、us-east-1（AWS） S3_ENDPOINT S3 终端节点（兼容存储的 API 地址） 是 https://s3-cn-east-1.qiniucs.com S3_BUCKET 用于存储绘图文件的 S3 存储桶名称 是 excalidraw-storage STORAGE_PATH_PREFIX S3 存储路径前缀（文件会存放在该路径下） 否 Excalidraw/web_canvas/ S3_FORCE_PATH_STYLE 强制路径风格访问（兼容非 AWS S3 服务） 否 true（推荐）/false S3_TLS 是否启用 TLS（HTTPS）访问 S3 否 true（HTTPS）/ false（HTTP） 五、常见问题排查 容器启动失败，日志显示「S3 连接超时」\n检查 S3_ENDPOINT、S3_REGION 是否正确（避免端口或域名错误）； 确认 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 是否有权限访问该存储桶； 若使用私有网络，需确保宿主机能访问 S3 终端节点（可通过 curl 你的S3_ENDPOINT 测试连通性）。 浏览器访问 http://localhost:8080 无响应\n检查端口映射是否正确（如宿主机 8080 端口是否被占用，可换用 8081 等其他端口）； 执行 docker ps 确认容器 STATUS 为 Up 状态，若退出则查看日志（docker logs excalicloudstore）； 远程部署时，需确保宿主机防火墙开放了对应的端口（如 Linux 执行 ufw allow 8080）。 绘图文件无法保存到 S3\n检查存储桶是否存在，且密钥是否有「写入」权限； 确认 S3_TLS 配置与终端节点协议一致（如 Endpoint 是 HTTP，则 S3_TLS=false）。 六、注意事项 敏感信息安全：避免将 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 硬编码到命令或配置文件中，生产环境建议使用 Docker Secrets 或 环境变量文件（如 .env）管理（需在 Compose 中通过 env_file: .env 引用）。 镜像版本：生产环境建议指定具体版本（如 grayfalcon/excalicloudstore:v1），避免使用 latest（可能因版本更新导致兼容性问题）。 端口冲突：若宿主机 8080 端口已被占用，可修改 -p 参数的宿主机端口（如 -p 80:80 直接使用 80 端口，需 root 权限）。 ","permalink":"https://tech.jamaisvu.cn/posts/20250927225535-excalicloudstore-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E/","summary":"\u003cp\u003e由博主开发的docker镜像，现已发布在dokcer hub上 grayfalcon/excalicloudstore\n通过 \u003cstrong\u003eDocker 单机部署\u003c/strong\u003e 和 \u003cstrong\u003eDocker Compose 部署\u003c/strong\u003e 两种方式，快速使用 \u003ccode\u003egrayfalcon/excalicloudstore\u003c/code\u003e 镜像（基于 Excalidraw 开发，支持 S3 兼容存储的云端绘图工具）。\u003c/p\u003e\n\u003ch2 id=\"一前提条件\"\u003e一、前提条件\u003c/h2\u003e\n\u003cp\u003e在开始部署前，请确保您的环境已满足以下要求：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e安装 \u003cstrong\u003eDocker Engine\u003c/strong\u003e（参考：\u003ca href=\"https://docs.docker.com/get-docker/\"\u003eDocker 官方安装文档\u003c/a\u003e）\n\u003cul\u003e\n\u003cli\u003eLinux 系统：需确保 Docker 服务已启动（\u003ccode\u003esystemctl start docker\u003c/code\u003e）\u003c/li\u003e\n\u003cli\u003eWindows/macOS 系统：安装 Docker Desktop 并启动\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e（可选）安装 \u003cstrong\u003eDocker Compose\u003c/strong\u003e（若使用 Compose 部署，参考：\u003ca href=\"https://docs.docker.com/compose/install/\"\u003eDocker Compose 安装文档\u003c/a\u003e）\u003c/li\u003e\n\u003cli\u003e准备好 \u003cstrong\u003eS3 兼容存储配置\u003c/strong\u003e（如 AWS S3、七牛云 Kodo、阿里云 OSS 等），需包含：\n\u003cul\u003e\n\u003cli\u003e访问密钥（Access Key ID）\u003c/li\u003e\n\u003cli\u003e秘密密钥（Secret Access Key）\u003c/li\u003e\n\u003cli\u003e存储区域（Region）\u003c/li\u003e\n\u003cli\u003e终端节点（Endpoint）\u003c/li\u003e\n\u003cli\u003e存储桶名称（Bucket Name）\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"二方式一docker-单机部署\"\u003e二、方式一：Docker 单机部署\u003c/h2\u003e\n\u003cp\u003e适合快速启动单个容器，步骤简单，适合测试或小型场景。\u003c/p\u003e\n\u003ch3 id=\"1-核心部署命令\"\u003e1. 核心部署命令\u003c/h3\u003e\n\u003cp\u003e将以下命令中的 \u003cstrong\u003e占位符（如 \u003ccode\u003eyour_access_key_here\u003c/code\u003e）\u003c/strong\u003e 替换为您的实际配置，直接在终端执行：\u003c/p\u003e\n\u003cp\u003ebash\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\u003c/span\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Linux/macOS 系统（续行符为 \\）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\u003c/span\u003e\u003cspan\u003edocker run -d \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\u003c/span\u003e\u003cspan\u003e  -p 8080:80 \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 宿主机端口:容器内端口（容器内默认80，可修改宿主机端口如 80:80）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\u003c/span\u003e\u003cspan\u003e  --name excalicloudstore \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 容器名称（可自定义）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\u003c/span\u003e\u003cspan\u003e  --restart unless-stopped \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 容器意外退出时自动重启\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\u003c/span\u003e\u003cspan\u003e  -e PORT\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3001\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 后端服务端口（容器内固定，无需修改）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\u003c/span\u003e\u003cspan\u003e  -e NODE_ENV\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eproduction \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 环境类型（production 生产环境，development 开发环境）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\u003c/span\u003e\u003cspan\u003e  -e AWS_ACCESS_KEY_ID\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eyour_access_key_here \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 替换为 S3 访问密钥\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\u003c/span\u003e\u003cspan\u003e  -e AWS_SECRET_ACCESS_KEY\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eyour_secret_key_here \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 替换为 S3 秘密密钥\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\u003c/span\u003e\u003cspan\u003e  -e S3_REGION\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eyour_s3_region_here \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 替换为 S3 区域（如 cn-east-1、us-east-1）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\u003c/span\u003e\u003cspan\u003e  -e S3_ENDPOINT\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eyour_s3_endpoint_here \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 替换为 S3 终端节点\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\u003c/span\u003e\u003cspan\u003e  -e S3_BUCKET\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eyour_s3_bucket_name_here \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 替换为 S3 存储桶名称\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\u003c/span\u003e\u003cspan\u003e  -e STORAGE_PATH_PREFIX\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eExcalidraw/web_canvas/ \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# S3 存储路径前缀（可自定义，如无需求保持默认）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\u003c/span\u003e\u003cspan\u003e  -e S3_FORCE_PATH_STYLE\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003etrue \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 强制使用路径风格访问 S3（兼容多数存储服务）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\u003c/span\u003e\u003cspan\u003e  -e S3_TLS\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003efalse \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 是否启用 TLS（true 为 HTTPS，false 为 HTTP，根据 S3 配置选择）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\u003c/span\u003e\u003cspan\u003e  grayfalcon/excalicloudstore:latest  \u003cspan style=\"color:#75715e\"\u003e# 镜像名称（:latest 为最新版本，可指定具体版本如 :v1）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003epowershell\u003c/p\u003e","title":"excalicloudstore 使用说明"},{"content":"\n引言 博主有段时间特别痴迷记录生活习惯，我曾在 4 月份陷入 手动复盘的困境—— 想记录电脑使用习惯却难以坚持：手动记太麻烦、整理数据费时间，一想到复盘流程就头大。直到遇到 Manic Time，这款电脑时间管理软件彻底解决了我的痛点：它能静默在后台运行，从开机到关机全自动记录电脑操作（温馨提示：隐私相关记录还是别记录了哈🤣）。\n虽初用时觉得功能繁琐、对新手不友好，但熟悉后才发现它的核心优势 ——无痛自动记录：只需花 10 分钟学基础操作，后续无需手动干预，想看时间习惯时随时调用数据。本文专为和我一样的 “记录新手” 打造，用最直白的步骤，教你掌握 Manic Time 的自动记录核心功能。\n正文 1. 核心前置：3 分钟摸清 Manic Time 关键模块 Manic Time 的自动记录逻辑围绕 “时间轴 + 统计” 展开，新手无需学所有功能，先掌握 2 个核心模块即可。\n1.1 时间轴：自动记录的 “数据底座” 时间轴是 Manic Time 记录数据的核心载体，3 条关键时间轴分清就好了：\n标签时间轴：按自定义标签记录，但无法自动标记，需手动操作（后续会教如何 “变自动”）。 程序时间轴：按使用的程序（如 edge.exe、微信.exe）自动记录，无需手动干预，是 “全自动数据来源”。 自动标记时间轴：支持按规则自动标记标签，可理解为 “能自动工作的标签轴”（核心功能，后续重点用）。 图 1：Manic Time 时间轴面板（3 条核心时间轴，新手重点关注）\n1.2 统计信息：让时间分配 “可视化” 统计信息是 “看结果” 的关键，能将时间轴数据转化为直观图表：\n点击顶部导航栏「统计信息」，面板会自动汇总所有时间轴数据。 调整「分组依据」：可按 “天” 或 “周” 汇总，方便查看短期 / 长期时间分配。 切换图表类型：建议用 “折线图”，能清晰看到某类活动（如娱乐、工作）的时间变化趋势。 我们做所有自动设置的最终目的，就是让「统计信息」能直接展示 “自定义标签” 的时间数据，比如 “娱乐视频耗时”“工作软件使用时长”，方便快速复盘。\n图 2：统计信息面板（\n图 3：统计信息分组切换（红框标注 “分组依据” 调整入口）\n图 4：统计信息折线图（直观查看时间分配变化）\n2. 关键突破：1 步实现 “自动标记 + 统计” 打通 新手最容易卡壳的问题：自动标记时间轴的数据无法直接在统计信息里展示（当前版本无此功能），而程序时间轴的统计数据又太零散（比如 “edge.exe” 包含工作、娱乐等多种用途，无分组价值）。\n其实只需 1 个关键操作，就能让 “自定义标签” 实现 “自动记录 + 自动统计”，具体步骤如下：\n2.1 找到核心按钮：“将自动标记复制到标签” 点击顶部导航栏「每日」，回到时间轴面板。 在面板中找到「将自动标记复制到标签」按钮（位置参考图 5，是打通统计的关键）。 图 5：时间轴面板核心按钮（红框标注 “将自动标记复制到标签”）\n2.2 执行复制：2 个选项任选无风险 点击按钮后会弹出选项框，新手无需纠结，2 个选择都不影响数据：\n「仅填写未标记的时间」：只给标签时间轴空白部分补数据（推荐，更高效）。 「覆盖现有标签」：用自动标记数据替换标签时间轴所有内容（适合想重新统计时用）。 原理说明：通过复制，让「标签时间轴 = 自动标记时间轴」，而统计信息面板支持 “标签时间轴” 的数据展示 —— 这样就间接实现了 “自动标记数据能统计” 的需求，且全程无需手动输数据。\n3. 实战操作：10秒添加 “自定义自动标记” 学会打通 “记录 - 统计” 后，下一步就是按自己的需求添加自动标记（比如 “娱乐视频”“工作文档”“社交软件”），以 “给 Edge 浏览器中的 B 站添加「娱乐视频」标签” 为例，3 步就能搞定：\n3.1 定位目标程序记录 点击左侧「程序时间轴」，在下方记录列表中找到 “Edge 浏览器” 的记录（比如 “Microsoft Edge - bilibili”）。 右键这条记录，弹出操作菜单。 图 6：定位程序记录（右键 Edge 浏览器中的 B 站记录）\n3.2 触发自动标记设置 在右键菜单中选择「添加到自动标记」，进入设置面板（这是让标签 “自动生效” 的核心步骤）。\n图 7：选择 “添加到自动标记”（红框标注选项）\n3.3 配置筛选条件与标签 在自动标记设置面板中，按以下逻辑填写（新手直接照搬示例即可）：\n筛选条件：选择「并且标题包含」，输入 “bilibili”（意思是：只对 Edge 中标题含 “bilibili” 的记录生效）。 标签名称：在「自动标记」输入框中填 “娱乐视频”（自定义名称，比如抖音可填同样标签）。 点击「确定」，设置完成。 图 8：自动标记配置面板\ne) 3.4 验证结果 点击左侧「自动标记时间轴」，在下方记录列表中能看到含 “娱乐视频” 标签的记录，说明设置成功（可参考图 9 的示例效果）。\n图 9：自动标记效果示例\n总结 用 Manic Time 做电脑时间管理，新手无需掌握复杂功能，记住 “3 步核心流程” 就能轻松上手：\n摸透基础：分清「标签 / 程序 / 自动标记」3 条时间轴，知道「统计信息」是看结果的入口； 打通统计：通过「将自动标记复制到标签」，让自定义标签数据能在统计面板展示； 添加标签：右键程序记录→「添加到自动标记」→配置条件，实现 “按需求自动分类”。 这套流程完全规避了 “手动记录难坚持” 的痛点 —— 日常使用电脑时，Manic Time 在后台全自动记录；想复盘时，点击 1 次复制按钮，打开「统计信息」就能看到清晰的时间分配（比如 “每月娱乐视频耗时多少”“工作软件用了多久”）。\n无论是想提升工作效率、减少无效刷网时间，还是单纯想摸清自己的电脑使用习惯，这款工具都能让你从 “时间管理新手” 快速进阶为 “电脑时间掌控者”。\n附：新手常见问题（FAQ） Q1：担心隐私泄露？\nA：可在 Manic Time 设置中关闭敏感记录（如浏览器隐私模式、特定程序），具体路径：顶部「设置」→「监控」→取消勾选不想记录的内容。 Q2：能统计手机时间吗？\nA：当前版本仅支持 Windows/Mac 电脑，手机端需搭配其他工具（如 Screen Time），后续可关注软件更新。 Q3：数据会丢失吗？\nA：建议定期备份：顶部「文件」→「备份数据库」，将备份文件存到云盘或本地硬盘。 ","permalink":"https://tech.jamaisvu.cn/posts/%E7%94%B5%E8%84%91%E6%97%B6%E9%97%B4%E7%AE%A1%E7%90%86%E5%A4%A7%E5%B8%88manic-time-%E6%9C%80%E6%98%93%E6%87%82%E7%9A%84%E9%80%9F%E6%88%90%E6%95%99%E7%A8%8B/","summary":"\u003cp\u003e\u003cimg alt=\"image.png|450\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO2/refs/heads/main//20250906144436192.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003e博主有段时间特别痴迷记录生活习惯，我曾在 4 月份陷入 手动复盘的困境—— 想记录电脑使用习惯却难以坚持：手动记太麻烦、整理数据费时间，一想到复盘流程就头大。直到遇到 \u003cstrong\u003eManic Time\u003c/strong\u003e，这款电脑时间管理软件彻底解决了我的痛点：它能静默在后台运行，从开机到关机全自动记录电脑操作（温馨提示：隐私相关记录还是别记录了哈🤣）。\u003c/p\u003e\n\u003cp\u003e虽初用时觉得功能繁琐、对新手不友好，但熟悉后才发现它的核心优势 ——\u003cstrong\u003e无痛自动记录\u003c/strong\u003e：只需花 10 分钟学基础操作，后续无需手动干预，想看时间习惯时随时调用数据。本文专为和我一样的 “记录新手” 打造，用最直白的步骤，教你掌握 Manic Time 的自动记录核心功能。\u003c/p\u003e\n\u003ch2 id=\"正文\"\u003e正文\u003c/h2\u003e\n\u003ch3 id=\"1-核心前置3-分钟摸清-manic-time-关键模块\"\u003e1. 核心前置：3 分钟摸清 Manic Time 关键模块\u003c/h3\u003e\n\u003cp\u003eManic Time 的自动记录逻辑围绕 “时间轴 + 统计” 展开，新手无需学所有功能，先掌握 2 个核心模块即可。\u003c/p\u003e\n\u003ch4 id=\"11-时间轴自动记录的-数据底座\"\u003e1.1 时间轴：自动记录的 “数据底座”\u003c/h4\u003e\n\u003cp\u003e时间轴是 Manic Time 记录数据的核心载体，3 条关键时间轴分清就好了：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e标签时间轴\u003c/strong\u003e：按自定义标签记录，但\u003cstrong\u003e无法自动标记\u003c/strong\u003e，需手动操作（后续会教如何 “变自动”）。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e程序时间轴\u003c/strong\u003e：按使用的程序（如 edge.exe、微信.exe）自动记录，无需手动干预，是 “全自动数据来源”。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e自动标记时间轴\u003c/strong\u003e：支持按规则自动标记标签，可理解为 “能自动工作的标签轴”（核心功能，后续重点用）。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e图 1：Manic Time 时间轴面板（3 条核心时间轴，新手重点关注）\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image|116\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO2/refs/heads/main//20250906125810031.png\"\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"12-统计信息让时间分配-可视化\"\u003e1.2 统计信息：让时间分配 “可视化”\u003c/h4\u003e\n\u003cp\u003e统计信息是 “看结果” 的关键，能将时间轴数据转化为直观图表：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e点击顶部导航栏「统计信息」，面板会自动汇总所有时间轴数据。\u003c/li\u003e\n\u003cli\u003e调整「分组依据」：可按 “天” 或 “周” 汇总，方便查看短期 / 长期时间分配。\u003c/li\u003e\n\u003cli\u003e切换图表类型：建议用 “折线图”，能清晰看到某类活动（如娱乐、工作）的时间变化趋势。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e我们做所有自动设置的最终目的，就是让「统计信息」能直接展示 “自定义标签” 的时间数据，比如 “娱乐视频耗时”“工作软件使用时长”，方便快速复盘。\u003c/p\u003e","title":"💻电脑时间管理大师：Manic Time 最易懂的速成教程"},{"content":"\n引言：灵感随时记，多端不脱节 Obsidian 的白板功能对梳理编程数据流、搭建知识体系十分友好，但很多时候灵感来袭时我们并不在电脑前，只能用手机临时记录，后续还要手动迁移到电脑端的 Obsidian 中，既繁琐又容易遗漏细节。\n如果 Obsidian 能实现多端同步，就能让创作更顺畅：手机随手记下的想法，下次打开电脑时，只需点击同步按钮，就能继续编辑；再结合之前分享的PicGo 图床搭建教程，还能在手机与电脑间快速传输文字和图片。\n准备环境：所需工具清单 要实现 Obsidian 多端同步，需准备以下工具：\n云存储服务：七牛云对象存储（作为 Obsidian 的远程存储载体）； 笔记应用：Obsidian（需同时安装 PC 端和手机端，建议使用最新版本）； 同步插件：Remotely Save（Obsidian 第三方插件，负责多端数据同步）。 第一步：七牛云对象存储配置 七牛云的「对象存储（Kodo）」是同步的核心 “仓库”，请按以下步骤配置：\n1. 注册并完成实名认证 访问七牛云官网，完成账号注册后，务必进行实名认证（个人或企业认证均可，按页面提示提交资料即可）。\n⚠️ 实名认证是使用对象存储的必要前提，必须完成！\n2. 创建存储空间 实名认证通过后，进入七牛云控制台，操作如下：\n点击左侧导航栏「对象存储 Kodo」；\n点击「创建空间」，填写相关信息：\n空间名称：自定义（需保证全局唯一，例如obsidian-sync-2025）； 存储区域：选择距离自己最近的区域（后续同步速度更快，区域与 ID 的对应关系见下文表格）； 其他选项（如存储类型、访问控制等）：新手保持默认设置即可。 3. 获取访问密钥（AK、SK） 同步 Obsidian 需要 “访问密钥” 来验证身份，步骤如下：\n点击控制台右上角头像，选择「密钥管理」； 点击「创建密钥」（若已有密钥，可直接使用）； 保存生成的**AccessKey（AK）**和**SecretKey（SK）**—— 这是后续配置的关键凭证，务必妥善保存！ 第二步：Obsidian 与 Remotely Save 同步配置 完成七牛云配置后，需在 Obsidian 中安装并配置「Remotely Save」插件，实现与云存储的连接。\n1. 安装 Remotely Save 插件 打开 Obsidian PC 端，依次操作：\n设置 → 第三方插件 → 开启「社区插件市场」→ 搜索「Remotely Save」→ 点击「安装」并「启用」。\n2. 关键配置：连接七牛云（避坑要点） 点击「Remotely Save」旁的「设置」按钮，进入配置界面，重点配置以下内容：\n（1）服务类型：选择「S3 兼容」 七牛云对象存储兼容 S3 协议，因此 “服务类型” 选择「S3 兼容」。\n（2）服务地址：固定填写 填写七牛云 S3 服务的Endpoint 地址：http://s3.cn-east-1.qiniucs.com/\n⚠️ 避坑：地址末尾不要添加桶名！Remotely Save 会自动拼接桶名，手动添加会导致 404 错误。\n（3）区域（Region ID）：对应七牛云空间区域 七牛云不同存储区域对应不同的「Region ID」，需根据你创建空间时的选择填写，参考下表：\n存储区域 Region 区域 Region ID 华东 - 浙江 z0 华东 - 浙江 2 cn-east-2 华北 - 河北 z1 华南 - 广东 z2 北美 - 洛杉矶 na0 亚太 - 新加坡（原东南亚） as0 亚太 - 河内 ap-southeast-2 亚太 - 胡志明 ap-southeast-3 （4）桶名（Bucket）：填写七牛云空间名 直接复制你在七牛云创建的「空间名称」。\n（5）AccessKey（AK）、SecretKey（SK）：填入七牛云密钥 将第一步保存的「AccessKey」和「SecretKey」分别填入对应输入框。\n3. 验证配置是否成功 配置完成后，点击「检查」按钮：\n若提示「成功」，说明 Obsidian 已成功连接七牛云，同步功能可用； 若提示错误，需检查「服务地址」「区域」「桶名」「AK/SK」是否填写正确。 点击检查后，若出现如下提示，说明配置成功：\n第三步：手机端 Obsidian 同步配置 手机端（iOS/Android）的配置与 PC 端基本一致：\n打开手机端 Obsidian，进入「设置」→「第三方插件」→ 启用「Remotely Save」； 进入「Remotely Save」配置页，完全复制 PC 端的参数（服务地址、区域、桶名、AK/SK）； 点击「检查」验证，成功后即可实现手机与 PC 端的同步。 进阶：Remotely Save 个性化设置 Remotely Save 支持更多自定义选项，让同步更贴合你的需求：\n自动保存间隔：可设置 “每 X 分钟自动同步”，无需手动操作； 密码验证：开启后，多端同步需验证密码，提升数据安全性； 冲突处理：基础版仅支持冲突提醒，“自动合并冲突” 等智能功能需付费解锁。 结语：让创作更 “流动” 通过「七牛云对象存储」+「Remotely Save」，Obsidian 实现了手机与电脑的无缝同步—— 灵感不再受设备限制，手机随手记录的想法、图片，电脑端能直接编辑、梳理成完整体系。\n美中不足的是：核心的 “智能冲突处理” 需要付费，相比「思源笔记（Siyuan）」的快照同步，在自动化和完整性上稍显不足。但对大多数用户来说，免费版的 “基础同步” 已能满足多端协作的核心需求。\n现在，快拿起手机和电脑，体验这种 “流动” 的创作方式吧～\n","permalink":"https://tech.jamaisvu.cn/posts/obsidian-%E5%A4%9A%E7%AB%AF%E5%90%8C%E6%AD%A5%E7%94%A8%E4%B8%83%E7%89%9B%E4%BA%91-+-remotely-save-%E5%AE%9E%E7%8E%B0%E6%89%8B%E6%9C%BA%E4%B8%8E%E7%94%B5%E8%84%91%E6%97%A0%E7%BC%9D%E5%8D%8F%E4%BD%9C/","summary":"\u003cp\u003e\u003cimg alt=\"image.png\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/refs/heads/img//20250906031852383.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"引言灵感随时记多端不脱节\"\u003e引言：灵感随时记，多端不脱节\u003c/h2\u003e\n\u003cp\u003eObsidian 的白板功能对\u003cstrong\u003e梳理编程数据流\u003c/strong\u003e、\u003cstrong\u003e搭建知识体系\u003c/strong\u003e十分友好，但很多时候灵感来袭时我们并不在电脑前，只能用手机临时记录，后续还要手动迁移到电脑端的 Obsidian 中，既繁琐又容易遗漏细节。\u003c/p\u003e\n\u003cp\u003e如果 Obsidian 能实现多端同步，就能让创作更顺畅：手机随手记下的想法，下次打开电脑时，只需点击同步按钮，就能继续编辑；再结合之前分享的\u003ca href=\"https://blog.jamaisvu.tech/102/%E7%99%BD%E5%AB%96github%EF%BC%8C%E5%BD%BB%E5%BA%95%E9%87%8A%E6%94%BE%E6%9C%AC%E5%9C%B0%E7%A9%BA%E9%97%B4%EF%BC%8C%E6%90%AD%E5%BB%BA%E5%9B%BE%E5%BA%8A%E6%9C%8D%E5%8A%A1/\"\u003ePicGo 图床搭建教程\u003c/a\u003e，还能在手机与电脑间快速传输文字和图片。\u003c/p\u003e\n\u003ch2 id=\"准备环境所需工具清单\"\u003e准备环境：所需工具清单\u003c/h2\u003e\n\u003cp\u003e要实现 Obsidian 多端同步，需准备以下工具：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e云存储服务：\u003cstrong\u003e七牛云对象存储\u003c/strong\u003e（作为 Obsidian 的远程存储载体）；\u003c/li\u003e\n\u003cli\u003e笔记应用：\u003cstrong\u003eObsidian\u003c/strong\u003e（需同时安装 PC 端和手机端，建议使用最新版本）；\u003c/li\u003e\n\u003cli\u003e同步插件：\u003cstrong\u003eRemotely Save\u003c/strong\u003e（Obsidian 第三方插件，负责多端数据同步）。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"第一步七牛云对象存储配置\"\u003e第一步：七牛云对象存储配置\u003c/h2\u003e\n\u003cp\u003e七牛云的「对象存储（Kodo）」是同步的核心 “仓库”，请按以下步骤配置：\u003c/p\u003e\n\u003ch3 id=\"1-注册并完成实名认证\"\u003e1. 注册并完成实名认证\u003c/h3\u003e\n\u003cp\u003e访问\u003ca href=\"https://www.qiniu.com/\"\u003e七牛云官网\u003c/a\u003e，完成账号注册后，务必进行\u003cstrong\u003e实名认证\u003c/strong\u003e（个人或企业认证均可，按页面提示提交资料即可）。\u003cbr\u003e\n⚠️ 实名认证是使用对象存储的必要前提，必须完成！\u003c/p\u003e\n\u003ch3 id=\"2-创建存储空间\"\u003e2. 创建存储空间\u003c/h3\u003e\n\u003cp\u003e实名认证通过后，进入七牛云\u003cstrong\u003e控制台\u003c/strong\u003e，操作如下：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e点击左侧导航栏「对象存储 Kodo」；\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e点击「创建空间」，填写相关信息：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e空间名称：自定义（需保证全局唯一，例如\u003ccode\u003eobsidian-sync-2025\u003c/code\u003e）；\u003c/li\u003e\n\u003cli\u003e存储区域：选择\u003cstrong\u003e距离自己最近的区域\u003c/strong\u003e（后续同步速度更快，区域与 ID 的对应关系见下文表格）；\u003c/li\u003e\n\u003cli\u003e其他选项（如存储类型、访问控制等）：新手保持默认设置即可。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"3-获取访问密钥aksk\"\u003e3. 获取访问密钥（AK、SK）\u003c/h3\u003e\n\u003cp\u003e同步 Obsidian 需要 “访问密钥” 来验证身份，步骤如下：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e点击控制台右上角\u003cstrong\u003e头像\u003c/strong\u003e，选择「密钥管理」；\u003c/li\u003e\n\u003cli\u003e点击「创建密钥」（若已有密钥，可直接使用）；\u003c/li\u003e\n\u003cli\u003e保存生成的**AccessKey（AK）**和**SecretKey（SK）**—— 这是后续配置的关键凭证，务必妥善保存！\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/refs/heads/img//20250906022658285.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/refs/heads/img//20250906024018732.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"第二步obsidian-与-remotely-save-同步配置\"\u003e第二步：Obsidian 与 Remotely Save 同步配置\u003c/h2\u003e\n\u003cp\u003e完成七牛云配置后，需在 Obsidian 中安装并配置「Remotely Save」插件，实现与云存储的连接。\u003c/p\u003e\n\u003ch3 id=\"1-安装-remotely-save-插件\"\u003e1. 安装 Remotely Save 插件\u003c/h3\u003e\n\u003cp\u003e打开 Obsidian PC 端，依次操作：\u003cbr\u003e\n\u003ccode\u003e设置\u003c/code\u003e → \u003ccode\u003e第三方插件\u003c/code\u003e → 开启「社区插件市场」→ 搜索「Remotely Save」→ 点击「安装」并「启用」。\u003c/p\u003e","title":"Obsidian 多端同步：用七牛云 + Remotely Save 实现手机与电脑无缝协作"},{"content":"\n还在手忙脚乱地在服务器和客户端之间传图片？还在为博客图片引用失效而头疼？其实这些都多余了！\n拥有图床服务，就等于拥有了一个多端同步的媒体库——不仅能存图片，还能存GIF、PDF、文本文件等。写博客时无需纠结复杂格式，只需掌握简单的Markdown语法，就能快速搭建便捷又优雅的写作环境。\n正文 一、环境准备 本次搭建需用到以下工具，点击名称可直接跳转至对应下载/官网页面：\nPicGo：图床上传工具，GitHub官方仓库（可下载最新版） GitHub仓库：用于存储图片的免费云端空间 Typora：Markdown编辑器，官方下载链接 WordPress：博客发布平台（可选，也可适配其他平台） 二、最终实现效果 截图后按下 Ctrl+C 复制，再到Typora中 Ctrl+V 粘贴，即可自动生成「Markdown语法+图片URL」的内容；发布时全选Typora内容，复制到博客发布页，一键完成发布。\n三、详细搭建步骤 1. 创建GitHub仓库（存储图片的“云端硬盘”） 登录GitHub，新建仓库，配置参考下图： 关键注意：仓库必须设置为「Public」，否则图片外链无法公开访问。 2. 创建GitHub Token（授权PicGo操作仓库） 进入GitHub的「Settings → Developer settings → Personal access tokens」，选择**「Generate new token (classic)」**（重点！选“classic”，新版token可能导致PicGo无权访问）： 权限配置：勾选「repo」分类下的所有权限（确保PicGo能上传/管理图片）： 生成Token后立即保存（刷新页面后无法找回）。 3. 配置PicGo（将图片上传到GitHub） 打开PicGo，在左侧选择「图床设置 → GitHub图床」。\n关键参数填写（重点是「自定义域名」，根据需求二选一）：\n海外服务器/需科学上网：\n1https://raw.githubusercontent.com/你的用户名/你的仓库名/refs/heads/你的分支名/ 国内服务器（加速访问）：\n1https://cdn.jsdelivr.net/gh/你的账户名/你的仓库名@你的分支名/ 其他参数：依次填写「GitHub用户名」「仓库名」「分支名（默认main）」「刚才保存的Token」，最后点击「确定」并设为默认图床。\n4. 关联Typora（实现“截图即上传”） 打开Typora，进入「文件 → 偏好设置 → 图像」。\n配置如下（参考图片）： 勾选「插入图片时自动上传」 上传服务选择「PicGo」 「PicGo路径」选择本地的「PicGo.exe」文件（如D:\\PicGo\\PicGo.exe） 点击「验证图片上传选项」，提示“成功”即配置完成。\n四、测试验证 用Windows截图快捷键 Win + Shift + S 截取任意内容。 切换到Typora，按下 Ctrl+V 粘贴。 若PicGo左下角弹出「上传成功」通知，且Typora中显示图片（而非本地路径），则图床搭建成功！ 后记：为什么选GitHub而非国内OSS？ 我的WordPress强制开启了HTTPS，而七牛云等国内免费OSS提供的域名多为HTTP，需额外申请SSL证书（且需国内备案域名），流程繁琐。\nGitHub自带HTTPS，无需备案且完全免费，虽国内访问速度略慢，但可通过「jsdelivr CDN」加速；若追求更稳定的国内访问，也可替换为Gitee仓库（操作流程一致）。\n举一反三：手机端图床方案 学会PC端后，手机端可通过以下组合实现“随时随地写博客”：\n编辑器：Obsidian（支持Markdown，多端同步） 图床工具：Pichoro（手机端GitHub图床上传工具，下载渠道，可通过官网或应用商店获取） 操作逻辑：手机截图后，用Pichoro上传图片，自动生成Markdown链接，复制到Obsidian即可编辑。 如果搭建过程中有任何疑问，欢迎在评论区留言，我会尽快回复；也欢迎各位大佬指正疏漏，共同完善方案！\n","permalink":"https://tech.jamaisvu.cn/posts/%E5%9B%BE%E5%BA%8A%E6%9C%8D%E5%8A%A1%E4%BF%9D%E5%A7%86%E7%BA%A7%E6%95%99%E7%A8%8B-2025%E7%99%BD%E5%AB%96github-%E5%BD%BB%E5%BA%95%E9%87%8A%E6%94%BE%E6%9C%AC%E5%9C%B0%E7%A9%BA%E9%97%B4/","summary":"\u003cp\u003e\u003cimg alt=\"1756602474703.gif\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/refs/heads/img//1756602474703.gif\"\u003e\u003c/p\u003e\n\u003cp\u003e还在手忙脚乱地在服务器和客户端之间传图片？还在为博客图片引用失效而头疼？其实这些都多余了！\u003c/p\u003e\n\u003cp\u003e拥有图床服务，就等于拥有了一个多端同步的媒体库——不仅能存图片，还能存GIF、PDF、文本文件等。写博客时无需纠结复杂格式，只需掌握简单的Markdown语法，就能快速搭建便捷又优雅的写作环境。\u003c/p\u003e\n\u003ch2 id=\"正文\"\u003e正文\u003c/h2\u003e\n\u003ch3 id=\"一环境准备\"\u003e一、环境准备\u003c/h3\u003e\n\u003cp\u003e本次搭建需用到以下工具，点击名称可直接跳转至对应下载/官网页面：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePicGo\u003c/strong\u003e：图床上传工具，\u003ca href=\"https://github.com/Molunerfinn/PicGo\"\u003eGitHub官方仓库（可下载最新版）\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGitHub仓库\u003c/strong\u003e：用于存储图片的免费云端空间\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTypora\u003c/strong\u003e：Markdown编辑器，\u003ca href=\"https://typora.io/\"\u003e官方下载链接\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWordPress\u003c/strong\u003e：博客发布平台（可选，也可适配其他平台）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"二最终实现效果\"\u003e二、最终实现效果\u003c/h3\u003e\n\u003cp\u003e截图后按下 \u003ccode\u003eCtrl+C\u003c/code\u003e 复制，再到Typora中 \u003ccode\u003eCtrl+V\u003c/code\u003e 粘贴，即可自动生成「Markdown语法+图片URL」的内容；发布时全选Typora内容，复制到博客发布页，一键完成发布。\u003c/p\u003e\n\u003ch3 id=\"三详细搭建步骤\"\u003e三、详细搭建步骤\u003c/h3\u003e\n\u003ch4 id=\"1-创建github仓库存储图片的云端硬盘\"\u003e1. 创建GitHub仓库（存储图片的“云端硬盘”）\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003e登录GitHub，新建仓库，配置参考下图： \u003ca href=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/main/1756604369017.jpg\"\u003e\u003cimg alt=\"1756604369017.jpg\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/refs/heads/img//1756604369017.jpg\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e关键注意\u003c/strong\u003e：仓库必须设置为「Public」，否则图片外链无法公开访问。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"2-创建github-token授权picgo操作仓库\"\u003e2. 创建GitHub Token（授权PicGo操作仓库）\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003e进入GitHub的「Settings → Developer settings → Personal access tokens」，选择**「Generate new token (classic)」**（重点！选“classic”，新版token可能导致PicGo无权访问）： \u003ca href=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/main/1756604774712.jpg\"\u003e\u003cimg alt=\"1756604774712.jpg\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/refs/heads/img//1756604774712.jpg\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e权限配置：勾选「repo」分类下的所有权限（确保PicGo能上传/管理图片）： \u003ca href=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/main/1756604774720.jpg\"\u003e\u003cimg alt=\"1756604774720.jpg\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/refs/heads/img//1756604774720.jpg\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e生成Token后\u003cstrong\u003e立即保存\u003c/strong\u003e（刷新页面后无法找回）。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"3-配置picgo将图片上传到github\"\u003e3. 配置PicGo（将图片上传到GitHub）\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e打开\u003ca href=\"https://github.com/Molunerfinn/PicGo\"\u003ePicGo\u003c/a\u003e，在左侧选择「图床设置 → GitHub图床」。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e关键参数填写（重点是「自定义域名」，根据需求二选一）：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e海外服务器/需科学上网\u003c/strong\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\u003c/span\u003e\u003cspan\u003ehttps://raw.githubusercontent.com/你的用户名/你的仓库名/refs/heads/你的分支名/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e国内服务器（加速访问）\u003c/strong\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\u003c/span\u003e\u003cspan\u003ehttps://cdn.jsdelivr.net/gh/你的账户名/你的仓库名@你的分支名/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e其他参数：依次填写「GitHub用户名」「仓库名」「分支名（默认main）」「刚才保存的Token」，最后点击「确定」并设为默认图床。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"4-关联typora实现截图即上传\"\u003e4. 关联Typora（实现“截图即上传”）\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e打开\u003ca href=\"https://typora.io/\"\u003eTypora\u003c/a\u003e，进入「文件 → 偏好设置 → 图像」。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e配置如下（参考图片）： \u003ca href=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/main/1756606125506.png\"\u003e\u003cimg alt=\"1756606125506.png\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO/refs/heads/img//1756606125506.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e勾选「插入图片时自动上传」\u003c/li\u003e\n\u003cli\u003e上传服务选择「PicGo」\u003c/li\u003e\n\u003cli\u003e「PicGo路径」选择本地的「PicGo.exe」文件（如\u003ccode\u003eD:\\PicGo\\PicGo.exe\u003c/code\u003e）\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e点击「验证图片上传选项」，提示“成功”即配置完成。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"四测试验证\"\u003e四、测试验证\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e用Windows截图快捷键 \u003ccode\u003eWin + Shift + S\u003c/code\u003e 截取任意内容。\u003c/li\u003e\n\u003cli\u003e切换到Typora，按下 \u003ccode\u003eCtrl+V\u003c/code\u003e 粘贴。\u003c/li\u003e\n\u003cli\u003e若PicGo左下角弹出「上传成功」通知，且Typora中显示图片（而非本地路径），则图床搭建成功！\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"后记为什么选github而非国内oss\"\u003e后记：为什么选GitHub而非国内OSS？\u003c/h2\u003e\n\u003cp\u003e我的WordPress强制开启了HTTPS，而七牛云等国内免费OSS提供的域名多为HTTP，需额外申请SSL证书（且需国内备案域名），流程繁琐。\u003cbr\u003e\nGitHub自带HTTPS，无需备案且完全免费，虽国内访问速度略慢，但可通过「jsdelivr CDN」加速；若追求更稳定的国内访问，也可替换为Gitee仓库（操作流程一致）。\u003c/p\u003e","title":"图床服务保姆级教程 2025白嫖github 彻底释放本地空间!"},{"content":"\n引言： 为什么需要给 WordPress 套反向代理？\n有朋友可能会疑惑：WordPress 本身能设置站点 URL 和端口，为什么还要多此一举用反向代理？\n核心原因很简单——避免 80/443 端口被博客独占。公网访问中，80（HTTP）和 443（HTTPS）是默认端口，若直接给 WordPress 用，后续想部署其他项目（如个人网盘、后台管理系统）就无法通过二级域名（如 drive.example.com ）复用这两个端口。而用 Nginx Proxy Manager（简称 NPM）做反向代理，能统一管理所有入站流量，通过不同二级域名分配端口，更灵活高效。\n📌 说明：本文是博主第一篇技术博客，内容偏向新手友好，若有技术疏漏，欢迎各位大佬留言指正！\n一、前置准备：环境与基础要求 在开始前，先确认你的环境是否符合以下条件（仅供参考，非强制但推荐）：\n部署环境：Nginx Proxy Manager（NPM）与 WordPress（WP）部署在同一台服务器 容器工具：两者均通过 Docker Compose 部署（需提前安装 Docker 和 Docker Compose，参考 Docker 官方安装指南） 网络环境：服务器已具备公网 IP，且开放必要端口（80、443、81），支持公网访问 二、步骤 1：Docker 配置（端口映射 + 容器网络） 这一步的核心是：让 NPM 和 WordPress 容器能互相通信，同时避免端口冲突。\n1.1 配置容器端口映射（关键！） WordPress 容器有个特殊限制：容器内部必须使用 80 端口（否则无法通过 主机IP:端口 访问安装界面），因此需在 docker-compose.yml 中指定「宿主机端口:容器 80 端口」，宿主机端口可自定义（如 8000）。\n示例：WordPress 端口映射配置\nWordPress 的 docker-compose.yml 片段 1services: 2 wordpress: 3 image: wordpress:latest # 推荐使用官方最新镜像 4 ports: 5 - \u0026#34;8000:80\u0026#34; # 宿主机 8000 端口 → 容器 80 端口（宿主机端口可改，容器端必须是 80） 6 # 其他配置（如数据库链接、 volumes 等）省略，需自行补充 Nginx Proxy Manager 端口映射配置\nNPM 需要两个关键端口：81 端口（管理界面）、443 端口（HTTPS 访问），配置如下：\nNPM 的 docker-compose.yml 片段 1services: 2 nginx-proxy-manager: 3 image: jc21/nginx-proxy-manager:latest # 官方镜像 4 ports: 5 - \u0026#34;80:80\u0026#34; # HTTP 流量入口（必须，用于 SSL 验证） 6 - \u0026#34;81:81\u0026#34; # NPM 管理界面端口（宿主机 81 端口，可自定义） 7 - \u0026#34;443:443\u0026#34; # HTTPS 流量入口（必须） 8 # 其他配置（如 volumes、环境变量）省略，需自行补充 ⚠️ 注意：配置后需开放服务器安全组/防火墙的 80、443、81 端口，否则外部无法访问。\n1.2 创建 Docker 外部网络（容器间通信） 默认情况下，不同 Compose 项目的容器无法互相访问，需创建一个「外部网络」，让 NPM 和 WordPress 加入同一网络，后续可通过「容器名」直接通信（无需记复杂的容器 IP）。 执行命令创建外部网络 命令格式：docker network create 网络名（自定义，如 my-external-net） docker network create my-external-net\n在 Compose 中关联外部网络 分别在 WordPress 和 NPM 的 docker-compose.yml 中添加网络配置，确保两者加入同一网络：\n通用示例（WordPress 和 NPM 的 Compose 都需添加此配置） 1version: \u0026#39;3\u0026#39; 2networks: 3 my-external-net: # 必须与命令创建的网络名完全一致 4 external: true # 关键：声明这是外部网络，不自动创建/删除 5services: 6 ##### WordPress 或 NPM 的服务配置 7 服务名（如 wordpress 或 nginx-proxy-manager）: 8 image: 镜像名（如 wordpress:latest 或 jc21/nginx-proxy-manager:latest） 9 networks: 10 - my-external-net # 让当前容器加入外部网络 11 # 其他配置（ports、volumes 等）省略 验证网络是否生效 执行以下命令，检查 NPM 和 WordPress 容器是否在同一网络：\n查看指定网络下的所有容器 `docker network inspect my-external-net | grep \u0026ldquo;Name\u0026rdquo;\n若输出中包含两者的容器名（如 wordpress_wordpress_1 、 npm_nginx-proxy-manager_1 ），则配置成功。\n三、步骤 2：Nginx Proxy Manager 配置（SSL 证书 + 反向代理） 这一步是核心：通过 NPM 申请免费 SSL 证书，并将 https://blog.example.com 反向代理到 WordPress 的容器端口。\n2.1 访问 NPM 管理界面 在浏览器输入 http://服务器公网IP:81 ，进入 NPM 登录界面（默认账号： admin@example.com ，密码： changeme ，首次登录需修改密码）。\n2.2 申请免费 SSL 证书 左侧菜单栏点击「SSL Certificates」→ 右上角「Add SSL Certificate」； 选择「Let\u0026rsquo;s Encrypt」（免费证书，有效期 90 天，NPM 可自动续期）； 填写「Domain Names」：输入你的二级域名（如 blog.example.com ）； 勾选「I agree to the Let\u0026rsquo;s Encrypt Terms of Service」，点击「Save」； 等待验证通过（需确保域名已解析到服务器公网 IP），证书会自动保存。 📚 参考：若证书申请失败，可查看 NPM 官方 SSL 配置指南。\n2.3 配置反向代理规则 左侧菜单栏点击「Hosts」→「Proxy Hosts」→ 右上角「Add Proxy Host」； 填写核心配置（按以下要求准确输入）：\n配置项 内容说明\nDomain Names 输入你的博客二级域名（如 blog.example.com ）\nScheme 选择「http」（因为 WordPress 容器内部用 80 端口，走 HTTP 协议）\nForward Hostname / IP 输入 WordPress 的容器名（如 wordpress_wordpress_1 ，可通过 docker ps 查看）\nForward Port 输入 WordPress 容器的端口（固定为 80，因为容器内部用 80 端口） 切换到「SSL」标签页，在「SSL Certificate」中选择刚才申请的证书，勾选「Force SSL」（强制 HTTPS 访问）； 点击「Save」，反向代理规则生效。\n四、步骤 3：WordPress 核心配置（wp-config.php） 最后一步：告诉 WordPress 「你的公网访问地址」，否则会出现样式错乱、登录跳转失败等问题。\n3.1 找到 wp-config.php 文件 通过 Docker volumes 找到 WordPress 的配置文件，路径通常为：\n示例路径（根据你的 Compose volumes 配置调整） /宿主机挂载目录/wordpress/wp-config.php\n3.2 编辑配置文件 用文本编辑器打开 wp-config.php ，在文件末尾（ require_once(ABSPATH . \u0026lsquo;wp-settings.php\u0026rsquo;); 之前）添加以下代码：\n1// 定义 WordPress 核心文件访问地址（如 wp-admin、wp-includes） 2define(\u0026#39;WP_SITEURL\u0026#39;, \u0026#39;https://blog.example.com\u0026#39;); 3// 定义网站前台首页访问地址（通常与 WP_SITEURL 一致，除非有特殊需求） 4define(\u0026#39;WP_HOME\u0026#39;, \u0026#39;https://blog.example.com\u0026#39;); 5 6// 可选：解决反向代理下的 IP 识别问题（避免评论、登录记录错误 IP） 7if (isset($_SERVER[\u0026#39;HTTP_X_FORWARDED_FOR\u0026#39;])) { 8 $_SERVER[\u0026#39;REMOTE_ADDR\u0026#39;] = $_SERVER[\u0026#39;HTTP_X_FORWARDED_FOR\u0026#39;]; 9} ⚠️ 注意：将 https://blog.example.com 替换为你的实际域名，保存文件后无需重启容器，配置立即生效。\n五、验证结果与常见问题 5.1 验证访问 在浏览器输入 https://blog.example.com ，若能正常打开 WordPress 首页，且后台（ https://blog.example.com/wp-admin ）可正常登录，说明配置成功！此时 80/443 端口仍可通过其他二级域名（如 drive.example.com ）分配给其他项目。\n5.2 常见问题排查 NPM 无法访问 WordPress 容器？ 检查两者是否在同一外部网络（参考步骤 1.2.3）； 确认「Forward Hostname」填写的是 WordPress 容器名（而非 IP），容器名可通过 docker ps 查看。 WordPress 样式错乱/图片加载失败？ 检查 wp-config.php 中的 WP_SITEURL 和 WP_HOME 是否为 HTTPS 地址； 若之前用 IP:8000 访问过 WordPress，需在数据库中替换旧地址（可安装插件 Better Search Replace，搜索 http://服务器IP:8000 替换为 https://blog.example.com ）。 SSL 证书申请失败？ 确认域名已正确解析到服务器公网 IP； 检查服务器 80 端口是否开放（Let\u0026rsquo;s Encrypt 需通过 80 端口验证域名所有权）。 结语 通过以上步骤，你已经实现了用 Nginx Proxy Manager 反向代理 WordPress，既避免了 80/443 端口被独占，又能通过二级域名灵活管理多个项目。\n如果遇到其他问题，欢迎在评论区留言！我会尽快回复并协助排查，也期待各位大佬分享更优的配置方案～ ","permalink":"https://tech.jamaisvu.cn/posts/%E7%94%A8nginx-proxy-manager%E4%B8%BAwordpress%E7%AB%99%E7%82%B9%E8%AE%BE%E7%BD%AE%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/","summary":"\u003cp\u003e\u003cimg alt=\"image-20250906041322774\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/grayfalcon666/OSS-FOR-PICGO2/refs/heads/main//image-20250906041322774.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"引言\"\u003e引言：\u003c/h2\u003e\n\u003cp\u003e为什么需要给 WordPress 套反向代理？\u003c/p\u003e\n\u003cp\u003e有朋友可能会疑惑：WordPress 本身能设置站点 URL 和端口，为什么还要多此一举用反向代理？\u003c/p\u003e\n\u003cp\u003e核心原因很简单——避免 80/443 端口被博客独占。公网访问中，80（HTTP）和 443（HTTPS）是默认端口，若直接给 WordPress 用，后续想部署其他项目（如个人网盘、后台管理系统）就无法通过二级域名（如 drive.example.com ）复用这两个端口。而用 Nginx Proxy Manager（简称 NPM）做反向代理，能统一管理所有入站流量，通过不同二级域名分配端口，更灵活高效。\u003c/p\u003e\n\u003cp\u003e📌 说明：本文是博主第一篇技术博客，内容偏向新手友好，若有技术疏漏，欢迎各位大佬留言指正！\u003c/p\u003e\n\u003ch2 id=\"一前置准备环境与基础要求\"\u003e一、前置准备：环境与基础要求\u003c/h2\u003e\n\u003cp\u003e在开始前，先确认你的环境是否符合以下条件（仅供参考，非强制但推荐）：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e部署环境：Nginx Proxy Manager（NPM）与 WordPress（WP）部署在同一台服务器\u003c/li\u003e\n\u003cli\u003e容器工具：两者均通过 Docker Compose 部署（需提前安装 Docker 和 Docker Compose，参考 Docker 官方安装指南）\u003c/li\u003e\n\u003cli\u003e网络环境：服务器已具备公网 IP，且开放必要端口（80、443、81），支持公网访问\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"二步骤-1docker-配置端口映射--容器网络\"\u003e二、步骤 1：Docker 配置（端口映射 + 容器网络）\u003c/h2\u003e\n\u003cp\u003e这一步的核心是：让 NPM 和 WordPress 容器能互相通信，同时避免端口冲突。\u003c/p\u003e\n\u003ch3 id=\"11-配置容器端口映射关键\"\u003e1.1 配置容器端口映射（关键！）\u003c/h3\u003e\n\u003cp\u003eWordPress 容器有个特殊限制：容器内部必须使用 80 端口（否则无法通过 主机IP:端口 访问安装界面），因此需在 docker-compose.yml 中指定「宿主机端口:容器 80 端口」，宿主机端口可自定义（如 8000）。\u003c/p\u003e\n\u003cp\u003e示例：WordPress 端口映射配置\u003c/p\u003e\n\u003ch5 id=\"wordpress-的-docker-composeyml-片段\"\u003eWordPress 的 docker-compose.yml 片段\u003c/h5\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-yml\" data-lang=\"yml\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\u003c/span\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eservices\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\u003c/span\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ewordpress\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\u003c/span\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eimage\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ewordpress:latest \u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 推荐使用官方最新镜像\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\u003c/span\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003eports\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e5\u003c/span\u003e\u003cspan\u003e      - \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;8000:80\u0026#34;\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# 宿主机 8000 端口 → 容器 80 端口（宿主机端口可改，容器端必须是 80）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e6\u003c/span\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# 其他配置（如数据库链接、 volumes 等）省略，需自行补充\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNginx Proxy Manager 端口映射配置\u003c/p\u003e","title":"用Nginx Proxy Manager为WordPress站点设置反向代理"}]