LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
一.Mysql源码安装
1.安装依赖
[root@server1 mnt]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
[root@server1 mnt]# yum install gcc gcc-c++ -y
[root@server1 mnt]# yum install ncurses-devel -y
[root@server1 mnt]# yum install bison -y
2.安装mysql
[root@server1 mnt]# tar zxf mysql-boost-5.7.11.tar.gz
[root@server1 ~]# cd /mnt/mysql-5.7.11/
[root@server1 mysql-5.7.11]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/mnt/mysql-5.7.11/boost/boost_1_59_0/
[root@server1 mysql-5.7.11]# make
[root@server1 mysql-5.7.11]# make install
3.配置mysql
创建mysql组和用户并指定家目录
[root@server1 lnmp]# groupadd -g 27 mysql
[root@server1 lnmp]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/ mysql
更改权限
[root@server1 ~]# usermod -s /sbin/nologin mysql
[root@server1 ~]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# chown mysql.mysql . -R
添加mysql的路径
[root@server1 ~]# vim .bash_profile
[root@server1 ~]# source .bash_profile
更改mysql脚本位置
[root@server1 support-files]# pwd
/usr/local/lnmp/mysql/support-files
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
[root@server1 support-files]# chmod +x /etc/init.d/mysqld
更改mysql数据路径
[root@server1 ~]# vim /etc/my.cnf
mysql初始化
[root@server1 mysql]# mysqld --initialize --user=mysql
初始化时出错,删除data下的数据再次初始化就行
启动使用mysql
[root@server1 data]# /etc/init.d/mysqld start
[root@server1 data]# mysql -p
登陆时需要密码,注意初始化完成后会生成一个随机密码
4.更改mysql的密码
[root@server1 ~]# mysql_secure_installation
测试修改成功
二.php
1.安装php源码包
解决依赖
[root@server1 ~]# yum install -y net-snmp-devel -y
[root@server1 ~]# yum install libcurl-devel -y
[root@server1 ~]# yum install libxml2-devel -y
[root@server1 php-5.6.20]# yum install openssl-devel curl-devel bison gmp-devel -y
安装
[root@server1 ~]# tar jxf php-5.6.20.tar.bz2
[root@server1 php-5.6.20]# ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-pear --with-gettext --with-gmp --enable-inline-optimization --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
[root@server1 php-5.6.20]# make && make install
2.配置php文件
[root@server1 php-5.6.20]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 etc]# cd /root/php-5.6.20
[root@server1 php-5.6.20]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 etc]# vim /usr/local/lnmp/php/etc/php.ini
[root@server1 etc]# vim /usr/local/lnmp/php/etc/php-fpm.conf
更改启动脚本位置,加执行权限
[root@server1 ~]# cd /root/php-5.6.20/sapi/fpm/
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm
增加nginx用户,启动php
[root@server1 ~]# useradd -u 800 -M -d /usr/local/lnmp/nginx nginx
[root@server1 ~]# /etc/init.d/php-fpm start
三.nginx源码安装
1.安装
解压编译,去掉版本号,关闭gcc编译
[root@server1 mnt]# tar zxf nginx-1.10.1.tar.gz
[root@server1 mnt]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim src/core/nginx.h
[root@server1 nginx-1.10.1]# vim auto/cc/gcc
[root@server1 nginx-1.10.1]# yum install pcre-devel -y
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-threads --user=nginx --group=nginx
[root@server1 nginx-1.10.1]# make && make install
做软链接,启动nginx
[root@server1 ~]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
2.配置nginx
[root@server1 ~]# cd /usr/local/lnmp/nginx/
[root@server1 nginx]# vim conf/nginx.conf
配置主页面php ,修改include 为 fastcgi.conf
php访问页面
[root@server1 nginx]# vim html/index.php
[root@server1 nginx]# nginx -s reload
把数据库的数据目录加到php.ini中
[root@server1 lnmp]# vim /usr/local/lnmp/php/etc/php.ini
测php访问页面,mysql接口正常
[root@server1 ~]# nginx -s reload
四.论坛Discuz的搭建
1.解压论坛包
[root@server1 mnt]# yum install unzip -y
[root@server1 mnt]# unzip Discuz_X3.2_SC_UTF8.zip
把upload移到/bbs 文件
[root@server1 mnt]# mkdir /bbs
[root@server1 mnt]# mv upload/* /bbs
修改nginx的发布目录
[root@server1 upload]# vim /usr/local/lnmp/nginx/conf/nginx.conf
[root@server1 upload]# nginx -s reload
2.配置论坛
网页进入安装配置界面
当前状态不能写入,需要增加权限
[root@server1 bbs]# chmod 777 config/ data/ -R
[root@server1 bbs]# chmod 777 uc_client/ uc_server/ -R
[root@server1 mysql]# chmod 755 data/ -R
[root@server1 bbs]# chmod 777 /usr/local/lnmp/mysql/data/mysql.sock
[root@server1 bbs]# /etc/init.d/php-fpm reload
自己的论坛建好
删除index.php,以免冲突
五.MemCache缓存
缓存体系一:缓存在php上
MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。
布局memcache缓存磁盘设置server2,交叉存储
1.添加php的路径
[root@server1 ~]# vim .bash_profile
[root@server1 ~]# source .bash_profile
2.编译安装memcche
[root@server1 ~]# tar zxf memcache-2.2.5.tgz
[root@server1 memcache-2.2.5]# phpize
[root@server1 memcache-2.2.5]# ./configure --prefix=/usr/local/lnmp/php/memcache
[root@server1 memcache-2.2.5]# make && make install
3.配置php
[root@server1 ~]# vim /usr/local/lnmp/php/etc/php.ini
[root@server1 ~]# /etc/init.d/php-fpm reload
4.将memcache测试文件拷贝到nginx的发布目录
[root@server1 ~]# cd /root/memcache-2.2.5
[root@server1 memcache-2.2.5]# cp example.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# cp memcache.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# vim /usr/local/lnmp/nginx/html/example.php
[root@server1 memcache-2.2.5]# vim /usr/local/lnmp/nginx/html/memcache.php
5.部署server2
[root@server2 ~]# yum install memcached -y
[root@server2 ~]# /etc/init.d/memcached start
6.测试
[root@foundation87 ~]# ab -c 100 -n 100 http://172.25.87.1/example.php
http://172.25.18.1/memcache.php
密码为memcache.php中设置的密码
缓存体系二:缓存在nginx上
可以看到,即使memcache命中,还是要进入PHP的生命周期。我们知道,目前很多互联网应用都使用RESTful规范进行设计,在RESTful应用下,普遍使用uri和查询参数作为缓存的key,因此一种更高效的缓存策略是Nginx直接访问memcache,并用$uri和$args等Nginx内置变量设定缓存key规则,这样,当缓存命中时,Nginx可以跳过通过fastcgi和PHP通信的过程,直接从memcache中获取数据并返回。memc-nginx和srcache-nginx正是利用这种策略提高了缓存的效率。下图是这种高效缓存策略的示意图(当memcache命中时)。
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
1.安装openresty
[root@server1 mnt]# tar zxf openresty-1.13.6.1.tar.gz
[root@server1 mnt]# cd openresty-1.13.6.1
[root@server1 openresty-1.13.6.1]# ./configure
[root@server1 openresty-1.13.6.1]# gmake && gmake install
2.关闭原有的nginx,开启openresty自带的nginx
[root@server1 openresty-1.13.6.1]# nginx -s stop
[root@server1 openresty-1.13.6.1]# cd /usr/local/openresty/nginx/sbin/
[root@server1 sbin]# ./nginx
3.更改openresty中nginx的配置,编写发布文件,重加载nginx
[root@server1 ~]# vim /usr/local/openresty/nginx/conf/nginx.conf
[root@server1 ~]# cd /usr/local/openresty/nginx/html/
[root@server1 html]# vim index.php
4.在 nginx中设置memcache
[root@server1 sbin]# vim /usr/local/openresty/nginx/conf/nginx.conf
[root@server1 sbin]# ./nginx -s reload
5.server3
[root@server3 ~]# yum install memcached -y
[root@server3 ~]# /etc/init.d/memcached start
6.测试
[root@foundation87 ~]# ab -c 100 -n 100 http://172.25.87.1/example.php