WordPress Docker 優化: 添加 PhpRedis、Memcached 支持

環境:
Docker + WordPress, 用官方默認的 Apache 驅動, 不是 fpm.

因為 PhpRedis 不屬於 PHP 內置的模塊, 而 PHP 內置了一個 Predis 又太慢太蛋疼, 所以要重新構建 Docker Image 為 PHP 添加 Redis 模塊支持.

為了添加這個 Redis 模塊, 我特別做了一些搜索, 發現網上清一色的全部是 本教程只適合 fpm 版本云云. 我個人認為這是一種迷思啊, 因為不論是用 php-fpm 還是 apache + php-mod 應該都和 php 的插件沒有太多關係吧. 所以雖然上面環境說的是 wordpress-apache , 用 wordpress-fpm 的朋友照著這個教程做也沒差.

構建 Docker Image

mkdir /tmp/build
cd /tmp/build
# 添加 Memcached 支持
cat > /tmp/build/Dockerfile << EOF
FROM wordpress:latest
RUN apt-get update
RUN apt-get install -y libz-dev libmemcached-dev && \
    pecl install memcached && \ 
    docker-php-ext-enable memcached && \
RUN rm -rf /tmp/pear && \
    apt-get clean
EOF
# 添加 Redis 支持
cat > /tmp/build/Dockerfile << EOF
FROM wordpress:latest
RUN pecl install -o -f redis && \
    docker-php-ext-enable redis
RUN rm -rf /tmp/pear
EOF

關於 Memcached vs Redis… 這個網上都可以搜到吧. 我的意見是, 兩者都能給一個 WordPress 小博客提供相當不錯的 Object Cache. 效能的話, Redis 略勝一籌, 但是要求專門開一個 Redis 容器. 而 Memcached 安裝好之後直接用就可以了. 所以還是根據服務器的配置來選吧.

docker build -t wordpress_extended .

配置 Redis (Optional)

如果之前二選一選得是 Redis, 那麼還需要額外配置一下 Redis.

 docker run --name wordpressredis \
 --network wpblog \
 -h redis \
 -v wordpressredis_data:/data \
 --restart unless-stopped \
 -d redis redis-server --appendonly yes

然後再在 網站根目錄下的 wp-config.php 下附加這樣機行:

/** Redis Configuration */
define('WP_REDIS_HOST', 'redis');
define('WP_CACHE_KEY_SALT', 'wp-768c7108-3cf0-4a2f');

SALT 的用處是為了把 WordPress 扔進去的 data 和其他服務 (如果有) 扔進去的 data 區分開來. 你可以隨便填一串字符.

安裝插件

既然配置都已經配置好了, 那麼最後一步肯定是要安裝對應的插件將這些功能給用起來. 具體的插件的話, 如果你只是想要用 Object Cache, 可以在插件列表裡搜索 “redis” 然後隨便下載一個插件功能就有了. 但是如果你想要功能完善一點的, 我推薦 W3 Total Cache 這款插件, 配置比較友善、直觀, 配置的時候還會測試選出最佳方案.

看到綠色的 Test passed 之後就可以放飛自我啦!

第一次安裝成功後會自動彈出指引, 只要一步步照著做就可以了. 做完之後, 如果是在用 redis, 記得在 側邊欄 – Performance – Object Cache 中把 Redis 的地址改為 redis:6379 然後點擊 test. 要在 test pass 過了之後安裝才真正完成.

成果

基本完美!

在優化前行動版分數還出過 15 分的爛分, 優化之後行動版穩定在 75, 電腦版穩定在 95. 已經超乎意料的好了!

我的理解是, 優化在於對後端數據讀取的優化 (Redis) , 前端加載的優化 ( JS defer、Statics Minify) 和傳輸的優化 (CDN、Workers). 做到這三點之後, 分數應該不會低, 剩下的提升空間就比較小了.

Thumbnail: Rocket Launch by Natália Brondani
If using the image violates your rights, or there’s anything related to copyright laws, please contact me at [email protected], I will deal with them immediately.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *