源代码搭建LNMP

           源代码搭建LNMP

1.安装 rpm包
        yum -y install libjpeg-devel  libpng-devel  libtiff-devel   fontconfig-devel   freetype-devel  libXpm-devel  gettext-devel openssl-devel   libtool-ltdl-devel 
2.安装 Nginx
       2.1  安装pcre,系统自带的pcre 版本过低,不能满足我们的需求。 pcre 是一个正则表达式相关的包,要想Nginx 使用Rewrite,那么就需要正则的支持。
       [root@server lnmp]# tar xf pcre-8.10.tar.bz2
       [root@server lnmp]# cd pcre-8.10
       [root@server pcre-8.10]# ./configure
       [root@server pcre-8.10]# make &&  make install
       编译安装Nginx 
       [root@server lnmp]# useradd nginx
       [root@server lnmp]# tar xf nginx-0.8.46.tar.gz
       [root@server lnmp]# cd nginx-0.8.46
       [root@server nginx-0.8.46]# ./configure \ 
                                                    --user=nginx \
                                                    --group=nginx \
                                                    --prefix=/usr/local/nginx/ \ 
                                                    --with-http_stub_status_module \ 
                                                    --with-http_ssl_module \
                                                    --with-sha1=/usr/lib \

[root@server nginx-0.8.46]# make && make install  
 我们使用--user 与--group 的参数指定Nginx 运行时的所有者,以提高安全性。--prefix 指定了Nginx 的安装位置。--with-http_stub_status_module 可以让Nginx 获取到相关的工作状态,以便我们平时可以做更好的监控。 --with-http_ssl_module 为启用ssl的支持。--with-sha1 指定希哈函数库位置。 
3.编译安装 Mysql
[root@server lnmp]# tar xf mysql-5.1.49.tar.gz
[root@server lnmp]# cd mysql-5.1.49
[root@server mysql-5.1.49]# autoreconf --force --install
[root@server mysql-5.1.49]# ./configure \
                                 "--prefix=/usr/local/mysql" \
                                 "--localstatedir=/var/lib/mysql/" \
                                 "--enable-assembler"  \
                                 "--with-extra-charsets=all"   \
                                 "--enable-thread-safe-client"   \
                                 "--with-client-ldflags=-all-static"     \
                                 "--with-mysqld-ldflags=-all-static"     \ 
                                 "--with-pthread"     \
                                 "--with-big-tables"    \
                                 "--without-debug"   \
                                 "--with-ssl"
