Administrator
Administrator
发布于 2024-08-28 / 4 阅读
0
0

lnmp

LNMP

LNMP 架构

LNMP 是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L 指 Linux,N指 Nginx,M一般指 MySQL,也可以指 MariaDB,P 一般指 PHP,也可以指 Perl 或 Python。

LNMP 介绍

LNMP 代表的就是:Linux 系统下 Nginx+MySQL+PHP 这种网站服务器架构。

  1. Linux 是一 类 Unix 计算机操作系统 的统称,是目前最流行的免费操作系统。 代表版本有:Debian、CentOS、Ubuntu、Fedora、Gentoo 等。

  2. Nginx (engine x) 是一个 高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力在同类型的网页服务器中表现较好。

  3. MySQL 是一种开放源代码的 关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言 – 结构化查询语言(SQL)进行数据库管理。MySQL 不仅是开放源代码的,也因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

  4. PHP 即 超文本预处理器,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。因为PHP的开源性、免费性、快捷性等特点使其成为目前最流行的编程语言。

优点

四种软件均为 免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统

Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。 Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP 代理服务器对外进行服务。 Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx 支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。

LNMP 工作原理

第一步:用户在浏览器输入 域名或者IP 访问网站 第二步:用户在访问网站的时候,向 Web 服务器 发出 http request 请求,服务器响应并处理 Web 请求,返回静态网页资源,如 CSS、Picture、Video 等,然后缓存在用户主机上。 第三步:服务器调用动态资源,PHP 脚本调用 fastCGI 传输给 php-fpm,然后 php-fpm 调用 PHP 解释器进程解析 PHP 脚本。 第四步:出现大流量高并发情况,PHP 解析器也可以开启多进程处理高并发,将解析后的脚本返回给 php-fpm,然后 php-fpm 再调给 Fast-cgi 将脚本解析信息传送给 Nginx,服务器再通过 http response 传送给用户浏览器。 第五步:浏览器再将服务器传送的信息进行解析与渲染,呈现给用户。

FastCGI

什么是 CGI

CGI 全称 “通用网关接口”(Common Gateway Interface),用于 HTTP 服务器与其它机器上的程序服务通信交流的一种工具,CGI 程序须运行在网络服务器上。

传统 CGI 接口方式的主要缺点是性能较差,因为每次 HTTP 服务器遇到动态程序时都需要重启解析器来执行解析,然后结果被返回给 HTTP 服务器。这在处理高并发访问几乎是不可用的,因此就诞生了 FastCGI。另外传统的 CGI 接口方式安全性也很差。

什么是 FastCGI

FastCGI 是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(FastCGI接口在 Linux 下是socket(可以是文件socket,也可以是ip socket)),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache、Nginx和lightpd。 同时,FastCGI 也被许多脚本语言所支持,比较流行的脚本语言之一为PHP。FastCGI接口方式采用C/S架构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程执行,然后将得到的结构返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

FastCGI 的重要特点:

  • FastCGI 是 HTTP 服务器和动态脚本语言间通信的接口或者工具。

  • FastCGI 优点是把动态语言解析和 HTTP 服务器分离开来。

  • Nginx、Apache、Lighttpd 以及多数动态语言都支持 FastCGI。

  • FastCGI 接口方式采用C/S架构,分为客户端(HTTP服务器)和服务端(动态语言解析服务器)。

  • PHP 动态语言服务端可以启动多个FastCGI的守护进程。

  • HTTP 服务器通过 FastCGI 客户端和动态语言 FastCGI 服务端通信。

    #####

Nginx FastCGI 的运行原理

Nginx 不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。

FastCGI 接口在 Linux 下是 socket(可以是文件 socket,也可以是 ip socket)。为了调用CGI程序,还需要一个FastCGI 的 wrapper,这个 wrapper 绑定在某个固定 socket 上,如端口或者文件 socket。 当Nginx将CGI请求发送给这个socket的时候,通过 FastCGI 接口,wrapper 接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI 接口,沿着固定的 socket 传递给 Nginx;最后,Nginx 将返回的数据发送给客户端,这就是Nginx+FastCGI 的整个运作过程。

