暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

企业级LNMP环境部署实践

蜜蜂点滴 2020-04-04
424

一、LNMP介绍

1、介绍

LAMP:Linux Apache MySQL PHP。

LNMP:Linux Nginx MySQL PHP。

2、LNMP组合工作流程

    用户通过浏览器输入域名请求Nginx web 服务,

如果请求的是静态资源,则由Nginx解析返回给用户;

如果是动态请求(以.php结尾),那么Nginx就会把它通过FastCGI接口发送给PHP引擎服务(FastCGI进程php-fpm)进行解析;

如果这个动态请求要读取数据库,那么PHP就会继续向后请求MySQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户。

二、FastCGI介绍

1、介绍

    CGI(common Gateway Interface)通用网关接口。用于HTTP服务器与其他机器上的程序服务通信交流的一种工具,CGI程序必须运行在网络服务器上。

    FastCGI是一个可伸缩地,高速地在HTTP服务器和动态脚本语言间通信的接口,FastCGI接口采用C/S架构,它可以将HTTP服务器和脚本解析服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当HTTP服务器遇到动态程序时,可以将直接交给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一的处理静态请求,或者将动态脚本服务器的结果返回给客户端。

三、部署LNMP

1、安装数据库MySQL

(1)下载软件

# useradd mysql -s /sbin/nologin -M  #<==创建用户,安装时用到。

#id mysql  #<==检查mysql用户是否创建成功。

下载MySQL软件:

#cd /server/tools

# wget -q http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #<==下载二进制软件包

#ls -lsh #<==查看下载文件的大小615M。

(2)采用二进制安装

#tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.g #<==二进制安装包

#mkdir -p /application/ #<==创建安装路径。

#mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql-5.7.26

                                       #<==移动到安装路径。


# ln -s /application/mysql-5.7.26/ /application/mysql  #<==创建软连接

(3)初始化配置文件my.cnf

[root@web02/application/mysql]#find ./ -name ".cnf" #<==没有找到相应的配置文件。

系统的/etc/my.cnf 文件,是系统自动安装的mariadb库时自带,防止冲突要卸载。

#rpm -e --nodeps mariadb-libs;

             #<==卸载软件一定不能用yum,否则一些依赖包也被卸载,其他软件有可能也不可使用。

[root@web02/application/mysql]#vim /etc/my.cnf 

[mysqld]

basedir = /application/mysql/

datadir = /application/mysql/data

socket = /tmp/mysql.sock

server_id = 1

port = 3306

log_error = /application/mysql/data/error_mysql.err 

[mysql]

socket = /tmp/mysql.sock 

prompt = mifengdiandi [\\d]>

(4)初始化数据库

#yum install libaio-devel -y #<==安装mysql依赖包

#mkdir -p /application/mysql/data #<==创建数据库目录

#chown -R mysql.mysql /application/mysql/ #<==授权mysql用户管理mysql目录。

#/application/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/application/mysql/ --datadir=/application/mysql/data

没有提示表示安装成功。

(5)配置并启动mysql数据库

设置systemctl来管理服务:

#vim /etc/systemd/system/mysqld.service

[Unit]

Description=MySQL Server by mifengdiandi

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf

LimitNOFILE = 5000

#systemctl start mysqld     #<==启动服务

#systemctl enable mysqld #<==设置开机启动

#systemctl status mysqld  #<==查看服务状态

(6)查看服务是否启动

#lsof -i :3306

#ps -ef |grep mysqld

(7)查看错误日志

[root@web02/application/mysql/data]#cat error_mysql.err 

(8)配置MySQL命令的全局使用路径

#echo 'export PATH=/application/mysql/bin:$PATH'>>/etc/profile

#tail -1 /etc/profile #<==查看配置结果

#source /etc/profile #<==配置文件生效

(9)登录MySQL测试

#mysql    #<==还没设置密码,直接进入数据库

#mysqladmin -u root password '123456' #<==更改默认密码

#mysql -uroot -p #<==新的登录方式

快捷键ctrl+d 直接退出mysql>

2、PHP(FastCGI)服务安装

(1)检查安装PHP所需的lib库

PHP程序在开发及运行时会调用诸如zlib、gd等函数库。

#rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel

#rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

如果没有请安装:

#yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y

#yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y

仅缺少libiconw-devel,因为默认的yum源里没有此包,后面会编译安装。


①安装libiconw-devel库

#cd /server/tools                            #<==下载到规范目录下

#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz

                                                           #<==下载libiconw-devel

#tar zxf libiconv-1.16.tar.gz

#cd ./libiconv-1.16

#make

#make install

②安装libmcrypt库

