(源码安装)LNMP架构及应用部署

LNMP架构及应用部署

1、部署Nginx 软件
2、安装Mysql数据库(源码安装)
3、安装PHP解析环境
4、配置Nginx支持PHP环境
5、LNMP平台中部署WEB应用

LNMP也称为LEMP,E来自于Nginx的发音[engine x]
LNMP就像构建LAMP平台一样,构建LNMP平台也需要用到Linux服务器,MySQL数据库,PHP解释环境等应用。P(PHP、Perl、Python)

1、部署Nginx 软件

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

[root@nginx ~]# systemctl stop firewalld
[root@nginx ~]# iptables -F
[root@nginx ~]# setenforce 0

[root@nginx ~]# yum -y install pcre-devel zlib-devel openssl-devel

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

[root@nginx ~]# useradd -M -s /sbin/nologin nginx

3)编译安装nginx:
释放nginx源码包

[root@nginx ~]#rz 
nginx-1.14.2.tar.gz 

[root@nginx ~]# tar xf nginx-1.14.2.tar.gz -C /usr/src/

4)配置编译:

[root@nginx ~]# cd /usr/src/nginx-1.14.2/
[root@nginx nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module && make && make install

注:配置前可以参考:./configure --help给出说明
–prefix 设定Nginx的安装目录
–user和–group 指定Nginx运行用户和组
–with-http_stub_status_module 启用http_stub_status_module模块以支持状态统计
–with-http_ssl_module 启用SSL模块
–with-http_flv_module 启用FLV模块,提供寻求内存使用基于时间的偏移量文件

为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行nginx命令就可以调用Nginx的主程序。

[root@nginx nginx-1.14.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@nginx nginx-1.14.2]# ll /usr/local/bin/nginx 
lrwxrwxrwx 1 root root 27 12-29 07:24 /usr/local/bin/nginx -> /usr/local/nginx/sbin/nginx

5)Nginx的运行控制:
与Apache的主程序httpd类似,Nginx的主程序也提供了" -t “选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录/usr/local/nginx/conf/目录中。若要检查位于其他位置的配置文件,可使用”-c"选项来指定路径。

[root@nginx 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

6)启动、停止Nginx–80端口:
直接运行nginx即可启动Nginx服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加"-c 配置文件路径"选项来指定路径。需要注意的是,若服务器中已安装有httpd等其他WEB服务软件,应采取措施(修改端口,停用或卸载其他软件)避免部突。

[root@nginx conf]# netstat -anpt |grep :80
[root@nginx conf]# nginx
[root@nginx conf]# netstat -anpt |grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      6810/nginx: master  

通过检查 Nginx程序的监听状态,或者在浏览器中访问此WEB服务(默认页面将显示"Welcome to nginx!"),可以确认Nginx服务是否正常运行。
在这里插入图片描述

2、安装Mysql数据库–基于源码方式安装

1)基于源码包安装MySQL
检查是否有rpm格式的安装包

[root@nginx ~]# rpm -e mysql mysql-server mariadb mariadb-server --nodeps

安装 ncurses-devel

root@nginx ~]# yum -y install ncurses-devel
[root@nginx ~]# rpm -q ncurses-devel
ncurses-devel-5.9-14.20130511.el7_4.x86_64

ncurses-devel是cmake的依赖包
建议采用yum安装方式

[root@nginx ~]# yum -y install cmake
[root@nginx ~]# rpm -q cmake
cmake-2.8.12.2-2.el7.x86_64

创建运行用户

[root@nginx ~]# useradd -M -s /sbin/nologin mysql

解包,配置,编译,安装

[root@nginx ~]# tar xf mysql-5.7.24.tar.gz -C /usr/src/
[root@nginx ~]# cd /usr/src/mysql-5.7.24/
[root@nginx mysql-5.7.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc && make && make install

解释:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql //数据库程序安装目录
-DDEFAULT_CHARSET=utf8 //指定字符集编码
-DDEFAULT_COLLATION=utf8_general_ci //默认的字符集校对规则,utf8_general_ci适用于utf-8字符集的通用规则
-DWITH_EXTRA_CHARSETS=all //指定额外支持的字符集编码
-DSYSCONFDIR=/etc //指定配置文件存放目录

报错处理:(无报错则跳过)
------------------------------------------------------------------------------CMake Error at cmake/boost.cmake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=

This CMake script will look for boost in . If it is not there,
it will download and unpack it (in that directory) for you.

If you are inside a firewall, you may need to use an http proxy:

export http_proxy=http://example.com:80

Call Stack (most recent call first):
cmake/boost.cmake:238 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:507 (INCLUDE)

– Configuring incomplete, errors occurred!
See also “/usr/src/mysql-5.7.24/CMakeFiles/CMakeOutput.log”.
See also “/usr/src/mysql-5.7.24/CMakeFiles/CMakeError.log”.

解决办法:
a.在/usr/local下创建一个名为boost的文件夹

[root@nginx ~]# mkdir /usr/local/boost

b.进入目录并下载boost

[root@nginx ~]# cd /usr/local/boost
[root@nginx boost]# wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

c.解压boost

[root@nginx boost]# tar xf boost_1_59_0.tar.gz 

d.继续cmake,添加上-DWITH_BOOST=/usr/local/boost

[root@nginx ~]# cd /usr/src/mysql-5.7.24/
[root@nginx mysql-5.7.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc -DWITH_BOOST=/usr/local/boost && make && make install

2)安装后的调整
对数据库目录进行权限设置

[root@nginx ~]# cd /usr/local/mysql/
[root@nginx mysql]# chown -R mysql:mysql ./

建立配置文件(CentOS7系统默认支持MariaDB数据库,系统默认的/etc/my.cnf配置文件是MariaDB的配置文件 )

[root@nginx mysql]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock

[mysqld_safe]
log-error=/usr/local/mysql/data/mysql.log
pid-file=/usr/local/mysql/data/mysql.pid

3)初始化数据库–
记住生产的随机密码TvC:Rm1ZlxtG

