Debian 是一个古老,严谨,自由而且流行的 Linux 发行版,有 n 多的软件包可以用,有很好的稳定性和安全性,是各大 Linux hosting 服务商的主流系统之一,几乎所有 Linux VPS 都支持 Debian 版本。安装 Debian 的系统最低内存要求是 64MB,但是官方文档也说了真正的最低内存配置要比 64MB 低一些,根据不同的硬件体系安装在只有 48MB 的 i386 上也是可能的。
买VPS回来,一般提供商安装的系统都是自带apache神马一大堆乱七八糟玩意,占硬盘占内存不说,一不小心冲突起来挂档神马的。那就是欲哭无泪啦。
第一步、升级Debian系统
apt-get update&&apt-get upgrade
需要说明的是,在操作这些步骤最好是在我们刚重装系统,而不是在已经运行网站中优化机器,以免出现机器问题。
第二步、移除多余的软件
apt-get -y purge apache2-* bind9-* xinetd samba-* nscd-* portmap sendmail-* sasl2-bin
到底这些软件有什么用途呢?
apache2-* //apache服务器,一般我们自己会用一键安装包安装
bind9-* //我们不需要用VPS搭建DNS,所以去掉
xinetd //xinetd是服务守护进程
samba-* //samba能让linux使用windows共享功能,不需要
nscd-* //DNS缓存软件,同bind9,不需要
portmap //端口转发,一般Web服务器不需要
sendmail-* //发送邮件用,如果有需要保留
sasl2-bin //一个权限程序,占用资源,删除
第三步、删除多余组件
apt-get -y purge lynx memtester unixodbc python-* odbcinst-* sudo tcpdump ttf-*
第四、清理缓存文件
apt-get autoremove && apt-get clean
通过上述4步,就可以完成对debian系统的精简优化。
如果是32M小内存,就直接换OpenVZ 架构的 VPS 一键更换系统为 Alpine Linux 的脚本,系统直接先 apt-get update 和 upgrade 一波,然后直接运行:
wget --no-check-certificate https://cdn.jsdelivr.net/gh/clicocc/images/images/2020/11/07/alpine.sh && bash alpine.sh
脚本几秒就运行完成,然后重新用原来的 root 密码登陆即可进入 alpine,安装的系统版本为 3.9。
Debian 系统精简
查看 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 COMMAND27700 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 COMMAND27769 ? 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。
Bootstraping WordPress/Nginx/PHP/MySQL on a Cheap VPS with lowendscript
11、OpenVZ平台VPS改成Alpine Linux系统
如果经过以上操作后还是嫌内存占用多,那么只能替换成Alpine Linux系统了。Alpine Linux是一个社区开发的面向安全应用的轻量级Linux发行版操作系统,占用资源很少,初始状态基本只占用几M内存和几十M硬盘,而且还很稳定,适合很多小型服务器和设备使用,Vanilla Alpine Linux 仅占用8MB RAM and 36MB disk, and it is systemd-free.
64-bit CentOS 7, Debian 8, and Ubuntu 16.04 等等OpenVZ VPS测试成功
OVZ环境安装Alpine一键脚本:
#脚本会安装最新的Alpine Linux,并会清除服务器数据,请先备份好数据wget https://www.moerats.com/usr/shell/alpine.sh && bash alpine.sh#如果服务器不停的修改/etc/inittab并添加一堆重新生成的getty,可运行命令:apk add e2fsprogs-extrachattr +i /etc/inittab
来源 :https://gist.github.com/trimsj/c1fefd650b5f49ceb8f3efc1b6a1404d
不支持IPv6, 需要手动配置,更改以上源码中的IP和网关为IPv6的,再运行脚本,
auto $deviface $dev inet staticaddress $ipnetmask 255.255.255.255up ip route add default dev $dev
Alpine常用命令:
apk update //更新最新镜像源列表apk search //查找所以可用软件包apk search -v //查找所以可用软件包及其描述内容apk search -v 'acf*' //通过软件包名称查找软件包apk search -v -d 'docker' //通过描述文件查找特定的软件包apk add openssh //安装一个软件apk add openssh openntp vim //安装多个软件apk add --no-cache mysql-client //不使用本地镜像源缓存,相当于先执行update,再执行addapk info //列出所有已安装的软件包apk info -a zlib //显示完整的软件包信息apk info --who-owns /sbin/lbu //显示指定文件属于的包apk upgrade //升级所有软件apk upgrade openssh //升级指定软件apk upgrade openssh openntp vim //升级多个软件apk add --upgrade busybox //指定升级部分软件包apk del openssh //删除一个软件
Alpine服务管理:
alpine没有使用fedora的systemctl来进行服务管理,使用的是RC系列命令:rc-update //主要用于不同运行级增加或者删除服务rc-status //主要用于运行级的状态管理rc-service //主用于管理服务的状态rc-status -a //列出系统所有服务