新手免费部署 Spring Boot,该选 AWS Elastic Beanstalk 还是 Render?
结论
如果想以零预算学习部署,让 Vercel 上的 Angular 前端调用 Spring Boot API,可以先尝试 Render 的 Free Web Service,但要接受服务休眠和资源限制。Render 提供托管 TLS,可以直接使用 HTTPS 后端地址。Render Web Services 文档
如果想学习 AWS 的部署、证书和网络配置,可以选择 Elastic Beanstalk,但需要单独评估费用。Elastic Beanstalk 支持 HTTPS;目前拿到 HTTP 地址,不代表平台只能使用 HTTP。AWS HTTPS 配置文档
为什么前后端协议不一致会出问题?
当 Angular 页面通过 HTTPS 加载,却通过 HttpClient 请求公网 HTTP API 时,浏览器会将该请求视为 Mixed Content 并阻止。前端需要调用可正常访问的 HTTPS API 地址。MDN Mixed Content 说明
仅凭问题描述,还不能确定实际报错是否由 Mixed Content 导致,可以在浏览器开发者工具的 Console 和 Network 中检查。
CORS 是另一个问题:HTTPS 解决传输协议问题,CORS 决定浏览器是否允许跨源读取响应。即使后端放开 CORS,也无法解决 HTTPS 页面调用 HTTP API 的混合内容问题。
如何用 Render 完成学习部署?
1. 准备 Docker 部署
Render 官方建议 Java 等 JVM 应用使用 Docker。可以在仓库中提供用于构建和运行应用的 Dockerfile,然后创建 Web Service,选择 Docker 和 Free 实例。镜像中的 Java 版本需要与项目兼容。Render Docker 部署文档
如果项目还没有 Dockerfile,需要根据实际使用的 Maven 或 Gradle、Java 版本和 JAR 产物配置构建流程。原问题没有提供这些信息,因此不能直接套用固定版本的构建命令。
2. 配置监听端口
在 Spring Boot 的 application.properties 中加入:
server.address=0.0.0.0
server.port=${PORT:8080}
应用会读取平台提供的 PORT;本地未设置该变量时,使用 8080。Render 要求公开 HTTP 服务监听 0.0.0.0,并建议使用 PORT 指定的端口。Render 端口配置、Spring Boot 端口配置
Render 在入口终止 TLS,再通过 HTTP 转发给容器,因此通常不需要在 Spring Boot 内部额外配置 HTTPS 证书。Render 请求转发说明
3. 修改 Angular 的 API 地址
部署成功后,先直接访问后端已有接口,确认 HTTPS 地址可用,再修改前端实际使用的 API 配置。例如:
export const environment = {
production: true,
apiUrl: 'https://your-service.onrender.com'
};
示例中的域名是占位符,需要替换为自己的服务地址。确认业务代码读取了该配置后,重新部署 Angular。
4. 检查跨域访问
如果后端接口可以直接访问,但 Angular 请求出现 CORS 错误,需要在后端允许实际的 Vercel 前端来源,例如 https://your-project.vercel.app。来源应包含协议和域名,不包含页面路径。
具体配置取决于项目使用 Spring MVC、WebFlux 还是 Spring Security。如果启用了 Spring Security,还要确认预检请求没有被安全规则拦截。
免费方案有哪些限制?
Render 的 Free Web Service 连续 15 分钟没有入站流量后会休眠,下次访问需要等待唤醒。免费服务还受实例小时数、流量和构建额度限制,本地文件也不会持久保存。它适合学习和演示,不适合用于对持续可用性有要求的场景。Render 免费服务限制
使用零预算方案时,应确认选择了 Free 实例,并检查工作区费用设置。按当前规则,没有添加付款方式时,部分额度耗尽会导致服务暂停或停止新构建;添加付款方式后,部分超额使用可能产生费用。如果需要数据库,也要另查其免费期限,不能默认它与 Web Service 一样长期免费。Render 免费额度说明
如果继续使用 Elastic Beanstalk,怎么处理 HTTPS?
常见做法有两种:
- 对负载均衡环境配置 HTTPS listener 和证书。
- 对单实例环境,在实例上的代理服务器配置 HTTPS,并维护证书。
AWS 官方支持这两种方式,具体操作取决于当前环境类型。Elastic Beanstalk HTTPS 配置
Elastic Beanstalk 本身没有额外服务费,但 EC2、存储和负载均衡等底层资源可能收费。免费额度或抵扣资格应以自己的账户为准,不能把它当作永久免费的部署方案。Elastic Beanstalk 定价说明
备注:内容仅供参考。
