<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Harry&#39;s Blog</title>
    <link>https://sudo-djug.xyz/posts/</link>
    <description>Recent content in Posts on Harry&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 15 Mar 2026 00:00:00 +0800</lastBuildDate>
    <atom:link href="https://sudo-djug.xyz/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>近期技术折腾小结</title>
      <link>https://sudo-djug.xyz/posts/2026-03-15-recent-tech-notes/</link>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2026-03-15-recent-tech-notes/</guid>
      <description>&lt;h1 id=&#34;近期技术折腾小结&#34;&gt;近期技术折腾小结&lt;/h1&gt;
&lt;p&gt;好久没写博客了，趁今天有空，把最近半年折腾的东西记录一下。&lt;/p&gt;
&lt;h6 id=&#34;博客迁移&#34;&gt;博客迁移&lt;/h6&gt;
&lt;p&gt;把原来的 &lt;em&gt;Hexo&lt;/em&gt; 博客迁移到了 &lt;em&gt;Hugo&lt;/em&gt;，主题用的 &lt;em&gt;PaperMod&lt;/em&gt;。迁移的主要原因是 &lt;em&gt;Hugo&lt;/em&gt; 构建速度更快，主题也更简洁。整个过程比想象中顺利，文章都是 &lt;em&gt;Markdown&lt;/em&gt;，迁移成本低。&lt;/p&gt;
&lt;h6 id=&#34;mcp协议&#34;&gt;MCP协议&lt;/h6&gt;
&lt;p&gt;最近 &lt;em&gt;MCP&lt;/em&gt;（Model Context Protocol）很火，尝试给自托管的 &lt;em&gt;Dify&lt;/em&gt; 接了几个 &lt;em&gt;MCP Server&lt;/em&gt;，比如文件系统访问、网页搜索、数据库查询。Agent 的能力边界确实因此扩展了不少。&lt;/p&gt;
&lt;h6 id=&#34;新玩具&#34;&gt;新玩具&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;入了一台 &lt;em&gt;Orange Pi 5 Plus&lt;/em&gt;，打算用来替代 &lt;em&gt;N100&lt;/em&gt; 跑一些轻量服务&lt;/li&gt;
&lt;li&gt;试了 &lt;em&gt;Claude Code&lt;/em&gt;，写代码和改配置的效率提升明显&lt;/li&gt;
&lt;li&gt;把家里的网络升级到了 &lt;em&gt;2.5G&lt;/em&gt; 内网，NAS 传输速度翻倍&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;折腾技术这件事，乐趣在于过程本身。不求成为专家，但求每个工具都能物尽其用。继续折腾，继续记录。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我的自托管工具箱</title>
      <link>https://sudo-djug.xyz/posts/2025-10-20-selfhost-toolbox/</link>
      <pubDate>Mon, 20 Oct 2025 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2025-10-20-selfhost-toolbox/</guid>
      <description>&lt;h1 id=&#34;我的自托管工具箱&#34;&gt;我的自托管工具箱&lt;/h1&gt;
&lt;p&gt;这几年陆陆续续自托管了不少服务，今天做个小结，记录一下目前在跑的工具和它们的用途。&lt;/p&gt;
&lt;h6 id=&#34;基础设施层&#34;&gt;基础设施层&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;OpenWrt&lt;/em&gt; 软路由&lt;/strong&gt;：网络入口，&lt;em&gt;AdGuard&lt;/em&gt; 去广告，&lt;em&gt;SmartDNS&lt;/em&gt; 加速&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;OMV&lt;/em&gt; NAS&lt;/strong&gt;：文件存储、相册备份、影音中心&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Proxmox VE&lt;/em&gt;&lt;/strong&gt;：虚拟化平台，上面跑了几个 &lt;em&gt;LXC&lt;/em&gt; 容器&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id=&#34;应用层&#34;&gt;应用层&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Home Assistant&lt;/em&gt;&lt;/strong&gt;：智能家居中枢&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;n8n&lt;/em&gt;&lt;/strong&gt;：自动化工作流&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Ollama + Dify&lt;/em&gt;&lt;/strong&gt;：本地大模型和 Agent 平台&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Immich&lt;/em&gt;&lt;/strong&gt;：照片管理，替代 Google Photos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Memos&lt;/em&gt;&lt;/strong&gt;：轻量级碎片化笔记&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id=&#34;开发运维层&#34;&gt;开发/运维层&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Gitea&lt;/em&gt;&lt;/strong&gt;：私有代码托管&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Uptime Kuma&lt;/em&gt;&lt;/strong&gt;：服务监控，挂掉会发 &lt;em&gt;Telegram&lt;/em&gt; 提醒&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Portainer&lt;/em&gt;&lt;/strong&gt;：&lt;em&gt;Docker&lt;/em&gt; 容器可视化管理&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;所有服务都跑在一台 &lt;em&gt;J4125&lt;/em&gt; 和一台 &lt;em&gt;N100&lt;/em&gt; 小主机上，总功耗不到 30W。自托管虽然花时间维护，但数据主权和定制化程度是在线服务没法比的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用Dify搭建个人AI Agent</title>
      <link>https://sudo-djug.xyz/posts/2025-05-04-dify-ai-agent/</link>
      <pubDate>Sun, 04 May 2025 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2025-05-04-dify-ai-agent/</guid>
      <description>&lt;h1 id=&#34;用dify搭建个人ai-agent&#34;&gt;用Dify搭建个人AI Agent&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Dify&lt;/em&gt; 是一个开源的 &lt;em&gt;LLM&lt;/em&gt; 应用开发平台，最近体验了一下，搭建个人 &lt;em&gt;Agent&lt;/em&gt; 比从零写代码省事太多。&lt;/p&gt;
&lt;p&gt;部署用的 &lt;em&gt;Docker Compose&lt;/em&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/langgenius/dify.git
cd dify/docker
docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认会用 &lt;em&gt;OpenAI&lt;/em&gt; 的 API，但我在设置里改成了本地 &lt;em&gt;Ollama&lt;/em&gt; 的地址，这样就可以完全离线使用了。&lt;/p&gt;
&lt;p&gt;目前搭了几个小助手：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;技术文档总结助手&lt;/strong&gt;：把长文档丢进去，自动提取关键信息生成摘要&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shell命令生成器&lt;/strong&gt;：描述需求，自动生成可执行的命令并解释原理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日报生成器&lt;/strong&gt;：读取 &lt;em&gt;Notion&lt;/em&gt; 里的今日笔记，自动整理成结构化日报&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id=&#34;比直接调api的优势&#34;&gt;比直接调API的优势&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;有可视化的 &lt;em&gt;Prompt&lt;/em&gt; 编排界面&lt;/li&gt;
&lt;li&gt;内置 &lt;em&gt;RAG&lt;/em&gt; 知识库，可以挂载自己的文档&lt;/li&gt;
&lt;li&gt;工作流模式支持多步骤 &lt;em&gt;Agent&lt;/em&gt; 协作&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;AI Agent&lt;/em&gt; 的方向确实是趋势，未来应该会把更多日常事务交给 Agent 处理。Dify 作为入门平台很合适，等更复杂的需求再考虑自己写框架。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ollama本地大模型体验</title>
      <link>https://sudo-djug.xyz/posts/2024-11-30-ollama-local-llm/</link>
      <pubDate>Sat, 30 Nov 2024 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2024-11-30-ollama-local-llm/</guid>
      <description>&lt;h1 id=&#34;ollama本地大模型体验&#34;&gt;Ollama本地大模型体验&lt;/h1&gt;
