WSL2子系統安裝CentOS8及源碼編譯安裝Nginx1.18+PHP7.4+MySql8.0開發


原文鏈接:https://blog.51cto.com/u_15057852/2567230

 

感謝作者提供教程,轉載只是方便自己以后查看

感謝作者提供教程,轉載只是方便自己以后查看

感謝作者提供教程,轉載只是方便自己以后查看

 

 

一、WSL2 安裝 CentOS8
在前面的文章中介紹了 WSL(Windows Subsystem for Linux) 、在 Win10 中的安裝與配置 WSL2。

WSL2——在Windows10中安裝與配置第二代適用於Linux的Windows子系統

 

如文中所示,首先安裝配置完成 WSL2,然后 Ubuntu20 等 Linux 發行版在 Windows 應用商店(store)中直接點擊安裝即可。本人為了和線上服務器環境保持一致,想安裝 CentOS8,但是 Windows 應用商店中卻沒有包含 CentOS。那么在安裝好 WSL 之后,如何不通過 store 而手動安裝適配 WSL 的 Linux 發行版呢?

1、安裝 Chocolatey

NuGet(讀作New Get)是用於微軟.NET開發平台的軟件包管理器,是一個Visual Studio的擴展。Chocolatey 是基於 NuGet 的一個軟件包管理器,就像 Linux 中的 yum 或 apt 一樣,在 Windows10 中也可以用命令行安裝程序了。

右鍵單擊開始菜單,選擇 Windows PowerShell(管理員),打開一個具有管理員權限的 PowerShell 窗口,輸入命令並回車:

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
完成后,輸入命令:choco ,如果能正確顯示版本號,說明安裝成功。

官網文檔:https://chocolatey.org/docs/installation

2、安裝 LxRunOffline

LxRunOffline 是非常實用的 WSL 管理軟件,可以備份、創建、恢復、導出WSL子系統,也可以安裝適配 WSL 的任何 Linux 發行版,可以將 WSL 子系統安裝到任意目錄中。

PowerShell 窗口中輸入命令安裝LxRunOffline,安裝完成后重啟 PowerShell。

choco install lxrunoffline -y


3、下載 CentOS 鏡像

GitHub 上有開源的適用於 WSL 的 CentOS 系統安裝鏡像,打開項目頁面,選擇 CentOS8 分支,進入 docker 目錄,下載文件 centos-8-x86_64.tar.xz ,假如下載后保存在 D 盤下。

https://github.com/CentOS/sig-cloud-instance-images/tree/CentOS-8-x86_64/dockergithub.com

4、安裝 CentOS 鏡像

安裝WSL子系統的命令行格式為:

LxRunOffline install -n 自定義系統名稱 -d 安裝目錄路徑 -f 安裝包路徑.tar.xz
重新啟動 PowerShell,輸入命令安裝 CentOS 鏡像:

LxRunOffline install -n centos -d C:/centos -f D:\centos-8-x86_64.tar.xz
表示將 CentOS 系統安裝到 C 盤的 centos 文件夾下,並且命名為 centos。注意:Windows 系統命令行中的文件路徑和 Linux 系統不同,這里安裝目錄 C:/ 要用 Linux 方式的反斜線表示,是為了 WSL 使用;而安裝包路徑 D:\ 是為了 LxRunOffline 使用,是 Windows 下的路徑。


查看所有已安裝鏡像,能夠顯示已安裝的 centos ,表示安裝成功。

LxRunOffline.exe list
如果安裝失敗也會出現 centos 目錄,安裝失敗重新安裝時需要卸載鏡像,另外安裝目錄在 C 盤在卸載時可能存在權限問題,卸載后如果目錄沒有刪除可以手動刪除目錄。

卸載 WSL 系統鏡像命令:

LxRunOffline.exe uninstall -n centos

5、升級為 WSL2

輸入命令並回車,列出已經安裝的 WSL 的信息

 

wsl -l -v

將對應的 WSL 發行版設為 WSL2,命令格式:

 

wsl --set-version <Distro> 2

其中<Distro>要和上面查詢到的信息一致,本例中為 centos,輸入以下命令並回車:

wsl --set-version centos 2

