如何將網站從 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之前需要先安裝一些相依性,包含BeautifulSoup4lxmlPandoc。 若要將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

分享到: DiasporaTwitterFacebookLinkedInHackerNewsEmailReddit