CentOS 8 於 2019 年 9 月釋出, 目前 Vultr 已經可以部署 CentOS 8 的實例. 本人已經嘗試在 CentOS 8 上進行配置, 發現 CentOS 8 上的有一些操作與 CentOS 7 有很大的不同, 所以寫了這篇博文

考慮到這篇文章主要可能面向新人, 所以我將盡可能詳細地描述每一個步驟, 必要時將會有圖像進行說明

不同的伺服器提供的作業系統可能有一些差異, 所以當有步驟的回饋與本文給出的圖像不符合的時候, 要仔細閱讀作業系統給定的說明. 如果出現錯誤, 請仔細審核步驟是否相同, 如果還是出現錯誤, 請留下評論或著 Google 解決

在開始之前, 我需要說明的是, Vultr 的 CentOS 8 預裝了 Vim、dnf (DaNdiFied Yum) 、unzip、Cockpit 以及 OpenSSL. 為了防止不同伺服器預裝的軟體不盡相同, 所以如果大家對自己的作業系統是否預裝上述軟體的情況不太了解, 建議直接執行下列指令

yum install -y vim dnf cockpit unzip openssl

和 CentOS 7 不同的是, 我們要全面使用 dnf 指令替換 yum 指令, yum 指令在之後可能會被遺棄

0. 配置 Cockpit

在正式開始配置之前, 我們首先來配置 Cockpit. 我相信很多新人都喜歡視覺化的管理, 而 Cockpit 正是這樣一個工具. 我們直接執行指令

systemctl start cockpit.socket

啟動 Cockpit. 對於 Cockpit 這樣的工具我是不建議大家在啟動時設定自動執行的 (基於安全原因的建議), 大家僅需要在使用的時候啟動即可. 上述指令不帶有自動執行的性質, 因此每一次重新開啟裝置之後都需要執行一次上面的指令才可以使用 Cockpit

如果大家想要在啟動時自動執行, 那麼執行下面的指令

systemctl enable --now cockpit.socket

這條指令相當於

systemctl enable cockpit.socket

以及

systemctl start cockpit.socket

兩條指令的集合, 表示設定自動執行後立即執行程式. 之後文章中再出現這樣的指令將不再另外再作講解

之後大家訪問自己的 IP, 連接埠為 9090, 即可進行視覺化的操作

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog
在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

這裡要注意的是, Safari 並不認可 Cockpit 自帶的證書, 所以要使用 Chrome 或著 FireFox 才可以訪問

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

選擇終端機即可進行管理

1. Nginx

進入

http://nginx.org/packages/centos/8/x86_64/RPMS/

查看最新的 RPM 地址

截止到發文為止, 最新的地址為

http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.16.1-1.el8.ngx.x86_64.rpm

因此執行指令

rpm -Uvh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.16.1-1.el8.ngx.x86_64.rpm

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

和 CentOS 7 不同的是, CentOS 8 在添加 RPM 包的時候自動安裝了 Nginx, 那麼我們只需要讓其啟動即可

systemctl enable --now nginx

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

接下來, 我們需要關閉 SELinux, 一般來說使用伺服器提供商所提供的自建的安全模組或者 Firewall 就可以了

如果你只是想臨時關閉, 那麼直接執行指令

setenforce 0

即可

如果你想要永久關閉, 就需要修改檔案 (如果不知道如何修改檔案, 先往下看, 後面有詳細的說明, 再回來執行這個步驟即可)

vim /etc/selinux/config

找到 SELINUX=enforcing 修改為

SELINUX=disabled

然後重新啟動

reboot

但是例如 Vultr 的伺服器提供商, 使用的是 Firewall, 那麼就需要執行下列指令

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

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

firewall-cmd --reload

每一條指令之後, 都會有 success 回傳

如果是自建的安全模組, 那麼請自行搜尋伺服器提供商提供的安全模組設定的教學, 開放 80443 連接埠, 模式為 TCP

設定完成之後, 直接訪問你的 IP, 就可以看到如下的頁面

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

2. MySQL 8