輸入以下命令並回車,設置默認使用的發行版:

wsl -d centos

此時,再次使用命令 wsl -l -v 查看,可以看到 centos 的 VERSION 已經變為 2,並且名稱前加了*號(即默認的WSL系統)。


6、WSL 子系統的啟動與關閉

此時,輸入命令 wsl -d centos 即可啟動。

停止WSL子系統命令:wsl --shutdown -n 系統名稱,如果直接輸入 wsl --shutdown ,會停止所有已啟動的 WSL 子系統。

在管理員權限的 PoweShell 中輸入命令:net stop LxssManager ,也可以停止 WSL 子系統。

7、使用 Windows Terminal

當然,為了更好的配合 WSL ,一定要安裝 Windows Terminal。

有了 Terminal ,可以直接打開所有已安裝的 WSL 發行版:

Terminal 的配色方案,可以參考:https://iterm2colorschemes.com/

8、目錄設置

WSL2 系統中可以直接訪問 windows 磁盤文件,因此為了不增加 WSL系統 VHD 虛擬磁盤空間,我個人打算將一些安裝軟件包放在 F:\wsl 目錄下,將網站web程序放在 E:\wwwroot 目錄中。而在 wsl 系統中的訪問路徑分別是 /mnt/f/wsl 和 /mnt/e/wwwroot ,當然 WSL 這樣直接訪問 windows 磁盤會有很大的性能問題。后續使用中如果性能的降低超過了可忍受的程度,再考慮將這兩個目錄移動到 wsl 的虛擬磁盤。

打開 Windows 安全中心,病毒和威脅防護設置,管理設置,添加或刪除排除項,添加排除項,將上述兩個目錄排除,這樣會減少 windows 的系統性能占用。

二、centos8 基本配置
1、查看 centos 版本

uname -a

cat /proc/version

cat /etc/redhat-release


2、安裝 wget vim 等工具

cd ~ #轉到用戶目錄

dnf -y install vim wget

dnf -y install net-tools #啟用 ifconfig,netstat 等網絡 命令

3、更換國內源

(1) 備份原始的yum源

cd /etc/yum.repos.d

mv CentOS-Base.repo CentOS-Base.repo.bak

mv CentOS-extras.repo CentOS-extras.repo.bak

mv CentOS-centosplus.repo CentOS-centosplus.repo.bak

mv CentOS-PowerTools.repo CentOS-PowerTools.repo.bak

mv CentOS-AppStream.repo CentOS-AppStream.repo.bak

(2) 下載對應版本的repo文件

# wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

vim CentOS-Base.repo

可以看到 aliyun 的源包含的以下各項:[base] [extras] [centosplus] [PowerTools] [AppStream] ,因此前面對這些源都做了備份。

(3) 清除舊的緩存並生成新的緩存

 

# dnf clean all# dnf makecache

三、源碼編譯安裝 Nginx
1、安裝編譯工具及庫文件:

如果缺少某個庫文件,在編譯時會給出錯誤提示,可按提示安裝缺失的庫文件,然后重新進行編譯。

dnf -y install make gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

gcc 是是GNU開發的C,C++和Java等多種語言的編譯器。

pcre pcre-devel 是一個 perl 庫,包括 perl 兼容的正則表達式庫,Nginx 的 Rewrite 模塊和HTTP 核心模塊會使用到 PCRE 來解析正則表達式語法。

zlib zlib-devel 庫提供了很多種壓縮和解壓縮方式,Nginx 啟用壓縮功能后,將使用 zlib 對 http 包的內容進行 gzip 壓縮。

openssl openssl-devel 是實現了SSL協議的開源項目,可以實現秘鑰證書管理、對稱加密和非對稱加密 。用 SSL 加密的安全數據傳輸通道,保證客戶端和服務器之間數據的安全。簡單的說就是瀏覽器以 https 開頭的網址訪問網站,瀏覽器和服務器之間數據加密傳輸。當 Nginx 開啟SSL功能后需要此模塊的支持。

2、下載並解壓:

打開官網 nginx: download,可以看到當前最新版本是 nginx-1.19.1 ,下載 nginx-1.19.1.tar.gz 文件並解壓。

