Thực hành Second Brain · Bài 8

Xuất bản Second Brain lên web có mật khẩu: Quartz, Cloudflare hoặc Obsidian Publish

Bạn muốn xem kho tri thức trên điện thoại, hoặc chia cho vài người trong đội đọc, nhưng không muốn cả Internet thấy. Bài này đi từng bước hai cách: tự dựng bằng Quartz trên Cloudflare Pages rồi khoá bằng Cloudflare Access, hoặc dùng dịch vụ Obsidian Publish có mật khẩu. Dữ kiện đối chiếu tài liệu chính thức ngày 20–21/10/2026.

Cập nhật 21/10/2026⏱ 11 phút đọcCài đặt & bắt đầuNâng cao

Muốn xem kho trên điện thoại nhưng không muốn cả Internet thấy

Anh Tuấn có một kho Obsidian gồm quy trình, kịch bản tư vấn, ghi chú họp. Anh muốn mở kho trên điện thoại và cho hai trưởng nhóm đọc. Anh làm theo một hướng dẫn đưa kho lên web miễn phí, rồi mới phát hiện trang mở cho bất kỳ ai có đường dẫn, kèm cả ảnh chụp hợp đồng. (Tình huống minh hoạ.)

Đưa Second Brain lên web không khó. Khó là khoá đúng và không đưa nhầm. Bài này đi theo thứ tự đó: chọn phần được đưa lên, dựng trang, khoá trang, rồi kiểm tra từng địa chỉ trước khi gửi link. Chưa có kho, bắt đầu từ Cài Obsidian và tạo kho Second Brain đầu tiên.

Xuất bản Second Brain lên web có mật khẩu là gì?

Xuất bản Second Brain lên web có mật khẩu là biến một phần ghi chú đã chọn thành trang web để đọc trên mọi thiết bị, đặt sau một lớp đăng nhập để chỉ người được duyệt mới mở được.

Hai đường xuất bản Second Brain lên web có khoá: đường 1 tự dựng gồm kho Obsidian chỉ lấy ghi chú publish: true, Quartz 5 biến Markdown thành web tĩnh, kho GitHub riêng tư, Cloudflare Pages tự build, Cloudflare Access cho email được duyệt nhận mã PIN; đường 2 trả phí gồm chọn ghi chú, Obsidian Publish 8 USD mỗi site mỗi tháng trả năm, mật khẩu cho cả site; cảnh báo với Quartz ảnh và PDF trong thư mục content luôn công khai
Hình: Hai đường đưa Second Brain lên web có khoá (minh hoạ)
Tiêu chíQuartz + Cloudflare Pages + AccessObsidian Publish
Chi phíQuartz giấy phép MIT; Pages và Access có gói Free (Access Free cho dưới 50 người dùng)8 USD/site/tháng trả năm, 10 USD nếu trả tháng
Cách khoáMỗi người đăng nhập bằng email được duyệt, nhận mã PIN một lầnMật khẩu cho cả site, tạo được nhiều mật khẩu có biệt danh
Kỹ năng cầnDòng lệnh, Node.js, GitHub, bảng điều khiển CloudflareBấm chọn trong Obsidian
Giới hạn cần biếtẢnh, PDF trong thư mục nội dung luôn bị xuất ra; gói Free 500 lần build/tháng, 20.000 tệp/siteLưu trữ 4 GB, tệp tối đa 50 MB; plugin như Dataview không chạy

Nguồn: Quartz GitHub · Cloudflare Access · Pages limits · Obsidian Publish · Publish – giới hạn

Bước 0: chọn phần được đưa lên trước khi dựng

Lớp mật khẩu có thể cấu hình sai; thứ không nằm trên web thì không thể lộ qua web.

Dữ liệu cá nhân của khách vẫn chịu Luật Bảo vệ dữ liệu cá nhân 91/2025/QH15 dù trang có mật khẩu (bài viết không phải tư vấn pháp lý). Chia vùng chi tiết: Bảo mật Second Brain khi cho AI đọc, ghi.

Nguồn: Quartz – Private pages

Đường 1, bước 1–4: dựng trang bằng Quartz

Quartz là trình tạo web tĩnh, biến các tệp Markdown thành trang web có tìm kiếm, liên kết [[ ]], backlink và đồ thị ghi chú, tương thích Obsidian. Giấy phép MIT. Tài liệu hiện hành là Quartz 5 (bản 5.0.0, nhánh mặc định v5); yêu cầu Node.js từ v22 và npm từ 10.9.2.

