前言

自行架 WordPress 站的朋友多數使用 Sharing web hosting 服務,主要是因為平價、簡單,幾乎即買即用。不過這類服務仲使不限流量與容量,但都會有公平條款和嚴格的 CPU 使用量限制,所以瀏覽人次一多,就會被 suspend。就算平時人數不多,只是有一篇文章受歡迎而爆紅,都會立即被停用。

其實使用 VPS 所需的金錢和技巧並非想像般多,DigitalOcean 最平亦只需 US$5 一個月,比不少 web hosting 更平,而所需要的技巧,網上都有大量教學,大部人都能輕鬆應付,因為只要 copy and paste 就可以了。

DigitalOcean 的 $10 優惠卷
https://www.digitalocean.com/?refcode=8b33ab6f2cf6

日本 ConoHa 增值 ¥2000 日元送 ¥2000 日元
https://www.conoha.jp/

現在使用 VPS 不用逐個元件安裝,有 package 輸入一句就可以了,之前企企使用 serverpilot,是一個不錯,非常推薦的 control panel。
Nginx + Apache 這個兼顧速度和兼容性的組合,serverpilot 本身佔用資源亦很低,所以之前企企都以為會一直使用 serverpilot.
不過企企鐘意試東試西,看到更好又會想試,所以並不滿足,始終 LNMP,純 Nginx + PHP-FPM 的環境才能完全揸盡伺服器的效能。
但 Nginx 的 rewrite rule 和 Apache 不同,尤其使用 W3 Total Cache 後就更複雜,所以對初學者有一定難度。
Easyengine 這個 command line 的安裝工具正好令所有設定簡化,非常容易就架好伺服器。

另外 Easyengine 最大好處就是已經預先 compline 了 nginx cache,不用自行 compile,所以方便得多。
(下面以 ubuntu 14.04 作例子)

Pre-Install

首下載 putty.exe(一般來說是 Windows on Intel x86 版) : http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
開啓 Putty 後在 Host Name 打上你 VPS 的 IP,之後按下 Open 按鍵。
輸入 username(一般來說是 root)和 password 後就可以進入 VPS 了。
(注意:滑鼠右鍵在 Putty 就是貼上)

之後這個步驟並非必要,在 Linode、Digital Ocean、自行安裝的 Ubuntu 等等都沒有需要。但如果是 OpenVZ 的 VPS 如 Servermania 則有機會要安裝這個。

sudo apt-get install software-properties-common

安裝 Easyengine

首先 update 所有已安裝的 package

sudo apt-get update && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove

另外要設定時區,因為 easyengine 內的 php.ini 會跟系統的時區一樣。

dpkg-reconfigure tzdata

選擇 Asia –> Hong Kong 就可以了。

之後安裝easyengine

wget -qO ee rt.cx/ee && sudo bash ee
easyengine name password
安裝途中會問你拿名和 email,不過只是作通知用途,可亂填
easyengine finished installation
完成安裝 easyengine 了

安裝後可以輸入以下 command 來令 easyenine 可以 auto complete (按 tab 鍵可以自動完成指令)指令

source /etc/bash_completion.d/ee_auto.rc

之後就可以安裝 WordPress,雖然 easyengine 可以支援不同 plugin,但暫時以最高效能的設定為例子,將 example.com 改為你的 domain 就可以了。

ee site create example.com --wpredis --php7 --letsencrypt

按 3 次 y 和填了名字和 email 之後,恭喜,你旳 wordpress 已設定完成可以使用了。
是否很簡單呢?其實現在使用 VPS 就是如此簡單。
Happy Blogging.

如果忘了 Easyengine 的 username 和 password 可以打

sudo ee secure --auth

如果忘了 wordpress 的 password 可以打

sudo ee site update example.com --password

(企企按:sitemap 方面建議使用 WPSEO / YOAST SEO,因為 easyengine 已內置了有關的 rewrite rules)

easyengine site created
已經安裝了 WordPress,大家可以看到 WordPress 和 easyengine 的 admin 名稱密碼。
記得抄下呀

