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

相关推荐
Code季风33 分钟前
Spring Bean的生命周期详解
java·spring boot·spring
code喵喵1 小时前
docker-compose安装常用中间件
docker·中间件·容器
万能小锦鲤1 小时前
《Java EE与中间件》实验三 基于Spring Boot框架的购物车
java·spring boot·mysql·实验报告·购物车·文档资源·java ee与中间件
麦兜*1 小时前
【Spring Boot】Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册
java·人工智能·spring boot·后端·spring·架构
山岚的运维笔记1 小时前
AlpineLinux使用docker部署prometheus
docker·容器·prometheus
全栈凯哥2 小时前
20.缓存问题与解决方案详解教程
java·spring boot·redis·后端·缓存
源码云商2 小时前
基于 SpringBoot + Vue 的 IT 技术交流和分享平台的设计与实现
vue.js·spring boot·后端
咚咚?2 小时前
docker 启动中间件
docker·中间件·容器
csdn_aspnet3 小时前
在 Docker 上安装和配置 Kafka、选择用于部署 Kafka 的操作系统
docker·kafka
乌托邦的逃亡者8 小时前
Docker的/var/lib/docker/目录占用100%的处理方法
运维·docker·容器