|
|
|
@ -0,0 +1,54 @@
|
|
|
|
|
---
|
|
|
|
|
layout: post
|
|
|
|
|
title: Alpine的使用体验
|
|
|
|
|
tags: [Termux, Android]
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
没别的,小就是好!<!--more-->
|
|
|
|
|
|
|
|
|
|
# 起因
|
|
|
|
|
最近一段时间,我开始学习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的内存,被系统占掉那么多它到底干了些啥?目前我没有发现任何坑,到时候迁移完再看吧,总之现在的我只能说,小就是好!
|