在VPS上自定义lnmp安装新版的方法

方法摘自:http://blog.bbkanba.com/mysql-nginx-php-linux-wordpress/(有修正)

原链接说的是Mysql(5.5.*)+Nginx(1.2.*)+PHP(5.3.*)+Linux_CentOS6.3(X86_64),我自己把PHP替换成5.4.*、Nginx替换成1.4.*,方法一样,这里说说存在的问题和我的修改。

1.我是在CentOS的VPS上安装的,目录有些不一样:
export TEMP_DIR_PACKAGES=~/packages
export TEMP_DIR_WEBSERVERS=/usr/local
把webservers.conf改名成mysql.conf

2. 在正式安装之前先更新一下系统:
yum -y install yum-fastestmirror
yum -y update
yum -y install vim-enhanced
yum -y install zip

3. 我安装的时候5.3的小版本升到31了,作者的原链接不可用,自己整了几个:
#wget http://mysql.ntu.edu.tw/Downloads/MySQL-5.5/mysql-5.5.31.tar.gz
#wget ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-5.5/mysql-5.5.31.tar.gz
wget http://download.softagency.net/MySQL/Downloads/MySQL-5.5/mysql-5.5.31.tar.gz

4. 安装mysql数据库时要带上datadir参数,不然启动服务失败,开始以为是权限不够:
scripts/mysql_install_db --user=mysql --datadir=$TEMP_DIR_WEBSERVERS/mysql/data

5. mysql成功启动后要设一下root的默认密码和把mysql链到PATH指定的目录,不然后面没法运行mysql_secure_installation,这里默认密码是root,执行mysql_secure_installation时再改回正式的:
$TEMP_DIR_WEBSERVERS/mysql/bin/mysqladmin -u root password root
ln -s $TEMP_DIR_WEBSERVERS/mysql/bin/mysql /usr/bin/mysql
$TEMP_DIR_WEBSERVERS/mysql/bin/mysql_secure_installation

6. 有些下载包后缀变成.bz2,所以tar命令要把z参数去掉,比如:
tar xvf mhash-*.tar.bz2
tar xf pcre-*

7. PHP改用5.4,我写这篇博文时子版本最新是15,从官方下载:
wget http://cn2.php.net/get/php-5.4.15.tar.gz/from/us1.php.net/mirror
tar zxf php-5.4.*.tar.gz

8. php.ini和php-fpm.conf的参数需要做些修改,php-fpm默认是nobody用户,而nginx用的是www用户,所以安装完php后要修改过来,不然会提示找不到文件,把php也链到PATH指定的目录:
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' $TEMP_DIR_WEBSERVERS/php/etc/php.ini
sed -i 's/group = nobody/group = www/g' $TEMP_DIR_WEBSERVERS/php/etc/php-fpm.conf
sed -i 's/user = nobody/user = www/g' $TEMP_DIR_WEBSERVERS/php/etc/php-fpm.conf
ln -s $TEMP_DIR_WEBSERVERS/php/bin/php /usr/bin/php

9. Nginx替换成1.4,我写这篇博文时子版本是0,从官方下载:
wget http://nginx.org/download/nginx-1.4.0.tar.gz

10. 默认安装时会提示找不到libpcre.so.1文件,加一个链接,同时把nginx链到PATH指定的目录,再把nginx的启动放到rc.local中:
ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1
ln -s $TEMP_DIR_WEBSERVERS/nginx/sbin/nginx /usr/sbin/nginx
echo "nginx -c $TEMP_DIR_WEBSERVERS/nginx/conf/nginx.conf" >> /etc/rc.local

11. nginx.conf的配置文件参见原链接,关键点是:
1) 在http{}里下加:

    # Upstream to abstract backend connection(s) for PHP.
    upstream php {
                #this should match value of "listen" directive in php-fpm pool
               	#server unix:/tmp/php-fpm.sock;
               	server 127.0.0.1:9000;
    }

2) 在server{}里加:include php.conf;
3) 新建一个php.conf,内容跟原链接的restrictions.conf一样,这里只是改了名:

# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ \.php$ {
		# Zero-day exploit defense.
		# http://forum.nginx.org/read.php?2,88845,page=3
		# Won't work properly (404 error) if the file is not stored on this server, which is entirely possible with php-fpm/php-fcgi.
		# Comment the 'try_files' line out if you set up php-fpm/php-fcgi on another machine.  And then cross your fingers that you won't get hacked.
		try_files $uri =404;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
		include fastcgi_params;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		#fastcgi_intercept_errors on;
		fastcgi_pass php;
}

这里提供一个我整理好的可以无人值守的.sh文件:lnmp-new.sh

另外提供一个重启lnmp的脚本,考虑到VPS的内存有限,这些服务可能会占用内存越来越多,所以我把这个脚本放到crontab里每天定时重启一次:restart-lnmp.sh

PS. 我把以前在lnmp0.9下用WordPress建的博客打包发转过来,发现博文的正文无法显示,然后发现是Feed Layout这个插件的问题,直接把它停用或删除就好了。phpmyadmin的安装请参考lnmp0.9,我是直接把以前的phpmyadmin打包放到我的/home/www就直接能用了。

Tags:

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。