Bootstrap

LNMP部署及应用

目录

1.LNMP概述

Nginx 特点

Nginx 作用

2.分布式部署LNMP操练

 Nginx主机:CentOS 7-1

PHP主机:  CentOS 7-2 


1.LNMP概述

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。 

Nginx 特点

  • 高并发、高性能;

  • 模块化架构使得它的扩展性非常好;

  • 异步非阻塞的事件驱动模型这点和 Node.js 相似;

  • 相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性;

  • 热部署、平滑升级;

  • 完全开源,生态繁荣;

Nginx 作用

Nginx 的最重要的几个使用场景:

  1. 静态资源服务,通过本地文件系统提供服务;

  2. 反向代理服务,延伸出包括缓存、负载均衡等;

  3. API 服务, OpenResty ;

对于前端来说 Node.js 并不陌生, Nginx 和 Node.js 的很多理念类似, HTTP 服务器、事件驱动、异步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以实现,但 Nginx 和 Node.js 并不冲突,都有自己擅长的领域。 Nginx 擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js 更擅长上层具体业务逻辑的处理,两者可以完美组合。

用一张图表示:

图片

2.分布式部署LNMP操练

实验准备:

Nginx主机:CentOS 7-1

PHP主机:  CentOS 7-2

MYSQL主机:CentOS 7-5

(1)实现部署

关闭三台主机的防火墙

 查看挂载

 CentOS 7-5:mysql

编译安装 

创建mysql用户

useradd -M -s /sbin/nologin  mysql

  修改mysql配置文件

