在本文中,我將指導您一步一步建立一個適用於任何專案的動態文件站點,您可以在其中將文件連接到資料庫以提取和顯示數據,確保資訊始終是最新的。我們也將探索如何使用 AWS.
自動化整個流程,從內容產生到雲端部署此解決方案包括對圖表和圖表的支援、使用 GitHub Actions 中簡單工作流程的持續整合 (CI/CD) 以及使用 Terraform 的自動部署。讓我們開始吧!
文件及其更新是許多開發軟體的公司的重要流程,通常使用不同的工具進行,其中許多是付費解決方案。
因此,最近出現了“doc as code”的概念。這意味著使用軟體開發中使用的相同工具和工作流程來管理、版本和部署文件。
這種方法不僅可以更好地追蹤文檔,還可以促進其維護,並確保與軟體開發中使用的相同最佳實踐保持一致,不僅在程式碼中,而且在文件中。
對於這些網站的開發,有必要了解一些允許我們實施這種方法的實踐和工具。以下是本教程中要涵蓋的最重要方面的詳細清單。
MkDocs 是一個用 ?Python 編寫的靜態網站產生器,專為文件專案而設計。其目標是簡化使用 Markdown 文件建立文檔,這些文件易於編寫和閱讀。
透過最少的配置,MkDocs 將 Markdown 文件轉換為可導航且結構良好的文件網站,使其成為想要保持文件最新的開發人員和團隊的理想選擇。
MkDocs Material 是 MkDocs 的高級主題,遵循 Google 的 Material Design 指南。
Mermaid 是一個 JavaScript 函式庫,用於從文字建立圖表。透過與 MkDocs Material 集成,Mermaid 可讓您在文件中產生視覺化效果,例如流程圖、實體關係圖和文件中的其他圖表,而無需外部工具。
Jinja 是一個函式庫,允許將 Python 字典中的變數和資料嵌入到 HTML 中,使網頁動態化。該程式庫通常用於產生動態 HTML 和發送個人化電子郵件。
Docusaurus 是 Meta 於 2007 年開發的開源項目,它以快速且有效率的方式簡化了文件網站的建立、部署和維護。它允許使用 Markdown 和 MDX 來編寫內容,而其基於 React 的核心可以完全自訂樣式,以滿足專案的特定需求。
此外,Docusaurus 透過 @docusaurus/theme-mermaid 插件支援 Mermaid,從而可以直接在文件中包含圖表和圖表。
圖表即程式碼是一種允許您透過程式碼而不是使用傳統圖形工具來建立圖表的方法。您無需手動建立圖表,而是在文字檔案中編寫程式碼來定義圖表的結構、組件和連接。
然後該程式碼被轉換為圖形圖像,從而更容易在軟體專案中整合和記錄。它對於以程式設計方式建立和更新架構圖和流程圖特別有用。
如前所述,圖表允許您使用主要雲端技術的圖示來產生藍圖。這些圖表的表示是透過節點完成的,在我們的範例中,我們將使用所有與雲端相關的節點和 AWS 服務。
有關我如何創建它的更多詳細信息,您可以閱讀我關於圖表即代碼的文章,完整的實現可以在此存儲庫中找到:
圖表即程式碼是一種允許您透過程式碼而不是傳統圖形工具建立圖表的方法。您可以在文字檔案中編寫程式碼來定義圖表的結構、元件和連接,而不是手動建立圖表。
然後,該程式碼被轉換為圖形圖像,從而更容易在軟體專案中整合和記錄,這對於以程式設計方式建立和更新架構和流程圖特別有用。
Diagrams 是一個 ?Python 庫,它實現了圖表即程式碼方法,使您能夠透過程式碼建立架構基礎設施圖和其他類型的圖表。借助圖表,您只需幾行程式碼即可輕鬆定義雲端基礎架構元件(例如 AWS、Azure 和 GCP)、網路元素、軟體服務等。
在此用例中,我將為 機器學習專案 建立一個文件網站,涉及 ?醫院資料。目標是最初使用 MkDocs 建立一個互動式文件站點,然後將其遷移到 Docusaurus。該網站將包括靜態和動態元件以滿足特定要求,例如嵌入視覺化圖表和從 SQLite 資料庫動態更新資料。
因此,我們的文件網站將包含以下頁面:
在本節中,我們將逐步完成使用 MkDocs 從頭開始設定文件項目的步驟,並解釋其組織的目錄結構。
首先,您需要安裝以下 ?Python 庫:
安裝 MkDocs 和材質
pip install mkdocs mkdocs-material
安裝額外的庫以啟用動態內容更新
pip install aiosql pandas sqlite3 jinja2 shutil
初始化項目
首先建立一個新的 MkDocs 專案。在終端機中執行以下命令:
mkdocs new mkdocs cd mkdocs
此指令建立一個具有預設結構的基本 MkDocs 專案。
探索目錄結構
建立 MkDocs 網站後,您需要新增下列檔案和資料夾,因為預設不包含它們。
請記住,本文末尾提供了儲存庫的連結供您參考,以下將詳細解釋每個元件。
pip install mkdocs mkdocs-material
Component | Directory | Description |
---|---|---|
Database (db) | db | Contains the SQLite database (hospital.db) and queries (metadata.sql, person.sql) to manage dynamic data. Learn more about managing SQL queries in Python in my previous article: Python Projects with SQL. |
?️ Templates & Pages | template | Markdown templates: index.md, tables.md, architecture.md, glossary.md. Supports Mermaid diagrams, embedded images, and database-driven content. |
?️ Static Content (docs) | docs | Final site generated by update.py, including images (img/) and dynamic content populated from template. |
? Infrastructure (infraestructure) | infraestructure | Terraform scripts (main.tf, variables.tf) to deploy an S3 bucket for documentation hosting. |
一旦我們設定了專案結構,我們將從 mkdocs.yml 檔案開始逐步配置它。此文件定義文檔站點的結構和設定。它的結構如下:
mkdocs.yml
pip install mkdocs mkdocs-material
在此設定檔中,您主要可以在nav部分中看到可從選單存取的頁面。然後,我們指定 Mermaid 擴展,這將在下一節中解釋。最後,主題部分套用Material主題,啟用該庫中可用的樣式和元件。
如前所述,Mermaid 是一個 JavaScript 函式庫,用於從文字建立圖表和圖表。下面,我們將看到一些例子。在我們的例子中,我們將使用它在文件的表頁面上產生實體關係圖(ERD)。
在儲存庫中,您將能夠了解如何根據 Synthea 官方文件中的實體關係圖 (ERD) 建立此程式碼。您也可以在以下連結中查看表格頁面的範例:tables.md.
為了為我們的文件網站啟用動態內容生成,我們將使用 Jinja 來處理範本並用實際資料取代佔位符。以下是逐步細分:
設定範本資料夾
建立一個名為 templates 的資料夾來儲存網站的所有 Markdown 檔案。這些檔案應包含佔位符。例如,在index.md中,您可能有像{{database.version_date}}和{{database.version}}這樣的佔位符。
使用佔位符
佔位符是 Markdown 檔案中的動態變數。這些變數將使用Python字典自動更新以注入相關資料。
使用 update.py 產生動態內容
pip install mkdocs mkdocs-material
pip install aiosql pandas sqlite3 jinja2 shutil
透過執行這些步驟,您可以自動執行文件網站的更新過程,確保內容保持動態和相關性,而無需手動編輯。
在下一個範例中,我們將更新tables.md 檔案中的內容以顯示資料庫中的persons 表的範例。為此,我們將在 Markdown 檔案中建立一個佔位符 {{table.person}}。這個想法是動態地從 persons 表中獲取數據,然後使用 Jinja 庫和 pandas 將查詢結果轉換為 Markdown 表格式。
以下是使用佔位符時tables.md 檔案的外觀範例:
mkdocs new mkdocs cd mkdocs
流程如下:
? docs/ ├── ? img/ ├── `architecture.md` ├── `glossary.md` ├── `index.md` ├── `tables.md` ├── ? template/ │ ├── ? db/ │ │ ├── ? data/ │ │ │ ├── hospital.db │ │ ├── ? queries/ │ ├── `architecture.md` │ ├── `glossary.md` │ ├── `index.md` │ ├── `tables.md` │ └── `update.py` ? infraestructure/ ? github/ ├── ? workflows/ │ ├── main.yml ? mkdocs.yml
這樣,文件總是反映最新數據,根據資料庫中的實際內容顯示動態範例。
在以下部分中,我將提供有關如何使用 Docusaurus 實現文件網站的詳細步驟和見解。這包括設定、自訂和部署選項。
要開始使用 Docusaurus,我們遵循快速設定流程,該過程與我們用於 MkDocs 的步驟非常相似,但使用不同的工具。
pip install mkdocs mkdocs-material
pip install aiosql pandas sqlite3 jinja2 shutil
mkdocs new mkdocs cd mkdocs
設定檔 docusaurus.config.js 是我們自訂標題、主題、導覽以及啟用 Mermaid 等功能以進行圖表渲染的地方。
啟用美人魚的範例片段:
pip install mkdocs mkdocs-material
為了自訂首頁,我們修改 src/components/HomepageFeatures/index.js 檔案。在這裡,您可以調整 FeatureList 物件來更新主頁上顯示的功能。
就像在 MkDocs 中一樣,Docusaurus 支援 Markdown 文件 作為內容,我們按如下方式組織結構:
pip install aiosql pandas sqlite3 jinja2 shutil
__category__.json 範例:
mkdocs new mkdocs cd mkdocs
為了合併動態內容,例如資料庫表,我們使用名為 update.py 的 ?Python 腳本,您可以在儲存庫中找到該腳本。
此腳本從 SQLite 資料庫取得資料並處理儲存在 templates 資料夾中的 Markdown 檔案。然後,它使用獲取的資料更新這些文件,並將它們複製到 docs 資料夾中,為網站渲染做好準備。
此工作流程確保內容保持最新並準備好部署,遵循與我們使用 MkDocs 實現的類似方法。
在本節中,我們將介紹使用 AWS S3 進行託管的 MkDocs 和 Docusaurus 的部署流程Docusaurus部署流程。雖然這兩種工具的部署步驟相同,但安裝過程有所不同,MkDocs 基於 Python,
Docusaurus使用 Terraform 進行基礎架構設置 要將靜態文件網站部署到 AWS S3,我們使用 Terraform 來預置和配置所需的資源。此設定定義了 S3 儲存桶,啟用靜態網站託管,並使用儲存桶策略配置公共存取以允許唯讀存取。您可以在儲存庫中找到
main.tf您可以存取完整的
Terraform 檔案以及在儲存庫中部署網站的相應配置:
Terraform 設定檔自動部署的 GitHub Action 工作流程
。這將允許 GitHub Actions 安全地存取您的 AWS 帳戶,並在您將變更推送到主分支時執行將檔案上傳到 S3 等操作。行動
GitHub 操作配置 確保在設定 >下的GitHub儲存庫機密中配置您的AWS憑證。 秘密 >
儲存庫
以下是部署文件網站的所有程式碼的連結。如果覺得有用,可以給個star⭐️,追蹤我即可接收新文章通知。這將幫助我在技術社群中成長並創造更多內容。MkDocs 是實現文件入口網站的絕佳解決方案,可以使用程式碼輕鬆更新,幫助您的軟體開發專案文件保持最新和版本控制。
在此儲存庫中,我建立了一個簡單的網站來記錄資料模型和機器學習專案。
文件將包括圖表、表格和架構範例,提供全面且易於理解的指南,指導如何結合其他兩個 ?Python 函式庫來實現此框架。
文件及其更新是許多開發軟體的公司的一個重要流程,該流程是使用不同的工具執行的,其中許多是付費解決方案。
因此,最近出現了“doc as code”的概念。這意味著使用軟體開發中使用的相同工具和工作流程來管理、版本和......
Docusaurus 是實現文件入口網站的絕佳解決方案,可以使用程式碼輕鬆更新,幫助您的軟體開發專案文件保持最新和版本控制。
在此儲存庫中,我建立了一個簡單的網站來記錄資料模型和機器學習專案。
文件將包括圖表、表格和架構範例,提供全面且易於理解的指南,指導如何結合其他兩個 ?Python 函式庫來實現此框架。
文件及其更新是許多開發軟體的公司的一個重要流程,該流程是使用不同的工具執行的,其中許多是付費解決方案。
因此,最近出現了“doc as code”的概念。這意味著使用軟體開發中使用的相同工具和工作流程來管理、版本和部署文件......
這兩種解決方案都很容易實現,但在以下項目中,我們可以探索一些差異,什麼是最佳解決方案取決於您可能需要實現的上下文、知識和複雜性。
以上是在 AWS 上部署文件即程式碼:在 MkDocs 和 Docusaurus 中建置動態文件站點的詳細內容。更多資訊請關注PHP中文網其他相關文章!