LNMP:指的是Linuxnginxmysql(或者mariadb)、php。是目前最常用最经典的web服务环境组合之一,除lnmp外,还有lamp

lnmp工作流程: 

用户通过浏览器请求nginx web服务: 

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

如果是动态请求(.php),那么nginx就会把它通过FastCGI接口(Fast Common Gateway Interface)发送给PHP引擎服务(FastCGI进程php-fpm)进程解析,如果这个动态请求要读取数据库数据,那么PHP就会继续向后请求MySQL(或者MariaDB)数据库,以读取需要的数据,并最终通过nginx服务把获取的数据返回给用户。

Nginx FastCGI运行原理

nginx不支持对外部动态程序的直接调用或解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux中是socket,为了调用CGI程序,还需要一个FastCGIwrapper(可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定的socket上,比如端口或者文件socket

nginxCGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本来读取返回的数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给nginx,最后nginx将返回的数据发送给客户端。 

 FastCGI主要优点:

把动态语言和HTTP服务器分离出来,使nginx专门处理静态请求及向后转发的动态请求,而PHP/PHP-FPM服务器则专门解析PHP动态请求。

为了测试方便,全部机子清空防火墙规则或者关闭防火墙。

图片.png

LNMP:Linux+Nginx+Mariadb(Mysql)+PHP

nginx: 192.168.10.201【RHEL7.0 主机名:node1】

mariadb192.168.10.202【RHEL7.3 主机名:node2】

php 192.168.10.203【RHEL7.3 主机名:node3】

一、编译安装nginxnode1

1、下载nginx

http://nginx.org/download/nginx-1.12.2.tar.gz

2、创建nginx组和用户

[root@node1 ~]# groupadd -r -g 300 nginx

[root@node1 ~]# useradd -r -g 300 -u 300 -s /sbin/nologin nginx

3、创建存放nginx日志目录

[root@node1 ~]# mkdir /mydata/logs/nginx/ -p

4、安装各种依赖包

[root@node1 ~]# yum groupinstall "Development Tools" -y 

[root@node1 ~]#yum install gd-devel openssl openssl-devel pcre-devel  -y

5、解压安装nginx-1.12.2.tar.gz

[root@node1 ~]# tar xf nginx-1.12.2.tar.gz

[root@node1 ~]# cd nginx-1.12.2/

[root@node1 nginx-1.12.2]# ./configure

–prefix=/usr/local/nginx

–user=nginx

–group=nginx

–http-log-path=/mydata/logs/nginx/access.log

–error-log-path=/mydata/logs/nginx/error.log

–with-http_ssl_module

–with-http_realip_module

–with-http_flv_module

–with-http_mp4_module

–with-http_gunzip_module

–with-http_gzip_static_module

–with-http_image_filter_module

–with-http_stub_status_module

–with-debug

–lock-path=/var/lock/nginx.lock

–http-client-body-temp-path=/var/tmp/nginx/client

–http-proxy-temp-path=/var/tmp/nginx/proxy

–http-fastcgi-temp-path=/var/tmp/nginx/fastcgi

–http-uwsgi-temp-path=/var/tmp/nginx/uwsgi

[root@node1 nginx-1.12.2]# make && make install

6、编写nginx服务脚本

[root@node1 nginx-1.12.2]# vim /etc/rc.d/init.d/nginx

#!/bin/bash

# nginx – this script starts and stops the nginx daemon

# chkconfig: – 85 15

# description: Nginx is an HTTP(S) server, HTTP(S) reverse

# proxy and IMAP/POP3 proxy server

# processname: nginx

# config: /etc/nginx/nginx.conf

# config: /usr/local/nginx/conf/nginx.conf

# pidfile: /usr/local/nginx/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

# make required directories

user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*–user=([^ ]*).*/1/g' -`

        if [ -z "`grep $user /etc/passwd`" ]; then

                useradd -M -s /bin/nologin $user

        fi

options=`$nginx -V 2>&1 | grep 'configure arguments:'`

for opt in $options; do

        if [ `echo $opt | grep '.*-temp-path'` ]; then

                value=`echo $opt | cut -d "=" -f 2`

                if [ ! -d "$value" ]; then

                        # echo "creating" $value

                        mkdir -p $value && chown -R $user $value

                fi

        fi

done

}

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

make_dirs

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

#configtest || return $?

stop

sleep 1

start

}

reload() {

#configtest || return $?

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

        rh_status_q && exit 0

        $1

        ;;

stop)

        rh_status_q || exit 0

        $1

        ;;

restart|configtest)

$1

;;

reload)

        rh_status_q || exit 7

        $1

        ;;

force-reload)

        force_reload

        ;;

status)

        rh_status

        ;;

condrestart|try-restart)

        rh_status_q || exit 0

        ;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

8、将nginx添加到系统服务

[root@node1 nginx-1.12.2]# chmod 755 /etc/rc.d/init.d/nginx

[root@node1 nginx-1.12.2]# chkconfig –add nginx

9、启动nginx服务

[root@node1 nginx-1.12.2]# systemctl start nginx

浏览器打开:192.168.10.201

图片.png

OK。。。 nginx已经编译安装成功。

二、编译安装mariadbnode2

1、安装依赖包

[root@node2 ~]#yum -y install perl perl-devel

2、下载mariadb5.5.57,这里使用的是二进制安装包

http://mirrors.neusoft.edu.cn/mariadb/mariadb-5.5.57/source/mariadb-5.5.57.tar.gz

在官网中:源码安装包:mariadb-5.5.57.tar.gz,二进制安装包:mariadb-5.5.57-linux-x86_64.tar.gz,这里使用的是非官网的。

官网下载地址:https://downloads.mariadb.org/mariadb/5.5.57/

blob.png

3、创建数据库数据存放目录

[root@node2 ~]# mkdir /mydata/data -pv

[root@node2 ~]# chown -R mysql.mysql /mydata/data/

4、创建mysql用户和组

[root@node2 ~]# groupadd -r -g 306 mysql

[root@node2 ~]# useradd -r -g 306 -u 306 -s /sbin/nologin mysql

5、安装maraidb

5.1解压maradb/usr/local目录创建mysql连接

[root@node2 ~]# tar xf mariadb-5.5.57.tar.gz -C /usr/local/

[root@node2 ~]# cd /usr/local/

[root@node2 local]# ln -sv mariadb-5.5.57/ mysql

5.2修改mysql目录中全部文件的属主属组

[root@node2 local]# cd mysql/

[root@node2 mysql]# chown -R root.mysql ./*

图片.png

5.4数据库初始化

[root@node2 mysql]# scripts/mysql_install_db –user=mysql –datadir=/mydata/data/

6、数据库配置文件

support-files/my-large.cnf文件到/etc/mysql,名字为my.cnf

[root@node2 mysql]# mkdir /etc/mysql

[root@node2 mysql]# cp  support-files/my-large.cnf /etc/mysql/my.cnf

7、修改my.cnf配置文件

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

添加以下内容:

datadir = /mydata/data

innodb_file_per = on

skip_name_resolve = on

图片.png

8、配置服务脚本

support-files/mysql.server复制到/etc/rc.d/init.d/目录,命名为mysqld

