0%

[PHP] CentOS 8.2 + Nginx + MariaDB + php-fpm + phpMyAdmin

前言

說到使用 MySQL/MariaDB 就會想到 phpMyAdmin 這個使用者圖像介面,它是用 PHP 寫出來與 MySQL/MariaDB 互動的介面,所以若要使用,必須先安裝網頁伺服器與 PHP。

環境

  • CentOS 8.2

安裝 EPEL

安裝由 Fedora 社群打造的第三方源 EPEL (Extra Packages for Enterprise Linux),其中包含比官方 repository 還要新的套件版本

1
[user@localhost ~]$ sudo dnf -y install epel-release

安裝 Nginx

詳細安裝與設定過程參考 [Nginx] CentOS 安裝網頁伺服器 Nginx,安裝好後從瀏覽器輸入 http://localhost 確定可看到 Nginx 預設頁面

1
2
3
[user@localhost ~]$ sudo dnf -y install nginx
[user@localhost ~]$ sudo systemctl start nginx
[user@localhost ~]$ sudo systemctl enable nginx

安裝 MariaDB

詳細安裝與設定過程參考 [MySQL] CentOS 8 安裝 MySQL 8.0 與更改 root 密碼

1
2
3
[user@localhost ~]$ sudo dnf -y install mariadb-server mariadb
[user@localhost ~]$ sudo systemctl start mariadb
[user@localhost ~]$ sudo systemctl enable mariadb

安裝 php-fpm

這裡安裝預設版本 (目前是7.2版)

1
[user@localhost ~]$ sudo dnf -y install php php-fpm php-json php-mysqlnd php-mbstring

修改 www.conf 設定

修改 /etc/php-fpm.d/www.conf 檔案內容

  1. user = apacheuser = nginx
  2. group = apachegroup = nginx
  3. listen = /run/php-fpm/www.socklisten = /var/run/php-fpm/php-fpm.sock
  4. 拿掉 ;listen.owner = nobody 的分號,並改為 listen.owner = nginx
  5. 拿掉 ;listen.group = nobody 的分號,並改為 listen.group = nginx
  6. 拿掉 ;listen.mode = 0660 的分號

啟動 php-fpm 服務

1
2
[user@localhost ~]$ sudo systemctl start php-fpm
[user@localhost ~]$ sudo systemctl enable php-fpm

修改 php-fpm.conf 設定

修改 /etc/nginx/conf.d/php-fpm.conf 檔案內容

  1. server unix:/run/php-fpm/www.sock;server unix:/var/run/php-fpm/php-fpm.sock;

新增 phpmyadmin.conf 檔案

新增 /etc/nginx/conf.d/phpmyadmin.conf 檔案,內容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 80;
server_name server_domain_or_IP;

root /usr/share/nginx/html;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

重新載入設定

Nginx 重新載入設定檔,要看到 ok/etc/nginx/nginx.conf test is successful 才是對的哦!

1
2
3
4
[user@localhost ~]$ sudo systemctl reload nginx
[user@localhost ~]$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

確認 php-fpm 運作

創建 /usr/share/nginx/html/info.php 其內容如下

1
2
<?php
phpinfo();

這時從瀏覽器輸入 http://localhost/info.php 確定可看到 phpinfo 的頁面,若看得到代表 Nginx + php-fpm 有在正常運作囉

安裝 phpMyAdmin

下載 phpMyAdmin 並解壓縮到 /usr/share/nginx/html 目錄

1
2
[user@localhost ~]$ unzip Downloads/phpMyAdmin-5.0.2-all-languages.zip 
[user@localhost ~]$ sudo mv phpMyAdmin-5.0.2-all-languages/ /usr/share/nginx/html/phpMyAdmin

創建 tmp 目錄

創建 phpMyAdmin/tmp/ 目錄並更改擁有者與群組為 nginx:nginx,同時更改權限為 755

1
2
3
[user@localhost ~]$ sudo mkdir /usr/share/nginx/html/phpMyAdmin/tmp
[user@localhost ~]$ sudo chown nginx:nginx /usr/share/nginx/html/phpMyAdmin/tmp
[user@localhost ~]$ sudo chmod 755 /usr/share/nginx/html/phpMyAdmin/tmp

設定 blowfish_secret 金鑰

複製一個 config 樣板,並改名為 config.inc.php,此樣板會被 phpMyAdmin 載入

1
[user@localhost ~]$ sudo cp /usr/share/nginx/html/phpMyAdmin/config.sample.inc.php  /usr/share/nginx/html/phpMyAdmin/config.inc.php

再從 phpMyAdmin blowfish secret generator 取得安全的金鑰,並複製到 config.inc.php 檔案中,例如

1
$cfg['blowfish_secret'] = 'Jh448H=tn1sfkb3b3EKwvofq=QVuitPn';

權限設定

開啟 php session 權限

設定 Nginx 對 php session 的權限,需將權限開啟,否則無法使用 phpMyAdmin 的登入功能

1
[user@localhost ~]$ sudo chown nginx:nginx /var/lib/php/session/

設定 SELinux

修改 phpMyAdmin 的安全性文本,讓 Nginx 可以有權限可以讀寫,否則 SELinux 會阻檔,然後在瀏覽器出現 403 的錯誤碼

1
[user@localhost ~]$ sudo chcon -R -t httpd_sys_rw_content_t /usr/share/nginx/html/phpMyAdmin

完成

在瀏覽器網址輸入 http://localhost/phpMyAdmin 就可以如同 Windows 上使用 xampp 一般,使用 phpMyAdmin 操作作資料庫啦!

參考文獻

  1. How To Install Linux, Nginx, MySQL, PHP (LEMP) stack On CentOS 7
很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