阿里云ECS云服务器部署SpringBoot项目从零到公网访问全指南

apphuang2026年06月16日 18:15:379

一、为什么选择阿里云ECS部署SpringBoot项目

在Java Web开发的学习和实践中,很多开发者都会遇到一个共同的困扰:项目在本地IDE中运行一切正常,却无法让团队成员、导师或面试官通过公网访问和体验。无论是课程设计答辩、毕业设计展示,还是个人作品集分享,都需要一个稳定可靠的公网访问环境。阿里云弹性计算服务ECS凭借其稳定的性能、灵活的配置选项以及完善的生态体系,成为众多开发者的首选部署平台。

与传统自建机房或虚拟主机相比,ECS云服务器具有几个显著优势:完全可控的操作系统与软件版本、按需付费的弹性成本、以及丰富的周边云产品生态。对于个人开发者和学生群体而言,阿里云提供了极具性价比的经济型实例,2核4G配置的ECS实例配合学生优惠,月度成本可以控制在50元以内。这使得将SpringBoot项目部署到云端不再是高门槛的技术活,而是每个Java开发者都可以掌握的必备技能。

需要先登录阿里云控制台,点击:阿里云控制台

二、ECS实例选购与基础配置

2.1 实例规格选择

部署SpringBoot项目的第一步是拥有一台阿里云ECS实例。进入ECS控制台后,点击「创建实例」进行配置。对于大多数中小型SpringBoot项目,推荐以下配置方案:

  • 地域:选择离目标用户群体最近的地域,例如华东2(上海)或华北2(北京),可以有效降低网络延迟。
  • 实例规格:测试或小型项目可选择1核2G配置(如ecs.t6-c1m2.large),足以支撑日均千次以内的访问量;生产环境建议2核4G起步(如ecs.g6.large)。如果预算有限,共享型s6实例也是性价比较高的选择。
  • 镜像:推荐选择Linux系统,CentOS 7.9或Ubuntu 22.04都是稳定且广泛使用的版本。CentOS使用yum包管理器,Ubuntu使用apt-get,两者在命令上略有差异,但核心部署流程一致。
  • 存储:系统盘建议40GB起步,选择SSD云盘可获得更好的读写性能。
  • 公网IP:务必勾选「分配公网IPv4地址」,这是外网访问的基础。
  • 带宽:测试环境1Mbps即可满足基本需求,生产环境建议5Mbps起步,按量计费模式更为灵活。
  • 登录凭证:选择「自定义密码」,设置一个强密码并妥善保管。

购买完成后,在ECS实例列表中记录下公网IP地址和内网IP地址,后续操作中将频繁使用。

2.2 安全组配置——部署前的第一道防线

很多新手拿到服务器后的第一件事就是通过SSH登录并开始安装软件,这个顺序是错误的。安全组是云服务器的第一道虚拟防火墙,必须在部署软件之前先完成配置。默认的安全组通常只开放了22端口(SSH),我们需要根据项目需求手动开放必要的端口。

进入ECS实例详情页,找到「安全组」配置,点击安全组ID进入规则配置页面,在「入方向」添加以下规则:

授权策略 | 协议类型 | 端口范围 | 授权对象 | 说明
允许 | TCP | 22/22 | 你的固定IP或0.0.0.0/0 | SSH远程连接
允许 | TCP | 8080/8080 | 0.0.0.0/0 | SpringBoot默认端口
允许 | TCP | 80/80 | 0.0.0.0/0 | HTTP服务(Nginx代理)
允许 | TCP | 443/443 | 0.0.0.0/0 | HTTPS服务(SSL证书)
允许 | TCP | 3306/3306 | 0.0.0.0/0 | MySQL数据库(建议限制特定IP)

安全建议:22端口的授权对象尽量限制为开发者自己的IP地址,避免暴露在公网被暴力破解。3306端口在生产环境中不应直接暴露在公网,建议仅对特定内网IP或应用服务器开放。如果使用ECS自建数据库,数据库端口建议仅允许内网访问。

2.3 连接服务器与系统初始化

安全组配置完成后,通过SSH工具连接服务器。Windows用户可以使用Xshell、PuTTY或Windows Terminal,Mac/Linux用户直接使用终端即可。连接命令如下:

ssh root@你的公网IP地址

首次登录需要输入购买时设置的密码。登录成功后,建议立即执行以下初始化操作:

# CentOS/RHEL/Alibaba Cloud Linux
yum update -y

# Ubuntu/Debian
apt update && apt upgrade -y

更新系统包可以修复已知的安全漏洞并获取最新的软件源信息。此外,建议创建一个普通用户用于日常操作,避免长期使用root账户带来的安全风险。

三、服务器运行环境搭建

