请教一下,大家如何部署 springboot 后端程序,请给出您的建议。ありがとうございます。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mengjisang
V2EX    Java

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

  •  
  •   mengjisang 2023-05-04 13:01:31 +08:00 6008 次点击
    这是一个创建于 972 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    容器化部署:打包成 image

    按需编写启动的 shell 脚本
        8
    OysterQAQ  
       2023-05-04 13:23:12 +08:00
    @nba2k9 散装日语
    iloveayu
        9
    iloveayu  
       2023-05-04 13:25:01 +08:00   1
    @nba2k9 因为楼主的日语是散装的。
    sensuzu
        10
    sensuzu  
       2023-05-04 13:30:22 +08:00
    日本人???
    LeegoYih
        11
    LeegoYih  
       2023-05-04 13:32:38 +08:00
    # Dockerfile

    FROM openjdk
    COPY *.jar /app.jar
    EXPOSE 8080
    ENTRYPOINT ["sh","-c","java -Dspring.profiles.active=prod -jar /app.jar"]
    siweipancc
        12
    siweipancc  
       2023-05-04 13:43:45 +08:00 via iPhone   3
    包它哥一百层,启动参数还是土的一行,要不转行销售吧
    blankmiss
        13
    blankmiss  
       2023-05-04 13:46:05 +08:00
    你是霓虹人 为什么不用 docker 部署
    superedlimited
        14
    superedlimited  
       2023-05-04 13:47:36 +08:00 via iPhone
    我竟然看懂了前面的阿里嘎多
    salmon5
        15
    salmo5  
       2023-05-04 14:01:24 +08:00   1
    vm 部署:java -jar test.jar ,通过 supervisor 或者 systemd 包一层也行
    容器部署:打包成容器镜像
    就这 2 种方式
    mengjisang
        16
    mengjisang  
    OP
       2023-05-04 14:03:29 +08:00
    谢谢大家的建议,OP 颇受启发
    cslive
        17
    cslive  
       2023-05-04 14:13:52 +08:00
    tomcat
    SuperShuYe
        18
    SuperShuYe  
       2023-05-04 14:20:32 +08:00
    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
        19
    hengyunabc  
       2023-05-04 14:39:45 +08:00   6
    spring boot 其实自带一套 service 机制,jar 本身就是一个脚本,打包时配置下就好: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment.installing

    原理: https://hengyun.tech/spring-boot-executable-jar/
    clf
        20
    clf  
       2023-05-04 14:41:42 +08:00
    docker 本质是打包成 jar

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

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

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

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

    第二次是个老手

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

    第三次你自己动

    让 jenkins 定时拉代码,自己重复第二次的动作
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3621 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 05:19 PVG 13:19 LAX 21:19 JFK 00:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86