本地跑通的javaweb项目,放到服务器上却启动不起来,这种情况很常见。Tomcat怎么装、数据库放在哪、域名怎么指过去,每一步都可能踩坑。下面以一个小型后台管理系统为例,把javaweb项目部署到阿里云的过程走一遍,重点放在容易出问题的地方。

一、先看清项目情况,再动手
小林是一名独立开发者,做了一套基于Spring MVC加MyBatis的库存管理系统,打包成WAR文件后,在本地Tomcat 9上运行正常。客户要求系统能从公网访问,数据也要长期保存,于是他决定迁到阿里云。
动手前,有三件事最好先确认:
- JDK版本:本地用的是JDK 8还是JDK 11,服务器要保持一致,否则容易出现字节码兼容问题。
- 中间件版本:Tomcat、MySQL的版本尽量和开发环境一致。版本差得太远,出了问题往往要花很久才能定位。
- 配置外置:数据库地址、账号密码不要写死在代码里,放到单独的配置文件中。换环境时只改配置,不用重新改代码、重新打包。
二、开通ECS与RDS
阿里云上有两类核心资源。ECS是云服务器,用来运行Tomcat;RDS是托管数据库,用来存放MySQL数据。应用和数据分开放,之后做备份、扩容都会更省心。小林选的是2核4G、系统为Alibaba Cloud Linux 3的ECS,同时开通了一个MySQL 8.0版本的RDS实例。
有个细节容易忽略:RDS的白名单要把ECS的内网IP加进去,两者最好位于同一个专有网络VPC下。这样数据库连接走内网,速度更快,数据库也不必暴露在公网上。如果连接失败,先查白名单,再看连接地址是不是误写成了公网地址。
三、配置安全组,只开放必要端口
安全组可以理解为云服务器前面的一道防火墙,哪些端口允许访问,由它决定。小林只开放了三个端口:22用于SSH远程登录,并且只允许自己的办公IP访问;80用于HTTP;443用于HTTPS。Tomcat默认的8080端口不直接对外,交给Nginx做反向代理。
这样做的好处是,外部用户只能访问Nginx,Tomcat始终在内部。之后就算调整应用结构,对外的端口策略也不用跟着改。开放的端口越少,需要盯的范围就越小。
四、安装环境并发布项目
登录服务器后,按下面的顺序操作:
- 安装JDK,执行java -version,确认版本和本地一致。
- 下载Tomcat压缩包,解压到/opt目录,给执行权限后启动。
- 在本地用Maven执行mvn clean package生成WAR包,再用scp上传到服务器。
- 把WAR包复制到Tomcat的webapps目录,Tomcat会自动完成部署。
小林第一次部署时,页面直接打开是404。翻日志才发现,WAR包名是inventory.war,访问路径就变成了/inventory,而他原本以为访问根路径就行。把包名改为ROOT.war,或者改用/inventory访问,问题就解决了。
这个坑很典型。上线前一定要核对上下文路径,本地开发时习惯的地址,换到服务器上,路径规则可能完全不同。
五、Nginx反向代理与域名解析
Nginx负责接收80和443端口的请求,再转发给本机的8080端口。配置的核心是proxy_pass指令,指向http://127.0.0.1:8080。到域名服务商那边,把A记录指向ECS的公网IP,访问域名时才能找到这台服务器。
这里要提前注意:如果域名要在国内服务器上提供网站服务,需要先完成ICP备案。备案周期通常要好几周,最好尽早规划。否则代码准备好了,网站却迟迟不能对外访问。
六、配置HTTPS与监控
阿里云提供SSL证书申请服务,小林申请的是免费证书。下载Nginx版本的证书文件后,配置到server块中,再把HTTP请求重定向到HTTPS。访问地址统一了,明文传输的风险也去掉了。
监控方面,小林开启了云监控,给CPU、内存和磁盘使用率设置了告警阈值。服务器悄悄宕机,通常是因为没人及时发现,告警能让问题尽早浮出来。
日志同样不能放着不管。Tomcat的catalina.out和应用自身的日志文件,都需要定期清理或轮转。日志一直增长,磁盘很快就会被占满,到那时服务多半已经出了问题。
七、上线后常见的问题
上线之后,小林总结了几条经验,基本覆盖了最常遇到的情况:
- 数据库连接失败:优先检查RDS白名单,以及内外网地址是否写对。
- 中文乱码:确认Tomcat的server.xml中URIEncoding为UTF-8,数据库字符集也保持一致。页面和数据库只要有一处不统一,乱码就会出现。
- 内存不足:通过JVM参数控制堆大小,避免2核4G的机器被撑爆。
- 版本更新:每次发布前备份旧WAR包和数据库,出问题时能快速回滚。
整体来看,javaweb项目部署到阿里云并不算特别复杂,难的是分清每个组件负责什么。ECS跑应用,RDS存数据,安全组控制入口,Nginx负责转发。把这四块理顺,再加上备份习惯,大部分问题都能很快定位。