第一台云服务器:从买到上线一步步走
2026 年 09 月 21 日 · 约 9 分钟读完
第一次买服务器的人,最容易在「选哪家、选什么配置」上纠结一周。其实第一台服务器的目标只有一个:跑起来。先买一台最小的,把网站放上去能打开,剩下的以后再说。这篇按顺序走,每一步都写清楚做到什么算做对。
买之前先定三件事
- 地域:目标用户在哪,服务器就近。如果图省事不想备案,就选香港、新加坡或美国;国内服务器要备案,个人和企业都能备,就是要等管局审核。
- 配置:1 核 2G 内存起步,个人小站够了。带宽先选最小的,不够再加。
- 系统:选 Ubuntu 的 LTS 长期支持版。别选 Windows,部署网站用 Linux 是主流,教程也多。
下单时看一眼这三个地方
一是续费价,很多云厂商首年便宜、续费翻倍,算的是长期成本;二是带宽计费方式,按固定带宽还是按流量,图片多的站按流量可能更贵;三是快照(备份)收不收费、怎么收费。这三样看一眼,能避掉大部分「第二年账单吓一跳」。
拿到服务器,先做这四件事
云厂商会给你一个 IP、用户名(一般是 root)和密码或密钥。用 SSH 连上去,先更新系统,然后做这四件:
- 改一个强密码,或换成密钥登录,关掉密码登录更安全
- 在云厂商的安全组(防火墙)里放行 22(SSH)、80(HTTP)、443(HTTPS)端口
- 装 Node.js(版本按你项目的要求来,交付包的说明里会写)
- 装 PostgreSQL,或者直接用云厂商的托管数据库,省得自己备份
ssh root@你的服务器IP
# 连上之后先更新系统
apt update && apt upgrade -y把网站传上去跑起来
代码怎么上去都行:git clone 最省事,或者本地打 zip 传上去解压。EazyOPC 交付包的话,按 START_HERE.md 的顺序来:装依赖、配环境变量(DATABASE_URL 这些,一段一段照着填,别整段复制)、生成数据库客户端、建表、构建、启动。每一步做完都有验证方法,说明里写了,不要跳步。
npm install
npx prisma generate
npm run db:push
npm run build
npm start绑域名和 HTTPS
去域名注册商把域名的 A 记录指到服务器 IP,等几分钟到几小时生效。然后在服务器上装个反向代理(比如 Nginx 或 Caddy),把 80/443 端口的请求转给你的网站进程。HTTPS 证书现在都是免费的,Caddy 能自动申请,Nginx 配 certbot 也就几条命令。浏览器地址栏出现小锁,这步才算完。
用 pm2 让网站一直在跑
前面用 npm start 把网站跑起来,但有个要命的问题:SSH 窗口一关,网站就停了。生产环境要用进程管理工具,最常用的是 pm2。它干三件事:让网站在后台跑、挂了自动重启、日志集中管理。装和使用都不难:
npm install -g pm2
# 启动网站,起个你认识的名字
pm2 start npm --name "我的网站" -- start
# 看日志 / 重启 / 停止
pm2 logs 我的网站
pm2 restart 我的网站
pm2 stop 我的网站名字起个你认识的,服务器上跑多个网站时不搞混。网站出问题了,先 pm2 logs 看日志,答案多半在里面。改完代码重新部署,pm2 restart 一下就行,不用先杀进程再手动起。记住:凡是「一直在跑」的东西,都应该在 pm2 list 里能看到,裸跑的进程早晚会出事。
服务器重启后,网站自己起来
服务器打补丁、升级配置都会重启。重启之后,pm2 管的网站不会自己起来——除非你做两件事。第一,运行 pm2 startup,它会给你一条命令,复制执行,这一步是让 pm2 自己开机启动。第二,pm2 save,把当前在跑的网站名单存下来。以后每次增删网站,都顺手 pm2 save 一下,不然下次重启起来的还是老名单,新加的网站不会起来。
验证办法:设置好之后,手动重启一次服务器(云厂商控制台上有重启按钮),等两分钟,浏览器打开你的网站,能打开才算数。别等到半夜系统自动更新重启了,才发现网站没起来——那时候你还在睡觉,用户已经在骂了。
磁盘满了:网站变慢、写不进数据的元凶
跑着跑着,网站突然变慢、上传文件失败、数据库写不进去,八成是磁盘满了。先看 df -h,找哪个分区满了;再用 du 一层层往下找谁占的地方。元凶通常三个:pm2 和 nginx 的日志文件越滚越大、数据库备份文件越攒越多、npm 缓存和没用的安装包。
df -h
# 找大目录,一层层往下钻
du -sh /var/log/* 2>/dev/null | sort -rh | head
# 清空 pm2 的日志(先确认已经看过报错)
pm2 flush治本的办法是配日志轮转:Ubuntu 自带 logrotate,给 nginx 和 pm2 的日志配成按天切、只留 14 天。备份文件只留最近 7 天,上一篇的定时任务里已经写了自动删除。每个月花五分钟 df -h 看一眼,比半夜被「磁盘满了」叫醒强得多。
换服务器、重装系统:半小时恢复的底气
早晚有一天你要换服务器:涨价、机房故障、想换地域。到时候能不能半小时恢复,看你平时有没有准备好三样东西:代码在 git 仓库里(别只躺在服务器上)、环境变量单独存了一份(数据库密码、支付密钥,重装后照着填)、数据库有每天的备份。有这三样,新机器上就是装环境、拉代码、填变量、导数据四步,半小时搞定。缺一样,就得折腾一晚上。
日志都在哪:出问题先看它们
三处日志要知道位置:pm2 管的网站看 pm2 logs;nginx 或 Caddy 的访问和错误日志在 /var/log 里;应用自己写的日志看项目配置。看日志的习惯:从下往上看,最新的在最下面,找第一个 ERROR 或报错堆栈。别从第一行开始看,几万行日志看到天亮也找不到。
环境变量:别写在代码里
数据库密码、支付密钥这些,放在 .env 文件或者 pm2 的环境变量里,别写死在代码里。两个原因:一是代码要进 git,密钥进 git 等于公开;二是换服务器、改密码的时候,只改环境变量文件,不用改代码。环境变量单独存一份加密的,服务器挂了重建,照着填就行。
定时任务:备份和清理自动化
两件事交给定时任务:每天凌晨备份数据库(上一篇的 cron 命令直接抄),每周清理一次旧日志和旧备份。crontab -e 编辑,写完用 crontab -l 确认。定时任务没跑,先看 cron 服务在不在跑,再去 /var/log/syslog 里找它的执行记录。定时任务哑火了没人告诉你,定期检查是唯一的办法。
安全组:只开必要的端口
安全组(防火墙)只放行 22(SSH)、80(HTTP)、443(HTTPS),其他的全关掉。数据库端口(5432)千万别对外开,数据库只给本机用。SSH 更安全的做法:换成密钥登录,关掉密码登录;或者把 22 端口换个不常用的数字。被扫爆破是常态,日志里每天几千次尝试登录,习惯就好,挡住就行。
Swap:1G 小鸡的救命稻草
1G 内存的小机器,构建项目、跑数据库经常内存不够。加一块 swap 交换分区应急:硬盘空间当内存用,慢,但是能救命。构建的时候开着 swap,构建完可以关掉。长期跑在 swap 上说明内存真不够了,该升级机器了——swap 是创可贴,不是治疗方案。
装个监控:挂了第一时间知道
服务器配好了,最后装个存活监控:UptimeRobot 免费版,每 5 分钟检查一次网站能不能打开,挂了发邮件给你。具体用法在《独立开发者常用免费工具盘点》那篇里有。监控是运维的最后一块拼图:前面所有的努力,都是为了网站一直活着;监控是让你第一时间知道它死了。