cd /mnt/f/wsl #此目錄是我個人存放各種安裝包的目錄,也就是 win10 的 F 盤 wsl 目錄。

wget http://nginx.org/download/nginx-1.19.1.tar.gz

tar -zxvf nginx-1.19.1.tar.gz

3、開始編譯

cd nginx-1.19.1

./configure

檢查系統環境是否符合編譯安裝的要求,比如是否有gcc編譯工具,是否支持編譯參數當中的模塊,並根據開啟的參數等生成Makefile文件為下一步做准備。

make && make install

生成腳本及配置文件,根據Makefile文件生成相應的模塊,安裝,創建目錄,並將生成的模塊和文件復制到相應的目錄。

4、等待安裝完成

如果沒有錯誤提示,默認安裝目錄是:/usr/local/nginx,現在可以查看版本,能正確顯示版本,說明安裝完成。

 

/usr/local/nginx/sbin/nginx -V

5、添加軟鏈接

由於 WSL 不能使用 systemd ,使用 service 時會出現錯誤提示,這里不注冊為 service ,而是使用軟鏈接的方式省略執行 nginx 命令的路徑前綴。

 

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

nginx #啟動服務

nginx -s reload #不停止服務重新載入配置文件

nginx -s stop #停止服務

6、配置

創建 Nginx 運行用戶及用戶組 www ,先停止服務再編輯 nginx.conf 文件

 

groupadd www

useradd -g www www

mkdir -p /data/wwwlogschown -R www:www /data/wwwlogs

 

nginx -s stop #停止服務

vim /usr/local/nginx/conf/nginx.conf

參考了集成環境 OneinStack 中的配置。默認 user 為 nobody ,修改為 www 。將網站放在 /mnt/e/wwwroot 路徑中,即 Win10 本地 E 盤 wwwroot 目錄。

fastcgi_pass unix:/dev/shm/php-cgi.sock; 表示 Nginx 和 PHP-FPM 的進程間采用UNIX Domain Socket 方式通信,因此在 PHP-FPM 的配置文件中也要做相應的配置。

最后自動加載 vhost 目錄中的配置文件,完整內容如下:

user www www;worker_processes auto;

error_log /data/wwwlogs/error_nginx.log crit;pid /var/run/nginx.pid;worker_rlimit_nofile 51200;

events {use epoll;worker_connections 51200;multi_accept on;

}

http {include mime.types;default_type application/octet-stream;server_names_hash_bucket_size 128;client_header_buffer_size 32k;large_client_header_buffers 4 32k;client_max_body_size 1024m;client_body_buffer_size 10m;sendfile on;tcp_nopush on;keepalive_timeout 120;server_tokens off;tcp_nodelay on;

fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 128k;fastcgi_intercept_errors on;

#Gzip Compressiongzip on;gzip_buffers 16 8k;gzip_comp_level 6;gzip_http_version 1.1;gzip_min_length 256;gzip_proxied any;gzip_vary on;gzip_types

  text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml

  text/javascript application/javascript application/x-javascript

  text/x-json application/json application/x-web-app-manifest+json

  text/css text/plain text/x-component

  font/opentype application/x-font-ttf application/vnd.ms-fontobject

  image/x-icon;gzip_disable "MSIE [1-6]\.(?!.*SV1)";

######################## default ############################server {

  listen 80;

  server_name _;

  access_log /data/wwwlogs/access_nginx.log combined;

  root /mnt/e/wwwroot/default;

  index index.html index.htm index.php;

  #error_page 404 /404.html;

  #error_page 502 /502.html;

  #location /nginx_status {

    # stub_status on;

    # access_log off;

    # allow 127.0.0.1;

    # deny all;

  #}

  location ~ [^/]\.php(/|$) {

    #fastcgi_pass 127.0.0.1:9000;

    fastcgi_pass unix:/dev/shm/php-cgi.sock;

    fastcgi_index index.php;

    include fastcgi.conf;

  }

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {

    expires 30d;

    access_log off;

  }

  location ~ .*\.(js|css)?$ {

    expires 7d;

    access_log off;

  }

  location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) {

    deny all;

  }

}########################## vhost #############################include vhost/*.conf;

}

