安装 Alpine Linux,从入门到入门
如果平时用 Docker 的话,那么大家应该不会对 alpine 感到陌生。在许多镜像中,都能看到 alpine 的身影,就比如 nginx:1.15-alpine、node:22.10.0-alpine3.20 之类的。这些常见的应用均不约而同地选择使用 alpine 作为基础镜像,是因为 alpine 的体积比许多其他的 Linux 发行版小很多,所以在很多场景下,使用 alpine 进行构建,相比 ubuntu 等可以减少镜像体积,在部署时可以有效节省带宽,减少镜像拉取时间以提升部署速度。
但是很多人可能和我一样,尽管可能会经常直接或间接的通过 docker 使用过 alpine,但好像从来没有直接的安装过 alpine 的系统。那么今天我们就来一起学习一下 alpine 的安装过程。
相比 CentOS、Ubuntu 的大而全,Alpine Linux 只包含基本的系统工具和 C 库,虽然不适合作为满血版的服务器托管大型应用,但对于一些特定场景,也许更小的资源占用和更快的运行速度,才是你想要的。就比如我希望搭建一个三节点的 haproxy + keepalived 高可用集群,那么使用 alpine 可以节省不少成本。
准备工作
截至发稿,Alpine Linux 的最新版本是 3.21.2 (Released Jan 08, 2025)。我家里的机柜是由 DELL R420 + DELL R630 + DELL R730 三台洋垃圾组成的,我用它们组建了一个 PVE 集群,根据我的需求,我在每台物理机上分别创建一个节点即可。
由于 Alpine Linux 的资源占用极低,每个节点我只分配了 1C0.5G 的资源,配上一个 8G 的磁盘作为第一引导项,再将从官网上下载到的 alpine-standard-3.21.2-x86_64.iso 配置到 CD/DVD 驱动器后,便可以启动了。

开始安装
根据提示,使用 setup-alpine 就可以进行安装了。
在选择键盘布局时,输入两次 cn 并敲回车(Enter)。

有必要的话,可以修改主机名(HostName),例如我在安装时就改成了k3s-lb-03,代表这个节点是 k3s 集群中,负载均衡的 3 号节点。如果不需要修改,直接敲回车即可,默认值是 localhost。
*关于改主机名,事后发现截图时还未做修改,为防产生歧义,特此说明
接着便是比较重要的网络设置环节。
由于我事先在 L3交换机 中绑定了这个节点的 MAC 地址到特定 IP,所以这里我直接选择对 eth0 网卡的网络获取方式设置为 dhcp,并不进行额外的手动配置 n。(均为默认值),然后敲回车进行下一步。

请注意,如果你有不一样的配置,请自行根据需要修改,尤其是 IP 和 DNS 地址。
通常来说,DHCP 的方式是最方便的,如果你有固定 IP 的需求,又无法自动获取,就可以选择手动配置了。
配置完网络,请自行根据需要输入密码。这里的密码指的是 root 用户的密码。
然后便是选择时区,我输入的是 Asia/Shanghai,也就是东八区。默认不修改的话,则是 UTC 时间。
设置完时区后,它还会让你设置代理。通常情况下我们不需要代理,除非你需要,否则直接敲回车即可(none)。
代理设置后的下一步对大陆用户来说有些重要,因为 Alpine Linux 的默认源是在海外的,下载速度比较慢。你很可能需要将源地址切换为阿里云或清华这样的大陆源。这样才能加速你下载软件包的速度。
具体数值可以参考我的截图,我选择的是阿里云的源,在当前版本中的序号为 49。

之后还有一个可选项是设置用户,但对于初次安装来说,这往往并不是必要的。对很多公司运维来说,他们往往会在安装完成后,再手动通过脚本方式批量添加用。所以这一步我们仍然可以直接按回车默认跳过。
到最后,我们便可以选择将 Alpine Linux 安装到磁盘了。
请注意!很多朋友可能习惯按回车下一步下一步之后,到这里默认没有选择硬盘(none)就结束了。
其实真的不小心犯了这个错也没事,重新输入 setup-alpine 之后,它会提示你重新安装,然后你再重新选择硬盘即可。
考虑到大多情况在安装阶段只需要使用到一块硬盘,所以这里我直接手动输入 sda,然后敲回车,并手动输入让这块硬盘用来安装系统(sys),最后再允许它擦除这个磁盘的全部数据(y)。

再次点击回车后,它便会开始安装了。
安装完成后,它会提示你输入 reboot 重启。不要问,照做就好。
恭喜你,你已经成功安装了 Alpine Linux 系统了。

附加内容
如果只是希望安装 Alpine Linux 系统,那么到这里就结束了。
但很多时候,对于 Linux 服务器来说,我们往往还需要使用 SSH 登录,而对于企业来说,很多时候更是通过脚本来一键添加用户、安装必要的软件、配置防火墙等。
所以,我再分享一个配置脚本,可以通过证书登陆到服务器(其实与 CentOS 几乎类似)。
假设你已经在自己常用的机器上,或堡垒机上等事先创建了专门用来远程登陆的密钥。那么你便可以将公钥内容复制到下述脚本中,并拷贝到 Alpine Linux 上,并执行即可。
#!/bin/sh
# 安装 SSH
apk add --no-cache openssh
# 配置 SSH
sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config
sed -i "s/#Port.*/Port 22/g" /etc/ssh/sshd_config
# 推荐:禁用密码登录,只允许密钥登录
sed -i "s/#PasswordAuthentication.*/PasswordAuthentication no/g" /etc/ssh/sshd_config
sed -i "s/#PubkeyAuthentication.*/PubkeyAuthentication yes/g" /etc/ssh/sshd_config
# 生成主机密钥
ssh-keygen -A
# 配置密钥登录
echo 'Configure authorized_keys'
mkdir -p /root/.ssh/
touch /root/.ssh/authorized_keys
# 在这里添加自己的公钥,下一行从 ssh-ed25519 一直到 _Qx9 的内容,都是需要替换的公钥内容。
echo "ssh-ed25519 AAAAC3__HIDDEN_CONTENT_Qx9" >> /root/.ssh/authorized_keys
chmod 700 /root/.ssh/
chmod 600 /root/.ssh/authorized_keys
# 添加到开机自启
rc-update add sshd default
# 启动 SSH 服务
rc-service sshd start
# 检查状态
rc-status sshd
# 重启
reboot
待服务器重启结束后,回到你的本机,或你所在的虚拟机,使用如下命令即可远程登陆成功。
ssh -i ~/.ssh/id_rsa root@172.16.17.32
# ~/.ssh/id_rsa 是你的私钥,需要替换成与公钥配对的文件。
# 172.16.17.32 是你的 Alpine 服务器 IP,需要替换成你自己的。
全文完
Alpine Linux 官网地址:https://alpinelinux.org/

