前言
自行架 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
安裝後可以輸入以下 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 還有很多 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 等工具了。
phpmyadmin 所需要用的 mysql username 和 password 可以在 wp-config.php 找到
另外,如果需要 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