<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ICP Filing on XEDCZQ Blog</title><link>https://xedczq.cn/en/tags/icp-filing/</link><description>Recent content in ICP Filing on XEDCZQ Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 26 May 2026 21:30:00 +0800</lastBuildDate><atom:link href="https://xedczq.cn/en/tags/icp-filing/index.xml" rel="self" type="application/rss+xml"/><item><title>Personal Blog Build Journey (Real Pitfalls)</title><link>https://xedczq.cn/en/post/blog-build/</link><pubDate>Tue, 26 May 2026 21:30:00 +0800</pubDate><guid>https://xedczq.cn/en/post/blog-build/</guid><description>&lt;h1 id="personal-blog-build-journey"&gt;&lt;a href="#personal-blog-build-journey" class="header-anchor"&gt;&lt;/a&gt;Personal Blog Build Journey
&lt;/h1&gt;&lt;p&gt;This is my real build log from 0 to 1. It is not an idealized guide. It is a practical timeline with actual mistakes, root causes, and fixes.&lt;/p&gt;
&lt;h2 id="main-build-routes"&gt;&lt;a href="#main-build-routes" class="header-anchor"&gt;&lt;/a&gt;Main Build Routes
&lt;/h2&gt;&lt;h3 id="route-a-no-server-route"&gt;&lt;a href="#route-a-no-server-route" class="header-anchor"&gt;&lt;/a&gt;Route A: No-Server Route
&lt;/h3&gt;&lt;p&gt;Good for beginners and lightweight personal sites.&lt;/p&gt;
&lt;p&gt;Typical stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GitHub Pages&lt;/code&gt; + &lt;code&gt;Hugo&lt;/code&gt; / &lt;code&gt;Hexo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Very low cost, often close to zero&lt;/li&gt;
&lt;li&gt;No server maintenance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Official links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://pages.github.com/" target="_blank" rel="noopener"
 &gt;GitHub Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://gohugo.io/" target="_blank" rel="noopener"
 &gt;Hugo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://hexo.io/" target="_blank" rel="noopener"
 &gt;Hexo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="route-b-traditional-server-route"&gt;&lt;a href="#route-b-traditional-server-route" class="header-anchor"&gt;&lt;/a&gt;Route B: Traditional Server Route
&lt;/h3&gt;&lt;p&gt;Good for full control and future expansion.&lt;/p&gt;
&lt;p&gt;Typical stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Buy cloud server + domain&lt;/li&gt;
&lt;li&gt;Deploy static site with Nginx, or use WordPress/Typecho&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Official links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://wordpress.org/" target="_blank" rel="noopener"
 &gt;WordPress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://typecho.org/" target="_blank" rel="noopener"
 &gt;Typecho&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I chose Route B because I had already purchased a one-year server and did not want to waste it.&lt;/p&gt;
&lt;h2 id="my-actual-setup"&gt;&lt;a href="#my-actual-setup" class="header-anchor"&gt;&lt;/a&gt;My Actual Setup
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Server: Huawei Cloud ECS (already purchased)&lt;/li&gt;
&lt;li&gt;Domain: &lt;code&gt;xedczq.cn&lt;/code&gt; from Alibaba Cloud&lt;/li&gt;
&lt;li&gt;Site type: Static blog (generated by Hugo, served by Nginx)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Official links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.huaweicloud.com/" target="_blank" rel="noopener"
 &gt;Huawei Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.aliyun.com/" target="_blank" rel="noopener"
 &gt;Alibaba Cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My initial decision was simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reuse existing server (save money)&lt;/li&gt;
&lt;li&gt;Buy the cheapest domain option (save money)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those decisions were valid, but they increased filing and network complexity.&lt;/p&gt;
&lt;h2 id="domain-purchase-and-dns"&gt;&lt;a href="#domain-purchase-and-dns" class="header-anchor"&gt;&lt;/a&gt;Domain Purchase and DNS
&lt;/h2&gt;&lt;p&gt;After buying &lt;code&gt;xedczq.cn&lt;/code&gt;, I immediately pointed DNS to my Huawei Cloud server IP for public access testing.&lt;/p&gt;
&lt;p&gt;My minimum checklist here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nslookup domain&lt;/code&gt; resolves to the target IP&lt;/li&gt;
&lt;li&gt;Server service is actually listening on public ports (80/443)&lt;/li&gt;
&lt;li&gt;Security group and firewall allow required ports&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="icp-filing"&gt;&lt;a href="#icp-filing" class="header-anchor"&gt;&lt;/a&gt;ICP Filing
&lt;/h2&gt;&lt;p&gt;My first major blocker was ICP filing.&lt;/p&gt;
&lt;h3 id="when-icp-filing-is-usually-required"&gt;&lt;a href="#when-icp-filing-is-usually-required" class="header-anchor"&gt;&lt;/a&gt;When ICP Filing Is Usually Required
&lt;/h3&gt;&lt;p&gt;Common case:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Server is in mainland China&lt;/li&gt;
&lt;li&gt;Domain provides internet information services in mainland China&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Common case where ICP is usually not required:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Server is outside mainland China (HK/overseas)&lt;/li&gt;
&lt;li&gt;Service targets overseas access&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Official filing portal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://beian.miit.gov.cn/" target="_blank" rel="noopener"
 &gt;MIIT ICP Filing System&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I decided not to move to an overseas server, so I completed the full filing process, which took about 10 days.&lt;/p&gt;