[root@server mysql-5.1.49]# make &&  make install
[root@server mysql-5.1.49]# useradd mysql
[root@server mysql-5.1.49]# /usr/local/mysql/bin/mysql_install_db --user=mysql
[root@server ~]# cd /usr/local/mysql
[root@server mysql]# chown -R root:mysql .
[root@server mysql]# chown mysql. /var/lib/mysql -R
[root@server mysql]# cp share/mysql/my-huge.cnf /etc/my.cnf
[root@server mysql]# cp share/mysql/mysql.server /etc/init.d/mysqld
[root@server mysql]# chmod 755 /etc/init.d/mysqld
[root@server mysql]# chkconfig --add mysqld
[root@server mysql]# service mysqld start
[root@server mysql]# echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bashrc
[root@server mysql]# . ~/.bashrc  
Autoconf 可以用来分析用户的系统,判断是否符合POSIX 标准,并提供相应解决方法。编译安装mysql 时我们尽量以静态化方式编译,提高mysql 性能,在安装之前你应该已经停止机器上原有的mysql,甚至应该将原本的卸载。--enable-assembler 参数将会使
mysql 使用一些字符函数的汇编版本,--with-extra-charsets 设置了支持的字符集,--enable-thread-safe-client 和--with-pthread 这两个参数要求mysql 使用线程库并以线程方式编译了客户端。将 /usr/local/mysql 目录的所有者改为 root.mysql 是为了安全性。源代码编译mysql 时,我们还需要手工创建配置文件和system V 服务脚本。Mysql 的安装可能需要花费一些时间,所以编译安装时可以休息一会。
4.编译安装 php  
        在安装php 之前要首先安装以下几个库 
       gd2  libiconv ibmcrypt  mhash   spawn-fcgi libevent。
       gd2 是一个用以生成图形图片的库,RHEL 自带gd2 的开发包,但是版本比较低,生成的图片是黑白的,非常不美观,因此这边单独编译一个高版本。
       libiconv 用于实现一个字符编码到另一个字符编码的转换。
       libmcrypt 可以使php 支持更多加密算法。
       mhash 是一个哈稀演函数库,它可以支持多种哈稀演算法,例如最出名的 MD5、SHA1 或 GOST,还有其它多种的哈稀演算法。
       spawn-fcgi spawn-fcgi 原本是lighttpd 的一个用来控制php-cgi 的工具,现在已从lighttpd 中独立出来成为一个开源项目。我们可以用它来启动,控制,管理php-cgi 的进程。使用它有诸多好处,比如我们可以将运行php-cgi 的主机与Nginx 分离开来,以减轻Nginx 服务器的负担,或者用来扩展架构,做更多的负载分担。减少进程的重复创建所带来的性能消耗等等。 
       libevent 是一个事件触发的网络库,适用于windows、linux、bsd 等多种平台,内部使用select、epoll、kqueue 等系统调用管理事件机制。
  

    编译安装gd2:
    [root@server lnmp]# tar xf gd-2.0.35.tar.bz2
    [root@server lnmp]# cd gd-2.0.35
    [root@server gd-2.0.35]# ./configure –prefix=/usr/local/gd2
    [root@server gd-2.0.35]# make &&  make install
     编译安装 libiconv:
    [root@server lnmp]# tar xf libiconv-1.13.1.tar.gz
    [root@server lnmp]# cd libiconv-1.13.1
    [root@server libiconv-1.13.1]# ./configure
    [root@server libiconv-1.13.1]# make && make install
     编译安装libmcrypt: 
    [root@server lnmp]# tar xf libmcrypt-2.5.7.tar.gz
    [root@server lnmp]# cd libmcrypt-2.5.7
    [root@server libmcrypt-2.5.7]# ./configure
    [root@server libmcrypt-2.5.7]# make && make install
    编译安装 mhash:
    [root@server lnmp]# tar xf mhash-0.9.9.9.tar.bz2
    [root@server lnmp]# cd mhash-0.9.9.9
    [root@server mhash-0.9.9.9]# ./configure
    [root@server mhash-0.9.9.9]# make && make install 
    编译安装spawn-fcgi:
    [root@server lnmp]# tar xf spawn-fcgi-1.6.3.tar.gz
    [root@server lnmp]# cd spawn-fcgi-1.6.3
    [root@server spawn-fcgi-1.6.3]# ./configure --prefix=/usr/local/spawn-fcgi
    [root@server spawn-fcgi-1.6.3]# make && make install
     编译安装ibevent:
    [root@server lnmp]# tar xf libevent-1.4.14b-stable.tar.gz
    [root@server lnmp]# cd libevent-1.4.14b-stable
    [root@server libevent-1.4.14b-stable]# ./configure
    [root@server libevent-1.4.14b-stable]# make  && make install 
