linux 学习笔记-046-LNMP 介绍,安装 MySQL 和 PHP,Nginx 介绍

发布于 2018-03-12  383 次阅读


LNMP 架构介绍

和 LAMP 架构基本类似,但在 LNMP 中,提供 web 服务的是 Nginx;php 是作为一个独立服务存在的,这个服务叫做 php-fpm;Nginx 直接处理静态请求,动态请求会转发给 php-fpm

Nginx 对用户并发支持比较大images

MySQL 安装

这里先把之前的 mysql 相关的删除(假如有的话),安装包不用删除(这里还是使用二进制免编译安装)

[root@am-01:/usr/local/src#] ps -aux | grep mysql

root      60648  0.0  0.1 115392  1728 ?        S    2 月 28   0:00 /bin/sh /usr/local/mariadb/bin/mysqld_safe --defaults-file=/usr/local/mariadb/my.cnf --datadir=/data/mariadb --pid-file=/data/mariadb/am-01.pid

mysql     60767  0.0  6.1 1583776 61868 ?       Sl   2 月 28  12:29 /usr/local/mariadb/bin/mysqld --defaults-file=/usr/local/mariadb/my.cnf --basedir=/usr/local/mariadb --datadir=/data/mariadb --plugin-dir=/usr/local/mariadb/lib/plugin --user=mysql --log-error=/data/mariadb/am-01.err --pid-file=/data/mariadb/am-01.pid --socket=/tmp/mysql.sock --port=3306

root      96318  0.0  0.0 112676   980 pts/0    S+   22:46   0:00 grep --color=auto mysql

[root@am-01:/usr/local/src#] killall mysqld

[root@am-01:/usr/local/src#] ps -aux | grep mysql

root      96329  0.0  0.0 112676   980 pts/0    S+   22:46   0:00 grep --color=auto mysql

#检查 mysql 是否在运行,在运行的话,先停止运行
[root@am-01:/usr/local/src#] rm -rf /usr/local/mysql

[root@am-01:/usr/local/src#] rm -rf /etc/init.d/mysqld

[root@am-01:/usr/local/src#] rm -rf /data/mysql

#删除相关的文件和目录
[root@am-01:~#] cd /usr/local/src/

[root@am-01:/usr/local/src#] pwd

/usr/local/src

[root@am-01:/usr/local/src#] tar xvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz

[root@am-01:/usr/local/src#] mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql

[root@am-01:/usr/local/src#] ls /usr/local/mysql/

bin      data  include  man         README   share      support-files

COPYING  docs  lib      mysql-test  scripts  sql-bench

[root@am-01:/usr/local/src#] cd /usr/local/mysql/

#解压 mysql 包,把解压出来的 mysql-5.6.36-linux-glibc2.5-x86_64 目录剪切到/usr/local/目录下,并重命名为 mysql
[root@am-01:/usr/local/mysql#] useradd mysql

[root@am-01:/usr/local/mysql#] mkdir /data/mysql

[root@am-01:/usr/local/mysql#] ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

[root@am-01:/usr/local/mysql#] echo $?

0

#创建 mysql 用户,创建/data/mysql 目录,安装 mysql,检查是否运行正常
[root@am-01:/usr/local/mysql#] vim /etc/my.cnf

  [mysqld]

  datadir=/data/mysql

  socket=/tmp/mysql.sock

[root@am-01:/usr/local/mysql#] cp support-files/mysql.server /etc/init.d/mysqld

[root@am-01:/usr/local/mysql#] ls /etc/init.d/

123  functions  mariadb  mysqld  netconsole  network  README

[root@am-01:/usr/local/mysql#] vim /etc/init.d/mysqld

  basedir=/usr/local/mysql

  datadir=/data/mysql

[root@am-01:/usr/local/mysql#] /etc/init.d/mysqld start

Starting MySQL.Logging to '/data/mysql/am-01.err'.

. SUCCESS!

[root@am-01:/usr/local/mysql#] ps -aux | grep mysql

root      96966  0.1  0.1 113268  1592 pts/0    S    23:05   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/am-01.pid

mysql     97103  4.1 44.8 1300780 449540 pts/0  Sl   23:05   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysq --log-error=/data/mysql/am-01.err --pid-file=/data/mysql/am-01.pid --socket=/tmp/mysql.sock

root      97129  0.0  0.0 112676   976 pts/0    S+   23:05   0:00 grep --color=auto mysql

[root@am-01:/usr/local/mysql#] chkconfig --add mysqld

[root@am-01:/usr/local/mysql#] chkconfig mysqld on

[root@am-01:/usr/local/mysql#] service mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL.. SUCCESS!

[root@am-01:/usr/local/mysql#] ps -aux | grep mysql

root      97221  0.8  0.1  11776  1552 pts/0    S    23:07   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/am-01.pid

mysql     97359 17.6 44.8 1300780 449528 pts/0  Sl   23:07   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysq --log-error=/data/mysql/am-01.err --pid-file=/data/mysql/am-01.pid --socket=/tmp/mysql.sock

root      97385  0.0  0.0 112676   980 pts/0    S+   23:07   0:00 grep --color=auto mysql

#原有的/etc/my.cnf 没有删除,直接修改,注意 datadir 和 socket 两项;复制启动脚本到系统,同时修改 basedir 和 datadir 两项;启动 mysql 并检查下是否正常运行;把 mysqld 加入到服务列表中并让其开机启动,测试一下并检查是否正常运行

PHP 安装

因为 LNMP 和 LAMP 有点不同,PHP 是作为一个单独的服务的,所以编译安装的时候也会有所不同

[root@am-01:/usr/local/mysql#] cd /usr/local/src/php-5.6.30/

[root@am-01:/usr/local/src/php-5.6.30#] make clean

find . -name \*.gcno -o -name \*.gcda | xargs rm -f

find . -name \*.lo -o -name \*.o | xargs rm -f

find . -name \*.la -o -name \*.a | xargs rm -f

find . -name \*.so | xargs rm -f

find . -name .libs -a -type d|xargs rm -rf

rm -f libphp5.la sapi/cli/php sapi/cgi/php-cgi    libphp5.la modules/* libs/*

#先使用 make clean 把之前编译的清除
[root@am-01:/usr/local/src/php-5.6.30#] useradd -s /sbin/nologin php-fpm

[root@am-01:/usr/local/src/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

#先创建 php-fpm 用户,然后./configure

#--prefix 指定路径,--with-config-file-path 制定配置文件所在目录(这里要注意跟之前在 LAMP 下安装的 php 区分开),--enable-fpm 表示开启 PHP-FPM 服务功能,--with-fpm-user 和--with-fpm-group 指定用户和用户组,--with-mysql 和--with-mysqli 和--with-pdo-mysql 指定 mysql、mysqli、pdomysql 的路径,--with-mysql-sock 指定 sock,之后的制定一些模块参数

以上操作提示一个错误,提示缺少 libcurl 包,使用 yum 安装,之后继续编译

configure: error: Please reinstall the libcurl distribution -

    easy.h should be in <curl-dir>/include/curl/

[root@am-01:/usr/local/src/php-5.6.30#] yum -y install libcurl-devel.x86_64

由于之前安装 LAMP 的时候已经把 php 大部分的库都安装了,所以之后就没有错误提示了

[root@am-01:/usr/local/src/php-5.6.30#] make

[root@am-01:/usr/local/src/php-5.6.30#] make install

[root@am-01:/usr/local/src/php-5.6.30#] ls /usr/local/php-fpm/

bin  etc  include  lib  php  sbin  var

[root@am-01:/usr/local/src/php-5.6.30#] ls /usr/local/php

bin  etc  include  lib  php

[root@am-01:/usr/local/src/php-5.6.30#] ls /usr/local/php-fpm/sbin/

php-fpm

[root@am-01:/usr/local/src/php-5.6.30#] ls /usr/local/php-fpm/var

log  run

#可以见到 LNMP 和 LAMP 中的 php 安装目录是不一样的
[root@am-01:/usr/local/src/php-5.6.30#] /usr/local/php-fpm/sbin/php-fpm -i

[root@am-01:/usr/local/src/php-5.6.30#] /usr/local/php-fpm/sbin/php-fpm -m

[root@am-01:/usr/local/src/php-5.6.30#] /usr/local/php-fpm/bin/php -i

[root@am-01:/usr/local/src/php-5.6.30#] /usr/local/php-fpm/bin/php -m

#-i 和-m 参数既可以用/sbin/php-fpm 也可以用/bin/php
[root@am-01:/usr/local/src/php-5.6.30#] /usr/local/php-fpm/sbin/php-fpm -t

[13-Mar-2018 00:11:43] ERROR: failed to open configuration file '/usr/local/php-fpm/etc/php-fpm.conf': No such file or directory (2)

[13-Mar-2018 00:11:43] ERROR: failed to load configuration file '/usr/local/php-fpm/etc/php-fpm.conf'

[13-Mar-2018 00:11:43] ERROR: FPM initialization failed

#-t 参数是 php-fpm 独有的,用来查看 php-fpm 的配置文件是否有错误,这里提示配置文件不存在
[root@am-01:/usr/local/src/php-5.6.30#] cp php.

php.gif              php.ini-development  php.ini-production  

[root@am-01:/usr/local/src/php-5.6.30#] cp php.ini-production /usr/local/php-fpm/etc/php.ini

[root@am-01:/usr/local/src/php-5.6.30#] vim /usr/local/php-fpm/etc/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

#global 定义一些全局的参数,PID 和 error_log 之类的

  [www]

  listen = /tmp/php-fcgi.sock

#监听的地址,可以写成 sock 或者 127.0.0.1:9000(这里的 IP 和端口可以修改,但在后面让 nginx 和 php 结合使用的时候需要注意修改)

  listen.mode = 666

#监听的是 sock 的时候才会生效,用来设置 sock 文件的权限为 666

  user = php-fpm

  group = php-fpm

#定义 php 这个服务的用户组和用户,后面的为关于一些进程的相关配置,在后面会提到

  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

[root@am-01:/usr/local/src/php-5.6.30#] cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root@am-01:/usr/local/src/php-5.6.30#] chmod 755 /etc/init.d/php-fpm

[root@am-01:/usr/local/src/php-5.6.30#] chkconfig --add php-fpm

[root@am-01:/usr/local/src/php-5.6.30#] chkconfig php-fpm on

#复制配置文件到/usr/local/php-fpm/etc/目录并重命名为 php.ini,其中 php.ini-development 适合在开发、测试环境使用,php.ini-production 适合在生产、线上环境使用

#php-fpm.conf 是 php-fpm 进程服务的配置文件

#复制启动脚本,赋予合适的权限,加入到服务列表中并设置开机启动
[root@am-01:/usr/local/src/php-5.6.30#] service php-fpm start

Starting php-fpm  done

[root@am-01:/usr/local/src/php-5.6.30#] ps -aux |grep php

root      84381  0.0  0.4 125612  4956 ?        Ss   04:58   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)

php-fpm   84382  0.0  0.4 125612  4716 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84383  0.0  0.4 125612  4716 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84384  0.0  0.4 125612  4716 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84385  0.0  0.4 125612  4716 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84386  0.0  0.4 125612  4720 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84387  0.0  0.4 125612  4720 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84388  0.0  0.4 125612  4720 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84389  0.0  0.4 125612  4720 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84390  0.0  0.4 125612  4720 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84391  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84392  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84393  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84394  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84395  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84396  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84397  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84398  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84399  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84400  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

php-fpm   84401  0.0  0.4 125612  4724 ?        S    04:58   0:00 php-fpm: pool www

root      84409  0.0  0.0 112680   976 pts/1    S+   05:00   0:00 grep --color=auto php

[root@am-01:/usr/local/src/php-5.6.30#] ls -l /tmp/php-fcgi.sock

srw-rw-rw- 1 root root 0 3 月  13 04:58 /tmp/php-fcgi.sock

#启动 php-fpm,第一列可以看到 php-fpm 服务的用户,最后一列的 www 是 php-fpm.conf 所定义的 www

#同时能看到 php-fcgi.sock 的权限是 666

Nginx 介绍

俄国人开发,静态文件处理能力很强,软件小巧且强大

java 网站:tomcat+nginx

Nginx 官网 nginx.org,最新版 1.13,最新稳定版(stable)1.12

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

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

Nginx 核心+lua 相关的组件和模块组成了一个支持 lua 的高性能 web 容器 openresty

扩展

使用 Nginx+Lua(OpenResty)开发高性能 Web 应用:

http://jinnianshilongnian.iteye.com/blog/2280928

Nginx 为什么比 Apache Httpd 高效:原理篇

http://www.toxingwang.com/linux-unix/linux-basic/1712.html

apache 和 nginx 工作原理比较:

http://www.server110.com/nginx/201402/6543.html

mod_php 和 mod_fastcgi 以及 php-fpm 的比较:

http://dwz.cn/1lwMSd

概念了解:CGI,FastCGI,PHP-CGI 与 PHP-FPM:

http://www.nowamagic.net/librarys/veda/detail/1319/

https://www.awaimai.com/371.html