[{"data":1,"prerenderedAt":860},["ShallowReactive",2],{"navigation_docs":3,"-web-dev-infrastructure-k3s-internal-networking":352,"-web-dev-infrastructure-k3s-internal-networking-surround":855},[4,54,83,116,125,161,179,200],{"title":5,"path":6,"stem":7,"children":8},"Ai","/ai","ai",[9,12,42,46,50],{"title":10,"path":6,"stem":11},"AI 技術探索","ai/index",{"title":13,"path":14,"stem":15,"children":16,"page":41},"Rag","/ai/rag","ai/RAG",[17,21,25,29,33,37],{"title":18,"path":19,"stem":20},"BM25 演算法深入解析：從 TF-IDF 到現代搜尋引擎的核心技術","/ai/rag/bm25-deep-dive-from-tf-idf-to-rag","ai/RAG/bm25-deep-dive-from-tf-idf-to-rag",{"title":22,"path":23,"stem":24},"Dense Retrieval（向量檢索）深入解析","/ai/rag/dense-retrieval-deep-dive","ai/RAG/dense-retrieval-deep-dive",{"title":26,"path":27,"stem":28},"RAG（Retrieval-Augmented Generation）原理與實作入門","/ai/rag/rag-intro-principles-and-implementation","ai/RAG/rag-intro-principles-and-implementation",{"title":30,"path":31,"stem":32},"RAG Retrieval Strategy 深入解析","/ai/rag/rag-retrieval-strategy-deep-dive","ai/RAG/rag-retrieval-strategy-deep-dive",{"title":34,"path":35,"stem":36},"Reciprocal Rank Fusion（RRF）教學：打造更穩定的檢索融合策略","/ai/rag/rrf-reciprocal-rank-fusion-guide","ai/RAG/rrf-reciprocal-rank-fusion-guide",{"title":38,"path":39,"stem":40},"TF-IDF（Term Frequency–Inverse Document Frequency）深入解析","/ai/rag/tf-idf-deep-dive","ai/RAG/tf-idf-deep-dive",false,{"title":43,"path":44,"stem":45},"Docus AI 功能完整實作指南","/ai/docus-ai-implementation","ai/docus-ai-implementation",{"title":47,"path":48,"stem":49},"llms.txt 是什麼？在 Nuxt 中控制 AI 與搜尋引擎爬蟲的新方式","/ai/llms-txt","ai/llms-txt",{"title":51,"path":52,"stem":53},"MCP（Model Context Protocol）是什麼？用「AI 的 USB-C」理解模型如何安全連接工具與資料","/ai/mcp_concept","ai/mcp_concept",{"title":55,"path":56,"stem":57,"children":58,"page":41},"Data Analysis","/data-analysis","data-analysis",[59,63,67,71,75,79],{"title":60,"path":61,"stem":62},"Exploratory Data Analysis（EDA）資料探索分析入門","/data-analysis/exploratory-data-analysis-eda","data-analysis/exploratory-data-analysis-eda",{"title":64,"path":65,"stem":66},"PR-AUC 深入解析：不平衡分類問題的重要評估指標","/data-analysis/pr-auc-for-imbalanced-classification","data-analysis/pr-auc-for-imbalanced-classification",{"title":68,"path":69,"stem":70},"ROC-AUC 深入解析：理解分類模型的判斷能力","/data-analysis/roc-auc-complete-guide","data-analysis/roc-auc-complete-guide",{"title":72,"path":73,"stem":74},"SHAP（SHapley Additive exPlanations）模型解釋方法深入解析","/data-analysis/shap-model-interpretation-complete-guide","data-analysis/shap-model-interpretation-complete-guide",{"title":76,"path":77,"stem":78},"Social Network Analysis（SNA）深入解析","/data-analysis/social-network-analysis-sna","data-analysis/social-network-analysis-sna",{"title":80,"path":81,"stem":82},"Time-based Split：為什麼時間序列資料不能使用 Random Split？","/data-analysis/time-based-split-vs-random-split","data-analysis/time-based-split-vs-random-split",{"title":84,"path":85,"stem":86,"children":87,"page":41},"MachineLearning","/machine_learning","machine_learning",[88,92,96,100,104,108,112],{"title":89,"path":90,"stem":91},"Confusion Matrix（混淆矩陣）完整解析","/machine_learning/confusion-matrix","machine_learning/confusion-matrix",{"title":93,"path":94,"stem":95},"Decision Tree 模型完整教學：從原理到 Python 實作","/machine_learning/decision-tree-complete-guide","machine_learning/decision-tree-complete-guide",{"title":97,"path":98,"stem":99},"為什麼 Decision Tree 在 Tabular Data 上常常勝過 Deep Learning？","/machine_learning/decision-tree-vs-deep-learning-on-tabular-data","machine_learning/decision-tree-vs-deep-learning-on-tabular-data",{"title":101,"path":102,"stem":103},"LightGBM 模型入門：理解高效能的 Gradient Boosting 演算法","/machine_learning/lightgbm-intro-for-tabular-data","machine_learning/lightgbm-intro-for-tabular-data",{"title":105,"path":106,"stem":107},"Logistic Regression（Logit 回歸）完整教學","/machine_learning/logistic-regression-complete-guide","machine_learning/logistic-regression-complete-guide",{"title":109,"path":110,"stem":111},"為什麼模型訓練需要 Train / Validation / Test Dataset？","/machine_learning/train-validation-test-dataset","machine_learning/train-validation-test-dataset",{"title":113,"path":114,"stem":115},"XGBoost 原理與實務教學","/machine_learning/xgboost-complete-guide","machine_learning/xgboost-complete-guide",{"title":117,"path":118,"stem":119,"children":120,"page":41},"Network","/network","network",[121],{"title":122,"path":123,"stem":124},"DNS 設定入門：CNAME vs A Record 完整解析","/network/dns-cname-vs-a-record-guide","network/dns-cname-vs-a-record-guide",{"title":126,"path":127,"stem":128,"children":129},"Nuxt","/nuxt","nuxt",[130,133,137,141,145,149,153,157],{"title":131,"path":127,"stem":132},"Nuxt 實戰指南","nuxt/index",{"title":134,"path":135,"stem":136},"Abstraction Layer 與 Adapter 的差別，一次搞懂設計角色","/nuxt/adapter_abstraction_layer","nuxt/adapter_abstraction_layer",{"title":138,"path":139,"stem":140},"Nuxt 4 全面理解 — 專案檔案結構解析","/nuxt/directory_structure","nuxt/directory_structure",{"title":142,"path":143,"stem":144},"Nuxt 前端 build 流程完整解析","/nuxt/frontend_build","nuxt/frontend_build",{"title":146,"path":147,"stem":148},"Nitro 是什麼？從 Nuxt 專案到 Server 與 Edge 的關鍵引擎","/nuxt/nitro","nuxt/nitro",{"title":150,"path":151,"stem":152},"深入理解 Nuxt 的 .nuxt 與 .output：為什麼部署時一定要分清楚？","/nuxt/nuxt_and_output","nuxt/nuxt_and_output",{"title":154,"path":155,"stem":156},"Nuxt 中 dev、build、preview 的差異一次搞懂","/nuxt/nuxt_dev_build_preview","nuxt/nuxt_dev_build_preview",{"title":158,"path":159,"stem":160},"Nuxt Image vs \u003Cimg>：為什麼 Nuxt 3 專案幾乎都該用 \u003CNuxtImg>？","/nuxt/nuxt_image","nuxt/nuxt_image",{"title":162,"path":163,"stem":164,"children":165},"Python 程式開發","/python","python/index",[166,167,171,175],{"title":162,"path":163,"stem":164},{"title":168,"path":169,"stem":170},"如何在 FastAPI 中調用記憶體 Buffer 回傳圖片 (附實例)","/python/memory_buffer","python/memory_buffer",{"title":172,"path":173,"stem":174},"Python 單元測試教學：如何為你的程式撰寫 Test","/python/python-unit-testing-unittest-pytest","python/python-unit-testing-unittest-pytest",{"title":176,"path":177,"stem":178},"如何使用 uv 取代 pip：改善 Python 專案的開發流程","/python/uv","python/uv",{"title":180,"path":181,"stem":182,"children":183,"page":41},"Statistic","/statistic","statistic",[184,188,192,196],{"title":185,"path":186,"stem":187},"卡方檢定（Chi-Square Test）入門教學","/statistic/chi-square-test-intro","statistic/chi-square-test-intro",{"title":189,"path":190,"stem":191},"常見抽樣方法（Sampling Methods）教學：Stratified、Quota、Convenience、Systematic、Simple Random","/statistic/common-sampling-methods-guide","statistic/common-sampling-methods-guide",{"title":193,"path":194,"stem":195},"Cramér’s V 指標介紹：如何衡量兩個類別變數之間的關聯","/statistic/cramers-v-for-categorical-association","statistic/cramers-v-for-categorical-association",{"title":197,"path":198,"stem":199},"Mann–Whitney U 與 Kolmogorov–Smirnov（KS）檢定：非參數統計檢定的入門指南","/statistic/mann-whitney-u-and-ks-test-intro","statistic/mann-whitney-u-and-ks-test-intro",{"title":201,"path":202,"stem":203,"children":204},"WebDev","/web_dev","web_dev",[205,208,234,248,282,312,334],{"title":206,"path":202,"stem":207},"Web 前端開發","web_dev/index",{"title":209,"path":210,"stem":211,"children":212},"瀏覽器與渲染","/web_dev/browser","web_dev/browser/index",[213,214,218,222,226,230],{"title":209,"path":210,"stem":211},{"title":215,"path":216,"stem":217},"瀏覽器儲存空間完整解析：Cookie、localStorage、IndexedDB 到 Cache Storage","/web_dev/browser/browser-storage-comprehensive-guide","web_dev/browser/browser-storage-comprehensive-guide",{"title":219,"path":220,"stem":221},"DOM (Document Object Model) 深入解析","/web_dev/browser/dom","web_dev/browser/dom",{"title":223,"path":224,"stem":225},"Service Worker Request Flow 深入解析","/web_dev/browser/service-worker-request-flow","web_dev/browser/service-worker-request-flow",{"title":227,"path":228,"stem":229},"CSR、SSR 與 SSG 是什麼？前端渲染策略完整比較","/web_dev/browser/ssr_csr_ssg","web_dev/browser/ssr_csr_ssg",{"title":231,"path":232,"stem":233},"Virtual DOM 深入解析：為什麼它能優化前端效能？","/web_dev/browser/virtual_dom","web_dev/browser/virtual_dom",{"title":235,"path":236,"stem":237,"children":238},"圖形技術","/web_dev/graphics","web_dev/graphics/index",[239,240,244],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"為什麼 Three.js 專案幾乎都選擇 CSR？從 SSR 問題談起","/web_dev/graphics/threejs_csr","web_dev/graphics/threejs_csr",{"title":245,"path":246,"stem":247},"WebGL 是什麼？為什麼前端 3D 幾乎都靠它？","/web_dev/graphics/webgl","web_dev/graphics/webGL",{"title":249,"path":250,"stem":251,"children":252},"架構與配置","/web_dev/infrastructure","web_dev/infrastructure/index",[253,254,258,262,266,270,274,278],{"title":249,"path":250,"stem":251},{"title":255,"path":256,"stem":257},"Zeabur + K3s + Nuxt 部署架構完整解析","/web_dev/infrastructure/k3s-zeabur","web_dev/infrastructure/K3s-zeabur",{"title":259,"path":260,"stem":261},"ECS vs Docker vs Kubernetes：從部署堆疊理解三層架構","/web_dev/infrastructure/ecs-docker-kubernetes-stack","web_dev/infrastructure/ecs-docker-kubernetes-stack",{"title":263,"path":264,"stem":265},"ECS vs VPS 是什麼？從部署網站的角度一次搞懂差別","/web_dev/infrastructure/ecs-vs-vps","web_dev/infrastructure/ecs-vs-vps",{"title":267,"path":268,"stem":269},"Zeabur 內網服務連線完整入門指南","/web_dev/infrastructure/k3s-internal-networking","web_dev/infrastructure/k3s-internal-networking",{"title":271,"path":272,"stem":273},"使用 Microservices 架構設計系統的優勢解析","/web_dev/infrastructure/microservices-architecture-advantages","web_dev/infrastructure/microservices-architecture-advantages",{"title":275,"path":276,"stem":277},"Nginx 入門教學：從反向代理到與 Kubernetes 的架構比較","/web_dev/infrastructure/nginx-intro","web_dev/infrastructure/nginx-intro",{"title":279,"path":280,"stem":281},"YAML 配置是什麼？為什麼現代開發都在用它","/web_dev/infrastructure/yaml-configuration","web_dev/infrastructure/yaml-configuration",{"title":283,"path":284,"stem":285,"children":286},"網絡與通訊","/web_dev/network","web_dev/network/index",[287,288,292,296,300,304,308],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"HTTP Request 結構完整解析：從 Request Line 到 Header 一次看懂","/web_dev/network/http-request-structure","web_dev/network/http-request-structure",{"title":293,"path":294,"stem":295},"OSI 模型（Open Systems Interconnection Model）完整解析","/web_dev/network/osi-model","web_dev/network/osi-model",{"title":297,"path":298,"stem":299},"RESTful API 設計原則與實務解析","/web_dev/network/restful-api","web_dev/network/restful-api",{"title":301,"path":302,"stem":303},"RESTful API 五大設計原則深入解析","/web_dev/network/restful-api-principles","web_dev/network/restful-api-principles",{"title":305,"path":306,"stem":307},"Server-Sent Events (SSE) 深入解析與實作教學","/web_dev/network/sse-introduction","web_dev/network/sse-introduction",{"title":309,"path":310,"stem":311},"WebSocket 入門教學：從概念到 Node.js 實作","/web_dev/network/websocket-introduction","web_dev/network/websocket-introduction",{"title":313,"path":314,"stem":315,"children":316},"認證與安全","/web_dev/security","web_dev/security/index",[317,318,322,326,330],{"title":313,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"使用 Cookie 與 Session 建立使用者驗證（完整新手教學）","/web_dev/security/cookie-session-authentication","web_dev/security/cookie-session-authentication",{"title":323,"path":324,"stem":325},"JWT 驗證機制完整解析：從登入流程到實務應用","/web_dev/security/jwt-authentication","web_dev/security/jwt-authentication",{"title":327,"path":328,"stem":329},"Secret Key 簽名是什麼？從零理解資料簽名的本質","/web_dev/security/secret-key-signing","web_dev/security/secret-key-signing",{"title":331,"path":332,"stem":333},"SSH（Secure Shell）是什麼？從遠端登入到安全通道的核心概念","/web_dev/security/ssh","web_dev/security/ssh",{"title":335,"path":336,"stem":337,"children":338},"SEO 與規範","/web_dev/seo","web_dev/seo/index",[339,340,344,348],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Canonical URL 是什麼？用生活化方式搞懂前端 SEO 的基本保命符","/web_dev/seo/canonical_link","web_dev/seo/canonical_link",{"title":345,"path":346,"stem":347},"robots.txt 是什麼？SEO 的第一道守門員","/web_dev/seo/robot_txt","web_dev/seo/robot_txt",{"title":349,"path":350,"stem":351},"Nuxt SEO 中的 Meta 與 SEO 工具是如何運作的？","/web_dev/seo/seo","web_dev/seo/seo",{"id":353,"title":267,"body":354,"description":841,"extension":842,"links":843,"meta":844,"navigation":852,"path":268,"seo":853,"stem":269,"__hash__":854},"docs/web_dev/infrastructure/k3s-internal-networking.md",{"type":355,"value":356,"toc":822},"minimark",[357,360,364,367,369,373,376,379,395,398,409,412,415,418,420,424,427,430,433,439,442,453,456,462,465,467,471,474,478,492,495,501,507,510,512,515,531,534,539,542,544,548,551,554,565,568,574,577,583,586,592,595,597,601,604,607,613,616,622,625,632,635,640,642,646,649,655,658,675,677,680,686,689,695,698,701,703,707,710,727,730,743,746,749,751,754,760,763,766,768,772,775,780,783,788,791,794,796,799,818],[358,359],"hr",{},[361,362,363],"p",{},"在使用 Zeabur 部署專案時，許多新手第一個卡關的地方，往往不是程式碼，而是「服務怎麼互相連線」。資料庫連不上、API 呼叫失敗、容器之間彼此找不到對方，這些問題其實都跟「內網觀念」有關。",[361,365,366],{},"這篇文章會用最直覺的方式，帶你理解 Zeabur 的內網機制。你不需要先懂 Kubernetes，也不需要背誦太多名詞，只要掌握一個核心概念，就能解決 90% 的連線問題。",[358,368],{},[370,371,372],"h2",{"id":372},"從一棟辦公大樓開始理解",[361,374,375],{},"想像你有一棟辦公大樓。這棟大樓就是一個 Zeabur Project。",[361,377,378],{},"在這棟大樓裡，有很多房間，每個房間代表一個服務。例如：",[380,381,382,386,389,392],"ul",{},[383,384,385],"li",{},"nuxt-app：你的網站前端",[383,387,388],{},"api-server：你的後端 API",[383,390,391],{},"postgres：資料庫",[383,393,394],{},"redis：快取系統",[361,396,397],{},"如果 API 要去找資料庫，它需要：",[380,399,400,403,406],{},[383,401,402],{},"打電話到外面嗎？",[383,404,405],{},"查 IP 位址嗎？",[383,407,408],{},"經過大樓警衛嗎？",[361,410,411],{},"都不需要。",[361,413,414],{},"因為它們在同一棟大樓裡，只要知道「房間名稱」就能找到彼此。",[361,416,417],{},"這個「用名字找服務」的機制，就是 Zeabur 的內網服務連線原理。",[358,419],{},[370,421,423],{"id":422},"zeabur-內網是怎麼運作的","Zeabur 內網是怎麼運作的？",[361,425,426],{},"Zeabur 的底層是基於輕量化 Kubernetes 發行版 K3s 所建立的叢集架構。K3s 本質上仍然是 Kubernetes，只是更輕量，適合雲端平台快速部署。",[361,428,429],{},"在 Kubernetes 架構中，每個 Service 都會自動被註冊進內部 DNS 系統。因此，只要在同一個 Project（同一個叢集命名空間）裡，服務名稱本身就是它的內網地址。",[361,431,432],{},"這意味著：",[434,435,436],"blockquote",{},[361,437,438],{},"每個 Service 名稱，就是它的內網 Host。",[361,440,441],{},"假設你的專案長這樣：",[443,444,449],"pre",{"className":445,"code":447,"language":448},[446],"language-text","Project\n ├── nuxt\n ├── openclaw\n └── postgres\n","text",[450,451,447],"code",{"__ignoreMap":452},"",[361,454,455],{},"那麼它們彼此之間可以直接透過以下名稱連線：",[443,457,460],{"className":458,"code":459,"language":448},[446],"nuxt\nopenclaw\npostgres\n",[450,461,459],{"__ignoreMap":452},[361,463,464],{},"不需要 IP，也不需要公開網址。",[358,466],{},[370,468,470],{"id":469},"最常見情境後端連資料庫","最常見情境：後端連資料庫",[361,472,473],{},"這是幾乎每個新手都會遇到的情境。",[475,476,477],"h3",{"id":477},"常見錯誤寫法",[443,479,483],{"className":480,"code":481,"language":482,"meta":452,"style":452},"language-env shiki shiki-themes github-dark","DB_HOST=localhost\n","env",[450,484,485],{"__ignoreMap":452},[486,487,490],"span",{"class":488,"line":489},"line",1,[486,491,481],{},[361,493,494],{},"這裡的問題在於：",[361,496,497,500],{},[450,498,499],{},"localhost"," 永遠只代表「目前這個容器自己」。",[361,502,503,504,506],{},"如果你的後端和資料庫是兩個不同的服務，那麼後端寫 ",[450,505,499],{},"，只會找到自己，不會找到資料庫。",[361,508,509],{},"這就像你在自己房間裡喊自己的名字。",[358,511],{},[475,513,514],{"id":514},"正確寫法",[443,516,518],{"className":480,"code":517,"language":482,"meta":452,"style":452},"DB_HOST=postgres\nDB_PORT=5432\n",[450,519,520,525],{"__ignoreMap":452},[486,521,522],{"class":488,"line":489},[486,523,524],{},"DB_HOST=postgres\n",[486,526,528],{"class":488,"line":527},2,[486,529,530],{},"DB_PORT=5432\n",[361,532,533],{},"這代表：",[434,535,536],{},[361,537,538],{},"去找名為 postgres 的服務。",[361,540,541],{},"Zeabur 會透過內網 DNS 幫你正確導向對應的容器。",[358,543],{},[370,545,547],{"id":546},"服務之間互相呼叫-api","服務之間互相呼叫 API",[361,549,550],{},"假設 openclaw 需要呼叫 nuxt 的 API。",[361,552,553],{},"你不需要：",[380,555,556,559,562],{},[383,557,558],{},"使用公開網址",[383,560,561],{},"使用 VPS IP",[383,563,564],{},"開防火牆",[361,566,567],{},"只要這樣寫：",[443,569,572],{"className":570,"code":571,"language":448},[446],"http://nuxt:3000\n",[450,573,571],{"__ignoreMap":452},[361,575,576],{},"格式非常固定：",[443,578,581],{"className":579,"code":580,"language":448},[446],"http://服務名稱:port\n",[450,582,580],{"__ignoreMap":452},[361,584,585],{},"例如：",[443,587,590],{"className":588,"code":589,"language":448},[446],"postgres:5432\nredis:6379\nnuxt:3000\nopenclaw:18789\n",[450,591,589],{"__ignoreMap":452},[361,593,594],{},"這些都是內網呼叫。",[358,596],{},[370,598,600],{"id":599},"為什麼不能用-ip","為什麼不能用 IP？",[361,602,603],{},"在容器環境中，IP 是動態分配的。",[361,605,606],{},"例如今天 postgres 的 IP 是：",[443,608,611],{"className":609,"code":610,"language":448},[446],"10.42.0.8\n",[450,612,610],{"__ignoreMap":452},[361,614,615],{},"明天可能變成：",[443,617,620],{"className":618,"code":619,"language":448},[446],"10.42.0.21\n",[450,621,619],{"__ignoreMap":452},[361,623,624],{},"但「postgres」這個 Service 名稱不會變。",[361,626,627,628,631],{},"Kubernetes 透過 Service abstraction 層，讓你永遠用名稱存取服務，而不是直接對 Pod IP 連線。這也是容器編排系統的核心設計理念之一（參考 Kubernetes 官方 Service 說明）",[486,629,630],{},"1","。",[361,633,634],{},"因此：",[434,636,637],{},[361,638,639],{},"永遠使用服務名稱，而不是 IP。",[358,641],{},[370,643,645],{"id":644},"內網-vs-外網為什麼差很多","內網 vs 外網：為什麼差很多？",[475,647,648],{"id":648},"內網連線",[443,650,653],{"className":651,"code":652,"language":448},[446],"http://postgres:5432\n",[450,654,652],{"__ignoreMap":452},[361,656,657],{},"特點：",[380,659,660,663,666,669,672],{},[383,661,662],{},"走叢集內部網路",[383,664,665],{},"不經過公開網際網路",[383,667,668],{},"速度快",[383,670,671],{},"安全",[383,673,674],{},"不產生額外對外流量",[358,676],{},[475,678,679],{"id":679},"外網連線",[443,681,684],{"className":682,"code":683,"language":448},[446],"https://postgres.zeabur.app\n",[450,685,683],{"__ignoreMap":452},[361,687,688],{},"這會變成：",[443,690,693],{"className":691,"code":692,"language":448},[446],"容器 → 出網 → 公網 → 再回來\n",[450,694,692],{"__ignoreMap":452},[361,696,697],{},"這不但慢，還可能產生額外風險與流量成本。",[361,699,700],{},"在同一個 Project 裡，幾乎不應該使用公開網址互相呼叫。",[358,702],{},[370,704,706],{"id":705},"如何確認內網是否正常","如何確認內網是否正常？",[361,708,709],{},"如果你透過 SSH 進入容器或 VPS，可以用以下方式測試：",[443,711,715],{"className":712,"code":713,"language":714,"meta":452,"style":452},"language-bash shiki shiki-themes github-dark","ping postgres\n","bash",[450,716,717],{"__ignoreMap":452},[486,718,719,723],{"class":488,"line":489},[486,720,722],{"class":721},"svObZ","ping",[486,724,726],{"class":725},"sU2Wk"," postgres\n",[361,728,729],{},"或：",[443,731,733],{"className":712,"code":732,"language":714,"meta":452,"style":452},"curl http://nuxt:3000\n",[450,734,735],{"__ignoreMap":452},[486,736,737,740],{"class":488,"line":489},[486,738,739],{"class":721},"curl",[486,741,742],{"class":725}," http://nuxt:3000\n",[361,744,745],{},"如果成功回應，代表內網 DNS 與服務運作正常。",[361,747,748],{},"這是一個非常實用的排錯方式。",[358,750],{},[370,752,753],{"id":753},"新手最常踩的三個坑",[361,755,756,757,759],{},"第一個是使用 ",[450,758,499],{},"。\n這只能連到自己，不能連到其他服務。",[361,761,762],{},"第二個是使用 VPS IP。\nIP 在容器環境中是動態的，重建後會改變。",[361,764,765],{},"第三個是用公開網址打自己服務。\n這會繞一大圈網路，變慢又不必要。",[358,767],{},[370,769,771],{"id":770},"_30-秒總結","30 秒總結",[361,773,774],{},"在 Zeabur 中，只要記住一句話：",[434,776,777],{},[361,778,779],{},"在同一個 Project 裡，用 Service 名稱互相連線。",[361,781,782],{},"格式永遠是：",[443,784,786],{"className":785,"code":580,"language":448},[446],[450,787,580],{"__ignoreMap":452},[361,789,790],{},"當你理解這個觀念後，資料庫連線問題、API 呼叫錯誤、甚至部分容器啟動異常，都會變得容易分析。",[361,792,793],{},"如果你接下來想更深入理解為什麼有時候「服務可以連線，但 Startup Probe 卻失敗」，那就會牽涉到容器健康檢查與 Kubernetes Probe 機制。這會是下一個更關鍵的觀念。",[358,795],{},[370,797,798],{"id":798},"參考資料",[800,801,802,811],"ol",{},[383,803,804,805],{},"Kubernetes 官方文件 – Service 概念說明\n",[806,807,808],"a",{"href":808,"rel":809},"https://kubernetes.io/docs/concepts/services-networking/service/",[810],"nofollow",[383,812,813,814],{},"K3s 官方文件\n",[806,815,816],{"href":816,"rel":817},"https://docs.k3s.io/",[810],[819,820,821],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}",{"title":452,"searchDepth":527,"depth":527,"links":823},[824,825,826,831,832,833,837,838,839,840],{"id":372,"depth":527,"text":372},{"id":422,"depth":527,"text":423},{"id":469,"depth":527,"text":470,"children":827},[828,830],{"id":477,"depth":829,"text":477},3,{"id":514,"depth":829,"text":514},{"id":546,"depth":527,"text":547},{"id":599,"depth":527,"text":600},{"id":644,"depth":527,"text":645,"children":834},[835,836],{"id":648,"depth":829,"text":648},{"id":679,"depth":829,"text":679},{"id":705,"depth":527,"text":706},{"id":753,"depth":527,"text":753},{"id":770,"depth":527,"text":771},{"id":798,"depth":527,"text":798},"用最直覺的方式理解 Zeabur 內網機制，學會在同一個 Project 中讓服務彼此連線，避免 localhost 與 IP 的常見錯誤。","md",null,{"tags":845,"category":203,"date":851},[846,847,848,849,850],"zeabur","devops","networking","docker","backend","2026-02-24",true,{"title":267,"description":841},"4V3XLk1bYpgRq66HEi5IiOSS4df07q3Mfd5Nsk2_664",[856,858],{"title":263,"path":264,"stem":265,"description":857,"children":-1},"從新手部署網站的情境出發，深入理解 VPS 與 ECS 的本質差異、使用方式與實務選擇建議。",{"title":271,"path":272,"stem":273,"description":859,"children":-1},"深入了解 microservices 架構的核心概念，並探討其在現代系統設計中的優勢與實際應用場景。",1776690846679]