Automation / 03
我如何整理一台新服务器的初始化步骤
目标不是一条命令装完所有东西,而是让每次变更都可以重复、审阅与回滚。
新机器到手后,我过去会打开旧笔记,逐条复制命令。几个月后,笔记里总会混入只执行过一次的修补,最终谁也说不清一台“标准服务器”应该是什么样。
把工作分成三层
- 基础层:时区、主机名、用户、SSH、公钥和系统更新;
- 安全层:最小开放端口、登录策略、自动更新和审计;
- 服务层:容器运行时、反向代理、监控与具体应用。
分层以后,基础配置可以在所有机器复用,服务差异则留在各自的小文件里。更重要的是,修改防火墙和修改应用不再混在同一次执行中。
先写检查,再写修改
每一步都尽量满足幂等:重复执行不会不断追加配置,也不会改变已经正确的状态。一个很小的例子是创建部署目录:
install -d -m 0750 -o deploy -g deploy /srv/apps
grep -qxF 'deploy ALL=(ALL) NOPASSWD:/usr/bin/systemctl' \
/etc/sudoers.d/deploy || exit 1真正的配置工具可以是 Ansible,也可以是一组朴素脚本。重要的是执行前能看到差异,执行后能验证结果。
不要过早关闭当前入口
调整 SSH 端口、密钥或防火墙时,保留当前会话,并用第二个终端验证新连接。只有确认新入口可用后,再收紧旧规则。这条简单习惯避免过不少远程锁死。
用验收清单结束
自动化执行完不代表初始化完成。我会检查:非 root 用户能否登录、时间是否同步、重启后服务是否自启、磁盘告警是否可达、开放端口是否与清单一致,以及恢复入口是否可用。
最后把系统版本、变更提交和执行日期写入一份机器记录。这样半年后重建时,面对的是可以解释的状态,而不是一段考古现场。