錯誤提示:

 

unknown directive "stub_status" in /usr/local/nginx/conf/nginx.conf:64

stub_status模塊主要用於查看Nginx的一些狀態信息,默認不會編譯進Nginx,在配置文件中就不能有stub_status 相關配置信息。

7、測試

啟動命令:nginx ,沒有出現任何提示。

查看端口服務是否開啟

netstat -lnt|grep 80

打開瀏覽器

 

輸入 http://localhost 或者 http://127.0.0.1,然后回車

如果出現 Welcome to nginx! 頁面,說明 WSL 及 Nginx 服務器運行正常。

四、源碼安裝 MySql8.0
1、下載 MySql8.0

打開mysql官網,社區版下載頁,當前最新版本是 8.0.21,操作系統選擇 Linux-Generic ,這里根據自己的系統選擇下載文件:mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz,即 x86 架構 64位版本。

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

點擊 Download 后,轉到文件鏈接頁,在 No thanks,just start my download. 上右鍵,選擇復制鏈接,在 Centos 中下載鏈接文件:

cd /mnt/f/wsl #此目錄是我個人存放各種安裝包的目錄,也就是 win10 的 F 盤 wsl 目錄。
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz


2、解壓並配置相關目錄與權限

解壓之后,將解壓出的目錄移動到 /usr/local/ 下並改名為 mysql,切換到 /usr/local/mysql 目錄,創建 data 目錄,再在根目錄下創建 /data/mysql 目錄。目錄路徑可以按自己的需要創建。

 

tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz

 

mv mysql-8.0.21-linux-glibc2.12-x86_64 /usr/local/mysql

 

cd /usr/local/mysql

mkdir datamkdir -p /data/mysql

創建用戶組 mysql ,給用戶組添加用戶 mysql,並給相應的目錄權限。

 

groupadd mysql

useradd -g mysql mysql

chown -R mysql:mysql /usr/local/mysql/chown -R mysql:mysql /data/mysql

3、初始化 MySql

添加需要的庫文件

dnf install libaio numactl initscripts -y

初始化,參數要和前面創建的用戶及目錄對應。

bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

執行結束會生成數據庫root用戶密碼,做好記錄。( A temporary password is generated for root@localhost: Zlg+oqdhy9i=)

如果執行失敗,需要刪除 data 和 tmp 目錄下所有內容,根據錯誤提示,檢查配置后重新執行初始化。

4、創建並配置 my.cnf 文件

touch /etc/my.cnf

vim /etc/my.cnf

my.cnf 參考了集成環境 OneinStack 中的配置,內容如下。同樣,my.cnf 配置文件中的目錄路徑也要和前面mysql初始化時的一致。

 

[client]

port = 3306

socket = /tmp/mysql.sock

default-character-set = utf8mb4

 

[mysql]

prompt="MySQL [\d]> "

no-auto-rehash

 

[mysqld]

port = 3306

socket = /tmp/mysql.sock

default_authentication_plugin = mysql_native_password

 

basedir = /usr/local/mysql

datadir = /usr/local/mysql/data

pid-file = /data/mysql/mysql.pid

user = mysql

bind-address = 0.0.0.0

server-id = 1

 

init-connect = 'SET NAMES utf8mb4'

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

 

skip-name-resolve#skip-networking

back_log = 300

 

max_connections = 1259

max_connect_errors = 6000

open_files_limit = 65535

table_open_cache = 1024

max_allowed_packet = 500M

binlog_cache_size = 1M

max_heap_table_size = 8M

tmp_table_size = 128M

 

read_buffer_size = 2M

read_rnd_buffer_size = 8M

sort_buffer_size = 8M

join_buffer_size = 8M

key_buffer_size = 256M

 

thread_cache_size = 64

 

ft_min_word_len = 4

 

log_bin = mysql-bin

binlog_format = mixed

binlog_expire_logs_seconds = 604800

 

log_error = /data/mysql/mysql-error.log

slow_query_log = 1

long_query_time = 1

slow_query_log_file = /data/mysql/mysql-slow.log

 

performance_schema = 0

explicit_defaults_for_timestamp

#lower_case_table_names = 1

 

