使用 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 文件,这就实现了本地和部署环境的一致。而且虽然是开源项目,但是没有暴露关键信息。

相关推荐
小雨的光4 小时前
QuickEsView
spring boot·elasticsearch·es可视化
韩立学长4 小时前
基于Springboot的旧物公益捐赠管理系统3726v22v(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
Dyan_csdn4 小时前
springboot系统设计选题3
java·spring boot·后端
醉卧雕龙舫 、4 小时前
七.Docker网络
docker
小坏讲微服务5 小时前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s
Aimyon_366 小时前
MinerU Docker自定义版本部署
运维·docker·容器
小雨的光6 小时前
QuickActuator
spring boot·actuator·实例监控
chxii7 小时前
Spring Boot 中,内嵌的 Servlet 容器(也称为嵌入式 Web 服务器)
spring boot·servlet
梁正雄7 小时前
19、docker跨主机网络 Overlay\Underlay
网络·docker·容器
李白的粉8 小时前
基于springboot的新闻资讯系统
java·spring boot·毕业设计·课程设计·源代码·新闻资讯系统