3.1 安装JDK

SpringBoot项目运行离不开Java环境。JDK 8(Java 8)是目前最稳定且广泛使用的版本,对于大多数SpringBoot项目来说都是可靠的选择。在CentOS系统上使用yum安装非常便捷:

# 查看可用的JDK 8版本
yum list | grep java-1.8.0

# 安装JDK 8开发工具包
yum install java-1.8.0-openjdk-devel.x86_64 -y

# 验证安装
java -version

使用yum安装的OpenJDK会自动配置好环境变量,无需手动设置JAVA_HOME。如果使用Ubuntu系统,对应的安装命令为:

apt install openjdk-11-jdk -y

根据项目需求也可以选择JDK 11或17,安装方式类似。

3.2 安装MySQL数据库

如果项目需要数据库支持,可以选择在ECS上自建MySQL,也可以使用阿里云RDS托管服务。自建MySQL的安装步骤如下(以CentOS 7为例):

# 添加MySQL官方YUM源
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
rpm -ivh mysql80-community-release-el7-7.noarch.rpm

# 安装MySQL服务器
yum install -y mysql-community-server

# 启动MySQL并设置开机自启
systemctl start mysqld
systemctl enable mysqld

# 查看初始密码
grep 'temporary password' /var/log/mysqld.log

# 执行安全配置(包含修改密码)
mysql_secure_installation

安装完成后,需要根据项目需求创建对应的数据库和用户,并授予适当的权限。如果应用和数据库部署在同一台ECS上,建议使用内网IP(127.0.0.1)连接,既安全又免流量费。

3.3 安装Redis缓存

对于需要使用缓存的项目,Redis的安装同样简单:

# 安装EPEL仓库(CentOS)
yum install epel-release -y
yum update -y

# 安装Redis
yum install redis -y

# 启动Redis并设置开机自启
systemctl start redis
systemctl enable redis

如需配置Redis远程访问,需要修改`/etc/redis.conf`中的`bind`配置,并设置`requirepass`密码。同样建议仅在安全组中限制可访问的IP范围。

四、SpringBoot项目打包与上传

4.1 Maven打包生成JAR文件

SpringBoot项目通常打包为可执行的JAR文件进行部署。在项目根目录下执行Maven打包命令:

mvn clean package -DskipTests

打包成功后,在项目的`target`目录下会生成类似`your-application-0.0.1-SNAPSHOT.jar`的文件。如果使用IntelliJ IDEA,也可以直接点击右侧Maven面板中的`package`生命周期进行打包。

需要注意的是,`pom.xml`中必须包含`spring-boot-maven-plugin`插件,以确保生成的JAR包包含所有依赖且可独立运行:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

如果项目中指定了`mainClass`,需要在插件的`configuration`中明确指定,否则可能打包失败。

4.2 上传JAR包到服务器

有多种方式可以将JAR包上传到ECS服务器:

方式一:SCP命令上传

scp target/your-application-0.0.1-SNAPSHOT.jar root@你的公网IP:/opt/app/

方式二:SFTP图形化工具

使用FileZilla、WinSCP等SFTP客户端,通过SSH协议可视化上传文件。

方式三:阿里云Workbench

在ECS控制台中直接使用Workbench远程连接,通过文件管理功能上传。

建议将JAR包统一存放在`/opt/app/`或`/usr/local/app/`目录下,便于管理和维护。

五、应用部署与进程守护

5.1 直接启动测试

上传完成后,可以先通过java -jar命令直接启动,验证应用是否能够正常运行:

java -jar /opt/app/your-application-0.0.1-SNAPSHOT.jar

如果一切正常,通过浏览器访问`http://公网IP:8080`(前提是安全组已开放8080端口)应该可以看到SpringBoot应用的响应。第一次加载可能会比较慢,需要耐心等待。

直接启动的方式有一个致命缺陷:一旦关闭SSH终端会话,应用进程就会随之终止。因此,生产环境必须使用后台运行方案。

5.2 后台运行:nohup方式

最简单的后台运行方式是使用`nohup`命令:

nohup java -jar /opt/app/your-application-0.0.1-SNAPSHOT.jar > /opt/app/app.log 2>&1 &

这种方式将应用日志输出到指定文件,即使终端关闭,应用也会继续在后台运行。但这种方式无法实现进程崩溃后的自动重启,也缺乏统一的管理接口。

5.3 生产级方案:Systemd进程守护

对于生产环境,推荐使用Linux系统的Systemd服务来管理SpringBoot应用,实现进程守护、开机自启和统一管理。

创建Systemd服务配置文件:

vim /etc/systemd/system/springboot-app.service

配置文件内容如下:

[Unit]
Description=SpringBoot Application Service
After=network.target mysqld.service redis.service

