[{"data":1,"prerenderedAt":257},["ShallowReactive",2],{"\u002Fblog\u002Fsub-store-cloudflare\u002F:vi":3,"\u002Fblog\u002Fsub-store-cloudflare\u002F-surround:vi":152,"blog-all-posts:vi":153},{"id":4,"title":5,"author":6,"body":10,"date":135,"description":136,"extension":137,"image":138,"locale":139,"meta":140,"minRead":141,"navigation":142,"original":142,"path":143,"pinned":144,"seo":145,"source":138,"sourceUrl":138,"stem":146,"tags":147,"updated":138,"__hash__":151},"blog\u002Fblog\u002Fsub-store-cloudflare.vi.md","Tôi đã chuyển công cụ gộp subscription proxy lên Cloudflare",{"name":7,"avatar":8},"Chen Dahuang",{"src":9,"alt":7},"\u002Favatar.jpg",{"type":11,"value":12,"toc":127},"minimark",[13,17,28,33,36,39,52,55,58,62,65,86,89,93,96,99,107,114,118,121,124],[14,15,16],"p",{},"Tôi dùng dịch vụ proxy đã ba bốn năm rồi, giữa chừng cũng tự dựng VPS node. Luôn có một chuyện khá phiền: trên tay ba năm subscription, cộng thêm vài máy tự dựng, nằm rải rác trong client phải thêm từng cái một, còn quy tắc định tuyến thì client nào cũng phải cấu hình lại từ đầu. Đổi máy, đổi client, lắp đặt cho người nhà một lần — là lại làm lại cả nghi thức.",[14,18,19,20,27],{},"Sau này tôi nghĩ, chuyện subscription không cần phải quản rải rác trong client. Gom nó lại thành một link, quy tắc chốt chết ở phía server, client chỉ việc subscribe, mọi chuyện gọn gàng. Cách làm của Sub-Store trước đây tôi cũng dùng, nhưng nó chạy trên server của mình, tôi thấy nuôi nó phiền phức. Nên lần này tôi tự viết một bản chạy trên Cloudflare, tên là sub-store-cloudflare, mã nguồn mở trên ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fgithub.com\u002Frealchendahuang\u002Fsub-store-cloudflare",[25],"nofollow","GitHub",".",[29,30,32],"h2",{"id":31},"nó-thật-ra-chỉ-làm-một-việc","Nó thật ra chỉ làm một việc",[14,34,35],{},"Gộp nhiều nguồn subscription thành một subscription.",[14,37,38],{},"Nói cụ thể, bạn có thể nhét vài thứ vào:",[40,41,42,46,49],"ul",{},[43,44,45],"li",{},"Link subscription của vài dịch vụ proxy",[43,47,48],{},"Text node trên VPS của mình (vless, trojan, ss, vmess — đều được)",[43,50,51],{},"Dán tạm một đoạn node vào cũng được",[14,53,54],{},"Vào trong rồi, Worker sẽ tải về, khử trùng lặp, lọc theo quy tắc bạn đưa, rồi tùy nhu cầu mà đổi tên, thêm cờ, phân giải domain. Đầu ra là một subscription tổng hợp duy nhất — client subscribe đúng một link đó là xong.",[14,56,57],{},"Phần quy tắc tôi đặt phía server. Kèm sẵn vài template Mihomo thông dụng — acl4ssr, whitelist\u002Fblacklist của Loyalsoldier, ai-streaming và mấy cái tương tự — nhóm định tuyến, bộ quy tắc đều cấu hình sẵn trên cloud. Bạn đưa subscription vào mấy client như mihomo \u002F clash, surge, sing-box, shadowrocket, tải về là bản hoàn chỉnh đã kèm sẵn quy tắc định tuyến — bên đó không cần tự viết quy tắc, không cần duy trì URL bộ quy tắc.",[29,59,61],{"id":60},"vì-sao-nhất-định-phải-cloudflare","Vì sao nhất định phải Cloudflare",[14,63,64],{},"Nguyên nhân rất thực tế:",[40,66,67,74,80],{},[43,68,69,73],{},[70,71,72],"strong",{},"Không cần server."," Workers + D1, hạn mức miễn phí đủ cho nhu cầu cá nhân — tiết kiệm cả tiền server lẫn công bảo trì.",[43,75,76,79],{},[70,77,78],{},"Domain workers.dev bản thân nó đã nằm ngoài tường lửa."," Client của bạn kết nối để tải subscription là thông ngay — không có chuyện \"server ở nước ngoài mà node kéo subscription của chính nó cũng phải cần thang\" kiểu búp bê lồng nhau.",[43,81,82,85],{},[70,83,84],{},"Triển khai xong là một bảng quản trị web cộng một endpoint tải xuống."," Đổi client trên điện thoại vẫn mở trang web ra đổi cấu hình được.",[14,87,88],{},"Tech stack tôi cố tình giữ nhỏ: Worker + Static Assets + D1 + Worker Secrets. KV, R2, Durable Objects, Queue, Cron đều không nằm trong đường chính — bớt được thứ nào là bớt.",[29,90,92],{"id":91},"cố-ý-làm-hai-đường-triển-khai","Cố ý làm hai đường triển khai",[14,94,95],{},"Đường thứ nhất dành cho người chỉ muốn dùng: bấm nút Deploy to Cloudflare trong repo. Cloudflare tự kéo repo, tạo Worker, tạo D1, hỏi bạn hai cái token, xong xuôi trao cho bạn một link quản trị kèm token. Làm từng bước, không cần đụng command line.",[14,97,98],{},"Đường thứ hai dành cho tôi và những người thích nghịch: cài đặt một chạm bằng AI Agent.",[14,100,101,102,106],{},"Trong repo có kèm giao thức agent (AGENTS.md + một SKILL bên trong agent). Bạn ghi nguồn subscription, subscription tổng hợp muốn làm, template quy tắc muốn dùng vào một file cấu hình local, chạy ",[103,104,105],"code",{},"pnpm run install:cloudflare",", agent sẽ thay bạn kiểm tra đăng nhập Cloudflare, tạo database, ghi secret, migrate, deploy, import cấu hình, xác minh link, cuối cùng trao tận tay link quản trị và link tải xuống.",[14,108,109,110,113],{},"Chính tôi cũng lên link theo đường này, nên tôi khuyên dùng đường này — đỡ tốn tâm sức. Khi dùng với Codex \u002F Claude Code, chỉ cần copy đoạn prompt trong ",[103,111,112],{},"agent\u002Finstall.prompt.md"," ở repo là được.",[29,115,117],{"id":116},"hợp-với-ai","Hợp với ai",[14,119,120],{},"Nói thẳng: nếu trong tay bạn không chỉ một dịch vụ proxy, lại có thêm vài node tự dựng, muốn gộp thành một subscription để tự dùng — đây chính là dự án dành cho bạn. Nếu bạn chỉ có một dịch vụ dùng tạm được rồi, thì thật sự không cần thứ này.",[14,122,123],{},"Code hoàn toàn mã nguồn mở, AGPL. Ý tưởng tương tác frontend có chút tri ân bản Sub-Store gốc; bản gốc chạy trong container, bao phủ hệ sinh thái client rộng hơn. Bản của tôi là một dạng Cloudflare-native gọn hơn, tiện sửa và triển khai trực tiếp, không phải bản sao từng dòng.",[14,125,126],{},"Ai quan tâm có thể vào repo xem — README viết khá đầy đủ, cứ theo các bước triển khai mà làm.",{"title":128,"searchDepth":129,"depth":129,"links":130},"",2,[131,132,133,134],{"id":31,"depth":129,"text":32},{"id":60,"depth":129,"text":61},{"id":91,"depth":129,"text":92},{"id":116,"depth":129,"text":117},"2026-06-28","Gộp nhiều dịch vụ proxy cộng với node tự dựng thành một subscription duy nhất, quy tắc định tuyến cấu hình ở phía server — client chỉ việc subscribe.","md",null,"vi",{},4,true,"\u002Fblog\u002Fsub-store-cloudflare",false,{"title":5,"description":136},"blog\u002Fsub-store-cloudflare.vi",[148,149,150],"Cloudflare","Vượt tường lửa","Dự án mã nguồn mở","EqMskk7To5DjBHNxFvw8pjGZsyiAoI20UCcWkyjZgcA",[138,138],[154,163,171,180,187,195,202,210,218,224,231,233,240,248],{"path":155,"title":156,"description":157,"date":158,"minRead":159,"tags":160},"\u002Fblog\u002Fagent-harness-selection","Sau khi nghịch Pi Agent, OMP, Codex và ZCode, vì sao cuối cùng tôi chọn OpenCode + OpenChamber","Bài tổng kết chọn lựa Agent Harness: ba tiêu chí — trải nghiệm GUI, khoá nhà cung cấp và quyền tự do phát triển thứ cấp — đã loại Pi Agent, OMP, Codex và ZCode, cuối cùng chốt lõi OpenCode + giao diện OpenChamber.","2026-08-06",6,[161,162],"AI Agent","Chọn công cụ",{"path":164,"title":165,"description":166,"date":167,"minRead":159,"tags":168},"\u002Fblog\u002Fcloudflare-broke-stack","Thực hành tốt nhất 2026 cho indie developer: gói công nghệ Cloudflare all-in-one 'nghèo rớt mồng tơi'","Tech stack chi phí bằng không cho indie developer: Codex viết code, GitHub quản lý phiên bản, Stripe thu tiền, frontend TanStack Start, backend Hono + Workers, database D1, lưu trữ R2, cache KV — tất cả chạy trên Cloudflare.","2026-06-15",[148,169,170],"Phát triển indie","Tech stack",{"path":172,"title":173,"description":174,"date":175,"minRead":159,"tags":176},"\u002Fblog\u002Fdeepseek-api-web-search","API của DeepSeek có sẵn tìm kiếm web: xài chùa khả năng tìm kiếm chính thức qua Responses API","DeepSeek nhúng thẳng tìm kiếm web vào API: gọi deepseek-v4-flash qua giao diện Responses và khai báo tool web_search là xong. Không cần tích hợp công cụ tìm kiếm bên thứ ba, không cần xin key API tìm kiếm.","2026-08-05",[177,178,179],"DeepSeek","API","Công cụ AI",{"path":181,"title":182,"description":183,"date":175,"minRead":184,"tags":185},"\u002Fblog\u002Fdeepseek-v4-flash-review","Trải nghiệm sâu bản chính thức DeepSeek V4 Flash: rẻ, nhanh, context 1M, tìm kiếm tích hợp sẵn","Mấy ngày trải nghiệm sâu bản chính thức DeepSeek V4 Flash: rẻ cực độ, nhanh như chớp, context 1M, tìm kiếm web chính thức tích hợp sẵn, mã nguồn mở hoàn toàn. Điểm yếu duy nhất là đa phương thức — nhưng có thể vá bằng cách tổ hợp các model khác.",7,[177,186,179],"Đánh giá mô hình",{"path":188,"title":189,"description":190,"date":167,"minRead":191,"tags":192},"\u002Fblog\u002Ffree-cloudflare","Người dùng miễn phí vắt kiệt Cloudflare như thế nào — bản miễn phí thật sự xài chùa được đến đâu?","Bản miễn phí của Cloudflare chống lưng được cả một hạ tầng internet cá nhân: DNS, CDN, Pages, Workers, KV, D1, R2, email, Tunnel, AI Gateway và hơn thế nữa.",8,[148,193,194],"Hạn mức miễn phí","Triển khai",{"path":196,"title":197,"description":198,"date":199,"minRead":191,"tags":200},"\u002Fblog\u002Fmodel-harness-decoupling","Harness chính hãng chưa chắc là đáp án đương thời: thời đại mô hình mở, chọn model và Harness riêng biệt","Dùng Claude thì gắn Claude Code? Thời đại mô hình mở rồi, bản năng đó cần được nâng cấp. Lợi thế chính hãng là có thật, nhưng huấn luyện model tốt và làm Harness tốt là hai ngành kỹ thuật khác nhau — bài này nói rõ vì sao model và Harness giờ đã có thể chọn riêng, kèm bản đồ định vị 5 Harness.","2026-09-09",[161,201,162],"Harness",{"path":203,"title":204,"description":205,"date":199,"minRead":191,"tags":206},"\u002Fblog\u002Fopencode-productive-stack","Ổn định, nhanh, hiệu suất, rẻ: ghi chép trọn bộ AI Coding stack của tôi","OpenCode + OpenChamber + hai gói đăng ký DeepSeek V4 Flash: 15 dự án cùng lúc chạy code, hạn mức chỉ xụi chút xíu. Trải hết cấu hình ra: cắt tỉa context, bộ nhớ phân tầng, tự động hóa desktop, và bài học “giữ nguyên cặp gốc”.",[207,208,209],"OpenCode","Lập trình AI","Cấu hình",{"path":211,"title":212,"description":213,"date":214,"minRead":215,"tags":216},"\u002Fblog\u002Fproduct-faxin-principle","Nguyên lý phát tâm: vì sao indie developer phải học cách buông bỏ","Vì sao bạn lên đường? Bạn lên đường vì ai? Bạn thật sự muốn giải quyết vấn đề nào? Sự sắc bén của sản phẩm đến từ chỗ bạn dám cắt bỏ điều gì.","2026-06-20",10,[217,169],"Tư duy sản phẩm",{"path":219,"title":220,"description":221,"date":214,"minRead":191,"tags":222},"\u002Fblog\u002Fproduct-pain-vs-itch","Đừng bay bổng khi người dùng khen 'xịn': nỗi đau và cơn ngứa","Lời khen ngoài miệng chẳng đáng một xu. Phán đoán nhu cầu chỉ có một tiêu chuẩn cứng: xem người dùng sẵn sàng trả cái gì.",[217,223],"Đánh giá nhu cầu",{"path":225,"title":226,"description":227,"date":158,"minRead":228,"tags":229},"\u002Fblog\u002Fqwen-vision-for-deepseek","Bổ sung đa phương thức cho DeepSeek: giải pháp nhận diện ảnh Qwen-3.7-Flash","DeepSeek V4 Flash không có đa phương thức — cần hiểu ảnh thì phải làm sao? Khảo sát một vòng, giải pháp có hiệu quả chi phí cao nhất hiện nay là Qwen-3.7-Flash: chi phí nhận diện một bức ảnh gần như bằng không, tổ hợp với V4 Flash là vá được điểm yếu.",5,[177,230,186],"Đa phương thức",{"path":143,"title":5,"description":136,"date":135,"minRead":141,"tags":232},[148,149,150],{"path":234,"title":235,"description":236,"date":199,"minRead":184,"tags":237},"\u002Fblog\u002Ftui-cognitive-bandwidth","TUI đang giết băng thông nhận thức của bạn: đến lúc đập vỡ “bộ lọc geek” trong AI Coding","Hàng loạt AI Coding Agent đang đua nhau thả TUI, nhồi tương tác trở lại mô hình terminal thập niên 1980 rồi gọi đó là “đắm chìm”, “tôn trọng lập trình viên”. Bài này mổ xẻ ba cơ chế khiến TUI làm giảm băng thông nhận thức một cách hệ thống, và vì sao Web UI mới là lời giải đúng.",[208,238,239],"Thiết kế tương tác","Tản văn",{"path":241,"title":242,"description":243,"date":244,"minRead":159,"tags":245},"\u002Fblog\u002Fvalue-not-external","Bàn chuyện có giá trị hay không, bản thân chuyện đó đã chẳng có giá trị","Giá trị của chúng ta không do ai định nghĩa. Trong thời đại AI, con người nên hiểu mình như thế nào?","2026-06-18",[246,247],"Suy ngẫm về AI","Tản văn nhân văn",{"path":249,"title":250,"description":251,"date":252,"minRead":253,"tags":254},"\u002Fblog\u002Fx-growth-1000-followers","Tăng hơn 1000 followers chỉ trong hơn một ngày — đây là những gì tôi đã làm","Tháng 6 tôi nghiêm túc vận hành tài khoản X, chỉ trong hơn một ngày đã tăng 1000+ followers. Bài này ghi lại những gì tôi đã làm và phản hồi nhận được.","2026-06-16",12,[255,256],"Vận hành X","Tăng trưởng nội dung",1789752318555]