進入

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

找到最新的 RPM 包地址, 一般 CentOS 位於第一個

截止發文為止的最新地址為

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

執行指令

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

和 Nginx 不同的是, MySQL 並不會直接安裝, 需要手動安裝 :

dnf install -y @mysql

其中的 "@" 表示 mysql 套件包, 這個指令要比之前 CentOS 7 使用的指令簡單得多

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

完成之後, 首先需要啟動 MySQL. 和 CentOS 7 安裝時不同的是, 在 CentOS 8 中, MySQL 安裝之後並不會直接設定自動執行, 而 MySQL 一般是需要啟動後自動執行的, 所以執行指令

systemctl enable --now mysqld

然後進行配置, 配置的方法也和 CentOS 7 不同, 需要執行指令

mysql_secure_installation

在這之前, 我要提醒大家, 如果你對 MySQL 不熟悉, 那麼請按照本博客給出的方法設定 MySQL. 當然, 這個配置過程你可以完全個性化, 如果你不想確定某個操作, 不要輸入 y 或者 Y 即可, 其它任意的按鍵都可以幫助你避開某個操作

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

這是詢問是否啟用驗證密碼套件, 一般輸入 y 確認

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

這是詢問 MySQL 的帳戶密碼強度. MySQL 要求任意帳戶的密碼都必須大於 8 個字元. 0 代表低強度 (LOW) 密碼, 任意大於 8 個字元的密碼均可; 1 代表中等強度 (MEDIUM) 的密碼, 除了 LOW 的要求之外, 還要求數字 + 大小寫 + 特殊字元; 2 代表高強度 (STRONG) 的密碼, 除了 MEDIUM 的要求之外, 還要求字典檔案. 一般 MEDIUM 強度即可, 不過為了安全起見, 我們使用高強度, 此處輸入 2 (如果你只想用中等強度, 那麼輸入 1, 不推薦低強度)

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

這是確認你剛才所輸入的密碼, 密碼的最大長度為 100 個字元

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

MySQL 會有一個不具名帳戶, 一般情況下我們輸入 y 移除它

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

MySQL 的預設帳戶 root 擁有全域的權限, 因此一般輸入 y 禁止它遠端登陸

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

MySQL 預設會創建一個名為 test 的資料庫, 一般輸入 y 移除它

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

這是詢問是否重新載入資料表權限, 一般輸入 y 來重新載入

到此, MySQL 安裝完成. 之前, 我們需要為 MySQL 建立一個相容的 root 帳戶, 但是目前很多程式已經支援了 MySQL 8 的驗證方式, 所以我們幾乎不再需要建立這樣的帳戶. 如果大家的程式還沒有相容 MySQL, 請參考本博客之前的教學 (直接搜尋)

3. PHP

在安裝 PHP 的 RPM 包之前, 必須安裝其所需要的套件 epel-release 和 ncurses-devel

dnf install -y epel-release ncurses-devel

直接執行指令安裝 RPM 包

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

rpm -Uvh http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/libedit-devel-3.1-23.20170329cvs.el8.x86_64.rpm

rpm -Uvh http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/x86_64/RPMS.classic//libsz2-2.1-alt4.x86_64.rpm

rpm -Uvh http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/x86_64/RPMS.classic//libsz2-devel-2.1-alt4.x86_64.rpm

rpm -Uvh http://rpms.remirepo.net/enterprise/8/remi/x86_64//libwebsockets-2.4.2-1.el8.remi.x86_64.rpm

rpm -Uvh http://rpms.remirepo.net/enterprise/8/remi/x86_64//libwebsockets-devel-2.4.2-1.el8.remi.x86_64.rpm

首先是必選的一些套件, 這些套件幾乎不會和程式不相容

