整机内存 50 MB 起步、apk 包管理简洁、OpenRC 服务模型干净。本文整理 VPS 拿到手后的全套初始化步骤。
Alpine Linux 基于 musl libc + BusyBox + OpenRC,整机内存通常 50~100 MB,是跑博客、反代、DNS 的理想系统。初始化六步:① sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 换国内源;② apk add chrony + rc-update add chronyd 做时间同步;③ apk add nginx php83-fpm php83-mysqli php83-gd php83-mbstring php83-tokenizer php83-curl 装 Web 环境;④ rc-update add nginx default / rc-update add php83-fpm default 开机自启(不是 systemctl);⑤ 云控制台安全组放行 22/80/443;⑥ 部署 Typecho 时如果 500,先查 Nginx 错误日志,大概率是缺 php83-tokenizer 或 php83-mbstring。
小、快、干净,但要接受 musl 的兼容性代价
官方容器镜像只有约 5 MB,整机安装后磁盘占用不到 200 MB。云服务器上省下来的磁盘和内存都是真金白银。
空载内存通常 50~100 MB,对比 Ubuntu Server 的 300~500 MB 是数量级差距。1 核 1 G 的小鸡跑 Nginx + PHP-FPM 毫无压力。
不使用 systemd,服务脚本在 /etc/init.d/,自启用 rc-update add xxx default,查看用 rc-status,逻辑直白。
musl libc 与 glibc 行为差异,少数闭源二进制(如某些专有数据库客户端)不能直接跑,需要 static build 或重编译。
新 VPS 拿到手按顺序跑一遍
/etc/apk/repositoriesdl-cdn.alpinelinux.org 换成 mirrors.aliyun.com 或 mirrors.tuna.tsinghua.edu.cnapk update 生效cat /etc/alpine-release 确认apk add chronyrc-update add chronyd default/etc/init.d/chronyd startchronyc tracking,看 System time 是否接近 0apk add nginxapk add php83-fpm php83-mysqli php83-gd php83-mbstring php83-tokenizer php83-curl php83-session php83-json127.0.0.1:9000,socket 在 /run/php83-fpm.sockrc-update add nginx defaultrc-update add php83-fpm default/etc/init.d/nginx start、/etc/init.d/php83-fpm startrc-statusapk add iptables 或 ufw/var/www/typecho安全组一次配好,少走很多弯路
| 端口 | 用途 | 是否公网放行 | 备注 |
|---|---|---|---|
22 | SSH | 建议放行(可改端口) | 生产环境建议密钥登录、禁 root 密码 |
80 | HTTP | 放行 | 用来签 Let's Encrypt 证书 + 跳转 HTTPS |
443 | HTTPS | 放行 | 网站主入口 |
3306 | MySQL/MariaDB | 禁止 | 只监听 127.0.0.1,公网暴露会被扫 |
6379 | Redis | 禁止 | 历史上大量未授权访问案例 |
9000 | PHP-FPM | 禁止 | 只监听 127.0.0.1 或 unix socket |
853/53 | DoT/DoH(自建 DNS) | 按需放行 | 仅当你对外提供加密 DNS 服务时 |
23-4.cn 自己踩过的几个
Typecho 后台或文章页直接 500,看 Nginx 日志没细节。原因是 Alpine 的 PHP 拆包,php83-tokenizer 没装。修复:apk add php83-tokenizer 然后 /etc/init.d/php83-fpm restart。
中文标题、UTF-8 字符串处理报错。apk add php83-mbstring 后重启 PHP-FPM。Alpine 不会像 Debian 那样自动装依赖扩展。
Alpine 用 OpenRC 不是 systemd。systemctl start nginx 会提示 command not found。正确命令是 /etc/init.d/nginx start 或 rc-service nginx start。
Nginx 报 "connect() to unix:/run/php/php83-fpm.sock failed"。Alpine 的 socket 路径默认在 /run/php83-fpm.sock,Nginx 配置里要写对。可在 /etc/php83/php-fpm.d/www.conf 改 listen。
/etc/apk/repositories,常用命令 apk add / apk update / apk upgrade。换源就是把该文件里的 dl-cdn.alpinelinux.org 改成 mirrors.aliyun.com 或 mirrors.tuna.tsinghua.edu.cn。rc-update add <服务> default,查看状态用 rc-status。例如 rc-update add nginx default、rc-update add php83-fpm default。php-tokenizer / php-mbstring / php-curl 等扩展。Alpine 的 PHP 拆成了独立包,需要 apk add php83-tokenizer php83-mbstring php83-curl,然后 /etc/init.d/php83-fpm restart。