一.关于LNMP环境以及wdOS系统的介绍:
代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。是一类计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:、等。是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 是一个小型关系型数据库管理系统。是一种在服务器端执行的嵌入HTML文档的脚本语言.这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统.
作为centOS编译后的版本除了集成lamp,lnmp,lnamp一键安装包,还去除了大部分不常用软件包,筛选了系统基本包和web应用基础包,并进行了更新和优化,同时增加一些较常用的工具包,便于日常维护中使用和排错,另外,wdOS系统还集成了功能强大的虚拟主机管理系统wdcp 以及wdcp管理后台,可以说操作以及安装都非常简单方便。
本文这次主要是针对在wdOS的纯系统下进行源码编译安装LNMP环境做了一些相应的记录。安装的顺序为先安装mysql,再安装php,最后安装nginx。
二.安装前的准备工作:
1.创建安装时需要用到的目录:
1)创建php的安装目录: mkdir /usr/local/php
2)创建mysql的安装目录: mkdir /usr/local/mysql
2.安装mysql,php,nginx编译时需要用到的编译库文件:
1)安装mysql5.5.25a编译需要使用的cmake编译工具:
把cmake源码包下载到/usr/local/src 这个目录下:
说明:mysql5.0以后的版本不再使用./configure来编译,而是使用cmake这个编译工具
解压缩cmake源码包:
完成后cd cmake-2.8.4进入这个压缩后的目录下:
设置./bootstrap:
使用gmake命令进行编译
gmake install 进行安装初始化:
2)安装编译php所需要的库文件
yum -y install libevent libevent-devel libxml2 libxml2-devel libmcrypt libmcrypt-devel libmcrypt libmcrypt-devel curl-devel libpng-devel libtool-ltdl-devel (比较多,我这里一次性下载了)
3) 安装nginx编译时需要用到的编译库文件
openssl-devel,glib2-devel ,pcre-devel ,bzip2-devel 以及gzip-devel
不过,wdOS系统下默认安装了openssl-devel这个库文件
所以剩下的使用命令 yum install glib2-devel pcre-devel bzip2-devel gzip-devel 下载安装即可
三.安装过程:
第一步:源码安装mysql5.5.25a;
在下载mysql5.5.25a源码包之前先添加mysql用户以及mysql用户组:
完成后进入到/usr/local/src这个目录下,下载mysql源代码:
wget -c
tar -zxvf mysql-5.5.25a.tar.gz 进行解压缩:
进入解压缩后的mysql-5.5.25a这个目录下设置编译参数:
附:我使用的编译参数:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -----指定mysql的安装目录
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ ---这个是指定mysql服务器启动后,联机套接字文件所处的位置和文件名
-DDEFAULT_CHARSET=utf8 \ -----使用 utf8 字符
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \ ------ 校验字符
-DWITH_MYISAM_STORAGE_ENGINE=1 \ -------安装 myisam 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ ----安装 innodb 存储引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \ ----安装数据库分区
-DMYSQL_DATADIR=/var/mysql/data \
-DMYSQL_USER=mysql
设置完成后进行make 编译
然后make install进行安装:
安装完成之后,修改mysql主配置文件:
修改mysql文件的权限以及文件的所有者为mysql用户
设置软连接使mysql和mysqladmin的bin命令能在shell中直接运行
创建mysql的数据以及日志存放的目录,并设置目录的所有者为mysql用户
进入cd /usr/local/src//mysql-5.5.25a 进入这个目录下
cp support-files/my-medium.cnf /etc/my.cn 拷贝配置文件到/etc目录下并命名为my.cn
进入该配置文件/etc/my.cn,做下面的修改
在[mysqld]字段后面添加下面四句:
进入到mysql安装目录下的脚本目录下的脚本目录:/usr/local/mysql-5.5.25a/scripts
修改mysql_install_db这个文件的权限:
利用mysql_install_db脚本生成新的mysql授权表:
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/var/mysql/data &
添加启动脚本:
cp /usr/local/src/mysql-5.5.25a/support-files/mysql.server /etc/rc.d/init.d/mysqld
修改启动脚本:添加basedir以及datadir的路径:
修改启动脚本的权限:
启动数据库:
检查数据库的默认侦听端口 3306是否开启:
第二步:源码编译安装php5.3.10(FastCGI模式)
进入/usr/local/php这个目录下载php源码包
wget
添加php用户组和用户账号:(我这里以fpm用户组和fpm用户名为例)
解压缩php源代码包:
进入解压好的php-5.3.10 这个目录配置相应的编译参数:
附:具体的参数:
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --enable-mbstring --enable-fpm --with-iconv-dir=/usr/local/libiconv --enable-xml --with-curl --with-curlwrappers --with-mhash --with-mcrypt --with-gd --enable-gd-native-ttf --with-xmlrpc –with-zlib
不出意外的话,会看到下图的结果:
编译 make:(这个过程比较耗时)
编译完成的最后会出现下图:
开始安装:make install
复制php.ini到php安装目录 php.ini-development 到/usr/local/php/lib 这个目录下并重命名为php.ini:
说明:php.ini 是 PHP 在启动时会读取的配置文件,我这里没有做配置。另外,php5.0版本之后文件的名字发生了改变,其中php.ini-production对应于php.ini-recommended;而php.ini-development对应于php.ini-dist 。php.ini-dist 适合开发程式使用(也就是测试使用), php.ini-recommended 拥有较高的安全性设定,适合上线当产品使用
做方便php的运行的链接,不用配置环境变量
完成之后,我们就可以查看php的版本:
第三步:源码编译安装Nginx
进入/usr/local/src 这个目录下载nginx源码:
wget -c http://nginx.org/download/nginx-1.0.4.tar.gz
解压缩nginx 源代码包:tar -zxvf nginx-1.0.4.tar.gz
进入解压好的nginx-1.0.4 这个目录配置相应的参数:
附:环境参数:(根据需要选择)
./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/share \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/log/run/nginx.pid \
--lock-path=/var/log/lock/subsys/nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_perl_module \
--with-mail \
--with-mail_ssl_module
进行编译: (这个时间相对php要短很多)
make
进行安装初始化;
make install
第四步:整合nginx和php:
修改进程管理器php-fpm的配置:
说明:在LAMP平台下,php是被编译成为模块然后被apache所调用;而在LNMP平台下,php是被编译成二进制文件执行,这样就需要通过fastCGI技术来实现nginx和php的整合。这里通过使用fastCGI的一个进程管理器php-fpm,php5.3.3以后的版本已经内置了php-fpm,使用的时候只需要加入参数--enable-fpm就可以由此整合php与nginx
进入php-fpm的主配置文件 php-fpm.conf,找到图中的部分做相应的修改:
修改php-fpm 能通过unix domain socket的方式实现快速连接
说明:平时大家配置的nginx连接fastcgi的方式都是通过tcp来实现连接的,现在我们尝试使用的是一种速度更快的方法即unix domain socket:
cd /var/run 进入该目录,创建一个php-fpm.sock 文件并修改其所有者为nginx:
进入php-fpm管理器的主配置文件做下面的修改:
修改后,使用命令php-fpm启动php,启动后可以使用命令ps aux | grep php查看php进程是否开启:
下一步就是修改nginx的主配置文件/etc/nginx/nginx.conf ,增加下面这句:
fastcgi-pass unix:/var/run/php-fpm.sock
最后就是在/usr/share/html 这个目录下创建一个文件命名为info.php,在里面添加以下测试内容:
<?php /*注意脚本语言的书写*/phpinfo(); ?>
为了测试php能否与mysql协同工作,在该目录下另外创建一个文件命名为test.php,在里面添加以下的测试内容:
这样在/usr/share/html这个目录下就新建了两个文件
完成后,/usr/sbin/nginx -s reload重启nginx服务
二. 测试结果:(逐步测试)
安装完mysql之后,root用户登录时的界面:
登录后show databases 查看一下当前存在的数据库:(注意musql语句以;结尾)
安装完nginx之后,在本机的浏览器输入http:// ip地址(我这里以192.168.1.111为例)会看到niginx的经典测试页面:
整合nginx和php之后,在浏览器输入http://192.168.1.111/info.php可以看到php的测试页面:
现在再来看看php能否和mysql协同工作,在浏览器输入http://192.168.1.111/test.php就可以验证两者是否能正常工作了:
四.可能遇到的问题的解决方案:
1.第一次下载nginx源代码包的时候,由于网速不稳定遇到wget断开再重新连接的情况,原本以为没什么问题,结果在解压缩时提示"unexpected end of file"的错误:
后来我使用wget -c +网址 重新下载,再解压缩就没这个问题了。使用wget -c断点续传,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。
2.启动nginx时提示下图的错误:
这种情况出现的原因是因为nginx重复启动了,如果是需要重新启动nginx可以使用命令 /usr/sbin/nginx -s reload
3.在编译php时,出现 undefined reference to `php_ob_gzhandler_check'这样的错误提示:
解决的方法为: cd /usr/local/进入这个目录下添加一个新目录 mkdir libiconv
下载源代码:
wget -c http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
解压缩该libiconv压缩包 tar -zvxf libiconv-1.13.1.tar.gz
由当前目录cd 进入libiconv-1.13.1目录 ,配置编译时的参数:
./configure --prefix=/usr/local/ libiconv
之后就是make ,make install编译安装,完成后回到原来php编译前在configure参数后面添加–with-zlib 重新编译即可
4.还需要注意的一点是,niginx和php这里并没有设置开机自启动,所以每一次开机启动时都需要手动启动php以及nginx。