这是一个使用动态加载的模块化的libmcrypt,libmcrypt对于在程序运行时添加/移除算法是有用的。

官网已经不再被支持,先配置第三方域名源

#wget -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum install libmcrypt-devel -y

③安装Mhash加密扩展库

Mhash是基于离散数学原理不可逆向的PHP加密方式扩展库,其在默认情况下不会开启。Mhash可以用于创建校验数值,消息摘要,消息认证码,以及无须原文的关键信息保存(密码)等。

#yum install libmcrypt-devel -y

#rpm -qa libmcrypt-devel -y

④安装Mcrypt加密扩展库

Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以将密文还原。可以说,Mcrypt是PHP里面重要的加密支持扩展库,该库在默认情况下不开启。

#yum install mhash -y 

#rpm -qa mhash

(2)安装PHP(FastCGI方式)服务

①下载软件,安装前准备

#cd /server/tools

#wget -q http://mirrors.sohu.com/php/php-7.3.5.tar.gz

#ls -lsh php-7.3.5.tar.gz

#tar xf php-7.3.5.tar.gz

#cd ./php-7.3.5

#mkdir -p /application/php7.3.5

②编译参数

[root@web02/server/tools/php-7.3.5]#./configure \

--prefix=/application/php7.3.5 \

--enable-mysqlnd  \

--with-mysqli=mysqlnd \

--with-pdo-mysql=mysqlnd \

--with-iconv-dir=/application/libiconv \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--disable-rpath \

--enable-bcmath \

--enable-shmop \

--enable-sysvsem \

--enable-inline-optimization \

--with-curl \

--enable-mbregex \

--enable-fpm \

--enable-mbstring \

--with-gd \

--with-openssl \

--with-mhash \

--enable-pcntl \

--enable-sockets \

--with-xmlrpc \

--enable-soap \

--enable-short-tags \

--enable-static \

--with-xsl \

--with-fpm-user=wwww \

--with-fpm-group=wwww \

--enable-ftp \

--enable-opcache=no

备注:--with-fpm-user与--with-fpm-group的用户及组,最好和配置Nginx时用户及组一致。

③编译安装

[root@web02/server/tools/php-7.3.5]#make

[root@web02/server/tools/php-7.3.5]#make install

[root@web02/server/tools/php-7.3.5]#echo $?

0                                                           #<==返回0表示正确。

#ln -s /application/php7.3.5/ /application/php#<==创建软连接

(3)配置php.ini

[root@web02/server/tools/php-7.3.5]#ls -l php.ini*

[root@web02/server/tools/php-7.3.5]#cp php.ini-development /application/php/lib/php.ini

(4)配置PHP服务(FastCGI模式)配置文件php-fpm.conf

# cd /application/php/etc/

# ls

# cp php-fpm.conf.default php-fpm.conf

# cp php-fpm.d/www.conf.default php-fpm.d/www.conf


(5)启动服务

#/application/php/sbin/php-fpm

四、配置Nginx以支持PHP程序请求访问

(1)子配置文件

[root@web02/application/nginx/conf/extra]#cat 04_blog.conf 

server {

        listen       80;

        server_name  blog.etiantian.org;

        location / {

            root   html/blog;

            index  index.html index.htm;

        }

        location ~ .*\.(php|php5)?$ {

            root html/blog;

            fastcgi_pass  127.0.0.1:9000;

            fastcgi_index index.php;

            include fastcgi.conf;

        }

    }

(2)主配置文件

(3)写简单的.php。

[root@web02/application/nginx/html/blog]# echo "<?php phpinfo(); ?>" >test_info.php

[root@web02/application/nginx/html/blog]#vim 

 test_mysql.php 

<?php

//$link_id=mysqli_connect('主机名','用户','密码');

    $link_id=mysqli_connect('localhost','root','123456') or mysql_error();

    if($link_id){

        echo "mysql successful.\n";

    }else{

        echo mysql_error();

    }

?>

(4)重启Nginx服务

#nginx -t

#nginx -s reload

(5)hosts文件添加解析(服务器和客户端都添加)

192.168.40.143 blog.mifengdiandi.xyz

Linux:#vim /etc/hosts

Windows:C:\Windows\System32\drivers\etc\hosts

(6)测试

①浏览器输入:http://blog.mifengdiandi.xyz/test_info.php

浏览器输入:http://blog.mifengdiandi.xyz/test_mysqlphp

数据库连接也成功。

LNMP搭建成功。


补充:设置开机启动

#vim /etc/rc.d/rc.local 

/application/php/sbin/php-fpm

/application/nginx/sbin/nginx

#chmod +x /etc/rc.d/rc.local

文章转载自蜜蜂点滴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论