skip-external-locking

 

default_storage_engine = InnoDB#default-storage-engine = MyISAM

innodb_file_per_table = 1

innodb_open_files = 500

innodb_buffer_pool_size = 1024M

innodb_write_io_threads = 4

innodb_read_io_threads = 4

innodb_thread_concurrency = 0

innodb_purge_threads = 1

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 2M

innodb_log_file_size = 32M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

 

bulk_insert_buffer_size = 8M

myisam_sort_buffer_size = 64M

myisam_max_sort_file_size = 10G

myisam_repair_threads = 1

 

interactive_timeout = 28800

wait_timeout = 28800

 

[mysqldump]

quick

max_allowed_packet = 500M

 

[myisamchk]

key_buffer_size = 256M

sort_buffer_size = 8M

read_buffer = 4M

write_buffer = 4M

5、啟動 MySql

 

/usr/local/mysql/support-files/mysql.server start

只創建軟鏈接,不配置環境變量。因為使用 mysql 命令登錄數據庫,或使用 mysqldump 命令備份數據庫,都不常用,要用的時候直接使用絕對路徑。

 

ln -s /usr/local/mysql/support-files/mysql.server /usr/bin/mysqld

mysqld start #啟動mysql

mysqld stop #停止mysql

netstat -lnt #查看已開放的端口

查看所有可用的命令參數

 

mysqld --helpUsage: mysqld {start|stop|restart|reload|force-reload|status} [ MySQL server options ]

6、修改密碼

 

/usr/local/mysql/bin/mysql -uroot -p#輸入初始化時記錄的密碼

#登錄后在命令提示符 MySQL [(none)]> 后,輸入如下語句並回車#(MySql語句要以;結束,password 修改成自己的新密碼)

 

alter user 'root'@'localhost' identified by 'password';exit #退出


7、安裝過程中的報錯及處理方法

 

/etc/redhat-lsb/lsb_log_message: line 3: /etc/init.d/functions: No such file or directory

解決方法是安裝initscripts:dnf -y install initscripts

報錯:

mysqld_safe error: log-error set to '/data/mysql/mysql-error.log', however file don't exists. Create writable for user 'mysql'.

解決方法是:創建此文件並給予 mysql 組和用戶權限

echo "" > /data/mysql/mysql-error.log

chown -R mysql:mysql /data/mysql/mysql-error.log

如下報錯也可以嘗試用此方法解決

 

The server quit without updating PID file (/data/mysql/mysql.pid)

五、源碼編譯安裝 php7.4
1、下載

打開PHP官網,看到當前最新版本是 7.4.9,由於官網國內下載很慢,找到一個souhu 的庫,下載源碼文件。Index of /php/

cd /mnt/f/wsl #此目錄是我個人存放各種安裝包的目錄,也就是 win10 的 F 盤 wsl 目錄。

wget http://mirrors.sohu.com/php/php-7.4.9.tar.xz

2、安裝編譯工具和庫

dnf -y install make gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

在安裝 Nginx 時就已經安裝過編譯工具和庫,在檢查配置編譯參數時,提示缺少哪個就安裝哪個庫。

3、創建用戶組和用戶

如果在安裝 Nginx 時已經創建過,就不用再重復創建了。

groupadd www

useradd -g www www

4、配置編譯

解壓縮,移動到 /usr/local/ 目錄並重命名為 php,切換到 /usr/local/php 目錄。

 

tar -xvf php-7.4.9.tar.xz

mv php-7.4.9 /usr/local/php

查看已安裝的 php 編譯參數命令是:

php -i|grep configure

以下編譯參數來源於 oneinstack 集成包,復制以下所有內容到 CentOS 命令行窗口,回車,開始檢查配置。

 