[root@nginx mysql]# ./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
2020-05-11 T01:51:39.798903Z 1 [Note] A temporary password is generated for root@nginx: TvC:Rm1ZlxtG

–basedir=/usr/local/mysql/ //指定安装目录(产品目录)
–datadir=/usr/local/mysql/data //指定数据目录
–user=mysql //指定用户身份

4)设置环境变量

[root@nginx mysql-5.7.24]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@nginx mysql-5.7.24]# . /etc/profile = source /etc/profile

5)添加系统服务

[root@localhost mysql-5.7.24]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql-5.7.24]# chmod +x /etc/init.d/mysqld
[root@localhost mysql-5.7.24]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/mysql.log'.
 SUCCESS!

后期修改数据库用户的密码:

[root@nginx ~]# mysqladmin -u root -p'TvC:Rm1ZlxtG' password '123456'

3、安装PHP解析环境

较新版本(如5.6)的PHP已经自带FPM(fastCGI process manager,FastCGI进程管理器)模块,用来对PHP解析实例进行管理,优化解析效率,因此在配置PHP编译选项时应添加"–enable-fpm"以启用此模块。

1)编译安装php

[root@nginx ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel
[root@nginx ~]#rz

[root@nginx ~]# tar xf php-5.6.39.tar.gz -C /usr/src/
[root@nginx ~]# cd /usr/src/php-5.6.39/
[root@nginx php-5.6.39]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib && make && make install

2)安装后的调整

[root@nginx php-5.6.39]# cp php.ini-production /usr/local/php5/php.ini
[root@nginx php-5.6.39]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@nginx php-5.6.39]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/

3)为了提高PHP解析效率,建议将相应版本的ZendGuardLander也装上。
安装ZendGuardLander(注意:若是64位系统,该软件得到其官网下载64位的相应软件包,若用32位的就会报错。下载地址:http://www.zend.com/en/products/guard/downloads

[root@nginx ~]#rz

[root@nginx ~]# tar xf zend-loader-php5.6-linux-x86_64_update1.tar.gz -C /usr/src/
[root@nginx ~]# cd /usr/src/zend-loader-php5.6-linux-x86_64/
[root@nginx zend-loader-php5.6-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/ 

[root@nginx zend-loader-php5.6-linux-x86_64]# vim /usr/local/php5/php.ini
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1

4、配置Nginx支持PHP环境–选用php-fpm模块调用

若要让Nginx能够解析PHP网页,有两种方法可以选择;其一:Nginx充当中介,将访问PHP页面的WEB请求转交给其他服务器(LAMP)去处理;其二:通过使用PHP的FPM模块来调用本机的PHP环境。

如果选用FPM方式,则需要先启动php-fpm进程,以便监听PHP解析请求。参考范例建立php-fpm.conf配置文件,并修改其中的PID文件、运行用户、服务数(进程数量)等相关设置,然后启动php-fpm程序即可(默认监听本机的9000端口)

[root@nginx ~]# cd /usr/local/php5/etc/
[root@nginx etc]# cp php-fpm.conf.default php-fpm.conf
[root@nginx etc]# useradd -M -s /sbin/nologin php
[root@nginx etc]# vim php-fpm.conf
 25 pid = run/php-fpm.pid		//确认pid文件位置
 149 user = php				//运行用户
 150 group = php				//运行组
 246 pm.start_servers = 20		//启动时开启的进程数
 251 pm.min_spare_servers = 5	//最少空闲进程数
 256 pm.max_spare_servers = 35	//最大空闲进程数
 241 pm.max_children = 50		//最多空闲进程数

[root@nginx etc]# /usr/local/sbin/php-fpm
[root@nginx etc]# netstat -anpt |grep php-fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      23027/php-fpm.conf) 

在php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,对应的实际路径为/usr/local/php5/var/run/php-fpm.pid,根据上述信息,可以修改Nginx服务脚本,以便在启动/停止Nginx服务器时将php-fpm进程也自动启动/停止。

[root@nginx etc]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Server Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
PROG_FPM="/usr/local/sbin/php-fpm"
PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"
case "$1" in
start)
	$PROG 
	$PROG_FPM
;;
stop)
	kill -s QUIT $(cat $PIDF)
	kill -s QUIT $(cat $PIDF_FPM)
