从一次凌晨两点还在折腾配置文件的经历说起吧。
当时一个同事要在一台全新的服务器上部署项目,系统装好了,但连最基本的数据库都没法连上。折腾半天,发现问题出在系统自带的软件源版本太老,MySQL装了个老版本,导致整个项目的SQL语法兼容性直接崩了。后来我们换了一台预装lianwuos的机器,半小时就把整套环境跑起来了。
lianwuos这套系统,本质上是一个做了大量预配置和裁剪的定制化Linux服务器环境。它解决的问题很直接:让开发者拿到一台机器后,不用再把时间浪费在"装系统、配源、装环境、调参数"这些重复劳动上。它适合自建服务器跑项目的后端开发者、运维人员,也适合刚入行、想省去环境折腾时间的新手。
但"预配置"不等于"零配置"。系统镜像里的默认参数、预装软件的版本、仓库源的地址,都需要按实际业务场景重新调整。这篇文章就基于我实际部署和二次配置lianwuos的经验,把整套配置链路——从网络、仓库源,到数据库、运行时、中间件,再到最后的自检验证——完整拆开讲一遍。里面有些坑是我反复踩过的,配置完不验证,后面上线就是大事故。
1. 先搞清楚这套系统是什么定位:不是省心,是省时间
1.1 从镜像默认布局反推设计思路
我第一次拿到lianwuos的安装镜像时,第一反应是去看它的分区方案和预装软件。这个习惯很关键,因为一个定制系统的设计思路,从默认布局里就能看出来。
lianwuos默认把/opt单独分区,预留空间占整个磁盘的40%左右。这个设计和很多通用发行版不一样。通用发行版通常只分/和swap,/opt就是一个普通目录。lianwuos这么做,意图很明显:它把第三方软件、中间件、应用部署目录都约定在/opt下,单独分区是为了避免应用日志把根分区写满。
它预装的软件列表也很有意思。默认预装了Git、Nginx、MySQL(注意是8.0版本)、Node.js 18 LTS、OpenJDK 11,但没装Python 3以外的语言运行时,也没装Docker。这个组合说明:lianwuos的定位是单机Web服务部署,不是容器编排平台,也不是桌面系统。它把最常用的Web开发基础设施打好包,但把容器化这类更灵活的能力留给用户自己决定装不装。
提示:拿到的镜像版本不同,预装软件也会不一样。先执行
cat /etc/lianwuos-release查看版本号。这个文件类似其他发行版的os-release,记录了系统版本和构建时间,后面的所有配置都要以此为基础。
1.2 为什么我建议别一上来就重装系统
很多人拿到新系统,第一件事是rm -rf重来,把预装软件全卸载,然后按自己习惯重新装一遍。在lianwuos上这么做,等于把它的核心价值扔掉了。
lianwuos的预装软件安装路径和配置目录是统一规划的。举个例子,它预装的Nginx,配置目录在/etc/nginx,但站点配置文件约定放在/etc/nginx/conf.d/下,主配置文件里已经写好了include指令。你只需要往conf.d里丢你自己的站点配置,不需要去动主配置文件。重新编译安装Nginx反而会破坏这个约定,后续升级、备份都变得麻烦。
正确做法是:先摸清它的预制约定,再在这个骨架上做加法。 预算装好的软件不要卸,直接在它的管理工具上升级版本。lianwuos自带一个叫lw-pkg的包管理命令行工具,用法类似apt和yum的混合体,升级预装软件就一条命令:lw-pkg update && lw-pkg upgrade。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 网络层配置是第一道关:IP、路由、DNS一个都不能错
2.1 静态IP配置中的网卡命名坑
lianwuos用的是systemd-networkd管理网络,配置文件在/etc/systemd/network/目录下。但它有一个比较特殊的地方:默认情况下,网卡命名遵循的是"接口名即硬件拓扑"规则,也就是你这个网卡插在哪个PCIe插槽,名字就是enp开头加一串数字。
这个设计在笔记本上很合理,但在服务器上很坑。服务器经常要换网卡或者调整PCIe设备顺序,一换,网卡名就可能从enp3s0变成enp4s0,原来写的静态IP配置就全部失配了。
我在一台机器上就踩过这个坑。原来配置文件写的[Match] Name=enp3s0,后来插了一个PCIe转接卡,网卡名变成了enp5s0,机器重启后直接失联。最后只能通过IPMI的远程控制台进去改配置。
解决办法有两个:
- 第一个,在系统启动参数里加
net.ifnames=0,让内核使用eth0、eth1这种传统命名。这个方式最省事,只需要修改/etc/default/grub里的GRUB_CMDLINE_LINUX,然后执行update-grub。 - 第二个,保留默认命名,在
systemd-networkd的配置文件里用MAC地址来匹配网卡:
ini复制[Match]
MACAddress=52:54:00:12:34:56
[Network]
Address=192.168.10.20/24
Gateway=192.168.10.1
DNS=223.5.5.5
DNS=119.29.29.29
用MAC地址匹配,不管网卡名怎么变,只要硬件没换,配置就不会失效。服务器上我建议优先用这种方式。
2.2 双网卡场景下最容易忽略的路由优先级
lianwuos在双网卡场景下的坑,集中在路由表上。
很多服务器有两块网卡,一块连内网,一块连外网。默认情况下,systemd-networkd会给每个网卡都生成一条默认路由。问题是,如果两条默认路由的metric值相同,系统会随机选择其中一条,可能导致内网流量走了外网口,被网关丢弃。
我在配置一台双网卡服务器时就遇到过:内网192.168.10.0/24通过eth0接入,外网通过eth1接入。结果内网访问时断时续,ping网关偶尔通偶尔不通,最后抓包才发现流量走了eth1。
正确的配置是在内网网卡的配置里明确指定路由metric,让内网路由优先:
ini复制# /etc/s