&lt;p&gt;大模型越来越火，但在线服务要么收费、要么有隐私顾虑。发现 &lt;em&gt;Ollama&lt;/em&gt; 之后，本地跑大模型变得异常简单。&lt;/p&gt;
&lt;p&gt;安装就是一条命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;装完之后拉模型：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ollama pull qwen2.5:7b
ollama run qwen2.5:7b
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;7B&lt;/em&gt; 模型在我的 &lt;em&gt;3060 12G&lt;/em&gt; 上跑得很流畅，推理速度大概 20 tokens/s，日常问答完全够用。又试了 &lt;em&gt;llama3.1:8b&lt;/em&gt; 和 &lt;em&gt;deepseek-coder:6.7b&lt;/em&gt;，后者写代码辅助效果不错。&lt;/p&gt;
&lt;h6 id=&#34;配合其他工具使用&#34;&gt;配合其他工具使用&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Open WebUI&lt;/em&gt;：给 Ollama 套一个漂亮的 Web 界面&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Continue.dev&lt;/em&gt;：在 VS Code 里直接调用本地模型补全代码&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Dify&lt;/em&gt;：后面打算接进去做 &lt;em&gt;Agent&lt;/em&gt; 的底层模型&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;本地跑模型的优势是隐私和可控，劣势是参数量受限。不过日常任务 &lt;em&gt;7B-13B&lt;/em&gt; 的模型已经能应付大部分场景了。算力平民化的时代真的来了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Home Assistant智能家居折腾记</title>
      <link>https://sudo-djug.xyz/posts/2024-06-08-home-assistant-setup/</link>
      <pubDate>Sat, 08 Jun 2024 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2024-06-08-home-assistant-setup/</guid>
      <description>&lt;h1 id=&#34;home-assistant智能家居折腾记&#34;&gt;Home Assistant智能家居折腾记&lt;/h1&gt;
&lt;p&gt;家里陆陆续续买了一些智能设备，但每个品牌都有自己的 App，控制起来很分散。终于下定决心部署 &lt;em&gt;Home Assistant&lt;/em&gt;，把所有设备统一接进来。&lt;/p&gt;
&lt;p&gt;硬件用的是之前闲置的 &lt;em&gt;N100&lt;/em&gt; 小主机，系统是 &lt;em&gt;Home Assistant OS&lt;/em&gt;，直接刷镜像启动，省心。&lt;/p&gt;
&lt;p&gt;目前接入的设备：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;米家&lt;/em&gt; 系列（通过 &lt;em&gt;Xiaomi MIoT&lt;/em&gt; 集成）&lt;/li&gt;
&lt;li&gt;&lt;em&gt;飞利浦&lt;/em&gt; 智能灯泡（&lt;em&gt;Zigbee&lt;/em&gt; 网关）&lt;/li&gt;
&lt;li&gt;&lt;em&gt;扫地机器人&lt;/em&gt;（&lt;em&gt;Roborock&lt;/em&gt; 集成）&lt;/li&gt;
&lt;li&gt;&lt;em&gt;NAS&lt;/em&gt; 状态监控（&lt;em&gt;Synology&lt;/em&gt; 集成）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最喜欢的是自动化功能。设置了一个&amp;quot;晚安模式&amp;quot;：晚上 11 点后，如果客厅灯还亮着，自动关闭所有灯光、开启扫地机器人、把空调调到睡眠模式。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;有点后悔没早点搞。HA 的社区生态非常强大，几乎什么设备都有对应的集成。下一步想加个人体传感器，做个更智能的&amp;quot;人在传感器&amp;quot;逻辑。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用n8n搭建个人自动化工作流</title>
      <link>https://sudo-djug.xyz/posts/2024-01-14-n8n-automation/</link>
      <pubDate>Sun, 14 Jan 2024 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2024-01-14-n8n-automation/</guid>
      <description>&lt;h1 id=&#34;用n8n搭建个人自动化工作流&#34;&gt;用n8n搭建个人自动化工作流&lt;/h1&gt;
