返回列表

亚马逊云企业认证 AWS亚马逊云服务器Java部署详细指南

亚马逊aws / 2026-04-25 16:10:42

下载.png

开篇:别慌,这不是《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 AppTomcat 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正安静地在云上呼吸。

终章:运维不是终点,是日常

部署完成≠万事大吉。给你三条保命建议:

  1. 日志别只看console:定期journalctl -u myapp.service --since "2 days ago" > logs.log存档;
  2. 内存监控不能少htopfree -h每月看一次,JVM堆内存别长期>80%;
  3. 证书自动续期:certbot已配好定时任务,但建议首月手动跑sudo certbot renew --dry-run验证。

最后送你一句AWS老司机的话:“云不是魔法,是另一台电脑——只是这台电脑,你得学会用键盘而不是鼠标操作。” 把这篇指南当操作手册,多练两次,下次部署,你就是别人眼中的“云上Java侠”。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系