CentOS/RHEL 官方推荐的最小配置(不带图形界面)虽然是 64MB 内存,但是考虑到同时要跑 MySQL,PHP,Wordpress 等程序 64MB CentOS就有点吃力了。还有一个考虑就是运行一次 yum 需要比 apt-get 多得多的内存资源。所以按照我的 VPS 配置,64MB内存,128MB 交换,2.5GB 的硬盘,就只能选 Debian 了。
Debian 是一个古老,严谨,自由而且流行的 Linux 发行版,有 n 多的软件包可以用,有很好的稳定性和安全性,是各大 Linux hosting 服务商的主流系统之一,几乎所有 Linux VPS 都支持 Debian 版本。安装 Debian 的系统最低内存要求是 64MB,但是官方文档也说了真正的最低内存配置要比 64MB 低一些,根据不同的硬件体系安装在只有 48MB 的 i386 上也是可能的。
查看 VPS 配置
1、查看以下 VPS 的硬件信息,做到心中有数
# free # cat /proc/cpuinfo
安装和升级系统
3、安装完毕后马上升级整个系统
# apt-get update && apt-get upgrade
寻找小资源的替代软件
4、用 pdksh 替代 bash
当你在使用 64MB VPS 的时候,为了多压榨一些可用的内存通常不得不去用一些轻量的程序替代那些笨重的程序,比如用 niginx/lighttpd 替代 apache,把省下来的内存留给那些必须的程序,像省钱一样不是吗?,把一些不必要的开支省下来应付那些必不可少的开支,用在刀刃上。
Bash 是现在大多数 Linux 发行版本的默认 shell,是大多数 Linux 命令行用户的默认界面。从本人十多年前接触 Linux 以来,换过很多发行版本,换过不同的邮件服务器,换过不同的 web/ftp 服务器。不过从来没有换过 shell,期间试过一些不同的 shell,如csh,korn shell,不过总是感觉不满意。随着 bash 功能的增强,多年下来 bash 也变得越来越臃肿,消耗越来越多的 CPU 资源,占据越来越多的内存。由于我的电脑也在与时俱进的更新换代,硬件越来越强大,所以 bash 用到的那一点点资源都不是问题,甚至都感觉不到。当有一天我需要在一个 64MB 的 VPS 上运行 WordPress的时候,才发现 bash 的”身材”一点也不苗条。一个只有 64MB 的机器如果有多人同时登录的话,bash 占据的内存就显得比较可观了(那可是只有 64MB 的 VPS)。所以需要用一个轻量级的 shell 来替换 bash。
在网上搜了一圈,最终落在 pdksh 上,pdksh 是从 korn shell 的分出来的一个版本,这里有更多关于 pdksh 的介绍。 运行一个 bash 需要 4MB 左右的内存,而运行一个 pdksh 只要 1MB 左右。如果你的习惯和我一样一登录上来就启6个 ssh 的话,那么替换掉bash绝对必要,那可是约 18MB 左右的内存,对于只有 64MB 的主机来说是一个大买卖。让我来解释一下买卖 : ),对于一般用户来说现在 VPS 提供的硬盘够用了,带宽够了,CPU 也够了,唯独 VPS 配置里面最紧缺的就是内存。现在提供 64MB VPS 主机的 hosting服务商一般都把价格定在8美元每月到20美元每月之间,那 18MB 可就是省了2美元到6美元每个月。pdksh 看上去像是个很好的 bash 替代品,简单,自动 tab 补齐, history 记录,bourne shell 的语法(如果你不喜欢 csh/tcsh 的话),这已经足够了,正是我需要的。如果你对 shell 感兴趣的话,这里有更多关于不同shell的比较。
# ps -C bash v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1254 ? Ss 0:00 26 663 2272 36 1.2 /bin/bash -- # apt-get install pdksh # chsh -s /bin/pdksh 重新用 ssh 登录 VPS # ps -C pdksh v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 27700 pts/0 Rs 0:00 17 174 1765 344 0.5 -pdksh
值得注意的是,如果你用的是 VPSLink 的 VPS 的话会发现即使替换掉了 bash 系统还是会自动启动一个bash进程出来,原来 VPSLink 在 /etc/inittab 的最后加了一行,只要把最后一行的 /bin/bash 改成 /bin/sh 或者 /bin/pdksh,运行 init q 重新载入 init(1),然后 kill 掉那个 bash 进程就可以了。
shell 是个很个人的事情,一旦你习惯了一种 shell 就不大容易马上替换掉它,就像虽然我知道 nano 比 vi 更小巧更简单,需要的内存更少,但是我也不会用 nano 来替换 vi 的,我不能没有 vi。
5、用 Dropbear 替代 OpenSSH
OpenSSH 是个必不可少的服务程序,不过如果同时很多次登录 ssh 的也会吃掉很多内存,用一个轻量级的程序替代的话会省下更多的内存。Dropbear 是一个相对较小的 SSH 2 服务器,这里有更多关于 Dropbear介绍 的信息。如果不需要 OpenSSH 其他强大的功能的话 Dropbear 是一个不错的替代品,很多嵌入式产品,如:路由器,交换机等都把 Dropbear 作为默认的 SSH 服务。Dropbear 体积小还有一个原因是:如果你用非 root 用户登录,Dropbear 只需要创建1个进程,而 OpenSSH 则需要创建2个进程,更多的进程意味着更多的地址空间,更多的内存资源。虽然从功能上说 Dropbear 目前还不如 OpenSSH 强大,不过如果只想拿它来做远程登录 VPS,打打几个命令来管理一下 VPS 还是可以的。重要的是相对于 OpenSSH 的庞大体积来说,Dropbear 省了大约30%到50%的内存。
# touch /etc/ssh/sshd_not_to_be_run # apt-get install dropbear # vi /etc/default/dropbear # /etc/init.d/dropbear start
6、用 syslog-ng 替代 rsyslog
Rsyslog 是 Debian 5 的默认日志工具,是一个专注于安全和稳定的增强型多线程日志工具,有着丰富的功能,强大的可定制能力,可以把日志写入数据库(支持 MySQL,PostgresSQL,Oracle 等),E-mail 警报,可定制的日志输出等等,不过对于一个运行在 64MB VPS 的博客/网站来说,Rsyslog 未免显得过于强大,功能强大就意味着占用更多的 CPU/内存 资源。但是也不能没有一个日志工具,没有系统日志记录功能的系统是非常危险的,尤其是受到外部或者内部的威胁的时候,监控排错都需要一个好的日志系统的支 持。不用日志系统就像用 gcc 不用 gdb 一样,调试程序不用 debug 一样。
Syslog-ng 是一个不错的 Rsyslog 替代品,被 SUSE,Fedora,旧版本 Debian, Gentoo 等发行版当作默认日志工具。不过 apt-get install syslog-ng 后发现 syslog-ng需要 libevtlog0, libglib2.0-0,libglib2.0-data 软件包,并且需要约 5349KB 的额外硬盘空间,这对一个只有2.5GB硬盘的 VPS 来说”太”大了,5MB 空间可以写500篇左右的博客啊。
syslog-ng 的增强功能对于这个小小 VPS 来说不必要,用简单的 syslogd 就可以满足我的要求,于是决定用 syslogd 来替代 Rsyslog。注意安装 syslogd 的软件包名字是 sysklogd。
# apt-get install sysklogd && dpkg --purge rsyslog
# ps -C rsyslogd v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 20441 ? Sl 0:00 0 27 32836 1220 1.8 /usr/sbin/rsyslogd -c3 # apt-get install sysklogd && dpkg --purge rsyslog # ps -C syslogd v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 27769 ? Ss 0:00 11 25 1806 324 0.4 /sbin/syslogd
7、既然要优化,那就删除一下Debian自带的不必要程序好了:
# apt-get remove acpi acpi-support-base acpid eject man-db manpages nano vim laptop-detect bsdmainutils busybox dmidecode
8、更新Debian:
# apt-get update && apt-get upgrade
9、安装必要的一些组件:
# apt-get install automake wget zip unzip make time
10、安装LNMP:
懒人可以使用lowendbox制作的低内存Debian/Ubuntu版LNMP,在Debian 32bit下使用只有42.9M。
11、防火墙设置:
要保证服务器安全,防火墙是少不了的,用 root 帐号执行:
iptables -F
iptables -N FIREWALL
iptables -F FIREWALL
iptables -A INPUT -j FIREWALL
iptables -A FORWARD -j FIREWALL
iptables -A FIREWALL -p tcp -m tcp –dport 110 –syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp –dport 80 –syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp –dport 443 –syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp –dport 22 –syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp –dport 25 –syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp –dport 3306 –syn -j ACCEPT
iptables -A FIREWALL -i lo -j ACCEPT
iptables -A FIREWALL -p udp -m udp –dport 161 -j ACCEPT
iptables -A FIREWALL -p udp -m udp –sport 6277 -j ACCEPT
iptables -A FIREWALL -p udp -m udp –sport 24441 -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp –syn -j REJECT
iptables -A FIREWALL -p udp -m udp -j REJECT
iptables-save > /etc/firewall-rules
iptables-restore < /etc/firewall-rules
这里设置的相对宽松一些,22 端口对所有 IP 都开放了,为的是方便管理。最好修改一下ssh端口号。161 端口是 snmp 端口,我开这个是为了远程监控,所以是可选项。 6277、24441 这几个端口是 Razor/Pyzor/DCC/SA 要访问的端口。请根据自己的情况开放。
执行
iptables -L
可以看到你设定的规则,如果不对,可以用 iptables -F 清空,然后重设。
如果想要开机运行,那么编辑 /etc/network/interfaces,在 iface lo inet loopback 之后加入:
pre-up iptables-restore < /etc/firewall-rules
或者是放在启动脚本里: /etc/init.d/bootmisc.sh
这里是iptables的一些资料, 介绍的很详细:
http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html (iptables使用指南)
参考了:http://www.vpsee.com/2009/06/64mb-vps-optimize-debian5/