Bước 1. Tạo kho GitHub riêng tư từ mẫu Quartz

Mở kho Quartz trên GitHub, bấm Use this template → Create a new repository, đặt tên và chọn Private. Tài liệu Quartz khuyên cách này vì không phải chỉnh lại địa chỉ kho về sau.

Bước 2. Tải về, cài, khởi tạo và xem thử trên máy

Lệnh trên máy tính của bạnDán vào Terminal (macOS, Linux) hoặc PowerShell; thay phần trong <<…>>
git clone https://github.com/<tài khoản GitHub>/<tên kho riêng tư>.git
cd <tên kho riêng tư>
node -v                                   # cần từ v22 trở lên
npm i
npx quartz create                         # chọn mẫu obsidian, cách nạp nội dung, base URL
npx quartz plugin install --from-config   # cài plugin mà mẫu đã chọn
npx quartz build --serve                  # xem thử tại http://localhost:8080

Khi npx quartz create hỏi: chọn mẫu obsidian; cách nạp nội dung chọn copy và trỏ tới thư mục Web ở bước 0, không trỏ cả kho; base URL không kèm https://.

Bước 3. Đặt hai lớp lọc trong quartz.config.yaml

quartz.config.yaml (đoạn cần sửa)Mở tệp trong thư mục Quartz, sửa đúng các dòng này
configuration:
  baseUrl: <tên miền, không có https://>
  ignorePatterns:
    - private
    - templates
    - .obsidian
    - "<thư mục nhạy cảm, ví dụ Khach-hang>"

plugins:
  - source: "@quartz-community/remove-draft"
    enabled: true      # bỏ ghi chú có draft: true
  - source: "@quartz-community/explicit-publish"
    enabled: true      # chỉ xuất bản ghi chú có publish: true

Lớp 1 là plugin lọc: bật explicit-publish thì chỉ ghi chú có publish: true mới lên web. Lớp 2 là ignorePatterns: thư mục bị bỏ qua hoàn toàn. Tài liệu Quartz nhắc hai lớp này chỉ giữ trang khỏi bản web; kho GitHub công khai thì phải thêm cả vào .gitignore, nên để kho riêng tư như bước 1.

Bước 4. Đẩy lên GitHub

Lệnh trên máy tính của bạnChạy trong thư mục Quartz
npx quartz sync --no-pull   # lần đầu
npx quartz sync             # những lần sau
Đang dùng nhánh v4 cũ (bản 4.5.2)? Cấu hình và lệnh build khác Quartz 5; đọc hướng dẫn chuyển đổi của Quartz trước.

Nguồn: Quartz 5 · Quartz – Installation · Quartz – Configuration · Quartz – Private pages

Đường 1, bước 5: đưa lên Cloudflare Pages

  1. Đăng nhập bảng điều khiển Cloudflare, vào Compute (Workers) → Workers & Pages → Create application → Pages → Connect to Git, chọn kho GitHub vừa tạo.
  2. Ở mục Set up builds and deployments, điền theo bảng dưới rồi bấm Save and deploy.
  3. Từ đây, mỗi lần npx quartz sync, Cloudflare tự build lại trang.
MụcGiá trị theo tài liệu Quartz
Production branchv5
Framework presetNone
Build commandnpx quartz plugin install && npx quartz build
Build output directorypublic

Trang lấy ngày cập nhật từ git thì thêm git fetch --unshallow && vào đầu lệnh build, vì Pages chỉ tải lịch sử git rút gọn.

Gói Free của Pages: 500 lần build mỗi tháng, mỗi build tối đa 20 phút, 20.000 tệp mỗi site, mỗi tệp tối đa 25 MiB.

Trang tổng quan của Cloudflare Pages hiện khuyên dự án mới bắt đầu bằng Workers. Hướng dẫn Quartz vẫn dùng Pages và bài này đi theo hướng dẫn đó; nếu bạn chọn Workers, hãy đọc tài liệu Workers cho phần khoá trang.

Nguồn: Quartz – Hosting · Pages limits · Cloudflare Pages

Đường 1, bước 6: khoá trang bằng Cloudflare Access