;;
restart)
	$0 stop
	$0 start
;;
reload)
	kill -s HUP $(cat $PIDF)
;;
*)
	echo "Usage: $0 (start|stop|restart|reload)"
	exit 1
esac
exit 0

这样,一旦启动或关闭nginx服务,php-fpm程序也会随之启动或关闭,不需要额外再启动或关闭php-fpm.

配置Nginx支持PHP解析:

无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行解析,都需要在"server{}"配置段中添加location设置,以便指定当访问.php面页时采取何种操作。

对于第二种方法(调用本机的php-fpm进程),使用的配置语句如下所示。在conf/目录下的fastcgi.conf文件中已经包含必需的宏设置,可通过include语句添加进来。


[root@nginx etc]# vim /usr/local/nginx/conf/nginx.conf

server {
…… //省略部分信息
location / {
            root   html;
            index  index.php index.html index.htm;
        }
location ~ \.php$ { 				//访问php页面的配置段
root html; 					//PHP网页文档根目录
fastcgi_pass 127.0.0.1:9000; 	//php-fpm的监听地址
fastcgi_index index.php; 		//PHP首页文件
include fastcgi.conf; 			//包括fastcgi.conf样本配置
}
}

本文档中我选择的是第二种方法,完成修改后重新加载nginx服务即可生效。

[root@nginx etc]# killall -HUP nginx

在PHP文档根目录下创建一个测试网页,以便测试PHP语名能否正常解析,以及能否访问MYSQL数据库。测试页内容如下 :

[root@nginx ~]# vim /usr/local/nginx/html/php.php
<?php
phpinfo();
?>

在这里插入图片描述

[root@nginx etc]# vim /usr/local/nginx/html/mysql.php
<?php
$link=mysqli_connect('localhost','root','123456');	//连接mysql数据库
if($link) echo "<h1>恭喜你,大功告成!!</h1>";	//连接成功则返回信息
mysqli_close();								//关闭数据库连接
?>

在这里插入图片描述

5、LNMP平台中部署WEB应用

LNMP平台与LAMP平台是非常相似的,区别主要在于所用WEB服务软件的不同,而这与使用PHP开发的WEB应用程序并无太大关系,因此PHP应用的部署方法也是类似的。

部署ComsenzDiscuz BBS论坛系统
Discuz!社区论坛是一个采用PHP与MySQL等多种数据库构建的性能优异,功能全面的且安全稳定的社区论坛(BBS)软件,其官方网站为http://www.discuz.net

[root@nginx ~]#rz

[root@nginx ~]# unzip ComsenzDiscuz-DiscuzX-master.zip 
[root@nginx ~]# cd DiscuzX/
[root@nginx DiscuzX]# ls upload/
admin.php api.php config crossdomain.xml favicon.ico group.php index.php m misc.php portal.php search.php static uc_client
api archiver connect.php data forum.php home.php install member.php plugin.php robots.txt source template uc_server

上传bbs代码:

[root@nginx DiscuzX]# mv upload/ /usr/local/nginx/html/bbs

浏览器访问 http://192.168.200.111/bbs/install/index.php
在这里插入图片描述

设置权限及模板文件

[root@nginx ~]# cd /usr/local/nginx/html/bbs/config/
[root@nginx config]# cp config_global_default.php config_global.php
[root@nginx config]# cp config_ucenter_default.php config_ucenter.php

[root@nginx ~]# cd /usr/local/nginx/html/bbs
[root@nginx bbs]# chmod -R 777 config/ data/ uc_client/ uc_server/

在这里插入图片描述

准备数据库并配置相关授权

[root@nginx ~]# mysql -uroot -p123456
mysql> create database bbs;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on bbs.* to 'bbs'@'localhost' identified by 'bbs123456';
Query OK, 0 rows affected, 1 warning (0.07 sec)

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

在这里插入图片描述

修改nginx的配置文件,使直接访问ip即可进入论坛界面

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
user  nginx nginx;
worker_processes  2; //自身工作的核心数

error_log  logs/error.log;
pid        logs/nginx.pid;
worker_rlimit_nofile 102400;

events {
    use epoll;
    worker_connections  4096;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        charset utf-8;

        location / {
            root   html/bbs;
            index  index.php index.html index.htm;
        }

	location ~ \.php$ {
	    root html/bbs;
	    fastcgi_pass 127.0.0.1:9000;
	    fastcgi_index index.php;
            include fastcgi.conf;
	}

	location /status {
	    stub_status on;
	    access_log off;
	}
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

[root@nginx etc]# killall -HUP nginx

浏览器访问http://192.168.200.111

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值