LNMP架构搭建

目录

一、LNMP工作原理

1、LNMP工作原理

2、LAMP工作原理

3、LAMP和LNMP的区别

二、LNMP部署

1.安装 Nginx 服务

1、安装依赖包

2、创建运行用户

3、编译安装

4、优化路径

5、添加 Nginx 系统服务

          2.安装 MySQL服务

1、安装Mysql环境依赖包

2、创建运行用户

3、编译安装

5、更改mysql安装目录和配置文件的属主属组

6、设置路径环境变量  

7、初始化数据库

8、添加mysql系统服务

9、修改mysql 的登录密码

10、授权远程登录

3.安装配置 PHP 解析环境

1、安装环境依赖包重新开始

2、编译安装

                  3、路径优化

4、调整PHP配置文件

5、启动php-fpm

6、配置 Nginx 支持 PHP 解析 修改配置

7、验证PHP 测试页

8、验证数据库工作是否正常

三、部署Discuz论坛


一、LNMP工作原理

1、LNMP工作原理

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

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

2、LAMP工作原理

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

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

3、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中的一个模块。

二、LNMP部署

准备三台虚拟机。192.168.9.210作为nginx,192.168.9.140安装mysql,192.168.9.120安装php
三台虚拟机先做初始化操作
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#关闭防火墙
mount /dev/sr0 /mnt
#挂载
7-2(完成)  7-7()  7-5()

1.安装 Nginx 服务

1、安装依赖包

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

2、创建运行用户

useradd -M -s /sbin/nologin nginx

3、编译安装

cd /opt
#上传nginx压缩包并解压
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
#编译安装
make && make install

4、优化路径

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

5、添加 Nginx 系统服务

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#服务启动停止管理配置

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

2.安装 MySQL服务

1、安装Mysql环境依赖包

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

2、创建运行用户

useradd -M -s /sbin/nologin  mysql

3、编译安装

cd /opt
tar zxvf mysql-boost-5.7.20.tar.gz

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_EXTRA_CHARSETS=all \
-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 && make install

4、修改mysql 配置文件

vim /etc/my.cnf
[client]
port = 3306
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
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
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


5、更改mysql安装目录和配置文件的属主属组

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf


6、设置路径环境变量  

vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
#添加目录到全局变量
source /etc/profile



7、初始化数据库

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

8、添加mysql系统服务

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

systemctl daemon-reload

systemctl start mysqld.service

systemctl enable mysqld

9、修改mysql 的登录密码

mysqladmin -u root -p password "abc123"

10、授权远程登录

mysql -u root -pabc123

3.安装配置 PHP 解析环境

1、安装环境依赖包重新开始

yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel pcre-devel

2、编译安装

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

3、路径优化

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

4、调整PHP配置文件

php有三个配置文件: 
php.ini			主配置文件  
php-fpm.conf	进程服务配置文件 
www.conf		扩展配置文件

#调整主配置文件:
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini	
vim /usr/local/php/lib/php.ini
--1170行--修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
--939行--取消注释,修改
date.timezone = Asia/Shanghai

php -m 					#验证安装的模块

#调整进程服务配置文件:
cd /usr/local/php/etc/
cp  php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid

#调整扩展配置文件:
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf

调整主配置文件:



调整进程服务配置文件:


调整扩展配置文件:




5、启动php-fpm

cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl daemon-reload
systemctl start php-fpm.service 
systemctl enable php-fpm.service 

6、配置 Nginx 支持 PHP 解析 修改配置

vim /usr/local/nginx/conf/nginx.conf
--65行--取消注释,修改
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;	#将 /scripts 修改为nginx的工作目录
   #fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;  #$document_root 代表当前请求在root指令中指定的值
	include        fastcgi_params;
}

systemctl restart nginx.service




7、验证PHP 测试页

vim /var/www/html/test.php
<?php
phpinfo();
?>

浏览器访问
http://192.168.80.10/index.php

动态页面目录

静态页面目录

测试nginx与php是否相通

静态:

动态:

#nginx虚拟机配置
[root@192 html]# cd /var/www/html
[root@192 html]# ls
test.php
/var/www/html
[root@192 html]# yum install -y rpcbind nfs-utils
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 rpcbind-0.2.0-49.el7.x86_64 已安装并且是最新版本
软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 已安装并且是最新版本
无须任何处理
[root@192 html]# vim /etc/exports

/var/www/html 192.168.9.0/24(rw,sync,no_root_squash)
#配置完成保存退出
[root@192 html]# systemctl enable --now rpcbind nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@192 html]# showmount -e
Export list for 192.168.9.210:
/var/www/html 192.168.9.0/24


#php虚拟机操作
[root@192 fpm]# showmount -e 192.168.9.210
Export list for 192.168.9.210:
/var/www/html 192.168.9.0/24
[root@192 fpm]# vim /etc/fstab


#
# /etc/fstab
# Created by anaconda on Wed Apr  3 05:42:53 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=5a2d5435-b24c-4838-a524-7a3f8afc6c7d /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
#添加以下一行配置
192.168.9.210:/var/www/html  /var/www/html  nfs  defaults,_netdev 0  0
[root@192 fpm]# mkdir /var/www/html -p
[root@192 fpm]# mount -a
[root@192 fpm]# df
文件系统                       1K-块    已用     可用 已用% 挂载点
devtmpfs                     1913552       0  1913552    0% /dev
tmpfs                        1930628       0  1930628    0% /dev/shm
tmpfs                        1930628   20976  1909652    2% /run
tmpfs                        1930628       0  1930628    0% /sys/fs/cgroup
/dev/mapper/centos-root     36805060 6155348 30649712   17% /
/dev/sda1                    1038336  191088   847248   19% /boot
tmpfs                         386128      36   386092    1% /run/user/0
/dev/sr0                     4635056 4635056        0  100% /mnt
192.168.9.210:/var/www/html 36805120 4831232 31973888   14% /var/www/html
[root@192 fpm]# ls /var/www/html
test.php
                                                     

