很多个人开发者和中小团队都会用到虚拟服务器,部署博客、跑测试环境、搭一个内部文件共享,第一步通常都是设置它。前期花半小时把基础项做好,后面能省下很多排查的时间。反过来,图快跳过设置,等出了问题再回头补,往往更费事。

这篇文章按顺序讲一遍:先选型,再做初始化,然后加固安全、配置网络,最后补上备份和监控。每一步都会说明为什么要做,以及新手容易踩的坑。
先想清楚服务器要干什么
选规格之前,先写下服务器的用途。同样是虚拟服务器,跑一个静态站点和跑数据库,对CPU、内存、带宽、磁盘的要求差得很远。规格选小了,服务会卡;选大了,钱白花。
可以按下面几个维度判断:
- 用途:Web服务、数据库、开发测试、定时任务,各自吃的资源不一样。比如数据库更吃内存和磁盘IO,Web服务更看带宽和并发数。
- 访问量:预估一下日常和高峰的并发数。如果只是内部使用,几十人的内部流量和公网站点差别很大。
- 数据敏感度:存的是用户资料或订单时,备份和隔离要排在前面,不能只看价格。
- 计费方式:流量波动大的业务可以按量计费,方便随时调整;长期稳定运行的服务,包年包月通常更划算。
举个例子。一个小型电商团队最开始用一台2核2G的虚拟服务器,网站、数据库和后台管理系统全部放在上面。促销期间访问量一涨,数据库很快把内存占满,网站响应从几百毫秒拖到了好几秒。后来他们把数据库拆到独立实例,并按业务高峰重新定了规格,问题才算解决。如果一开始就把服务拆开规划,这次折腾其实可以避免。
开通后先做初始化
服务器刚开通时,系统镜像往往不是最新版本,有些软件包可能存在已知漏洞。初始化就是把这些基础问题先处理掉,让后面的操作有一个干净的起点。
更新系统和软件包
以Ubuntu为例,先更新软件源索引,再升级已安装的软件包。时区和时间同步也要顺手设好,NTP服务开着,日志时间才准,排查问题时能对上。日志时间一旦错乱,多台机器之间的事件就很难串起来看。
创建普通用户,禁止root远程登录
长期直接用root操作风险很高,一次误敲命令的代价会很大。建议新建一个带sudo权限的普通用户,日常管理都用它登录,需要高权限时再用sudo提升。SSH配置里也要关掉root远程登录,这样别人即使猜到了密码,也拿不到最高权限的入口。
设置主机名和hosts
主机名起得规范,多台服务器就不会混在一起。比如用“用途-环境-序号”的格式,web-prod-01、db-test-01这种,团队协作时更不容易在错误的机器上执行命令。hosts文件也要检查一下,确保本机主机名能正确解析。
安全加固:默认配置不够用
虚拟服务器暴露在公网上,每天都会被扫描端口、尝试暴力破解。这种情况很常见,所以安全加固应该放进设置流程里,属于必做项,而不是有空再弄的优化。
用密钥登录,关掉密码登录
在本地生成SSH密钥对,把公钥写入服务器的authorized_keys文件,再在sshd_config里关闭密码登录。修改SSH配置时有一个常见的坑:如果配置写错,又把当前会话断开,就会把自己锁在服务器外面。正确的做法是保留一个已登录的会话不关,新开一个窗口测试能否正常登录,确认没问题再关闭旧会话。
配置防火墙,默认拒绝
防火墙的原则是默认拒绝,只放行业务真正需要的端口。一台普通Web服务器通常只需要开放SSH端口、80和443。ufw或firewalld都可以做到。注意SSH端口如果改成了非默认值,要先在防火墙里放行新端口,再修改sshd配置,否则很容易把自己挡在外面。
安装fail2ban
fail2ban会监控登录日志,发现某个IP多次登录失败,就自动把它封禁一段时间。它不能替代密钥登录,但能明显减少无效的暴力破解尝试,日志也会清爽很多。
关闭不需要的服务
用命令查看当前监听的端口,逐个确认用途。装系统时默认带上的服务、测试时临时开的服务,很多用完就忘了。每个开着的服务都是一个潜在入口,不用的就停掉。
网络和运行环境
网络配置是新手最容易卡住的地方。域名打不开、端口不通、服务明明启动了却访问不了,大多数问题都出在这几处。
- 域名解析:在域名服务商处添加A记录,指向服务器的公网IP。解析生效需要一点时间,改完先别急着判断是服务器的问题。
- 服务监听地址:确认应用绑定的是0.0.0.0或公网接口。如果只监听了127.0.0.1,本机访问正常,外部却怎么都连不上。
- 反向代理:用Nginx作为统一入口,负责HTTPS、静态资源和多个应用的转发。这样每个应用不用各自处理证书和端口。
- SSL证书:Let’s Encrypt可以免费申请证书,记得配置自动续期。证书过期导致站点打不开的情况很常见,设一次自动续期能省去很多麻烦。
还是前面那个电商团队。他们把数据库迁到独立实例后,应用连接一直失败。排查下来,数据库只监听了本地地址,而云平台的安全组也没有放行内网端口。改好监听地址,再把应用所在的内网段加进白名单,连接才恢复。这件事说明,服务本身配置正确不代表能用,网络层的设置要和服务一起检查。
备份和监控:出了问题能恢复,能提前看到
备份要定期、异地、能恢复
备份只存一份文件远远不够。数据库可以用定时导出脚本,配合cron每天执行,并把备份文件同步到另一个存储位置,别和服务器放在同一块磁盘上。更关键的是定期做一次恢复演练。很多团队是在真正出事时才发现备份文件损坏或格式不对,那时就晚了。
关注资源和服务状态
重点看CPU、内存、磁盘使用率,以及关键服务是否还活着。磁盘写满是很多线上故障的直接原因,日志不轮转、临时文件不清理,都会慢慢把磁盘吃满。可以设置磁盘使用超过80%就告警,留出处理的时间。轻量级的监控工具就能满足小规模需求,不必一开始就上复杂的系统。
日常维护,几个值得养成的习惯
- 每周翻一下系统日志,重点看异常登录和报错,发现陌生IP反复尝试登录要及时处理。
- 修改配置前先备份原文件,并记下改了什么、为什么改。出问题时,这份记录比记忆可靠。
- 系统和关键软件要定期更新,但更新前最好先在测试环境跑一遍,避免新版本的兼容问题直接影响线上。
- 给服务器和服务写一份简单的运维文档,写清楚用途、账号归属、端口和备份位置。换人接手时,这份文档能省去很多口头交接。
如果你是第一次设置虚拟服务器,建议先在测试机上把上面的流程完整走一遍,尤其是SSH登录和防火墙那部分。熟悉以后,再把同样的步骤用到正式环境里,出错的概率会小很多。