CentOS 7 空白主機安裝 LEMP (Linux + Nginx + MariaDB(MYSQL) + PHP7 )


以下將開始示範如何在 CentOS 7 安裝與設定LINUX、Nginx(E)、MariaDB(MYSQL)與 PHP(簡稱 LEMP)來架設 WEB 伺服器的環境。

另外提醒的是,目前最新的 PHP 最近版本是 7.1, 如果你使用 RHEL 及 CentOS 7 預設的 YUM 安裝, 只停留在 PHP 5.4。
因此必須使用Remi 及 EPEL Repository 安裝 PHP 7.0 及 7.1。
以下將另外說明。

如果你已經看完這篇安裝好CentOS 7:WIN10 + VMWARE 環境中安裝 CENTOS 7
接下來請先確認網路是否正常對外連線。
 

確認網路

有可能會VMware 安裝CentOS 7 無法上網,原因是要把 ens33 預設為開機啟動。
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

會載入相關設定。按下鍵盤上[i] 鍵進入編輯模式。
以下僅列出相關行數
....
BOOTPROTO=dhcp  #啟動時 IP 取得的協定,(static是固定IP,如果是 浮動IP,這裡要改成 dhcp)
DEVICE=ens33     #裝置名稱,跟文件名稱對應(如eth0)
ONBOOT=yes     #是否在開機的的時候啟動網路卡(從no改為yes)
...
按下鍵盤上[ESC] 鍵離開編輯模式,再鍵盤輸入[:wq!] 按下ENTER存檔離開。

進行 CentOS 重新開機。
[root@localhost ~]# reboot

下載 wget 套件
[root@localhost ~]# yum -y install wget


 

Nginx

安裝步驟

如果使用 CentOS 7.1,必須先加入由 Nginx 官方提供的 CentOS 7 yum repository,方可直接透過 yum 安裝。
 
[root@localhost ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
 

安裝EPEL repository

yum -y install epel-release
 

安裝Nginx

root@localhost ~]# yum -y install nginx


接著進行 NGINX 設定檔。
 
[root@localhost ~]# vi /etc/nginx/nginx.conf
/*
按下鍵盤上[i] 鍵進入編輯模式。
*/


# 啟用 Nginx 的 Linux 帳戶
user  nginx;
# 啟用的執行緒數量
worker_processes  2;

# log 檔位置
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    # 允許同一時間連線的數量
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # 預設 log 記錄的格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # access log 檔位置
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    
    # 視情況調整秒數
    keepalive_timeout  65;

    # 啟用 gaip 壓縮(預設為不啟用)
    gzip  on;

    # 載入該路徑的所有設定檔,通常就是每個虛擬主機的配置
    include /etc/nginx/conf.d/*.conf;

    # 設定可上傳最大檔案容量(依需求設定)
    client_max_body_size 30m;
}
/*
完成編輯後,按下鍵盤上[ESC] 鍵離開編輯模式,鍵盤[shift]按下不放+輸入[:wq!] 按下ENTER存檔離開。
*/

設定Nginx 伺服器預設檔
 
[root@localhost ~]# vi /etc/nginx/conf.d/default.conf
/*
按下鍵盤上[i] 鍵進入編輯模式。
*/


