5

Alpine的使用体验

 2 years ago
source link: https://mabbs.github.io/2022/03/12/alpine.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

12 March 2022 - 字数统计:3472 - 阅读大约需要10分钟 - Hits: 48

Alpine的使用体验

by mayx


没别的,小就是好!

最近一段时间,我开始学习Docker了。在学习期间,我知道了Docker官方推荐的Alpine Linux系统。以前我也听说过这个系统,但是名字没什么特色就没关心过。不过既然学了Docker,我也体验了一下,发现还真是相当不错,而且正好能解决我手头的问题。

Alpine的特点

Alpine Linux和我之前用过的piCore在PC上用的版本TinyCore Linux有相似之处,他们都是基于Busybox来驱动整个系统的,不过TinyCore的软件要少很多,而且软件都是用类似镜像的方式打包,系统也是在内存中运行的,所以并不适合在生产环境中使用。Alpine就不一样了,它库中的软件很明显要多得多,而且现在很多人都在使用基于Docker构建的程序上,稳定性肯定是没有任何问题的,大小虽然比TinyCore Linux大了些,但是相比于CentOS之类的发行版要小太多了,而且在没有装程序的时候内存基础占用才不到100MiB。
另外它安装软件也特别简单,使用的命令是apk add,比如我想在Alpine上安装Docker,就直接输入apk add docker就行了,基本上不需要其他什么操作,Docker就安装好了,然后再执行个rc-update add docker boot加到启动项里,不像其他发行版还要加什么源啊,还要安装什么containerd啊,就很麻烦。
不过据说Alpine不适合开发,好像是因为系统用的是musl libc,用的人少,有些程序会不兼容……不过在我这次测试当中,没有碰见类似的问题。所以对于我来说,在生产服务器上使用CentOS实在是太浪费了,浪费硬盘空间又浪费内存空间,像我能用的服务器性能都不怎么高,要是用Alpine那就可以在一定程度上再提高性能了。

预期的问题解决方案

在两年前,我为了优化我所维护的花火学园曾经把系统Ubuntu换成CentOS,而最近,我接手了另一个ACGN资源论坛——资源统筹局。这个论坛的体积也不小,因为之前论坛里对附件的上传限制不高,导致很大部分都是附件占的体积。像现在花火学园从以前的只有2GiB到现在有20GiB了,再加上统筹局又有十几GiB,还有CentOS本身又要10GiB左右,我原来租的64GiB大小的硬盘基本上不够用了,所以现在只好先升到了80GiB的硬盘。不过考虑到可持续发展,增加硬盘容量就要增加成本,这对可持续发展不是一件好事。想想CentOS要占掉这么大的空间实在是不合适,如果我能把这部分空间节省下来的话,那我还能继续用64GiB硬盘的服务器。
不过因为现在的数据量比较大,而且服务的用户也比较多,如果计划出问题恢复起来也比较麻烦,所以我想先在自己在电脑上创建一个类似的服务器,安装上Alpine进行预演测试,然后再找空闲时间在服务器上进行迁移操作,这样就能尽可能保证服务不会因为操作失误而中断了。

Alpine的安装与环境测试

我在选取Alpine镜像的时候是使用的virt镜像,因为介绍上说这个版本对虚拟机有优化,而云服务器本质上就是一个KVM的虚拟机,我在电脑上装的话则是Hyper-V的虚拟机,所以我用的是这个版本。在启动之后,首先需要执行setup-alpine进行配置和安装,这么看来用光盘启动的Alpine有点像LiveCD,另外在服务器上安装的话在选择那个硬盘模式的时候可以选LVM,选了LVM之后方便以后调硬盘大小,然后再选sys。不过LVM有可能会影响性能,所以追求极致性能的话可以直接选sys。其他部分安装都很人性化,包括选择源还能自动找到最合适的源,这个比Ubuntu好多了,apt想换源还得手动换。

安装LEMP

安装完成之后弹出光盘然后重启就OK了,接下来是安装LEMP环境。我以前用LEMP基本上要么是配好的,要么就是一键包,我既没有体验过编译安装,也没有试过用软件包管理器安装。所以这次在Alpine上安装也算是一个挑战了。像Docker安装既然直接安就可以,那这三个组件应该也差不多,我一开始是找的网上的文章,装倒是能正常装,但是我找了一个探针试着运行了一下总是报500的错误……结果发现网上那些在Alpine上安装的PHP连像php-json这种核心库都没装😓,后面我只好自己摸索,把Discuz需要的PHP扩展装全了,在安装软件之前,要启用community源,不然好多包会找不到,具体位置是在/etc/apk/repositories,把里面那个community源前面的#去掉,然后执行一下apk update就行了。

  1. 安装PHP的命令主要是:apk add php7 php7-fpm php7-opcache php7-gd php7-mysqli php7-zlib php7-curl php7-pdo php7-mysqlnd php7-json php7-exif php7-zip php7-redis php7-imagick php7-fileinfo php7-xml,安装完之后别忘记把php-fpm加到启动项里:rc-update add php-fpm7 default,这些库安装完基本上大多数网站引擎就能正常用了。
  2. 还有就是MySQL,我装的是MariaDB,反正也是相互兼容的,应该也不影响。具体命令是apk add mariadb mariadb-client,然后执行/etc/init.d/mariadb setup初始化,执行rc-update add mariadb defaultrc-service mariadb start加入启动项和启动数据库,再执行mysql_secure_installation配置一些安全上的东西就OK了。
  3. Nginx安装起来就简单多了,直接执行apk add nginx,然后加入启动项rc-update add nginx default就行了。当然这只是安装,之后还需要一些配置才能连接到PHP。
  4. 额外的一些比如Redis我也试着装了一下,用apk add redisrc-update add redis default就OK。

所有操作完成之后Nginx改一下配置文件,需要在/etc/nginx/http.d里的配置文件中增加一段:

location ~ \.php$ {
    fastcgi_pass      127.0.0.1:9000;
    fastcgi_index     index.php;
    include           fastcgi.conf;
}

这个文件夹里面的default.conf中没配root,而且默认404,这些使用的时候都需要改一下。
所有的东西改完之后就可以使用完整的LEMP环境了。当然这些都是预演,这篇文章也是为了接下来在服务器上配置做准备。
另外还有些安全上的问题,默认情况下是没有配禁用函数的,还有防火墙默认也没有安装,Alpine倒是支持安装ufw也挺方便的,这些实际使用的时候都得配一下。
除此之外还有把php-fpm和redis配置成监听Unix Domain之类的优化操作,这些之前的文章都有写,这里就不多做描述了。

配置BBR

之前用CentOS的时候我是直接用的脚本整的BBR,不过BBR好像是高版本Linux内核自带的功能,本来就不需要安装,Alpine的内核版本好像是5.15,就不用像CentOS那样还要升级内核了,所以只要执行以下命令:

sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf 
sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf 
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf 
sysctl -p

然后重启,执行lsmod | grep bbr只要有tcp_bbr就OK。

体验和总结

最终整完之后安装了Discuz,感觉还挺不错的,功能简单试了一下都没有问题,用探针测试了一下速度也很不错,感觉作为接下来花火学园和资源统筹局的基础环境没有任何问题。
在结束之后我看了一下占用硬盘才600MiB,空载内存才200MiB左右,这简直比CentOS好太多了,像CentOS的LEMP空载内存都要600MiB左右,我整个服务器才2GiB的内存,被系统占掉那么多它到底干了些啥?目前我没有发现任何坑,到时候迁移完再看吧,总之现在的我只能说,小就是好!

tags: Alpine - LEMP - PHP

0 comments

Be the first person to leave a comment!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK