From b99e83432127f43b1a1a717b5f6a715177771837 Mon Sep 17 00:00:00 2001 From: mayx Date: Sat, 12 Mar 2022 14:29:13 +0000 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=5Fposts/2022-03-12-alpine?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _posts/2022-03-12-alpine.md | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 _posts/2022-03-12-alpine.md diff --git a/_posts/2022-03-12-alpine.md b/_posts/2022-03-12-alpine.md new file mode 100644 index 0000000..5c7eb7d --- /dev/null +++ b/_posts/2022-03-12-alpine.md @@ -0,0 +1,54 @@ +--- +layout: post +title: Alpine的使用体验 +tags: [Termux, Android] +--- + + 没别的,小就是好! + +# 起因 + 最近一段时间,我开始学习Docker了。在学习期间,我知道了Docker官方推荐的Alpine Linux系统。以前我也听说过这个系统,但是名字没什么特色就没关心过。不过既然学了Docker,我也体验了一下,发现还真是相当不错,而且正好能解决我手头的问题。 + +# Alpine的特点 + Alpine Linux和我之前用过的[piCore](/2020/12/07/picore.html)在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](/2020/01/05/devops.html),而最近,我接手了另一个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 default`和`rc-service mariadb start`加入启动项和启动数据库,再执行`mysql_secure_installation`配置一些安全上的东西就OK了。 + 3. Nginx安装起来就简单多了,直接执行`apk add nginx`,然后加入启动项`rc-update add nginx default`就行了。当然这只是安装,之后还需要一些配置才能连接到PHP。 + 4. 额外的一些比如Redis我也试着装了一下,用`apk add redis`和`rc-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环境了。当然这些都是预演,这篇文章也是为了接下来在服务器上配置做准备。 + 除此之外还有把php-fpm和redis配置成监听Unix Domain之类的优化操作,这些之前的文章都有写,这里就不多做描述了。 +## 配置BBR + 之前用CentOS的时候我是直接用的脚本整的BBR,不过BBR好像是高版本Linux内核自带的功能,本来就不需要安装,Alpine的内核版本好像是5.15,就不用像CentOS那样还要升级内核了,所以只要执行以下命令: +```bash +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的内存,被系统占掉那么多它到底干了些啥?目前我没有发现任何坑,到时候迁移完再看吧,总之现在的我只能说,小就是好!