mengjisang
V2EX  ›  Java

请教一下,大家如何部署 springboot 后端程序,请给出您的建议。ありがとうございます。

  •  
  •   mengjisang · May 4, 2023 · 6997 views
    This topic created in 1288 days ago, the information mentioned may be changed or developed.

    ,我知道可以 java -jar xxx.jar 跑程序,但是感觉太散装了,tmux 方便调试,却不是合理的运维方式

    46 replies  •  2023-05-12 17:51:09 +08:00
    nba2k9
    nba2k9
    May 4, 2023
    1
    这个主题为什么会有一个 [散装] 的标签
    goofish
    goofish
    May 4, 2023
    2
    看你部署环境,一般虚拟机就是 java -jar 启动跑的,还能怎么跑。如果是 k8s 环境的话就是打包成容器镜像再部署。看看官网的 prod 环境部署最佳实践吧
    zliea
    zliea
    May 4, 2023
    3
    1. nohup+java -jar
    2. 模拟写一个 systemd 的 service 文件
    3. docker
    dushixiang
    dushixiang
    May 4, 2023
    4
    建议使用系统服务的方式启动,这样挂了自动拉起,开机自启动啥的都搞定了。
    voidmnwzp
    voidmnwzp
    May 4, 2023 via iPhone
    5
    ?日本人?
    cookii
    cookii
    May 4, 2023 via Android
    6
    宿主机启动,service 启动,docker 启动最后本质不都是 Java -jar 吗,除非你打成 native 包
    deadlyn
    deadlyn
    May 4, 2023
    7
    部署 VM 一般就打包:
    1 、整个 jar
    2 、利用诸如 assembly 打包成 zip ,分离自己的业务 jar 、三方 sdk 、外置资源配置(后续根据变动情况,可仅替换变动的部分,如常变动的业务 jar )

    容器化部署:打包成 image

    按需编写启动的 shell 脚本
    OysterQAQ
    OysterQAQ
    May 4, 2023
    8
    @nba2k9 散装日语
    iloveayu
    iloveayu
    May 4, 2023❤️1
    9
    @nba2k9 因为楼主的日语是散装的。
    sensuzu
    sensuzu
    May 4, 2023
    10
    日本人???
    LeegoYih
    LeegoYih
    May 4, 2023
    11
    # Dockerfile

    FROM openjdk
    COPY *.jar /app.jar
    EXPOSE 8080
    ENTRYPOINT ["sh","-c","java -Dspring.profiles.active=prod -jar /app.jar"]
    siweipancc
    siweipancc
    May 4, 2023 via iPhone❤️3
    12
    包它哥一百层,启动参数还是土的一行,要不转行销售吧
    blankmiss
    blankmiss
    May 4, 2023
    13
    你是霓虹人🐎 为什么不用 docker 部署
    superedlimited
    superedlimited
    May 4, 2023 via iPhone
    14
    我竟然看懂了前面的阿里嘎多😹
    salmon5
    salmon5
    May 4, 2023❤️1
    15
    vm 部署:java -jar test.jar ,通过 supervisor 或者 systemd 包一层也行
    容器部署:打包成容器镜像
    就这 2 种方式
    mengjisang
    mengjisang
    OP
    May 4, 2023
    16
    谢谢大家的建议,OP 颇受启发
    cslive
    cslive
    May 4, 2023
    17
    tomcat
    SuperShuYe
    SuperShuYe
    May 4, 2023
    18
    from chatgpt
    当您部署 SpringBoot 后端程序时,以下是一些建议:

    使用开发环境中的配置文件 - SpringBoot 包含了一些内置的配置文件,可以方便开发者对基础配置项进行设置,例如 application.properties 或者 application.yaml 这些文件。其中,application.properties 支持 key-value 键值对的方式,并且是默认使用的配置文件。如果您需要更复杂的配置,可以使用 application.yaml ,这是使用 YAML 文件格式的配置文件。

    在生产环境中使用外部配置文件 - 要部署 SpringBoot 应用程序到生产环境中,可以使用外部配置文件来配置应用程序的选项。这样可以更方便地进行部署和更新操作,因为外部配置文件可以在应用程序启动之前进行更改。

    使用系统变量来配置应用程序 - 很多应用程序的配置选项是可以通过系统变量进行配置的。这样可以更方便地进行修改和部署,同时也可以避免一些机密信息暴露在配置文件中。

    使用 Docker 部署 - Docker 是一个流行的容器化平台,可以帮助您更轻松地进行部署和管理。使用 Docker 部署 SpringBoot 应用程序可以帮助您在不同环境中保持应用程序的稳定性和可靠性。

    使用自动化工具进行持续集成和部署 - 自动化工具可以帮助您更快速地进行持续集成和部署。一些流行的自动化工具包括 Jenkins 、CircleCI 和 Travis CI 等。这些工具可以帮助您自动化构建、测试和部署应用程序,以及自动化修改和合并代码。

    希望以上建议能帮助您更好地部署 SpringBoot 后端程序。
    hengyunabc
    hengyunabc
    May 4, 2023❤️6
    19
    spring boot 其实自带一套 service 机制,jar 本身就是一个脚本,打包时配置下就好: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment.installing

    原理: https://hengyun.tech/spring-boot-executable-jar/
    clf
    clf
    May 4, 2023
    20
    docker 本质是打包成 jar

    我们会用 jib 来打包上传 docker 镜像。
    cheng6563
    cheng6563
    May 4, 2023
    21
    不还是老办法老办法,docker ,systemd ,service 啊。
    zhiyu1998
    zhiyu1998
    May 4, 2023
    22
    @superedlimited #14 阿里嘎多 3Q 思密达,我太喜欢白嫖了
    deorth
    deorth
    May 4, 2023 via Android
    23
    君日本語本当上手
    mengjisang
    mengjisang
    OP
    May 4, 2023
    24
    @deorth 君の日本語は上手ですね
    mengjisang
    mengjisang
    OP
    May 4, 2023
    25
    @hengyunabc 谢谢老哥,这是我一直以来忽略的官方文档
    shanghai1943
    shanghai1943
    May 4, 2023
    26
    java service wrapper. 也是你们日本人开发的。
    Arumoh
    Arumoh
    May 4, 2023
    27
    直接写了个脚本管理部署、更新、运行、回滚
    RRRoger
    RRRoger
    May 4, 2023
    28
    打个 jar 包 使用 pm2 管理进程
    DosLee
    DosLee
    May 4, 2023
    29
    @zliea 关于第二点。我记得 springboot 是支持把我自己注册为一个服务的,不过需要新增一个同 jar 名一样的配置文件,然后直接 jar 名称+start 就能启动了
    xuanbg
    xuanbg
    May 4, 2023
    31
    做一个有 JDK 的 docker 镜像,然后把 jar 包放进去再生成一个镜像上传镜像仓库,或者上传 jar 包到服务器上生成镜像都是可以的。
    Narcissu5
    Narcissu5
    May 4, 2023
    32
    springboot 的官方文档专门有一章讲部署的。包含部署到云,部署为 linux 服务等等
    cbdyzj
    cbdyzj
    May 4, 2023
    34
    systemd 方案
    screen/temux 方案
    supervisor/pm2 方案
    docker/k8s 方案

    主流的四种方案
    adoal
    adoal
    May 4, 2023 via iPhone
    35
    以上都是 fat jar 的方法。还可以 build 成 war ,用传统的 tomcat 方法启动。
    cquan
    cquan
    May 4, 2023
    36
    我一般用宝塔
    wdlth
    wdlth
    May 4, 2023
    37
    我们这边是用 Docker 分层
    OutOfMemoryError
    OutOfMemoryError
    May 5, 2023
    38
    @nba2k9 标签是啥插件啊
    zu1y
    zu1y
    May 5, 2023
    39
    用 gradle application plugin ,可以生成个启动脚本
    Dlin
    Dlin
    May 5, 2023
    40
    我目前有使用三种方式打包 docker ,
    1 、直接 mvn package 打一个胖包后配合 dockerfile 生成镜像
    2 、使用 spring-boot 官方的 maven 插件中的构建镜像,使用的是 paketobuild ,这个比较方便,但是国内的高墙让整个团队使用是不太友好的。
    3 、因此第三种是使用谷歌的 jib 插件,这个打包也很方便,不需要写 dockerfile ,生成的也不是一个单独的胖包,方便查看和

    以上 2 和 3 因为通过 maven 插件打包,可以很好的利用 maven 得 profile 来激活一些配置或者参数,2 也自带一些优化项(具体我也没有去了解有哪些优化项)
    dif
    dif
    May 5, 2023
    41
    Jenkins 配合 shell 脚本,或者直接打成 docker 镜像部署。
    yodhcn
    yodhcn
    May 5, 2023 via Android
    42
    @Dlin [胖包] 是什么意思?
    LXGMAX
    LXGMAX
    May 5, 2023
    43
    哟西,大大滴干活
    mengjisang
    mengjisang
    OP
    May 5, 2023
    44
    @LXGMAX  良し
    Dlin
    Dlin
    May 5, 2023
    45
    @yodhcn fat jar
    zengyufei
    zengyufei
    May 12, 2023
    46
    第一次没啥经验

    maven package
    进入 target 复制 jar 包
    上传到 linux 服务器
    安装 k3s
    执行 k3s 的 deployment.yaml

    第二次是个老手

    docker 运行 jenkins
    jenkins 帮我拉代码
    jenkins 帮我 maven package
    jenkins 上传 jar 包到 linux 服务器(其他目标机器)
    jenkins 帮我执行 deployment.yaml

    第三次你自己动

    让 jenkins 定时拉代码,自己重复第二次的动作
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4337 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 158ms · UTC 08:54 · PVG 16:54 · LAX 00:54 · JFK 03:54
    ♥ Do have faith in what you're doing.