编译安装php:
   [root@server lnmp]# tar xf php-5.2.14.tar.bz2
   [root@server lnmp]# cd php-5.2.14
   [root@server php-5.2.14]# ./configure \ 
                        "--prefix=/usr/local/php" \
                         "--enable-fastcgi"  \
                         "--enable-discard-path"   \
                         "--enable-force-cgi-redirect" \
                         "--with-config-file-path=/usr/local/php/etc" \
                         "--with-mysql=/usr/local/mysql" \
                         "--with-mysqli=/usr/local/mysql/bin/mysql_config" \
                         "--with-iconv-dir"  \
                         "--with-freetype-dir"  \
                         "--with-jpeg-dir"  \
                         "--with-png-dir" \
                         "--with-gd=/usr/local/gd2/" \
                         "--with-zlib" \
                         "--with-libxml-dir" \
                         "--with-curl" \
                         "--with-curlwrappers" \
                         "--with-openssl" \
                         --with-mhash \ 
                          "--with-xmlrpc" \
                         "--with-mcrypt" \
                         "--enable-xml" \ 
                         "--enable-bcmath" \
                         "--enable-shmop"  \
                         "--enable-sysvsem"  \
                         "--enable-inline-optimization" \ 
                         "--enable-mbregex" \
                         "--enable-mbstring" \
                         "--enable-gd-native-ttf" \
                         "--enable-ftp" \
                         "--enable-pcntl" \
                         "--enable-sockets" \
                         "--enable-zip" \
                         "--disable-debug" \ 
                         "--disable-ipv6"
[root@server php-5.2.14]# make ZEND_EXTRA_LIBS='-liconv'
[root@server php-5.2.14]# make install
[root@server php-5.2.14]# cp php.ini-dist /usr/local/php/etc/php.ini
--enable-fastcgi 启动fast-cgi
其中 "--enable-discard-path"   打开这个选项,用户就不能透过浏览器读取类似.htaccess 的系统安全相关的文件。
"--enable-force-cgi-redirect" 若使用 CGI VERSION 模式来执行 PHP 的设,打开本选项会增加安全性。例如用户读 http://my.host/cgi-bin/php/secret/doc.html 遇到比较了解 PHP 系统的黑客级用户可能会自已输入以下网址 http://my.host/secret/doc.html 来读
取相关信息。若 PHP 和 Apache 编译在一起,让 PHP 变成 Apache 的一部份,则不需要加入本选项。
--with-config-file-path 在指定php 主配置文件的路径
--with-mysql 和--with-mysqli 在指定你的mysql 的位置和它的相关工具
--with-iconv-dir,--with-freetype-dir,-with-jpeg-dir,--with-png-dir,--with-gd,--with-zlib,--with-libxml-dir 这些都是在启用对某种文件的支持
--with-curl 和--with-curlwrappers 是用于支持curl 函数,此函数允许你用不同的协议连接和沟通不同的服务器
--with-openssl,--with-mhash,--with-mcrypt 这都是和加密有关的参数,启用它们是为了让php 可以更好的支持各种加密。
"--enable-bcmath" 高精度数学运算组件。
"--enable-shmop"  和 "--enable-sysvsem"  使得你的PHP 系统可以处理相关的IPC函数 。IPC 是一个Unix 标准通讯机制,它提供了使得在同一台主机不同进程之间可以互相通讯的方法。
"--enable-inline-optimization" 栈堆指针和优化线程。
"--enable-pcntl" 多线程优化。
make ZEND_EXTRA_LIBS='-liconv'  手工指定将iconv 加到php 额外库中,一般来说这些库的增加php 可以自动完成,只是iconv 貌似不太合群,需要手工操作。make 完了之后,如果没有错误,你也可以执行一下make test 看看是否有错误,不过时间会比较长。

5 安装 php扩展模块工具
   安装扩展模块是为了进一步完善我们的php,或提高性能,或提高安全性,或扩展功能,或增加稳定性等。我们接下来会安装如下扩展模块:
    memcache
    eaccelerator
    PDO_MYSQL
    ImageMagick
    memcache 是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
    eAccelerator 加速引擎是基于mmcache 开发的PHP 加速优化软件。通过编译和缓存来增加PHP 脚本的性能,使得PHP 脚本在编译的状态下降低服务器负载,对服务器的开销几乎完全消除。它还对脚本起优化作用,能加快其执行效率,提高PHP 应用执行速度最高达10倍。
    PDO_MYSQL 是一个php 的扩展模块,可以让php 更好调用mysql。
    ImageMagick 是一个用于查看、编辑位图文件以及进行图像格式转换的开放源代码软件套装。
   编译安装memcache:
   [root@server  tmp]# tar  -zxf memcache-3.0.4.tgz
   [root@server  tmp]# cd memcache-3.0.4
   [root@server memcache-3.0.4]#  /usr/local/php/bin/phpize
   [root@server memcache-3.0.4]#  ./configure  --with-php-config=/usr/local/php/bin/php-config
   [root@server memcache-3.0.4]# make && make install 
