目录

一、LNMP

1、LNMP介绍

1.1 LNMP工作原理

1.2、LAMP工作原理

2、LAMP和LNMP的区别

3、编译安装的优点

4、各组件的主要作用

三、LNMP架构的部署

1、安装nginx服务

1、安装环境依赖包

2、创建运行用户、组

3、编译安装Nginx

4、路径优化

5、添加 Nginx 系统服务

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

7、在虚拟机中服务验证

2、安装mysql服务

1、安装环境依赖包

2、创建运行用户(关键点:千万不要加 -M)

3、将所需软件包拖入/mnt/LNMP目录并解包

4、编译安装

5、数据库目录进行权限调整

6、 调整mysql配置文件

7、设置路径的环境变量

8、初始化数据库

9、数据库开启自启、 关闭、状态

10、设置Mysql密码

11、登录数据库

3、安装配置 PHP 解析环境

1、安装环境依赖包

2、将所需软件包拖入/mnt/LNMP目录下并解包

3、编译及安装

4、扩展配置文件

5、配置及优化FPM模块

6、开启php服务

7、配置nginx让nginx支持PHP功能

8、下面测试数据库工作是否正常

4、LNMP应用部署

安装数据库报错处理

5、LNMP部署完成进行验证

管理后台的页面

四、一键部署LNMP架构


一、LNMP

1、LNMP介绍

LNMP架构师目前成熟的企业网站的应用模式之一,指的是协同工作的一整台系统和相关软件,能够提供动态web站点服务及其应用开发环境  LNMP是一个缩写词,具体包括Linux操作系统,Nginx服务器,Mysql数据库服务器,PHP(或perl,python)网页编程语言

1.1 LNMP工作原理

客户端请求访问一个地址,这个请求会到达nginx服务器,

nginx服务器首先判断是否为静态请求,如果是静态请求则直接返回结果到达客户端,

如果是动态请求,这是nginx服务器只做反向代理的作用,(nginx通过接口传输协议PHP-fastcgi协议)它会将请求传给php-fpm这个服务来处理,但是php-fpm不做处理,因为php-fpm是用来管理进程的程序,他会调用PHP解析器进程,php解析进程会来处理这个php文件,如果其中需要调用数据,那么再通过mysql.sock连接到数据库进行读取数据,再进程处理,处理完成之后再交给php-fpm服务进程,php-fpm服务进程再交给nginx服务器,最后到达客户端。

1.2、LAMP工作原理

客户端请求访问一个地址,这个请求会到达apache服务器,

apache服务会判断是动态请求还是静态请求,如果是静态请求,apache服务将会直接返回到客户端。
如果是动态请求,apache服务会调用自己的一个模块libphp7.so模块进行解析处理,如果需要mysql数据库的支持,还会通过mysql.sock来连接数据库进行读去数据,处理完成之后,将返回到apache服务器,最后返回到客户端。

2、LAMP和LNMP的区别

LAMP表示为:linux、apache、mysql、php

LNMP表示为:linux、nginx、mysql、php

主要区别在于web服务器与php后台之间的转发存在区别,

当nginx作为web服务器时,nginx通过cgi接口协议转发到php-fpm服务程序上,nginx服务和php-fpm服务时相对独立的,然后由php-fpm程序调用对应的php解析进行来完成处理。
当apache作为web服务器时,apache是调用libphp7.so模块来进行处理,这个模块是会随着apache的启动而启动。内嵌在apache中的一个模块。

3、编译安装的优点

①具有较大的自由度,功能可定制

②可及时获得最新的软件版本

③普遍适用于大多数Linux版本,便于一直使用

4、各组件的主要作用

平台)Linux: 指的是一个基于 CentOS/Debian 编写的 Nginx、Linux、MySQL、PHP,可以在独立主
机上轻松的安装 LNMP 生产环境。本案例主要介绍 LNMP 框架安装方法以及部署 Discuz!社
区论坛应用

(前台)Nginx : 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,
体现更高的效率。Nginx 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,
也可以支持作为 HTTP 代理服务器对外进行服务。Nginx 采用 C 语言进行编写,不论是系统
资源开销还是 CPU 使用效率都比 Perlbal 要好的多。Nginx 作为邮件代理服务器:Nginx 同
时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服
务器),Last/fm 描述了成功并且美妙的使用经验。Nginx 安装非常的简单,配置文件非常
简洁(还能够支持 perl 语法)。Nginx 支持平滑加载新的配置,还能够在不间断服务的情
况下进行软件版本的升级。

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

(中间连接): PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器,
由于 Nginx 服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 处理。

FastCGI:FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache、Nginx和lightpd。
FastCGI:作用:把动态语言和HTTP分离开来,动静分离

三、LNMP架构的部署

部署思路#
●安装 Nginx 服务
●安装 MySQL 服务
●安装配置 PHP 解析环境
●部署 Discuz!社区论坛 Web 应用

关闭防火墙及防护

1、安装nginx服务

1、安装环境依赖包

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

[root@gang ~]# yum -y install gcc gcc-c++ pcre-devel zlib-devel make

2、创建运行用户、组

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

3、编译安装Nginx

配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx;启用 http_stub_status_module 模块以支持状态统计,便于查看服务器的连接信息。具体选项根据实际需要来定,配置前可参考“./configure --help”给出的说明。

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

tar zxvf nginx-1.15.9.tar.gz  解包

[root@gang nginx-1.15.9]# 
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

4、路径优化

为了使 Nginx 服务器的运行更加方便,可以为主程序 nginx 创建链接文件,以便管理员
直接执行“nginx”命令就可以调用 Nginx 的主程序(让系统可以识别)

5、添加 Nginx 系统服务

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

#将nginx服务添加到系统管理,不然无法视同systemctl管理进行启动
vim /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                ###启动服务
ExecReload=/bin/kill -s HUP $MAINPID           ###根据PID重载配置
ExecStop=/bin/kill -s QUIT $MAINPID               ###根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target

#给权限并开启服务

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

systemctl restart nginx.service

systemctl enable nginx.service

systemctl status nginx.service  

注意:开启nginx服务可能需要重启虚拟机

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

7、在虚拟机中服务验证

注意:nginux安装好最好快照一下

2、安装mysql服务

1、安装环境依赖包

yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake

2、创建运行用户(关键点:千万不要加 -M)

[root@gang ~] useradd -s /sbin/nologin  mysql

3、将所需软件包拖入/mnt/LNMP目录并解包

[root@gang  LNMP]# tar xzvf mysql-boost-5.7.20.tar.gz

4、编译安装

cd /opt/mysql-5.7.20/

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \        #指定安装路径(目录)
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \    #指定通信文件,连接数据库,通讯协议的载体⭐⭐⭐
-DSYSCONFDIR=/etc \                                #配置文件目录指向/etc
-DSYSTEMD_PID_DIR=/usr/local/mysql \            #指定pid目录文件
-DDEFAULT_CHARSET=utf8 \                        #字符集设定
-DDEFAULT_COLLATION=utf8_general_ci \            #字符集设定
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                #以下三行均为存储引擎ENGINE
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \            #指定数据存放位置
-DWITH_BOOST=boost \                            #底层C++运营库 独立的表空间结构
-DWITH_SYSTEMD=1                                #守护进程id 守护进程 
——》跑在后台的一个支持服务正常运行的一个特殊进程

配置软件模块

[root@gang mysql-5.7.20]# make && make install   编译安装

等待半小时安装

5、数据库目录进行权限调整

修改mysql安装目录属主属组

[root@gang mysql-5.7.20]# chown -R mysql:mysql /usr/local/mysql/

6、 调整mysql配置文件

[root@gang etc]# vim my.cnf
#删除原有内容,添加以下内容

[client]                    #client 用户程序
port = 3306                
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]                        #mysql 软件内容 
port = 3306                    #端口
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]                    #以后对mysql配置时 更多的会针对于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    #PID文件目录
socket = /usr/local/mysql/mysql.sock    #通讯文件
server-id = 1                #服务id,在之后的mysql集群中用于标识mysql服务器

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
#模块,默认加载
#PS:跳过数据库权限验证的命令为:skip-grant-tables,忘记密码

修改mysql配置文件的属主属组

chown mysql:mysql /etc/my.cnf

7、设置路径的环境变量

8、初始化数据库

cd /usr/local/mysql/

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

cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

9、数据库开启自启、 关闭、状态

10、设置Mysql密码

mysqladmin -u root -p password  //刚开始没密码是空的直接回车,然后输入密码如:123456,在此确认123456,这是在root账户下运行的

11、登录数据库

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

show databases; 查看当前数据库

quit退出数据库

