源码编译安装LNMP

安装LNMP(Linux+Nginx+Mysql+Php/perl/python)

一、安装rpm

       libjpeg-devellibpng-devellibtiff-develfontconfig-develfreetype-devel

libXpm-develgettext-developenssl-devellibtool-ltdl-devel    libjpeg-devel libpng-devel libtiff-devel fontconfig-devel freetype-devellibXpm-devel 这些都是图片与字体相关的开发包,为了使 php 可以对其做更好的支持。gettext 是语言相关的一个函数库。openssl-devel 是一套工具,用于生成 X.509 协议中所使用的密钥,公钥等文件。libtool 是一个通用库支持脚本,在 php 编译过程中会需要使用到。)

 

二、安装Nginx

       安装 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(安装C语言编辑器包:gcc*)

  [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

(会提示安装某些包。eg:*pcre* , openssl*)

(./configure 后常几个常用参数:

--prefix=

  指定安装主目录,默认为/usr/local/nginx

--user=  指定用户身份,如果没有指定则默认使用 nobody

--group=     指定组身份

--with-http_ssl_module  启用 https 支持

--with-sha1 指定希哈函数库位置)

[root@server nginx-0.8.46]# make && make install

[root@example nginx-0.8.39]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf(-c 是用来指定 Nginx 的主配置文件,如果没有指定则默认为/usr/local/nginx/conf/nginx.conf)

 

三、编译安装Mysql (此实验中只需安装mysql客户端,参照mysqp-proxy 读写分离文件中安装mysql客户端代码)

[root@server lnmp]# tar xf mysql-5.1.49.tar.gz//出现时间问题 created files is older than ditributed files

[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" /c

                       "--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

yum -y install gcc gcc-c++ ncurses-devel

#tar zxvf mysql-5.1.35.tar.gz

#cd mysql-5.1.35

#./configure —prefix=/usr/local/mysql —without-server (根据提示安装包。eg*termcap*)

#make && make install

 

四、编译安装php

1.编译安装gd2(gd2 是一个用以生成图形图片的库,RHEL 自带 gd2 的开发包,但是版本比较低,生成的图片是黑白的,非常不美观,因此这边单独编译一个高版本。)

[root@server lnmp]# tar xf gd-2.0.34.tar.bz2

[root@server lnmp]# cd gd-2.0.34

[root@server gd-2.0.34]# ./configure –prefix=/usr/local/gd2

[root@server gd-2.0.34]# make && make install

2.编译安装libiconv(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 --prefix=/usr

[root@server libiconv-1.13.1]# make && make install

3.编译安装libmcrypt(libmcrypt 可以使 php 支持更多加密算法。)

[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 --prefix=/usr

[root@server libmcrypt-2.5.7]# make && make install

4.编译安装mhash(  mhash 是一个哈稀演函数库,它可以支持多种哈稀演算法,例如最出名的MD5SHA1 GOST,还有其它多种的哈稀演算法。)

[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 --prefix=/usr

[root@server mhash-0.9.9.9]# make && make install

5.[root@server lnmp]# vim /etc/ld.so.conf 添加/usr/lib

 include ld.so.conf.d/*.conf

 /usr/lib

[root@server lnmp]# ldconfig( ldconfig 命令的用途,主要是在默认搜寻目录(/lib /usr/lib)以及动态库配置文件/etc/ld.so.conf 内所列的目录, 而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。)

6.编译安装spawn-fcgi( spawn-fcgi spawn-fcgi 原本是 lighttpd 的一个用来控制 php-cgi 的工具,现在已从lighttpd 中独立出来成为一个开源项目。我们可以用它来启动,控制,管理 php-cgi 的进程。使用它有诸多好处,比如我们可以将运行 php-cgi 的主机与 Nginx 分离开来,以减轻Nginx 服务器的负担,或者用来扩展架构,做更多的负载分担。减少进程的重复创建所带来的性能消耗等等。)

[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

7.编译安装libevent(  libevent 是一个事件触发的网络库,适用于 windowslinuxbsd 等多种平台,内部使用 selectepollkqueue 等系统调用管理事件机制。)

[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

8.编译安装mcrypt

[root@server lnmp]# tar zxvf mcrypt-2.6.7.tar.gz

[root@server lnmp]# cd mcrypt-2.6.7

[root@server mcrypt-2.6.7]# ./configure --prefix=/usr && make && make install

9.编译安装php

[root@server lnmp]# tar xf php-5.2.13.tar.bz2

[root@server lnmp]# gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | patch -d php-5.2.8 -p1

[root@server lnmp]# cd php-5.2.13

[root@server lnmp]# CHOST="i686-pc-linux-gnu"

[root@server lnmp]# CFLAGS="-march=prescott -O3 -pipe -fomit-frame-pointer"

[root@server lnmp]# CXXFLAGS="${CFLAGS}"

 

[root@server php-5.2.13]# ./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" (提示安装:*libxml2**curl*

(     --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" 多线程优化。) 

[root@server php-5.2.13]# #sed -i 's#-lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile

[root@server php-5.2.13]# make ZEND_EXTRA_LIBS='-liconv'

(  make ZEND_EXTRA_LIBS='-liconv' 手工指定将 iconv 加到 php 额外库中,一般

来说这些库的增加 php 可以自动完成,只是 iconv 貌似不太合群,需要手工操作。

   make 完了之后,如果没有错误,你也可以执行一下 make test 看看是否有错误,不过时间会比较长。)

[root@server php-5.2.13]# make test

[root@server php-5.2.13]# make install

[root@server php-5.2.13]# cp php.ini-dist /usr/local/php/etc/php.ini

 

五、安装php扩展模块工具

1.编译安装memcache(  memcache 是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的 hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。)

[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(不成功,需装: autoconf)

[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

2.编译安装eaccelerator( eAccelerator 加速引擎是基于 mmcache 开发的 PHP 加速优化软件。通过编译和缓存来增加 PHP 脚本的性能,使得 PHP 脚本在编译的状态下降低服务器负载,对服务器的开销几乎完全消除。它还对脚本起优化作用,能加快其执行效率,提高 PHP 应用执行速度最高达 10 倍。)

[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

[root@server eaccelerator-0.9.6.1]# make test

[root@server eaccelerator-0.9.6.1]# make install

3.编译安装PDO_MYSQL(PDO_MYSQL 是一个 php 的扩展模块,可以让 php 更好调用 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

4.编译安装ImageMagick(  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

5.编译安装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--with-php-config 在指定 php 的配置工具,/usr/local/php/bin/phpize 是用来扩展php 的扩展模块的,通过 phpize 可以建立 php 的外挂模块。)

[root@server imagick-3.0.0]# make

[root@server imagick-3.0.0]# make test

[root@server imagick-3.0.0]# make install

 

六、使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 是一个缓存有关的参数选项。)

 

七、整合Nginxphp

[root@server ~]# vim nginx-0.8.39/conf/nginx.conf(在全局配置文件中加入如下内容)

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

 

八、启动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

phpinfo();

?>

搭建 discuz 环境测试。

你可能感兴趣的:(LNMP搭建)