利用虛擬化機制包裹舊應用系統 – Postgres + Nginx + Php – Part-1

近期輔導台中某家 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 工具登入並檢視匯入的資料庫與資料,確認匯入成功以及沒有中文亂碼。

閱讀全文 »

安裝 Windows 11 有感 – 為了更充分支援 Linux 子系統

前篇文章提及了如何在 Windows 10 環境下執行 Linux GUI Apps,所使用的方法是透過 RDP 遠端連結 WSL 內的 Linux。就近再爬許多文,還發現到如果安裝了 MobaXterm,因為該應用程式內建了 X-Server,所以透過 MobaXterm 也可以直接執行 Linux GUI Apps。而更甚者,如果是安裝 Windows 11 系統,因為其內建的 WSL2 同時就併入 WSLg (Windows Subsystem for Linux GUI),這使得在 Windows 環境下更可以無縫式的直接執行 Linux GUI 應用程式。

其實考量到 Windows 11 是去年底才釋出,不免一堆 Bugs 存在,原來是打算今年底待釋出重大更新後才來安裝,但為了能更完整地整合 WSL 環境,所以還是提前給重新安裝。不過沒想到安裝過程並不太順利,主要原因是 Windows 11 要求主機需要設定為安全啟動 (Secure Boot)開啟 TPM (Trusted Platform Module) 模組,以及切換至 UEFI 模式,這意味著原來硬碟磁區必要要從 MBR 轉換為 GPT;然後還需要把原來相容的 CSM (Compatibility Support Module) 模組關閉掉,總之若要直接升級 Windows 10 原有系統,那會相當麻煩,乾脆直接整顆硬碟重灌、BIOS 設定上述條件會比較省事許多。

我的 PC 桌機為去年升級的 AMD Ryzen 3700x + Asus Tuf Gaming B550M Plus 主機板,在重新安裝前先把 BIOS 作番韌體更新 (結果竟然整個 BIOS 設定回復為初始狀態,還要重新設定超頻等設定,真是麻煩)。重新開機後進入 BIOS 更改安全啟動、選擇 TPM 模組、關閉 CSM 模組。

閱讀全文 »

[設定摘要] Windows 10 WSL2 執行 Linux GUI (XFCE)

安裝完 Windows 10 WSL2 (Windows Subsystem for Linux version 2),就可以透過 Windows Terminal 執行已安裝的 Linux (如 Ubuntu)。不過只能執行 Console 模式,如果要執行 Linux 版的桌面環境,Windows 11 是已經有內建可以直接執行 Linux GUI 應用程式,可以參考:「在 Windows 子系統 Linux 版 (預覽版上執行 Linux GUI 應用程式)」。

而 Windows 10 截住目前版號應該還是無法執行執行 Linux GUI App,需要再另行安裝設定。一般是有兩種方式:

  • 使用 RDP (Remote Desktop Protocol)。這是 Windows based 內建的通訊協定,所以並不需要另外安裝應用程式。
  • VcXsrv (Windows X Server)。這是第三方基於 xorg 的 Windows X Server,需要另行下載安裝。

我是採用 RDP 方式設定連接 WSL2 的 Ubuntu XFCE,設定算是蠻簡單且不需安裝其它套件。具體設定可以參考:

至於採以 VcXsrv 方式連接,我就沒有試過,也無從比較相對於 RDP 的效能、穩定度等。其具體設定可以參考:

底下是個人安裝 WSL2 下的 Ubuntu (20.04.4 LTS) XFCE 桌面環境設定摘要:

閱讀全文 »

使用 Docker 建置多個網域的 WordPress 站台開發 (運行) 環境

問題 (Problem)

我想使用 Docker 容器的虛擬化技術,可以在本機端建立多個 WordPress 站台的開發環境,然後只透過一個 Nginx Web Server,負責接收多個網域 (multiple domain) 的 Http Request (例如 "blog1.localhost", "blog2.localhot"), 並自動將該網域的需求指向對應的 WordPress 站台,如此可以便於託管運行多站台或是方便本機端的開發。

如何有效設定 Docker 的虛擬開發環境,且不會影響到 Host 本機系統的干擾,如此可以方便方便移轉與部署開發環境至其它主機或對外運轉的系統上?

解決方案 (Solution)

  • 建置一個使用 Nginix Reverse Proxy Server Docker 專案。可以採用已建置完整反向代理設定自動化的 jwilder/nginx-proxy 的映像檔。
  • 建置一個完整的 WordPress 開發環境的 Docker 專案,內含 MySQL、phpmyadmin、Wordpress 等 Docker Image。

主要實作步驟

主要實作的方法參考這篇:「Host Multiple Websites On One VPS With Docker And Nginx」。當然對於 Docker 多個容器的配置檔 (docker-compose.yml) 設定,肯定要查找官方文件指引與其它網路設定分享文的。過程期間常要不斷地 Try-Error 才得以配置好 Docker 多個容器的開發環境。

在 WSL2 的 Docker 專案目錄結構參考如下:

首先需要先創建一個 Docker 網絡,如此得以將下列所有這些容器 (container) 橋接 (bridge) 在一起。打開終端機 (terminal),輸入下列指令:

$ docker network create nginx-proxy

接著就是可以參考上述的專案目錄結構,來創建兩個專案 (Nginx and WordPress),並為各自的資料夾編輯配置設定。

閱讀全文 »

[建站日誌] 更改 WordPress 內程式碼高亮 (hightlight) 展現的插件 (plugin) – 使用 Code Syntax Block

原來在 WordPress 文章內,要展現程式碼的高亮顯示,是使用了「WP-Syntax」這個插件,效果展示如下 (Screenshot):

WP-Syntax Screenshot

程式碼展現的效果是還不錯的,但這個 Plugin 已經好幾年沒有更新了,為了新版本相容性與後續所新增各類程式語法及文件格式等高亮顯示效果,所以改選設置了這個「Code Syntax Block」插件,它是採用了「Prism Syntax Highlighter」藉此來擴展 WordPress 內對於程式碼展現的效果,同時它也開源在 Github 上以便於後續的開發維護。參考這一篇:「[WordPress] 176 種程式語言高亮標色 讓程式碼更容易閱讀 (支援Gutenberg)」,內有詳細的安裝與設定說明。

改使用「Code Syntax Block」後的程式碼展現效果對比如下:

閱讀全文 »

[安裝筆記] Windows 10 WSL 2 安裝 Docker Desktop (含更改 Docker Image 路徑)

在 Windows 10 要能充分整合 Docker 應用與開發,安裝 Docker Desktop 是最理想的。

關於 Docker Desktop 可以參考官方文件的介紹

Docker Desktop is an easy-to-install application for your Mac or Windows environment that enables you to build and share containerized applications and microservices.
Docker Desktop includes Docker Engine, Docker CLI client, Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper.

安裝 Docker Desktop 之前,要先確認在 Windows 10 系統上已安裝建置好 WSL 2 的 Linux 子系統,可以參考前寫的:[安裝筆記] Windows 10 安裝 Linux 子系統 (WSL2)。

安裝 Docker Desktop 只要下載官方的安裝檔並執行安裝即可。這裡有篇很詳細的安裝文件,可以參考:How to Set Up Docker in WSL [Step-by-Step]

安裝完 Docker Desktop,系統會提示登出 (logout) 再重新登入,如此 Docker 已常駐於系統 (可觀察工作列的通知區有否鯨魚圖示),點擊該圖示即可出現 Docker Desktop 操作介面。
Docker Desktop UI

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal