Wordpress to Pelican

2021-11-27(土)

WordpressからPelicanへの移行メモ

前置き

  • Wordpressサーバが停電から電源復旧せず。時々起動。本番物理環境(寒い8号館)で作業するのはダルい。
  • 本体は持ち運び可能なNUC
  • IPは固定のグローバル

サーバが起動してるうちにバックアップ

IPの取得をDHCPに

/etc/network/interfaces をdhcp用に書き換える。ここらへんの作業は大した話ではない。再起動すればローカルのネットワーク内にアクセス可能なWebサーバが取り敢えず起動した状態になる。 ifconfigなりip addressでIPアドレスを調べておく。

嘘吐きサーバと嘘吐きクライアント

本番物理環境以外で起動してもWebサーバはServerNameに基いて喋るのでDHCPで取得したIP直打ちでブラウザから開こうとしても蹴られる。ServerNameをIPにする手段もあるがSSLの扱いとか諸々上手く行かないうえに,サーバ内でlynxやw3mで開いて保存してもsshで同じ問題に当たるので,

  1. サーバの/etc/hosts でDHCPから割り当てられたIPと使っていたFQDN(www.cvm....)を紐付ける。
  2. クライアント(macOS)の/private/etc/hostsも同様にサーバのFQDNがDHCPでサーバが取得したIPに紐付ける。

でローカル内で共謀させる。これでクライアントで今迄開いていたようにwww.cvm....を開くとローカルのサーバへアクセスできるし,sshやscpが機能する。

xmlをエクスポート

Wordpress to Wordpressならpluginで移行ツールも山程あるがPelicanはxmlが必要なので「ツール」-「エクスポート」で全データのXMLを吸い出す。 あとは/var/www/htmlにWordpressのフォルダがあるのでwp-contentsのuploadsフォルダをまるごと持ってくる(ここに画像等のデータが入ってる)

pelican-import

python環境でpelicanが使える前提。importツールも勝手に入る。

pelican-import --dir-cat --wpfile -o wpoutput -m markdown --disable-slugs ../cvmlab.WordPress.2021-11-27.xml
  • --dir-cat: Wordpressでのカテゴリごとにフォルダを掘って出力
  • --wpfile: Wordpressからのコンバート
  • -o wpoutput: wpoutputフォルダに出力
  • -m markdown: Markdown形式で出力
  • --disable-slugs: Pelicanはslugをファイル名やフォルダ名に使うのでWordpressのは使わないよう指定しないと後でカオスになる

という感じでカテゴリごとにフォルダが掘られ,mdファイルが配置される。 エラーが出たらipythonを起動し,

%run /path/to/pelican-import --wpfile -o output -m markdown --disable-slugs ../cvmlab.WordPress.2021-11-27.xml

という感じで実行し,その後で

%debug

とするとデバッガに入れる。大抵itemsに詰まったデータのitemを処理してる最中に起きるので,

item

でエラーが発生したitemの中身を表示して,Visual Studio Code等のエディタでxmlを開き該当箇所を探すと変な文字が紛れてたりするので消す。また実行してエラーが出なくなるまで繰り返し。

整形諸々

一応出力できたが問題は山積み

  • -e0----.mdみたいなファイル名になりコマンド実行時にオプション扱いされる
    • multi-byteな文字の問題だろうが以後コマンドでファイル名を指定する作業の際に--(ハイフン二つ)を前に置くとファイル名として扱ってくれる
    • pelicanで変換する際は問題にならないので放置
  • Pelicanはカテゴリは1つだけという制限
    • 色々手はあるが組合せが面倒なので全部開いて手作業で一つにした
    • Tagsは複数指定できるらしいが今後1つだけにすれば良いやということでそのまま
  • 画像のリンクはwordpress内へのリンクのまま(当たり前)
    • gsedで一気に置換する
    • sedでは"/"の代わりに別のセパレータ("|"とか)を指定すればURLをそのまま置換できる
      • Pelicanで使うcotnents/imagesの中にuploadsフォルダをまんまコピーしておく
find . -type f | xargs gsed -i.bak -e "s|https://www.cvm.ele.cst.nihon-u.ac.jp/wp/wp-content/|{static}/images/|g"

で後は全ページチェックしておかしなところを直していくしか無いのだが,過去記事なので致命的な問題の指摘が来たら直すってことで。

あとはPelicanの通常作業

make html
make serve

でlocalhost:8000を開いて確認。

問題無ければリリースする。

theme

あちこちに載ってるので大した話は無いが適当な場所で

git clone --recursive https://github.com/getpelican/pelican-themes

でpelicanconf.pyに

THEME='/path/to/zurb-F5-basic'

のような感じで書いて

make html
make serve

でlocalhost:8000を開いて確認する。

このままでも良いのだが

pelican-themes -i /path/to/theme

としてインストールすると,THEMEの記述をパス不要で名前だけにもできる。

落とし穴

Makefileが古く

pelican-quickstart

を実行し直してMakefileを作り直せと言われたので実行したら,githubのmaster→mainの名称変更があって以後mainのbranchに投げられるように変わってた。

  1. リポジトリの設定でデフォルトのbranchをmainに変更
  2. 同じくSitesの設定でgithub ioのサイトに反映させるbranchをmainに変更

が必要だった。

Category: Memo