LNMP 1

LNMP介绍

  • LNMP中指的是Ngix(类似于Apache的一种Web服务软件)
  • Ngix设计的初衷是提供一种快速、高效、多并发的Web服务软件。
  • 在静态页面的处理上,Ngix比Apache更好一些,但是在动态页面的处理上,Ngix并不比apache有优势。
  • Ngix提供web服务,并且php是作为一个独立服务存在的,这个服务叫做php-fpm
  • -Ngix直接处理静态请求,动态请求会转发给php-fpm

LNMP 1_第1张图片

 

 

MySQL安装

MySQL的几个常用安装包:rpm、源码、二进制免编译

MySQL通常是通过rpm(使用yum安装)、源码(源码的二进制包与Apache的源码安装不同)、、二进制免编译(不用配置,不用编译,rpm类似。但是rpm是无法定义安装路径,默认就是安装在/usr/下面,而二进制免编译包是可以选择安装位置的。)

 

1. 安装MySQL 二进制免编译

cd /usr/local/src 自定义安装到/usr/local/src/目录下

wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz 下载Mysql

tar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 解压

 

2. 将解压后的目录移动到/usr/local/目录下并改名为mysql

mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql

 

3. 切换到/usr/local/mysql/目录下,先ls查看是否有文件或者目录。

创建mysql用户但禁止登陆 useradd -s /sbin/nologin mysql

创建/data/目录, mkdir /data/

然后初始化 ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

报错显示缺少perl-Data-Dumper.x86_64这个包和libaio

yum install -y perl-Data-Dumper

yum install -y libaio

安装后再次执行

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

如果不确定是否执行过程是对的,可以查看过程中是否出现了2次OK。也执行echo $?看是否显示0

 

4. 拷贝模板配置文件

因为centos7系统默认安装了mariadb-libs这个包而创建了/etc/my.cnf。这里直接覆盖

cp support-files/my-default.cnf /etc/my.cnf

 

如果使用系统中默认的/etc/my.cnf 需要做以下更改

datadir=/data/mysql

socket=/tmp/mysql.sock

注释掉:

includedir /etc/my.cnf.d

log-error=

pid-file=

 

5. 拷贝mysql启动脚本

cp support-files/mysql.server /etc/init.d/mysqld

vim/etc/init.d/mysqld 修改这2个地方

LNMP 1_第2张图片

6. 启动服务

修改权限为755 chmod 755 /etc/init.d/mysqld

加入到开机启动列表 chkconfig --add mysqld

开机启动 chkconfig mysqld on

启动服务 service mysqld start 也可以启动脚本 /etc/init.d/mysqld start

ps aux |grep mysqld 查看进程

netstat -lnp |grep mysqld 查看监听端口3306

 

如果没有启动脚本可以用命令行的方式来启动

/usr/local/mysql/bin/mysql_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql 、

该命令就是进程中出现的命令

 

7. 设置PATH,否则不能直接调用mysql

修改 vim /etc/profile 文件,在文件末尾添加

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

[root@localhost mysql]# source /etc/profile //使配置文件生效

验证

[root@localhost mysql]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.36 Source distribution

 

kill命令用来停掉服务,可能会造成数据丢失。killall命令更加安全。

yum install -y psmisc 安装killall

如果以后的工作中遇到mysqld的进程杀不死,ps还会有进程,那说明将数据慢慢写入到磁盘中,千万不能使用kill -9来杀进程,否则很可能丢数据。

 

PHP安装

在LAMP架构中,php是做为apache的一个模块存在的,但在LNMP中PHP是独立的服务,需要开启php-fpm服务的 ,与Ngix是没有关系。

1 . 切换到/usr/local/src目录下

2 .下载php软件包

wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2

3 .解压缩

tar -jxvf php-5.6.32.tar.bz2

4 . 切换到php-5.6.30目录下,如果之前编译过了,可以使用 make clean 命令来恢复到刚解压后的一个状态。

5 .执行以下命令

[root@chunt php-5.6.30]#./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl

报错

error: xml2-config not found. Please check your libxml2 installation.

yum install -y libxml2-devel

error: Cannot find OpenSSL's

yum install -y openssl-devel

error: Please reinstall the BZip2 distribution

yum install -y bzip2-devel

error: jpeglib.h not found.

yum install -y libjpeg-turbo-devel

error: png.h not found

yum install -y libpng-devel

error: freetype-config not found

yum install -y freetype-devel

error: mcrypt.h not found. Please reinstall libmcrypt (这个包在epel扩展源里)

yum install -y libmcrypt-devel

error: Please reinstall the libcurl

yum install -y libcurl-devel

6 . 再次执行make && make install

7 .在/usr/local/php-fpm/下的sbin下有一个php-fpm的文件,该文件用来启动php-fpm服务的。

在/usr/local/php-fpm/下的log中有一个log(存放日志)和一个run(存放

pid)

8 . php-fpm和php语法基本一样

/usr/local/php-fpm/sbin/php-fpm -m 查看模块

/usr/local/php-fpm/sbin/php-fpm 查看详细信息

/usr/local/php-fpm/sbin/php-fpm -t 检查配置文件错误。

10 .拷贝配置文件

cp php.ini-production /usr/local/php-fpm/etc/php.ini

(php.ini-development 开发测试用 php.ini-production生产线上用 )

11 . 切换到cd /usr/local/php-fpm/etc下去,创建 vi php-fpm.conf并写入以下内容。

[global]   //全局定义

pid = /usr/local/php-fpm/var/run/php-fpm.pid

error_log = /usr/local/php-fpm/var/log/php-fpm.log

[www]    // 模块名字

listen = /tmp/php-fcgi.sock    //sock监听地址

# listen = 127.0.0.1:9000   //内部网络监听地址(nginx和php一台机器上)

listen.mode = 666   //当监听是sock时定义sock文件权限

user = php-fpm   //启动用户

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

12 . 创建php-fpm用户

useradd -s /sbin/nologin php-fpm

13 . 拷贝启动脚本

cp /usr/local/src/php-5.6.32/sapi/fpm/init.d.php-fpm /etc/init.d/php.fpm

修改权限为755 chmod 755 /etc/init.d/php-fpm

加入服务列表,并设置为开机启动。

chkconfig --add php-fpm chkconfig php-fpm on

14 启动服务

service php-fpm start //启动服务

Starting php-fpm done

 

Nginx安装

Nginx介绍

Nginx官网 nginx.org

Nginx应用场景:web服务、反向代理、负载均衡

Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大区别在于Tenging增加了一些定制化模块,在安全限速方面表现突出,另外它支持对js,css合并

Nginx核心+lua相关的组件和模块组成了一个支持lua的高性能web容器openresty,参考http://jinnianshilongnian.iteye.com/blog/2280928

Nginx相对于Apache优点:

1) 高并发响应性能非常好,官方测试Nginx处理静态文件并发5w/s

2) 反向代理性能非常强。(可用于负载均衡)

3) 内存和 cpu 占用率低。(为 Apache 的 1/5-1/10)

4) 对后端服务有健康检查功能。

5) 支持 PHP cgi 方式和 fastcgi 方式。

6) 配置代码简洁且容易上手。

Nginx 工作原理

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到 一个location block(location是Nginx 配置中的一个指令,用于URL匹配),而在这个location中配置的每个指令将会启动不同的模块去完成相应的工作。Nginx的模块从结构上分为核心模块、基础模块和第三方模块:

核心模块:HTTP模块、EVENT 模块和 MAIL 模块

基础模块:HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy模块和 HTTP Rewrite 模块,

第三方模块:HTTP Upstream Request Hash 模块、Notice 模块和HTTP Access Key 模块。

1. cd /usr/local/src目录

wget http://nginx.org/download/nginx-1.4.7.tar.gz

2.解压

tar zxvf nginx-1.12.2.tar.gz

3 . cd nginx-1.4.7/目录下编译安装nginx

./configure --prefix=/usr/local/nginx

4 . 然后执行make && make install 完成后会在/usr/local/nginx目录下生成几个子目录:

conf :配置文件目录

html : 样例文件

lons : 存放日志目录

sbin : 进程或者说核心文件

