四十六、LNMP架构介绍、MySQL安装、PHP安装、Nginx介绍
一、LNMP架构介绍
和LAMP不同的是N:Nginx。
LNMP=Linux+Nginx+MySQL+PHP
和LAMP不同的是,提供web服务的是Nginx
并且PHP是作为一个独立服务存在,这个服务叫做php-fpm,说白了就是PHP
Nginx直接处理静态请求,动态请求会转发给php-fpm
Nginx在静态文件的处理上,比Apache要快很多,性能要好很多。用户并发可以上好几万,Apache做不到。
二、MySQL安装
# cd /usr/local/src
先检查MySQL服务有没有启动:ps aux |grep mysql
再删除之前的mysql。
# ps aux |grep mysql
root 17171 0.0 0.0 112676 984 pts/0 S+ 18:31 0:00 grep --color=auto mysql
# rm -rf /usr/local/mysql/
# rm -rf /etc/init.d/mysqld
/etc/my.cnf先暂时保留。
安装步骤:
# cd /usr/local/src
# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
# tar zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
# mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql
做移动这一步操作时,/usr/local/目录下一定不能有mysql这个目录,否则将是把这个文件移动到mysql目录下,而不是把这个文件移动过去并改名为mysql。
# ls /usr/local/mysql/ //移动完以后检查一下mysql目录下是不是这样。
bin COPYING data docs include lib man mysql-test README scripts share sql-bench support-files
# cd /usr/local/mysql/
# useradd mysql
# mkdir /data/
# rm -rf /data/mysql/*
# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
# echo $?
0
# cp support-files/my-default.cnf /etc/my.cnf 因为/etc/下自带有my.cnf,这里我就拷贝过去了。
再编辑一下这个文件:# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock 将这两个参数定义
# cp support-files/mysql.server /etc/init.d/mysqld
# vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mysql 定义好这两个参数
# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/MRX.err'.
SUCCESS!
# ps aux |grep mysql
root 17740 0.0 0.0 113264 1604 pts/0 S 21:32 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/MRX.pid
mysql 17877 2.1 24.0 1300776 449540 pts/0 Sl 21:32 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/MRX.err --pid-file=/data/mysql/MRX.pid --socket=/tmp/mysql.sock
root 17901 0.0 0.0 112676 984 pts/0 R+ 21:33 0:00 grep --color=auto mysql
# chkconfig --add mysqld //放到服务列表,就能开机启动
# chkconfig mysqld on
# service mysqld stop //停止这个服务
Shutting down MySQL.. SUCCESS!
三、PHP安装
和LAMP安装PHP方法有差别,需要开启php-fpm服务
# cd /usr/local/src/
# wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
# tar zxvf php-5.6.30.tar.gz
# cd php-5.6.30/
# make clean //会把之前编译过的文件全部删掉
# ./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-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --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-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl
报错了,少了个curl:
configure: error: Please reinstall the libcurl distribution -
easy.h should be in
# yum install -y libcurl-devel
# ./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-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --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-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl
# make && make install
# ls /usr/local/php-fpm/ 和PHP相比多了sbin和var
bin etc include lib php sbin var
# ls /usr/local/php
bin etc include lib php
# ls /usr/local/php-fpm/sbin/
php-fpm //启动php-fpm的文件
# ls /usr/local/php-fpm/var
log run //log:存放日志,run,存放pid。
# /usr/local/php-fpm/sbin/php-fpm -m 查看模块
# /usr/local/php-fpm/sbin/php-fpm -i 查看PHP的信息,编译参数,configuration file的路径(配置文件)
# /usr/local/php-fpm/sbin/php-fpm -t
-t:php-fpm -t测试语法是否正确。
# cp php.ini-production /usr/local/php-fpm/php.ini
[root@MRX php-5.6.30]# cd /usr/local/php-fpm/etc/
[root@MRX etc]# vim 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 //监听地址,可以监听socket,也可以监听IP
#listen = 127.0.0.1:9000 //一般都是监听这个IP,因为php-fpm是针对内部使用的,port默认是9000,可以改其他的。
listen.mode = 666 //当监听的是socket时,这句才会生效。用来定义socket文件的权限。
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
# cd /usr/local/src/php-5.6.30/
[root@MRX php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod 755 /etc/init.d/php-fpm
[root@MRX php-5.6.30]# chkconfig --add php-fpm
[root@MRX php-5.6.30]# chkconfig php-fpm on
# /usr/local/php-fpm/sbin/php-fpm -t
[19-Apr-2018 23:16:19] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful //这是没问题的
# service php-fpm start
Starting php-fpm [19-Apr-2018 23:15:30] ERROR: [pool www] cannot get uid for user 'php-fpm' //php-fpm这个用户不存在。
[19-Apr-2018 23:15:30] ERROR: FPM initialization failed
failed
# useradd php-fpm 创建这个用户
# service php-fpm start //再执行启动,就正常了
Starting php-fpm done
# ps aux |grep php-fpm
root 3110 0.0 0.2 123656 4940 ? Ss 23:21 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 3111 0.0 0.2 123656 4680 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3112 0.0 0.2 123656 4680 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3113 0.0 0.2 123656 4680 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3114 0.0 0.2 123656 4680 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3115 0.0 0.2 123656 4684 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3116 0.0 0.2 123656 4684 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3117 0.0 0.2 123656 4684 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3118 0.0 0.2 123656 4684 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3119 0.0 0.2 123656 4684 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3120 0.0 0.2 123656 4684 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3121 0.0 0.2 123656 4684 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3122 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3123 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3124 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3125 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3126 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3127 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3128 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3129 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
php-fpm 3130 0.0 0.2 123656 4688 ? S 23:21 0:00 php-fpm: pool www
root 3132 0.0 0.0 112680 984 pts/0 S+ 23:21 0:00 grep --color=auto php-fpm
php-fpm:定义的用户。
www:模块名。
四、Nginx介绍
Nginx官网:Nginx.org,最新版稳定版1.14(带stable)。
Nginx应用场景:web服务、反向代理、负载均衡。
Nginx著名分支:淘宝(基于Nginx开发的Tengine),服务名,配置文件名都一样,和Nginx最大的区别是Tengine增加了一些定制化模块,在安全限速方面表现突出,另外它支持对js,css合并。
Nginx核心+lua相关的组件和模块组成了一个支持lua的高性能web容器,openresty,参考http://jinnianshilongnian.iteye.com/blog/2280928