dnf install -y php74-runtime php74-scldevel php74 php74-build php74-php php74-php-ast php74-php-bcmath php74-php-brotli php74-php-channel-horde php74-php-cli php74-php-common php74-php-componere php74-php-dba php74-php-dbg php74-php-devel php74-php-embedded php74-php-enchant php74-php-fpm php74-php-gd php74-php-geos php74-php-gmp php74-php-horde-horde-lz4 php74-php-imap php74-php-interbase php74-php-intl php74-php-ioncube-loader php74-php-json php74-php-ldap php74-php-libvirt php74-php-libvirt-doc php74-php-litespeed php74-php-lz4 php74-php-mbstring php74-php-mysqlnd php74-php-odbc php74-php-opcache php74-php-pdo php74-php-pdo-dblib php74-php-pear php74-php-pgsql php74-php-phalcon3 php74-php-phpiredis php74-php-pinba php74-php-process php74-php-pspell php74-php-recode php74-php-smbclient php74-php-snappy php74-php-snmp php74-php-snuffleupagus php74-php-soap php74-php-sodium php74-php-tarantool php74-php-tidy php74-php-wkhtmltox php74-php-xml php74-php-xmlrpc php74-php-zephir-parser php74-php-zstd php74-uwsgi-plugin-php php74-zephir php74-zephir-parser php74-php-channel --skip-broken

接下來是一些可選套件, 值得注意的是, 這些可選套件有些可能會和你的程式不相容

dnf install -y php74-php-pecl-amqp php74-php-pecl-apcu php74-php-pecl-apcu-bc php74-php-pecl-apcu-devel php74-php-pecl-apfd php74-php-pecl-apm php74-php-pecl-bitset php74-php-pecl-cassandra php74-php-pecl-cmark php74-php-pecl-couchbase2 php74-php-pecl-crypto php74-php-pecl-dbase php74-php-pecl-dio php74-php-pecl-druid php74-php-pecl-ds php74-php-pecl-eio php74-php-pecl-env php74-php-pecl-ev php74-php-pecl-event php74-php-pecl-fann php74-php-pecl-gearman php74-php-pecl-gender php74-php-pecl-geoip php74-php-pecl-geospatial php74-php-pecl-gnupg php74-php-pecl-grpc php74-php-pecl-handlebars php74-php-pecl-hdr-histogram php74-php-pecl-hprose php74-php-pecl-hrtime php74-php-pecl-http php74-php-pecl-http-devel php74-php-pecl-igbinary php74-php-pecl-igbinary-devel php74-php-pecl-imagick php74-php-pecl-imagick-devel php74-php-pecl-inotify php74-php-pecl-ip2location php74-php-pecl-json-post php74-php-pecl-jsond php74-php-pecl-jsond-devel php74-php-pecl-krb5 php74-php-pecl-krb5-devel php74-php-pecl-leveldb php74-php-pecl-libsodium php74-php-pecl-lua php74-php-pecl-lzf php74-php-pecl-mailparse php74-php-pecl-mcrypt php74-php-pecl-memcache php74-php-pecl-memcached php74-php-pecl-mogilefs php74-php-pecl-mongodb php74-php-pecl-mosquitto php74-php-pecl-msgpack php74-php-pecl-msgpack-devel php74-php-pecl-mustache php74-php-pecl-mysql php74-php-pecl-mysql-xdevapi php74-php-pecl-nsq php74-php-pecl-oauth php74-php-pecl-opencensus php74-php-pecl-parle php74-php-pecl-pcs php74-php-pecl-pcs-devel php74-php-pecl-pdflib php74-php-pecl-pq php74-php-pecl-propro php74-php-pecl-protobuf php74-php-pecl-psr php74-php-pecl-radius php74-php-pecl-raphf php74-php-pecl-rar php74-php-pecl-rdkafka php74-php-pecl-redis4 php74-php-pecl-ref php74-php-pecl-request php74-php-pecl-rpminfo php74-php-pecl-rrd php74-php-pecl-scrypt php74-php-pecl-seaslog php74-php-pecl-selinux php74-php-pecl-solr2 php74-php-pecl-sphinx php74-php-pecl-ssdeep php74-php-pecl-ssh2 php74-php-pecl-stats php74-php-pecl-stomp php74-php-pecl-swoole-serialize php74-php-pecl-swoole4 php74-php-pecl-sync php74-php-pecl-taint php74-php-pecl-tcpwrap php74-php-pecl-termbox php74-php-pecl-timecop php74-php-pecl-trace php74-php-pecl-trader php74-php-pecl-translit php74-php-pecl-uploadprogress php74-php-pecl-uuid php74-php-pecl-uv php74-php-pecl-varnish php74-php-pecl-vips php74-php-pecl-vld php74-php-pecl-weakref php74-php-pecl-xattr php74-php-pecl-xdebug php74-php-pecl-xdiff php74-php-pecl-xlswriter php74-php-pecl-xmldiff php74-php-pecl-xxtea php74-php-pecl-yac php74-php-pecl-yaconf php74-php-pecl-yaf php74-php-pecl-yaml php74-php-pecl-yar php74-php-pecl-yaz php74-php-pecl-zip php74-php-pecl-zmq php74-php-pggi php74-php-pecl-propro-devel php74-php-pecl-psr-devel php74-php-pecl-raphf-devel php74-php-pecl-xmldiff-devel php74-php-pecl-yaconf-devel php74-php-pecl-memprof php74-php-pecl-uopz --skip-broken

比如最後兩個套件 : php74-php-pecl-memprof 和 php74-php-pecl-uopz 就和 WordPress 不相容, 如果你想要安裝 WordPress, 那麼就不能安裝這兩個套件. 另外, 此處我給出偵錯的辦法. 大家如果把上面的可選套件全都安裝了, 但是又找不到哪幾個套件和你的程式不相容, 那麼大家可以通過折半搜尋, 也就是解除安裝一半 (可以是前面一半也可以是後面一半). 如果此時大家發現自己的程式正確運作了, 那麼問題就在移除的那部分套件中. 然後重新安裝上那部分套件, 再解除安裝一半中的一半, 如此循環就可以找到哪個套件和你的程式不相容了

移除的指令為

dnf remove -y 套件名稱

另外, 由於不同的伺服器會有不同的情況, 上述所有套件不一定會全部被安裝, 可能有些套件在你的伺服器上無法找到, 這是正常的. 基本的套件都已經被安裝了, 毫不影響你使用 PHP

如果 PHP 發布更高的版本, 比如 7.5, 7.6 甚至 8.0, 那麼只需要把上述指令以及接下來遇到的指令中全部的 74 改為 75, 76 或者 80 就可以了. 不過可選的套件最好是執行

dnf search php

之後再按照對應的版本選擇相應的套件進行安裝. 因為不同的版本, 套件會有所變化, 相容性也有所變化, 如果不是測試環境, 不建議大家隨意更改版本或者升級

接下來我們需要配置 PHP

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

提前說明 : 按下 "/" 再輸入字元就是 vim 的搜尋, 按下 i 進入編輯模式, 使用鍵盤上的上下左右按鍵進行移動, 按下 esc 按鍵退出編輯模式, 按下 ":" + "w" + "回車" 保存, 按下 ":" + "q" + "回車" 退出

找到 user = apache 修改為

user = nginx

找到 group = apache 修改為

group = nginx

對於 PHP 有了解的人看到 listen = /var/opt/remi/php74/run/php-fpm/www.sock 這行可能有些奇怪, 因為原來我們一直是使用連接埠 9000, 即 127.0.0.1:9000, 現在我們改用 socket 的方式. 這個方式對於小的網站比較友好, 有更好的速度. 大型網站仍然建議使用連接埠的形式

找到 ;listen.owner = nobody, 去掉前面的分號, 然後改為

listen.owner = nginx

找到 ;listen.group = nobody, 去掉前面的分號, 然後改為

listen.group = nginx

找到 ;listen.mode = 0660, 去掉前面的分號

找到 listen.acl_users = apache, 修改為

listen.acl_users = nginx

找到 ;listen.acl_groups =, 去掉前面的分號, 然後在後面添加 nginx

listen.acl_groups = nginx

找到

;env[HOSTNAME] = $HOSTNAME

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

;env[TMP] = /tmp

;env[TMPDIR] = /tmp

;env[TEMP] = /tmp

把前面的分號都去掉, 先按 esc 退出編輯模式, 然後輸入英文狀態的冒號 ":", 輸入 wq! 退出 (這個步驟之後不再重複)

此時, 我們已經完成了 PHP-FPM 的配置, 接下來配置 PHP

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

搜尋 mysqli.default_socket, 在後面添加 /var/lib/mysql/mysql.sock

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

搜尋 date.timezone, 去掉前面的分號, 在後面添加 Asia/Hong_Kong 或者改為你自己的時區. 你可以在 https://www.php.net/manual/en/timezones.php 上找到適合你自己的時區

此篇文章中, 我們不對其它設定進行重新修改, 大家請自行按照自己的需求修改. 此處給出一些可能需要修改的選項, 方便大家搜尋 : max_execution_timepost_max_sizeupload_max_filesize

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

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

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

接著啟動 PHP-FPM

systemctl enable --now php74-php-fpm

最後, 我們測試一下 PHP 是否被正確安裝

mkdir /www && cd /www

vim info.php

i 進入編輯模式, 輸入 (不要忘了分號)

<?php phpinfo();

接著配置 Nginx 展示這個頁面, 此處我直接將網域名稱繫結到這個頁面上. 之後我將不再單獨講解這一部分

cd /etc/nginx/conf.d

vim test.jonny.vip.conf

上面具體的名稱可以改為自己的網域名稱, 比如你的網域為 abc.com, 那就可以改為 abc.com.conf, 最後的 .conf 不能捨去. 按 i 進入編輯模式, 修改下面的配置檔案之後複製進去即可

首先給出沒有開啟 SSL 的配置, 新手請使用這個配置, 不要給自己麻煩, SSL 的配置可以之後慢慢再去學習添加

server {

    listen 80;    #這是你的網頁使用的連接埠, 預設是 80 無需更改

    server_name test.jonny.vip;    #你的網域名稱, 此處一定要更改

    root /www;    #你的網頁檔案

    access_log /var/log/nginx/test.access.log main;

    error_log /var/log/nginx/test.error.log error;

    location / {

        index index.php index.html;

    }

    location ~ \.php$ {

        fastcgi_pass unix:/var/opt/remi/php74/run/php-fpm/www.sock;    #FastCGI 模式, 如果按照本篇文章的配置, 那麼無需更改, 否則需要更改檔案夾或者更改為連接埠模式

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

        fastcgi_send_timeout 36000s;

        fastcgi_read_timeout 36000s;

        fastcgi_buffer_size 1024k;

        fastcgi_buffers 8 1024k;

        fastcgi_busy_buffers_size 2048k;

        fastcgi_temp_file_write_size 2048k;

        fastcgi_intercept_errors on;

        fastcgi_connect_timeout 36000s;

    }

}

接下來給出 SSL 的配置

server {

    listen 80;    #這是你的網頁使用的連接埠, 預設是 80 無需更改

    server_name test.jonny.vip;    #你的網域名稱, 此處一定要更改

    rewrite ^(.*) https://$host$1 permanent;

}

server {

    listen 443 ssl http2;

    server_name test.jonny.vip;    #你的網域名稱, 此處一定要更改

    root /www;    #你的網頁檔案

    access_log /var/log/nginx/test.access.log main;

    error_log /var/log/nginx/test.error.log error;

    ssl_certificate /var/crt/test.jonny.vip.crt;    #SSL 證書存放位置, 此處一定要更改

    ssl_certificate_key /var/crt/test.jonny.vip.key;    #SSL 證書存放位置, 此處一定要更改

    ssl_session_timeout 5m;

    ssl_protocols TLSv1.1 TLSv1.2;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

    ssl_prefer_server_ciphers on;

    add_header X-Content-Type-Options nosniff;

    add_header X-XSS-Protection "1; mode=block";

    add_header X-Robots-Tag all;

    add_header X-Download-Options noopen;

    add_header X-Permitted-Cross-Domain-Policies none;

    add_header Referrer-Policy no-referrer;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    client_max_body_size 0;

    proxy_connect_timeout 36000s;

    proxy_read_timeout 36000s;

    proxy_request_buffering off;

    send_timeout 600;

    location / {

        index index.php index.html index.htm;

    }

    location ~ \.php$ {

        fastcgi_pass unix:/var/opt/remi/php74/run/php-fpm/www.sock;    #FastCGI 模式, 如果按照本篇文章的配置, 那麼無需更改, 否則需要更改檔案夾或者更改為連接埠模式

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

        fastcgi_send_timeout 36000s;

        fastcgi_read_timeout 36000s;

        fastcgi_buffer_size 1024k;

        fastcgi_buffers 8 1024k;

        fastcgi_busy_buffers_size 2048k;

        fastcgi_temp_file_write_size 2048k;

        fastcgi_intercept_errors on;

        fastcgi_connect_timeout 36000s;

    }

}

具體開啟 HTTPS 的學習請看這篇文章《Nginx 下实现 HTTPS》

使用 nginx -t 指令測試配置檔案是否有錯誤, 如果出現以下情形

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

則說明配置檔案沒有問題, 接下來重新載入 Nginx

systemctl reload nginx

最後進入瀏覽器訪問 http://你的網域名稱/info.php, 如果看到如下頁面, 就說明配置成功

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

4. phpMyAdmin

首先進入我們剛剛建立的檔案夾 /www

cd /www

然後進入網頁

https://www.phpmyadmin.net

查找最新版本的 phpMyAdmin, 截止發文為止最新的下載地址是

https://files.phpmyadmin.net/phpMyAdmin/5.0.0/phpMyAdmin-5.0.0-all-languages.zip

執行指令

wget https://files.phpmyadmin.net/phpMyAdmin/5.0.0/phpMyAdmin-5.0.0-all-languages.zip

下載完成之後解除封存

unzip phpMyAdmin-5.0.0-all-languages.zip

重新命名

mv phpMyAdmin-5.0.0-all-languages phpMyAdmin

進入檔案夾

cd phpMyAdmin

建立上載和存儲的檔案夾

mkdir save

mkdir upload

建立配置檔案

cp config.sample.inc.php config.inc.php

將檔案夾的權限授權給 nginx 帳戶

chown -R nginx:nginx /www/phpMyAdmin

然後配置 phpMyAdmin

vim config.inc.php

i 進入編輯模式, 找到 $cfg['blowfish_secret'], 在後面的單引號中添加一個至少長達 32 字元的字串, 這個字串需要隨機, 你可以使用網上的字元亂數產生來產生一個幾乎不會被猜中的字串, 比如我的是

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

不要與我的相同!

接著找到 $cfg['UploadDir'] 在單引號中添加 upload, 找到 $cfg['SaveDir'] 在單引號中添加 save

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

phpMyAdmin 就配置完成了,由於我們直接配置在 /www 檔案夾下, 所以在剛才的網域名稱後面加上 /phpMyAdmin 就可以訪問 phpMyAdmin 了

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

對於老手來說, 可能會對 phpMyAdmin 配置 SSL 以及獨立的網域名稱, 這一步新手可以自己嘗試, 所有的步驟在上面已經給出來了, 依樣畫葫蘆就可以了

使用者名稱是 root, 密碼是你剛才配置的 MySQL 密碼. 登陸之後就有以下的頁面

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

我們看到最後有一個警告, 我們點擊 "了解原因"

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

然後點擊 "建立" 即可

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

如果出現以下錯誤

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

解決的方法很簡單, 建立一個 tmp 的檔案夾然後把權限給 nginx 即可

cd /www/phpMyAdmin

mkdir tmp

chown -R nginx:nginx tmp

刷新之後就看不到這個錯誤了

phpMyAdmin 到此就配置完成了

5. vsFTPd

首先安裝 vsFTPd

dnf install -y vsftpd

建立一個 FTP 用戶

useradd FTP

