亚马逊云企业认证 AWS亚马逊云服务器Java部署详细指南
开篇:别慌,这不是《AWS白皮书》速读
听说你要把Java项目扔上AWS?先别急着点「Launch Instance」——不是所有云服务器都叫「开箱即用」,尤其当你本地IDEA里跑得好好的Spring Boot,在EC2上连java -version都报错时,那种怀疑人生的沉默,我懂。
这篇指南不讲「什么是VPC」「IAM策略怎么写」这类教科书开场白,只聚焦一件事:让你的Java应用,在AWS上活下来,还能被全世界访问到。步骤全实测(AWS us-east-1 区域,Ubuntu 22.04 LTS 镜像),命令可复制粘贴,错误提示有对应解法,连sudo: command not found这种玄学问题都给你备好了答案。
第一步:选对EC2,别让“最小配置”变成“最痛配置”
登录AWS控制台 → EC2 → Launch Instance。别直接搜「Java」——AWS没有Java专用机型,但有最适合Java的入门款:
- t3.small(2核2GB):够跑单个Spring Boot + H2数据库,适合测试和学习;
- t3.medium(2核4GB):推荐!加了2GB内存,Tomcat+MySQL+你的业务代码能喘口气;
- 别选t2.micro——免费层虽香,但Java启动时JVM堆内存一设就OOM,纯属自虐。
镜像选Ubuntu 22.04 LTS(非Amazon Linux)。理由很实在:apt源稳定、中文社区支持多、装JDK不折腾。AMI搜索框里敲ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-,选最新日期那个。
安全组?不是防火墙说明书,是“放行清单”
创建实例时必填的安全组,别照抄默认模板。你需要手动添加三条规则:
| 类型 | 协议 | 端口范围 | 源 | 说明 |
|---|---|---|---|---|
| SSH | TCP | 22 | 你的IP(或0.0.0.0/0临时) | 登服务器用,配完立刻改回你的IP |
| HTTP | TCP | 80 | 0.0.0.0/0 | 用户访问网站的入口 |
| Custom TCP | TCP | 8080 | 0.0.0.0/0 或 仅 127.0.0.1 | 如果直接跑Spring Boot,默认端口,建议只限本机访问 |
⚠️ 踩坑提醒:很多人卡在「网页打不开」,90%是忘了开80端口,或安全组没生效(保存后要等10秒才刷新)。
第二步:登上去,先确认“自己是谁”
用.pem密钥SSH连接:ssh -i "your-key.pem" ubuntu@你的公网IP。首次登录后立刻执行三件事:
# 1. 升级系统(别跳!Ubuntu 22.04初始源可能慢)
sudo apt update && sudo apt upgrade -y
# 2. 检查用户权限(ubuntu用户默认有sudo,但没密码)
sudo -l # 应显示 (ALL : ALL) ALL
# 3. 查看磁盘空间(EC2默认30GB根分区,够用)
df -h
如果sudo报错?别慌——执行su -再输密码(但ubuntu用户没密码啊!)。真相是:你可能误用了root用户密钥。AWS Ubuntu镜像只给ubuntu用户sudo权限,永远别用root登录。
亚马逊云企业认证 第三步:装JDK——别下tar.gz,用apt更稳
别去Oracle官网下JDK,也别信「最新版最香」。生产环境推荐:OpenJDK 17(LTS),Ubuntu源里自带:
sudo apt install openjdk-17-jdk -y
java -version # 输出应含 "17.0.x" 和 "Ubuntu"
验证成功后,设JAVA_HOME(Spring Boot脚本依赖它):
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' | sudo tee -a /etc/profile
source /etc/profile
echo $JAVA_HOME # 应输出路径
💡 小技巧:如果项目用JDK 11,把上面命令里的17换成11即可,apt源里两个版本共存不冲突。
第四步:部署方式选型——Jar包 or Tomcat?
Spring Boot项目?优先用内置Tomcat打jar包部署。理由:少一层中间件、启动快、运维简单。只有三种情况才考虑外置Tomcat:
- 需要部署多个WAR应用;
- 团队强依赖Tomcat管理界面;
- 必须用JNDI数据源(云上基本不用)。
所以,我们走jar路线。本地Maven打包:mvn clean package -DskipTests,生成target/your-app.jar。
上传jar包:scp比S3更快更直
别折腾S3上传再wget——直接本地终端传:
scp -i "your-key.pem" target/your-app.jar ubuntu@你的公网IP:/home/ubuntu/
传完登服务器,给执行权限:chmod +x your-app.jar。
第五步:守护进程启动——别让Ctrl+C毁掉一切
直接java -jar your-app.jar?关掉终端就停服!用systemd建服务:
sudo nano /etc/systemd/system/myapp.service
粘贴以下内容(注意替换YOUR_JAR_NAME.jar和/home/ubuntu路径):
[Unit]
Description=My Spring Boot App
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/java -Xms512m -Xmx1g -jar /home/ubuntu/YOUR_JAR_NAME.jar
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
sudo systemctl status myapp.service # 看是否active (running)
日志实时盯梢:sudo journalctl -u myapp.service -f。看到Started My Spring Boot App和Tomcat started on port(s): 8080,恭喜,Java活了。
第六步:域名+HTTPS——让世界信任你
现在只能用http://IP:8080访问?太原始。加Nginx反代+Let's Encrypt HTTPS:
sudo apt install nginx certbot python3-certbot-nginx -y
sudo systemctl start nginx
sudo ufw allow 'Nginx Full' # 开放80/443
配置Nginx反向代理(sudo nano /etc/nginx/sites-available/myapp):
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
启用站点并申请证书:
sudo ln -sf /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
certbot --nginx -d your-domain.com
完成!浏览器打开https://your-domain.com,小锁图标亮起,Java正安静地在云上呼吸。
终章:运维不是终点,是日常
部署完成≠万事大吉。给你三条保命建议:
- 日志别只看console:定期
journalctl -u myapp.service --since "2 days ago" > logs.log存档; - 内存监控不能少:
htop或free -h每月看一次,JVM堆内存别长期>80%; - 证书自动续期:certbot已配好定时任务,但建议首月手动跑
sudo certbot renew --dry-run验证。
最后送你一句AWS老司机的话:“云不是魔法,是另一台电脑——只是这台电脑,你得学会用键盘而不是鼠标操作。” 把这篇指南当操作手册,多练两次,下次部署,你就是别人眼中的“云上Java侠”。

