LEMP架构及应用部署
LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和 Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,与微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
适用环境
系统支持:CentOS-5 (32bit/64bit)、CentOS-6 (32bit/64bit)等linux系统
内存要求:≥256M
- 构建LEMP网站平台
- 以编译的方式安装nginx
(1)、使用yum安装nginx所需要支持的软件,分别是pcre-devel和zlib-devel。
[[email protected] ~]# yum -y install pcre-devel zlib-devel
(2)、创建运行用户和组
[[email protected] ~]# useradd -M -s /sbin/nologin nginx
(3)、编译安装nginx
[[email protected] ~]# tar zxf nginx-1.0.8.tar.gz
[[email protected] ~]# cd nginx-1.0.8
[[email protected] nginx]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_status_modult
[[email protected] ~]#make && make install
为了使nginx服务器运行方便,可以为主程序nginx创建链接文件。
[[email protected] ~]# ln -s /usr/local/nginx/sbin/nginx /usr/login/sbin
附加:
如有想让对nginx服务启动、关闭方便的话,建议编写下面的脚本。
[[email protected] ~]#vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 9920
# description:Nginx Service Control Script
PROG=“/usr/local/nginx/sbin/nginx”
PIDF= “/usr/local/nginx/logs/nginx.pid”
case “$1” in
start)
$PROG
;;
stop)
kill -s QUIT$(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo “Usage: $0 {start|stop|restart|reload}”
exit 1
esac
exit 0
[[email protected] ~]# chmod +x /etc/init.d/nginx
[[email protected] ~]# chkconfig --add nginx
- 2. 安装MySQL数据库
(1)、编译安装MySQL数据库
可以从官方网站www.mysql.com下载,以5.1版本为例
[[email protected] ~]# tar zxf mysql-5.1.55.tar.gz
[[email protected] ~]# cd mysql-5.1.55
[[email protected]]# ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,gb2312
注解:
--with-charset //默认使用的字符集编码
--with-collation //指定默认使用字符集校对规则
--with-extra-charsets //指定额外支持的其他字符集编码
Utf8_general_ci //适用于UTF-8字符集的通用原则
[[email protected] ~]# make && make install
(2)、优化调整
[[email protected] mysql-1.5.55]# cp support-files/my-medium.cnf /etc/my.conf
[[email protected] mysql-1.5.55]# cp support-files/mysql.server /etc/init.d/mysqld
[[email protected] mysql-1.5.55]# chmod a+x /etc/rc.d/init.d/mysqld
[[email protected] mysql-1.5.55]# chkconfig --add mysqld
[[email protected] mysql-1.5.55]# ln -s /usr/local/mysql/sbin/* /usr/local/bin/
[[email protected] mysql-1.5.55]# ln -s /usr/local/mysql/lib/mysql/* /usr/lib/
[[email protected]]#ln -s /usr/local/mysql/include/mysql/* /usr/include
(3)、初始化数据库
[[email protected]~]# useradd -M -u 27 -s /sbin/nologin mysql
[[email protected]~]# cd /usr/local/mysql/bin
[[email protected]]# ./mysql_install_db --user=mysql
[[email protected]]# chown -R root:mysql /usr/local/mysql
[[email protected]]# chown -R mysql /usr/local/mysql/var
(4)、初始化数据库
[[email protected]~]# service mysqld start
[[email protected]~]# mysqladmin -u root password “[email protected]”
- 3. 安装PHP环境
较新版本(如5.3)的PHP已经自带FPM(FastCGI Process Manager,FastCGI进程管理器)模块,用来对php解析实例进行管理、优化解析效率。单服务器的LEMP架构经常使用这种方式,因此在编译PHP的时候应添加“—enable-fpm”以启用此模块。
以源码包php-5.3.6为例:
(1)、编译安装PHP
[[email protected] ~]# tar zxf php-5.3.6.tar.gz
[[email protected] ~]#cd php-5.3.6/
[[email protected] php-5.3.6]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm
注解:
--prefix=/usr/local/php5 指定PHP安装目录
–with-config-file-path=/usr/local/php/etc 指定php.ini位置
–with-mysql=/usr/local/mysql mysql安装目录,打开对mysql的支持
–with-gd 打开gd库的支持
–enable-mbstring 多字节,字符串的支持
–enable-fpm 打上php-fpm 补丁后才有这个参数,cgi方式安装的启动程序
–with-zlib-dir 打开zlib库的支持
[[email protected] php-5.3.6]#make && make intall
(2)、安装后的调整
[[email protected] php5-3.6]# cp php.ini-development /usr/local/php5/php.ini
[[email protected] php5-3.6]#ln -s /usr/local/php5/bin/* /usr/local/bin/
[[email protected] php5-3.6]#ln -s /usr/local/php5/sbin/* /usr/local/sbin/
(3)、安装ZendGuardLoader
[[email protected] ~]#tar zxf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
[[email protected] ~]# cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x
[[email protected] php-5.3.x]#cp ZendGuardLoader.so /usr/local/php5/lib/php.ini
[[email protected] php-5.3.x]# vi /usr/local/php5/php.ini
添加内容:
zend_extension=/usr/local/php5/lib/php/ZenGuardLoader.so
zend_loader.enable=1
- 4. 配置nginx支持PHP环境
如果让nginx能够解析PHP网页,有两种方法可以选择:一种是让nginx充当中介,将访问PHP页面的web请求交给其他LEMP去处理;另一种是通过使用PHP的FPM模块来实现。
(1)、启用php-fpm进程,以便于监听PHP解析请求。建立php-fpm.conf文件,并修改其中的PID文件、运行用户、服务数(进程数量)等相关设置,然后启动php-fpm程序即可。(默认监听本机的9000端口)
[[email protected] ~]#cd /usr/loca/php5/etc/
[[email protected] etc]# cp php-fpm.conf.default php-fpm.conf
[[email protected] etc]# vi php-fpm.conf
…….省略部分信息
pid = run/php-fpm.pid //确认pid文件位置
user = nginx //运行用户
group = nginx //运行组
pm.start_servers = 20 //启动时开启的进程数
pm.min_spare_servers = 5 //最少空闲进程数
pm.max_spare_servers = 35 //最多空闲进程数
[[email protected] etc]# /usr/local/sbin/php-fpm
查看是否被监听,如被监听则会显示
[[email protected] etc]# netstat -anpt | grep php-fpm
(2)、修改nginx服务脚本,以便于在启动/停止nginx服务器时php-fpm进程也会自动启动/停止。
[[email protected] ~]# vi /etc/init.d/nginx
……省略部分信息
PROG_FPM=“/usr/local/sbin/php-fpm”
PIDF_FPM=“/usr/local/php5/”
case “$1” in
start)
$PROG -c $CONF
$PROG_FPM
;;
stop)
kill -s QUIT $(can $PIDF) //根据PID杀死进程
kill -s QUIT $(cat $PIDF_FPM) //根据PID终止pid-fpm进程
;;
(3)、配置nginx支持PHP解析
无论是将PHP页面交给LAMP解析,还是调用本机的php-fpm进程进行解析,都需要在“server { }”配置段中添加location设置,以便于指定当访问.php网页时采取何种操作。
[[email protected] ~]#vi /usr/local/nginx/conf/nginx.conf
server {
……
location ~ \.php$ { //访问.php页面的配置段
proxy_pass IP地址:80; //Apache服务器的监听地址
}
}
第二种方法(调用本机的php-fpm进程),使用的配置语句如下所示。在conf/目录下的fastcgi.conf文件中已经包含必需的设置,可通过include语句添加进来。
server {
……
location ~ \.php$ { //访问php页面的配置段
root /var/www/benet; //PHP网页文档根目录
fastcgi_pass 127.0.0.1:9000; //php-fpm的监听地址
fastcgi_index index.php; //PHP首页文件
include fastcgi.conf; //包括fastcgi.conf样本配置
}
}
- 5. PHP页面访问测试
[[email protected] ~]#vi /var/www/benet/test.php
<?php
$link=mysql_connect(‘localhost’ , ‘root’, ‘pwd123’ ); //连接MySQL数据库
If ($link) echo “<h1>successful</h1>”; //连接成功时的反馈消息
Mysql_close( ); //关闭数据库连接
?>
- LEMP平台部署web应用
LEMP平台与LAMP平台是非常相似的,区别主要在于所用WEB服务软件的不同, 而这与使用PHP开发的WEB应用程序并无太大关系,因此PHP应用的部署方法也是类似的,
下面以“天空网络电影系统(简称SKYUC)”为例介绍在LEMP平台中的部署过程。
释放并部署程序代码:
- 1. 下载并部署程序代码
[[email protected] ~]#tar jxf SKYUC_Free_For_PHP5.3.tar.bz2
[[email protected] ~]#mv SKYUC_Free_For_PHP5.3/wwwroot /var/www/benet/skyuc/
[[email protected] ~]#cd /var/www/benet/skyuc/
[[email protected] ~]#chown -R nginx:nginx admincp/ data/ templates/ upload/
- 2. 创建数据库
新建数据库skyucdb,授权用户runskyuc。
[[email protected] ~]#mysql -u root -p
Enter password: //验证root用户密码
mysql>create database skyucdb;
mysql>grant all on skyucdb.* to [email protected] identified by “[email protected]”;
- 3. 安装web应用
[[email protected] ~]#cd /var/www/benet./skync/
[[email protected] skync]# mv install install.lock
[[email protected] ~]#chmod 600 install.lock
- 4. 访问web应用系统
访问http://www.benet.com/skyuc,可以看到“天空网络电影系统”站点首页,通过http://www.benet.com/skyuc/admincp以管理员账号登入后台进行管理。