实现LNMP编译安装

nginx-1.0.13+ mysql-5.5.19 + php-5.3.10编译安装过程:

 

前提条件:为了方便一些软件的安装,我们事先配置好yum源,采用yum命令安装一些软件。

# mount /dev/cdrom /media    先把系统光盘挂载到本地/media下。

创建yum源:

/etc/yum.repos.d/目录下,建立以.repo结尾的任意文件名的文件,例local.repo


  1. # vim /etc/yum.repos.d/local.repo 
  2.  
  3. [base] 
  4. name=Server 
  5. baseurl=file:///media/Server 
  6. gpgcheck=0 
  7. enabled=1  
  8.  
  9. [VT] 
  10. name=VT 
  11. baseurl=file:///media/VT 
  12. gpgcheck=0 
  13. enabled=1 
  14.  
  15. [Cluster] 
  16. name=Cluster 
  17. baseurl=file:///media/Cluster 
  18. gpgcheck=0 
  19. enabled=1 
  20.  
  21. [ClusterStorage] 
  22. name=ClusterStorage 
  23. baseurl=file:///media/ClusterStorage  
  24. gpgcheck=0 
  25. enabled=1 

保存完成后退出,yum源创建成功,现在可以使用yum安装软件了。


  1. # yum groupinstall "Development Tools"  
  2. # yum groupinstall "Development Libraries" 

 说明:不安装这两个软件包组下面不会编译。

一、编译安装nginx

 

1.解决软件的依赖关系

需要软件包

pcre-devel-6.6-2.el5_1.7

gcc-4.1.2-46.el5

zlib-devel-1.2.3-3

openssl-devel-0.9.8e-12.el5

由于gcczlib-developenssl-devel在安装"Development Tools""Development Libraries"的时候已经安装,所以只需要安装pcre-devel即可。


  1. # yum install pcre-devel 

2.新建用户以安全方式运行:


  1. # groupadd -r nginx 
  2. # useradd -r -g nginx -s /bin/false -M nginx 

下载nginx-1.0.13软件源码包到本地。


  1. # tar xvf nginx-1.0.13.tar.gz 
  2. # cd nginx-1.0.13 
  3. # ./configure \ 
  4.   --prefix=/usr \ 
  5.   --sbin-path=/usr/sbin/nginx \ 
  6.   --conf-path=/etc/nginx/nginx.conf \ 
  7.   --error-log-path=/var/log/nginx/error.log \ 
  8.   --http-log-path=/var/log/nginx/access.log \ 
  9.   --pid-path=/var/run/nginx/nginx.pid  \ 
  10.   --lock-path=/var/lock/nginx.lock \ 
  11.   --user=nginx \ 
  12.   --group=nginx \ 
  13.   --with-http_ssl_module \ 
  14.   --with-http_flv_module \ 
  15.   --with-http_stub_status_module \ 
  16.   --with-http_gzip_static_module \ 
  17.   --http-client-body-temp-path=/var/tmp/nginx/client/ \ 
  18.   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 
  19.   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ 
  20.   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ 
  21.   --http-scgi-temp-path=/var/tmp/nginx/scgi \ 
  22.   --with-pcre 

备注:“\”为续行符。


  1. # make 
  2. # make install 