5 . 创建启动脚本vim /etc/init.d/nginx 复制以下内容

#!/bin/bash

# chkconfig: - 30 21

# description: http service.

# Source Function Library

. /etc/init.d/functions

# Nginx Settings



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

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

NGINX_PID="/usr/local/nginx/logs/nginx.pid"

RETVAL=0

prog="Nginx"



start()

{

echo -n $"Starting $prog: "

mkdir -p /dev/shm/nginx_temp

daemon $NGINX_SBIN -c $NGINX_CONF

RETVAL=$?

echo

return $RETVAL

}



stop()

{

echo -n $"Stopping $prog: "

killproc -p $NGINX_PID $NGINX_SBIN -TERM

rm -rf /dev/shm/nginx_temp

RETVAL=$?

echo

return $RETVAL

}



reload()

{

echo -n $"Reloading $prog: "

killproc -p $NGINX_PID $NGINX_SBIN -HUP

RETVAL=$?

echo

return $RETVAL

}



restart()

{

stop

start

}



configtest()

{

$NGINX_SBIN -c $NGINX_CONF -t

return 0

}



case "$1" in

start)

start

;;

stop)

stop

;;

reload)

reload

;;

restart)

restart

;;

configtest)

configtest

;;

*)

echo $"Usage: $0 {start|stop|reload|restart|configtest}"

RETVAL=1

esac



exit $RETVAL

 

6. 保存后修改文件权限为755

chmod 755 /etc/init.d/nginx

7.加入服务列表 设置为开机启动

chkconfig --add nginx

chkconfig nginx on

7. 编辑配置文件

cd /usr/local/nginx/conf // 切换到该目录下,

mv nginx.conf nginx.conf.bak // 备份自带的配置文件

vi nginx.conf // 编辑配置文件

复制一下内容

user nobody nobody;   //定义由谁启动nginx服务

worker_processes 2;   //定义启动后的子进程有2个

error_log /usr/local/nginx/logs/nginx_error.log crit;

pid /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;   //最多可以打开51200个文件



events

{

use epoll;

worker_connections 6000;   //进程链接数

}



http

{

include mime.types;

default_type application/octet-stream;

server_names_hash_bucket_size 3526;

server_names_hash_max_size 4096;

log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'

' $host "$request_uri" $status'

' "$http_referer" "$http_user_agent"';

sendfile on;

tcp_nopush on;

keepalive_timeout 30;

client_header_timeout 3m;

client_body_timeout 3m;

send_timeout 3m;

connection_pool_size 256;

client_header_buffer_size 1k;

large_client_header_buffers 8 4k;

request_pool_size 4k;

output_buffers 4 32k;

postpone_output 1460;

client_max_body_size 10m;

client_body_buffer_size 256k;

client_body_temp_path /usr/local/nginx/client_body_temp;

proxy_temp_path /usr/local/nginx/proxy_temp;

fastcgi_temp_path /usr/local/nginx/fastcgi_temp;

fastcgi_intercept_errors on;

tcp_nodelay on;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 8k;

gzip_comp_level 5;

gzip_http_version 1.1;

gzip_types text/plain application/x-javascript text/css text/htm

application/xml;



server    //对应虚拟主机,没有server也就没有对应的域名、网站,只有定义后才能正常访问

{

listen 80;   //监听80端口

server_name localhost;   //域名

index index.html index.htm index.php;

root /usr/local/nginx/html;   //网站根目录



location ~ \.php$   //配置解析PHP

{

include fastcgi_params;

fastcgi_pass unix:/tmp/php-fcgi.sock;   //调用php-fpm服务。指定php-fpm监听sock

# fastcgi_pass 127.0.0.1:9000   // 如果监听ip用这个

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;

}

}

}

 

8. 启动nginx服务

/usr/local/nginx/sbin/nginx -t // 检查语法错误

service nginx start // 启动服务

9. 测试

curl localhost 或者curl 127.0.0.1

显示

Welcome to nginx!

 

也可以编辑一个php文件

vi /usr/local/nginx/html/1.php

写入

echo "hello word";

?>

curl localhost/1.php

hello word

 

 

 

 

你可能感兴趣的:(LNMP 1)