很多开发者第一次把项目搬上线,都碰到过类似的情况:本地跑得好好的程序,到了服务器上直接报错;页面能打开,接口却访问不了;代码明明改了,线上还是旧版本。项目部署到阿里云服务器看上去只是传文件、启动服务,真正动手才发现环节不少。下面结合一个小团队的案例,讲讲一套比较稳妥的做法。

案例背景
某初创团队做了一套面向本地门店的预约管理系统,后端用 Node.js 加 Express,前端是 Vue 打包出来的静态页面,数据存在 MySQL 里。开发阶段,项目一直跑在同事的笔记本上。后来测试门店需要从外网访问,团队才开始考虑把项目部署到阿里云服务器。
最初的想法很直接:买一台云服务器,装好环境,把代码拷过去,执行 node app.js 就完事。结果第一次上线就出了问题。服务器重启后,服务没有自动拉起来;数据库密码直接写在代码里,连同代码一起推到了 Git 仓库;外网只能用 IP 访问,没有域名。团队花了两天时间把这些问题逐个处理,这也是后来整理这套流程的起点。
上线前要先想清楚的事
正式操作之前,建议先确认以下几件事:
- 服务器规格:入门项目选 2 核 4G 的 ECS 实例通常够用。操作系统用 Ubuntu 或 CentOS 等主流发行版即可,团队熟悉哪个就用哪个,省得再学一套包管理习惯。
- 地域:主要用户在国内,就选离他们近的地域,访问延迟会低一些。买之前把用户所在地区想清楚,之后迁移会麻烦。
- 域名与备案:服务器位于中国大陆地域时,要通过域名对外提供网站服务,需要先完成 ICP 备案。备案周期不短,域名方案最好提前定,别等代码都写好了才卡在这一步。
- 安全:从第一天开始就考虑密钥登录、防火墙规则,以及敏感配置放在哪里。这些事后补,成本会高很多。
服务器基础环境配置
实例买好后,先用 SSH 密钥登录,再关闭密码登录,减少被暴力破解的机会。接着更新系统软件包,装上运行项目需要的 Node.js、Nginx 和数据库客户端。
这里有个容易漏掉的地方。阿里云的安全组可以理解为实例外面的一道防火墙。服务在服务器本机跑得好好的,如果安全组没有放行对应端口,外网照样访问不了。案例团队一开始只放行了 22 端口,页面在服务器上能打开,外网却始终超时。实际需要放行的是 80 和 443,用于 Web 访问;22 端口最好限定到固定 IP,不要对所有地址开放。
代码部署和进程守护
代码建议用 Git 拉取,不要每次手动传压缩包。每次更新只需要拉一次,版本也好追溯。前端项目在本地或服务器上执行构建命令,生成 dist 目录,再交给 Nginx 托管静态资源。
后端服务不能直接在终端里长期运行,关掉连接,进程就跟着退出了。常见做法是用 PM2 这类进程管理工具。程序异常退出时它会自动拉起。另外,服务器重启后还需要通过 pm2 startup 和 pm2 save 让服务随系统恢复,只启动一次是不够的。
案例团队引入 PM2 之后,之前每周都要人工重启一次的问题就没有再出现过。
Nginx 反向代理配置
Nginx 在这套结构里做两件事:一是托管前端静态文件,二是把 /api 开头的请求转发给本机的 Node.js 服务,通常跑在 3000 端口。
具体思路是这样:Nginx 监听 80 端口接收 HTTP 请求;根路径指向前端构建目录,并配置 history 模式下的路由回退,否则刷新子页面会出现 404;/api 路径反向代理到 127.0.0.1:3000。
后端只监听内网地址,外部用户只能经过 Nginx 进入系统,比直接暴露 Node 端口安全得多。改完配置后,先执行语法检查,确认没问题再重载服务。一个拼写错误就可能让整个站点中断,这一步省不得。
数据库和敏感配置
访问量上来之后,数据库最好不要和应用装在同一台服务器上。阿里云 RDS 可以承担备份、主从和监控等工作,运维压力会小不少。访问白名单里只添加应用服务器的内网地址,不要图方便全部放行。
数据库账号、密码、第三方接口密钥这些信息,绝对不能写进代码仓库。更稳妥的做法是放在服务器上的环境变量文件里,并把文件权限设成仅运行服务的用户可读。
案例团队在重构时还做了两件事:清理了仓库的历史提交,并更换了已经泄露的密码。只删掉最新提交是不够的,历史记录里仍然能翻到。
上线后的验证和日常维护
部署完成后,建议按下面的顺序逐项检查:
- 在服务器本机用 curl 请求后端接口,确认能正常返回。
- 用公网 IP 或域名访问首页,检查静态资源是否加载完整。
- 走一遍登录、提交预约等核心流程。
- 查看 PM2 和 Nginx 日志,确认没有持续报错。
- 重启一次服务器,看服务能否自动恢复。
上线只是开始。系统补丁要定期更新,自动备份要配置好,云监控里也要关注 CPU、内存和磁盘的使用情况。案例团队上线一个月后,因为日志文件一直没清理,磁盘被占满,服务中断了一小段时间。这件事之后,他们才意识到,很多运维问题都是平时一点点攒出来的。
项目部署到阿里云服务器,说到底是把开发时随手搭的环境,按生产环境的要求重新整理一遍。环境配置、安全组、进程守护、反向代理、密钥管理,每一项单看都不算难,漏掉任何一项都可能出事。先把流程固定下来,做到可重复、能回滚,之后每次迭代都会省心很多。