Skip to content

小内存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?](http://www.mike.org.cn/articles/what-is-cgi-fastcgi-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](/wp-content/uploads/2012/04
/php-fastcgi.txt)到/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之后,内存是不是省了很多,又不需要编译这么长的时间呢。

如何从源代码自动制作Deb规则&推送至Launchpad

本文环境

OS:Ubuntu 11.10 已安装:build-essential、dh-make、dput等必要的库和软件 对象:不会却又想打Debian包的小白

本文目标

  1. 没有debian规则情况下,大部分自动化地创建debian规则
  2. 文件符合LaunchPad.net标准,上传至PPA

准备工作

  1. 去申请launchpad.net帐号
  2. 创建个人Open PGP密钥
  3. launchpad帐号加入Open PGP密钥
  4. 在LaunchPad.net上建立个人PPA

创建Debian规则

Linux的世界是源代码构成的,时时刻刻会多出很多新的,好玩的软件,但这些软件的作者并没有时间去写debian规则,而各位又想用deb包来安装的话就没办法了。跳过"又臭又长"的Debian打包指南,其实我们只需要一个软件就够了
—-dh_make。 这个软件会自动地根据makefile写出Debian规则来,执行一下就好了,够简单吧。 下面就用没有debian化的ibus-
gjs来做例子: git clone [email protected]:mengzhuo/ibus-gjs.git ibus-gjs-1 && cd ibus-gjs-1 && mv debian debian.backup 你会发现这时,ibus-gjs-
1里面没有debian规则(只剩个备份文件夹啦),还有就是在路径底下直接用dh_make是不行的,因为我们的作者用的是autogen.sh,所以需要用以下命令来做出makefile
./autogen.sh --prefix=/usr && ./configure 成功后(没有任何依赖不足或错误)执行 dh_make -e "[email protected]" -n -s 当然,你可以把email换成你自己的,具体参数是什么意思请问man哦,这时屏幕上应该出现:

图片里大意是叫你去修改一下debian规则,毕竟很多地方还是要人来做的嘛~一般改debian/control和删除一些不需要的*.ex脚本文件,具体怎么改就要看Debian的文档啦,不过本例的最后成品可以参考debian.backup文件夹里的文件。

创建、测试Deb包

上面改好之后,在ibus-gjs-1底下执行dh_make --createorig -s,来创建debuild所需的orig文件,放心按回车吧,那个提示是吓唬你的,因为你已经创建了debian规则,所以它会略过的。
现在,你已经可以自己创建一个deb包了,下面的命令会创建一个deb包,并清除编译产生的缓存。 debuild -b && debuild clean
然后你会发现下面的错误:
这是因为你还没指定你的密钥,如果你不需要上传到LaunchPad的话就可以忽视它啦。现在,返回上层,你就会发现你打好的DEB包啦。

源码上传

就3步:

1. 获得Open PGP ID,例如我的ID是A0771E56,可以用下面的代码参看 `gpg --list-keys` 我的PGP

pub 2048R/A0771E56 2011-11-21 uid Meng Zhuo (For Email and EncryptedFile)
sub 2048R/DF9E11A0 2011-11-21

2. 在源代码目录执行 `debuild -S -sa -k[你的ID]` 例如: `debuild -S -sa -kA0771E56` 来构建launchpad承认的源代码格式
3. 返回上层目录,执行 `dput ppa:[你的PPA地址] source.changes结尾的文件`

例如:

dput ppa:mengzhuo1203/ibus-gjs ibus-gjs_1_source.changes

好啦,现在就坐等LaunchPad给你排队编译这个东西了,大概1-2小时不等

总结

我们学了简单地从源代码制作debian规则和上传代码到LaunchPad,很简单吧,我可是摸索了……3天(业余时间),遥想当年手动写规则,简直是弱爆了。
当然,非常欢迎指正错误,或者是说出更好的方法哈~

2011年终总结

  1. 今年你所完成的最重要的事情是什么? 顺利毕业了​
  2. 今年你所学到的最有用的是什么? 工作很辛苦,读书很幸福,人生苦短
  3. 满分10分,你在这一年对自己的满意度有几分?这么评的理由是什么? 3分 今年真是糟糕的一年,感觉像是倒霉的本命年提前来了,评分理由:
    * 考研没有成功(-6)
    * 工作没有继续(-0.3)
    * 浪费了2个月(-0.65)
    * 插件错误太多(-0.05)
    * 还活着(+0)
  4. 你明年想要实现什么?
    * 烤鸡成功
    * 气球升空

可选类问题

  1. 如果现在是明年的12月31​日,你最想在你的生活中见到什么?
    * 拿着能见人的鸡托分数申请学校,然后得到offer
    * 气球升空后传回的照片
  2. 发生什么能在明年年底​能够让你感觉10分满意?
    * 能见人的鸡托分数单(+8.549)
    * 气球成功升空(+1.24)
    * 写的插件没有大BUG(+0.2)
    * 拿到驾照(+0.009)
    * 中500W彩票(+0.001)
    * 有个女朋友(+0.001)
    * 还活着(+0)
  3. 播种怎样的习惯会帮你实现问题1中的事情?
    * 特定时间里一心一意(对我这个思维太跳的人真心难)
    * 按时休息
    * 严格按规划执行
    * 锻炼身体
  4. 为了实现这些目标,你马上要做的是什么? 把爪子从手机电脑上拿开

年终总结受这篇文章鼓动而写