mzh/blog

小内存VPS之Ubuntu配置LNmP

前言

作为Ubuntu fans,连VPS都是装Ubuntu的,但是因为内存太小(256M),传说中的LAMP(Linux+Apache+Mysql+PHP),因为内存使用率很容易就100%,只好用LNmP(Linux+Nginx+sqlite +PHP-fastcgi)。而网上的教程基本针对CentOS,就连用了Ubuntu的也是用LNMP安装包—- 从源代码开始安装!!而且把程序都装到/usr/local下,这样很不符合Ubuntu的包管理精神,而网上的教程基本上是一篇(都是互相抄袭嘛)。因此我想通过本文告诉大家,小内存下的Ubuntu不用编译也可以很好地使用,以下是集合我的实际配置经历和网上文章整理 纯粹在apt-get下管理软件,并配置出适合小内存VPS运行的服务器套装。

别看广告,看疗效

去掉我管理时连接ssh和bash(多了2M左右),内存最大占用只有60M,包括sendmail这种内存大头。当然现在VPS上才跑着一个Typecho(博客程序)和一个大波(推忒API),就算按一个站点要15M左右 (独立php-cgi+nginx进程),多出来的200M,应该还能跑10个左右这样的站点哈,特别对是流量比较小的个人博客,简直是太合适了。

配置Ubuntu

首先在VPS面板安装好Ubuntu 10.04后(是有点老,不过文中命令条目可以跨LTS版本执行),删除apache2和mysql-serverapt- get remove apache2 mysql-server-core bind9接下来是安装Nginx php-cgi apt-get install php5-cgi nginx注:网上说的fastcgi其实和这个是一样的,我个人理解是Nginx把得到的参数通过CGI接口转接给PHP进行处理而已。而Spawn- FCGI就不用下载了,网上那些用了Nginx还去下载LightHttpd的文章真是不知道怎么说了。为什么?请看什么是CGI、FastCGI、PHP-CGI 、PHP-FPM、Spawn-FCGI?

配置PHP-CGI启动项

添加php-cgi作为常驻内存项目,减少服务器开支 wget /2012/04 /php-fastcgi.txt && chmod +x php-fastcgi.txt && mv php-fastcgi.txt /etc/init.d /php-cgi或者手动复制php-fastcgi到/etc/init.d/下面 可能需要编辑文件里面的两项 BIND=/tmp/php.socket #绑定UNIX通道作为CGI传递的路径 PHP_FCGI_CHILDREN=2 #控制进程数(越多程序速度越快,当然内存消耗越大) 修改好后,再运行 update-rc.d php-cgi defaults && service php-cgi start,把这个启动项作为默认启动项,并启动。

配置Nginx

具体网站程序配置,最好网上找,我这里要说的是upstream和event的设定 /etc/nginx/nginx.conf下面要添加

upstream php { server unix:/tmp/php.socket; } events { worker_connections 1024; use epoll; }

然后再具体的网站程序里要添加: location ~ \.php { #你的程序配置 fastcgi_pass php; } 添加好以后用service nginx reload重载即可。 附上我的Typecho的配置文件:

location ~* ^.+\.php(\/.*)*$ {
                try_files $uri =404;    
                include /etc/nginx/fastcgi_params;
                fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_pass    php;
        }
    if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }

结尾啦

这样就基本差不多了,重启或者是其他关掉server之后,内存是不是省了很多,又不需要编译这么长的时间呢。