&lt;p&gt;每天要花不少时间处理一些重复性事务，比如备份RSS订阅、整理记账数据、发送定时提醒。最近发现了 &lt;em&gt;n8n&lt;/em&gt;，一个开源的自动化工作流工具，图形化拖拽就能搭建流程。&lt;/p&gt;
&lt;p&gt;部署很简单，&lt;em&gt;Docker&lt;/em&gt; 一行命令搞定：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目前搭了几个实用的小流程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每天早上 8 点抓取 &lt;em&gt;GitHub Trending&lt;/em&gt;，把 &lt;em&gt;Python&lt;/em&gt; 和 &lt;em&gt;Go&lt;/em&gt; 的项目推送到 &lt;em&gt;Telegram&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;RSS&lt;/em&gt; 源有新文章时，自动归档到 &lt;em&gt;Notion&lt;/em&gt; 数据库&lt;/li&gt;
&lt;li&gt;每月 1 号生成上月的服务器流量报告，邮件发送给自己&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id=&#34;相比其他工具的优势&#34;&gt;相比其他工具的优势&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;开源免费，数据存在本地&lt;/li&gt;
&lt;li&gt;节点丰富，支持 &lt;em&gt;HTTP Request&lt;/em&gt;、数据库、各种 &lt;em&gt;SaaS&lt;/em&gt; 服务&lt;/li&gt;
&lt;li&gt;错误处理和重试机制做得不错&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;自动化虽然前期搭建花时间，但跑起来之后真的可以省下很多精力。打算再研究一下 &lt;em&gt;n8n&lt;/em&gt; 的 &lt;em&gt;Webhook&lt;/em&gt; 功能，把更多外部服务接进来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地部署Stable Diffusion</title>
      <link>https://sudo-djug.xyz/posts/2023-07-22-stable-diffusion-local/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2023-07-22-stable-diffusion-local/</guid>
      <description>&lt;h1 id=&#34;本地部署stable-diffusion&#34;&gt;本地部署Stable Diffusion&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;AI&lt;/em&gt; 绘画火了大半年，一直在用在线版，但免费额度总是不够用。趁着显卡降价，入了一块 &lt;em&gt;RTX 3060 12G&lt;/em&gt;，决定本地部署 &lt;em&gt;Stable Diffusion WebUI&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;部署用的是 &lt;a href=&#34;https://github.com/AUTOMATIC1111/stable-diffusion-webui&#34;&gt;AUTOMATIC1111&lt;/a&gt; 的版本，克隆仓库之后运行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./webui.sh --xformers
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第一次启动会自动下载模型，大概 4GB 左右，耐心等待即可。&lt;/p&gt;
&lt;p&gt;生成一张 512x512 的图片大概 3-5 秒，比在线版快多了。试了几个热门的 &lt;em&gt;Checkpoint&lt;/em&gt; 模型和 &lt;em&gt;LoRA&lt;/em&gt;，效果确实惊艳。&lt;/p&gt;
&lt;h6 id=&#34;显存优化小贴士&#34;&gt;显存优化小贴士&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;开启 &lt;code&gt;--xformers&lt;/code&gt; 可以节省显存&lt;/li&gt;
&lt;li&gt;高分辨率图用 &lt;em&gt;Hires.fix&lt;/em&gt; 分步生成&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ControlNet&lt;/em&gt; 插件功能很强，但需要额外显存&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;本地跑 AI 的感觉很奇妙，算力掌握在自己手里。接下来想研究一下 &lt;em&gt;ComfyUI&lt;/em&gt; 的工作流模式，据说更灵活。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitHub Actions自动化部署初体验</title>
      <link>https://sudo-djug.xyz/posts/2023-02-18-github-actions-deploy/</link>
      <pubDate>Sat, 18 Feb 2023 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2023-02-18-github-actions-deploy/</guid>
      <description>&lt;h1 id=&#34;github-actions自动化部署初体验&#34;&gt;GitHub Actions自动化部署初体验&lt;/h1&gt;