./configure --prefix=/usr/local/php \--with-config-file-path=/usr/local/php/etc \--with-config-file-scan-dir=/usr/local/php/etc/php.d \--with-fpm-user=www \--with-fpm-group=www \--enable-fpm \--enable-opcache \--disable-fileinfo \--enable-mysqlnd \--with-mysqli=mysqlnd \--with-pdo-mysql=mysqlnd \--with-iconv-dir=/usr/local/libiconv \--with-freetype \--with-jpeg \--with-zlib \--enable-xml \--disable-rpath \--enable-bcmath \--enable-shmop \--enable-exif \--enable-sysvsem \--enable-inline-optimization \--with-curl=/usr/local/curl \--enable-mbregex \--enable-mbstring \--with-password-argon2 \--with-sodium=/usr/local \--enable-gd \--with-openssl=/usr/local/openssl \--with-mhash \--enable-pcntl \--enable-sockets \--with-xmlrpc \--enable-ftp \--enable-intl \--with-xsl \--with-gettext \--with-zip=/usr/local \--enable-soap \--disable-debug \

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:

一遍遍執行上述檢查配置,根據報錯 error 或類似 not found 類,解決錯誤。直到出現如下所示:Thank you for using PHP

5、安裝完成

make && make install


6、報錯及解決

  • 報錯

configure: error: C++ preprocessor "/lib/cpp" fails sanity check

 

解決方法:

dnf -y install glibc-headers gcc-c++

* 報錯:

Package 'libxml-2.0', required by 'virtual:world', not found
Package 'sqlite3', required by 'virtual:world', not found
Package 'libcurl', required by 'virtual:world', not found
Package 'libpng', required by 'virtual:world', not found
Package 'libjpeg', required by 'virtual:world', not found
Package 'freetype', required by 'virtual:world', not found
Package 'icu-uc', required by 'virtual:world', not found
Package 'libsodium', required by 'virtual:world', not found

 

解決方法:

dnf -y install libxml2-devel sqlite-devel libcurl-devel libpng-devel libjpeg-devel freetype-devel libicu-devel

* 報錯:

Package 'oniguruma', required by 'virtual:world', not found

 

oniguruma是一個處理正則表達式的庫

 

解決方法:

wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz
tar -zxvf oniguruma-6.9.4.tar.gz
cd oniguruma-6.9.4/
./autogen.sh && ./configure --prefix=/usr

 

報錯

Generating autotools files.
./autogen.sh: line 6: autoreconf: command not found

 

解決方法:

dnf -y install autoconf automake libtool

 

再次檢查配置,沒有問題了,再生成腳本及配置文件,安裝。

./autogen.sh && ./configure --prefix=/usr
make && make install

* 報錯:

configure: error: Package requirements (libsodium >= 1.0.8) were not met:
Package 'libsodium', required by 'virtual:world', not found

 

解決方法:

 

Sodium 是一個全新而且易用的加密庫,用於加密、解密、簽名和生成密碼哈希等等。

wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable.tar.gz
tar -zxf libsodium-1.0.18-stable.tar.gz
cd libsodium-stable
./configure --prefix=/usr
make && make install
ldconfig

 

* 報錯:

 

checking for Argon2 library... not foundconfigure: error: Please ensure the argon2 header and library are installed

解決方法:

 

打開 https://pkgs.org/ ,查找 libargon2 ,找到 centos8 的rpm包,下載安裝。

wget https://download-ib01.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/l/libargon2-20171227-3.el8.x86_64.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/l/libargon2-devel-20171227-3.el8.x86_64.rpm
rpm -Uvh libargon2-20171227-3.el8.x86_64.rpm
rpm -Uvh libargon2-devel-20171227-3.el8.x86_64.rpm
dnf -y install libargon2 libargon2-devel

* **報錯:**

configure: error: Package requirements (libxslt >= 1.1.0) were not met:
Package 'libxslt', required by 'virtual:world', not found

 

解決方法:

dnf -y install libxslt libxslt-devel

* **報錯:**

Failed to set locale, defaulting to C.UTF-8
error: rpmdb: BDB2034 unable to allocate memory for mutex; resize mutex region
error: cannot open Packages index using db5 - Cannot allocate memory (12)
error: cannot open Packages database in /var/lib/rpm
Error: Error: rpmdb open failed

 

解決方法:

 

一般是由於rpm本地數據庫損壞導致的。

cd /var/lib/rpm # rpm db所在目錄
ls | grep 'db.' # 列出相關rpm db文件
rm -f __db.* # 清除原rpmdb文件
rpm --rebuilddb # 重建rpm數據庫
yum clean all
dnf makecache

