如何將網站從 WordPress 遷移至 Pelican
Posted on Thu 10 September 2020 in 架站相關
緣起
由於最近我在免費主機上架的 WordPress 網站,可靠性愈來愈差了,自動更新版本常常失敗,新的外掛也裝不上去,網站連線速度也不快,不過畢竟是免費的主機,可靠性本來就無法保證,因此興起了將網站搬家的念頭。 因為我的網站都是靜態的內容為主,所以想要將網站架在GitHub Pages上。 由於我對 Python 比較熟悉,所以決定使用Pelican來生成靜態網站。 網站遷移成功之後就來記錄一下搬家的心得。
使用 Pelican
Pelican 是一個用 Python 寫的靜態網站產生器,以 reStructuredText 或是 Markdown 格式來寫內容,支援自訂主題與擴充功能。 Pelican 就是個 Python module,可以簡單的用 Pip安裝,因為我對 Markdown 比較熟悉,所以安裝 Markdown 版本。 新增 Pelican 專案可以參考官方文件,網站基本結構如下:
yourproject/
├── content
│ └── pages
│ └── (articles)
├── output
├── pelicanconf.py # Main settings file
└── publishconf.py # Settings to use when ready to publish
Pelican 的內容分為兩種,其中 pages 為跟時間順序無關的靜態內容,而 articles 是跟有時間順序的內容。
pelicanconf.py
是生成網站用的設定檔案,publishconf.py
是發行網站用的設定檔案。
內容的檔案都需要在開頭加入 metadata,用來正確的生成網站結構,其中 Markdown 的格式為:
Title: My super title
Date: 2010-12-03 10:20
Modified: 2010-12-05 19:30
Category: Python
Tags: pelican, publishing
Slug: my-super-post
Authors: Alexis Metaireau, Conan Doyle
Summary: Short version for index and feeds
This is the content of my super blog post.
在發行網站前,可以先用以下命令先在http://localhost:8000測試網站功能,詳細說明可以參考文件。
pelican --autoreload --listen
主題
Pelican 支援自訂主題,除了可以自行創作之外,社群也分享了很多主題可以直接採用,各種主題的效果也可以在這裡預覽。
要使用主題,只需要在pelicanconf.py
當中加入主題的路徑:
THEME = 'path/to/pelican-theme'
我現在用的主題是Flex。
擴充功能
Pelican 支援擴充功能 (Plugins) 來增強網站的功能,社群分享的擴充功能一樣可以在GitHub上找到。
要使用擴充功能,要在pelicanconf.py
當中加入擴充的路徑與名稱:
PLUGIN_PATHS = ['path/to/pelican-plugins']
PLUGINS = ['assets', 'sitemap', 'gravatar']
匯入 WordPress 網站內容
Pelican 有提供匯入工具pelican-import
,可以將其他網站的內容轉換成 Markdown 或是 reStructuredText,期支援的格式包含WordPress XML檔案。
在使用pelican-import
之前需要先安裝一些相依性,包含BeautifulSoup4、lxml與Pandoc。
若要將WordPress XML轉換為 Markdown 格式,使用方法為:
pelican-import -m markdown --wpfile -o ~/output ~/posts.xml
由於無法完美的轉換內容,所以匯入之後還是需要手動修復依些內容。
佈署網站到 GitHub Pages
當網站準備好之後,就可以佈署到 GitHub Pages 上了,關於使用方式參考官方文件。 當設定好後,其佈署流程為:
1. 使用發行用的設定檔案publishconf.py
產生網站檔案
pelican content -o /path/to/output -s publishconf.py
2. 將生成的網站檔案用 Git 的 push 命令將檔案上傳到用來發行 GitHub Pages 的 GitHub repository,假設網站檔案放在倉庫的 gh-pages branch,則其命令為
git push origin gh-pages