Categories: blog

我又建立一個新的 blog 了

但這次是用 WordPress 架的喔!

明明就有一個靜態的 blog 了,為什麼還要再弄一個呢?

之前的 blog 因為是用 hexo 產稱靜態的網頁,直接用 markdown 語法來寫,覺得相當方便啊,這太適合一個都用文字界面的人了吧,而且還有許多 plugins 可以用,好炫啊。不過呢後來發現日常使用起來還是有限制,導致使用情況不太理想,並沒有產出幾篇文章。對我個人來說如果當時候沒有順便把事情紀錄起來,時間一久其實也都不會再去補了。

今年想要改善這個問題,就整理了一下為什麼不太開起來寫呢?(之前都是用 vim 在寫 markdown 的)

  1. vim 沒有裝 markdown 的 preview plugin
  2. markdown 語法對於太長斷行的處理
  3. vim 對於中文字斷行的處理
  4. 新增圖片等等步驟有點多
  5. 也都要考慮空間的問題
  6. deploy 時間有點久

基於以上幾點,雖然可以用文字界面寫 blog,但還是需要到瀏覽器確認顯示的情況才行,中間會在終端機跟瀏覽器視窗切換來回好幾次。我認為這是造成效率不高的主因,那該怎麼辦呢?也許不要那麼堅持用文字界面,換一個可以直接線上編輯系統好像不錯。

那就來用用看 WordPress 吧

用 docker-compose 裝一組 WordPress

在決定自行裝一組 WordPress 之前,有先註冊 WordPress.com 想先試用看看線上編輯工具合用。雖然看其他人的介紹是可以免費使用的,但不論我怎麼跳怎麼弄,似乎都導到要付費的頁面 😏 。反正我本來就有租用 VPS 服務,就在自己的伺服器上來裝一組 WordPress 吧。

因為原本的 VPS node 上已經有許多 http/https 的服務,為了不想要破壞原本還算乾淨的設定,用 docker 來架似乎是個好方法,至少 httpd 不會跟原本的共用。然而 WordPress 除了 httpd 之外,另外也需要資料庫的服務,所以其實是先需要一個 mysql/mariadb 的 container,再跑一個 wordpress 的 container。

是不是聽起來有點麻煩?沒錯沒錯!有一個工具叫做 docker-compose 就是用來管理多個 containers 的組合,甚至官方的網站上就有一個 WordPress 的範例呢!拿來改一改就可以跑起來看看了,我自己的改動主要是:

  1. 使用 bind mount 來取代 volume 比較方便直接修改
  2. 外部 mapping 的 port 8090 到 container 內的 port 80

因為原本的 port 80/443 被我的 haproxy 綁走了,所以除了 domain name 需要指過來之外,還需要設定一下 haproxy 導到 wordpress 開出來的 8090。

frontend main
   use_backend blog if { ssl_fc_sni blog.ymk.tw }

 backend blog
   mode        http
   server  app1 127.0.0.1:8090 check

但是問題來了,一開始用 http 連線是沒有問題的可以正常設定跑起來,但其實所有我個人的 http 服務呢,都會強制重導到 https,而且憑證也是直接接在 haproxy 上 👍,也就是說後面 backend 的服務其實不用處理 https,都讓 haproxy 來做就行了。原本認為這樣設定對於 wordpress 也適用,但經過調整嘗試過許多設定要讓 wordpress container 正常接到 https 都是無法正常工作的。

Don\'t try to https for wordpress under docker-compose

too much pain

在 Linode 上直接弄一個 WordPress

既然用 wordpress container 在原本的服務上都設定不好 https,那只好直接來一個專門的 WordPress 主機 🖥 吧 。倒也不是用網路上大家推薦的那些 hosts,而是選擇使用 Linode 的服務。原因是本來就想要在 Linode 開一個日本機房來當作 VPN proxy 了,另外也想把都沒在用又越來越貴個人 G Suite (現在叫 Google Workspace) 停掉,把租金轉到一個 Linode 好像用處更大,於是就這麼做了。

當然 WordPress 這麼受歡迎,所以 Linode 上根本就有一鍵安裝好的選項可以直接裝,另外也有使用 OpenLiteSpeed http 服務的 wordpress 可以選擇,就直接挑一個最便宜的方案跑起來了。

安裝的過程就如網頁說明般那樣,只是注意一下在剛創建好 node 的時候就 ssh 連進去的話,可能還看不到寫好的文字安裝說明跳出來,需要再等一下。建議趁這時候來設定 DNS 把 domain name 轉到剛建立的這台 node,因為開始設定之後會直接順便幫忙裝好 Let\'s Encrypt 弄好 https,這太方便了吧!如此就可以從 WordPress 安裝步驟開始就一路都使用 https 了 💯 。至於會不會有自動 certbot 更新憑證呢,到時候再來關心一下吧。

最後就如同一般 Linux server 一樣,在上面是可以繼續架設其他的服務的,但再這之前還是先搞定一些安全的防護事項,首先還是先把 sshd 允許 root 登入的設定給關掉吧:

$ sudo vim /etc/ssh/sshd_config
...
PermitRootLogin no
...

接著安裝一下 ufw 並且設定打開,據 ss -ln 的觀察需要打開的項目底下這些,雖然有一個 udp port 看起來是 openlitespeed 自動挑的不知道要做什麼就是。

$ sudo ufw allow ssh
$ sudo ufw default reject
$ sudo ufw allow 25,80,443,7080,8088/tcp
$ sudo ufw allow 443,7080/udp
$ sudo ufw enable

終於又有一個 blog 了 🆕 可喜可賀

yumaokao

Published by
yumaokao

Recent Posts

Invoke Method with JDWP

smali breakpoin...

2 年 ago

tetris3d with plotly

魔術磁力方塊好好玩 魔術磁力方...

3 年 ago

AliasDict, a python dict for alias resolver

用 dict 存 alias ...

3 年 ago

hashcat sha256 from mac address

只給一天期限的憑證檔案 去年幫...

3 年 ago

python rich with asyncio

python rich 畫圖很...

3 年 ago