server {
    # 主機 Port
    listen       80;
    # 主機名稱
    server_name  localhost;

    # 針對這個主機的 log 檔位置
    #access_log  /var/log/nginx/log/host.access.log  main;

    # html 檔
    location / {
        # 網站的根目錄位置
        root   /usr/share/nginx/html;
        ....
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
/*
完成編輯後,按下鍵盤上[ESC] 鍵離開編輯模式,鍵盤[shift]按下不放+輸入[:wq!] 按下ENTER存檔離開。
*/
 

啟用防火牆

設定 firewall 允許 http(80 Port)、https(443 Port)封包。
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=http
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=https
[root@localhost ~]# firewall-cmd --reload
 
如果有安裝Webmin則記得開啟10000 port
firewall-cmd --permanent --add-port=10000/tcp

反之,移除 PORT 則使用 --remove-port
[root@localhost~]# firewall-cmd --permanent --remove-port=10000/tcp
10000/tcp


如果要確定是否啟用,可用以下指令檢視
[root@localhost ~]# firewall-cmd --zone=public --list-all
 
看到 servives 那行有 http、https表示有加入了。

 

設定 SELinux 的文件類型

設定 SELinux 的 httpd_sys_content_t 這個文件類型,設定「擁有者」與「權限」正確的配置。
[root@localhost ~]# chcon -R -t httpd_sys_rw_content_t /usr/share/nginx/html

確認是否正確設定SELinux 的文件類型,
如果可以看到已經出現 httpd_sys_rw_content_t 表示已經加入。
[root@localhost ~]# ls -l -dZ /usr/share/nginx/html
drwxr-xr-x. nginx nginx unconfined_u:object_r:httpd_sys_rw_content_t:s0 /usr/share/nginx/html
 

設置開機服務

啟用服務並設置為開機自動啟用。
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx
延伸閱讀:如何列出當前系統正啟用(enable)的服務

接下來就可以輸入IP位置檢視伺服器是否有正常運作。
如何取得在Linux 下取得主機IP?
在Centos7 得到當前IP的方式:
[root@localhost ~]# ifconfig
[root@localhost ~]# echo $(hostname -I)

得到IP後,在使用瀏覽器輸入,便可以看到此畫面。
Nginx
圖. NGINX已運作的畫面





接下來可以進行安裝 MYSQL資料庫。

安裝 MariaDB(MYSQL)

[root@localhost ~]# yum -y install mariadb mariadb-server

安裝成功後啟用服務
[root@localhost ~]# systemctl start mariadb

並進行初始化
[root@localhost ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
.....

Enter current password for root (enter for none):  # 這邊為輸入 MariaDB 的 root 密碼(由於是初始化,密碼多半為空,所以直接按下 ENTER)
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n]   # 直接按下 ENTER
New password:               # 設定你要的新的密碼
Re-enter new password:      # 再次確認密碼
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]  # 詢問是否移除 anonymous user 的資料,可直接按下 ENTER
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]  # 是否只允許讓 root 從 localhost 登入,無法從其他的網路登入,可直接按下 ENTER
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]  # 是否移除 test 的資料庫,可直接按下 ENTER
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]  # 是否要重新載入權限的 table 資訊,可直接按下 ENTER
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!  # 到此已經設置完成
 

MYSQL 開機自動服務設置

開機自動啟用服務。
[root@localhost ~]# systemctl enable mariadb
 延伸閱讀:如何列出當前系統正啟用(enable)的服務

PHP 章節


接下來可以進行安裝PHP了。
安裝相關軟體:
php:PHP 程式語言
php-fpm:使用 FastCGI (Fast Common Gateway Interface)方式來讓 Nginx 與 PHP 之間交互連動,是一個常駐(long-live)型的CGI,它可以一直執行著。
 

安裝 PHP 5.4

# 如果要直接安裝 PHP 7 則先跳過此章節。檢視  [安裝 PHP 7.1]
[root@localhost ~]# yum -y install php php-fpm
 
如果直接使用以上指令安裝PHP,則會得到 PHP 5.4.16 預設版本。
PHPinfo

PHPINFO 大致資訊擷取如下:
PHP Version 5.4.16
System Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64
Build Date Nov 6 2016 00:30:49
Server API FPM/FastCGI
Loaded Configuration File /etc/php.ini
....
 
 

安裝 PHP 7.1

添加包含 PHP v7.1 的 CentOS repo套件包。
 
[root@localhost ~]# wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
[root@localhost ~]# rpm -Uvh remi-release-7.rpm

啟用 php71 repository

[root@localhost ~]# yum install yum-utils -y
[root@localhost ~]# yum-config-manager --enable remi-php71

安裝 PHP 套件

root@localhost ~]# yum --enablerepo=remi,remi-php71 install php-fpm php-common -y

安裝PHP常用模組

