在現代網站建設中,WordPress依然是最受歡迎的內容管理系統之一。透過Docker容器技術,我們可以快速、穩定地部署WordPress環境,同時整合MySQL資料庫和Redis快取以提升效能。本文將詳細介紹如何在1Panel面板中使用Docker Compose部署這套完整的網站解決方案。
為什麼選擇Docker部署WordPress?
Docker容器化技術提供了許多優勢:
- 環境隔離:各組件運行在獨立容器中,互不干擾
- 簡化部署:一次性配置,隨處可用
- 易於維護:單獨更新各組件,不影響整體系統
- 資源優化:按需分配資源,最大化利用伺服器效能
前置準備
在開始部署前,您需要:
- 已安裝好1Panel面板的伺服器
- 基本的Linux和Docker知識
- 伺服器具備至少1GB記憶體和10GB儲存空間
部署步驟
步驟一:建立Docker網路
首先建立一個專用網路,讓各個容器能夠互相通信:
- 在1Panel中選擇「應用商店」→「Docker管理」→「網路」
- 點擊「建立網路」按鈕
- 填寫以下資訊:
- 網路名稱:
wordpress_network
- 模式:選擇「bridge」
- IPv4:勾選並使用預設設定
- 點擊「確定」完成建立
步驟二:建立Docker Compose配置檔案
我們將使用Docker Compose來統一管理多個容器,這種方式比單獨創建容器更加便捷:
- 在1Panel中選擇「應用商店」→「Docker管理」→「編排」
- 點擊「建立編排」,填寫:
- 名稱:Wordpress全站
- 選擇文件夾或自動創建
- 在編輯區域中,貼上以下內容:
services:
# MySQL資料庫服務
db:
image: mysql:8.0
container_name: wordpress_mysql
volumes:
- mysql_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: StrongRootPass456!
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: WordPressPass789!
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
networks:
- wordpress_network
# Redis快取服務
redis:
image: redis:latest
container_name: wordpress_redis
command: redis-server --requirepass RedisPass123! --appendonly yes
volumes:
- redis_data:/data
restart: always
networks:
- wordpress_network
# WordPress服務
wordpress:
image: wordpress:latest
container_name: wordpress_app
depends_on:
- db
- redis
volumes:
- wordpress_data:/var/www/html
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: WordPressPass789!
WORDPRESS_DB_NAME: wordpress
WORDPRESS_TABLE_PREFIX: wp_
WORDPRESS_DEBUG: 1
WORDPRESS_CONFIG_EXTRA: define('WP_MEMORY_LIMIT', '256M'); define('WP_MAX_MEMORY_LIMIT', '512M'); define('WP_CACHE', true);
ports:
- "8787:80"
networks:
- wordpress_network
networks:
wordpress_network:
driver: bridge
volumes:
mysql_data:
redis_data:
wordpress_data:
注意: 請確保修改上述配置中的各種密碼,以增強安全性。
- 點擊「儲存」按鈕保存配置文件
步驟三:啟動服務
- 在編排列表中找到剛剛創建的「Wordpress全站」
- 點擊「啟動」按鈕
- 等待服務啟動過程完成,這可能需要1-2分鐘時間
啟動成功後,您可以在容器列表中看到三個運行中的容器:
- wordpress_mysql:MySQL資料庫
- wordpress_redis:Redis快取
- wordpress_app:WordPress應用程式
步驟四:訪問WordPress並完成初始設定
- 在瀏覽器中訪問:
http://您的伺服器IP:8787
- 跟隨WordPress設定精靈:
- 選擇語言(繁體中文)
- 設定網站標題
- 創建管理員帳號和密碼
- 輸入您的電子郵件地址
- 點擊「安裝WordPress」按鈕
- 完成後使用您設定的帳號密碼登入後台
步驟五:安裝並設定Redis快取插件
為了讓WordPress能夠使用Redis作為快取系統,需要安裝專用插件:
- 在WordPress後台中選擇「插件」→「安裝插件」
- 搜索「Redis Object Cache」
- 安裝並啟用由Till Krüss開發的Redis Object Cache插件
- 在「設定」→「Redis」中配置:
- 伺服器:redis(或wordpress_redis)
- 端口:6379
- 密碼:RedisPass123!(使用您在Docker Compose中設定的密碼)
- 點擊「儲存設定」後,再點擊「啟用對象快取」按鈕
性能優化建議
安裝其他必要插件
以下插件可以進一步提升您的WordPress網站性能:
- WP Super Cache 或 W3 Total Cache:提供頁面快取功能
- Smush 或 ShortPixel:自動優化圖片
- WP Rocket:付費插件,提供全面的快取和優化方案
安全設定
為確保您的WordPress網站安全:
- 使用Wordfence或Sucuri等安全插件
- 定期更新WordPress核心、主題和插件
- 採用強密碼並啟用兩因素認證
資料備份策略
定期備份是防止數據丟失的關鍵:
- 在1Panel中設定定期備份任務
- 使用UpdraftPlus等WordPress備份插件
- 將備份存儲在多個位置,包括異地備份
監控與維護
定期檢查系統狀態,確保一切正常運行:
- 在1Panel中監控容器的資源使用情況
- 檢查WordPress錯誤日誌
- 定期優化MySQL資料庫
- 清理Redis快取
常見問題排解
資料庫連接錯誤
- 檢查MySQL容器是否正常運行
- 確認環境變數中的資料庫用戶名和密碼是否正確
- 嘗試使用MySQL容器的IP地址替代容器名稱
Redis連接問題
- 確保Redis容器運行正常
- 檢查Redis密碼是否設定正確
- 檢查網路連接是否正常
網站載入緩慢
- 檢查伺服器資源使用情況
- 優化WordPress圖片和資料庫
- 調整PHP和MySQL配置參數
參考資源
結論
透過Docker Compose在1Panel中部署WordPress+MySQL+Redis組合,您可以輕鬆建立一個高性能、易於維護的網站環境。這種方式不僅簡化了部署過程,還為後續的擴展和維護奠定了良好基礎。
希望本文能幫助您順利完成WordPress環境的部署。如有任何問題,歡迎在評論區留言交流!
注意事項: 本文中的密碼僅作示範用途,實際部署時請使用強密碼並妥善保管。在生產環境中,建議進一步加強安全設定,如使用HTTPS、設定防火牆等。
附件 不懂每一行在幹嘛的看這裡
services: # 定義所有服務(容器)
# MySQL數據庫服務
db: # 服務名稱,在其他服務內可用此名稱連接
image: mysql:8.0 # 使用MySQL 8.0版本的官方映像
container_name: wordpress_mysql2 # 容器實際名稱
volumes: # 設定持久化儲存
- mysql_data:/var/lib/mysql # 將mysql_data卷掛載到容器內的/var/lib/mysql路徑
restart: always # 設定容器自動重啟政策為總是重啟
environment: # 環境變數設定
MYSQL_ROOT_PASSWORD: StrongRootPass456! # MySQL root用戶密碼
MYSQL_DATABASE: wordpress # 自動創建的資料庫名稱
MYSQL_USER: wordpress # 創建的普通用戶名
MYSQL_PASSWORD: WordPressPass789! # 普通用戶密碼
MYSQL_CHARACTER_SET_SERVER: utf8mb4 # 數據庫字符集,支援完整的Unicode字符
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci # 設定排序規則,適合多語言支援
networks: # 網路設定
- wordpress_network # 加入wordpress_network網路
# Redis快取服務
redis: # 服務名稱
image: redis:latest # 使用最新版Redis官方映像
container_name: wordpress_redis2 # 容器實際名稱
command: redis-server --requirepass RedisPass123! --appendonly yes # 容器啟動命令,設定Redis密碼和啟用AOF持久化
volumes: # 設定持久化儲存
- redis_data:/data # 將redis_data卷掛載到容器內的/data路徑
restart: always # 總是自動重啟
networks: # 網路設定
- wordpress_network # 加入wordpress_network網路
# WordPress服務
wordpress: # 服務名稱
image: wordpress:latest # 使用最新版WordPress官方映像
container_name: wordpress_app2 # 容器實際名稱
depends_on: # 依賴關係設定,確保這些服務先啟動
- db # 依賴資料庫服務
- redis # 依賴Redis服務
volumes: # 設定持久化儲存
- wordpress_data:/var/www/html # 將wordpress_data卷掛載到容器內的/var/www/html路徑
restart: always # 總是自動重啟
environment: # 環境變數設定
WORDPRESS_DB_HOST: db # 數據庫主機名(使用服務名稱)
WORDPRESS_DB_USER: wordpress # 連接數據庫的用戶名
WORDPRESS_DB_PASSWORD: WordPressPass789! # 連接數據庫的密碼
WORDPRESS_DB_NAME: wordpress # 數據庫名稱
WORDPRESS_TABLE_PREFIX: wp_ # 資料表前綴
WORDPRESS_DEBUG: 1 # 啟用偵錯模式,便於排查問題
WORDPRESS_CONFIG_EXTRA: define('WP_MEMORY_LIMIT', '256M'); define('WP_MAX_MEMORY_LIMIT', '512M'); define('WP_CACHE', true); # 額外的WordPress配置,設定內存限制和啟用快取
ports: # 端口映射設定
- "8787:80" # 將主機的8787端口映射到容器的80端口
networks: # 網路設定
- wordpress_network # 加入wordpress_network網路
networks: # 定義網路
wordpress_network: # 網路名稱
driver: bridge # 網路驅動類型為橋接模式,適合同一主機上的容器通信
volumes: # 定義持久化存儲卷
mysql_data: # MySQL數據卷,自動創建
redis_data: # Redis數據卷,自動創建
wordpress_data: # WordPress數據卷,自動創建
正文完