* **報錯:**

Package 'libzip', required by 'virtual:world', not found

 

解決方法:

 

打開 https://pkgs.org/ ,查找 libzip 及 libzip-devel,找到 centos8 的rpm包,下載安裝。

wget http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/libzip-1.5.2-1.module_el8.2.0+314+53b99e08.x86_64.rpm
wget http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/libzip-devel-1.5.2-1.module_el8.2.0+314+53b99e08.x86_64.rpm
rpm -Uvh libzip-1.5.2-1.module_el8.2.0+314+53b99e08.x86_64.rpm
rpm -Uvh libzip-devel-1.5.2-1.module_el8.2.0+314+53b99e08.x86_64.rpm
dnf -y install libzip libzip-devel

**7、配置**

 

生成 php 配置文件

cp php.ini-production /usr/local/php/etc/php.ini

 

在編譯時啟用了參數:--enable-opcache ,查找 opcache.so模塊文件所在路徑。

find /usr -name opcache.so

###輸出###
/usr/local/php/ext/opcache/.libs/opcache.so
/usr/local/php/lib/php/extensions/debug-non-zts-20190902/opcache.so
/usr/local/php/modules/opcache.so

 

編輯 php.ini 文件,在末尾添加如下內容,開啟 OPcache 擴展

[opcache]
zend_extension=/usr/local/php/modules/opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.file_cache=/tmp/opcache

 

生成 php-fpm 配置文件並編輯。

cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf

 

這里還是參考 OneInStack 集成環境包中的配置,清空 php-fpm.conf 內容,修改如下:

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = warning

emergency_restart_threshold = 30
emergency_restart_interval = 60s
process_control_timeout = 5s
daemonize = yes

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;

[www]
listen = /dev/shm/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www

pm = dynamic
pm.max_children = 50
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 50
pm.max_requests = 2048
pm.process_idle_timeout = 10s
request_terminate_timeout = 120
request_slowlog_timeout = 0

pm.status_path = /php-fpm_status
slowlog = var/log/slow.log
rlimit_files = 51200
rlimit_core = 0

catch_workers_output = yes
;env[HOSTNAME] = aliyun-wxy
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

 

本配置文件指定了 PHP-FPM 進程通信方式:listen = /dev/shm/php-cgi.sock,和 Nginx 的配置保持了一致。

 

生成 php-fpm 服務啟動文件:(新的文件名不能有 - 字符)

cp /usr/local/php/sapi/fpm/init.d.php-fpm /usr/bin/phpfpm
chmod 740 /usr/bin/phpfpm

 

測試啟動php-fpm

phpfpm start
phpfpm restart
phpfpm stop

 

查看 php 已啟用的模塊:

php -m

 

查看 php 版本

/usr/local/php/bin/php -v
php -v

 

**8、安裝配置 Xdebug**

 

OPcache 擴展是 PHP7.X 自帶的,只要在編譯時開啟,就可以配置使用。而 Xdebug 需要另外安裝。參考官網:https://xdebug.org/docs/install

yum install -y git
git clone git://github.com/xdebug/xdebug.git
cd xdebug
phpize
./configure --enable-xdebug
make && make install