[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash

[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=4096
default-storage-engine=INNODB
max_allowed_packet=32M
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

设置路径环境变量 

[root@localhost local]# cd mysql/bin/
[root@localhost bin]# pwd
/usr/local/mysql/bin
[root@localhost bin]# ls
innochecksum       mysqlcheck                  mysqlimport                mysql_tzinfo_to_sql
lz4_decompress     mysql_client_test           mysql_install_db           mysql_upgrade
myisamchk          mysql_client_test_embedded  mysql_plugin               mysqlxtest
myisam_ftdump      mysql_config                mysqlpump                  perror
myisamlog          mysql_config_editor         mysql_secure_installation  replace
myisampack         mysqld                      mysqlshow                  resolveip
my_print_defaults  mysqld_pre_systemd          mysqlslap                  resolve_stack_dump
mysql              mysqldump                   mysql_ssl_rsa_setup        zlib_decompress
mysqladmin         mysqldumpslow               mysqltest
mysqlbinlog        mysql_embedded              mysqltest_embedded
[root@localhost bin]# vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib

 

 

数据库初始化操作 

cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \				#生成初始化密码为空
--user=mysql \                      #指定管理用户
--basedir=/usr/local/mysql \        #指定数据库的安装目录
--datadir=/usr/local/mysql/data		#指定数据库文件的存储路径

添加mysqld系统服务 

cp mysqld.service /usr/lib/systemd/system		#用于systemctl服务管理
systemctl daemon-reload         #刷新识别     
systemctl start mysqld.service  #开启服务
systemctl enable mysqld         #开机自启动
netstat -anpt | grep 3306       #查看端口

登录数据库

 

 Nginx主机:CentOS 7-1

[root@localhost yum.repos.d]# cd /opt/
[root@localhost opt]# ls
nginx-1.26.1.tar.gz
[root@localhost opt]# tar xf nginx-1.26.1.tar.gz
[root@localhost opt]# ls
nginx-1.26.1  nginx-1.26.1.tar.gz
[root@localhost opt]# cd nginx-1.26.1/
[root@localhost nginx-1.26.1]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@localhost nginx-1.26.1]# yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
local                                                                  | 3.6 kB  00:00:00     
软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本


安装依赖包
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make


[root@localhost nginx-1.26.1]# useradd -M -s /sbin/nologin nginx  #创建nginx用户

[root@localhost nginx-1.26.1]# useradd -M -s /sbin/nologin nginx
[root@localhost nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module 
[root@localhost nginx-1.26.1]# make -j 2
[root@localhost nginx-1.26.1]# make install #编译安装

 创建软链接

[root@localhost nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

添加 Nginx 系统服务 

[root@localhost nginx]# cd /usr/lib/systemd/system
[root@localhost system]# vim nginx.service
[root@localhost system]# systemctl start nginx.service
[root@localhost system]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@localhost system]# netstat -lntp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7207/nginx: master  

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

 配置 nginx 支持 PHP 解析

worker_processes  auto;
worker_rlimit_nofile 65535;
server {
        listen       80;
        server_name  www.xy101.com;

        charset utf-8;
    location ~ \.php$ {
            root           /var/www/html;
            fastcgi_pass   192.168.80.40:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /$document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

[root@localhost conf]# 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
[root@localhost conf]# systemctl restart nginx

 

 验证PHP 测试页 

[root@localhost conf]# mkdir -p /var/www/html
[root@localhost conf]# cd /var/www/html  #动态页面的目录
[root@localhost html]# ls
[root@localhost html]# vim test.php
<?php
phpinfo();
?>

访问静态页面 

 

 

 安装rpcbind

 

创建论坛

(1)解压

(2) 调整论坛目录的权限

[root@localhost html]# chown -R nginx:nginx discuz/
[root@localhost html]# ll
总用量 12
drwxr-xr-x 13 nginx nginx 4096 5月  30 18:36 discuz
-rw-r--r--  1 root  root   151 5月  30 17:44 mysql.php
-rw-r--r--  1 root  root    20 5月  30 15:33 test.php

PHP主机:  CentOS 7-2 

 解压缩安装包

 安装环境依赖包

安装环境依赖包
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

 编译安装

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

 

 路径优化

路径优化
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/

 调整PHP配置文件

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

#调整主配置文件:
cp php.ini-production /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


[root@localhost php-7.1.10]# cp php.ini-production /usr/local/php/lib/php.ini
[root@localhost php-7.1.10]# cd /usr/local/php/lib/
[root@localhost lib]# ls
php  php.ini
[root@localhost lib]# vim php.ini

 

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

 此处不修改成php

 

启动php-fpm

/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep php

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

cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/
systemctl restart php-fpm.service

 验证数据库工作是否正常

[root@localhost fpm]# cd /var/www/html/
[root@localhost html]# ls
test.php
[root@localhost html]# vim mysql.php
<?php
$link=mysqli_connect('192.168.80.50','root','abc123');
if($link) echo "<h1>mysql connect Success!!</h1>";
else echo "mysql connect :Fail!!";
?>

测试如果mysql账户密码填错 

 

挂载

[root@localhost php-7.1.10]# showmount -e 192.168.80.30
Export list for 192.168.80.30:
/var/www/html 192.168.80.0/24
[root@localhost php-7.1.10]# vim /etc/fstab
[root@localhost php-7.1.10]# mkdir /var/www/html -p
[root@localhost php-7.1.10]# mount -a
[root@localhost php-7.1.10]# df -h
文件系统                     容量  已用  可用 已用% 挂载点
devtmpfs                     1.9G     0  1.9G    0% /dev
tmpfs                        1.9G     0  1.9G    0% /dev/shm
tmpfs                        1.9G   13M  1.9G    1% /run
tmpfs                        1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root       36G  5.9G   30G   17% /
/dev/sda1                    509M  181M  329M   36% /boot
tmpfs                        378M   12K  378M    1% /run/user/42
tmpfs                        378M     0  378M    0% /run/user/0
/dev/sr0                     4.5G  4.5G     0  100% /mnt
192.168.80.30:/var/www/html   36G  5.6G   30G   16% /var/www/html
192.168.80.30:/var/www/html /var/www/html nfs defaults,_netdev 0 0

 

;