FastCGI 的主要优点是把动态语言和 HTTP 服务器分离开来,是 Nginx 专一处理静态请求和向后转发动态请求,而 PHP/PHP-FPM 服务器专一解析PHP动态请求。

yum方式

Nginx 服务

《 LNMP + WordPress 部署 》
​
1. Nginx 服务部署: 
1.1 配置 nginx 官方 yum 源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
​
1.2 基于 yum 安装 nginx 软件
yum install -y nginx
​
1.3 启动 nginx 服务, 检查服务是否正常启用
systemctl start nginx
systemctl enable nginx
systemctl status nginx
​
1.4 关闭防火墙 and SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
​
1.5 基于 Web 访问验证 nginx 服务
'出现 Welcome to nginx! 则成功访问到 Nginx 资源'
​
1.6 修改 nginx 进程所有者
useradd -s /sbin/nologin -M www
​
vim /etc/nginx/nginx.conf
user www;
​
systemctl reload nginx

MySQL 服务

2. Mysql 服务安装:
2.1 安装数据库软件
yum install mariadb-server mariadb -y
​
2.2 启动数据库服务
systemctl start mariadb.service 
systemctl enable mariadb.service
systemctl status mariadb.service
​
2.3 给 MySQL 数据库服务设置密码
mysqladmin -u root password 'P@ssw0rd123456' # 设置 MySQL 数据库服务密码
​
2.4 验证
mysql -u root -pP@ssw0rd123456

PHP 服务

3. PHP 服务部署:
3.1 更新 yum 源/卸载系统自带的 PHP 软件
yum remove php-mysql php php-fpm php-common
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
​
3.2 安装 PHP 软件
yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
​
3.3 编写配置文件
vim /etc/php-fpm.d/www.conf
8 user = www            # 第八行
10 group = ww           # 第十行
PS: 保证 nginx 进程的管理用户和 PHP 服务进程的管理用户保持一致
​
vim /etc/php.ini #修改时区
date.timezone = Asia/Shanghai
​
3.4 启动 PHP 服务
systemctl start php-fpm
systemctl enable php-fpm
systemctl status php-fpm

实现 LNMP 之间建立联系

4. 实现 LNMP 之间建立联系
1. 实现 nginx + php 建立关系
1.1 编写 nginx 文件
// 编写 nginx 配置文件
vim /etc/nginx/conf.d/default.conf
server {
    listen 80;
    server_name localhost;
    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
    location ~ \.php$ {                             # 把下面所有注释取消
        root /usr/share/nginx/html;     # 修改站点目录
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 修改配置
        include fastcgi_params;
    }
}
​
// 重启 nginx 服务
nginx -t
systemctl restart nginx
​
1.2 编写动态资源文件
[root@web01 conf.d] vim /usr/share/nginx/html/test.php 
<?php
    phpinfo();
?>
​
1.3 基于 Web 访问验证
http://10.0.59.114/test.php

WordPress 服务

