使用 NAS 在日常工作與生活這麼多年,從單純的檔案備份,到現在把它當成一台多功能的小型伺服器。其中,Docker 這個技術的出現,絕對是 QNAP NAS 從單純只是一個「儲存裝置」蛻變為「多應用神器」的關鍵,可以在大型、中小企業、工作室、家庭與個人中,各有適合和擅長應用的領域。
過去我們要架設一個網站,需要安裝設定處理 Apache/Nginx、PHP、MySQL/MariaDB 等環境,有時候需要處理版本衝突跟套件相依性,且是在 Linux 發行版中作業,對某些人來說可能不太熟悉,因此不少雲端主機服務廠商就提供精簡的版本來讓你快速部署。近年因為容器技術熱門,在有了 Docker,會變得有點類似在手機上安裝 App 一樣簡單,即便它背後牽涉到的技術複雜與強大,但整體經驗來說就是相對較為容易又互不干擾。
透過一些設定與實作,能夠在你的 QNAP NAS 上,利用 Docker 快速、穩定地架設各種個人網站服務的實戰經驗,這常常是為了測試開發,也可以在自己的 NAS 上執行過服務且驗證後,上版到雲端主機的空間或自己其他的伺服器,提供正式服務給客戶和海內外訪客。
無論你是想架一個 WordPress 部落格來記錄生活、用 Ghost 打造一個極簡的寫作平台,或是像我一樣,製作一個靜態網站來展示作品集,這篇文章希望能給你一個清晰的路線圖。
為什麼選擇 QNAP NAS + Docker?
理由很簡單:
資料自主權:這是最重要的一點。你的網站、你的文章、你的照片,全部都在你家設備的硬碟裡,不用擔心哪天雲端服務商說關就關,或是被莫名其妙的條款審查,以及被外界駭客攻擊的疑慮。但在自己機房、家裡維護 NAS 的風險就是硬碟壞掉與採購硬碟重建磁碟陣列的費用,這點不能不考慮進去。
成本效益:NAS 的硬體投資是一次性的,相比長期租用虛擬主機,長期下來划算非常多。而且,它還能兼顧你家裡的影音串流、檔案備份等多種需求。
效能綽綽有餘:別小看現在的 NAS,不再是過去效能較低的小型機器,現有的一線和二線產品都有不錯的效能。以手邊的設備為例,搭載的 Intel 多核心處理器和升級到 64GB 的 RAM,跑十幾個 Docker 容器(Container)都還游刃有餘。對於個人網站的測試開發來說,效能絕對綽綽有餘,而如果架設在企業或家中,只要設定好防火牆、反向代理,安全性的問題與風險降低後,也是很好快速提供服務給客戶或不同據點產線、工廠連線用的應用服務式網頁。
穩定與低功耗:NAS 預設的設計是小型伺服器,自然具備為了 24 小時開機而設計的規格,穩定性也高,而且功耗遠低於一台傳統 PC 主機,電費帳單會感謝你。
乾淨的環境管理:這就是 Docker 的魅力所在。每個網站(容器)都是一個獨立的沙盒,有自己的執行環境。今天我想試試 WordPress,明天想玩玩 Ghost,隨時可以建立、刪除,不會把自己電腦的系統,或者是 NAS 主系統搞亂而需要重置、重新安裝系統。
實作前的準備:你需要具備這些 :
一台還算夠力的 QNAP NAS:建議至少是 Intel x86 架構的 CPU、4GB 以上的記憶體 (8GB 以上更佳)。我個人強烈建議把記憶體加滿,Docker 很吃記憶體,這筆投資絕對值得。
安裝 Container Station (容器工作站):這是 QNAP 官方的 Docker 管理工具,直接從 App Center 搜尋安裝即可。
實戰開始:以架設 WordPress 部落格為例
我們就以近年實裝數量最多的內容管理系統 (CMS),也就是 WordPress 為例,走一遍完整的架設流程。這個流程的邏輯,適用於絕大多數的 Docker 網站應用,也可以明天換去執行 Ghost 的容器來應用新網站。
步驟一:規劃你的「資料庫」和「網站」資料夾
這是新手最容易忽略,但也是最關鍵的工作,這是因為在 Docker 中實作一個網站,和傳統我們在虛擬主機、實體主機中架設網站的邏輯是不同的,應用層和資料層在實作中兩個儘量是分開的,千萬不要把讓網站相關資料直接存在你要執行的 Docker 容器裡,因為萬一未來當容器一刪除,你的心血結晶就灰飛煙滅了。
資料和設定都與容器本體分開的好處是,你一個設定檔就可以一直重新安裝新版的應用映像檔,刪除重裝都行,資料也不會不見,在 NAS 上就針對容器的資料部分另外做備份處理就會更為保險。
我的習慣是先開 QNAP File Station 來管理檔案,在這個視窗當中,建立一個專門給 Docker 用的共享資料夾,例如 /share/Container 下的 Docker 或 WordPress 資料夾。然後在裡面再根據不同的「專案」去建立子資料夾,你在 NAS 中用 QNAP 自己的 File Station 去管理檔案還算是安全的。
以 WordPress 為例,它需要一個「網站程式」資料夾和一個「資料庫」資料夾。所以我的路徑會像這樣:
/share/Container/WordPress/html (用來放 WordPress 的核心 php 網頁程式檔案)
/share/Container/WordPress/mysql (用來放 MySQL 資料庫的資料檔案)
預先建好這兩個空資料夾,等等會用到。
步驟二:啟動 Container Station,建立應用程式
WordPress 不是單一個體,它需要一個網頁伺服器 (Apache/Nginx) 和一個資料庫 (MySQL/MariaDB) 來配合。最快的方式是使用 docker-compose 的概念,一次把這兩個服務打包建立起來,或者是直接使用 WordPress 官方包好的 WordPress 映像檔,它已經完成了 Apache + php4-fpm 的組合,也在 docker-compose 設定檔中指定了最新版的 MySQL 資料庫伺服器映像檔,這樣兩個就可以組好完整的 WordPress 網頁服務。
打開 Container Station,點擊左側的「應用程式」,然後按下「建立」。 (Portainer 則是在 Stacks 中建立)
給你的應用程式取個名字,例如 wordpress。
在下方的 YAML 編輯器中,貼上我為你依據 QNAP NAS 環境與路徑,另外準備好的 docker-compose.yml 設定檔。
YAML 設定檔範例:
services:
wordpress:
image: wordpress
restart: always
ports:
- 8880:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- /share/Container/WordPress/html:/var/www/html
db:
image: mysql:latest
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- /share/Container/WordPress/mysql:/var/lib/mysql
volumes:
wordpress:
db:
YAML 設定檔重點解釋:
services: 定義了我們要建立的兩個服務:db (資料庫) 和 wordpress (網站主體)。
image: 指定要從 Docker Hub 上拉取哪個映像檔。mysql:latest 和 wordpress:latest 都是經過驗證的官方映像檔。
restart: always: 確保 NAS 重開機後,這個容器也會自動啟動。
environment: 設定環境變數。這非常重要,我們用它來設定資料庫的密碼、使用者名稱等。請務必修改成你自己的高強度密碼。
volumes: 資料卷,這就我們前面提到的「資料夾掛載」。
- /share/Container/WordPress/mysql:/var/lib/mysql
這行的意思是,把 NAS 本機的 /share/Container/WordPress/mysql 這個路徑,掛載到 db 容器裡的 /var/lib/mysql 路徑。這樣,所有資料庫的檔案都會被寫入到你 NAS 的硬碟上,而不是容器裡。
注意: /share/Container/ 是 QNAP 上容器平台資料的預設路徑,請根據你的實際情況修改。
ports: 設定連接埠轉發。
- “8880:80”
這行的意思是,把我們外部連線到 NAS IP 的 8880 port,轉發到 wordpress 容器內部的 80 port (HTTP 的預設 port)。這樣我們就能透過 http://<你的NAS_IP>:8880 來訪問網站。你可以把 8880 改成任何你喜歡且未被佔用的 port。
然後上面的 db 名稱、用戶名稱、密碼都還沒設定,請記得修改為自己選定好的名稱,保持一致性,再去 QNAP NAS 中的 Container Station 或 Portainer 容器管理平台去新增應用程式 / Stacks 來完成安裝。
步驟三:驗證並啟動
貼上 YAML 程式碼後,點擊「驗證」,如果語法沒問題,再按下「建立」。Container Station 就會開始從 Docker Hub 下載映像檔並根據你的設定檔建立容器。
你可以在「容器」頁面看到 wordpress 容器正在啟動。稍等一兩分鐘,等它們都變成綠色的「執行中」狀態,就代表成功了!


