去年寫了篇在 Fedora 上準備 LEMP 環境的文章,不過正常來說應該是比較少人會使用 Fedora 作為伺服器來使用,而網路上最推薦的系統不是 ubuntu 就非 CentOS 莫屬,至於除了 LEMP 外還有其他種組合,像是:
- LAMP = Linux + Apache + MySQL(MariaDB) + PHP
- WAMP = Windows + Apache + MySQL(MariaDB) + PHP
- WIMP = Windows + IIS + MySQL(MariaDB) + PHP
除了上面的組合外,還有其他各式各樣的組合,而 LEMP (也有人稱作 LNMP)則是 Linux + Nginx + MySQL(MariaDB) + PHP ,舉例來說像是本站就是使用 LNMP 的架構,不過前面有多了一個 Varnish 快取的機制,這個有機會再來談談囉!
本次使用 CentOS 7 作為示範,並選擇 DigitalOcean 作為主機商,如果還未註冊 DigitalOcean 可使用我的推廣連結,可獲得 100 美金優惠。
建立機器
接著則是規格,除非流量非常高,而一開始的入門建議選 5 或 10 美金的規格即可。
接著是選機房位置,DigitalOcean 在美洲、歐洲及亞洲皆有機房可選,台灣方面建議選亞洲的新加坡,或是美國的舊金山(San Francisco)。
而下方的選擇分別為:區域網路、每週備份(額外多收費)、IPv6、建立機器時要執行的腳本、監控服務。
最後就是命名與選擇台數了,取個自己好記得名字吧!左邊可以讓你一次建立多台機器,右邊則是分別為機器命名,都完成後記得點選綠色的建立按鈕。
其他未介紹處都算是進階應用,有機會再來說說其他選項的用途。
機器建立後會寄一封信上面會有登入的帳號密碼以及主機的 ip。
接著回到 DigitalOcean 的控制面板,點入剛建立好的機器,並點選左邊的 Access,在點入其中藍色的 Launch Console 按鈕。
進入機器
接著就會開啟新視窗,先輸入 root 並按下 Enter。
接著輸入密碼,密碼就在剛剛那封信裡,而輸入時你會看不到你輸入的字這是正常的。
輸入完成後按 Enter,他會在要求你輸入一次,第二次輸入完成後會再要求輸入兩次的『新密碼』,切記請保持複雜。
環境準備
接著就可以進入到系統,請先輸入 yum update -y
來進行系統更新。
Linux 系統要注意他與 Windows 不一樣,Windows 上可能比較不會在意大小寫,但是在 Linux 中大小寫是不同的東西,有時輸入後出現錯誤不訪看一下是不是大小寫有誤。
yum 是 CentOS 中管理套件的一個工具,他除了 update 更新外,也能 install 安裝,而 -y 這個參數則像是在 Windows 上安裝軟體的全部皆是的功能。
更新完成後接著開始安裝一些必要的軟體,首先可以先安裝 EPEL Repo,這會讓系統可以安裝更多原先沒有的軟體,接著是 wget 這算是一個下載的工具,而指令如下:
yum install epel-release wget -y
輸入完成記得按下 Enter ,每個指令打完後都要打 Enter 來進行。
接著可以安裝對於新手來說比較好用的文字編輯器 nano,輸入 yum install nano -y
。
安裝完成後輸入 nano /etc/selinux/config
,便會進入編輯器。
這時可以案上下鍵移動選擇的位置,將 SELINUX=enforcing
改為 SELINUX=disabled
,完成後按下 Ctrl+X 在輸入 y 並按下 Enter 就可以儲存囉!
SELinux 是一個讓伺服器更加安全的工具,不過對於本次的教學來說過於複雜就先關閉,若沒有關閉會導致網站放入檔案還是一直出現 403 沒有權限喔!
nano 編輯器對於新手是非常好用的文字編輯工具,以下是常用的快捷建:
- Ctrl+w 便可以輸入要搜尋的字
- Ctrl+x 存檔
- Ctrl+v 下一頁
- Ctrl+y 上一頁
完成後輸入 reboot now 將主機重開,以便讓 SELinux 關閉的設定生效,重開完成後就可以開始進行安裝 Nginx(網頁伺服器),輸入 yum install nginx -y
安裝完成後先輸入 systemctl enable nginx
,這代表開機便啟動 Nginx。
由於 CentOS 預設的 PHP 版本非常舊,因此需要第三方的 Repo 來讓 CentOS 支援到 PHP 7 甚至是最新的 7.2。
先輸入:
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
接著再輸入:
rpm -Uvh remi-release-7.rpm
再輸入:
yum-config-manager --enable remi-php71
若發生找不到指令可以先輸入 yum install yum-utils -y
這樣便可以讓 CentOS 7 可以安裝 PHP 7.1。
接著 php 的安裝輸入以下指令:
yum install php-cli php-fpm php-gd php-curl php-mbstring php-mcrypt php-odbc php-mysqlnd php-xmlrpc php-xml php-pdo php-opcache -y
安裝完成後與 Nginx 一樣,要先輸入 systemctl enable php-fpm
,讓系統以後開機時自動啟動 php。
接著是 MySQL,雖然現在可能已經流行使用 MariaDB 取代 MySQL,不過本次就已最新的 MySQL 5.7 來進行示範。
先輸入:
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
接著再輸入:
rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
這樣便讓 CentOS 可以安裝 MySQL 5.7 最新版,安裝指令則是:
yum install mysql-community-server -y
安裝完成後也是與上面的 Nginx 與 php 一樣,都要先輸入 systemctl enable mysqld
,讓系統自動啟動 MySQL。
設定軟體
軟體都安裝完成後就可以開始設定,首先來設定資料庫,MySQL 5.7 的設定跟以往較為不同,以前都案安裝完成後啟用,接著進行設定密碼,現在則是先啟用後找到『暫時』的密碼,接著再用暫時的密碼來設定為新的密碼。
systemctl enable 是讓開機後自動啟用某個東西,而 systemctl start 則是現在就啟動某的東西,因此我們要先啟動 MySQL,這樣才能進行設定 MySQL。
輸入 systemctl start mysqld
,接著再輸入 cat /var/log/mysqld.log | grep password
。
這時就會看到一個紅色字眼標示的一行英文,而最後的 root@localhost: 之後的文字就是暫時的密碼。
找到暫時的密碼後便可以設定 MySQL,輸入 mysql_secure_installation
,接著輸入剛剛找到的密碼,之後便會要求輸入新密碼,盡可能保持複雜且超過 8 個字,若過於簡單會設定失敗喔!之後的問答也都是案 Y 即可。
最後出現 All done!代表資料庫已經設定完成,結束了嗎?還沒 XD,還有 Nginx 與 php 需要設定。
接著是 php 的設定,首先輸入 nano /etc/php.ini,在案 Ctrl+w 搜尋 cgi.fix_pathinfo ,將原先的 ;cgi.fix_pathinfo=1 改為 cgi.fix_pathinfo=0。
接著再搜尋 128M 將找到的 memory_limit = 128M 改為 memory_limit = 256M。
再搜尋 8M 把數值改為 20M,這樣讓可以 POST 的值大一點。
再搜尋 2M,這個則是代表限制上傳檔案的大小,2M 可能有的人覺得太小傳不了圖,因此可以開大一點,例如到 10M。
最後這個檔案要搜尋的是 timezone 找到後將 ;date.timezone = 改為 date.timezone = Asia/Taipei。
完成後按下 Ctrl+X 並案一下 y 再 Enter 存檔即可。接著換下一個檔案,輸入:
nano /etc/php-fpm.d/www.conf
將以下設定:
user = apache
group = apache
listen = 127.0.0.1:9000
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
改為:
user = nginx
group = nginx
listen = /var/run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
存檔後,接著再輸入:
chown -R nginx.nginx /var/lib/php/session/
mkdir /var/run/php-fpm/
chown -R nginx.nginx /var/run/php-fpm/
這樣就設定完成 php,輸入 systemctl start php-fpm
來啟動。
最後則是 Nginx,輸入 nano /etc/nginx/nginx.conf
。
找到 server { } 這個區段,並將以下文字貼入。
編輯後 server {} 這個區段看起來的樣子:
按下 Ctrl+x 存檔,並輸入 systemctl start nginx,來啟動 Nignx,接著就能放置測試的檔案來看 php 是否運作正常。
輸入 nano /usr/share/nginx/html/info.php
,並輸入 <?php phpinfo(); ?>
,在案下 Ctrl+x 存檔,接著可以輸入 curl ipinfo.io
,他會回應你的 ip,在開啟瀏覽器輸入你的 ip/info.php。
例如我的 206.189.43.20/info.php:
測試沒問題後就可以把這個檔案刪除,輸入 rm -rf /usr/share/nginx/html/info.php
,請小心不要下錯,這可以砍掉整台伺服器。
到這邊 CentOS 7 LEMP 的環境就已經完成設定了,步驟有點多且繁瑣,不過其實這也只是整個伺服器的一小環,還有後續的優化、安全性設定等,未來有機會再加入相關教學。
早一點看到你的網站文章,我就不用很早付費了⋯⋯
100美金,你是要累積多久的推廣coupon才有得給啊~,讚!
DigitalOcean 的 Referral 蠻難拿到的,點擊與註冊沒有錢
使用推薦連結的人還要先在 DigitalOcean 有花費 25 美金,我才能拿到 25 美金。
今早按照教學的設定,套用在GCP上的centos 7, 結果跑到最後一個測試網頁,卻只有 404, 沒辦法秀出 phpinfo,能幫我看看嗎?
需要我提供什麼設定,感謝
我查過服務都是正常執行,nginx + php-fpm,DB部分我是用mariadb,網頁也看得到index.html,就是不能跑php
看到問題了,我在 terminal 使用 php + info.php 會顯示在terminal裡,但是網頁就不行,希望版主能幫我除錯,否則又要用回apache + nginx的老路了, apache不是不好,只是反應慢
對了,忘記說,GCP是我測試用的機台,測好弄好才會導到Digital Ocean去
你可能要調閱一下 php 與 nginx 的 log
我猜是 nginx 與 php 之間的溝通有問題
好的,感謝你,我現在就來檢查看看