当前位置:首页 > linux教程 > 列表

编译安装LNMP(linux+nginx+mysql+php)环境详解

发布:smiling 来源: PHP粉丝网  添加日期:2015-05-06 15:34:17 浏览: 评论:0 

LNMP环境安装方式不少种了,这里给各位介绍编译安装LNMP(linux+nginx+mysql+php)配置,有兴趣使用编译安装LNMP(linux+nginx+mysql+php)的朋友可以和小编来看看吧.

说明:php在编译安装时,nginx要想能够调用php提供动态php格式的网页,必须用FastCGI来实现,但 FastCGI只是一个框架,实现FastCGI框架的有PHP-FPM,但对于5.2.x版本的php来说,默认是不支持PHP-FPM的,需要打上php-fpm的补丁,对于5.3.2之前版本的也是需要打补丁的,而且打补丁的过程比较麻烦。好在5.3.3版 本的PHP-FPM被直接做进了源代码包中,在编译安装时只需启用PHP-FPM功能即可。

但如果要使用PHP-FPM的话,还需要提供以下几个功能:

需要提供可以解析xml格式的文档,需要安装libxml2 和libxml2-devel这两个包,好在这两个包在安装完开发环境后这两个包是默认安装过的.

需要安装libevent并且在1.4.12之后的版本,不幸的是rhel5.4版本中这个包是是在1.4.12之前的,需要从新手动编译安装该包.

libiconv 用来提供网络连接方式的功能组件,可以实现更快速的网络访问,这个组件系统上是没有装的,需要手动编译安装.

构建编译环境:

  1. yum -y install gcc openssl-devel zlib-devel pcre-devel 
  2. yum groupinstall "Developement Tools" "Development Libraries" -yt 

首先安装Nginx:

  1. wget http://nginx.org/download/nginx-1.0.14.tar.gz 
  2. tar zxvf nginx-1.0.14.tar.gz     # 
  3. useradd -s /sbin/nologin -M nginx 
  4. cd nginx-1.0.14 
  5. ./configure \ 
  6.   --prefix=/usr \ 
  7.   --sbin-path=/usr/sbin/nginx \ 
  8.   --conf-path=/etc/nginx/nginx.conf \ 
  9.   --error-log-path=/var/log/nginx/error.log \ 
  10.   --http-log-path=/var/log/nginx/access.log \ 
  11.   --pid-path=/var/run/nginx/nginx.pid  \ 
  12.   --lock-path=/var/lock/nginx.lock \ 
  13.   --user=nginx \ 
  14.   --group=nginx \ 
  15.   --with-http_ssl_module \ 
  16.   --with-http_flv_module \ 
  17.   --with-http_stub_status_module \ 
  18.   --with-http_gzip_static_module \ 
  19.   --http-client-body-temp-path=/var/tmp/nginx/client/ \ 
  20.   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 
  21.   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ 
  22. make && make install 

创建nginx的启动脚本:

  1. vim /etc/init.d/nginxd 
  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 $optionsdo 
  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. configtest() { 
  81.   $nginx -t -c $NGINX_CONF_FILE 
  82.  
  83. rh_status() { 
  84.     status $prog 
  85.  
  86. rh_status_q() { 
  87.     rh_status >/dev/null 2>&1 
  88.  
  89. case "$1" in 
  90.     start) 
  91.         rh_status_q && exit 0 
  92.         $1 
  93.         ;; 
  94.     stop) 
  95.         rh_status_q || exit 0 
  96.         $1 
  97.         ;; 
  98.     restart|configtest) 
  99.         $1 
  100.         ;; 
  101.     reload) 
  102.         rh_status_q || exit 7 
  103.         $1 
  104.         ;; 
  105.     force-reload) 
  106.         force_reload 
  107.         ;; 
  108.     status) 
  109.         rh_status 
  110.         ;; 
  111.     condrestart|try-restart) 
  112.         rh_status_q || exit 0 
  113.             ;; 
  114.     *) 
  115.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"  //phpfensi.com 
  116.         exit 2 
  117. esac 
  118. chmod +x /etc/init.d/nginxd     #给予脚本执行权限 
  119. chkconfig --add nginxd        #加入开机启动选项中 
  120. chkconfig nginxd on          #设置开机自动启动 
  121. service nginxd  start       #启动nginx 服务 