2. 部署搭建网站页面
2.1 将代码解压, 将解压后信息放入到站点目录中
[root@web01 ~] cd /usr/share/nginx/html && wget https://cn.wordpress.org/latest-zh_CN.zip
[root@web01 html] unzip wordpress-6.3.2-zh_CN.zip
50x.html index.html test_php.php wordpress
​
2.2 编辑 nginx 配置文件, 修改站点目录
vim /etc/nginx/conf.d/default.conf
server {
    listen 80;
    server_name localhost;
    location / {
        root /usr/share/nginx/html/wordpress;   # 修改站点目录
        index index.html index.htm index.php;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
    location ~ \.php$ {
        root /usr/share/nginx/html/wordpress;   # 修改站点目录
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
​
// 重新加载 nginx
[root@web01 html] nginx -t
[root@web01 html] systemctl reload nginx
​
2.3 修改站点目录权限
[root@web01 html] chown -R www.www wordpress/
​
2.4 对数据库服务进行配置
[root@web01 html] mysql -uroot -pP@ssw0rd123456
创建数据库: create database wordpress;  
检查: show databases;
创建数据库管理用户: grant all on wordpress.* to 'wordpress'@'%' identified by 'P@ssw0rd123456';
刷新数据库: flush privileges;
检查: select user,host from mysql.user;
​
2.5 登录网页, 初始化配置

lnmp编译安装

LNMP通常指的是一组自由运行网站的一套系统的网站服务器架构组成,它集合了linux,nginx,mysql,php,全部都是开源免费的产品组成的。其中也可以有很多替代品,比如LNMP以前是没有的,以前是LAMP,A就是Apache,LAMP现在和LNMP都同样盛行。下面是LNMP的替代简介

L:Linux是计算机操作系统的一种,是目前最流行的免费操作系统。代表版本有debian、centos、ubuntu等。

N:Nginx是一个高性能的HTTP和反向代理服务器。

M:Mysql是一个小型数据型数据库管理系统,自从被收购以后部分功能开始收费,也可以用Maridb,Mongon替代。

P:php是一种在服务器端执行的嵌入HTML文档的脚本语言。

这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

LNMP搭建之L

今天我们就用Linux系统下Nginx+MySQL+PHP这种网站服务器架构来一起搭建。

首先就是必须在Linux系统下来部署一切,这个就不多说了。

LNMP搭建之M

一、MySQL的介绍

MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Sun公司又被Oracle公司收购,因此MySQL目前属于 Oracle 旗下产品。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,一般中小型网站的开发都选择 MySQL 作为网站数据库。

二、MySQL的版本:

MySQL整体分为了企业版(商业版本)和社区版(开源版)本两大类。

社区版是MySQL的免费和开源版本。开发人员可以自由地使用和修改MySQL社区版的代码。企业版则提供了更高级的功能和专业的技术支持,是需要付费的。

商业版本

1、MySQL HeatWave

它是MySQL官方提供的云服务,直接部署在云上,运维更加简单,能够灵活进行扩缩容,能够节省一定的成本,一般用于非金融企业,金融企业对数据的安全性要求更高,一般都是部署在企业的私有云上。

2、MySQL Enterprise Edition

MySQL企业版本,需付费,可以试用30天,MySQL企业版功能强大,提供了企业级高可用性、可扩展性、加密、身份认证、备份等高级功能。一句话表述:功能非常强大,收费也贵,不差钱的可以考虑。

3、MySQL Standard Edition

MySQL标准版,也是属于商业版本的范畴,能够获得Oracle的技术支持,具备InnoDB存储引擎,支持复制等标准功能,可以根据需要随时升级到MySQL Enterprise Edition。

4、MySQL Classic Edition

MySQL 经典版仅供 ISV、OEM 和 VAR 用作嵌入式数据库,主要面向于使用 MyISAM 存储引擎开发读取密集型应用的场景。

5、MySQL Cluster CGE

MySQL Cluster高级集群版,这是MySQL提供的商业版的高可用集群方案,也就是MySQL NDB Cluster。集群版提供了5个9(99.999%)的高可用性、自动分区和可伸缩性、并行分布式查询引擎、在线伸缩 & 与数据库模式升级、多站点集群与双活远程复制、内存型实时数据库。

6、MySQL Workbench Enterprise Edition

MySQL Workbench是一款专为MySQL设计的ER/数据库建模和管理工具。它是著名的数据库设计工具DBDesigner4的继任者,专为MySQL而设计,功能强大,特别是企业版本。

开源版本**

1、MySQL Community Server

MySQL Community Server 是基于GPL开源免费的,这也是我们通常用的MySQL版本,是世界上使用最广泛的开源关系型数据库。

2、MySQL Workbench Community

这是MySQL Workbench的开源免费版本,虽然是开源版本,但是功能也非常齐全,满足日常的需要完全没有任何问题。

3、MySQL NDB Cluster

MySQL Cluster集群社区版,使用NDB引擎可以构建MySQL分布式集群环境。如下图所示,NDB集群具备一个Management节点负责集群节点的管理,还会多出NDB数据节点,NDB是一个内存式的存储引擎,所有的数据和索引数据都会被load到内存中。

通过NDB Cluster,数据库成为一个集群,对上层的应用透明,就像是在访问一个数据库节点一样。

三、MySQL哪个版本是最佳选择?

MySQL是一款开源的关系型数据库管理系统,因其高性能、高可靠性和易用性而备受欢迎。然而,MySQL有多个版本可供选择,不同版本间也有一些区别,因此选择正确的版本非常重要。本文将介绍MySQL的几个版本,以帮助您选择最佳版本。

1. MySQL 8.0

MySQL 8.0是最新版本,也是最先进的版本。它引入了许多新功能和改进,如全文搜索、JSON数据类型、窗口函数等,同时也增强了安全性和性能。如果您需要最新的功能和最好的性能,MySQL 8.0是最佳选择。

2. MySQL 5.7

MySQL 5.7是目前最常用的版本,也是最稳定的版本。它在性能和安全性方面有很大改进,同时也支持JSON数据类型和多源复制等新功能。如果您需要稳定性和一些新功能,MySQL 5.7是最佳选择。

3. MySQL 5.6

MySQL 5.6是一个老版本,但仍然广泛使用。它在性能和安全性方面有一些改进,同时也支持一些新功能,如全文搜索和GIS支持。如果您需要一个相对稳定的版本,MySQL 5.6是最佳选择。

4. MySQL 5.5及以下版本

MySQL 5.5及以下版本已经不再被官方支持,因此不建议使用。这些版本存在安全漏洞和性能问题,可能会导致数据丢失或泄漏。如果您仍在使用这些版本,请尽快升级到更高版本。

总之,选择MySQL的版本需要考虑您的需求和实际情况。如果您需要最新的功能和最好的性能,MySQL 8.0是最佳选择。如果您需要稳定性和一些新功能,MySQL 5.7是最佳选择。如果您需要一个相对稳定的版本,MySQL 5.6是最佳选择。无论您选择哪个版本,都要确保及时更新和维护,以保证安全性和性能。

MySQL安装

mysql依赖

#mysql部分版本安装前编译需要用软件cmake,而不是我们之前通常使用的make!
#mysql 5.x系列版本需要cmake编译安装
yum -y install opensll-devel.x86     #cmake依赖
wget https://github.com/Kitware/CMake/releases/download/v3.29.5/cmake-3.29.5.tar.gz
tar -xvf cmake-3.14.5.tar
cd cmake-3.14.5
./bootstrap 
gmake
gmake install 
#boost库 c++提供扩展库    mysql5.7编译安装需要依赖boost库  mysql5.7需要boost_1_59版本
wget  http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar -zxvf boost_1_79_0.tar.gz -C /usr/local
cd /usr/local
mv boost_1_79_0.tar.gz boost

依赖:

yum install ncurses  ncurses-devel gcc gcc-devel  gcc-c++   -y
#创建组和用户
groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql

获取mysql5.7的官方源码包

https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.27.tar.gz
#解压 
tar -zxvf mysql-boost-5.7.27.tar.gz

利用CMake构建MySQL5.7

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.7 \
-DMYSQL_DATADIR=/usr/local/mysql5.7/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql5.7/data/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0 \
-DWITH_BOOST=/usr/local/boost
#编译并安装
make && make install     ##需要很长时间20分钟-40分钟左右

#设置环境变量 #为了方便在任何目录下使用mysql命令

echo "PATH=$PATH:/usr/local/mysql5.7/bin" >> /etc/profile
source /etc/profile

#对数据库目录进行权限调整
chown -R mysql:mysql /usr/local/mysql5.7
#建立配置文件
#因为Centos7默认支持mariadb数据库,因此要修改系统默认的/etc/my.cnf配置文件
cp /etc/my.cnf /etc/my.cnf.bak   ##备份原有文件
##新创建一个my.cnf
cat /etc/my.cnf
[client]
port = 3306
socket=/usr/local/mysql5.7/data/mysql.sock
[mysqld]
port = 3306
user = mysql
server-id = 1
basedir=/usr/local/mysql5.7
datadir=/usr/local/mysql5.7/data
log-error=/usr/local/mysql5.7/data/err.log
pid-file=/usr/local/mysql5.7/data/mysql.pid
socket=/usr/local/mysql5.7/data/mysql.sock
character_set_server = utf8
!includedir /etc/my.cnf.d
​

初始化数据库

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

初始化之后会默认给你生成临时密码,这个要先记一下 如果不需要它帮你生成密码可以使用–initialize-insecure选项

添加MySQL服务

cp mysql-5.7.27/support-files/mysql.server /etc/init.d/mysql
​
chmod 755 /etc/init.d/mysql

启动服务

systemctl daemon-reload 
systemctl start mysql
systemctl status  mysql

若初始化没有看到密码

cat /usr/local/mysql5.7/data/err.log | grep "password"

​
##修改root密码
alter user 'root'@'localhost' identified by '1234.com';

LNMP搭建之N

关于Nginx

  • Nginx 和 Apache 一样使用模块化设计,Nginx模块包括内置模块和第三方模块,其中内置模块中包含主模块和事件模块

  • 简单的说apache httpd和nginx都是web服务器,但两者适应的场景不同,也就是两者专注于解决不同的问题

    • apache httpd:稳定、对动态请求处理强,但同时高并发时性能较弱,耗费资源多

    • nginx:高并发处理能力强、擅长处理静态请求、反向代理、均衡负载

特点

  • 高并发。静态小文件

  • 占用资源少。2万并发、10个线程,内存消耗几百M

  • 功能种类比较多。web,cache,proxy。每一个功能都不是特别强

  • 支持epoll模型,使得nginx可以支持高并发

  • nginx 配合动态服务和Apache有区别(FASTCGI 接口)

  • 利用nginx可以对IP限速,可以限制连接数

  • 配置简单,更灵活

依赖:

yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel

创建用户和组

groupadd nginx
useradd -M -s /sbin/nologin nginx -g nginx

mkdir -pv /var/temp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock\
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_stub_status_module
注意:上边将临时文件目录指定
为/var/temp/nginx,需要在/var下创建temp及nginx目录
​
或者使用默认的安装路径
./configure --prefix=/usr/local/nginx && make && make install
​
​
​
make -j2 && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/          # 让系统识别nginx的操作命令
​

加入system服务

vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target

systemctl daemon-reload #重载

开启、关闭、重启等

检查

  • nginx -t

    • 检查配置文件是否正确

开启

  • nginx

直接开启

停止

cat /usr/local/nginx/logs/nginx.pid         # 查询nginx的PID号
120959
​
kill -3 120959                              # 普通结束进程,不需要强制结束
netstat -natp | grep :80                    # 搜索80端口无结果
​
​
killall -3 nginx                            # 指定名称也可结束

LNMP搭建之P

依赖

sudo yum -y install gcc gcc-c++ zip unzip libxml2 libxml2-devel curl-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gd-devel bzip2 bzip2-devel libsqlite3x libsqlite3x-devel oniguruma oniguruma-devel openldap openldap-devel libicu-devel
​

下载php,并解压 安装

wget https://www.php.net/distributions/php-8.2.20.tar.gz
​
​
tar -zxvf php-8.2.20.tar.gz
cd php-8.2.20
./configure \
--prefix=/usr/local/php \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-mysql-sock=/usr/local/mysql5.7/data/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip \
--with-gettext \
--enable-bcmath \
--enable-sockets \
--with-ldap
​
或者
下面这个是因为安装zabbix的时候ldap一直报错
./configure --prefix=/opt/app/php/  \
--with-config-file-path=/opt/app/php/etc \
--enable-fpm \
--with-fpm-user=cents \
--with-fpm-group=cents \
--enable-soap \
--enable-gd-native-ttf \
--enable-exi \
--enable-pdo \
--enable-mbstring \
--enable-opcache \
--enable-sockets \
--enable-pcntl \
--enable-zip \
--enable-calendar \
--enable-bcmath \
--enable-intl \
--with-pdo-mysql \
--with-mysql \
--with-mysqli \
--with-libxml-dir \
--with-pcre-dir \
--with-gd \
--with-vpx-dir \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-xpm-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-mcrypt \
--with-zlib \
--with-curl \
--with-openssl \
--with-gettext \
--with-mhash \
--with-ldap \
--with-libdir=lib64 \
--without-pear \
--disable-phar
cp -frp /usr/lib64/libldap* /usr/lib/
​
make && make install

配置PHP的三个配置文件

##php有三个配置文件  php.ini核心配置文件 php-fpm.conf进程服务配置文件www.conf 扩展配置文件##
[root@localhost php-7.1.10/]# cp php.ini-development /usr/local/php/lib/php.ini
[root@localhost php-7.1.10/]# vi /usr/local/php/lib/php.ini
##找到以下两行的位置,修改这两行##
1170行:mysqli.default_socket = /usr/local/mysql5.7/data/mysql.sock   ##数据库通讯文件
 939行:date.timezone = Asia/Shanghai       ##添加时区
[root@localhost php-7.1.10]# /usr/local/php/bin/php -m  ##验证安装的模块

配置及优化FPM模块

[root@localhost php-7.1.10]# cd /usr/local/php/etc/
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf  ##优化复制默认进程服务配置文件
[root@localhost etc]# cd /usr/local/php/etc/php-fpm.d/
[root@localhost php-fpm.d]# cp www.conf.default www.conf   ##优化复制扩展配置文件
​
[root@localhost php-fpm.d]# cd /usr/local/php/etc/
[root@localhost etc]# vi php-fpm.conf
pid = run/php-fpm.pid   ##将;去掉##
​

创建软链接

[root@localhost etc]# /usr/local/php8/sbin/php-fpm -c /usr/local/php8/lib/php.ini
[root@localhost etc]# netstat -natp |grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      99975/php-fpm: mast 
[root@localhost etc]# ln -s /usr/local/php8/bin/* /usr/local/bin/
[root@localhost etc]# ps aux | grep -c "php-fpm”

编辑,让nginx支持PHP功能

[root@localhost etc]# vi /usr/local/nginx/conf/nginx.conf
location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }   ##将;去掉,用/usr/local/nginx/html替换原来的路径##
[root@localhost etc]# vi /usr/local/nginx/html/index.php
 <?php
phpinfo();
?>  
[root@localhost etc]# systemctl restart nginx   ##重启nginx##
##在windows的浏览器中输入http://20.0.0.11/index.php

验证数据库工作是否正常

mysql -u root -p
CREATE DATABASE bbs;
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
flush privileges;
show databases;    #查看有哪些数据库
​
​
vim /usr/local/nginx/html/index.php
<?php
$link=mysqli_connect('192.168.92.11','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
​
浏览器访问:http://192.168.92.11/index.php

php-fpm加入system

vim /usr/lib/systemd/system/php-fpm.service

[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php8/sbin/php-fpm -c /usr/local/php8/lib/php.ini
ExecStop=/bin/pkill -9 php-fpm
[Install]
    WantedBy=multi-user.target



评论