本來是想在原來這篇文章下直接編輯, 但是考慮到搜尋引擎收錄的緣故, 於是決定原來的文章不再編輯, 重新寫一篇

這裡有必要說明的是, 這篇文章將會建立在你曾經已經詳細瀏覽過本博客給出的教學文章, 所以基本不配有教學圖像. 如果這篇文章你看不懂,可以結合原來的文章《在 CentOS 7 上搭建 Nginx + PHP 7 + MySQL 5.7》一起看, 原來的文章解釋的非常詳細

首先, Nginx 的安裝還是不變, 我就直接拷貝原來的文章下的 Nginx 安裝教學部分

進入

http://nginx.org/packages/centos/7/noarch/RPMS/

查看最新的 rpm

更新 rpm

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

直接安裝啟動 Nginx

yum install -y nginx

systemctl start nginx

設定 Nginx 隨著作業系統啟動

systemctl enable nginx

如果你的 CentOS 有啟動防火牆 Firewalld, 那麼還要開放對應的服務

firewall-cmd --permanent --zone=public --add-service=http

firewall-cmd --permanent --zone=public --add-service=https

firewall-cmd --reload

另外需要提醒一下, 越來越多的服務商開始拋棄 Firewalld, 採用自建的安全模組. 如果你是屬於這樣的情況, 請自行搜尋服務商提供的安全模組設定的教程, 開放 80 與 443 連接埠

接下來是 MySQL 8 的安裝

大致上與原來相同, 不過需要注意的是, 因為 MySQL 8 連線加密方式採用的身分驗證插件由 mysql_native_password 改為 caching_sha2_password, 所以我們要額外對此進行設定. 如果客戶端已經支援此插件, 那麼這些設定可以忽略

首先還是同樣要去 MySQL 的網站查找最新的 rpm

https://dev.mysql.com/downloads/repo/yum/

到目前為止, 最新的 rpm 地址所對應的指令為

rpm -Uvh https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm

安裝 MySQL

yum install -y mysql-community-server mysql-community-devel

安裝完成之後, 需要獲取預設的密令

獲取之前首先需要啟動 MySQL

systemctl start mysqld

MySQL 無須自己設定隨作業系統啟動, 因為這是在安裝的時候已經設定好的

啟動之後我們可以通過下面的指令獲取預設的密令

grep 'temporary password' /var/log/mysqld.log

我們會看到如圖像的界面

【重構】在 CentOS 7 上安裝 Nginx + PHP 7.2 + MySQL 8-Jonny'Blog

冒號之後的就是預設的臨時密令

然後我們用此密令登錄 MySQL

mysql -uroot -p

輸入剛才獲取的密令

然後通過以下指令修改

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密令';

將中文替換為新的密令

對於密令的要求, 我並沒有嘗試, 不過應該是繼承了 MySQL 5.7 的規則 : 至少有數字、大寫字母、小寫字母和特殊字元, 而且長度要大於 8 位

然後是對 MySQL 8 的特別設定

我們新建立一個具有全域權限的使用者

CREATE USER '使用者名稱'@'localhost' IDENTIFIED WITH mysql_native_password BY '使用者密碼';

GRANT ALL PRIVILEGES ON *.* TO '使用者名稱'@'localhost' WITH GRANT OPTION;

這個使用者具有和預設的 root 使用者一樣的權限

如果之後出現一些連線時的相容性問題, 大家就用新建立的使用者登錄即可

修改完成之後使用 quit 或者 exit 指令退出

接下來開始安裝 PHP

這次我們不再使用上次的 rpm, 因為更新比較慢

rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

直接安裝 PHP 以及其組件, 因為 rpm 不同, 所以組件的名稱有所不同

yum install -y php72-php-pecl-propro-devel php72-php-pecl-psr-devel php72-php-pecl-raphf-devel php72-php-pecl-xmldiff-devel php72-php-pecl-yaconf-devel php72-runtime php72-scldevel php72 php72-build php72-php php72-php-ast php72-php-bcmath php72-php-brotli php72-php-channel-horde php72-php-cli php72-php-common php72-php-componere php72-php-dba php72-php-dbg php72-php-devel php72-php-embedded php72-php-enchant php72-php-fpm php72-php-gd php72-php-geos php72-php-gmp php72-php-horde-horde-lz4 php72-php-imap php72-php-interbase php72-php-intl php72-php-ioncube-loader php72-php-json php72-php-ldap php72-php-libvirt php72-php-libvirt-doc php72-php-litespeed php72-php-lz4 php72-php-mbstring php72-php-mysqlnd php72-php-odbc php72-php-opcache php72-php-pdo php72-php-pdo-dblib php72-php-pear php72-php-pecl-amqp php72-php-pecl-apcu php72-php-pecl-apcu-bc php72-php-pecl-apcu-devel php72-php-pecl-apfd php72-php-pecl-apm php72-php-pecl-bitset php72-php-pecl-cassandra php72-php-pecl-cmark php72-php-pecl-couchbase2 php72-php-pecl-crypto php72-php-pecl-dbase php72-php-pecl-dio php72-php-pecl-druid php72-php-pecl-ds php72-php-pecl-eio php72-php-pecl-env php72-php-pecl-ev php72-php-pecl-event php72-php-pecl-fann php72-php-pecl-gearman php72-php-pecl-gender php72-php-pecl-geoip php72-php-pecl-geospatial php72-php-pecl-gnupg php72-php-pecl-grpc php72-php-pecl-handlebars php72-php-pecl-hdr-histogram php72-php-pecl-hprose php72-php-pecl-hrtime php72-php-pecl-http php72-php-pecl-http-devel php72-php-pecl-igbinary php72-php-pecl-igbinary-devel php72-php-pecl-imagick php72-php-pecl-imagick-devel php72-php-pecl-inotify php72-php-pecl-ip2location php72-php-pecl-json-post php72-php-pecl-jsond php72-php-pecl-jsond-devel php72-php-pecl-krb5 php72-php-pecl-krb5-devel php72-php-pecl-leveldb php72-php-pecl-libsodium php72-php-pecl-lua php72-php-pecl-lzf php72-php-pecl-mailparse php72-php-pecl-mcrypt php72-php-pecl-memcache php72-php-pecl-memcached php72-php-pecl-memprof php72-php-pecl-mogilefs php72-php-pecl-mongodb php72-php-pecl-mosquitto php72-php-pecl-msgpack php72-php-pecl-msgpack-devel php72-php-pecl-mustache php72-php-pecl-mysql php72-php-pecl-mysql-xdevapi php72-php-pecl-nsq php72-php-pecl-oauth php72-php-pecl-opencensus php72-php-pecl-parle php72-php-pecl-pcs php72-php-pecl-pcs-devel php72-php-pecl-pdflib php72-php-pecl-pq php72-php-pecl-propro php72-php-pecl-protobuf php72-php-pecl-psr php72-php-pecl-radius php72-php-pecl-raphf php72-php-pecl-rar php72-php-pecl-rdkafka php72-php-pecl-redis4 php72-php-pecl-ref php72-php-pecl-request php72-php-pecl-rpminfo php72-php-pecl-rrd php72-php-pecl-scrypt php72-php-pecl-seaslog php72-php-pecl-selinux php72-php-pecl-solr2 php72-php-pecl-sphinx php72-php-pecl-ssdeep php72-php-pecl-ssh2 php72-php-pecl-stats php72-php-pecl-stomp php72-php-pecl-swoole-serialize php72-php-pecl-swoole4 php72-php-pecl-sync php72-php-pecl-taint php72-php-pecl-tcpwrap php72-php-pecl-termbox php72-php-pecl-timecop php72-php-pecl-trace php72-php-pecl-trader php72-php-pecl-translit php72-php-pecl-uopz php72-php-pecl-uploadprogress php72-php-pecl-uuid php72-php-pecl-uv php72-php-pecl-varnish php72-php-pecl-vips php72-php-pecl-vld php72-php-pecl-weakref php72-php-pecl-xattr php72-php-pecl-xdebug php72-php-pecl-xdiff php72-php-pecl-xlswriter php72-php-pecl-xmldiff php72-php-pecl-xxtea php72-php-pecl-yac php72-php-pecl-yaconf php72-php-pecl-yaf php72-php-pecl-yaml php72-php-pecl-yar php72-php-pecl-yaz php72-php-pecl-zip php72-php-pecl-zmq php72-php-pggi php72-php-pgsql php72-php-phalcon3 php72-php-phpiredis php72-php-pinba php72-php-process php72-php-pspell php72-php-recode php72-php-smbclient php72-php-snappy php72-php-snmp php72-php-snuffleupagus php72-php-soap php72-php-sodium php72-php-tarantool php72-php-tidy php72-php-wkhtmltox php72-php-xml php72-php-xmlrpc php72-php-zephir-parser php72-php-zstd php72-uwsgi-plugin-php php72-zephir php72-zephir-parser --skip-broken

新的 rpm 中, 含有的組件比之前的多, 而且更新及時

我排除了以下組件

php72-php-pecl-handlebars-devel

php72-php-pecl-swoole4-devel

php72-php-sqlsrvphp72-php-oci8

php72-php-pecl-molten

php72-php-pecl-stackdriver-debugger

以及一些與上述安裝組件不相容的, 例如不同版本的

這些組件會造成 PHP 無法安裝或者 PHP-FPM 無法啟動, 又或者啟動之後 Nginx 會回傳 502 Bad Gateway

完成之後, 需要對某一些檔案稍微進行設定

因為採用不同來源的 rpm, 所以檔案的地址會有不同

vim /etc/opt/remi/php72/php-fpm.d/www.conf

搜尋 usergroup, 將後面的 apache 改為 nginx

user = nginx

group = nginx

然後搜尋 $HOSTNAME

env[HOSTNAME] = $HOSTNAME

env[PATH] = /usr/local/bin:/usr/bin:/bin

env[TMP] = /tmp

env[TMPDIR] = /tmp

env[TEMP] = /tmp

前面的 ";" 移除

接下來設定 php.ini

vim /etc/opt/remi/php72/php.ini

搜尋 mysqli.default_socket, 並且修改為

mysqli.default_socket = /var/lib/mysql/mysql.sock

搜尋 date.timezone, 去掉前面的 ";", 並且修改為

date.timezone = Asia/Hong_Kong

不同於之前的那一篇文章, 此篇文章中, 我們不對其它設定進行重新修改, 大家請自行按照自己的需求修改

接下來將一些檔案夾的權限還給 nginx

chown -R nginx:nginx /var/opt/remi/php72/lib/php/session

chown -R nginx:nginx /var/opt/remi/php72/lib/php/wsdlcache

然後啟動 PHP-FPM

systemctl start php72-php-fpm

設定 PHP-FPM 隨作業系統啟動

systemctl enable php72-php-fpm

 

到這裡為止, 全部的安裝已經完成了, 大家可以按照之前文章中的最後部分, 對安裝的結果進行偵錯