把服务器换成 Alpine 之后
手里有一台配置很低的云主机,系统盘只有 400M 出头。原来装 Debian,系统本身就吃掉快 1G,随便装点东西就满了。后来重装成 Alpine,整个系统不到 100M,一下子宽松了。
但 Alpine 和常见的发行版差别不小,用之前得知道几件事。
没有 systemd
服务管理是 OpenRC,命令换一套:
rc-service nginx start
rc-service nginx status
rc-update add nginx default
rc-update add 相当于开机的 enable,不加的话重启就没了。日志也不在 journald 里,一般在 /var/log/messages。
busybox 的命令是阉割版
默认的 ls、ps、netstat 都是 busybox 提供的,参数比 GNU 版本少很多。比如 ps aux 能跑,但 ps -ef 的某些列就没有。需要完整的工具就装 coreutils、procps、net-tools,但装了就不「小」了,我一般按需装。
glibc 和 musl
这是最容易翻车的地方。Alpine 用的是 musl libc,官方预编译的二进制大多是针对 glibc 编译的,直接跑会报 not found(不是找不到文件,是找不到解释器)。
解决办法:要么找 Alpine 自己的包(apk add),要么装 gcompat 兼容层,要么用静态编译的二进制(Go 程序天生静态,这点很省事)。
apk 很好用
apk add --no-cache 不会在本地留缓存,对小盘特别友好。apk info -L 看某个包装了哪些文件,apk del 卸载干净。比 apt 快,也比 apt 干净。
总的来说,Alpine 适合做单一用途的小机器:跑一个服务、占一点内存、几年不动。真要当开发机用,还是别为难自己。