最近想运用免费的渠道布置springboot项目,经过筛选有以下服务商可供选择:
- heroku
- fly.io
- 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 在布置的时分履行的步骤:
- 从 GitHub 拉取源码
- 运用指定的 gradle 进行 build,生成
.jar
文件 - 履行
java -jar /app.jar
运转项目
我本身对 docker 不熟悉,经过了一些弯曲,终究完成了上面的步骤,成功跑起来了
#
# 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
把这个文件名添加进去
### VS Code ###
.vscode/
.env
这样这个文件就不会上传到 GitHub 了,然后在.env
填写上一步获取到的数据库相关信息
DB_HOST=gmp.zh.filess.io
DB_PORT=3307
DB_USER=authdb_replacedie
DB_PASSWORD=1f1fdfe1a0220bf5e822ef1a8d583b762d
DB=authdb_replacedie
合作项目配置文件 application.properties
spring.config.import=optional:file:.env[.properties]
DB_HOST: ${DB_HOST}
这样就能够正常的读取环境变量了
@Value("${DB_HOST}")
private String dbHost;
以上的内容都是针对本地的环境,因为.env
没有上传到 GitHub ,那么在 render.com 怎样读取?
在 render.com 打开项目,找到 Environment
,点击 Add Secret File
按钮,左侧写文件名 .env
右侧填写上内容保存好就能够了
这样在项目 build 的时分就能够读取到 .env
这个 secret 文件,这就实现了本地和布置环境的共同。而且虽然是开源项目,可是没有暴露关键信息。