&lt;p&gt;之前每次改完博客都要手动 &lt;em&gt;build&lt;/em&gt; 再 &lt;em&gt;rsync&lt;/em&gt; 到服务器，步骤虽然不多，但重复多了也烦。今天学习了一下 &lt;em&gt;GitHub Actions&lt;/em&gt;，把部署流程自动化了。&lt;/p&gt;
&lt;p&gt;核心思路很简单：代码 &lt;em&gt;push&lt;/em&gt; 到 &lt;em&gt;main&lt;/em&gt; 分支 → 触发 &lt;em&gt;workflow&lt;/em&gt; → 执行 &lt;em&gt;hugo&lt;/em&gt; 构建 → &lt;em&gt;rsync&lt;/em&gt; 到 &lt;em&gt;VPS&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt; 的关键配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: peaceiris/actions-hugo@v2
      - run: hugo --minify
      - run: rsync -avz ./public/ user@host:/var/www/...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;踩了一个坑：&lt;em&gt;rsync&lt;/em&gt; 需要 &lt;em&gt;SSH&lt;/em&gt; 密钥，要把私钥存到仓库的 &lt;em&gt;Secrets&lt;/em&gt; 里，然后在 workflow 里引用。一开始密钥格式没弄对，报错 &lt;em&gt;Load key invalid format&lt;/em&gt;，后来删掉多余的换行才解决。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;现在每次写完文章，&lt;em&gt;git push&lt;/em&gt; 之后等一分钟，网站就自动更新了。自动化果然是第一生产力。&lt;/p&gt;</description>
    </item>
    <item>
      <title>家用软路由折腾记</title>
      <link>https://sudo-djug.xyz/posts/2022-09-05-home-router-selfhost/</link>
      <pubDate>Mon, 05 Sep 2022 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2022-09-05-home-router-selfhost/</guid>
      <description>&lt;h1 id=&#34;家用软路由折腾记&#34;&gt;家用软路由折腾记&lt;/h1&gt;
&lt;p&gt;运营商送的路由器越来越不好用了，广告多、功能少、还时不时断流。一咬牙在某鱼淘了一台二手 &lt;em&gt;J4125&lt;/em&gt; 小主机，打算自己搭软路由。&lt;/p&gt;
&lt;p&gt;系统选的是 &lt;em&gt;OpenWrt&lt;/em&gt;，刷的是 &lt;em&gt;Lean&lt;/em&gt; 大佬的源码编译版。刷机过程比想象中顺利，用 &lt;em&gt;BalenaEtcher&lt;/em&gt; 把镜像写到 U 盘，插上去启动，进 &lt;em&gt;BIOS&lt;/em&gt; 设置硬盘启动顺序就行。&lt;/p&gt;
&lt;p&gt;装好之后的几个常用配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;网络 → 接口 → WAN → PPPoE拨号
网络 → 防火墙 → 端口转发
服务 → AdGuard Home → 去广告
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AdGuard Home 是真香，全家的设备都不用单独装去广告插件了。再搭了个 &lt;em&gt;SmartDNS&lt;/em&gt;，解析速度明显提升。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;唯一的小遗憾是这台小主机没有 &lt;em&gt;WiFi&lt;/em&gt; 模块，无线覆盖还是得靠原来的路由器改成 &lt;em&gt;AP&lt;/em&gt; 模式来补足。整体来说，这次折腾很值。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python爬虫踩坑记</title>
      <link>https://sudo-djug.xyz/posts/2022-04-10-python-web-scraper/</link>
      <pubDate>Sun, 10 Apr 2022 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2022-04-10-python-web-scraper/</guid>
      <description>&lt;h1 id=&#34;python爬虫踩坑记&#34;&gt;Python爬虫踩坑记&lt;/h1&gt;
&lt;p&gt;工作需要抓取一些公开数据，用 &lt;em&gt;Python&lt;/em&gt; 写了个简单的爬虫。一开始以为用 &lt;em&gt;requests&lt;/em&gt; 库直接 get 就行，结果发现很多网站都有反爬机制。&lt;/p&gt;
&lt;p&gt;第一个坑是 &lt;em&gt;User-Agent&lt;/em&gt; 被识别。解决方法是每次请求随机换一个：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;headers = {&#39;User-Agent&#39;: &#39;Mozilla/5.0 ...&#39;}
response = requests.get(url, headers=headers)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第二个坑是请求太频繁被 &lt;em&gt;IP&lt;/em&gt; 封禁。加了 &lt;em&gt;time.sleep(random.uniform(1, 3))&lt;/em&gt; 之后好了很多。&lt;/p&gt;
&lt;p&gt;第三个坑最麻烦，目标网站用了 &lt;em&gt;JavaScript&lt;/em&gt; 动态渲染，requests 抓到的 HTML 是空的。最后用了 &lt;em&gt;Selenium&lt;/em&gt; + &lt;em&gt;ChromeDriver&lt;/em&gt;，虽然慢了点，但能拿到完整数据。&lt;/p&gt;
&lt;h6 id=&#34;几点心得&#34;&gt;几点心得&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;爬虫不是万能的，先看对方有没有提供 &lt;em&gt;API&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;遵守 &lt;em&gt;robots.txt&lt;/em&gt;，不要给人家服务器造成压力&lt;/li&gt;
&lt;li&gt;数据拿到之后记得清洗，原始数据往往很脏&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;写爬虫的过程也是学习 &lt;em&gt;HTTP&lt;/em&gt; 协议的过程，收获不小。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派搭建NAS</title>
      <link>https://sudo-djug.xyz/posts/2021-12-20-raspberry-pi-nas/</link>
      <pubDate>Mon, 20 Dec 2021 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2021-12-20-raspberry-pi-nas/</guid>
      <description>&lt;h1 id=&#34;树莓派搭建nas&#34;&gt;树莓派搭建NAS&lt;/h1&gt;
&lt;p&gt;双十一入了一块 4TB 的机械硬盘，打算用吃灰已久的 &lt;em&gt;树莓派4B&lt;/em&gt; 搭一个轻量级 NAS。方案选的是 &lt;em&gt;OpenMediaVault&lt;/em&gt;，图形化界面比较友好。&lt;/p&gt;
&lt;p&gt;刷完系统，挂载硬盘的时候卡了一会儿。原来是硬盘需要独立供电，树莓派的 USB 口供电不够，导致识别不稳定。加了一个带电源的 USB Hub 之后解决。&lt;/p&gt;
&lt;p&gt;OMV 配置共享文件夹倒是简单，几步就搞定了：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;服务 → SMB/CIFS → 启用 → 添加共享
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows 和 Mac 都能正常访问，传输速度大概 30MB/s，对于局域网备份照片和视频够用了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;回头再研究一下 &lt;em&gt;Nextcloud&lt;/em&gt; 的部署，把 NAS 的功能再扩展一下，做成个人网盘。自托管虽然折腾，但数据掌握在自己手里，安心。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker初体验</title>
      <link>https://sudo-djug.xyz/posts/2021-08-15-docker-first-steps/</link>
      <pubDate>Sun, 15 Aug 2021 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2021-08-15-docker-first-steps/</guid>
      <description>&lt;h1 id=&#34;docker初体验&#34;&gt;Docker初体验&lt;/h1&gt;
&lt;p&gt;早就听说 &lt;em&gt;Docker&lt;/em&gt; 容器化技术很厉害，今天终于抽时间学习了一下。跟着&lt;a href=&#34;https://docs.docker.com/get-started/&#34;&gt;官方文档&lt;/a&gt;走了一遍，感觉比想象中简单。&lt;/p&gt;
&lt;p&gt;安装倒是顺利，直接用了官方的一键脚本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://get.docker.com | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;装完之后运行了个 hello-world，成功。接着尝试把自己写的一个小 &lt;em&gt;Flask&lt;/em&gt; 应用打包成镜像，遇到几个坑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基础镜像选 &lt;code&gt;python:3.9-slim&lt;/code&gt; 比 &lt;code&gt;python:3.9&lt;/code&gt; 体积小很多&lt;/li&gt;
&lt;li&gt;&lt;code&gt;requirements.txt&lt;/code&gt; 一定要提前写好，不然构建时会报错&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Dockerfile&lt;/code&gt; 里用 &lt;code&gt;COPY&lt;/code&gt; 比 &lt;code&gt;ADD&lt;/code&gt; 更直观&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第一个打包好的镜像只有 180MB，运行起来也很轻量。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;下一步想试试 &lt;em&gt;Docker Compose&lt;/em&gt;，把博客、数据库、缓存几个服务一起编排起来。容器化确实是趋势，得跟上。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Centos挂载命令出错</title>
      <link>https://sudo-djug.xyz/posts/2021-05-10-centos-mount-error/</link>
      <pubDate>Mon, 10 May 2021 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2021-05-10-centos-mount-error/</guid>
      <description>&lt;h1 id=&#34;centos挂载命令出错&#34;&gt;Centos挂载命令出错&lt;/h1&gt;
&lt;p&gt;今天在挂载nfs的时候，Centos总是报错，后来才发现了问题的元凶。&lt;br&gt;
在挂载nfs之前，先要安装一个组件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum install nfs-utils -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后查看组件是否运行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;systemctl start nfs; 
systemctl enable nfs;
systemctl status nfs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有了这个组件之后，再使用命令mount就行，一般不需要配置user和password&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mount -t nfs 1.1.1.2:/root/T1/nfs /mnt
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Django初探</title>
      <link>https://sudo-djug.xyz/posts/2021-05-10-django-first-look/</link>
      <pubDate>Mon, 10 May 2021 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2021-05-10-django-first-look/</guid>
      <description>&lt;h1 id=&#34;django初探&#34;&gt;Django初探&lt;/h1&gt;
&lt;p&gt;今天跟随&lt;a href=&#34;https://www.dusaiphoto.com/article/2/&#34;&gt;杜赛老师的博客&lt;/a&gt;学习了一下 &lt;em&gt;Django&lt;/em&gt; 的基本用法，了解了MTV的一些基本概念，明白了搭建网站的基本步骤。&lt;/p&gt;
&lt;p&gt;回头继续学习。&lt;/p&gt;
&lt;p&gt;心得及要点如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;利用 &lt;em&gt;Pycharm&lt;/em&gt; 可以免于创建venv环境&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;每次修改完 &lt;em&gt;Model.py&lt;/em&gt; 都要更新数据库，命令是&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1  
2  
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;|&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    python manage.py makemigrations  
    python manage.py migrate  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;mdash;|&amp;mdash;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要认真写代码，不要看错缩进和特殊符号，比如逗号、引号等&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;明天继续学习，每天一个小时，争取在五月学完 &lt;em&gt;Django&lt;/em&gt; 基本框架。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux下frp无法使用的问题</title>
      <link>https://sudo-djug.xyz/posts/2021-05-10-frp-on-linux-issue/</link>
      <pubDate>Mon, 10 May 2021 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2021-05-10-frp-on-linux-issue/</guid>
      <description>&lt;h1 id=&#34;linux下frp无法使用的问题&#34;&gt;Linux下frp无法使用的问题&lt;/h1&gt;
&lt;p&gt;一直都使用frp进行内网穿透，还为此写了一个frp的shell脚本命令（其实很简单，也就两行），后来发现这个命令不灵了，于是排查了一下原因，终于找到了。&lt;/p&gt;
&lt;p&gt;以前frpc.ini文件是这样写的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[common]
server_addr = tk.dur.dur.com
server_port = 3000
token = yourpassword

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 488
remote_port = 7465
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样写的原因是， &lt;em&gt;server_addr&lt;/em&gt; 我进行了一个域名替换了真实ip，这样就可以避免记住ip。但是由于我使用的是免费域名，就可能存在域名解析不及时或丢失导致无法连接的问题。&lt;br&gt;
报错的格式是这样的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2021/05/10 07:10:25 [W] [service.go:102] login to server failed: dial tcp: lookup tk.dur.dur.com on [fdfd:d64a:eafb::1]:53: read udp [fdfd:d64a:eafb::623]:41317-&amp;gt;[fdfd:d64a:eafb::1]:53: i/o timeout
dial tcp: lookup tk.dur.dur.com on [fdfd:d64a:eafb::1]:53: read udp [fdfd:d64a:eafb::623]:41317-&amp;gt;[fdfd:d64a:eafb::1]:53: i/o timeout
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后我就把 &lt;em&gt;server_addr&lt;/em&gt; 替换成真实ip后，一切就好了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2021/05/10 07:31:15 [I] [service.go:288] [f0ed9ec7863e36f9] login to server success, get run id [f0ed9ec7863e36f9], server udp port [0]
2021/05/10 07:31:15 [I] [proxy_manager.go:144] [f0ed9ec7863e36f9] proxy added: [omv dashbord win7 pvemysql ssh pve dashbord]
2021/05/10 07:31:16 [I] [control.go:180] [f0ed9ec7863e36f9] [omv dashbord] start proxy success
2021/05/10 07:31:16 [I] [control.go:180] [f0ed9ec7863e36f9] [win7] start proxy success
2021/05/10 07:31:16 [I] [control.go:180] [f0ed9ec7863e36f9] [pvemysql] start proxy success
2021/05/10 07:31:16 [I] [control.go:180] [f0ed9ec7863e36f9] [ssh] start proxy success
2021/05/10 07:31:16 [I] [control.go:180] [f0ed9ec7863e36f9] [pve dashbord] start proxy success
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;frp的使用非常简单，在linux下尤其简单，不用安装任何依赖，所以如果出现错误了，不要轻易怀疑是程序的问题，非常有可能是自己的配置或者命令出了问题，多从这方面找找原因。&lt;/p&gt;</description>
    </item>
    <item>
      <title>个人博客搭建初探</title>
      <link>https://sudo-djug.xyz/posts/2021-05-09-personal-blog-setup/</link>
      <pubDate>Sun, 09 May 2021 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2021-05-09-personal-blog-setup/</guid>
      <description>&lt;h1 id=&#34;个人博客搭建初探&#34;&gt;个人博客搭建初探&lt;/h1&gt;
&lt;p&gt;今天跟随视频和网页教程搭建了属于自己的个人博客，视频和网络参考如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=erKYtw4Rfhk&#34;&gt;手把手教你从0开始搭建自己的个人博客 |无坑版视频教程| hexo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/35668237&#34;&gt;超详细Hexo+Github博客搭建小白教程 - 知乎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当然，跟随这些教程的好处是入门快，想提高可得费点劲。安装期间，无意中下载了最新版的 &lt;em&gt;node.js&lt;/em&gt; ,版本号 &lt;em&gt;14.16.1&lt;/em&gt; ，结果经常报错，*&lt;a href=&#34;https://www.haoyizebo.com/posts/710984d0/&#34;&gt;这篇文章&lt;/a&gt;*给了很大帮助。历时两个小时，终于可以把博客搭建起来了，之后的任务有两个~&lt;/p&gt;
&lt;h6 id=&#34;一是做好技术的记录和总结&#34;&gt;一是做好技术的记录和总结&lt;/h6&gt;
&lt;h6 id=&#34;二是做好博客的美化和功能多元化向个人网站全面发展&#34;&gt;二是做好博客的美化和功能多元化，向个人网站全面发展。&lt;/h6&gt;
&lt;hr&gt;
&lt;p&gt;要学的东西太多了……&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;li&gt;数据分析、机器学习、网页爬虫……&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作为一个业余爱好者，希望自己不耽误主业的同时，把这个爱好玩好……&lt;/p&gt;</description>
    </item>
    <item>
      <title>首篇</title>
      <link>https://sudo-djug.xyz/posts/2021-05-09-first-post/</link>
      <pubDate>Sun, 09 May 2021 00:00:00 +0800</pubDate>
      <guid>https://sudo-djug.xyz/posts/2021-05-09-first-post/</guid>
      <description>&lt;h1 id=&#34;首篇&#34;&gt;首篇&lt;/h1&gt;
&lt;p&gt;分类：杂想&lt;/p&gt;
&lt;p&gt;第一次建立了自己的博客，用来记录自己的点滴。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;生活是由回忆构成的，所以需要记录，形式不限，文字、图片，或是影像。&lt;br&gt;
&lt;em&gt;——by harry7756&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;生命好短暂，也有很多美好的东西，享受美好，才是不枉此生。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
