您的位置 首页 php

WSL2子系统安装CentOS8及源码编译安装Nginx1.18+PHP7.4+MySql8.0

一、WSL2 安装 centos 8

在前面的文章中介绍了 WSL(Win­dows Sub­sys­tem for Linux) 、在 Win10 中的安装与配置 WSL2。

如文中所示,首先安装配置完成 WSL2,然后 Ubuntu20 等 Linux 发行版在 Windows 应用商店(store)中直接点击安装即可。本人为了和线上服务器环境保持一致,想安装 CentOS 8,但是 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('#39;))  

完成后,输入命令:choco ,如果能正确显示版本号,说明安装成功。

官网文档:

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 盘下。

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 的配色方案,可以参考:

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 
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 
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/s bin /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/wwwlogs
chown -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 Compression
  gzip 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;
}  

错误提示:

stub_status模块主要用于查看Nginx的一些状态信息,默认不会编译进Nginx,在配置文件中就不能有stub_status 相关配置信息。

7、测试

启动命令:nginx ,没有出现任何提示。

查看端口服务是否开启

 netstat -lnt|grep 80  

打开浏览器

 输入  或者 ,然后回车  

如果出现 Welcome to nginx! 页面,说明 WSL 及 Nginx 服务器运行正常。

四、源码安装 Mysql 8.0

1、下载 MySql8.0

打开mysql官网,社区版下载页,当前最新版本是 8.0.21,操作系统选择 Linux-Generic ,这里根据自己的系统选择下载文件:mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz,即 x86 架构 64位版本。

点击 Download 后,转到文件链接页,在 No thanks,just start my download. 上右键,选择复制链接,在 Centos 中下载链接文件:

 cd /mnt/f/wsl #此目录是我个人存放各种安装包的目录,也就是 win10 的 F 盘 wsl 目录。
wget   

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 data
mkdir -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 --help
Usage: 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   

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  -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 
tar -zxf libsodium-1.0.18-stable.tar.gz
cd libsodium-stable
./configure --prefix=/usr
make && make install
ldconfig  
  • 报错:
 checking for Argon2 library... not found
configure: error: Please ensure the argon2 header and library are installed  

解决方法:

打开 ,查找 libargon2 ,找到 centos8 的rpm包,下载安装。

 wget 
wget 
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  

解决方法:

打开 ,查找 libzip 及 libzip-devel,找到 centos8 的rpm包,下载安装。

 wget 
wget 
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 需要另外安装。参考官网:

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

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  

phpinfo 显示了编译参数、 php.ini 的文件位置、已开启OPcache 及 Xdebug 扩展等信息

3、phpMyAdmin

下载 phpMyAdmin 并解压到 /mnt/e/wwwroot/default 目录,即 Nginx 配置文件中指定的默认网站目录。在浏览器中打开 ,如果能顺利登录数据库,则说明不但 Nginx 和 php 没有问题,而且 Mysql 也没有问题。至此,Nginx php Mysql 已经完全能配合运行了。

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  

参考资料:

Windows Terminal + WSL2 + CENTOS 配置Windows命令终端

LxRunOffline 使用教程 – WSL 自定义安装、备份

Linux安装mysql8.0(踩坑实况)

of /php/

centos8安装php7.4

文章来源:智云一二三科技

文章标题:WSL2子系统安装CentOS8及源码编译安装Nginx1.18+PHP7.4+MySql8.0

文章地址:https://www.zhihuclub.com/150924.shtml

关于作者: 智云科技

热门文章

网站地图