8、验证数据库工作是否正常

#mysql虚拟机操作
mysql -u root -pabc123
grant all on *.* to 'root'@'%' identified by 'abc123';
flush privileges;
quit

#php虚拟机操作
vim /var/www/html/mysql.php
<?php
$link=mysqli_connect('192.168.9.140','root','abc123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>


浏览器访问
http://192.168.80.10/index.php

#mysql虚拟机操作
[root@192 bin]# cd /usr/local/mysql
[root@192 mysql]# ls
bin   include  man         mysql.sock.lock  README-test    usr
data  lib      mysqld.pid  mysql-test       share
docs  LICENSE  mysql.sock  README           support-files
[root@192 mysql]# vim /etc/exports
[root@192 mysql]# vim /etc/exports

/usr/local/mysql 192.168.9.0/24(rw,sync)
#配置完成保存并退出
[root@192 mysql]# systemctl enable --now rpcbind nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@192 mysql]# showmount -e
Export list for 192.168.9.140:
/usr/local/mysql 192.168.9.0/24

#php虚拟机操作
[root@192 html]# showmount -e 192.168.9.140
Export list for 192.168.9.140:
/usr/local/mysql 192.168.9.0/24
[root@192 html]# mkdir /usr/local/mysql -p
[root@192 html]# mount 192.168.9.140:/usr/local/mysql /usr/local/mysql[root@192 html]# cd /usr/local/mysql
[root@192 mysql]# ls
bin   include  man         mysql.sock.lock  README-test    usr
data  lib      mysqld.pid  mysql-test       share
docs  LICENSE  mysql.sock  README           support-files
[root@192 mysql]# cd /usr/local/php
[root@192 php]# ls
bin  etc  include  lib  php  sbin  var
[root@192 php]# cd lib
[root@192 lib]# ls
php  php.ini
[root@192 lib]# vim php.ini
#1170行
mysqli.default_socket = /usr/local/mysql/mysql.sock
#保存退出
systemctl restart php-fpm.service

#http://192.168.9.210/mysql.php 页面测试

测试php与mysql是否相同

三、部署Discuz论坛

#php虚拟机操作
[root@192 opt]# cd /usr/local/php/etc/php-fpm.d/
[root@192 php-fpm.d]# ls
www.conf  www.conf.default
[root@192 php-fpm.d]# useradd -M -s /sbin/nologin/ nginx
[root@192 php-fpm.d]# vim www.conf
#23.24行修改
23 user = nginx
24 group = nginx
[root@192 php-fpm.d]# systemctl restart php-fpm.service 


#nginx虚拟机操作
cd /opt
上传Discuz_X3.4_SC_UTF8.zip压缩包
unzip Discuz_X3.4_SC_UTF8.zip
[root@192 opt]# ls
dir_SC_UTF8              nginx-1.26.0         rh
Discuz_X3.4_SC_UTF8.zip  nginx-1.26.0.tar.gz  说明.htm
[root@192 opt]# cd dir_SC_UTF8
[root@192 dir_SC_UTF8]# ls
readme  upload  utility
[root@192 dir_SC_UTF8]# cp -r upload/ /var/www/html/discuz
[root@192 dir_SC_UTF8]# cd /var/www/html
[root@192 html]# ls
discuz  mysql.php  test.php
[root@192 html]# chown -R nginx:nginx discuz
[root@192 html]# ll
总用量 12
drwxr-xr-x. 13 nginx nginx 4096 5月  29 21:43 discuz
-rw-r--r--.  1 root  root   130 5月  29 21:13 mysql.php
-rw-r--r--.  1 root  root    20 5月  29 19:54 test.php
[root@192 html]# vim /usr/local/nginx/conf/nginx.conf
#47行下面添加
          location /discuz {
             root   /var/www/html;
             index  index.php;
          }
#保存退出
[root@192 html]# systemctl restart nginx.service

论坛页面访问
http://192.168.9.210/discuz/install/index.php
Discuz! 安装向导

#php虚拟机操作
[root@192 php-fpm.d]# cd /var/www/html
[root@192 html]# ll
总用量 12
drwxr-xr-x. 13 php  xy101 4096 5月  29 21:43 discuz
-rw-r--r--.  1 root root   130 5月  29 21:13 mysql.php
-rw-r--r--.  1 root root    20 5月  29 19:54 test.php
[root@192 html]# chown -R nginx:nginx discuz
[root@192 html]# ll
总用量 12
drwxr-xr-x. 13 nginx nginx 4096 5月  29 21:43 discuz
-rw-r--r--.  1 root  root   130 5月  29 21:13 mysql.php
-rw-r--r--.  1 root  root    20 5月  29 19:54 test.php


 

#mysql虚拟机操作
[root@192 mysql]# mysql -u root -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.44 Source distribution

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database discuz;
Query OK, 1 row affected (0.00 sec)

mysql> show database;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| discuz             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)
mysql> grant all on discuz.* to 'tc'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


  • 43
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值