![](https://s4.51cto.com/images/blog/202012/18/5cdc680182b5c37176dae3034fa8af1f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

Xdebug編譯完成后顯示擴展文件目錄、提示將擴展添加到 php.ini文件

 

編輯 php.ini ,在末尾增加 xdebug.so擴展。

vim /usr/local/php/etc/php.ini

####增加xdebug.so擴展###
zend_extension="/usr/local/php/lib/php/extensions/debug-non-zts-20190902/xdebug.so"

 

重啟 php-fpm ,檢查 php 擴展

/usr/bin/php-fpm restart
php -m

**六、LNMP 環境測試****1、Nginx 和 PHP-FPM 的配合**

 

Nginx 和 PHP-FPM 的進程間通信有兩種方式,一種是TCP,另一種是 UNIX Domain Socket。

 

其中 TCP 方式是 IP 加端口,可以跨服務器。而 UNIX Domain Socket 不經過網絡,只能用於Nginx 跟 PHP-FPM 都在同一服務器的場景。不管用哪種方式在 Nginx 和 PHP-FPM 配置時要統一。

 

方式1: TCP

php-fpm.conf 文件配置: listen = 127.0.0.1:9000
nginx.conf 文件配置: fastcgi_pass 127.0.0.1:9000;

方式2: UNIX Domain Socket

php-fpm.conf 文件配置: listen = /tmp/php-fpm.sock
nginx.conf 文件配置: fastcgi_pass unix:/tmp/php-fpm.sock;

 

其中 php-fpm.sock 是一個文件,由 php-fpm 生成,如果在 php-fpm.conf 配置文件中指定的用戶和組是 www ,確保 /tmp/php-fpm.sock 的權限是 www:www。

**2、測試 phpinfo 文件**

 

在瀏覽器中打開內容為 phpinfo() 函數的 PHP 文件,如果 nginx 出現錯誤,則說明 php 無法配合 Nginx 運行, 請查看 nginx 錯誤日志。

vim /data/wwwlogs/error_nginx.log

![](https://s4.51cto.com/images/blog/202012/18/6fadc168ef17a0b380ad592de6b67428.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 

phpinfo 顯示了編譯參數、 php.ini 的文件位置、已開啟OPcache 及 Xdebug 擴展等信息

 

**3phpMyAdmin**

 

下載 phpMyAdmin 並解壓到 /mnt/e/wwwroot/default 目錄,即 Nginx 配置文件中指定的默認網站目錄。在瀏覽器中打開 http://localhost/phpMyAdmin/ ,如果能順利登錄數據庫,則說明不但 Nginx 和 php 沒有問題,而且 Mysql 也沒有問題。至此,Nginx php Mysql 已經完全能配合運行了。

![](https://s4.51cto.com/images/blog/202012/18/82890f79ebb491c641b24cbecc1fb5a9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

**4、關於開機自動啟動服務**

 

通常在 Linux 中開機啟動可以通過編輯/etc/rc.loacl 文件、在/etc/init.d/ 下添加啟動腳本或者配置systemd 實現,但是關於由於 WSL 架構的特殊性,並且不支持 systemd ,這幾種方式在 WSL 子系統中無法使用。而在 Windows 中用 VBS 腳本結合 WSL 命令的實現開機啟動的方式似乎存在不能使用 LocalHost 地址訪問子系統的問題。總之,暫時還是手動啟動吧。

 

如前述,已安裝的 Nginx、PHP、MySql 啟動及停止命令總結如下:

nginx #啟動nginx服務
phpfpm start #啟動php-fpm服務
mysqld start #啟動mysql

nginx -s reload #不停止服務重新載入配置文件
nginx -s stop #停止服務

phpfpm restart
phpfpm stop

mysqld restart #重啟mysql

 

mysqld stop #停止mysql

 

![](https://s4.51cto.com/images/blog/202012/18/83d526fad91f39ecd6ed90030e9abd64.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 

參考資料:

Windows Terminal + WSL2 + CENTOS 配置Windows命令終端https://www.tinychen.com/200512-windowsterminal-wsl2-centos/https://github.com/CentOS/sig-cloud-instance-images

 

LxRunOffline 使用教程 - WSL 自定義安裝、備份 https://p3terx.com/archives/manage-wsl-with-lxrunoffline.html

 

https://chocolatey.org/docs/installationhttps://blog.csdn.net/hiqiming/article/details/105244147

 

http://nginx.org/https://www.cnblogs.com/zhang-shijie/p/5294162.html

 

https://www.cnblogs.com/pp-yang/p/12595387.html

 

https://www.jianshu.com/p/64e12bea3d49

 

Linux安裝mysql8.0(踩坑實況) https://blog.csdn.net/LittleSeedling/article/details/105851113

 

https://www.cnblogs.com/cxyyh/p/12431424.htmlIndex of /php/

 

centos8安裝php7.4 https://www.cnblogs.com/architectforest/p/12433541.html

 

https://www.cnblogs.com/alliancehacker/p/12255445.html

![](https://s4.51cto.com/images/blog/202012/18/7473956b38759d215ac4d68e0052cf68.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM