LNMP平台搭建及优化

一.LNMP概述,服务的安装配置

LNMP平台就是Linux、Ngnix、MySQL、PHP的组合架构,需要Linux服务器、MySQL数据库、PHP解析环境

①MySQL安装配置
为了与Nginx、PHP环境保持一致,此处选择采用源代码编译的方式安装MySQL组件

②MySQL部署的方法
编译安装MySQL
优化调整
初始化数据库
启动MySQL服务并设置root数据库账号的密码

③PHP解析环境的安装
(1)配置网页动静分离,解析PHP,有两种方法可以选择
使用PHP的FPM模块:fastchi,管理动静分离
将访问PHP页面的Web请求转交给Apache服务器去处理

(2)较新版本的PHP已经自带FPM模块,对PHP解析实例进行管理、优化解析效率

FastCGI将Http Server和动态脚本语言分离开
Nginx专门处理静态请求,转发动态请求
PHP-FPM专门解析PHP动态请求
(3)单服务器的LNMP架构通常使用FPM方式来解析PHP

实现动静分离:Nginx与php

④PHP编译安装步骤

编译安装PHP
◆编译选项时添加“"–enable-fpm”以启用此模块

④安装后的调整
主要是配置文件的建立与相应命令工具的路径优化
安装ZendGuardLoader(提高PHP解析效率),并进行加载配置

④配置Nginx支持PHP环境
调用本机的php-fpm进程配置方法
建立FPM配置文件php-fpm.conf,修改配置选项

PID文件、运行用户、服务进程数等
启动php-fpm进程

⑤配置Nginx支持PHP解析

在Nginx的配置文件的server{ }配置段中设置将PHP的网页
请求转给FPM模块处理

二.案例概述