步驟四:完成 WordPress 安裝
現在,打開你的瀏覽器,輸入 http://<你的NAS_IP>:8880 (如果你改了 port,請用你改的 port),這時瀏覽器會自動移轉到下面的安裝畫面。

你應該能看到 WordPress 的經典安裝畫面了!接下來就跟著畫面指示,選擇語言、設定網站標題、管理員帳號密碼,就大功告成。





從內部走向世界:讓你的網站公開

到目前為止,你的網站還只能在區網內訪問,這樣就可以進行充分的開發與測試了,你的小小測試網站在家或辦公室已開張,區域網路內的手機、桌機與筆電都能夠連線到這個 ip 位置的網址瀏覽你的網頁。
如果要讓全世界都能看到你的作品,或傳給親友與客戶看,你還需要完成以下幾步,之後會再另一篇詳細的專文說明,下方只是重點提示:
申請一個網域名稱 (Domain Name):例如 myawesomeblog.com,這會比記 IP 位址好。
設定 DDNS (動態 DNS):除非你是固定 IP,否則你辦公室的網路或家裡的網路,其對外的 IP 是會變動。QNAP 內建的 myQNAPcloud 服務就提供了免費的 DDNS 功能,也非常好用。
設定路由器 (Port Forwarding):在你的路由器裡,設定一條規則,將來自外部網路特定 port (例如 80 和 443) 的請求,轉發到你 QNAP NAS 的內部 IP 以及對應的 port (例如我們剛剛設定的 8880)。
這邊也很建議你設定反向代理 (Reverse Proxy) 並申請 SSL 憑證:這可以讓你的網站透過標準的 https:// 加密連線,網址列也會出現那把安全的鎖。QNAP NAS 系統內建了反向代理伺服器功能,可以將你的網域名稱 https://myawesomeblog.com 指向內部的 http://localhost:8080,並且可以整合 Let’s Encrypt 來申請免費的 SSL 憑證。
這部分內容足以再寫另一篇教學,但這是讓你的個人網站從「自己測試用」變成「可對外使用」的必經之路。
今天我們以 WordPress 為範例,展示了 QNAP NAS + Docker 在自己測試開發與架站的直覺優勢,而這套邏輯也通用在其他的容器服務要執行在 QNAP 的 NAS 上,你可以用同樣的方法,去架設 Ghost、Joomla、Drupal,甚至是 Wik 知識庫、程式碼倉庫等許多實用的企業與家庭應用。
動手試試看,你會發現,NAS 還有很多實用且有趣的應用等著你發掘喔。