Cloudflare Access đặt một cổng đăng nhập trước trang web. Gói Free giá 0 USD, dành cho nhóm dưới 50 người dùng; trên mức đó là gói trả theo người, 7 USD/người/tháng nếu trả năm. Người xem không cần tài khoản riêng: Access có thể gửi mã PIN một lần qua email tới địa chỉ được duyệt.

  1. Trong dự án Pages, vào Settings → General, bấm Enable access policy. Bước này khoá các bản xem trước (preview), vốn mặc định công khai.
  2. Bấm Manage ở policy vừa tạo, mở ứng dụng của dự án, chọn Configure, ở mục Public hostname bỏ dấu * ở ô Subdomain rồi lưu (nếu báo lỗi, đổi tên ứng dụng), để khoá luôn địa chỉ chính tên-dự-án.pages.dev.
  3. Quay lại dự án, bật lại access policy cho preview. Kiểm tra phải có hai policy: một cho *.pages.dev, một cho preview.
  4. Trong quy tắc của ứng dụng, chỉ cho phép đúng danh sách email bạn duyệt.
  5. Thêm cách đăng nhập bằng mã PIN: Zero Trust → Integrations → Identity providers, thêm One-time PIN. Tổ chức Zero Trust mới mặc định dùng nhà cung cấp danh tính của Cloudflare, nên bước này phải tự làm.
  6. Có tên miền riêng: vào Zero Trust → Access controls → Applications → Create new application, chọn loại Self-hosted and private, thêm public hostname là đúng tên miền đó. Thiếu bước này, trang đăng nhập vẫn hiện ra nhưng không hoạt động. Lưu ý thứ tự: hiện không thêm được tên miền tuỳ chỉnh khi tên miền đó đã có Access policy, nên gắn tên miền vào dự án trước.
Kiểm tra trang Second Brain đã khoá trước khi chia sẻ: điện thoại hiện màn hình Cloudflare Access, người dùng nhập email công ty, nhận mã PIN qua email rồi vào kho; bên phải năm địa chỉ cần thử bằng cửa sổ ẩn danh gồm tên miền riêng có ứng dụng Access Self-hosted, địa chỉ pages.dev đã bỏ dấu sao, bản xem trước preview mặc định công khai, link ảnh và PDF trực tiếp, kho GitHub riêng tư có gitignore
Hình: Thử đủ năm chỗ trước khi gửi link (minh hoạ)
Cloudflare có mẫu mã HTTP Basic Authentication cho Workers nhưng ghi rõ mẫu này không phù hợp để chạy thật và khuyên dùng Cloudflare Access. Đừng dùng mẫu đó để khoá kho doanh nghiệp.

Nguồn: Cloudflare Access – gói · Pages – Access · Preview deployments · One-time PIN · Basic Auth

Đường 2: Obsidian Publish có mật khẩu

Obsidian Publish là dịch vụ trả phí của chính Obsidian: chọn ghi chú, bấm Publish, trang nằm ở publish.obsidian.md/tên-site hoặc tên miền riêng. Giá 8 USD/site/tháng trả năm, 10 USD trả tháng, gồm 4 GB lưu trữ. Chỉ ghi chú bạn chọn mới được gửi lên máy chủ (hạ tầng Cloudflare, đặt ở San Francisco).

Chọn ghi chú

  1. Bật core plugin Publish, tạo site trong tài khoản Obsidian có gói Publish.
  2. Ở thanh bên trái, bấm Publish changes, chọn ghi chú ở mục NEW rồi bấm Publish.
  3. Thuộc tính publish: true tự đưa ghi chú vào danh sách, publish: false loại ra.
  4. Nút Add linked thêm các ghi chú được liên kết. Xem lại danh sách trước khi bấm, vì liên kết có thể kéo theo ghi chú bạn chưa định chia sẻ.
  5. Ghi chú đổi tên hoặc đã xoá trên máy không tự gỡ khỏi web: phải tự tích ô xoá khi Publish.

Đặt mật khẩu cho cả site

  1. Publish changes → Change site options.
  2. Ở Other site settings, cạnh Passwords, bấm Manage → New password.
  3. Nhập mật khẩu, đặt Nickname theo người được cấp (để sau này thu hồi đúng người), bấm Add this password.
Mật khẩu áp cho cả site; Obsidian ghi rõ chưa hỗ trợ mật khẩu riêng từng ghi chú. Xoá hết mật khẩu là cả site công khai trở lại. Gửi mật khẩu cho người đọc qua kênh riêng, không dán vào nhóm chat đông người.

