目录
一、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.phpDiscuz! 安装向导
#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)