[root@node2 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

9、新建/var/log/mysqld.log文件

[root@node2 mysql]# touch /var/log/mysqld.log

[root@node2 mysql]# chown  mysql.mysql  /var/log/mysqld.log

10.、将mysqld添加到系统服务

[root@node2 mysql]# chkconfig –add mysqld

11、修改环境变量

[root@node2 mysql]# vim /etc/profile.d/mysql.sh

export PATH=/usr/local/mysql/bin:$PATH

[root@node2 mysql]# source /etc/profile.d/mysql.sh

12、启动mysqld服务

[root@node2 mysql]# systemctl start mysqld

13、为root用户授权

在实战中root用户不能远程登录,可以授权普通用户远程登录。

[root@node2 mysql]# mysql

MariaDB [(none)]> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '123456';

MariaDB [(none)]> FLUSH PRIVILEGES;

node1上连接数据库:

[root@node1 ~]# mysql -uroot -h192.168.10.202 -p123456

图片.png

OK。。。maraidb数据库安装成功。

三、编译安装phpnode3

1、安装相关依赖包

[root@node3 ~]# yum -y install libxml2-devel bzip2-devel libcurl-devel libmcrypt-devel openssl openssl-devel php-mysql

2、下载 php-5.6.33.tar.gz

http://php.net/distributions/php-5.6.33.tar.gz

3、编译安装php

[root@node3 ~]# tar xf php-5.6.33.tar.gz

[root@node3 ~]# cd php-5.6.33/

[root@node3 php-5.6.33]# ./configure –prefix=/usr/local/php5 –with-mysql=mysqlnd –with-pdo-mysql=mysqlnd –with-mysqli=mysqlnd –with-openssl –enable-mbstring –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir=/usr –enable-xml –enable-sockets –enable-fpm –with-mcrypt –with-config-file-path=/etc/php5/ –with-config-file-scan-dir=/etc/php5.d –with-bz2

[root@node3 php-5.6.33]# make -j 2 && make install

4、配置php-fpm

4.1复制php.ini-production /etc/php5/php.ini

[root@node3 php-5.6.33]# mkdir /etc/php5{,.d}

[root@node3 php-5.6.33]# cp php.ini-production /etc/php5/php.ini

4.2复制sapi/fpm/init.d.php-fpm/etc/rc.d/init.d/php-fpm

[root@node3 php-5.6.33]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

4.3添加执行权限:php-fpm

[root@node3 php-5.6.33]# chmod +x /etc/rc.d/init.d/php-fpm

4.4php-fpm添加到系统服务

[root@node3 php-5.6.33]# chkconfig –add php-fpm

4.5修改php-fpm.conf配置文件

[root@node3 php-5.6.33]# cd /usr/local/php5/etc/

[root@node3 etc]# cp php-fpm.conf.default php-fpm.conf

[root@node3 etc]# vim php-fpm.conf

user = nginx

group = nginx

修改监听为:listen = 0.0.0.0:9000

设置进程并发数,默认为5pm.max_children = 50

刚开始的进程数,默认为2pm.start_servers = 5

最少空闲进程数,默认为1pm.min_spare_servers = 2

最少空闲进程数,默认为3pm.max_spare_servers = 5

修改pid  = /usr/local/php5/var/run/php-fpm.pid

图片.png

4.6 新建一个nginx用户,用户和组idnode1一样

[root@node1 ~]# id nginx

uid=300(nginx) gid=300(nginx) groups=300(nginx)

[root@node3 etc]# groupadd -r -g 300 nginx

[root@node3 etc]# useradd -r -g 300 -u 300 -s /sbin/nologin nginx

4.7 新建一个mysql用户,用户和组idnode2一样

[root@node3 etc]# groupadd -r -g 306 mysql

[root@node3 etc]# useradd -r -g 306 -u 306 -s  /sbin/nologin mysql

4.8 修改php.ini文件

[root@node3 etc]# pwd

/usr/local/php5/etc

[root@node3 etc]# vim /etc/php5/php.ini

short_open_tag = On

4.9启动php-fpm服务

[root@node3 etc]# systemctl start php-fpm

四、整合nginxphp

1、修改nginx配置文件

[root@node1 ~]# cd /usr/local/nginx/

[root@node1 nginx]# vim conf/nginx.conf

location / {

            root   /htdoc;

            index  index.php index.html index.htm;

        }

location ~ .php$ {

            root           /htdoc;

            fastcgi_pass   192.168.10.203:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi_params;

        }

2、修改conf/fastcgi_params文件

 [root@node1 nginx]# vim conf/fastcgi_params

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING           $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE          $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  SCRIPT_NAME            $fastcgi_script_name;

fastcgi_param  REQUEST_URI            $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR           $remote_addr;

fastcgi_param  REMOTE_PORT            $remote_port;

fastcgi_param  SERVER_ADDR            $server_addr;

fastcgi_param  SERVER_PORT            $server_port;

fastcgi_param  SERVER_NAME          $server_name;

五、测试LNMP

1、修改node1node2node3SELinux

setsebool -P httpd_can_network_connect 1

2node3新建/htdoc/目录并创建一个测试页index.php

[root@node3 ~]# vim  /htdoc/index.php

<?php

    $conn = mysql_connect('192.168.10.202','root','123456');

    if($conn)

      echo "connect maraidb OK…";

    else

      echo "connect mariadb Fail…";

    mysql_close();

    phpinfo();

?>

修改属主、属组:chown -R nginx.nginx /htdoc/*

3nfs共享

[root@node3 etc]# vim /etc/exports

/htdoc *(rw)

[root@node3 etc]# exportfs -rv

4node1新建/htdoc目录,属主、属组为nginx

[root@node1 ~]# mkdir /htdoc

[root@node1 ~]# chown -R nginx.nginx /htdoc

5node1挂载node3的共享目录/htdoc

[root@node1 ~]# mount -t nfs 192.168.10.203:/htdoc/ /htdoc/

重启php-fpmmysqldnginx服务

浏览器打开:http://192.168.10.201/

图片.png

OK。。。LNMP分布式部署成功。。。

简单部署wordpress博客

前面已经部署好LNMP环境。

1、到wordpress官网下载wordpress,下载到node3/htdoc目录中

[root@node3 htdoc]# tar xf wordpress-4.8.1-zh_CN.tar.gz

2、解压wordpress

图片.png

3、配置wordpress

[root@node3 htdoc]# cp wp-config-sample.php wp-config.php

[root@node3 htdoc]# vim wp-config.php

define('DB_NAME', 'wpdb');

define('DB_USER', 'wpuser');

define('DB_PASSWORD', 'wppasswd');

define('DB_HOST', '192.168.10.202');

文件末尾添加:

require_once(ABSPATH . 'wp-settings.php');

define("FS_METHOD","direct");

define("FS_CHMOD_DIR", 0777);

define("FS_CHMOD_FILE", 0777);

4、创建数据库

数据库名:wpdb   用户和密码:wpuserwppasswd

[root@node2 ~]# mysql

MariaDB [mysql]> CREATE DATABASE wpdb;

MariaDB [(none)]> GRANT ALL ON wpdb.* TO 'wpuser'@'%' IDENTIFIED BY 'wppasswd';

MariaDB [mysql]> FLUSH PRIVILEGES;

浏览器打开:http://192.168.10.201/wp-admin/install.php

图片.png

注册安装即可。

分类: Linux服务

发表评论

电子邮件地址不会被公开。 必填项已用*标注