yum --enablerepo=remi,remi-php71 install php-opcache php-pecl-apcu php-cli php-pear php-pecl-zip pecl-zip php-pdo php-mysqlnd php-pgsql php-pecl-mongodb php-pecl-redis php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml -y
綠色部分可視需求安裝。


 

Nginx 與 PHP 互動設定

讓 Nginx 與 PHP 透過 php-fpm 交互連動。
[root@localhost ~]# vi /etc/nginx/conf.d/default.conf
/*
按下鍵盤上[i] 鍵進入編輯模式。
*/


...(略)...

    # html 檔
    location / {
        # 網站的根目錄位置
        root   /usr/share/nginx/html;
        # 新增預設檔名
        index  index.php index.html index.htm;
        # [須手動新增] 在瀏覽器呈現目錄樹為 on;反之 off,正試上線最好設成 off(預設值 off)
        autoindex on;
        # 啟用伺服端的 Rewrite 功能
        try_files $uri $uri/ /index.php?$args;
    }

    # php 檔
    # 把這個區塊原本預設檔註解掉的地方反註解,使之可以正常運作
    location ~ \.php$ {
        # 網站的根目錄位置
        root   /usr/share/nginx/html;
        # 經由 FastCGI 解析的檔案位置
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        # 使用瀏覽器瀏覽根目錄時,未指定檔名時預設使用的檔案
        fastcgi_index  index.php;

        try_files $uri =404;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include     fastcgi_params;

    }

...(略)...
/*
完成編輯後,按下鍵盤上[ESC] 鍵離開編輯模式,鍵盤[shift]按下不放+輸入[:wq!] 按下ENTER存檔離開。
*/
 

重啟 Nginx 服務

 
[root@localhost ~]# systemctl restart nginx
 

 

設置 PHP-FPM

開啟 php-fpm 的設定檔。
主要取代以下:
user = apache 更改成 user = nginx
group = apache 更改成 group = nginx
listen.owner = nobody 更改成 listen.owner = nginx
listen.group = nobody 更改成 listen.group = nginx
;listen = 127.0.0.1:9000
下方增加這行
listen = /var/run/php-fpm/php-fpm.sock

 
[root@localhost ~]# vi /etc/php-fpm.d/www.conf
/*
按下鍵盤上[i] 鍵進入編輯模式。
*/


;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock

/*
搜尋:
可以按下ESC先離開編輯模式,按下[/]進入搜尋模式,再輸入以下相關關鍵字搜尋。
*/

;user = apache
user = nginx

;group = apache
group = nginx

; 預設帳戶、群組,為正在運作的帳戶
;listen.owner = nobody
;listen.group = nobody

; 權限(預設為 0666)
;listen.mode = 0666

; session 的路徑
php_value[session.save_path] = /var/lib/php/session
/*
完成編輯後,按下鍵盤上[ESC] 鍵離開編輯模式,鍵盤[shift]按下不放+輸入[:wq!] 按下ENTER存檔離開。
*/

修改 session 路徑的擁有者、群組為 nginx。
[root@localhost ~]# chown nginx:nginx /var/lib/php/session/

修改網站根目錄的擁有者、群組為 nginx。
[root@localhost ~]# chown -R nginx:nginx /usr/share/nginx/html/
 
 

PHP-FPM 開機自動服務設置

啟用 PHP-FPM 服務並設置開機自動啟用。
 
[root@localhost ~]# systemctl start php-fpm.service
[root@localhost ~]# systemctl enable php-fpm.service
 延伸閱讀:如何列出當前系統正啟用(enable)的服務

 

測試 PHP 是否正常運作

[root@localhost ~]# vi /usr/share/nginx/html/index.php
按下 ENTER 鍵後,鍵盤輸入 'i' 鍵使之可以編輯。
接著輸入以下文字以便創建一個新的PHP程式:
<?php
phpinfo();

然後按下ESC鍵,鍵盤按下shift輸入 ':wq!' ,按下 ENTER 鍵,進行文件存檔與離開。

在Centos7 得到當前IP的方式:
[root@localhost ~]# echo $(hostname -I | cut -d" " -f 1)

