使用 render.com 免费部署 springboot 项目

最近想利用免费的平台部署springboot项目,经过筛选有以下服务商可供选择:

  1. heroku
  2. fly.io
  3. render.com

下面做一些对比:

平台 支持 限制
heroku.com 大部分都支持 需要绑定信用卡,好像已经没有免费时长了
fly.io Node、Python、Laravel、Go、Ruby 、Docker 最多3个共享的cpu-1 * 256mb虚拟机,3GB持久卷存储,160GB对外流量
render.com Node、Python、Go、Ruby、PHP、Docker 带宽 100 GB,构建时间500分钟/month,保留 5 个 build 成功后的应用可供回滚

heroku 是比较老牌的了,16 年的时候就用过,里面还可以使用免费的数据库

fly.io 看着也不错,但是必须要使用客户端进行主动发版,而 render.com 可以导入 github 上面的项目,提交后实现自动化部署,最方便了,所以最终选的是 render.com

注册和导入项目

打开 render.com 后使用 GitHub 账户登录,授权后就可以导入项目了。

支持的语言种类挺多的:

感觉 Node.js 可以选的平台真的好多

新建 springboot 项目

从上图我们可以看到,render 本身不支持 java 项目,那么就要利用 Docker 了。

首先去 start.spring.io/ 生成个最简单的spring boot项目:

下载后可以在本地成功运行,可以正常访问接口,下一步部署到 render 上

制作 docker 镜像

首先我们梳理一下想要 render.com 在部署的时候执行的步骤:

  1. 从 GitHub 拉取源码
  2. 使用指定的 gradle 进行 build,生成 .jar 文件
  3. 执行 java -jar /app.jar 运行项目

我本身对 docker 不熟悉,经过了一些曲折,最终完成了上面的步骤,成功跑起来了

Dockerfile 复制代码
#
# Build stage
#
FROM gradle:jdk17-jammy AS build
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build --no-daemon

LABEL org.name="hezf"
#
# Package stage
#
FROM eclipse-temurin:17-jdk-jammy
COPY --from=build /home/gradle/src/build/libs/docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

这个例子源码在 GitHub

环境变量

很多时候我们后端项目需要链接数据库,但是这些信息肯定是需要隐藏起来的,千万不要传到 GitHub 上

我在filess 新建了个 MySQL 实例,在本地使用 navicat 成功连上了,当然了这个数据库也是免费的

首先我们在 springboot 项目根目录,新建个 .env 文件,然后在.gitignore把这个文件名添加进去

.gitignore 复制代码
### VS Code ###
.vscode/

.env

这样这个文件就不会上传到 GitHub 了,然后在.env填写上一步获取到的数据库相关信息

ini 复制代码
DB_HOST=gmp.zh.filess.io
DB_PORT=3307
DB_USER=authdb_replacedie
DB_PASSWORD=1f1fdfe1a0220bf5e822ef1a8d583b762d
DB=authdb_replacedie

配合项目配置文件 application.properties

application.properties 复制代码
spring.config.import=optional:file:.env[.properties] 

DB_HOST: ${DB_HOST}

这样就可以正常的读取环境变量了

kotlin 复制代码
  @Value("${DB_HOST}")
  private String dbHost;

以上的内容都是针对本地的环境,因为.env没有上传到 GitHub ,那么在 render.com 怎么读取?

render.com 打开项目,找到 Environment ,点击 Add Secret File 按钮,左侧写文件名 .env 右侧填写上内容保存好就可以了

这样在项目 build 的时候就可以读取到 .env 这个 secret 文件,这就实现了本地和部署环境的一致。而且虽然是开源项目,但是没有暴露关键信息。

相关推荐
初次攀爬者5 小时前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840825 小时前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解7 小时前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
fetasty10 小时前
rustfs加picgo图床搭建
docker
蝎子莱莱爱打怪1 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
初次攀爬者1 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺1 天前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart1 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
Nyarlathotep01131 天前
SpringBoot Starter的用法以及原理
java·spring boot
小p2 天前
docker学习7:docker 容器的通信方式
docker