[Service]
Type=simple
User=root
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -Xmx512m -Xms256m -jar /opt/app/your-application-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

配置完成后,执行以下命令启动服务并设置开机自启:

# 重新加载Systemd配置
systemctl daemon-reload

# 启动服务
systemctl start springboot-app

# 设置开机自启
systemctl enable springboot-app

# 查看服务状态
systemctl status springboot-app

# 查看实时日志
journalctl -u springboot-app -f

Systemd方案的优势在于:应用崩溃后会自动重启(`Restart=on-failure`)、服务器重启后应用自动恢复(`enable`)、以及统一的启停管理命令(`start/stop/restart/status`)。

安全提示:生产环境中不建议使用root用户运行SpringBoot应用,建议创建专用的部署用户(如`deploy`)来运行服务。

六、Nginx反向代理与域名绑定

6.1 为什么要使用Nginx

直接通过IP加端口号(如`http://公网IP:8080`)访问应用存在几个问题:端口号不美观、无法在同一台服务器上部署多个应用、不支持HTTPS、以及无法有效处理静态资源。Nginx作为高性能的反向代理服务器,可以完美解决这些问题。

Nginx的核心作用包括:监听80(HTTP)和443(HTTPS)端口,根据域名或请求路径将流量转发到后端的SpringBoot服务;提供静态资源的高效托管服务;以及实现负载均衡和SSL终端卸载。

6.2 安装与配置Nginx

在CentOS系统上安装Nginx:

yum install -y nginx
systemctl start nginx
systemctl enable nginx

安装完成后,编辑Nginx配置文件:

vim /etc/nginx/conf.d/springboot.conf

一个典型的反向代理配置如下:

server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名或公网IP

    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;
    }

    # 静态资源分离(可选)
    location /static/ {
        alias /usr/share/nginx/html/static/;
        expires 30d;
    }
}

配置完成后测试并重载Nginx:

nginx -t  # 测试配置语法是否正确
systemctl reload nginx

此时,通过`http://公网IP`或`http://域名`即可访问SpringBoot应用,无需再输入端口号。

6.3 域名解析配置

如果拥有自己的域名,可以在阿里云云解析DNS控制台添加解析记录:

  • 记录类型:A记录(将域名指向IPv4地址)
  • 主机记录:@(根域名)或www(二级域名)
  • 记录值:ECS实例的公网IP地址
  • TTL:默认600秒即可

解析生效后(通常几分钟到几小时不等),用户便可以通过域名访问应用。

6.4 配置SSL证书启用HTTPS

为保障数据传输安全,生产环境应启用HTTPS。阿里云提供了免费SSL证书(DigiCert免费版DV证书)。

在阿里云SSL证书服务中申请免费证书并完成域名验证后,下载Nginx版本的证书文件(包含`.pem`和`.key`两个文件),上传到服务器(如`/etc/nginx/ssl/`目录),然后修改Nginx配置:

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /etc/nginx/ssl/your-domain.pem;
    ssl_certificate_key /etc/nginx/ssl/your-domain.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    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;
    }
}

# HTTP自动跳转HTTPS
server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

配置完成后重载Nginx,并确保安全组已开放443端口。此时访问`http://域名`将自动跳转到`https://域名`。

七、JVM内存调优与性能优化

7.1 合理设置JVM堆内存

SpringBoot应用默认的JVM堆内存配置可能并不适合云服务器环境。在资源受限的ECS实例上,不合理的JVM参数很容易导致内存溢出(OutOfMemoryError)。

基本原则是:堆内存配置不超过物理内存的70%,为操作系统、Direct Memory和Metaspace预留充足空间。例如,一台2核4GB内存的ECS实例,建议将Xmx设置为1.5GB左右。

在Systemd服务配置中通过`ExecStart`参数设置JVM选项:

ExecStart=/usr/bin/java -Xmx1024m -Xms512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -jar /opt/app/your-application.jar

对于轻量级应用(日均访问量不高),2核2GB的ECS配合`-Xmx800m`的配置也是可行的。

7.2 其他性能优化建议

  • 启用Gzip压缩:在Nginx中开启Gzip可以显著减少传输数据量。
  • 静态资源缓存:通过Nginx设置静态资源缓存头,减少重复请求。
  • 数据库连接池调优:根据并发量合理配置HikariCP等连接池参数。
  • 使用内网连接数据库:如果数据库部署在同一地域的ECS或RDS上,使用内网地址连接可以免流量费并降低延迟。

八、常见问题与排查思路

8.1 端口无法访问

这是部署过程中最常见的问题。排查步骤:首先确认安全组已开放对应端口;其次检查服务器防火墙(如firewalld或iptables)是否拦截;最后确认SpringBoot应用是否正常启动并监听在指定端口。

8.2 数据库连接失败

检查MySQL是否允许远程连接(`bind-address`配置),以及数据库用户的主机权限是否设置为`%`或应用服务器的IP。生产环境建议使用内网连接。

8.3 应用进程意外终止

查看应用日志定位具体原因,常见原因包括内存不足(OOM)、端口冲突或依赖服务不可用。使用Systemd管理服务可以自动重启崩溃的进程。

8.4 静态资源404

检查Nginx的静态资源路径配置是否正确,以及前端构建产物是否已正确上传到指定目录。

8.5 域名无法访问

确认域名解析是否已生效(可通过ping命令测试),Nginx配置中的`server_name`是否正确,以及安全组是否开放了80/443端口。

九、总结

将SpringBoot项目部署到阿里云ECS是一个涵盖多个技术环节的系统工程。从ECS实例选购、安全组端口配置,到Linux环境搭建、JDK/MySQL/Redis安装,再到项目打包上传、Systemd进程守护、Nginx反向代理与HTTPS配置,每个步骤都需要仔细操作。本文提供的完整流程和命令示例,可以帮助开发者快速建立起从本地代码到公网服务的完整部署链路。对于学生开发者而言,配合阿里云的学生优惠,月度成本可以控制在50元以内。掌握这套部署流程,不仅能让个人项目顺利上线,更是Java开发者迈向生产环境运维的重要一步。

常见问题解答

问1:部署SpringBoot项目到ECS,最低需要什么配置的服务器?

答:对于轻量级SpringBoot应用(日均访问量不高),1核2G的ECS实例即可满足需求。建议JVM堆内存设置为-Xmx800m左右,为系统预留足够内存。如果项目包含MySQL和Redis,建议选择2核4G配置。

问2:如何让SpringBoot应用在服务器重启后自动启动?

答:使用Systemd服务管理并执行`systemctl enable 服务名`命令,即可实现开机自启。Systemd是Linux标准的服务管理方案,比传统的init.d脚本更加可靠和易用。

问3:为什么我开放了8080端口,但浏览器还是无法访问?

答:首先检查阿里云安全组是否正确添加了入方向规则;其次检查服务器本机防火墙(如firewalld)是否放行了该端口;最后确认SpringBoot应用是否成功启动并监听在8080端口,可以通过`netstat -tlnp`命令查看端口监听状态。

问4:部署到ECS后,如何查看SpringBoot应用的运行日志?

答:如果使用Systemd管理服务,可以通过`journalctl -u 服务名 -f`实时查看日志。如果使用nohup方式启动,日志会输出到指定的日志文件中。也可以在SpringBoot的`application.yml`中配置日志文件输出路径,便于集中管理。

问5:一台ECS服务器可以部署多个SpringBoot项目吗?

答:可以。每个SpringBoot应用使用不同的端口号(如8080、8081、8082),然后通过Nginx根据域名或请求路径将流量转发到对应的端口。需要注意合理分配JVM内存,避免多个应用争抢资源导致OOM。

问6:部署SpringBoot项目到ECS,选择JAR包方式还是WAR包方式更好?

答:SpringBoot官方推荐使用JAR包方式部署。JAR包内嵌了Tomcat等Servlet容器,部署简单、启动快速,无需额外安装和配置Tomcat。WAR包方式需要单独安装Tomcat容器,适合需要部署在传统Java Web容器中的场景。

相关文章

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

作为深耕阿里云代理领域 10 年的 “老司机”,经常被问到:“买阿里云服务器能便宜吗?有没有优惠价格?” 今天就用实打实的行业经验告诉你:不仅能便宜,选对渠道还能省一大笔! 这篇文章带你解锁阿里云服务…

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

最近总有朋友问我:“腾讯云有返点吗?腾讯云服务器能拿佣金不?返佣比例到底有多少?” 作为一个在腾讯云代理行业摸爬滚打了 10 年的 “老人”,今天就来跟大家好好…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS、对象存…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

01一、阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS…

阿里云代理商有哪些?阿里云代理返点是真的么?

阿里云代理商有哪些?阿里云代理返点是真的么?

一,阿里云代理商基本介绍阿里云代理商通俗一点,就是指从事阿里云云服务器,云数据库等阿里云公有云产品销售的代理商,每销售一件阿里云公有云产品出去,阿里云给予该代理商一定比例的提成。在阿里云官方定义中,这…

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

一、阿里云五级代理体系:权益阶梯与合作价值1. 五级代理的核心权益差异阿里云构建了多层次的代理生态体系,涵盖全国总代理、区域核心代理、行业ISV(独立软件开发商)、金牌/银牌认证代理及标准代理五大核心…