编译安装eaccelerator:
  [root@server lnmp]# tar xf eaccelerator-0.9.6.1.tar.bz2
  [root@server lnmp]# cd eaccelerator-0.9.6.1
  [root@server eaccelerator-0.9.6.1]# /usr/local/php/bin/phpize
  [root@server eaccelerator-0.9.6.1]# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config 
  [root@server eaccelerator-0.9.6.1]# make && make install
   编译安装PDO_MYSQL:
    [root@server lnmp]# tar xf PDO_MYSQL-1.0.2.tgz
    [root@server lnmp]# cd PDO_MYSQL-1.0.2
    [root@server PDO_MYSQL-1.0.2]# /usr/local/php/bin/phpize
    [root@server PDO_MYSQL-1.0.2]# ./configure --prefix=/usr/local/pdo-mysql --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
    [root@server PDO_MYSQL-1.0.2]# make  &&  make install 
    编译安装ImageMagick:
    [root@server lnmp]# tar xf ImageMagick-6.5.9-10.tar.bz2
    [root@server lnmp]# cd ImageMagick-6.5.9-10
    [root@server ImageMagick-6.5.9-10]# ./configure \
                                                            --enable-shared \
                                                            --with-modules \
                                                            --without-x \
                                                            --with-gs-font-dir=default \
                                                            --with-perl=yes \
                                                            --with-zlib=yes \
                                                            --with-jpeg=yes  
   [root@server ImageMagick-6.5.9-10]# make  &&  make install
    编译安装imagick:
   [root@server lnmp]# tar xf imagick-3.0.0.tgz
   [root@server lnmp]# cd imagick-3.0.0
   [root@server imagick-3.0.0]# /usr/local/php/bin/phpize
   [root@server imagick-3.0.0]# ./configure --with-php-config=/usr/local/php/bin/php-config
   [root@server imagick-3.0.0]# make && make install 

 --with-php-config 在指定php 的配置工具,/usr/local/php/bin/phpize 是用来扩展php 的扩展模块的,通过phpize 可以建立php 的外挂模块。

6.使 PHP 扩展生效
          修改php 主配置文件,以使php 支持扩展模块。
[root@server ~]# cat >> /usr/local/php/etc/php.ini << ENDF
[eAccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
                eaccelerator.shm_size="32"
                eaccelerator.cache_dir="/usr/local/cache/ea"
                eaccelerator.enable="1"
                eaccelerator.optimizer="1"
                eaccelerator.check_mtime="1"
                eaccelerator.debug="0"
                eaccelerator.filter=""
                eaccelerator.shm_max="0"
                eaccelerator.shm_ttl="0"
                eaccelerator.shm_prune_period="0"
                eaccelerator.shm_only="0"
                eaccelerator.compress="1"
                eaccelerator.compress_level="9"
ENDF
[root@server ~]# mkdir -p /usr/local/cache/ea
[root@server ~]# vi php.ini


expose_php = On
改为
expose_php = Off
找到
extension_dir
改为
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
并在其下面追加三行内容
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"

output_buffering = Off
改为
output_buffering = On

expose 是php 的一个参数,关闭它则会显示更少的php 消息,以提高安全性。output_buffering 是一个缓存有关的参数选项。更多php 核心参数的配置请参考 http://manual.phpv.net/zh/ini.core.php .

7.整合 Nginx 与 php
在http {} 全局配置部分加入如下内容:
http
{
...
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300; 
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 128k; 
    fastcgi_busy_buffers_size 128k; 
    fastcgi_temp_file_write_size 128k; 
    fastcgi_intercept_errors on;
    proxy_temp_path            /dev/shm/proxy_temp; 
    fastcgi_temp_path          /dev/shm/fastcgi_temp; 
    client_body_temp_path      /dev/shm/client_body_temp;
#spawn-fcgi 开启9000 跟9001 两个端口,利用nginx 的upstream 负载均衡php 程序到不同的fcgi 端口上面
       upstream  spawn
      {    
         server   127.0.0.1:9000 max_fails=0 fail_timeout=30s;
         server   127.0.0.1:9001 max_fails=0 fail_timeout=30s;
        }
...


修改监听80端口的虚拟主机 "location ~ \.php { ... }" 的配置
server
{
.... 
       location ~ \.php$ {
            root           html;
#          fastcgi_pass   127.0.0.1:9000;
            fastcgi_pass   spawn;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#          include        fastcgi_params; 
            include spawn_php5.conf;
        }
...

创建spawn_php5.conf 
 [root@server ~]# vi /usr/local/nginx/conf/spawn_php5.conf 
        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; 
        fastcgi_param  SERVER_SOFTWARE    nginx;
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;
        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;

配置spawn-fcgi 启动脚本
[root@server ~]# vi /usr/local/php/bin/spawn-fcgi
        #! /bin/sh
        set -e
        PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin :/usr/local/spawn-fcgi/bin
        DESC="spawn-fcgi daemon"
        NAME=spawn-fcgi
        DAEMON=/usr/local/spawn-fcgi/bin/$NAME
 
        # Gracefully exit if the package has been removed.
        test -x $DAEMON || exit 0
        d_start()
{
           $DAEMON -a 127.0.0.1 -p 9000 -C 128 -u nginx -g nginx -f /usr/local/php/bin/php-cgi > /dev/null 2>&1 
           $DAEMON -a 127.0.0.1 -p 9001 -C 128 -u nginx -g nginx -f /usr/local/php/bin/php-cgi > /dev/null 2>&1 || echo -n " adress already inuse"
}

d_stop()
{
   /usr/bin/killall -9 php-cgi > /dev/null 2>&1 || echo -n " not running"
}
     case "$1" in
          start)
                     echo -n "Starting $DESC: $NAME"
                     d_start
                     echo "ok"
                     ;; 
          stop)
                 echo -n "Stopping $DESC: $NAME"
                 d_stop
                 echo "ok"
                 ;; 
          restart)
                 echo -n "Restarting $DESC: $NAME"
                 d_stop
                 sleep 1 
                 d_start
                 ;; 
          *)
               echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
               exit 3
                 ;;
esac
      exit 0
[root@server conf]# chmod +x /usr/local/php/bin/spawn-fcgi

8.启动 Nginx 服务
            先启动spawn-fcgi CGI 服务:
 [root@server ~]# /usr/local/php/bin/spawn-fcgi start 
            然后测试Nginx 服务配置是否正确:
[root@server ~]# /usr/local/nginx/sbin/nginx -t  
            如果返回如下信息,说明配置正确
the configuration file /usr/local/nginx//conf/nginx.conf syntax is ok
configuration file /usr/local/nginx//conf/nginx.conf test is successful
            正式启动Nginx 服务:
[root@server ~]# /usr/local/nginx/sbin/nginx 
            建立phpinfo 测试页面
[root@server ~]# vi /usr/local/nginx/html/test.php
                <?php
                   phpinfo();
                ?>

搭建discuz 环境测试。



 

 

 

 

 

 

 

 

本文出自 “linux集群技术博客” 博客,转载请与作者联系!

你可能感兴趣的:(LNMP)