发现很多VPS用LNMP一键安装包都失败,有不能排错,唯有给出教程,一步一步教你安装,所谓授人于鱼不如授人于渔嘛,本文是在CentOS 5.4 操作系统下测试通过的,用的是DiaHosting上的32位系统,为什么要用32位系统?就是为了节省内存,VPS内存都不是很多的,纯32位系统比X86_X64兼用32位系统更省内存. 安装步骤: 1,升级系统和安装相关的程序库 01 yum -y install yum-fastestmirror 02 yum -y update 03 yum -y install patch make gcc gcc-c++ gcc-g77 flex bison 04 yum -y install libtool libtool-libs kernel-devel autoconf 05 yum -y install libjpeg libjpeg-devel libpng libpng-devel 06 yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel 07 yum -y install glib2 glib2-devel bzip2 diff* 08 yum -y install bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs 09 yum -y install e2fsprogs-devel krb5 krb5-devel libidn libidn-devel 10 yum -y install openssl openssl-devel vim-minimal 11 yum -y install fonts-chinese scim-chewing scim-pinyin scim-tables-chinese 2,下载相关程序源码包 01 wget http://catlnmp.googlecode.com/files/libiconv-1.13.1.tar.gz 02 wget http://catlnmp.googlecode.com/files/libmcrypt-2.5.8.tar.gz 03 wget http://catlnmp.googlecode.com/files/mhash-0.9.9.9.tar.gz 04 wget http://catlnmp.googlecode.com/files/mcrypt-2.6.8.tar.gz 05 wget http://catlnmp.googlecode.com/files/mysql-5.1.44.tar.gz 06 wget http://php-fpm.org/downloads/php-5.2.13-fpm-0.5.13.diff.gz 07 wget http://www.sfr-fresh.com/unix/www/php-5.2.13.tar.gz 08 wget http://catlnmp.googlecode.com/files/memcache-2.2.5.tgz 09 wget http://catlnmp.googlecode.com/files/PDO_MYSQL-1.0.2.tgz 10 wget http://catlnmp.googlecode.com/files/eaccelerator-0.9.6.tar.bz2 11 wget http://catlnmp.googlecode.com/files/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz 12 wget http://catlnmp.googlecode.com/files/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz 13 wget http://catlnmp.googlecode.com/files/pcre-8.01.tar.gz 14 wget http://catlnmp.googlecode.com/files/nginx-0.7.65.tar.gz 15 wget http://catlnmp.googlecode.com/files/phpMyAdmin-3.2.4-all-languages.tar.gz 16 wget http://catlnmp.googlecode.com/files/index.php 3, 开始安装,先安装PHP需要的库程序 01 tar zxvf libiconv-1.13.1.tar.gz 02 cd libiconv-1.13.1/ 03 ./configure --prefix=/usr/local 04 make 05 make install 06 cd ../ 07 08 tar zxvf libmcrypt-2.5.8.tar.gz 09 cd libmcrypt-2.5.8/ 10 ./configure 11 make 12 make install 13 /sbin/ldconfig 14 cd libltdl/ 15 ./configure --enable-ltdl-install 16 make 17 make install 18 cd ../../ 19 20 tar zxvf mhash-0.9.9.9.tar.gz 21 cd mhash-0.9.9.9/ 22 ./configure 23 make 24 make install 25 cd ../ 26 27 ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la 28 ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so 29 ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 30 ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 31 ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a 32 ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la 33 ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so 34 ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 35 ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 36 ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config 37 38 tar zxvf mcrypt-2.6.8.tar.gz 39 cd mcrypt-2.6.8/ 40 ./configure 41 make 42 make install 43 cd ../ 4, 安装mysql 1 tar -zxvf mysql-5.1.44.tar.gz 2 cd mysql-5.1.44 3 ./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 4 make && make install 5 cd ../ 创建MySQL数据库,用默认的配置my.cnf 1 groupadd mysql 2 useradd -g mysql mysql 3 cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf 4 /usr/local/mysql/bin/mysql_install_db --user=mysql 5 chown -R mysql /usr/local/mysql/var 6 chgrp -R mysql /usr/local/mysql/. 添加Mysql启动服务,并且设置root密码 01 cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql 02 chmod 755 /etc/init.d/mysql 03 chkconfig --level 345 mysql on 04 echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf 05 echo "/usr/local/lib" >>/etc/ld.so.conf 06 ldconfig 07 ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql 08 ln -s /usr/local/mysql/include/mysql /usr/include/mysql 09 service mysql start 10 /usr/local/mysql/bin/mysqladmin -u root password root //root改为你需要的密码 11 service mysql restart 5, 安装PHP(FastCGI模式) 1 tar zxvf php-5.2.13.tar.gz 2 gzip -cd php-5.2.13-fpm-0.5.13.diff.gz | patch -d php-5.2.13 -p1 3 cd php-5.2.13/ 4 ./buildconf --force 5 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-ftp 6 make ZEND_EXTRA_LIBS='-liconv' 7 make install 8 cp php.ini-dist /usr/local/php/etc/php.ini 9 cd ../ 6, 安装PHP扩展模块 01 tar zxvf memcache-2.2.5.tgz 02 cd memcache-2.2.5/ 03 /usr/local/php/bin/phpize 04 ./configure --with-php-config=/usr/local/php/bin/php-config 05 make 06 make install 07 cd ../ 08 09 tar zxvf PDO_MYSQL-1.0.2.tgz 10 cd PDO_MYSQL-1.0.2/ 11 /usr/local/php/bin/phpize 12 ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql 13 make 14 make install 15 cd ../ 16 17 tar jxvf eaccelerator-0.9.6.tar.bz2 18 cd eaccelerator-0.9.6/ 19 /usr/local/php/bin/phpize 20 ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config 21 make 22 make install 23 cd ../ 安装Zend Optimizer,32位系统版本 1 tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz 2 mkdir -p /usr/local/zend/ 3 cp ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/local/zend/ 如果是64 位系统,则 1 tar zxvf ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz 2 mkdir -p /usr/local/zend/ 3 cp ZendOptimizer-3.3.9-linux-glibc23-x86_64/data/5_2_x_comp/ZendOptimizer.so /usr/local/zend/ 配置 php.ini 1 cat >>/usr/local/php/etc/php.ini< <EOF 2 [Zend Optimizer] 3 zend_optimizer.optimization_level=1 4 zend_extension="/usr/local/zend/ZendOptimizer.so" 5 EOF 7, 修改php.ini文件 手工修改:查找/usr/local/php/etc/php.ini中的 extension_dir = "./" 修改为extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" 并在此行后增加以下几行,然后保存: extension = "memcache.so" extension = "pdo_mysql.so" 再查找 output_buffering = Off 修改为output_buffering = On 自动修改:可执行以下shell命令,自动完成对php.ini文件的修改: [/code] 1 sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"/nextension = "memcache.so"/nextension = "pdo_mysql.so"/n#' /usr/local/php/etc/php.ini 2 sed -i 's#output_buffering = Off#output_buffering = On#' /usr/local/php/etc/php.ini 8, 配置eAccelerator加速PHP: 创建缓存目录 1 mkdir -p /usr/local/eaccelerator_cache 配置php.ini 01 cat >>/usr/local/php/etc/php.ini< <EOF 02 [eaccelerator] 03 zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so" 04 eaccelerator.shm_size="1" 05 eaccelerator.cache_dir="/usr/local/eaccelerator_cache" 06 eaccelerator.enable="1" 07 eaccelerator.optimizer="1" 08 eaccelerator.check_mtime="1" 09 eaccelerator.debug="0" 10 eaccelerator.filter="" 11 eaccelerator.shm_max="0" 12 eaccelerator.shm_ttl="3600" 13 eaccelerator.shm_prune_period="3600" 14 eaccelerator.shm_only="0" 15 eaccelerator.compress="1" 16 eaccelerator.compress_level="9" 17 eaccelerator.keys = "disk_only" 18 eaccelerator.sessions = "disk_only" 19 eaccelerator.content = "disk_only" 20 EOF 9, 创建www用户和组,以及主机需要的目录,日志目录 [/code] 1 groupadd www 2 useradd -g www www 3 mkdir -p /home/www 4 chmod +w /home/www 5 mkdir -p /home/www/logs 6 chmod 777 /home/www/logs 7 chown -R www:www /home/www 10, 创建php-fpm配置文件 1 rm -f /usr/local/php/etc/php-fpm.conf 2 vi /usr/local/php/etc/php-fpm.conf 输入以下内容,我设置开的进程是5个.需要更改进程数,可以修改5 001 <? xml version="1.0" ?> 002 <configuration> 003 All relative paths in this config are relative to php's install prefix 004 <section name="global_options"> 005 Pid file 006 <value name="pid_file">/usr/local/php/logs/php-fpm.pid</value> 007 Error log file 008 <value name="error_log">/home/www/logs/php-fpm.log</value> 009 Log level 010 <value name="log_level">notice</value> 011 When this amount of php processes exited with SIGSEGV or SIGBUS ... 012 <value name="emergency_restart_threshold">10</value> 013 ... in a less than this interval of time, a graceful restart will be initiated. 014 Useful to work around accidental curruptions in accelerator's shared memory. 015 <value name="emergency_restart_interval">1m</value> 016 Time limit on waiting child's reaction on signals from master 017 <value name="process_control_timeout">5s</value> 018 Set to 'no' to debug fpm 019 <value name="daemonize">yes</value> 020 </section> 021 <workers> 022 <section name="pool"> 023 Name of pool. Used in logs and stats. 024 <value name="name">default</value> 025 Address to accept fastcgi requests on. 026 Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket' 027 <value name="listen_address">127.0.0.1:9000</value> 028 <value name="listen_options"> 029 Set listen(2) backlog 030 </value><value name="backlog">-1</value> 031 Set permissions for unix socket, if one used. 032 In Linux read/write permissions must be set in order to allow connections from web server. 033 Many BSD-derrived systems allow connections regardless of permissions. 034 <value name="owner">www</value> 035 <value name="group">www</value> 036 <value name="mode">0666</value> 037 038 Additional php.ini defines, specific to this pool of workers. 039 <value name="php_defines"> 040 <!-- <value name="sendmail_path">/usr/sbin/sendmail -t -i</value> --> 041 <!-- <value name="display_errors">0 --> 042 043 Unix user of processes 044 <value name="user">www</value> 045 Unix group of processes 046 <value name="group">www</value> 047 Process manager settings 048 <value name="pm"> 049 Sets style of controling worker process count. 050 Valid values are 'static' and 'apache-like' 051 </value><value name="style">static</value> 052 Sets the limit on the number of simultaneous requests that will be served. 053 Equivalent to Apache MaxClients directive. 054 Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi 055 Used with any pm_style. 056 <value name="max_children">5</value> 057 Settings group for 'apache-like' pm style 058 <value name="apache_like"> 059 Sets the number of server processes created on startup. 060 Used only when 'apache-like' pm_style is selected 061 </value><value name="StartServers">20</value> 062 Sets the desired minimum number of idle server processes. 063 Used only when 'apache-like' pm_style is selected 064 <value name="MinSpareServers">5</value> 065 Sets the desired maximum number of idle server processes. 066 Used only when 'apache-like' pm_style is selected 067 <value name="MaxSpareServers">35</value> 068 069 The timeout (in seconds) for serving a single request after which the worker process will be terminated 070 Should be used when 'max_execution_time' ini option does not stop script execution for some reason 071 '0s' means 'off' 072 <value name="request_terminate_timeout">0s</value> 073 The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file 074 '0s' means 'off' 075 <value name="request_slowlog_timeout">0s</value> 076 The log file for slow requests 077 <value name="slowlog">logs/slow.log</value> 078 Set open file desc rlimit 079 <value name="rlimit_files">65535</value> 080 Set max core size rlimit 081 <value name="rlimit_core">0</value> 082 Chroot to this directory at the start, absolute path 083 <value name="chroot"></value> 084 Chdir to this directory at the start, absolute path 085 <value name="chdir"></value> 086 Redirect workers' stdout and stderr into main error log. 087 If not set, they will be redirected to /dev/null, according to FastCGI specs 088 <value name="catch_workers_output">yes</value> 089 How much requests each process should execute before respawn. 090 Useful to work around memory leaks in 3rd party libraries. 091 For endless request processing please specify 0 092 Equivalent to PHP_FCGI_MAX_REQUESTS 093 <value name="max_requests">102400</value> 094 Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect. 095 Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+) 096 Makes sense only with AF_INET listening socket. 097 <value name="allowed_clients">127.0.0.1</value> 098 Pass environment variables like LD_LIBRARY_PATH 099 All $VARIABLEs are taken from current environment 100 <value name="environment"> 101 </value><value name="HOSTNAME">$HOSTNAME</value> 102 <value name="PATH">/usr/local/bin:/usr/bin:/bin</value> 103 <value name="TMP">/tmp</value> 104 <value name="TMPDIR">/tmp</value> 105 <value name="TEMP">/tmp</value> 106 <value name="OSTYPE">$OSTYPE</value> 107 <value name="MACHTYPE">$MACHTYPE</value> 108 <value name="MALLOC_CHECK_">2</value> 109 110 </section> 111 </workers> 112 </configuration>
11, 启动php-cgi进程,监听127.0.0.1的9000端口,进程数为5,用户为www 1 ulimit -SHn 65535 2 /usr/local/php/sbin/php-fpm start 注:/usr /local/php/sbin/php-fpm还有其他参数,包 括:start|stop|quit|restart|reload|logrotate,修改php.ini后不重启php-cgi,重新加载配置文件 使用reload 12,安装Nginx 01 tar zxvf pcre-8.01.tar.gz 02 cd pcre-8.01/ 03 ./configure 04 make && make install 05 cd ../ 06 07 tar zxvf nginx-0.7.65.tar.gz 08 cd nginx-0.7.65/ 09 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module 10 make && make install 11 cd ../ 13, 创建Nginx配置文件 1 mkdir -p /usr/local/nginx/conf/servers 2 rm -f /usr/local/nginx/conf/nginx.conf 3 vi /usr/local/nginx/conf/nginx.conf 输入以下内容: 01 user www www; 02 worker_processes 1; 03 error_log /home/www/logs/nginx_error.log crit; 04 pid /usr/local/nginx/nginx.pid; 05 #Specifies the value for maximum file descriptors that can be opened by this process. 06 worker_rlimit_nofile 65535; 07 events 08 { 09 use epoll; 10 worker_connections 65535; 11 } 12 http 13 { 14 include mime.types; 15 default_type application/octet-stream; 16 #charse gb2312; 17 server_names_hash_bucket_size 128; 18 client_header_buffer_size 128k; 19 large_client_header_buffers 4 256k; 20 client_max_body_size 8m; 21 sendfile on; 22 tcp_nopush on; 23 keepalive_timeout 60; 24 tcp_nodelay on; 25 26 fastcgi_connect_timeout 300; 27 fastcgi_send_timeout 300; 28 fastcgi_read_timeout 300; 29 fastcgi_buffer_size 64k; 30 fastcgi_buffers 4 64k; 31 fastcgi_busy_buffers_size 128k; 32 fastcgi_temp_file_write_size 128k; 33 34 gzip on; 35 gzip_min_length 1k; 36 gzip_buffers 4 16k; 37 gzip_http_version 1.1; 38 gzip_comp_level 9; 39 gzip_types text/plain application/x-javascript text/css application/xml; 40 gzip_vary on; 41 output_buffers 4 32k; 42 postpone_output 1460; 43 44 #limit_zone crawler $binary_remote_addr 10m; 45 46 server 47 { 48 listen 80; 49 server_name vps.imcat.in; 50 index index.html index.htm index.php; 51 include location.conf; 52 root /home/www; 53 } 54 include servers/*; 55 } 14, 在/usr/local/nginx/conf/目录中创建location.conf文件: 1 vi /usr/local/nginx/conf/location.conf 输入内容: 01 location ~ .*/.(php|php5)?$ 02 { 03 #fastcgi_pass unix:/tmp/php-cgi.sock; 04 fastcgi_pass 127.0.0.1:9000; 05 fastcgi_index index.php; 06 include fastcgi.conf; 07 } 08 09 location ~ .*/.(gif|jpg|jpeg|png|bmp|swf)$ 10 { 11 expires 30d; 12 } 13 14 location ~ .*/.(js|css)?$ 15 { 16 expires 12h; 17 } 多站点管理,可以在 /usr/local/nginx/conf/servers目录添加配置文件,格式为: 1 vi /usr/local/nginx/conf/servers/imcat.conf 内容: 1 server 2 3 { 4 listen 80; 5 server_name imcat.in; 6 index index.html index.htm index.php; 7 root /home/www/imcat; 8 } 请 注意,我是没有开启 Nginx日志记录功能的. 启动Nginx: 1 ulimit -SHn 65535 2 /usr/local/nginx/sbin/nginx 放个探针看看 1 mv index.php /home/www/ 访问你的IP看看吧! 15,安装phpMyAdmin,管理Mysql数据库 1 tar zxvf phpMyAdmin-3.2.4-all-languages.tar.gz 2 mv phpMyAdmin-3.2.4-all-languages /home/www/phpmyadmin 16, 配置开机自动启动Nginx + PHP 1 echo "ulimit -SHn 65535" >>/etc/rc.local 2 echo "/usr/local/php/sbin/php-fpm start" >>/etc/rc.local 3 echo "/usr/local/nginx/sbin/nginx" >>/etc/rc.local 17, 优化Linux内核参数(我只在Xen VPS用过,Openvz VPS失败,慎用) 1 vi /etc/sysctl.conf 在最后加入 01 # Add 02 net.ipv4.tcp_max_syn_backlog = 65536 03 net.core.netdev_max_backlog = 32768 04 net.core.somaxconn = 32768 05 06 net.core.wmem_default = 8388608 07 net.core.rmem_default = 8388608 08 net.core.rmem_max = 16777216 09 net.core.wmem_max = 16777216 10 11 net.ipv4.tcp_timestamps = 0 12 net.ipv4.tcp_synack_retries = 2 13 net.ipv4.tcp_syn_retries = 2 14 15 net.ipv4.tcp_tw_recycle = 1 16 #net.ipv4.tcp_tw_len = 1 17 net.ipv4.tcp_tw_reuse = 1 18 19 net.ipv4.tcp_mem = 94500000 915000000 927000000 20 net.ipv4.tcp_max_orphans = 3276800 21 22 #net.ipv4.tcp_fin_timeout = 30 23 #net.ipv4.tcp_keepalive_time = 120 24 net.ipv4.ip_local_port_range = 1024 65535 使配置立即生效: 1 /sbin/sysctl -p 18, 需要安装ftp的,可以简单安装vsftpd应用: 1 yum -y install vsftpd 2 /etc/init.d/vsftpd start 3 chkconfig --level 345 vsftpd on 19, 请务必更改www用户密码: 1 passwd www 全文完!欢迎抓错误!