centos安装mysql wsl_WSL2子系统安装CentOS8及源码编译安装Nginx1.18+PHP7.4+MySql8.0开发

本文详细介绍了如何在WSL2环境下手动安装CentOS8,以及如何通过源码编译安装Nginx 1.18、PHP 7.4和MySQL 8.0,建立开发环境。从安装CentOS8、设置目录、更换国内源,到编译安装Nginx、配置Nginx与PHP-FPM的通信,再到安装和配置MySQL,最后进行了环境的测试和问题排查,提供了一整套的安装步骤和注意事项。
摘要由CSDN通过智能技术生成

一、WSL2 安装 CentOS8

在前面的文章中介绍了 WSL(Win­dows Sub­sys­tem 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 ,如果能正确显示版本号,说明安装成功。

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

安装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 2

其中要和上面查询到的信息一致,本例中为 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/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;

}

错误提示:

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 中下载链接文件:

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

configure: error: Please ensure the argon2 header and library are installed

解决方法:

打开 https://pkgs.org/ ,查找 libargon2 ,找到 centos8 的rpm包,下载安装。

* **报错:**

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包,下载安装。

**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 扩展等信息

**3、phpMyAdmin**

下载 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=)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值