給 FTP 用戶添加一個密碼, 這個用戶名你可以用你自己喜歡的

passwd FTP

接下來輸入兩次密碼即可

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

如果你希望這個用戶只能登陸 FTP, 那麼需要禁止其通過終端機的方式登陸, 執行以下指令

usermod -s /sbin/nologin FTP

vim /etc/shells

移動到最後添加一行

/sbin/nologin

讓 vsFTPd 自動執行並且啟用它

systemctl enable --now vsftpd

如果你開啟了 FireWall, 那麼需要執行以下指令

firewall-cmd --permanent --add-port=21/tcp

firewall-cmd --permanent --add-service=ftp

firewall-cmd --reload

如果你的伺服器使用的是自建的安全模組, 那麼需要添加連接埠 21 讓外部可以訪問, 模式為 TCP

接著, 我們使用 FileZilla 進行連線

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog 在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

如果無法連結, 一般是模式問題, 切換到傳輸設定選擇一個進行測試就行了

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

如果一個不行就選擇另外一個

接著我們為其開啟 SSL 連線

執行指令 (老手可以個性化指令)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.pem

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

首先輸入國家的縮寫 (兩個字元)

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

輸入省份或著洲的名稱

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

輸入城市的名稱

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

輸入公司的名稱

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

輸入組織的名稱

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

填寫網域名稱

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

填寫你的 E-Mail 地址. 值得注意的是, 這份證書僅有 365 天的有效期, 365 天之後要刪除舊的證書, 然後重新執行上述步驟

全部輸入完畢之後, 編輯配置檔案

vim /etc/vsftpd/vsftpd.conf

移到最後添加

#SSL

ssl_enable=YES

allow_anon_ssl=NO

force_local_data_ssl=YES

force_local_logins_ssl=YES

ssl_tlsv1=YES

ssl_sslv2=NO

ssl_sslv3=NO

rsa_cert_file=/etc/vsftpd/vsftpd.pem    #證書 .pem 檔案地址, 老手可以根據自己的需要修改

rsa_private_key_file=/etc/vsftpd/vsftpd.key    #證書 .key 檔案地址, 老手可以根據自己的需要修改

pasv_min_port=59000    #連接埠起始, 這個可以根據你自己的需要修改

pasv_max_port=59010    #連接埠結束, 這個可以根據你自己的需要修改

除此之外, 還要關閉連接埠的 FireWall 保護 (自建安全模組的伺服器要開啟這些連接埠, 模式為 TCP)

firewall-cmd --zone=public --permanent --add-port=59000-59010/tcp

firewall-cmd --reload

因為剛才已經啟動了 vsFTPd, 而我們修改了配置, 因此要重新執行它

systemctl restart vsftpd

FileZilla 有兩種方式可以進行 SSL 連線

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog 在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

這是第一種, 比較推薦使用這一種

在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog 在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd-Jonny'Blog

這是第二種. 中間如果遇到要求確認證書, 那麼直接點擊確認即可

大家會發現現在連線進入 FTP 可以隨意訪問任意檔案夾, 如果要把 FTP 帳戶限定在某一個檔案夾, 可以編輯 chroot_list 檔案

vim /etc/vsftpd/chroot_list

i 進入編輯模式, 然後添加對應的帳戶名稱就可以了

接著要修改配置文件

vim /etc/vsftpd/vsftpd.conf

找到 chroot_list_enable=NO 修改為

chroot_list_enable=YES

找到 chroot_list_file, 如果檔案的位置不對, 那麼修改為

chroot_list_file=/etc/vsftpd/chroot_list

如果前面有 "#", 那麼要去掉

修改之後, 要記得重新啟動 vsFTPd

systemctl restart vsftpd

如果要修改登陸的預設檔案夾, 那麼輸入指令

usermod -m -d 檔案夾位置 帳戶名稱

修改之後, 要授權這個帳戶這個檔案夾的全部權限, 否則就發生無法上載、修改或著刪除的問題

chown -R 帳戶名稱 檔案夾位置

至此, 這篇教學就完成了