&lt;h2 id="issue-works-without-vpn-fails-with-vpn"&gt;&lt;a href="#issue-works-without-vpn-fails-with-vpn" class="header-anchor"&gt;&lt;/a&gt;Issue: Works Without VPN, Fails With VPN
&lt;/h2&gt;&lt;p&gt;After filing, I hit the second problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Works without VPN&lt;/li&gt;
&lt;li&gt;Fails with VPN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In practice, this usually involves routing differences across DNS/proxy/region paths instead of one single bug. I then tried Cloudflare for unified DNS and traffic handling.&lt;/p&gt;
&lt;h2 id="cloudflare-domain-onboarding"&gt;&lt;a href="#cloudflare-domain-onboarding" class="header-anchor"&gt;&lt;/a&gt;Cloudflare Domain Onboarding
&lt;/h2&gt;&lt;p&gt;I moved the domain to Cloudflare.&lt;/p&gt;
&lt;p&gt;Official links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.cloudflare.com/" target="_blank" rel="noopener"
 &gt;Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.cloudflare.com/application-services/products/dns/" target="_blank" rel="noopener"
 &gt;Cloudflare DNS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Main advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Global Anycast network&lt;/li&gt;
&lt;li&gt;Fast DNS propagation and good observability&lt;/li&gt;
&lt;li&gt;Optional CDN/WAF/basic protection&lt;/li&gt;
&lt;li&gt;Flexible DNS-only (gray cloud) vs proxy mode (orange cloud)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="pitfall-i-hit"&gt;&lt;a href="#pitfall-i-hit" class="header-anchor"&gt;&lt;/a&gt;Pitfall I Hit
&lt;/h3&gt;&lt;p&gt;I enabled orange-cloud proxy first, and the site became inaccessible.&lt;/p&gt;
&lt;p&gt;Root cause pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In proxy mode, requests first reach Cloudflare edge, then return to origin server&lt;/li&gt;
&lt;li&gt;If origin TLS mode, return path, source policy, or filing access conditions are not aligned, access breaks&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="domain-access-filing-at-provider-side"&gt;&lt;a href="#domain-access-filing-at-provider-side" class="header-anchor"&gt;&lt;/a&gt;Domain Access Filing at Provider Side
&lt;/h2&gt;&lt;p&gt;After Cloudflare onboarding, I hit another requirement around provider-side domain access filing.&lt;/p&gt;
&lt;p&gt;My fix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Temporarily switch to DNS-only (gray cloud)&lt;/li&gt;
&lt;li&gt;Complete access filing on Huawei Cloud&lt;/li&gt;
&lt;li&gt;Wait for approval (about 4 days in my case)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After this, access stability returned.&lt;/p&gt;
&lt;h2 id="https-launch"&gt;&lt;a href="#https-launch" class="header-anchor"&gt;&lt;/a&gt;HTTPS Launch
&lt;/h2&gt;&lt;p&gt;Final step: issue and deploy a free TLS certificate on the server, then enforce &lt;code&gt;HTTP -&amp;gt; HTTPS&lt;/code&gt; redirect.&lt;/p&gt;
&lt;p&gt;Official link:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://letsencrypt.org/" target="_blank" rel="noopener"
 &gt;Let&amp;rsquo;s Encrypt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At this point, the blog was fully online.&lt;/p&gt;
&lt;h2 id="my-timeline"&gt;&lt;a href="#my-timeline" class="header-anchor"&gt;&lt;/a&gt;My Timeline
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Domain purchase + first DNS test: same day&lt;/li&gt;
&lt;li&gt;ICP filing: ~10 days&lt;/li&gt;
&lt;li&gt;Cloudflare onboarding + troubleshooting: 1–2 days&lt;/li&gt;
&lt;li&gt;Domain access filing: ~4 days&lt;/li&gt;
&lt;li&gt;HTTPS deployment: same day&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="final-notes"&gt;&lt;a href="#final-notes" class="header-anchor"&gt;&lt;/a&gt;Final Notes
&lt;/h2&gt;&lt;p&gt;If I only wanted the fastest launch, I would use the no-server route.
If I want long-term control and extensibility, server route is worth it, but I must accept:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filing is mostly a time cost, not a pure technical cost&lt;/li&gt;
&lt;li&gt;DNS and proxy issues are network-engineering issues, not one-command issues&lt;/li&gt;
&lt;li&gt;Certificates, return path, and access policy must be debugged together&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My biggest gain was not just launching a blog, but understanding the full chain of domain, DNS, filing, proxy, and origin routing.&lt;/p&gt;</description></item></channel></rss>