身為一個不入流的部落客,棲身在 Google 的 Blogger 平台上,也默默的爬了兩年的格子,但是幾過了幾次的版面,實在沒有辦法做些大幅度的調整,所以也開始考慮要用虛擬主機來自行架設部落格。
說到早年要架部落格,可不是像現在到處都有現成的部落格平台,而是除了自己土炮手刻程式碼之外,就是得用部落格套件來架設了。
當時首選的套件非 Movable Type 莫屬,可是好景不長,在 2004 年中,因為他們突然修改了 User License 的條文,讓粉絲們產生了逃命潮,關於這個故事可以看一下 Mr Jamie 在 2011 年寫的文章:為什麼 WordPress 大受歡迎,Movable Type 卻沒有。。
而 Wordpress 適時把握了這個缺口,不只一舉拿下了部落格市場,根據 W3Techs 的統計資料,他們的市佔率在 2015 年底已經是全球 CMS (內容管理系統,Content Management Systems) 的第一名,每四個網站就有一個是用 Wordpress 建置的。
現在絕大部份的部落客應該都是使用 痞客邦 PIXNET、Google Blogger、隨意窩 Xuite、udn 部落格、Yam 天空部落格 ... 等部落格平台來發文,一方面介面簡單而且大多免費,另一方面也不用擔心伺服器的管理問題,只要專心發文就行。
既然現成的部落格平台那麼方便,又為何還要自行架設呢?我想原因不外乎這幾點:
- 打造 100% 符合需求的版面。
- 擁有專屬自己的品牌形象,例如:網域名稱 http://blog.itist.tw、E-Mail 信箱 heracles@itist.tw。
- 不會受到平台業者影響造成心血全毀 (
對!無名小站,我說的就是你)。
事前準備
不管你是 LAMP 愛用者或是 LEMP 大粉絲,請先參閱下列的文章先建置好底層服務。
Wordpress 的系統需求是:
- PHP 5.2.4 以上
- MySQL / MariaDB 5.0 以上
這邊我們會以 LEMP 架構來實作,愛用 LAMP 架構的朋友不必擔心,步驟完全相同。
此外,
租用虛擬主機的朋友也可以依照這篇文章的步驟來自行建置。
取得主程式
先連上 Wordpress 官網。
找到下載連結,目前最新的版本是 4.4.1。
下載 Wordpress 主程式,它已經內建繁體中文語系,所以不必額外再安裝了。
wget https://tw.wordpress.org/latest-zh_TW.zip
將主程式解壓縮,若是使用 LAMP 架構的話,請把路徑改到 /var/www/html。
unzip latest-zh_TW.zip -d /usr/share/nginx/html
這樣就會在網站根目錄看到 Wordpress 主程式的目錄。
接下來是非常多非常多教學文章都亂教的步驟:調整目錄存取權限。
我們常常會看到他們要求使用者用這樣子的指令來解決權限問題。
sudo chmod 777 -R /usr/share/nginx/html/wordpress
或是
sudo chmod a+rwx -R /usr/share/nginx/html/wordpress
可是,這是 200% 錯誤的方法!!!
這會造成什麼結果呢?
其實也不是什麼嚴重的問題啦,只不過就是任何一個路邊連上來的阿狗阿貓都可以任意上傳資料,然後就輕輕鬆鬆執行傳上來的程式、木馬、蠕蟲、惡意程式,或是把 Server 上的所有資料全部看光光。
接著會發生什麼事,我想這個問題,就直接問老天吧 ...... XD
正確的做法應該:
將目錄權限不變,調整擁有者與擁有群組,修改成 Web Server 的使用者及群組,像我這次用的是 Nginx,就應該下這樣的指令才對。
sudo chown nginx:nginx -R /usr/share/nginx/html/wordpress
建立資料庫
先連線到 MySQL / MariaDB,用預設帳號 root 登入,此 root 非彼 root,它是 DB 自管的帳號而不是 Linux 的本機帳號。
mysql -u root -p
建立一個專用的資料庫。
create database `wordpress`;
資料庫的名稱請用反引號 ` (backtick) 包起來,而不是用單引號 ' (single quotation marks)。
建立 Wordpress 專用的使用者。
create user 'wpadmin'@'localhost' identified by 'P@ssw0rd';
讓專用帳號有完整存取 wordpress 資料庫的權限,並重新載入權限。
grant all on wordpress.* to 'wpadmin'@'localhost';
flush privileges;
用新帳號登入資料庫。
mysql -u wpadmin -p
確認可以登入並擁有正確的資料庫存取權限了。
show databases;
開始安裝
打開瀏覽器連上 Web Server,別忘了我們是放在網站根目錄下的 wordpress 目錄,在輸入網址的時候別打錯了。
http://10.1.1.214/wordpress
認真說起來,這些步驟也算不上是安裝,目的是為了產生主設定檔 wp-config.php 裡的設定值而已,詳細說明可以參閱 Wordpress.org - Editing wp-config.php。
- 資料庫名稱 - 專屬的 Database 名稱
- 帳號 / 密碼 - Wordpress 的管理員
- 資料庫主機位址 - 若是 Web Server 跟 DB Server 不是同一台才要修改
- 資料表前綴 - 用來分辨不同 Wordpress 的資料表 (DB Tables)
如果出現「無法選擇資料庫」的錯誤訊息,可能的原因有:
- 資料庫還沒建
- 帳號密碼錯誤
- 權限不夠
- IP 位址錯誤
- 被防火牆擋住
如果出現「無法寫入 wp-config.php 檔案」的錯誤訊息,只要自己手動建立就可以了。
新增主設定檔。
sudo vi /usr/share/nginx/html/wordpress/wp-config.php
直接貼上系統提供的設定值文字內容即可。
還要調整一下權限。
sudo chown nginx:nginx /usr/share/nginx/html/wordpress/wp-config.php
恭禧~~~
安裝步驟已經到了最後一步,只要輸入部落格的基本資料就完成了。
- 網站標題
- 帳號 / 密碼
- 確認密碼
- 你的電子郵件
- 搜尋引擎可見度
大功告成!
這時候就可以用剛剛建立的帳號密碼登入 Wordpress 的管理介面。
訪客也可以開始瀏覽我們的部落格文章了。
參考資料
圖片來源
- https://movabletype.org/documentation/administrator/managing-blogs/viewing-a-list-of-blogs.html
- http://m.life.tw/?app=view&no=286611
更新紀錄
- 2016/01/28 撰文。
板主你好, 我按照你的教學, 從CentOS7 安裝LENP開始, 安裝到wordpress!
回覆刪除安裝完wordpress後, 想要安裝外掛"Jetpack"
卻無法連接wordpress帳號...
請問該如何解決呢?
解決了, 將wordpress搬到根目錄就可以了!
刪除可能是目前設置的nginx不支援/usr/share/nginx/html/wordpress的關係!
不知到版主有沒有辦法解?
這個可能要測一下,
刪除我之前遇到 Jetpack 沒辦法連接 Wordpress 帳號的原因是 HTTPS 的問題,跟你的狀況不太一樣 .... @@
因為採用樓主的方式, 因為多一層/wordpress目錄!
刪除我使用port轉, 但nginx好像沒辦法把網站對應到外網!
所以導致Jetpack 一直無法對外, 因此一直無法連接!
把wordpress搬到根目錄就可以了!
不知道版主, 後續會分享nginx設定教學嗎?
也許是我這邊沒設好@@
我想到為什麼不行了.....
刪除因為我在 LEMP 教學文章裡面,Nginx 網站根目錄指定的是 /usr/share/nginx/html,而不是 /usr/share/nginx/html/wordpress,所以你會連不到。
你把 Nginx 主設定檔裡的 Document Root 改成 /usr/share/nginx/html/wordpress 就行了。
真不好意思,害你燒了不少腦細胞 .... XDDD
這個方式我測試過呢, 好像還是會有點問題!
刪除期待樓主之後的Nginx深度教學^^
請問Nginx主設定檔裡的兩個root都要改嗎?
刪除作者已經移除這則留言。
回覆刪除請問 當我上傳時 theme 或相片時,會出現錯誤, 如下:
回覆刪除無法建立目錄: wp-content/uploads/2016/10。伺服器是否允許寫入上層目錄?
我看過 wp-content 已經是755 及在wordpress下全部也是 nginx:nginx 了, 是否錯了什麼地方呢?
我倒是沒遇到這回事耶...
刪除你要不要檢查一下後台設定值,跟 wp-content/uploads 目錄的權限?
Jam大哥, 我也覺得奇怪,
刪除這幾天我也在分析:
1. 我可以在wordpress加入新文章, 只是上傳不到相片/Theme, 那應該 Maria, php, nginx 基本設定正確了, 估計問題應該在 檔案結構.
2. 我已暫時設定 wp-content/uploads 到777 及 wordpress內全已設定 chown nginx:nginx 那應該不是 資料夾的權限問題.
但有幾點想請教一下Jam大哥,
1. 我在Terminal輸入 php -v 是顯示版本是 5.4.16 但在 localhost\phpinfo.php, 是顯示 7.012 會否出現版本混亂的問題? 會否我設定php70, 但wordpress是在運行 php 5.4
2. 會否出現在wordpress上傳圖片時或系統建立資料夾時(wp-content/uploads/2016/11), 不是在使用nginx 的權限呢? 會否我改了權限給 nginx, 但centos在運行其他權限讀取?
可能以上問題很底級, 但我真的是Linux新手, 出現了天馬行空的推測, 敬請見諒~
最後我還是屈服了, 開一個新的VM, 重新用LNMP方式安裝, 避開了問題. 最後當然是要謝謝JAM大哥寫了那麼好的文章, 小弟學習了不少新知識.
刪除1. 你是不是曾經裝過 5.4.16,移除了之後再重裝 7.012?
刪除還是根本沒移除5.4.16、或是裝過 Apache ...... XDDD
2. 理論上不會.....
3. 別客氣,大家教學相長 ^^
我當初沒有安裝其他的東西(5.4), 但當上傳失敗後, 就會去GOOGLE搜查 及什麼都試下 (gnome, ftp, phpmyadmin)~ 哈~ 雖然也學多了知識, 但因為基礎不穏, 導致消化不良, 弄到系統 亂七八糟. 很感謝你的文章, 令我對Linux多了知識, 多了興趣.
刪除文章很不錯@@
回覆刪除我想問一下要讓外網能連
回覆刪除是否還是要到ap管理介面開啟NAT功能?
你該開的應該是 port forwarding 吧...
刪除阿阿真的不太懂亂說了
刪除我也是有遇到無法連到jetpak的問題
話說我是用中華電信的ap
這次的這一台是dasan的h660w
好像沒有這個功能
要去買一台有port forwarding的功能的機子嗎?
這個拿到的應該是浮動的實體 IP 吧,firewalld 直接開 port 不就好了嗎?
刪除請問權限是否可以設定成sudo chown nginx:nginx -R /usr/share/nginx/
回覆刪除