LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
(1)Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
(2)Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
(3)Mysql是一个小型关系型数据库管理系统。 PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
(4)这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
lnmp架构部署示意图:
1.Apache+PHP 和 Nginx+PHP的区别
Apache一般是把PHP当做自己的一个模块来启动;而Ngnix则是把http请求变量转发给PHP进程,即PHP独立进程,与Ngnix通信,这种方式叫做Fast-CGI运行方式。所以Apache所编译的PHP不能用于Nginx。
2.什么是Fast-CGI
Fast-CGI是一个可伸缩的、高速的在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持Fast-CGI,包括Apache、Nginx和lighttpd等。同时,Fast-CGI也被许多脚本语言支持,其中就有PHP。
Fast-CGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。
FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给Fast-CGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
3.Nginx+Fast-CGI运行原理
Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过Fast-CGI接口来调用。Fast-CGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。
wrapper:为了调用CGI程序,还需要一个Fast-CGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过Fast-CGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过Fast-CGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+Fast-CGI的整个运作过程。
Nginx+Fast-CGI运行过程
1.下载cmake-2.8.12.2-4.el6.x86_64.rpm 和mysql-boost-5.7.17.tar.gz
2.安装源码编译工具cmake(支持编译C++语言):cmake跨平台工具是用来预编译mysql源码的,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等
yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
3.tar zxf mysql-boost-5.7.17.tar.gz ##解压源码包
4.cd mysql-5.7.17/
5.创建预编译环境,可以定制即加上自己所需的安装条件(比如安装位置等等)
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 \ Unix socket文件路径
> -DWITH_MYISAM_STORAGE_ENGINE=1 \ 安装 myisam 存储引擎
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 安装 innodb 存储引擎
> -DDEFAULT_CHARSET=utf8 \ 使用utf8字符
> -DDEFAULT_COLLATION=utf8_general_ci \ 校验字符
> -DEXTRA_CHARSETS=all \ 安装所有扩展字符集
6.直接执行完上面命令后,会报错,要解决一系列依赖性
yum install gcc gcc-c++ -y rm -fr CMakeCache.txt
cmake后加入语句-DWITH_BOOST=boost/boost_1_59_0/ 并删除CMakeCache.txt(编译缓存文件信息)
cmake
yum install ncurses-devel -y cmake rm -fr CMakeCache.txt #ncurses-devel为字符终端处理库
yum intsall bison -y cmake ##linux下c/c++语法分析器
rm -fr CMakeCache.txt cmake
7.编译 make && make install
8.配置mysql
1)进入源码编译目录,再进入mysql安装的位置,将编译完成的默认配置文件放在/etc下
cd /usr/local/lnmp/mysql/ # mysql的安装位置
cd support-files/ #配置文件所在位置
cp my-default.cnf /etc/my.cnf # 将配置文件拷贝到/etc(系统默认配置文件目录)
2)配置mysql服务
vim /etc/my.cnf ##编辑mysql配置文件
# These are commonly set, remove the # and set as required.
basedir = /usr/local/lnmp/mysql # mysql的安装目录
datadir = /usr/local/lnmp/mysql/data # mysql数据存放位置
port = 3306 # mysql服务对外端口
# server_id = .....
socket = /usr/local/lnmp/mysql/data/mysql.sock # mysql与外界联系的套接字文件位置
3)将编译完成的mysql启动脚本复制到系统启动服务的默认目录中
cp mysql.server /etc/init.d/mysqld
4)对mysql服务进行限制(利用mysql用户),将mysql服务的工作空间局限在mysql用户的家目录中,创建mysql组和mysql用户
groupadd -g 27 mysql
useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql -s /sbin/nologin mysql #指定mysql用户的家目录为/usr/local/lnmp/mysql/data(-M表示不创建其家目录)。为了系统安全,MYSQL默认使用mysql用户来运行相关程序。
id mysql ##查看mysql用户id
5)将mysql目录下的data目录的所属组修改为mysql,因为mysql服务将要往这个目录中写数据,保证其有执行权限
cd /usr/local/lnmp/mysql/
chown mysql.mysql . -R
ll
6)将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令
vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin ##将mysql命令的路径加入环境变量 方便使用
source .bash_profile ##加载.bash_profile文件 把mysql对应的文本脚本添加到环境变量中。也可以加载root的path中,使用软连接添加进来。(ln -s /usr/local/lnmp/mysql/bin/* /usr/local/sbin)
7)执行mysql的配置初始化文件
mysqld --initialize --user=mysql ##注意生成的初始化密码在最底下(注意不要冒号后面的空格)
8)mysql的安全初始化
此时,mysqld服务已经可以开启关闭了
cd /usr/local/lnmp/mysql/
chown root.root . -R
chown mysql data/ -R ###将此目录的所有文件用户和家目录都改成超户 ,除了data改成mysql因为mysql服务将要往这个目录中写数据,保证其有执行权限
/etc/init.d/mysqld start
执行安全初始化脚本mysql_secure_installation
(1)在第一次交互请求后面输入刚刚初始化时复制的密码
(2)然后输入两次新密码
(3)接下来的交互式请求可以直接回车,这条交互式请求是询问你是否要检查密码强度, 如果输入y,就要重新修改密码,密码长度必须超过8位,必须有大小写字母, 所以我们直接回车
(4)接下来会询问是否要修改root密码,直接回车,因为上面已经设置过了
(5) 是否删除匿名用户直接enter跳过
(6)接下来全部输入y回车就行 现在就可以直接进入mysql了
登陆:
mysql -p 或者 mysql -u root -pwestos
至此 mysql源码编译成功!!!
1.下载php源码包进行解压
tar jxf php-5.6.35.tar.bz2
cd php-5.6.35
ls
./configure --help | grep mysql ###过滤出与mysql相关的模块
2进入解压目录创造预编译环境
./configure --perfix=/usr/local/lnmp/php ##php安装的位置
--with-config-file-path=/usr/local/lnmp/php/etc #php配置文件所在的位置
--with-mysql=mysqlnd --enable-mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd ##支持与mysql数据库之间建立联系
--with=openssl ##支持openssl加密
--with-snmp
--with-gd --with-zlib
--with-curl
--with-libxml-dir ##支持libxml函数
--with-png-dir --with-jpeg-dir --with-freetype-dir ##php处理图片格式
--with-pear
--with-gettext
--with-gmp
--enable-inline-optimization
--enable-soap
--enable-ftp
--enable-sockets
--enable-mbstring
--enable-fpm # 开启fpm模式(nginx等服务用的)
--with-fpm-user=nginx # 对PHP服务的限制通过nginx用户来实现
--with-fpm-group=nginx # PHP以nginx用户组身份运行
--with-mcrypt # 提供了对多种块算法的支持 主要用来实现加密等算法
--with-mhash # 加密算法
3.解决依赖性
yum install libxml2-devel -y
yum install openssl-devel -y
yum install curl-devel -y
yum install gmp-devel -y
yum install net-snmp-devel -y
###注意这几个包系统里面没有,需要从网上下载 ######
yum install -y gd-devel-2.0.35-11.el6.x86_64.rpm
yum install libmcrypt-devel-2.5.8-9.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm -y
rpm -ivh re2c-0.13.5-1.el6.x86_64.rpm
然后重新执行这条命令:
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp --with-gettext --with-pear --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
4.编译和安装
make && make install
5.拷贝文件配置文件
cd /usr/local/lnmp/php/etc
cp php-fpm,conf.default php-fpm.conf
cd
cd php-5.6.35
cp php.ini-production /usr/local/lnmp/php/etc/php.ini
6.修改之前拷贝的配置文件(配置pid和时区)
vim /usr/local/lnmp/php/etc/php-fpm.conf
将第25行注释去掉(pid)
cd /usr/local/lnmp/php/etc/
vim php.ini ###修改时区
933 [Date]
934 ; Defines the default timezone used by the date functions
935 ; http://php.net/date.timezone 936 date.timezone = Asia/Shanghai
7.建立nginx用户
useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
id nginx
8.将php启动的脚本复制到系统启动脚本的默认目录下,并测试php是否可以启动
cd
cd php-5.6.35/sapi/fpm/
cp init.d.php-fpm /etc/init.d/php-fpm ###制作php启动脚本
chmod +x /etc/init.d/php-fpm ###给启动脚本添加执行权限
/etc/init.d/php-fpm start ps ax ###查看php进程是否开启
netstat -antlp ###查看端口状态
至此php源码编译成功!!
1.解压源码包
tar zxf nginx-1.10.1.tar.gz
cd nginx-1.10.1
cd src/core/
vim nginx.h ##去掉版本号
3.注释掉179行
cd nginx-1.10.1/auto/cc/
vim gcc
##debug,找到那行进行注释
4.进行预编译
cd nginx-1.10.1
./configure --help ###查看要添加的模块帮助
./configure --prefix=/usr/local/lnmp/nginx
--with-http_ssl_module
--with-http_stub_status_module
--user=nginx
--group=nginx
--with-threads
--with-file-aio
5.解决依赖性安装
yum install -y pcre-devel
重新执行这条命令:
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --user=nginx --group=nginx --with-threads --with-file-aio
6.编译安装
make && make install
7.配置nginx服务
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
vim /etc/security/limits.conf
nginx - nofile 65536
8.将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令
vim /root/.bash_profile ###制作nginx启动脚本
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin
source .bash_profile ###刷新一下
cd /usr/local/lnmp/nginx/sbin/
nginx -t ##检测语法
nginx ###打开nginx
cd /usr/local/lnmp/nginx/html/ ###默认发布目录
vim index.php
phpinfo()
?>
/etc/init.d/php-fpm reload 重新加载php服务
在网站分别访问172.25.45.1 172.25.45.1/index.php
为了方便测试再次编辑nginx.conf
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
nginx -s reload
下载论坛安装包:Discuz_X3.2_SC_UTF8.zip
yum install unzip -y
unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/ ###解压到指定目录
cd /usr/local/lnmp/nginx/html/
mv upload bbs ###改目录名
测试:172.25.45.1/bbs/install 选择我同意
cd bbs/
chmod 777 config/ data/ uc_server/ uc_client/ -R ##修改下面目录权限 若不改 下面文件权限会产生报错
选择下一步
选择全新安装 点击下一步
设置管理员密码 点击下一步
此时在/usr/local/lnmp/php/etc/php.ini 我们需要指定php连接mysql的通信接口,三个位置
cd /usr/local/lnmp/php/etc/
ls
vim php.ini
/etc/init.d/php-fpm reload
在此安装时还会报错,是因为连接数据库的权限不够
/etc/init.d/php-fpm reload ###重新加载配置文件
cd /usr/local/ ll ###查看里面目录权限
cd lnmp/ ll ###查看里面目录权限
cd mysql/ ll ###查看里面目录权限
chmod 755 data/ ###将data目录权限修改
/etc/init.d/mysqld start
此时论坛成功安装 (注意mysql中root用户密码的准确性)
登陆查看 172.25.45.1/bbs/forum.php
管理员身份登陆之后进入管理员管理中心,提示删除/install/目录下的php文件,按提示执行,避免二次安装
cd /usr/local/lnmp/nginx/html/bbs/install/
ls
rm -fr index.php ##删除此文件