测试访问:nginx

安装MySQL:

下载:

  1. wget http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.5/mysql-5.5.22.tar.gz 
  2. tar zxvf mysql-5.5.22.tar.gz 
  3. cd mysql-5.5.22-linux2.6-i686 
  4. /usr/sbin/groupadd mysql                           #添加mysql用户 
  5. /usr/sbin/useradd -g mysql mysql            #添加mysql组 

编译:

  1. ./configure --prefix=/usr/local/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase,myisammrg 
  2. make&&make install 

编译时出现错误:

  1. ../depcomp: line 571: exec: g++: not found 
  2. make[1]: *** [my_new.o] Error 127 
  3. make[1]: Leaving directory `/root/lnmpsrc/mysql-5.1.62/mysys' 
  4. make: *** [all-recursive] Error 1 

在其他安装g++的服务器上查看g++属于哪个包:

  1. [root@vps ~]# find / -name g++ 
  2. /usr/bin/g++ 
  3. [root@vps ~]# rpm -qf /usr/bin/g++ 
  4. gcc-c++-4.4.6-3.el6.i686 

可以看出g++属于gcc-c++包,安装gcc-c++:[root@vps ~]#yum install gcc-c++ -y

重新编译:

  1. ./configure --prefix=/usr/local/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase,myisammrg 
  2. make&&make install 

改变/usr/local/mysql目录用户和属组:

chown -R mysql.mysql /usr/local/mysql

创建mysql数据库、日志存放目录:

  1. mkdir /mysql/{data,binlog,relaylog} -p 
  2. chown -R mysql.mysql /mysql 

以mysql帐号建立数据表:

  1. /usr/local/mysql/bin/mysql_install_db --basedir=/usr/local/mysql --datadir=/mysql/data --user=mysql 

创建mysql配置文件:

  1. vim /mysql/my.cnf 
  2.  
  3. [client] 
  4.  
  5. character-set-server = utf8 
  6. port    = 3306 
  7. socket  = /tmp/mysql.sock 
  8.  
  9. [mysqld] 
  10. character-set-server = utf8 
  11. replicate-ignore-db = mysql 
  12. replicate-ignore-db = test 
  13. replicate-ignore-db = information_schema 
  14. user    = mysql 
  15. port    = 3306 
  16. socket  = /tmp/mysql.sock 
  17. basedir = /usr/local/mysql 
  18. datadir = /mysql/data 
  19. log-error = /mysql/mysql_error.log 
  20. pid-file = /mysql/mysql.pid 
  21. open_files_limit    = 10240 
  22. back_log = 600 
  23. max_connections = 5000 
  24. max_connect_errors = 6000 
  25. table_cache = 614 
  26. external-locking = FALSE 
  27. max_allowed_packet = 32M 
  28. sort_buffer_size = 1M 
  29. join_buffer_size = 1M 
  30. thread_cache_size = 300 
  31. #thread_concurrency = 8 
  32. query_cache_size = 512M 
  33. query_cache_limit = 2M 
  34. query_cache_min_res_unit = 2k 
  35. default-storage-engine = MyISAM 
  36. thread_stack = 192K 
  37. transaction_isolation = READ-COMMITTED 
  38. tmp_table_size = 246M 
  39. max_heap_table_size = 246M 
  40. long_query_time = 3 
  41. log-slave-updates 
  42. log-bin = /mysql/data/binlog 
  43. binlog_cache_size = 4M 
  44. binlog_format = MIXED 
  45. max_binlog_cache_size = 8M 
  46. max_binlog_size = 1G 
  47. relay-log-index = /mysql/relaylog/relaylog 
  48. relay-log-info-file = /mysql/relaylog/relaylog 
  49. relay-log = /mysql/relaylog/relaylog 
  50. expire_logs_days = 30 
  51. key_buffer_size = 256M 
  52. read_buffer_size = 1M 
  53. read_rnd_buffer_size = 16M 
  54. bulk_insert_buffer_size = 64M 
  55. myisam_sort_buffer_size = 128M 
  56. myisam_max_sort_file_size = 10G 
  57. myisam_repair_threads = 1 
  58. myisam_recover 
  59.  
  60. interactive_timeout = 120 
  61. wait_timeout = 120 
  62.  
  63. skip-name-resolve 
  64. #master-connect-retry = 10 
  65. slave-skip-errors = 1032,1062,126,1114,1146,1048,1396 
  66.  
  67. #master-host     =   192.168.1.1 
  68. #master-user     =   username 
  69. #master-password =   password 
  70. #master-port     =  3306 
  71.  
  72. server-id = 1 
  73.  
  74. innodb_additional_mem_pool_size = 16M 
  75. innodb_buffer_pool_size = 512M 
  76. innodb_data_file_path = ibdata1:256M:autoextend 
  77. innodb_file_io_threads = 4 
  78. innodb_thread_concurrency = 8 
  79. innodb_flush_log_at_trx_commit = 2 
  80. innodb_log_buffer_size = 16M 
  81. innodb_log_file_size = 128M 
  82. innodb_log_files_in_group = 3 
  83. innodb_max_dirty_pages_pct = 90 
  84. innodb_lock_wait_timeout = 120 
  85. innodb_file_per_table = 0 
  86.  
  87. #log-slow-queries = /mysql/slow.log 
  88. #long_query_time = 10 
  89.  
  90. [mysqldump] 
  91. quick 
  92. max_allowed_packet = 32M 

管理mysql脚本:

  1. vim /mysql/mysqld 
  2.  
  3. #!/bin/sh 
  4. mysql_port=3306 
  5. mysql_username="admin"     #帐号密码可以自行创建 
  6. mysql_password="rootisnosafe" 
  7.  
  8. function_start_mysql() 
  9.     printf "Starting MySQL...\n" 
  10.     /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/mysql/my.cnf 2>&1 > /dev/null & 
  11.  
  12. function_stop_mysql() 
  13.     printf "Stoping MySQL...\n" 
  14.     /usr/local/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /tmp/mysql.sock shutdown 
  15.  
  16. function_restart_mysql() 
  17.     printf "Restarting MySQL...\n" 
  18.     function_stop_mysql 
  19.     sleep 5 
  20.     function_start_mysql 
  21.  
  22. function_kill_mysql() 
  23.     kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}') 
  24.     kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}') 
  25.  
  26. if [ "$1" = "start" ]; then 
  27.     function_start_mysql 
  28. elif [ "$1" = "stop" ]; then 
  29.     function_stop_mysql 
  30. elif [ "$1" = "restart" ]; then 
  31. function_restart_mysql 
  32. elif [ "$1" = "kill" ]; then 
  33. function_kill_mysql 
  34. else 
  35.     printf "Usage: /mysql/mysqld {start|stop|restart|kill}\n" 
  36. fi 

赋予脚本执行权限:

chmod +x /mysql/mysqld

启动mysql:/mysql/mysqld start

命令行管理mysql:/usr/local/mysql/bin/mysql -u root -p -S /tmp/mysql.sock

创建一个具有root权限的用户:admin,密码为rootisnosafe:

  1. GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'rootisnosafe'; 
  2. GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY 'rootisnosafe'; 

安装php:先安装libevent和libiconv:

  1. wget https://github.com/downloads/libevent/libevent/libevent-1.4.14b-stable.tar.gz 
  2. tar zxvf libevent-1.4.14b-stable.tar.gz 
  3. cd libevent-1.4.14b-stable 
  4. ./configure&&make&&make install 
  5. wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz 
  6. tar zxvf libiconv-1.14.tar.gz 
  7. cd  libiconv-1.14 
  8. ./configure 
  9. make 
  10. make install 
  11. ln -sf /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2 

现在安装php:

  1. wget http://cn.php.net/distributions/php-5.4.0.tar.gz 
  2. tar zxvf php-5.4.0.tar.gz 
  3. cd php-5.4.0 
  4. ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config  --with-openssl --enable-fpm  --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-iconv-dir=/usr/local 
  5. make ZEND_EXTRA_LIBS='-liconv'        #因为-liconv的目录不是在/usr/local下所以安装时需要手动指定 
  6. make install 

其中:

–with-mysql和–with-mysqli的路径是你mysql的具体所在的目录.

–enable-fpm 启动fpm,其他都是些基本选项,简单易懂.

cp php.ini-production /usr/local/php/etc/php.ini

修改配置文件:

  1. vim /usr/local/php/etc/php-fpm.conf 
  2.  
  3. pm.max_children = 50 
  4. pm.start_servers = 10 
  5. pm.min_spare_servers = 5 
  6. pm.max_spare_servers = 35 

启动:/usr/local/php/sbin/php-fpm &

检查是否正常启动:

  1. netstat -tunlp|grep 9000 
  2. tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      7826/php-fpm 

将 /usr/local/php/sbin/php-fpm &加入到rc.local:

echo '/usr/local/php/sbin/php-fpm &' >>/etc/rc.local

配置fastcgi_params 文件:

vim /etc/nginx/fastcgi_params

将内容替换为:

  1. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; 
  2. fastcgi_param  SERVER_SOFTWARE    nginx; 
  3. fastcgi_param  QUERY_STRING       $query_string; 
  4. fastcgi_param  REQUEST_METHOD     $request_method; 
  5. fastcgi_param  CONTENT_TYPE       $content_type; 
  6. fastcgi_param  CONTENT_LENGTH     $content_length; 
  7. fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; 
  8. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; 
  9. fastcgi_param  REQUEST_URI        $request_uri; 
  10. fastcgi_param  DOCUMENT_URI       $document_uri; 
  11. fastcgi_param  DOCUMENT_ROOT      $document_root; 
  12. fastcgi_param  SERVER_PROTOCOL    $server_protocol; 
  13. fastcgi_param  REMOTE_ADDR        $remote_addr; 
  14. fastcgi_param  REMOTE_PORT        $remote_port; 
  15. fastcgi_param  SERVER_ADDR        $server_addr; 
  16. fastcgi_param  SERVER_PORT        $server_port; 
  17. fastcgi_param  SERVER_NAME        $server_name; 
  18. # PHP only, required if PHP was built with --enable-force-cgi-redirect 
  19. fastcgi_param  REDIRECT_STATUS    200; 

最后修改nginx.conf配置文件:

  1. vim /etc/nginx/nginx.conf 
  2. location ~ \.php$ { 
  3.             root           /www; 
  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; 
  8.         } 
  9.  
  10. location / { 
  11.             root   /www; 
  12.             index  index.php index.html index.htm; 
  13.         } 

保存退出,启动nginx:service nginxd start

编辑/www/index.php:

  1. <?php 
  2. phpinfo(); 
  3. ?> 
  4. //访问测试:testphp 

测试数据库连接:编辑:/www/index.php

  1. <?php 
  2.         $link=mysql_connect("localhost","admin","rootisnosafe"); 
  3.         if($linkecho "OK"
  4.         else echo "FAIL"
  5. ?> 

刷新访问,如果出现OK字样,表示连接正常.

Tags: LNMP linux+nginx+mysql+php

分享到: