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

2023年 8月 7日 90.2k 0

最近想利用免费的平台部署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 右侧填写上内容保存好就可以了

    image.png

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

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论