接著瀏覽器輸入:http://你的IP/index.php
正常的話(如果沒有直接跳出下載對話框)會顯示以下資料。
php7.1.10
php7.1.10


PHPINFO 大致資訊擷取如下:
PHP Version PHP Version 7.1.10
System Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
Build Date Sep 27 2017 08:29:26
Server API FPM/FastCGI
Loaded Configuration File /etc/php.ini
....
 
 

查看當前系統 PHP 版本

[root@localhost ~]#  php -v
PHP 7.1.10 (cli) (built: Sep 27 2017 08:29:26)
Copyright (c) 1997-2017 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2017 Zend Technologies



在以往我們要讓 PHP 為了要加快處理速度,通常會配合 APC、eAccelerator、XCache 的任一個來使用;現在PHP7 起開始改用 OPcache 來實作。
開啟 Opcache file cache ,提升整個 PHP7 性能

編輯 OPcache 設定檔 
[root@localhost ~]#  vi /etc/php.d/10-opcache.ini
操作說明:
鍵盤輸入 'i' 鍵使之可以編輯。


zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
;opcache.file_cache=
opcache.file_cache=/home/opcache
opcache.huge_code_pages=1
/*
完成編輯後,按下鍵盤上[ESC] 鍵離開編輯模式,鍵盤[shift]按下不放+輸入[:wq!] 按下ENTER存檔離開。
*/


建立 Opcache file cache 專用目錄
[root@localhost ~]#  mkdir /home/opcache
並授予權限
[root@localhost ~]#  chown nginx:nginx /home/opcache

重新啟動 PHP-FPM,這邊就會看到 OPcache 已經啟動了
 
[root@localhost ~]# systemctl restart php-fpm.service 
 

PHP5.4 升級成 PHP7.1


下載含有 PHP7 的 remi repo  
[root@localhost ~]#  yum repolist all

確認有相關的 repo
repo id      repo name                                                                                status
!remi        Remi's RPM repository for Enterprise Linux 7 - x86_64             disabled
.....
remi-php71   Remi's PHP 7.1 RPM repository for Enterprise Linux 7 - x86_64    disabled   #等下會進行開啟
.....
 
[root@localhost ~]#  yum search yum-config-manager
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: linux.cs.nctu.edu.tw
 * epel: mirror02.idc.hinet.net
 * extras: ftp.linux.cs.nctu.edu.tw
 * remi-safe: mirror.innosol.asia
 * updates: linux.cs.nctu.edu.tw
=================================== Matched: yum-config-manager ===================================
remi-release.noarch : YUM configuration for remi repository
yum-utils.noarch : Utilities based around the yum package manager

繼續安裝
[root@localhost ~]# yum -y install yum-utils

開啟 remi、remi-php71
[root@localhost ~]#  yum-config-manager --enable remi
[root@localhost ~]#  yum-config-manager --enable remi-php71

如何把舊版本的php5 升級到php7?
開始升級所有相關的php套件,把原本 5.4升級到 7.1
[root@localhost ~]#  yum -y update php*
 

啟動所有服務

最後,重新啟動所有服務。把 Nginx、MariaDB 與 PHP-FPM 服務重新啟用。
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# systemctl restart php-fpm


大致上已經完成網頁伺服器架設。#


 

NGINX 常用目錄位置與設定檔路徑

 
所有設定檔:/etc/nginx/
主要設定檔:/etc/nginx/nginx.conf
預設設定檔:/etc/nginx/conf.d/default.conf
程序設定檔:/usr/sbin/nginx
log 檔:/var/log/nginx/


錯誤排除
An error occurred.

Sorry, the page you are looking for is currently unavailable.
Please try again later.

If you are the system administrator of this resource then you should check the error log for details.

Faithfully yours, nginx.
 

下一步

 

參考資料

http://www.krizna.com/centos/setup-network-centos-7/
http://microdnd.pixnet.net/blog/post/113621582-%5B資訊%5D-vmware-安裝centos-7-無法上網

 

回上一頁

相關文章:

喜歡這篇文章嗎?立即分享

Posted : / Views: 1255
Last updated :2017-12-07