Nguồn: Obsidian Publish · Publish your content · Publish – Security and privacy · Obsidian pricing

Aduca làm bản web riêng tư thế nào?

Aduca tự dựng theo hướng gần đường 1: kho Obsidian được xuất thành trang web bằng Quartz trên Cloudflare Pages; lớp đăng nhập dùng mật khẩu kèm mã Authenticator (TOTP). Trên đó có giao diện "chòm sao tri thức" để xem liên kết giữa các ghi chú. Bản web đồng bộ với máy Mac khoảng 2 phút một lần; khi hai bên cùng sửa, bản xung đột được lưu riêng chứ không ghi đè.

Phần sửa trên web và đồng bộ hai chiều là phần làm thêm, ngoài phạm vi bài này; người mới nên bắt đầu với bản chỉ đọc. Thứ tự vẫn là: chia vùng, khoá, kiểm tra, rồi mới chia sẻ. Chi tiết: Nhật ký Aduca xây Second Brain.

Kiểm tra đã làm đúng

Lệnh trên máy tính của bạnChạy trong thư mục Quartz trên máy (macOS, Linux); thay phần trong <<…>>. Lệnh build theo docs Quartz; hai lệnh find, grep là lệnh hệ thống thông dụng, Aduca tự ghép để rà tệp, không có trong docs Quartz
npx quartz build                                   # build lại, kết quả nằm trong thư mục public
find public -type f \( -iname "*.pdf" -o -iname "*.png" -o -iname "*.jpg" \)   # liệt kê tệp ảnh, PDF sẽ lên web
grep -ril "<từ khoá nhạy cảm>" public            # thấy kết quả là phải gỡ trước khi đẩy lên

Lỗi thường gặp và cách xử lý

Hiện tượngNguyên nhân thường gặpCách xử lý
Build trên Cloudflare lỗi dù máy chạy đượcThiếu bước cài plugin, sai nhánhLệnh build có npx quartz plugin install, nhánh v5; trên máy thử npx quartz plugin install --latest
Tên miền riêng hiện trang đăng nhập nhưng không vào đượcChưa có ứng dụng Access cho tên miền đóTạo ứng dụng Access loại Self-hosted and private cho đúng tên miền
Không thêm được tên miền riêng vào dự ánTên miền đã có Access policyGắn tên miền vào dự án trước, tạo policy sau
Địa chỉ pages.dev vẫn mở tự doPolicy chỉ phủ preview, còn dấu * ở SubdomainBỏ dấu *, lưu, bật lại policy cho preview
Ghi chú đã lọc nhưng ảnh của nó vẫn mở đượcQuartz luôn xuất tệp không phải MarkdownChuyển ảnh, PDF ra khỏi thư mục nội dung hoặc thêm vào ignorePatterns
Không nhận được mã PINChưa thêm One-time PIN, email ngoài danh sách, thư vào mục rácThêm One-time PIN ở Identity providers, kiểm tra quy tắc email
Bảng Dataview không hiện trên Obsidian PublishPlugin cần code block không chạy trên PublishChuyển bảng thành nội dung tĩnh trước khi publish

Nguồn: Quartz – Hosting · Pages – known issues · Publish – limitations

Bắt đầu từ đâu?

  1. Hôm nay: tạo thư mục Web, chuyển vào 10–20 ghi chú bạn sẵn sàng cho người khác đọc, rà ảnh và PDF đi kèm.
  2. Tuần này: chọn đường. Có người kỹ thuật thì dựng Quartz, đưa lên Pages, khoá bằng Access; muốn nhanh thì dùng Obsidian Publish với mật khẩu theo từng người.
  3. Trước khi gửi link: chạy hết mục "Kiểm tra đã làm đúng", ghi lại ai được cấp quyền và lịch rà soát danh sách mỗi tháng.

Muốn AI cùng đọc kho theo cách có kiểm soát, xem Kết nối Second Brain với AI qua MCP và Nối Second Brain với Claude qua MCP. Muốn được tư vấn hoặc cùng dựng Second Brain cho doanh nghiệp, bạn có thể đăng ký Tư vấn 1-1 hoặc Coaching 1-1; chi phí báo sau buổi tư vấn.

Đọc tiếp: Cho nghiên cứu thị trường →

Câu hỏi thường gặp

Nên chọn Quartz trên Cloudflare hay Obsidian Publish?

Nếu bạn quen dòng lệnh, GitHub và muốn mỗi người đăng nhập bằng email riêng, Quartz trên Cloudflare Pages cộng Cloudflare Access hợp hơn, chạy được trong gói Free nếu dưới 50 người dùng. Nếu muốn ít thao tác, chấp nhận trả phí và chỉ cần một vài mật khẩu chung cho cả site, Obsidian Publish nhanh hơn.

Obsidian Publish có đặt mật khẩu cho từng ghi chú được không?

Không. Theo trợ giúp chính thức, mật khẩu áp cho cả site và hiện chưa hỗ trợ mật khẩu riêng từng ghi chú. Bạn có thể tạo nhiều mật khẩu, đặt biệt danh theo từng người. Muốn chia quyền khác nhau thì tách thành nhiều site.

Ghi chú đã gắn draft: true thì ảnh trong ghi chú đó có bị ẩn không?

Không. Tài liệu Quartz cảnh báo mọi tệp không phải Markdown như ảnh, PDF, ghi âm trong thư mục nội dung đều được xuất ra và công khai, bất kể bộ lọc. Cách an toàn là không đưa tệp đó vào thư mục content.

Có thể tự viết đoạn mã hỏi mật khẩu thay cho Cloudflare Access không?

Cloudflare có mẫu mã HTTP Basic Authentication nhưng ghi rõ mẫu này không phù hợp để chạy thật và khuyên dùng Cloudflare Access. Với kho tri thức của doanh nghiệp, nên dùng Access hoặc dịch vụ có sẵn mật khẩu.

Đưa lên web có mật khẩu rồi thì cho AI đọc qua web được không?

Bài này chỉ bàn chuyện người đọc. Cho AI đọc kho nên đi đường riêng, có quyền tối thiểu và nhật ký, ví dụ qua MCP, xem bài Kết nối Second Brain với AI qua MCP trong thư mục này.

Tài liệu liên quan

Xem tất cả tài liệu hướng dẫn →

Đăng ký Tư vấn 1-1 xây Second Brain – Nguyễn Đức, Aduca
Bước tiếp theo

Đăng ký Tư vấn 1-1 xây Second Brain

Chuyên gia Aduca cùng bạn xem tri thức đang nằm rải rác ở đâu, chọn công cụ và cấu trúc phù hợp, rồi lên lộ trình nối Second Brain với AI Agent một cách an toàn. Dịch vụ dựng Second Brain nằm trong gói Tư vấn 1-1 hoặc Coaching 1-1; chi phí báo sau buổi tư vấn.

Về AducaChuỗi bài do đội ngũ Aduca biên soạn từ kinh nghiệm đào tạo và triển khai AI Agent cho Marketing – Sales. Aduca Academy do Nguyễn Đức – Chủ tịch Aduca Group sáng lập; ông kinh doanh thương mại điện tử từ 2012, chạy quảng cáo Facebook từ 2014 và đào tạo từ 2016. Phần thực hành từng bước nằm trong các thư mục OpenClaw, Hermes Agent, Claude, ChatGPT và n8n, Second Brain.

Nguồn tham khảo

Lịch sử cập nhật

Miễn trừ trách nhiệm

Bài viết thuộc chuỗi kiến thức của Công ty Cổ phần Giáo dục Aduca, chia sẻ miễn phí cho mục đích học tập. Thông tin kỹ thuật đối chiếu với tài liệu chính thức của các dự án và nền tảng tại ngày cập nhật (có ghi nguồn); phần nhận định là quan điểm của Aduca. OpenClaw, Hermes Agent, Claude (thương hiệu của Anthropic), ChatGPT (thương hiệu của OpenAI), n8n (thương hiệu của n8n GmbH), các phần mềm chạy model và các model AI mở (Ollama, LM Studio, Qwen, Gemma, gpt-oss…), Obsidian, Notion, phương pháp Building a Second Brain (Tiago Forte) cùng các phần mềm, dịch vụ nêu trong bài thuộc về chủ sở hữu tương ứng, không thuộc Aduca; Aduca không phải đối tác chính thức của các công ty này. Tính năng, gói và giá có thể thay đổi bất cứ lúc nào – hãy kiểm tra trang chính thức trước khi mua. Kết quả áp dụng phụ thuộc quy trình, dữ liệu và con người của từng doanh nghiệp; bài viết không cam kết doanh thu hay hiệu quả cụ thể. © 2026 Aduca — được trích dẫn khi ghi rõ nguồn aduca.vn.