云服务器这件事,我踩过的坑比大多数人走过的路都多。早些年自掏腰包买过好几家海外小厂的低价机器,结果不是三天两头宕机,就是账单莫名其妙翻倍。后来学乖了,开始认真研究各家云厂商的免费额度,其中亚马逊云(AWS)的免费套餐是我目前用得最顺手、也最愿意推荐给新手的一套方案。这篇内容就围绕“如何利用亚马逊云免费搭建服务器”这个主题,把我从注册、选型、配置到避坑的完整经验摊开来讲,适合完全没有云服务器经验的小白,也适合用过其他平台想迁移过来的朋友参考。
先把这个事情说清楚:亚马逊云的免费套餐(Free Tier)并不是“永久免费随便用”,它是一套有明确额度限制的试用机制,分为“12个月免费”“永久免费”和“短期试用”三类。你要做的,是在这些额度内把一台能跑起来的服务器搭好,并且不产生意外扣费。听起来简单,但实际操作中因为选错实例类型、忘记设置账单告警、流量超限等原因被扣钱的案例比比皆是。我身边就有朋友第一个月就收到几十美元的账单,原因只是他选了一个不在免费范围内的实例规格。所以这篇内容不只是教你“点哪里”,更要把每个选择背后的逻辑讲透,让你知道为什么这么选、不这么选会怎样。
1. 免费套餐的真实边界与选型逻辑
1.1 免费额度到底包含什么
很多人对亚马逊云免费套餐的理解停留在“送我一台服务器”,这个认知偏差是后续踩坑的根源。实际上免费套餐是一个组合包,和搭建服务器直接相关的核心项主要有这么几个:每月750小时的EC2 t2.micro或t3.micro实例使用时长(Linux系统),30GB的EBS弹性块存储,每月100GB的数据传输流出额度,以及一个免费的弹性IP(前提是绑定在运行中的实例上)。这几个数字看着不起眼,但组合起来足够跑一个个人博客、一个小型API服务或者一个学习用的开发环境。
这里有个关键点必须讲清楚:750小时是怎么算的。一个月按平均30天算是720小时,750小时意味着你可以让一台实例整月不间断运行,还略有富余。但如果你开了两台t2.micro,每台跑375小时,加起来也是750小时,同样在免费范围内。这个机制的设计意图是让你灵活分配,而不是限制你只能开一台。我个人的用法是主力开发机长期跑一台,偶尔需要测试新环境时临时再开一台,用完就关,这样额度始终够用。
存储方面,30GB的EBS是“通用型SSD gp2或gp3”的额度,默认创建实例时如果选了更大的磁盘或者更高级的存储类型,超出部分就会按量计费。我见过有人创建实例时随手把磁盘拉到100GB,结果月底账单出来傻眼。所以创建实例那一步,磁盘大小一定要手动确认,默认的8GB其实就够跑一个轻量服务了,需要更多空间再按需调整。
流量这块是最容易被忽视的。每月100GB的流出流量对个人项目来说通常够用,但如果你在上面跑视频、做大文件下载,或者被爬虫盯上,流量会飞快消耗。更要注意的是,流入流量一般不计费,流出才计费,而且免费额度是全球各区域合并计算的。我建议在搭建初期就把CloudWatch的流量监控打开,心里有个数。
1.2 为什么推荐t3.micro而不是t2.micro
免费套餐里同时包含t2.micro和t3.micro,很多人随手选了t2,因为它在列表里排得更靠前。但我实测下来更推荐t3.micro,原因在于两者的底层架构差异。t2属于上一代突发性能实例,它的CPU积分机制比较“死板”:基准性能较低,靠积累积分来应对突发负载,积分耗尽后性能会被硬性限制。t3同样是突发性能实例,但采用了更新的处理器架构,基准性能更高,积分机制也更灵活,而且支持“无限制模式”(不过这个模式超出免费额度会产生费用,新手别开)。
打个比方,t2.micro像一辆油箱很小的车,平时慢慢开攒油,需要加速时把油一次性用掉,用完就只能龟速爬行;t3.micro则是油箱稍大、发动机更高效的车,日常驾驶更从容。对于跑博客、小型API这类负载波动不大的场景,t3的体验明显更稳。我早期用t2跑一个静态站点加轻量后端,访问量一上来就明显卡顿,换成t3之后同样的负载下响应稳定得多。
不过要注意,t3.micro的免费额度同样是每月750小时,且仅限Linux系统。如果你打算装Windows,免费额度是不覆盖的,这一点务必记牢。另外,选择实例时区域也很关键,不同区域的免费额度和可用实例类型可能略有差异,我一般选离目标用户近的区域,同时确认该区域支持t3.micro的免费套餐。
1.3 操作系统与区域的选择考量
操作系统方面,免费额度覆盖的是主流Linux发行版,比如Amazon Linux、Ubuntu、Debian等。我的建议是新手直接用Ubuntu Server的LTS版本,原因有三:社区资料最丰富,遇到问题搜索一下基本都有现成答案;软件包管理成熟,apt用起来顺手;长期支持版本更新周期长,不用频繁折腾系统升级。Amazon Linux虽然和平台集成更好,但相关资料相对少一些,新手排查问题时容易卡壳。
区域选择上,原则是“离用户近、离自己近”。离用户近是为了降低访问延迟,离自己近是为了管理方便(比如你在国内,选亚太区域延迟会低一些)。但要注意,不同区域的免费套餐覆盖情况需要逐个确认,有些新开放的区域可能不包含全部免费项。我通常会在创建资源前,先到免费套餐页面核对目标区域的支持情况,这一步花不了两分钟,但能避免后续的意外扣费。
还有个小细节:创建实例时系统会问你要不要分配公网IP。免费套餐下,实例运行期间分配的公网IP不额外收费,但如果实例停止后IP没有释放,或者你单独申请了弹性IP却没绑定到运行中的实例,就会产生费用。这个规则我后面会专门讲,这里先记住一个原则:不用的时候把实例停掉,弹性IP要么绑定运行中的实例,要么释放掉。
2. 从注册到登录的完整实操路径
2.1 注册前的准备工作
注册亚马逊云账号之前,有几样东西得先备好,不然中途卡住很浪费时间。第一是一个能正常接收短信和电话的手机号,验证环节会用到;第二是一张支持国际支付的信用卡或借记卡,注册时会做一笔小额的预授权验证(通常是1美元左右,验证后会退回),这是平台确认你身份的方式;第三是一个常用的邮箱,后续所有账单通知、告警都会发到这里。
这里有个实操心得:注册时填写的姓名、地址等信息要尽量真实且一致,因为后续如果触发风控审核,信息不一致会导致账号被暂时限制。我见过有人随便填了个地址,结果账号被要求补充验证材料,折腾了好几天。另外,一个手机号和一张卡尽量不要关联太多账号,平台对多账号有风控策略,普通用户没必要去碰这个边界。
注册过程中会让你选择支持计划,默认是“基础支持”(免费),这个就够了,不要手滑选成付费的开发者支持或商业支持,那些是按月收费的。基础支持虽然响应慢,但对个人学习和小项目完全够用,遇到问题先查文档和社区,实在不行再提工单。
2.2 注册流程中的关键节点
整个注册流程大概分这么几步:填写邮箱和密码创建账号、验证邮箱、填写联系人信息、添加支付方式、手机验证、选择支持计划、完成注册。每一步界面都有引导,照着填就行,但有几个节点值得多说两句。
手机验证这一步,系统会给你打电话或者发短信,要求输入屏幕上显示的验证码。有时候电话打过来是自动语音,别挂断,听完提示输入数字即可。如果一次没收到,等一两分钟再试,频繁请求可能触发临时限制。我遇到过验证码短信延迟的情况,耐心等一会儿基本都能收到。
添加支付方式时,那笔预授权验证是正常流程,不是扣费。有些银行会对国际交易做拦截,如果验证失败,先联系银行确认是否放行了这笔交易。我建议用支持国际支付的信用卡,借记卡有时候会因为银行策略问题验证不通过。
选择支持计划这一步,务必确认选的是免费的基础支持。界面上付费计划会标出价格,看清楚再点。完成注册后,你会进入控制台,这时候先别急着创建资源,花十分钟做一件更重要的事:设置账单告警。
2.3 注册后第一件事:设置账单告警
这一步是我反复强调的重点,因为它是防止意外扣费的最后一道防线。进入控制台的账单(Billing)页面,找到“预算”(Budgets)功能,创建一个月度成本预算,金额设成比如1美元或5美元,当实际或预测费用超过这个阈值时,系统会给你发邮件告警。这样即使你不小心开了收费资源,也能第一时间知道并处理。
除了预算告警,还可以在CloudWatch里设置账单 alarm,不过预算功能对新手更友好,界面直观,配置简单。我的习惯是预算设一个很低的阈值(比如1美元),这样任何非零费用都会触发通知,相当于给自己装了个“费用烟雾报警器”。别嫌它烦,真出问题时这几封邮件能帮你省下真金白银。
设置完告警,再顺手确认一下账号的根用户(root)安全设置。根用户是账号的最高权限,日常操作不建议直接用根用户,应该创建一个IAM用户并赋予必要权限,然后给根用户开启多因素认证(MFA)。这个习惯从第一天就养成,后面会省很多心。IAM的配置稍微复杂一点,新手可以先给根用户开MFA,IAM用户的事等熟悉了再弄。
3. 创建并配置一台免费服务器
3.1 启动实例时的参数选择
进入EC2控制台,点“启动实例”,接下来是一系列参数选择,每一步都关系到是否在免费额度内。第一项是名称,随便起个有意义的名字,比如“my-first-server”,方便后续识别。第二项是操作系统镜像(AMI),选Ubuntu Server的LTS版本,注意看清楚是64位x86架构,别选成ARM架构的,因为免费额度覆盖的实例类型和架构有关。
第三项是实例类型,这里务必选t3.micro(或t2.micro),界面上会标注“免费套餐符合条件”的字样,认准这个标识。如果列表里没看到,检查一下区域是否支持,或者筛选条件是否把免费项过滤掉了。选错实例类型是新手最常见的扣费原因,一定要在这一步停三秒确认。
第四项是密钥对(Key Pair)。这是你登录服务器的唯一凭证,创建时系统会让你下载一个.pem文件,这个文件务必妥善保存,丢了就只能重新创建密钥对并重建实例。我建议下载后立刻备份到两个不同的地方,比如本地硬盘和加密的云笔记。密钥文件的权限也要注意,Linux和macOS下需要执行chmod 400把权限设为仅自己可读,否则SSH连接会报权限错误。
第五项是网络设置。默认会创建一个安全组,安全组相当于服务器的防火墙,控制哪些端口对外开放。新手最容易犯的错是把所有端口都放开,这非常危险。正确的做法是只开放必要的端口:SSH的22端口(最好限制来源IP为自己的地址)、HTTP的80端口、HTTPS的443端口。其他端口一律不开,需要时再按需添加。
第六项是存储配置。默认可能是8GB的gp3或gp2,确认在30GB免费额度内即可。如果默认值超过30GB,手动改小。我一般保持默认的8GB,跑轻量服务足够了,需要更多空间时再扩容(扩容超出部分会计费,注意)。
3.2 安全组的正确配置方式
安全组这块值得单独展开讲,因为它是服务器安全的第一道门,配错了后患无穷。安全组的规则分入站和出站两类,入站控制谁能访问你的服务器,出站控制你的服务器能访问谁。默认的出站规则通常是允许所有流量,这个一般不用改;入站规则则需要你精心配置。
以一台跑Web服务的服务器为例,入站规则至少要有这么几条:SSH(22端口),来源设为自己的公网IP(而不是0.0.0.0/0),这样只有你能SSH登录;HTTP(80端口),来源可以是0.0.0.0/0,因为网站要对所有人开放;HTTPS(443端口),同样对所有人开放。如果你暂时不跑Web服务,只开SSH就够了,等需要时再加规则。
这里有个实操技巧:查自己的公网IP很简单,在搜索引擎里搜“我的IP”就能看到。把SSH来源限制为这个IP,安全性提升一大截。但要注意,如果你用的是动态IP(比如家用宽带),IP可能会变,变了之后SSH就连不上了,这时候需要回到控制台修改安全组规则,把新IP加进去。我自己的做法是给SSH来源留一个较小的IP段,或者干脆用会话管理器(Session Manager)替代SSH,不过后者配置稍复杂,新手可以先从限制IP做起。
还有一点:安全组规则是“允许”列表,没有“拒绝”规则,也就是说默认拒绝所有未明确允许的流量。这个模型理解清楚,配置时就不会迷糊。修改安全组规则是即时生效的,不需要重启实例,这点很方便。
3.3 首次SSH登录与基础环境检查
实例启动后,在控制台看到状态变成“运行中”,并且有公网IP地址,就可以尝试SSH登录了。Linux和macOS用户直接用终端,命令格式是ssh -i 密钥文件路径 用户名@公网IP。Ubuntu系统的默认用户名是ubuntu,Amazon Linux是ec2-user,别搞混了。Windows用户可以用PowerShell自带的SSH客户端,或者用PuTTY这类工具。
第一次连接时,终端会提示你确认主机的指纹,输入yes继续。如果报“Permission denied”或者“密钥权限过宽”,多半是密钥文件权限没设对,执行chmod 400 密钥文件再试。如果报连接超时,检查安全组的22端口是否对你的IP开放,以及实例是否真的有公网IP。
登录成功后,先做几件基础检查:用uname -a看系统信息,确认架构和版本;用df -h看磁盘使用情况,确认挂载的磁盘大小符合预期;用free -h看内存,t3.micro通常有1GB内存,跑轻量服务够用但别开太多吃内存的进程。然后执行sudo apt update && sudo apt upgrade -y更新系统软件包,这一步能补上已知的安全漏洞,建议每次新建实例后都做一遍。
更新完成后,可以装一些常用工具,比如sudo apt install -y htop curl git,htop用来看系统资源占用,curl用来测试网络,git用来拉代码。这些工具都很轻量,不会给系统带来负担。到这一步,一台可用的免费服务器就算搭好了,接下来可以根据自己的需求部署具体服务。
4. 常见扣费陷阱与排查实录
4.1 那些年我踩过的扣费坑
免费套餐的扣费陷阱,我几乎踩了个遍,这里挑几个典型的讲。第一个坑是弹性IP。早期我以为弹性IP是免费的,申请了一个绑在实例上,后来实例停了但IP没释放,月底账单多了一笔小费用。规则是这样的:弹性IP绑定在运行中的实例上不收费,但绑定在停止的实例上、或者申请了没绑定,都会按小时计费。解决办法很简单,不用的时候把IP释放掉,或者确保它始终绑在运行中的实例上。
第二个坑是EBS存储超限。有一次我为了测试,把一个实例的磁盘从8GB扩到了50GB,测试完忘了改回来,结果超出30GB免费额度的部分一直在计费。EBS是按实际配置的容量计费的,不是按使用量,所以磁盘配置大了即使没存满也照样收费。这个教训让我养成了习惯:临时扩容后立刻记一笔,用完马上缩回去。
第三个坑是流量超限。有个小项目被爬虫盯上,几天内跑掉了几十GB流量,超出了每月100GB的免费额度。流量超限的费用不算高,但积少成多也心疼。后来我在CloudWatch里设了流量告警,并且给Web服务加了简单的限流规则,情况就好多了。对于个人项目,还可以考虑在前面加一层CDN,把静态资源缓存起来,减少源站的流量消耗。
第四个坑是快照存储。创建实例时如果勾选了“创建快照”或者后续手动做了快照,快照占用的存储是单独计费的,不在30GB的EBS免费额度里。我一开始不知道,做了几个快照放着没管,月底发现多了一笔费用。快照确实有用(用于备份和恢复),但要有意识地管理,不需要的及时删除。
4.2 问题排查速查表
| 现象 | 可能原因 | 排查与解决 |
|---|---|---|
| SSH连接超时 | 安全组未开放22端口,或来源IP不匹配 | 检查安全组入站规则,确认22端口对当前公网IP开放 |
| SSH报权限错误 | 密钥文件权限过宽 | 执行chmod 400 密钥文件,确保仅自己可读 |
| 实例运行但网站打不开 | 安全组未开放80/443端口,或服务未启动 | 检查安全组规则,登录服务器确认Web服务进程在运行 |
| 账单出现意外费用 | 实例类型非免费、存储超限、弹性IP未释放、流量超限 | 逐项核对免费额度使用情况,检查账单明细定位收费项 |
| 实例性能突然变慢 | t2/t3积分耗尽,或内存不足 | 查看CloudWatch的CPU积分和内存指标,考虑优化负载或升级实例 |
| 无法连接但实例显示运行中 | 系统内部服务异常,或磁盘满 | 通过控制台的系统日志或会话管理器排查,检查磁盘空间 |
这张表是我自己遇到问题时的排查顺序,从网络层到系统层逐级往下查,大部分问题能在前两步定位。新手遇到问题容易慌,其实按这个顺序走一遍,八九不离十。
4.3 独家避坑心得
分享几个文档里不会写、但实操中很有用的心得。第一,养成“用完即停”的习惯。开发测试用的实例,不用的时候在控制台停止(stop),停止期间计算资源不计费,只收存储费用(在免费额度内)。但要注意,停止的实例如果绑了弹性IP会产生费用,所以停实例前先确认IP的处理方式。
第二,给所有资源打标签(Tag)。创建实例、磁盘、快照时,给它们打上比如“项目名”“用途”“创建日期”的标签,这样在账单页面可以按标签筛选,清楚知道每个资源属于哪个项目、花了多少钱。这个习惯在资源多了之后尤其重要,能帮你快速定位“钱花在哪了”。
第三,定期检查免费额度使用情况。控制台的免费套餐页面会显示各项额度的使用百分比,我一般每周看一次,心里有数。如果某项接近上限,就提前调整用法,别等超了才反应过来。
第四,别在免费实例上跑重负载。t3.micro只有1GB内存和2个vCPU(突发),跑个博客、小API、学习环境没问题,但别指望它跑数据库集群或者做视频转码。真需要更强性能时,要么升级到付费实例(做好预算),要么把重活拆到本地或其他地方做。认清免费额度的定位,能避免很多“为什么这么慢”的困惑。
5. 让免费服务器真正派上用场的场景
5.1 个人博客与静态站点托管
免费服务器最经典的用法就是搭个人博客。我的做法是用Nginx做Web服务器,配合静态站点生成器(比如Hugo或Hexo)生成纯静态页面,部署到服务器上。静态站点的好处是资源消耗极低,t3.micro跑起来毫无压力,而且安全性好(没有动态后端,攻击面小)。Nginx的安装很简单,sudo apt install -y nginx,装完默认页面就能访问,然后把生成的静态文件放到/var/www/html目录下即可。
如果博客需要评论、搜索这类动态功能,可以加一个轻量的后端,比如用SQLite做数据库的小型服务。但要注意内存占用,1GB内存跑Nginx加一个小后端是够的,再加数据库就要精打细算了。我的经验是,能用静态方案解决的就不上动态,能省资源就省,免费额度要细水长流地用。
域名和HTTPS这块,可以申请一个免费域名(有些服务商提供),然后用Let's Encrypt申请免费证书,配置Nginx的HTTPS。Let's Encrypt的证书90天有效,可以用certbot工具自动续期,配置一次就不用管了。HTTPS现在基本是标配,浏览器对HTTP站点会标“不安全”,体验不好,建议一开始就配上。
5.2 学习环境与开发测试
对学编程的人来说,这台免费服务器是个很好的练手环境。可以在上面装各种语言运行时、数据库、中间件,练习部署和运维。比如学Python的可以装Flask或Django,学Node.js的可以装Express,学数据库的可以装MySQL或PostgreSQL(注意内存,MySQL在1GB内存下要调小配置)。这些练习在本地电脑上也能做,但服务器环境更接近真实生产,能学到本地学不到的东西,比如防火墙配置、远程连接、服务守护进程管理。
我自己的用法是把它当“远程开发沙盒”,本地写代码,推送到Git仓库,服务器上拉取并部署,模拟完整的CI/CD流程。这个流程跑通一次,对理解现代软件交付很有帮助。服务器上还可以装Docker,用容器跑各种服务,隔离性好,清理也方便。Docker在t3.micro上跑几个轻量容器没问题,但别开太多,内存是硬约束。
5.3 小型API服务与自动化脚本
如果你需要给某个应用提供后端接口,或者跑一些定时任务,这台服务器也能胜任。比如用Python的FastAPI或Flask写一个简单的REST API,用systemd配置成开机自启的服务,再用Nginx做反向代理。定时任务用cron配置,比如每天定时抓取数据、发送提醒邮件等。这些场景负载都不高,免费实例完全扛得住。
要注意的是,对外提供API服务时,安全防护不能省。至少要做请求频率限制(防止被刷)、输入校验(防止注入攻击)、日志记录(方便排查问题)。Nginx层面可以配置限流,应用层面再做一层校验。免费服务器虽然不值钱,但被攻破后用来做坏事,麻烦的还是你自己。所以基础的安全措施一定要有,这是对自己负责,也是对网络环境负责。
6. 资源清理与长期使用策略
6.1 不用时如何彻底清理资源
项目告一段落或者暂时不用时,把资源清理干净是避免扣费的关键。清理的顺序建议是:先停实例,再释放弹性IP,然后删除不需要的EBS卷和快照,最后检查安全组和密钥对是否需要保留。实例停止后计算费用停止,但EBS卷还在,会继续占用免费额度(在30GB内不收费,超出才收费)。如果确定不再使用,直接终止(terminate)实例,终止时可以选择同时删除关联的EBS卷。
弹性IP一定要记得释放,这是最容易被遗忘的收费项。在EC2控制台的弹性IP页面,选中不用的IP,点释放即可。快照在快照页面管理,不需要的删掉。安全组和密钥对本身不收费,可以保留着,下次创建实例时复用,省得重新配置。
清理完资源后,过一两天再去看一眼账单页面,确认没有残留的收费项。有时候资源删除有延迟,或者有隐藏的关联资源(比如自动创建的快照),多检查一次更稳妥。
6.2 免费期结束后的选择
12个月的免费期结束后,t3.micro这类实例会开始按量计费。这时候有几个选择:一是继续用,按量付费,t3.micro的费用不高,个人项目通常能接受,但要设好预算告警;二是换成永久免费的资源,比如某些无服务器计算(Lambda)的免费额度、对象存储的免费额度等,把架构调整成更省钱的形态;三是迁移到其他平台的免费额度,不过迁移有成本,要权衡。
我的建议是,免费期快结束时,评估一下这台服务器对你的实际价值。如果只是学习练手,可以考虑清理掉,需要时再开;如果上面跑着你在意的服务,那就做好付费的心理准备,同时优化架构降低成本。比如把静态资源放到对象存储加CDN,减少服务器负载,这样可以用更小的实例。付费不可怕,可怕的是不知不觉被扣费,所以预算告警和定期对账的习惯要一直保持。
6.3 长期使用的成本控制习惯
长期用云服务,成本控制是个持续功课。我总结了几条习惯:每月初看一眼上月账单,分析费用构成;给所有资源打标签,按项目核算成本;设置多层告警(预算告警加具体资源告警);定期清理不用的资源(快照、旧卷、闲置IP);关注平台的免费额度变化和新出的优惠。这些习惯花不了多少时间,但能让你对成本始终有掌控感。
还有一点,别为了“薅免费额度”而过度设计架构。免费额度是给学习和轻量使用的,硬要在上面跑重负载,要么体验差,要么超限扣费,得不偿失。认清自己的需求,选择合适的资源规格,该付费时坦然付费,这才是健康的用法。我见过有人为了省几美元,把服务拆得七零八落,维护成本反而更高,这就本末倒置了。
最后分享一个我自己的小习惯:每次在控制台做可能产生费用的操作前,先问自己一句“这个在免费额度内吗”,不确定就去免费套餐页面核对一下。这个动作只要几秒钟,但帮我避免了很多次意外扣费。云服务的计费规则确实复杂,但只要你养成核对和告警的习惯,免费额度就能安安稳稳地用满,该省的钱一分不会多花。