<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docs on HappyRock</title><link>/docs/</link><description>Recent content in Docs on HappyRock</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 19 Jun 2026 16:19:24 +0800</lastBuildDate><atom:link href="/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Complete Tutorial: Docker Desktop + n8n + Qdrant + Embedding Auto-Ingestion Pipeline</title><link>/docs/workfollow/</link><pubDate>Fri, 19 Jun 2026 16:19:24 +0800</pubDate><guid>/docs/workfollow/</guid><description>&lt;hr&gt;
&lt;h1 id="-complete-tutorial-docker-desktop--n8n--qdrant--embedding-auto-ingestion-pipeline"&gt;🚀 Complete Tutorial: Docker Desktop + n8n + Qdrant + Embedding Auto-Ingestion Pipeline&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;A fully local AI knowledge base system you can run right away:
Webhook → Embedding → n8n processing → Qdrant vector database → searchable knowledge base
Including all the pitfalls I personally encountered (Webhook parsing, vector format, HTTP JSON errors, payload structure, etc.) — this is the &amp;ldquo;bug-proof&amp;rdquo; edition.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1 id="-1-overall-architecture"&gt;🧱 1. Overall Architecture&lt;/h1&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;User Request (Webhook)
 ↓
n8n Workflow
 ↓
Embedding Model (Ollama / OpenAI)
 ↓
Set Node (standardize structure)
 ↓
HTTP Request (write to Qdrant)
 ↓
Qdrant Vector DB
 ↓
Subsequent retrieval / RAG
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h1 id="-2-launch-qdrant--n8n-with-docker-desktop"&gt;🐳 2. Launch Qdrant + n8n with Docker Desktop&lt;/h1&gt;
&lt;h2 id="1-docker-composeyml"&gt;1️⃣ docker-compose.yml&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;version&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;3.9&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;qdrant&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;qdrant/qdrant&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#e6db74"&gt;&amp;#34;6333:6333&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;./qdrant_data:/qdrant/storage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;n8n&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;n8nio/n8n&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#e6db74"&gt;&amp;#34;5678:5678&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;N8N_HOST=localhost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;N8N_PORT=5678&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;N8N_PROTOCOL=http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;NODE_ENV=production&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;./n8n_data:/home/node/.n8n&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Start up:&lt;/p&gt;</description></item><item><title>Building an AI News Automation System from Scratch: A Hands-On Tutorial for Deploying n8n + DeepSeek + Hugo on Ubuntu</title><link>/docs/n8n/</link><pubDate>Sun, 07 Jun 2026 00:23:18 +0800</pubDate><guid>/docs/n8n/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Author: HappyRock&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Target Audience: Developers, Indie Developers, Technical Managers, AI Enthusiasts&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Tech Stack: Ubuntu + Docker + n8n + DeepSeek + Hugo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="preface"&gt;Preface&lt;/h3&gt;
&lt;p&gt;In the past few years, we’ve been used to:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Open RSS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Browse News
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Filter Hot Topics
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Summarize
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Write WeChat Article
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Publish Blog Post
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The whole process often takes 1–2 hours.&lt;/p&gt;
&lt;p&gt;But in the era of AI Agents, these tasks can already be handed over to AI.&lt;/p&gt;</description></item></channel></rss>