- 在 Linode 上建立免費且疾速的 WordPress 網站並使用 Ubuntu 18.04, LAMP, Nginx, Varnish and Redis 加速你的網站 | WordPress
- 手把手教你用 Google Cloud Platform 安裝免費且快速的 WordPress 網站並使用 Ubuntu 18.04, LAMP, Nginx, Varnish 和 Redis 加速你的網站(一年 300 美金的免費額度可以使用) | WordPress
- 用 Gandi 或 Namecheap 購買網域 | WordPress
- 在 Linode, GCP 或 Amazon Ec2 上設定 Ubuntu 18.04 時區 帳戶 ufw, fail2ban 和新增 Swap | WordPress
- 用 Varnish Nginx 和 Apache 製作 HTTP2 反向代理伺服器 | WordPress
- 初次安裝 WordPress 到 VPS 上並設定 MariaDB | WordPress
- 安裝並設定 Redis 讓 WordPress 速度起飛 | WordPress
我們安裝完 WordPress 之後,接著來安裝 Redis。
Redis 是一個開源,在快取資料庫方面有良好性能的軟體,可以減少你讀取資料庫的時間進而提升網站的瀏覽速度,在 WordPress 的話可以快取「object cache」。也就是說 WordPress 再被使用時會出現的快取,原本是存在 MariaDB,現在換由 Redis 幫忙。
關於 Redis 和 phpredis
因為 Ubuntu 官方套件庫當中的 Redis 還停留在第三版,但其實已經更新到第四版了。所以如我要安裝最新版的 Redis 的話,需要透過新增套件庫或是自己下載壓縮檔案編譯安裝。
另外延續前一篇的主題,我們的 Redis 是安裝在 Ubuntu 18.04 和 php 7.2 的環境下。為了考量安全性,我們設定成如果不是 root 權限的話就無法存取 Redis,並且不對伺服器已的機器溝通,只對本機(127.0.0.1)進行作用。
如果要讓 WordPress 使用 Redis 的話,需要安裝 phpredis 讓 PHP 和 Redis 可以進行溝通。不過按照本篇的介紹之後還不會讓 Redis 啟用,要到下一章節才會教你讓 WordPress 使用 Redis。
Redis 和 Varnish 會互相衝突嗎
不會,Redis 是快取資料庫後端的部分,而 Varnish 是快取前端的部分。
以下會介紹兩種安裝 Redis 的方式,可以自行選擇其中一種方式來安裝。
使用套件庫安裝 Redis
雖然方便,但是我認為套件庫的更新速度沒有那麼快。
STEP 1
輸入以下指令加入套件庫來源。
sudo add-apt-repository ppa:chris-lea/redis-server sudo apt-get update
STEP 2
直接下指令安裝 Redis 和 phpredis。
sudo apt-get install redis-server php-redis -y
其實在 Launchpad 也有顯示 Redis 和 phpredis 套件的資訊,這隻軟體目前的最新版本是多少。但為了以防安裝不到最新版的 Redis,我推薦自行用下面的自行編譯安裝安裝最新版的 Redis。
使用自行編譯安裝
STEP 1
先更新套件庫。
sudo apt-get update -y sudo apt-get upgrade -y
STEP 2
安裝自行編譯需要的軟體 build-essential。而 tcl 是測試編譯軟體的結果是否正確。
sudo apt-get install build-essential tcl -y
STEP 3
接著我們下載 Redis 官方的安裝檔案。
cd && sudo wget http://download.redis.io/releases/redis-stable.tar.gz && sudo tar xzf redis-stable.tar.gz
或是
cd && curl -O http://download.redis.io/redis-stable.tar.gz && tar xzf redis-stable.tar.gz
會顯示。
--2018-06-05 19:28:12-- http://download.redis.io/releases/redis-stable.tar.gz Resolving download.redis.io (download.redis.io)... 109.74.203.151 Connecting to download.redis.io (download.redis.io)|109.74.203.151|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1769936 (1.7M) [application/x-gzip] Saving to: ‘redis-stable.tar.gz’ redis-stable.tar.gz 100%[===================>] 1.69M 2.81MB/s in 0.6s 2018-06-05 19:28:13 (2.81 MB/s) - ‘redis-stable.tar.gz’ saved [1769936/1769936]
STEP 4
為 Redis 新增 Redis 專用帳戶
sudo adduser --system --group --disabled-login redis --no-create-home --shell /bin/nologin --quiet
確定此帳戶有新增成功。
cat /etc/passwd | grep redis
會顯示。
redis:x:116:119::/home/redis:/bin/nologin
沒有的話就再建立一次。
把「redis」帳戶加入「www-data」群組中,讓他可以存取「www-data」權限的檔案。
sudo usermod -g www-data redis
STEP 5
編譯 redis。
sudo mv redis-stable redis && cd redis && sudo make
要等待一些時間。大約 3 分鐘多。
... echo REDIS_CFLAGS= >> .make-settings echo REDIS_LDFLAGS= >> .make-settings ... cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC='' -c -o lmem.o lmem.c cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC='' -c -o lobject.o lobject.c cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC='' -c -o lopcodes.o lopcodes.c ... checking for strings.h... yes checking for inttypes.h... yes ... INCLUDEDIR : /usr/local/include LIBDIR : /usr/local/lib MANDIR : /usr/local/share/man ... gcc -std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/mb.o src/mb.c ... CC zmalloc.o ... ^~~~ lzf_d.c:93:102: warning: this statement may fall through [-Wimplicit-fallthrough=] *ip++; case 23: *op++ = *ip++; case 22: *op++ = *ip++; case 21: *op++ = *ip++; ~~~~~~^~~~~~~ lzf_d.c:94:15: note: here case 20: *op++ = *ip++; case 19: *op++ = *ip++; case 18: *op++ = *ip++; case 17: *op++ = *ip++; ... CC t_hash.o CC config.o CC aof.o ...
STEP 6
再安裝。
sudo make install
應該一下子就安裝好了。
我們可以測試一下,看 redis-server 是否有安裝成功。
/usr/local/bin/redis-server -v
應該會顯示這個內容。
Redis server v=5.0.0 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=777ea84487eec932
設定 Redis
接著我們要設定一下 Redis 設定檔。
STEP 1
先備份一份原始檔案。
sudo cp redis.conf redis.confbak
然後下指令編輯「redis.conf」檔案。
sudo nano redis.conf
找到「daemonize no」,改成。
daemonize yes
代表要啟用 pid 檔案。
找到「pidfile /var/run/redis_6379.pid」,改成。
pidfile /var/run/redis/redis.pid
找到「supervised no」,改成。
supervised systemd
代表要在系統開機時同時開啟 Redis。
找到「dir ./」,改成。
dir /var/lib/redis
代表資料庫快取要寫在這邊。
找到「# maxmemory
maxmemory 60M
在 WordPress 當中,如果你使用了 20 到 30 個外掛的話,其實快取也不太可能超過 60MB 的大小。
接著找到「# maxmemory-policy noeviction」,改成。
maxmemory-policy allkeys-lru
Change the policy to allkeys-lru which forces redis-server to delete old cache (least recently used objects) when the Redis server starts to run out of memory
然後找到「stop-writes-on-bgsave-error yes」,改成。
stop-writes-on-bgsave-error no
最後請為 Redis 設定一個密碼。避免 Redis 被不知道的人使用,需要透過密碼這關才能夠使用。找到「# requirepass foobared」之後,改成。
requirepass [一組 Redis 專用的密碼]
另外在 Redis 當中,有一些指令可能會損壞你的資料庫,甚至是讓你的資料庫消失。所以我們要透過設定檔案把這些指令給關閉。
找到「# save “”」的下方,輸入以下內容。
rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command DEBUG "" rename-command CONFIG ""
編輯完成後請按「Control」+「X」,按「Y」,再按「Enter」完成編輯。
STEP 2
然後把設定檔案移動到我們需要的地方。
sudo mkdir /etc/redis && sudo cp redis.conf /etc/redis && sudo cp redis.confbak /etc/redis
記得為檔案設定權限。
sudo chown -R redis:root /etc/redis/redis.conf sudo chmod -R 600 /etc/redis/redis.conf sudo chown -R redis:root /etc/redis/redis.confbak sudo chmod -R 600 /etc/redis/redis.confbak
接著我們要開一個資料夾,為了執行 Redis 時能建立 pid 檔案而使用的。
sudo mkdir -p /var/run/redis/
如果你會使用到「unix sockets」的話,需要把「www-data」賦予這個資料料夾以方便存取。
sudo chown -R redis:www-data /var/run/redis/
STEP 3
接著我們要讓系統知道開啟 Redis 的位置,因此我們需要建立一個叫做「redis.service」的檔案。
請輸入以下指令。
sudo tee /etc/systemd/system/redis.service <<EOF [Unit] Description=Redis Datastore Server After=network.target [Service] Type=forking PIDFile=/var/run/redis/redis.pid User=redis Group=redis ExecStartPre=/bin/mkdir -p /var/run/redis ExecStartPre=/bin/chown redis:www-data /var/run/redis ExecStart=/sbin/start-stop-daemon --start --pidfile /var/run/redis/redis.pid --umask 007 --exec /usr/local/bin/redis-server -- /etc/redis/redis.conf ExecReload=/bin/kill -USR2 ExecStop=/usr/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target EOF
「Unit」的部分表示此程式的描述。
「Service」的部分,我們在設定要怎麼讓 Redis 運作。為了安全起見,我們不使用「root」來運行 Redis,而是另外使用「redis」群組和帳號來運作。這裡另外也寫到,Redis 在開啟、重新啟動、關閉、遇到錯誤的各種行為模式,就是如果 Redis 遇到錯誤,會總是自動重新啟動。
在最後「Install」的部分,設定表示要在系統啟動時啟用 Redis。
STEP 4
接著建立 pid 檔案。
sudo touch /var/run/redis/redis.pid sudo chown redis:redis /var/run/redis/redis.pid sudo chmod 775 /var/run/redis/redis.pid
因為我們剛剛在「redis.conf」檔案裡面設定 dictionary 的位置,所以我們需要另外新增一個資料夾。
sudo mkdir /var/lib/redis
並且設定資料夾的權限,讓 Redis 可以存取。
sudo chown redis:redis /var/lib/redis sudo chmod -R 770 /var/lib/redis
STEP 5
最後就可以用這兩行指令,啟動 Redis。
sudo systemctl daemon-reload sudo service redis start
另外不要忘記,每次重新啟動之後,也需要自動啟動 Redis。
sudo systemctl enable redis
刪除 Redis
如果你發現安裝過程當中有錯誤,並使用編譯安裝 Redis 的話,請輸入以下指令完全移除 Redis。
sudo service redis stop sudo apt-get purge --auto-remove redis-server -y sudo rm /usr/local/bin/redis-* sudo rm -r /etc/redis/ sudo rm /var/log/redis_* sudo rm -r /var/lib/redis/ sudo rm /etc/init.d/redis_* sudo rm /var/run/redis_*
安裝 Redis PHP PECL extension
STEP 1
請下以下指令安裝相關套件。
sudo apt-get install git php7.2-fpm php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-mysql php7.2-phpdbg php7.2-mbstring php7.2-gd php7.2-imap php7.2-ldap php7.2-pgsql php7.2-pspell php7.2-recode php7.2-snmp php7.2-tidy php7.2-dev php7.2-intl php7.2-gd php7.2-curl php7.2-zip php7.2-xml -y
STEP 2
接著從 git 這邊下載安裝檔案。
git clone https://github.com/phpredis/phpredis.git && sudo mv phpredis/ /tmp/ && cd /tmp/phpredis
或是你也可以用這個方式,挑一種方式下載即可。
sudo wget https://github.com/phpredis/phpredis/archive/master.zip -O phpredis.zip && sudo unzip -o phpredis.zip -d /tmp && sudo mv /tmp/phpredis-* /tmp/phpredis && cd /tmp/phpredis
STEP 3
之後編譯並進行安裝。
sudo phpize && sudo ./configure && sudo make sudo make install
稍微等一下下。
Configuring for: ... configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. checking for gawk... gawk ... /bin/bash /etc/phpredis/libtool --mode=compile cc -I. -I/etc/phpredis -DPHP_ATOM_INC -I/etc/phpredis/include -I/etc/phpredis/main -I/etc/phpredis -I/usr/include/php/20170718 -I/usr/include/php/20170718/main -I/usr/include/php/20170718/TSRM -I/usr/include/... - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the 'LD_RUN_PATH' environment variable ...
接著進行一些最後的設定,要讓 Apache 和 Nginx 都可以使用 Redis。
STEP 4
建立 Redis php 設定檔案。
sudo tee /etc/php/7.2/mods-available/redis.ini <<EOF extension=redis.so EOF
然後啟用這個設定檔案。
sudo ln -sf /etc/php/7.2/mods-available/redis.ini /etc/php/7.2/apache2/conf.d/redis.ini sudo ln -sf /etc/php/7.2/mods-available/redis.ini /etc/php/7.2/fpm/conf.d/redis.ini sudo ln -sf /etc/php/7.2/mods-available/redis.ini /etc/php/7.2/cli/conf.d/redis.ini
STEP 5
另外在之前的安裝測試當中,因為系統設定的關係,可能會導致 Redis 無法正常使用,這裡我們調整一下設定。
echo "net.core.somaxconn= 1024" > /etc/sysctl.conf echo "vm.overcommit_memory=1" > /etc/sysctl.conf echo never > /sys/kernel/mm/transparent_hugepage/enabled sysctl -p
STEP 6
然後重新啟動 php7.2-fpm 和 Apache,重新載入設定。
sudo service php7.2-fpm restart sudo phpenmod redis && sudo service apache2 restart
安裝完的關係,我們就把下載來的安裝檔案刪除即可。
cd .. && sudo rm -rf phpredis && cd && sudo rm -R redis* phpredis*
不過 Redis 的使用要等安裝 Worpress 之後才會看得比較明顯,下一章節和下下章節將會教你在 WordPress 安裝設定 W3 Total Cache 外掛,並測試 Redis、Varnish 等狀況。
安裝 Redis 1. How To Install Redis in Ubuntu - Grainier Perera 2. Install and Configure Latest Redis Cache for WordPress 3. i-vagrant/install-redis.sh at master · bogdanvlviv/i-vagrant 4. How to install Redis 4 on Centos 6 / 7, Ubuntu 16 and Debian 8 (Updated) 5. Install Redis Cache on Ubuntu Server with PHP 7 and Nextcloud – Tech and Me 如何移除 Redis 6. How to uninstall Redis server from Ubuntu - Grainier Perera 7. how to delete redis from my ubuntu-16.04 server - Stack Overflow 安裝 phpredis 8. Installing php7-fpm with phpredis and xdebug extension on Ubuntu 14.04 快速安裝 Redis 和 phpredis 9. Script for building Ubuntu 16.04 server + LAMP + Redis, Memcached, Lets Encrypt, Git, Composer + Optimisations 10. Setup WordPress to Use Redis Caching on Ubuntu 17.04 / 17.10 – Website for Students 11. How to Speed Up WordPress with Redis Caching | RoseHosting Blog 詳細說明安裝 Redis 和 phpredis 12. How to install redis extension for php 7 - Stack Overflow 13. How to install Redis and Redis php client (Updated: Feb 23, 2018) - Anton Logvinenko 簡單說明並使用內建套件庫安裝並進行功能測試 14. Installing Redis 4.x onto Ubuntu 16.04 15. Ubuntu如何架設Redis Server並且與PHP一同使用? | MagicLen 16. Setup WordPress to Use Redis Caching on Ubuntu 17.04 / 17.10 – Website for Students 使用內建套件庫安裝 17. Installing Redis 4.x onto Ubuntu 16.04 關於套件庫新增 18. ubuntu 17.04 安装最新版本redis(原来的ppa源失效了,需要修改,包含自动重启) - CSDN博客 19. 使用Ubuntu 16.04 安裝 Redis – Natas Note 手動安裝 20. (记录)Ubuntu下安装Redis | Sky's Blog 21. How to install Redis 4 on Centos 6 / 7, Ubuntu 16 and Debian 8 (Updated) 安裝後的安全設定 22. 在Ubuntu中安装Redis | 粉丝日志 23. How to Set Up a Redis Server as a Session Handler for PHP on Ubuntu 14.04 | DigitalOcean 24. How To Secure Your Redis Installation on Ubuntu 14.04 | DigitalOcean 25. How to Install and configure Redis on Ubuntu 14.04 Redis 無法啟動的錯誤 26. Ubuntu systemd service file for Redis. The server was updated to a Ubuntu 15.04 (Vivid Vervet) distribution. Redis was installed from the PPA from Roman Wookey (https://launchpad.net/~rwky/+archive/ubuntu/redis). After the switch to systemd instead of Upstart, Redis was not started by default. So I've hacked the following systemd config file. It has to be placed in /lib/systemd/system/ with the filename redis-server.service. After that, it has to be enabled with "sudo systemctl enable redis-server". You can check the status by "sudo systemctl status redis-server.service". Maybe this could help you with similar migrating issues. 27. services - Failed to start Redis Datastore Server (Ubuntu 16.04.1 LTS) - Ask Ubuntu 28. Debian 8.4 jessie systemd issue: service redis-server restart fails · Issue #3165 · antirez/redis 29. cannot install redis-server on ubuntu 18.04 - Stack Overflow 30. redis-server.service: Failed with result 'timeout'. - More errors listed inside - Ask Ubuntu 31. rhel6 - Redis Daemon not creating a PID file - Stack Overflow 修正 Redis 無法啟動的錯誤 32. Redis 3.0.7版本启动时出现警告的解决办法 - 菠萝大数据梦工厂(Free World) - CSDN博客 33. redis overcommit memory (oom) 问题解决«海底苍鹰(tank)博客 34. redis运行后的一些警告 - 常城的专栏 - CSDN博客 測試 Redis 35. PHP 使用 Redis | 菜鸟教程 圖示來源 36. redis-io/redis-logo.svg at master · antirez/redis-io