近期輔導台中某家 ERP 系統開發的單位,她們公司有個客戶服務系統,是使用大約10年前的開源 Bug Tracker 建置的,其基礎應用服務是使用 Postgres 8.4、Php 5.5.3 挺舊的版本與 早期版本的 Apache 在 Windows 環境所架設的。因為她們有計畫要採購更新的伺服器或 NAS,並希望舊有的客服系統能順利移轉,但又不希望整個伺服器系統環境被舊有的系統牽絆住,所以公司高層主管請教我怎樣的作法會比較妥當。
嗯,這雖不是我輔導的範疇,不過基本的系統移轉 (migration) 觀念還是有的,所以就順口回答道:「包起來!」呵,她們當然並不懂我這樣的意思是什麼,所以當然還是會稍作一些解釋,其實就是完整的把原來舊系統的環境,給整個移轉到新伺服器上,並建置在虛擬化的環境,如利用虛擬機 (Virtual Machine) 甚或 Docker 容器化更可以大幅降低系統耗費資源。這種就是屬於「包裹 (wrapper)」的觀念,不要動到原來舊系統的環境,這絕對是最保險的移轉方式。
結果解釋一番,對方還是不太懂 !^^,乾脆就花一些時間,我把她們舊系統的環境,同時利用 Hyper-V 虛擬機,以及透過 WSL 跑 Docker,提供兩種移轉方式讓她們參考。
利用 Hyper-V 虛擬機建置一個 Windows-based 的 OS (這裡我使用 Windows 10 LTSC),然後再安裝原來的應用伺服環境。配合當時的系統需求 (主要是 PHP 版本的考量),所以我找到 XAMPP win32-5.5.33-0-VC11 版本,以及 Postgres 8.4.5.1 版本 (有些意外,官網竟然已經下載不到老舊的版本) 一一安裝。
再來就是作一番設定,主要是 XAMPP 並沒有直接支援 Postgres 資料庫,所以當然爬文看先輩們的設定心得。參考這篇:「How to Integrate postgreSQL Database to XAMPP in Windows」,以及需要在 Apache 內啟用 PHP 的「Short Open Tag」:「How to Enable PHP Short Open Tag (short_open_tag)?」這類的 How-to 設定,然後再把所匯出來的 Postgres Schema + Data (乖乖,竟然有近 5Gb 容量) 再匯入進去,大概花了三、四個鐘頭時間,並不困難。
先利用 Postgres 自帶的 pgadmin 3 UI 工具登入並檢視匯入的資料庫與資料,確認匯入成功以及沒有中文亂碼。
接著將原來從老系統所備份下來的 Bug Tracker PHP-based 檔案,然後複製至 Apache Web 文檔 (預設 htdocs) 的根目錄內,然後透過瀏覽器執行,一切都很正常!
順帶一提,我是在 Windows 11 架設 Hyper-V 虛擬機的,因是系統內建自帶,直接啟用即可,比較方便。但 Hyper-V 真不是普通難用,效能也相當差,與 Vmware Workstation 甚或 VirtualBox 完全不是同一檔次,總之建置完畢後我準備給移除掉 Hyper-V。
強烈推薦有這類需求的單位,使用 Virtual Mache 來包裹 (Wrap) 並完全移植整個老舊的應用系統與所安裝的應用服務,這是最可靠的方法,幾乎不會出任何問題。不過如果要移植過去的是 NAS 環境,基於硬體資源比較不足,那就可以考慮採用另一種方式,也就是使用 Docker 容器化 (docker containerization) 來實現虛擬化的環境。
Docker 雖然佔用系統資源比起虛擬機少很多,卻需要對 Linux 以及 Docker 相關的設定要比較熟稔才行,上述這個案例,用虛擬機安裝設定相當簡單,但我使用 Docker 設定,卻是花了好幾天的時間才建置起來的,主要原因是要一一設定與測試 (還要找尋) 這些比較老舊的 Docker Image,還要把它們給整合起來;再則也要考量到原來是 Windows-based 的環境,但在 Docker 內肯定只能是 Linux,所以包括語系的問題都要解決,相當麻煩。
下一篇就來分享下如何透過 Docker 來執行上述的案例。