3. nginx提供服务脚本


  1. # vim /etc/rc.d/init.d/nginx 
  2.  
  3. #!/bin/sh 
  4. # nginx - this script starts and stops the nginx daemon 
  5. # chkconfig:   - 85 15 
  6. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
  7. #               proxy and IMAP/POP3 proxy server 
  8. # processname: nginx 
  9. # config:      /etc/nginx/nginx.conf 
  10. # config:      /etc/sysconfig/nginx 
  11. # pidfile:     /var/run/nginx.pid 
  12.  
  13. # Source function library. 
  14. . /etc/rc.d/init.d/functions  
  15.  
  16. # Source networking configuration. 
  17. . /etc/sysconfig/network 
  18.  
  19. # Check that networking is up. 
  20. [ "$NETWORKING" = "no" ] && exit 0 
  21.  
  22. nginx="/usr/sbin/nginx" 
  23. prog=$(basename $nginx) 
  24.  
  25. NGINX_CONF_FILE="/etc/nginx/nginx.conf" 
  26.  
  27. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx 
  28.  
  29. lockfile=/var/lock/subsys/nginx 
  30.  
  31. make_dirs() { 
  32.    # make required directories 
  33.    user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` 
  34.    options=`$nginx -V 2>&1 | grep 'configure arguments:'` 
  35.    for opt in $options; do 
  36.       if [ `echo $opt | grep '.*-temp-path'` ]; then 
  37.           value=`echo $opt | cut -d "=" -f 2` 
  38.            if [ ! -d "$value" ]; then 
  39.                # echo "creating" $value 
  40.                mkdir -p $value && chown -R $user $value 
  41.            fi 
  42.        fi 
  43.    done 
  44.  
  45. start() { 
  46.     [ -x $nginx ] || exit 5 
  47.     [ -f $NGINX_CONF_FILE ] || exit 6 
  48.     make_dirs 
  49.     echo -n $"Starting $prog: " 
  50.     daemon $nginx -c $NGINX_CONF_FILE 
  51.     retval=$? 
  52.     echo 
  53.     [ $retval -eq 0 ] && touch $lockfile 
  54.     return $retval 
  55.  
  56. stop() { 
  57.     echo -n $"Stopping $prog: " 
  58.     killproc $prog -QUIT 
  59.     retval=$? 
  60.     echo 
  61.     [ $retval -eq 0 ] && rm -f $lockfile 
  62.     return $retval 
  63.  
  64. restart() { 
  65.     configtest || return $? 
  66.     stop 
  67.     sleep 1 
  68.     start 
  69.  
  70. reload() { 
  71.     configtest || return $? 
  72.     echo -n $"Reloading $prog: " 
  73.     killproc $nginx -HUP 
  74.     RETVAL=$? 
  75.     echo 
  76.  
  77. force_reload() { 
  78.     restart 
  79. }  
  80.  
  81. configtest() { 
  82.   $nginx -t -c $NGINX_CONF_FILE 
  83.  
  84. rh_status() { 
  85.     status $prog 
  86.  
  87. rh_status_q() { 
  88.     rh_status >/dev/null 2>&1 
  89.  
  90. case "$1" in 
  91.     start) 
  92.         rh_status_q && exit 0 
  93.         $1 
  94.         ;; 
  95.     stop) 
  96.        rh_status_q || exit 0 
  97.         $1 
  98.         ;; 
  99.     restart|configtest) 
  100.         $1 
  101.         ;; 
  102.     reload) 
  103.         rh_status_q || exit 7 
  104.         $1 
  105.         ;; 
  106.     force-reload) 
  107.         force_reload 
  108.         ;; 
  109.     status) 
  110.         rh_status 
  111.         ;; 
  112.     condrestart|try-restart) 
  113.         rh_status_q || exit 0 
  114.             ;; 
  115.     *) 
  116.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  117.         exit 2 
  118. esac 

保存并退出。

备注:提供此脚本的好处就是可以使用诸如service nginx start的命令了。

而后为此脚本赋予执行权限:


  1. # chmod +x /etc/rc.d/init.d/nginx 

加入到服务列表:


  1. # chkconfig --add nginx 

实现开机启动:


  1. # chkconfig nginx on 

接下来就可以启动服务进行测试了。


  1. # service nginx start 

 

二、编译安装mysql

1、准备数据存放的文件系统

新建一个逻辑卷,并将其挂载至特定目录。

# fdisk /dev/sda

增加一个sda5id8e,先不要格式化。


  1. # partprobe /dev/sda 
  2. # pvcreate /dev/sda5 
  3. # vgcreate myvg /dev/sda5 
  4. # lvcreate -L 2G -n mysql myvg 
  5. # mke2fs -j /dev/myvg/mysql 
  6. # mkdir /mydata/data -pv 
  7. # mount /dev/myvg/mysql /mydata 

这里假设其逻辑卷的挂载目录为/mydata

 

2.新建用户以安全方式运行:


  1. # groupadd -r mysql 
  2. # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql 

3.安装并初始化mysql-5.5.19

首先下载平台对应的mysql版本至本地,为mysql-5.5.19-linux2.6-i686.tar.gz


  1. # tar xvf mysql-5.5.19-linux2.6-i686.tar.gz  -C /usr/local    
  2. # cd /usr/local 
  3. # ln –sv mysql-5.5.19-linux2.6-i686 mysql   
  4. # chown –R mysql:mysql /mydata/data mysql/* 
  5. # cd mysql 

# ll  查看所有文件属主以及属组是否是mysql

 初始化mysql


  1. # scripts/mysql_install_db --user=mysql --datadir=/mydata/data   
  2. # chown -R root mysql/* 

4.mysql提供主配置文件:


  1. # cd /usr/local/mysql 
  2. # cp support-files/my-large.cnf  /etc/my.cnf 

并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:

thread_concurrency = 2


另外还需要添加如下行指定mysql数据文件的存放位置:

datadir = /mydata/data

 

5. mysql提供sysv服务脚本:


  1. # cd /usr/local/mysql 
  2. # cp support-files/mysql.server  /etc/rc.d/init.d/mysqld 
  3. # chkconfig --add mysqld 
  4. # chkconfig mysqld on 
  5. # service mysqld start 

 备注:提供此脚本的好处就是可以使用诸如service mysqld start的命令了。

并添加至服务列表,实现开机启动,再启动服务测试。

为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:

 

6、输出mysqlman手册至man命令的查找路径:

编辑/etc/man.config,添加下面一行即可:


  1. /etc/man.config 
  2. MANPATH  /usr/local/mysql/man 

 

7、输出mysql的头文件至系统头文件路径/usr/include

这可以通过简单的创建链接实现:


  1. # ln -sv /usr/local/mysql/include  /usr/include/mysql 

8、输出mysql的库文件给系统库查找路径,而后让系统重新载入系统库:


  1. # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 
  2. # ldconfig -v 

 

9、修改PATH环境变量,让系统可以直接使用mysql的相关命令

编辑/etc/profile文件, 添加一句:


  1. # vim /etc/profile  
  2. PATH=$PATH:/usr/local/mysql/bin 

# source /etc/profile  让内核重读一下配置文件,以实现当时生效。

运行一下mysql命令看是否能正常运行。

# mysql

这时你可能看到“mysql>”就说明你已经登录进mysql里了,只是此时还没有配置密码而已。

 

三、编译安装php

 

1、解决依赖关系:

需要下面几个软件包:

mcrypt-2.6.8-1.el5.i386.rpm

libevent-2.0.17-2.i386.rpm

libevent-devel-2.0.17-2.i386.rpm

mhash-0.9.9-1.el5.centos.i386.rpm

mhash-devel-0.9.9-1.el5.centos.i386.rpm

libmcrypt-2.5.8-4.el5.centos.i386.rpm

libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm

以为有些软件已经安装,并且有些软件有些依赖关系,此时我们要升级安装并忽略依赖关系(不建议这样子做,大家最好还是把依赖关系的软件包下载下来安装)


  1. # rpm –Uvh mcrypt-2.6.8-1.el5.i386.rpm –nodeps 
  2. # rpm –Uvh libevent-2.0.17-2.i386.rpm –nodeps 
  3. # rpm –Uvh libevent-devel-2.0.17-2.i386.rpm –nodeps 
  4. # rpm –Uvh mhash-0.9.9-1.el5.centos.i386.rpm –nodeps 
  5. # rpm –Uvh mhash-devel-0.9.9-1.el5.centos.i386.rpm –nodeps 
  6. # rpm –Uvh libmcrypt-2.5.8-4.el5.centos.i386.rpm –nodeps 
  7. # rpm –Uvh libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm –nodeps 

2.编译安装php-5.3.10

首先下载源码包至本地目录。


  1. # tar xvf php-5.3.10.tar.bz2 
  2. # cd php-5.3.10 
  3. # ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --enable-fpm --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml  --with-mhash --with-mcrypt  --with-config-file-path=/etc/php --with-config-file-scan-dir=/etc/php --with-bz2 --with-curl 
  4. # make 
  5. # make test 
  6. # make install 

3.php提供配置文件:


  1. # mkdir /etc/php 
  2. # cp php.ini-production /etc/php/php.ini 

4.启动fastcgi


  1. # cd /usr/local/php/etc 
  2. # cp php-fpm.conf.default php-fpm.conf 
  3. # vim  php-fpm.conf 

启用pid(去掉前面的“;”)

pid = run/php-fpm.pid

pm.max_children = 50

pm.start_servers = 5

pm.min_spare_servers = 5

pm.max_spare_servers = 35

;pm.process_idle_timeout = 3s; 改为pm.process_idle_timeout = 30s;

保存并退出。

 

5.php添加服务脚本


  1. # cd php-5.3.10 
  2. # cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm 

为脚本增加执行权限,添加此脚本到服务列表,实现开机启动,再启动服务测试。


  1. # chmod +x /etc/rc.d/init.d/php-fpm 
  2. # chkconfig –add php-fpm 
  3. # chkconfig php-fpm on 
  4. # service php-fpm start 

 

四、修改nginx的配置文件实现测试

 

1. 编辑/etc/nginx/nginx.conf,启用如下选项:


  1. # vim /etc/nginx/nginx.conf 
  2. location ~ \.php$ { 
  3.            root           /www/magedu; 
  4.             fastcgi_pass   127.0.0.1:9000; 
  5.             fastcgi_index  index.php; 
  6.             fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
  7.            include        fastcgi_params; 

2. 编辑/etc/nginx/nginx.conf

增加如下内容:

  1. # vim /etc/nginx/nginx.conf 
  2.  
  3. server { 
  4.         listen 80; 
  5.         server_name www.magedu.com; 
  6.         root /www/magedu; 
  7.         index index.php index.html; 
  8. …… 
  

说明:省略号……的内容代表这些内容:

# redirect server error pages to the static page /50x.html

        #

 

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #

        #location ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;

        #}

 

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

        location ~ \.php$ {

            root           /www/magedu;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi_params;

        }


  1. # mkdir /www/magedu –pv 
  2. # cd /www/magedu 
  3. # vim index.php 
  4. <?php 
  5. phpinfo() 
  6. ?> 

保存退出。


  1. # service nginx reload 

3.编辑/etc/nginx/fastcgi_params文件,清空之后添加如下内容并重启php-fpm与nginx:


  1. # vim /etc/nginx/fastcgi_params 
  2. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; 
  3. fastcgi_param  SERVER_SOFTWARE    nginx; 
  4. fastcgi_param  QUERY_STRING       $query_string; 
  5. fastcgi_param  REQUEST_METHOD     $request_method; 
  6. fastcgi_param  CONTENT_TYPE       $content_type; 
  7. fastcgi_param  CONTENT_LENGTH     $content_length; 
  8. fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; 
  9. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; 
  10. fastcgi_param  REQUEST_URI        $request_uri; 
  11. fastcgi_param  DOCUMENT_URI       $document_uri; 
  12. fastcgi_param  DOCUMENT_ROOT      $document_root; 
  13. fastcgi_param  SERVER_PROTOCOL    $server_protocol; 
  14. fastcgi_param  REMOTE_ADDR        $remote_addr; 
  15. fastcgi_param  REMOTE_PORT        $remote_port; 
  16. fastcgi_param  SERVER_ADDR        $server_addr; 
  17. fastcgi_param  SERVER_PORT        $server_port; 
  18. fastcgi_param  SERVER_NAME        $server_name; 
  19. # service php-fpm restart
  20. # service nginx restart

测试:在地址栏输入: www.magedu.com 出现

基于RHEL5的LNMP平台的构建

就说明php和nginx结合能正常使用了。

5.测试能否连接上Mysql

编辑/www/magedu/index.php,添加如下内容:

<?php

$link=mysql_connect('localhost','root','');

if ($link)

echo "successfu";

else

echo "Faile";

mysql_close();

?>

再次在地址栏里输入:www.magedu.com 如果在php页面上方出现successful,则说明php连接mysql成功了,整个lnmp平台完美构建了!

转载于:https://blog.51cto.com/lihuan/809395

相关文章: