本來是想在原來這篇文章下直接編輯, 但是考慮到搜尋引擎收錄的緣故, 於是決定原來的文章不再編輯, 重新寫一篇
這裡有必要說明的是, 這篇文章將會建立在你曾經已經詳細瀏覽過本博客給出的教學文章, 所以基本不配有教學圖像. 如果這篇文章你看不懂,可以結合原來的文章《在 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
我們會看到如圖像的界面

冒號之後的就是預設的臨時密令
然後我們用此密令登錄 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
搜尋 user
和 group
, 將後面的 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
到這裡為止, 全部的安裝已經完成了, 大家可以按照之前文章中的最後部分, 對安裝的結果進行偵錯
自創文章, 原著 : Jonny, 如若需要轉發, 在已經授權的情況下請註明出處 :《【重構】在 CentOS 7 上安裝 Nginx + PHP 7.2 + MySQL 8》https://jonny.vip/2018/07/19/%e3%80%90%e9%87%8d%e6%a7%8b%e3%80%91%e5%9c%a8-centos-7-%e4%b8%8a%e5%ae%89%e8%a3%9d-nginx-php-7-2-mysql-8/
如果遇到
這樣的錯誤, 那麼執行以下指令
yum install -y epel-release