1、LNMP指的是一个基于CentOS/Debian编写的Nginx、Linux、MySQL、
PHP,可以在独立主
机上轻松的安装 LNMP 生产环境。本案例主要介绍 LNMP框架安装方法以及部署 Discuz!社区论坛应用。
2、Nginx作为 web 服务器:相比 Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率。Nginx作为负载均衡服务器: Nginx既可以在内部直接支持 Rails和 PHP,也可以支持作为 HTTP 代理服务器对外进行服务。Nginx采用c语言进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好的多。Nginx作为邮件代理服务器: Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm描述了成功并且美妙的使用经验。Nginx安装非常的简单,配置文件非常简洁(还能够支持 perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。

3、MySgI是一个关系型数据库管理系统,由瑞典 MySQI AB 公司开发,目前被oracle 公司收购。MySQL是最流行的关系型数据库管理系统之一,在 WEB应用方面,MySQI是较好的 RDBMS (Relational Database Management System,关系数据库管理系统)应用软件。MySQ是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQ所使用的sQI语言是用于访问数据库的最常用标准化语言。MySQ 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。

4、PHP-FPM(FastCGI Process Manager: FastCGI进程管理器)是一个 PHPFastCGI管理器,由于Nginx服务器不能处理动态页面,需要由 Nginx把动态请求交给 php-fpm 处理。
FastCGI: FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(FastCCI接口在Linux 下是socket(可以是文件socket,也可以是ip
socket)),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTre服务器都支持FastCc,包括Apache 、Nginx和ligntpd。
FastCGI:作用:把动态语言和HTTP分离开来(动静分离)

三.LNMP架构的部署思路

3.1按装Nginx服务

●安装MySQL服务
●安装配置PHP解析环境
●部署Discuz!社区论坛 web 应用

①安装环境依赖包软
Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包( devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成

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

②创建运行用户、组
Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。例如,创建一个名为 nginx 的用户,不建立宿主文件夹,也禁止登录到shell 环境。

useradd -M -s /sbin/nologin nginx 

③编译安装Nginx
配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx,启用 http_stub_status module模块以支持状态统计,便于查看服务器的连接信息。具体选项根据实际需要来定

上传 nginx-1.15.9.tar.gz 至/opt 目录

cd /opt 
tar zxf nginx-1.15.9.tar.gz
cd nginx-1.15.9/
 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

–with-http_stub_status_module 为状态统计模块


④路径优化
为了使 Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行"nginx"命令就可以调用Nginx的主程序

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

⑤检查配置文件
与Apache 的主程序httpd 类似,Nginx的主程序也提供了"-t"选项用来对配置文件进行
检查,以便找出不当或错误的配置。配置文件 nginx.conf 默认位于安装目录下的 conf/子目录中。若要检查位于其他位置的配置文件,可使用"-c"选项来指定路径。

nginx -t 

⑥启动、停止Nginx
直接运行Nginx即可启动Nginx服务器,这种方式将使用默认的配置文件,若要改用
其他配置文件,需添加"-c 配置文件路径"选项来指定路径。需要注意的是,若服务器中已装有httpd 等其他 web 服务软件,应采取措施(修改端口、停用或卸载)避免冲突。

nginx 
curl 127.0.0.1
主程序Nginx支持标准的进程信号,通过 kill或killall命令发送HOP信号表示重载配置,QUIT信号表示退出进程,KILL信号表示杀死进程。例如,若使用killall命令,重载配置、
停止服务的操作分别如下所示(通过"-s"选项指定信号种类)
killall -s HUP nginx     #选项-s HUP等同于-1重新加载
killall -s QUIT nginx    #选项-s QUIT 等同于-3停止服务
当Nginx进程运行时,PID 号默认存放在logs/目录下的nginx.pid 文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制。

⑦添加Nginx系统服务
为了使 Nginx服务的启动、停止、重载等操作更加方便,可以编写基于Centos 7.6的Nginx服务控制文件使用systemctl 工具来进行管理,Centos7.6 系统的管理习惯

vim /usr/lib/systemd/system/nginx.service
[Unit]	
Description=nginx							#描述
After=network.target						#描述服务类别
[Service]
Type=forking								#后台运行类型
PIDFile =/usr/local/nginx/logs/nginx.pid	#PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx		#启动服务
ExecrReload=/bin/kill -s HUP $MAINPID		#根据PID重载配置
ExecrStop=/bin/kill -s QUIT $MAINPID		#根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target					#启动级别
systemctl start  nginx

⑧检查通过systemctl命令能否正常启动、停止、重启、重载Nginx服务

[ root@localhost ~]#  netstat -anutp l grep nginx
[ root@localhost ~]#  killall -3 nginx
[ root@localhost ~] #  systemctl start nginx
[ root@localhost ~]#  netstat -anutp lgrep nginx

3.2安装MySQL服务

①交装Mysql环境依赖包

yum -y install ncurses  ncurses-devel bison  cmake
yum -y install  
ncurses \
#字符终端工具包
ncurses-devel \
bison  \
#函数库
cmake

②创建运行用户

useradd -s /sbin/nolog  mysql 

③编译安装

上传 mysql-boost-5.7.20.tar.gz 到  /opt目录下
tar zxf  mysql-boost-5.7.20.tar.gz
cd mysql-5.7.20/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1

选项解释

cmake l
-DCMAKE_INSTALL_PREFIX=/usr/ local/mysql l
#指定安装路径(目录)
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \#指定通信文件,连接数据库,通讯协议的载体-DSYSCONFDIR=/etc l
#配置文件目录指向/etc
一DSYSTEMD_PID_DIR=/usr/ local/mysql \
#指定pid目录文件
一DDEFAULT_CHARSET=utf8 \
#字符集设定
一DDEFAULT_COLLATION=utf8_general_ci \
#字符集设定
一DWITH_INNOBASESTORAGE ENGINE-1―l
#以下三行均为存诸引擎ENGINE
一DWITH_ARCHIVE_STORAGE_ENGINE兰1 l
一DWITH BLACKHOLE STORAGE_ ENGINE=1 \l一DWITHPERFSCHEMA_STORAGE_ ENGINE=1 \l一DMYSQL_DATADIR=/usr/ local/mysql/ data \
#指定数据存放位置
一DWITH_ BOOsT=boost \
#底)层C++运营库
-DWITH SYSTEMD=1
#守护进程id

–注意:如果在CMAKE的过程中有报错—
当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧
----注意: make:*** No targets specified and no makelile found. Stop.解决方法
1、wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz(字符终端工具)
2.、 tar zxvf ncurses-5.6.tar.gz
3、./configure -prefix=/usr/local -with-shared-without-debug (开启共享和调试)
4、make
5、make instal1

④数据库权限调整

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

⑤调整配置文件

vim /etc/my.cnf

删除后添加以下内容


[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

配置文件解释

[client]
#client 用户程序
port = 3306
default-character-set=utf8
socket = lusr/ local/mysql/mysql.sock
[mysql]     
#mysql软件内容
port = 3306
#端口
default-character-set=utf8
socket = /usr/ local/mysql/mysql.sock[mysqld]
#以后对mysql配置时更多的会针对于mysqld进行配置
user = mysql
#程序用户
basedir = lusr/ local/mysql#工作目录
datadir = /usr/local/mysql/data#数据文件目录port = 3306
#端口
character_set_server=utf8#服务的字符集
pid-file = /usr/local/mysql/mysqld.pid #PID文件目录socket = /usr/local/mysql/mysql.sock#通讯文件server-id - 1
#服务id,在之后的mysql集群中用于标识mysql服务器
sql_mode=NO_ENGINE_SUBSTTTUTION,STRLCT_TRANS_YTABLES,NO_AUTO_CRBEATE_UISBR ,N0_AUTO VALUB_ON BERO,N1O_2EROIN_DST7,10ZERO DATE,ERROR FOR DIVISION_ BY_ZERO,PIPES_AS_CONCAT,ANST_QUOTES
#模块,默认加载
#PS:跳过数据库权限验证的命令为: skip-grant-tables (忘记密码的时候)

⑥设置环境变量

echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile

⑦初始化数据库

cd /usr/local/mysql
./bin/mysqld  --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
cp -p /usr/local/mysql/usr/lib/systemd/system/mysqld.service  /usr/lib/systemd/system

⑧数据库开启自启,关闭,状态

systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
netstat -antp | grep 3306

⑨设置Mysql密码

mysqladmin -u root -p password

刚开始没密码是空的直接回车,然后输入密码 ,再此确认密码,这是在root账户下运行的

⑩登录数据库

mysql -u root -p  #这个命令敲下,提示要输入密码,这个就是刚才设置的密码

3.3安装配置PHP解析环境

①安装环境依赖包

yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
yum -y install \
libjpeg \                      #jpg图片依赖
libjpeg-devel \                #png图片依赖
libpng libpng-devel \       
freetype freetype-devel \      #字体
libxml2 \                      #支持xml
libxml2-devel \
zlib zlib-devel \              #压缩格式
curl curl-devel \              #识别url
openssl openssl-devel          #xml支持扩展性标记语言,用于承载数据url 网址 openssl安全性访问(加密访问)

②编译安装

cd /opt
tar jxf php-7.1.10.tar.bz2

configure配置

./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/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

命令解释

./configure 
--prefix=/usr/ local/php l
#PHP文件路径
--with-mysql-sock=/usr/local/mysql/mysql.sock \ #sock通讯文件(需要与mysql指定的路径一致)---with-mysqli     #with(支持各项功能)
--with-zlib \
--with-curl \-—with-gd l
--with-jpeg-dir l--with-png-dir \
--with-freetype-dir l--with-openssl \
--enable-fpm \
#开启fpm模块
--enable-mbstring \
#开启多字段模块
--enable-xml \
#开启扩展性标记语言模块
--enable-session \
#会话
--enable-ftp \
#文本传输协议
--enable-pdo \
#函数库
--enable-tokenizer \
#令牌解释器
--enable-zip
#Z工P压缩格式

③php的配置文件
php有三个配置文件php.ini核心配置文件php-fpm.conf进程服务配置文件www . conf扩展配置文件

cp php.ini-development /usr/local/php/lib/php
.ini
vim /usr/local/php/lib/php.ini 

939 date.timezone = Asia/Shanghai   //分号去掉
1170 mysqli.default_socket =/usr/local/mysql/mysql.sock
/usr/local/php/bin/php -m       #验证/查看开启的模块

④配置及优化FPM模块

cd /usr/local/php/etc/
cp php-fpm.conf.default  php-fpm.conf
cd ./php-fpm.d/
cp  www.conf.default  www.conf
cd ../
vim php-fpm.conf
17 pid = run/php-fpm.pid  // 17行取消注释 ,开启pid支持(可运行

启动php

/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini  -c代表conf

查看端口

netstat -natp | grep 9000  //php的端口是9000

添加识别命令

ln -s /usr/local/php/bin/*  /usr/local/bin/

查看PHP的进程

ps aux | grep -c "php-fpm"

让nnginx支持PHP功能

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

在这里插入图片描述

vim /usr/local/nginx/html/index.php 

```bash
<?php
phpinfo()
?>

⑤重启,访问

[root@localhost html]# systemctl stop nginx 
[root@localhost html]# systemctl start nginx 

在这里插入图片描述
测试数据库工作是否正常

mysql -u root -p
#########输入密码
CREATE DATABASE bbs;

CREATE DATABASE bbs;
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123 ';
GRANT all ON bbs.* To 'bbsuser' @ 'localhost' IDENTIFIED BY 'admin123 ' ;
flush privileges;

编辑PHP网页

vim /usr/local/nginx/html/index.php 
<?php
$link=mysqli_connect('192.168.80.2','bbsuser','admin123');
if($link) echo "<h1>success! !</h1>";
else echo "Fail! ! ";
?>

在这里插入图片描述
安装论坛;

cd /opt
unzip Discuz_X3.4_SC_UTF8.zip  -d /tmp
cd /tmp/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs/
cd /usr/local/nginx/html/bbs/
chown -R root:nginx ./config/
chown -R root:nginx ./data/
chown -R root:nginx ./uc_client/
chown -R root:nginx ./uc_server/

chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/
http://192.168.80.2/bbs/install/index.php

在这里插入图片描述
小结:
LNMP与LAMP
①LNMP是Nginx ,LAMP是Apache
②LNMP是MySQL5.7,boost 底层c++函数库,
③php 在LAMP只是做为后台程序运行
④php 在LNMp开起了fpm模块 fpm进程管理模块开启了php 的pid 功能,让php可以以9000端口的方式运行起来
⑤Nginx开启了支持FastCCI的方式对接php(对接的端口是9000)

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

3、nginx隐藏版本号的方法
①修改配置文件法

vim /usr/local/nginx/conf/nginx.conf
17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20     server_tokens off;  #添加,关闭版本号

在这里插入图片描述

systemctl restart nginx 

在这里插入图片描述
②修改源码法

vim /opt/nginx-1.15.9/src/core/nginx.h 

在这里插入图片描述
重新编译

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值