當然 easyengine 還有很多 option,現在約略為大家解釋一下,詳細可以看看 Easyengine 的 document,如果初學者的話可以忽略不理。

除 redis 外,easyengine 還支援 nginx fast-cgi cache, w3 total cache, wp supercache 三種,大家只需要制作網站時將上面 –wpredis 替換為以下 command 就可以了。

–w3tc 指 W3 total cache
–wpsc 指 wordpress super cache
–wpfc 指 nginx fast-cgi cache
–wp 指不使用任何 cache

如果之後想更新另一種 cache,如想轉回 w3tc 的話,輸入以下 command 就可以了。

ee site update example.com --wp --w3tc

而 –hhvm 亦是 optimal,HHVM 是 Facebook 為改善速度而制作,並開源的 PHP 引擎,比 PHP-FPM 更快,但只能兼容 90% 的 PHP code,而 WordPress 本身已經 100% 支援 HHVM,不過可能有少量 plugin 未能支援 HHVM,但 easyengine 會用 PHP-FPM 作為 fall-back,所以不會有不能執行的情況。
(企企按:經過一輪使用後,發覺 HHVM 有時會佔用 2%-3% CPU 資源但完全沒有反應,要 2-3 分鐘 timeout 後才交由 PHP-FPM 執行,所以企企已經轉用 PHP7 代替 HHVM)

–letsencrypt 是免費的 HTTPS SSL 加密的認証,令到網頁傳送可以加密,有利 Google SEO 排名。
Let’s Encrypt 的 certificate 只有 90 日有效日期,不過 Easyengine 會自動幫用戶續期,所以不用擔心。

在管理 WordPress 很多時都需要使用 phpmyadmin 等工具,其實 easyengine 亦已內置,企企會建議安裝以下數個工具:Adminer, phpMyAdmin, phpMemcachedAdmin, FastCGI cleanup script, OPcache, Webgrind, Anemometer.
不過其實一句 command 就可以了

ee stack install --admin

安裝後就可以使用 phpmyadmin 等工具了。

easyengine admin site
Easyengine 的 default port 是 22222,不過可以任轉的
還有這個恐嚇字句不需理會,純因為你沒有買 SSL cert 的警告而已

phpmyadmin 所需要用的 mysql username 和 password 可以在 wp-config.php 找到

easyengine wp-config.php
可以在 wp-config.php 找到 mysql 的 username 和 password

另外,如果需要 mysql 的 root password,可以以 root 身份打 cat /root/.my.cnf
就可以看到 mysql 的 root password.

將 WordPress 轉去 Multisite

Easyengine 亦支援 multisite,制作 multisite 只要輸入以下 command(Multisite 一般人會比較少用)

ee site create example.com --wpsubdir --wpredis --php7

如果想由現在網站由 single site 轉去 multisite 的話只需要

ee site update example.com --wpsubdir

Update Easyengine

如果更新 php / nginx 等元件的話,只需要打以下 command 就可以。

sudo ee stack upgrade

更新 easyengine 亦很簡單,以下一句就可以了

ee update

P.S. 上面 username 和密碼那麽大方任看,當然是因為那個只是暫時起出來截圖用的 WordPress,本文刊出之日早已 delete 了。

少量改善優化

預設 Easyengine 的檔案上載上限是 100MB,一般人來說都足夠使用,但如果想上載大一點的檔案就需要改動一下。
需要改動的是 php.ini,由於有 php5.6 和 php7.0,所以需要改兩次。

vi /etc/php/7.0/fpm/php.ini

尋找以下設定,將已經 Highlight 的設定值更改,留意第 16 行的 max_input_vars 預設並沒有,所以要自行加上去。

[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
disable_classes =
zend.enable_gc = On
expose_php = Off
max_execution_time = 0
max_input_time = 0
max_input_vars = 5000
memory_limit = 256M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 100G
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 100G
max_file_uploads = 200
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
date.timezone = Asia/Hong_Kong

同樣地 php 5.6 版本的 php.ini 也要改一次。

vi /etc/php/5.6/fpm/php.ini

Contents