一步一步教你安装Nginx+PHP+Mysql
发现很多VPS用LNMP一键安装包都 失败,有不能排错,唯有给出教程,一步一步教你安装,所谓授人于鱼不如授人于渔嘛,本文是在CentOS 5.4 操作系统下测试通过的,用的是DiaHosting上 的32位系统,为什么要用32位系统?就是为了节省内存,VPS内存都不是很多的,纯32位系统比X86_X64兼用32位系统更省内存.
安装步骤:
1,升级系统和安装相关的程序库
yum -y install yum-fastestmirror yum -y update yum -y install patch make gcc gcc-c++ gcc-g77 flex bison yum -y install libtool libtool-libs kernel-devel autoconf yum -y install libjpeg libjpeg-devel libpng libpng-devel yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel yum -y install glib2 glib2-devel bzip2 diff* yum -y install bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs yum -y install e2fsprogs-devel krb5 krb5-devel libidn libidn-devel yum -y install openssl openssl-devel vim-minimal yum -y install fonts-chinese scim-chewing scim-pinyin scim-tables-chinese
2,下载相关程序源码包
wget http://catlnmp.googlecode.com/files/libiconv-1.13.1.tar.gz wget http://catlnmp.googlecode.com/files/libmcrypt-2.5.8.tar.gz wget http://catlnmp.googlecode.com/files/mhash-0.9.9.9.tar.gz wget http://catlnmp.googlecode.com/files/mcrypt-2.6.8.tar.gz wget http://catlnmp.googlecode.com/files/mysql-5.1.44.tar.gz wget http://php-fpm.org/downloads/php-5.2.13-fpm-0.5.13.diff.gz wget http://www.sfr-fresh.com/unix/www/php-5.2.13.tar.gz wget http://catlnmp.googlecode.com/files/memcache-2.2.5.tgz wget http://catlnmp.googlecode.com/files/PDO_MYSQL-1.0.2.tgz wget http://catlnmp.googlecode.com/files/eaccelerator-0.9.6.tar.bz2 wget http://catlnmp.googlecode.com/files/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz wget http://catlnmp.googlecode.com/files/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz wget http://catlnmp.googlecode.com/files/pcre-8.01.tar.gz wget http://catlnmp.googlecode.com/files/nginx-0.7.65.tar.gz wget http://catlnmp.googlecode.com/files/phpMyAdmin-3.2.4-all-languages.tar.gz wget http://catlnmp.googlecode.com/files/index.php
3,开始安装,先安装PHP需要的库程序
tar zxvf libiconv-1.13.1.tar.gz cd libiconv-1.13.1/ ./configure --prefix=/usr/local make make install cd ../ tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure make make install /sbin/ldconfig cd libltdl/ ./configure --enable-ltdl-install make make install cd ../../ tar zxvf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9/ ./configure make make install cd ../ ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config tar zxvf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8/ ./configure make make install cd ../
4,安装mysql
tar -zxvf mysql-5.1.44.tar.gz cd mysql-5.1.44 ./configure --prefix=/usr/local/mysql --with-extra-charsets=all --enable-thread-safe-client --enable-assembler --with-charset=utf8 --enable-thread-safe-client --with-extra-charsets=all --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --without-debug make && make install cd ../
创建MySQL数据库,用默认的配置my.cnf
groupadd mysql useradd -g mysql mysql cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf /usr/local/mysql/bin/mysql_install_db --user=mysql chown -R mysql /usr/local/mysql/var chgrp -R mysql /usr/local/mysql/.
添加Mysql启动服务,并且设置root密码
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql chmod 755 /etc/init.d/mysql chkconfig --level 345 mysql on echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf echo "/usr/local/lib" >>/etc/ld.so.conf ldconfig ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql ln -s /usr/local/mysql/include/mysql /usr/include/mysql service mysql start /usr/local/mysql/bin/mysqladmin -u root password root //root改为你需要的密码 service mysql restart
5,安装PHP(FastCGI模式)
tar zxvf php-5.2.13.tar.gz gzip -cd php-5.2.13-fpm-0.5.13.diff.gz | patch -d php-5.2.13 -p1 cd php-5.2.13/ ./buildconf --force ./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 make ZEND_EXTRA_LIBS='-liconv' make install cp php.ini-dist /usr/local/php/etc/php.ini cd ../
6,安装PHP扩展模块
tar zxvf memcache-2.2.5.tgz cd memcache-2.2.5/ /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install cd ../ tar zxvf PDO_MYSQL-1.0.2.tgz cd PDO_MYSQL-1.0.2/ /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql make make install cd ../ tar jxvf eaccelerator-0.9.6.tar.bz2 cd eaccelerator-0.9.6/ /usr/local/php/bin/phpize ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config make make install cd ../
安装Zend Optimizer,32位系统版本
tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz mkdir -p /usr/local/zend/ cp ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/local/zend/
如果是64位系统,则
tar zxvf ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz mkdir -p /usr/local/zend/ cp ZendOptimizer-3.3.9-linux-glibc23-x86_64/data/5_2_x_comp/ZendOptimizer.so /usr/local/zend/
配置php.ini
cat >>/usr/local/php/etc/php.ini<
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文件的修改:
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 sed -i 's#output_buffering = Off#output_buffering = On#' /usr/local/php/etc/php.ini
8,配置eAccelerator加速PHP:
创建缓存目录
mkdir -p /usr/local/eaccelerator_cache
配置php.ini
cat >>/usr/local/php/etc/php.ini<
9,创建www用户和组,以及主机需要的目录,日志目录
groupadd www useradd -g www www mkdir -p /home/www chmod +w /home/www mkdir -p /home/www/logs chmod 777 /home/www/logs chown -R www:www /home/www
10,创建php-fpm配置文件
rm -f /usr/local/php/etc/php-fpm.conf vi /usr/local/php/etc/php-fpm.conf
输入以下内容,我设置开的进程是5个.需要更改进程数,可以修改5
<?xml version="1.0" ?> <configuration> All relative paths in this config are relative to php's install prefix <section name="global_options"> Pid file <value name="pid_file">/usr/local/php/logs/php-fpm.pid</value> Error log file <value name="error_log">/home/www/logs/php-fpm.log</value> Log level <value name="log_level">notice</value> When this amount of php processes exited with SIGSEGV or SIGBUS ... <value name="emergency_restart_threshold">10</value> ... in a less than this interval of time, a graceful restart will be initiated. Useful to work around accidental curruptions in accelerator's shared memory. <value name="emergency_restart_interval">1m</value> Time limit on waiting child's reaction on signals from master <value name="process_control_timeout">5s</value> Set to 'no' to debug fpm <value name="daemonize">yes</value> </section> <workers> <section name="pool"> Name of pool. Used in logs and stats. <value name="name">default</value> Address to accept fastcgi requests on. Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket' <value name="listen_address">127.0.0.1:9000</value> <value name="listen_options"> Set listen(2) backlog <value name="backlog">-1</value> Set permissions for unix socket, if one used. In Linux read/write permissions must be set in order to allow connections from web server. Many BSD-derrived systems allow connections regardless of permissions. <value name="owner">www</value> <value name="group">www</value> <value name="mode">0666</value> </value> Additional php.ini defines, specific to this pool of workers. <value name="php_defines"> <value name="sendmail_path">/usr/sbin/sendmail -t -i</value> <value name="display_errors">0</value> </value> Unix user of processes <value name="user">www</value> Unix group of processes <value name="group">www</value> Process manager settings <value name="pm"> Sets style of controling worker process count. Valid values are 'static' and 'apache-like' <value name="style">static</value> Sets the limit on the number of simultaneous requests that will be served. Equivalent to Apache MaxClients directive. Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi Used with any pm_style. <value name="max_children">20</value> Settings group for 'apache-like' pm style <value name="apache_like"> Sets the number of server processes created on startup. Used only when 'apache-like' pm_style is selected <value name="StartServers">20</value> Sets the desired minimum number of idle server processes. Used only when 'apache-like' pm_style is selected <value name="MinSpareServers">5</value> Sets the desired maximum number of idle server processes. Used only when 'apache-like' pm_style is selected <value name="MaxSpareServers">35</value> </value> </value> The timeout (in seconds) for serving a single request after which the worker process will be terminated Should be used when 'max_execution_time' ini option does not stop script execution for some reason '0s' means 'off' <value name="request_terminate_timeout">0s</value> The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file '0s' means 'off' <value name="request_slowlog_timeout">0s</value> The log file for slow requests <value name="slowlog">logs/slow.log</value> Set open file desc rlimit <value name="rlimit_files">65535</value> Set max core size rlimit <value name="rlimit_core">0</value> Chroot to this directory at the start, absolute path <value name="chroot"></value> Chdir to this directory at the start, absolute path <value name="chdir"></value> Redirect workers' stdout and stderr into main error log. If not set, they will be redirected to /dev/null, according to FastCGI specs <value name="catch_workers_output">yes</value> How much requests each process should execute before respawn. Useful to work around memory leaks in 3rd party libraries. For endless request processing please specify 0 Equivalent to PHP_FCGI_MAX_REQUESTS <value name="max_requests">102400</value> Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect. Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+) Makes sense only with AF_INET listening socket. <value name="allowed_clients">127.0.0.1</value> Pass environment variables like LD_LIBRARY_PATH All $VARIABLEs are taken from current environment <value name="environment"> <value name="HOSTNAME">$HOSTNAME</value> <value name="PATH">/usr/local/bin:/usr/bin:/bin</value> <value name="TMP">/tmp</value> <value name="TMPDIR">/tmp</value> <value name="TEMP">/tmp</value> <value name="OSTYPE">$OSTYPE</value> <value name="MACHTYPE">$MACHTYPE</value> <value name="MALLOC_CHECK_">2</value> </value> </section> </workers> </configuration>
11,启动php-cgi进程,监听127.0.0.1的9000端口,进程数为5,用户为www
ulimit -SHn 65535 /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
tar zxvf pcre-8.01.tar.gz cd pcre-8.01/ ./configure make && make install cd ../ tar zxvf nginx-0.7.65.tar.gz cd nginx-0.7.65/ ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module make && make install cd ../
13,创建Nginx配置文件
mkdir -p /usr/local/nginx/conf/servers rm -f /usr/local/nginx/conf/nginx.conf vi /usr/local/nginx/conf/nginx.conf
输入以下内容:
user www www;
worker_processes 1;
error_log /home/www/logs/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
#charse gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 128k;
large_client_header_buffers 4 256k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
output_buffers 4 32k;
postpone_output 1460;
#limit_zone crawler $binary_remote_addr 10m;
server
{
listen 80;
server_name vps.imcat.in;
index index.html index.htm index.php;
include location.conf;
root /home/www;
}
include servers/*;
}
14,在/usr/local/nginx/conf/目录中创建location.conf文件:
vi /usr/local/nginx/conf/location.conf
输入内容:
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
多站点管理,可以在/usr/local/nginx/conf/servers目录添加配置文件,格式为:
vi /usr/local/nginx/conf/servers/imcat.conf
内容:
server
{
listen 80;
server_name imcat.in;
index index.html index.htm index.php;
root /home/www/imcat;
}
请注意,我是没有开启Nginx日志记录功能的.
启动Nginx:
ulimit -SHn 65535 /usr/local/nginx/sbin/nginx
放个探针看看
mv index.php /home/www/
访问你的IP看看吧!
15,安装phpMyAdmin,管理Mysql数据库
tar zxvf phpMyAdmin-3.2.4-all-languages.tar.gz mv phpMyAdmin-3.2.4-all-languages /home/www/phpmyadmin
16,配置开机自动启动Nginx + PHP
echo "ulimit -SHn 65535" >>/etc/rc.local echo "/usr/local/php/sbin/php-fpm start" >>/etc/rc.local echo "/usr/local/nginx/sbin/nginx" >>/etc/rc.local
17,优化Linux内核参数(我只在Xen VPS用过,Openvz VPS失败,慎用)
vi /etc/sysctl.conf
在最后加入
# Add net.ipv4.tcp_max_syn_backlog = 65536 net.core.netdev_max_backlog = 32768 net.core.somaxconn = 32768 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_tw_recycle = 1 #net.ipv4.tcp_tw_len = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 #net.ipv4.tcp_fin_timeout = 30 #net.ipv4.tcp_keepalive_time = 120 net.ipv4.ip_local_port_range = 1024 65535
使配置立即生效:
/sbin/sysctl -p
18,需要安装ftp的,可以简单安装vsftpd应用:
yum -y install vsftpd /etc/init.d/vsftpd start chkconfig --level 345 vsftpd on
19,请务必更改www用户密码:
passwd www
全文完!欢迎抓错误!
暧昧日志:
哈哈。换主题了啊。。我装lnmp成功了,回来有时间了拆了在试试这个...
我昨天自己装了phpmyadmin,基本上看着文档还可以安装成功。
你又换主题了。
我打算先在虚拟机里配置一遍,似乎像我一样用Ubuntu服务器的不多嘛。
@LAONB 经常换主题,保持新鲜感....Ubuntu啊?貌似不错,都可以直接安装软件,简单,虽然不是最新版本,但也不旧~
那用nginx怎么配置wp的permalink和wp-supercache的转向呢?
第三步那里 是全复制了在ssh里执行吗?还是一行一行的?怎么我一行一行的执行到make说没目标。
@Sivan 不可以这样复制到ssh里面执行
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure --prefix=/usr/local
make
make install
cd ../
但不要全部复制
一直在用猫哥的一键包,感觉自己编译有时会出错
@水牛 一键包你学不到什么知识的..自己动手就能解决问题了
谢谢猫哥,多多学习~~
安装mysql暂时失败中,提示错误
cc1plus: out of memory allocating 4410480 bytes after a total of 14692352 bytes
make[3]: *** [sql_yacc.o] Error 1
make[3]: Leaving directory `/mysql-5.1.44/sql'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/mysql-5.1.44/sql'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/mysql-5.1.44/sql'
make: *** [all-recursive] Error 1
后面的无法继续,暂时跳过。
安装php那里你好像写错了。应该是cd php-5.2.13 吧。。
暂时借你这里记录下哈。。别介意哈。
[root@vps8 php-5.2.13]# make ZEND_EXTRA_LIBS='-liconv'
make: *** No targets specified and no makefile found. Stop.
[root@vps8 php-5.2.13]# make install
make: *** No rule to make target `install'. Stop.
不行了后面好多无法继续了。。。弄个lnmp好难啊。。我暂时就成功了一次,就是centos4配合你的老版lnmp,但是那般phpmyadmin还是需要我自己装,后来也是mysql出了问题,会不会是我的vps的问题?
@猪小猪 mysql安装失败的话,就不能继续安装php了.一步一步安装mysql看看错误在哪里..
@ゞ猫 我就是按照你这个一步一步安装的,centos也是5.4呢。mysql错误提示这个。安装mysql暂时失败中,提示错误
cc1plus: out of memory allocating 4410480 bytes after a total of 14692352 bytes
make[3]: *** [sql_yacc.o] Error 1
make[3]: Leaving directory `/mysql-5.1.44/sql'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/mysql-5.1.44/sql'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/mysql-5.1.44/sql'
make: *** [all-recursive] Error 1
用的是ramhost.us
哇,真是详细,可惜我没有vps可以玩。。
我来了。
cpanel安装nginx的飘过~虽然我是叫管理员安装的~不过这篇东西还是很有用的~谢谢~
你能不能帮我配置下 啊 绝对的新手 只是想做个网站 你的内存是多大的 啊lovexxdsj#gmail.com
博主 你的php-fpm.conf麻烦你自己再确定下
只知道编辑时候用vi 查找用find
所以uqian此文还不能很好的贯彻实践 - - 继续学习ing~