3、安装配置 PHP 解析环境

1、安装环境依赖包

安装GD库和GD库关联程序,用来处理和生成图片

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

2、将所需软件包拖入/mnt/LNMP目录下并解包

tar jxvf php-7.1.10.tar.bz2

3、编译及安装

编译

cd /opt/php-7.1.10/

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

[root@gang php-7.1.10]#./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

安装

[root@gang php-7.1.10]#make && make install

4、扩展配置文件

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

这2行添加到/usr/local/php/lib/php.ini中

/1170行 mysqli.default_socket = /usr/local/mysql/mysql.sock
/939行  date.timezone = Asia/Shanghai

验证安装的模块

/usr/local/php/bin/php -m

如上图添加成功

5、配置及优化FPM模块

#复制主配置文件及php-fpm 配置文件
cd /usr/local/php/etc/
cp  php-fpm.conf.default php-fpm.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf

cd /usr/local/php/etc/
vi php-fpm.conf
#开启pid 支持(可运行)  取消注释
pid = run/php-fpm.pid

6、开启php服务

#启动php -c 代表 conf
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000
#识别命令
ln -s /usr/local/php/bin/* /usr/local/bin/
#
ps aux | grep -c "php-fpm"  //查看php的进程

7、配置nginx让nginx支持PHP功能

vim /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/目录下创建一个.php的文件

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

<?php
phpinfo();
?>

systemctl restart nginx  重启nginx

不重启会变成下载index.php文件

在虚拟机中测试在网页测试“http://192.168.100.10/index.php”

8、下面测试数据库工作是否正常

mysql -u root -p     #########输入123456密码  进入数据库

CREATE DATABASE bbs;

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

更改nginx中index.php中内容

vim /usr/local/nginx/html/index.php       ###原来的测试页内容更改如下

<?php
$link=mysqli_connect('192.168.100.10','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

4、LNMP应用部署

部署 Discuz!社区论坛 Web 应用

将安装包放到/mnt/LNMP目录中并解压

cd /mnt/LNMP
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/

然后访问一下

192.168.100.10/bbs/install/index.php #这是安装页面

点击同意进行下一步

界面需全是√ 点击下一步

点击下一步

安装数据库报错处理

去删除这个软件

cd /usr/local/nginx/html/bbs/

mv install/ install.lock

chmod 600 install.lock/

因为我们将install的目录给更改了名字,所以原来的安装页面也就没有了

所以我们要更换路径去访问

5、LNMP部署完成进行验证

管理后台的页面

192.168.100.10/bbs/admin.php     #这是后台管理页面

输入账号 密码

错误1

------注意:如果在CMAKE的过程中有报错---
        当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧

再次进入源码包暗处缓存文件就行

cd mysql-5.7.20/ #进入源码包

rm -rf CMakeCache.txt

------注意:make: *** No targets specified and no makefile 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 install

错误2

当我们初始化数据库的时候,可能会报这个错

我们进入MySQL的文件  cd /usr/local/mysql

ls后查看    将data删除,再次初始化

四、一键部署LNMP架构

#!/bin/bash
echo "提前准备好LNMP需要用到的安装包 如:nginx-1.15.9.tar.gz
php-7.1.10.tar.bz2 mysql-boost-5.7.20.tar.gz Discuz_x3.4_SC_UTF8.zip"
#===============关闭防火墙及防护=======================
   systemctl stop firewalld
   systemctl disable firewalld
   setenforce 0
#================安装nginx服务===========================
nginx () {

#安装依赖环境
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

#创建nginx用户
useradd -M -s /sbin/nologin nginx

#解压
cd /opt
tar zxvf nginx-1.15.9.tar.gz
cd /opt/nginx-1.15.9/

#编译
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

#安装
make -j3 && make install &>/dev/null

#优化路径 创建软链接方便启动
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
ll /usr/local/sbin/

#检查nginx配置文件  nginx -t
#nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
#nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

#添加nginx为系统服务
echo "[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target" > /lib/systemd/system/nginx.service

#给权限
chmod 754 /lib/systemd/system/nginx.service

#开启nginx服务
systemctl start nginx
if [ $? -eq 0 ];then
   systemctl enable nginx --now
   echo "nginx服务已启动完成!"
else
  echo "nginx服务启动失败,请检查!"
fi
echo "nginx安装完成-并启动"
}

#=========安装mysql服务===============#
mysql () {

#解压
cd /opt
tar zxvf mysql-boost-5.7.20.tar.gz

#安装依赖环境
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake

#指定软件安装的位置
cd /opt/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

#安装
make -j3 && make install
  
#创建一个mysql用户便于管理
useradd -s /sbin/nologin mysql
  
#修改mysql程序的归属
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
 
#修改配置文件
echo "
[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" > /etc/my.cnf

#设置环境变量mysql命令便于系统识别
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

#复制mysql服务程序到启动文件中
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

#开启服务
systemctl start mysqld
if [ $? -eq 0 ];then
    systemctl enable mysqld
  echo "mysqld服务启动成功"
else
  echo "服务启动失败,请检查mysql用户权限和配置文件"
fi

#免交互修改密码
yum -y install expect &> /dev/null
echo "数据库密码初始化为:123456"
/usr/bin/expect <<EOF
spawn mysqladmin -u root -p password
expect{
"Enter password: "
{ send "\r";exp_continue }
"New password"
{send "123456\r";exp_continue}
"Confirm new password"
{send "123456\r"}
}
expect eof
EOF
echo "MySQL安装完成"
}

#=============安装PHP服务===========================
php () {
#安装依赖环境
#安装GD库和GD库关联程序,用来处理和生成图片
yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

# 解压
cd /opt
tar jxvf php-7.1.10.tar.bz2
cd php-7.1.10

#编译 
./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

#安装
make && make install &> /dev/null

#调整主配置文件
cp php.ini-development /usr/local/php/lib/php.ini
sed -i "1170c mysqli.default_socket = /usr/local/mysql/mysql.sock" /usr/local/php/lib/php.ini
sed -i "939c date.timezone = Asia/Shanghai" /usr/local/php/lib/php.ini

#验证安装模块
/usr/local/php/bin/php -m

#配置及优化FPM模块
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
sed -i "17c pid = run/php-fpm.pid" /usr/local/php/etc/php-fpm.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf

#启动php-fpm服务
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
ln -s /usr/local/php/bin/* /usr/local/bin/
netstat -anpt | grep 9000
if [ $? -eq 0 ];then
echo "服务已开启"
else 
echo "服务未开启,请检查"
fi

#配置nginx让nginx支持PHP功能
echo "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/conf/nginx.conf
sed -i '45c index  index.html index.htm index.php;' /usr/local/nginx/conf/nginx.conf

#创建文件用于后面测试
#在/usr/local/nginx/html/目录下创建一个.php的文件
echo "<?php
phpinfo();
?>" >/usr/local/nginx/html/index.php
systemctl restart nginx

#下载免交互软件
yum -y install expect
/usr/bin/expect <<EOF
spawn mysql -u root -p
expect { 
"Enter password: "
{ send "123456\r" exp_continue;}
expect "mysql>" {send "CREATE DATABASE bbs;\r" exp_continue;}
expect "mysql>" {send "GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';\r" exp_continue;}
expect "mysql>" {send "GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';\r" exp_continue;} 
expect "mysql>" {send "flush privileges;\r" exp_continue;} 
expect "mysql>" {send "exit\r"}
}
expect eof
EOF

#替换php页面的内容 用于测试/usr/local/nginx/html/index.php文件
echo "<?php
$link=mysqli_connect('192.168.100.10','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>" > /usr/local/nginx/html/index.php

#重启nginx服务
systemctl restart nginx
echo"php服务安装好"
}

#===========================搭建论坛===============================
luntan () {

#安装论坛软件
cd /opt
unzip Discuz_X3.4_SC_UTF8.zip -d /tmp/
cd /tmp/dis/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/
}
#安装环境必须是4G内存,2核以上,运行脚本需要使用source进行执行,所需安装包
#需要放在/opt目录下,脚本可放在任意位置
#=====================main======几种函数================
nginx    #安装nginx服务
mysql    #安装mysql服务
php    #安装PHP服务
luntan    #安装论坛

在新建调用函数文件 /opt/Lnmp.sh
#!/bin/bash
source /opt/Lnmp.sh
nginx   
mysql    
php    
luntan

执行完后我们就可以在虚拟机访问:http://[主机ip]/bbs/install/index.php

LNMP源码编译安装及一键部署LNMP架构相关推荐

  1. LAMP源码编译安装及一键部署LAMP架构

    文章目录 一.什么是LAMP? 1.LAMP平台概述 2.构建LAMP平台顺序 3.编译安装的优点 4.各组件的主要作用 二.LAMP架构流向 三.编译安装Apache服务 1.先关闭防火墙 2.将软 ...

  2. 源码编译安装Apache-附一键部署脚本

    1.进入apache官网https://www.apache.org/,点击Download 2.如图选择 3.选择httpd 4.下载两个包,2.2为CentOS6使用,2.4为CentOS7使用 ...

  3. LNMP源码编译安装(centos7+nginx1.9+mysql5.6+php7)

    LNMP安装教程: 1.准备工作: 1)把所有的软件安装在/Data/apps/,源码包放在/Data/tgz/,数据放在/Data/data,日志文件放在/Data/logs,项目放在/Data/w ...

  4. 04_MySQL笔记-介绍-rpm安装/源码编译安装MySQL-远程连接

    文章目录 介绍 rpm方式安装MySQL 源码编译安装MySQL 一键安装脚本 远程连接 个人博客 https://blog.csdn.net/cPen_web 介绍 MySQL MySQL是一个数据 ...

  5. Linux LNMP源码架构部署 | Nginx服务 | Mysql服务 | php服务 | 论坛源码编译安装 | 超详细

    | Nginx服务 | Mysql服务 | php服务 | 论坛源码编译安装 | ➤安装 Nginx 服务 ➤1.关闭防火墙和安全机制 ➤2.卸载自带的httpd服务 ➤3.安装依赖包 ➤4.创建运行 ...

  6. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

    什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/Perl/Python组合成的动态Web应用程序和服务器,它是一组Web应用程序的基础 ...

  7. LNMP架构环境搭建之PHP、Nginx源码编译安装及其简单配置应用

    LNMP架构中的Mysql见上一篇博文"LNMP架构环境搭建之mysql源码编译安装" 一.PHP简介 PHP(外文名:PHP: Hypertext Preprocessor,中文 ...

  8. LNMP架构环境搭建之mysql源码编译安装

    Mysql MySQL是一个开源的数据库,在互联网行业应用的很广泛,下面来记录一下从源码编译安装的步骤,当然,MySQL也有其他安装方式,比如,使用yum下载安装rpm包,或者二进制方式安装,如果机器 ...

  9. centos lnmp源码安装mysql_CentOS 6.6 下源码编译安装MySQL 5.7.5

    说明:CentOS 6.6 下源码编译安装MySQL 5.7.5 1. 安装相关工具 # yum -y install gcc-c++ ncurses-devel cmake make perl \ ...

最新文章

  1. java中递归的概念_【Java】基础38:什么叫递归?
  2. leetcode 5077. 按列翻转得到最大值等行数(Flip Columns For Maximum Number of Equal Rows)
  3. cf1208E. Let Them Slide
  4. android一体机-迅为10.1寸用于售货机、人机界面、自动终端、触摸控制
  5. ubuntu linux固定ip设置,Ubuntu 配置静态IP
  6. java正则表达式匹配`\`
  7. Android下xml中RelativeLayout布局常见属性
  8. 为什么物理隔离的网络,也会中毒?怎么进行防护?
  9. ASP(Answer Set Programming)编程入门
  10. QQ坦白说闹得我差点分手,破解揪元凶证清白
  11. 记一次某制造业ERP系统 CPU打爆事故分析
  12. List集合和ArrayList集合源码
  13. netstat 的各个 state 什么意思
  14. 001 2G3G4G的网速平常的各是多少
  15. baidu进阶训练笔记九20200727
  16. patchwall 与鸿蒙对比,官方解读小米电视PatchWall智能电视系统设计的那些事儿
  17. Jperf2.0下载及使用方法介绍
  18. 软件测试的发展趋势怎么样?
  19. 毕业登记表批量打印参考代码
  20. js 国际化需求 获取当前时区

热门文章

  1. flex-basis
  2. python输出结果空格分割_使用Python分割ps的输出
  3. flowable简介
  4. 【Python】搭建内网pip服务
  5. Java:druid java.lang.IllegalArgumentException: Failed to decrypt
  6. Flink cdc+ doris 大宽表实践~
  7. C++字节转换 (byte转int 互转)(BCD和HEX转换)
  8. python 执行shellcode_执行shellcode的方法
  9. Robomaster C610+M2007+stm32组成伺服系统
  10. uglify的几个配置参数