目前部署 spring boot 有没有什么更为简便的方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Perolong
V2EX    程序员

目前部署 spring boot 有没有什么更为简便的方法

  •  1
     
  •   Perolong
    Notsfsssf 2019-08-22 14:22:16 +08:00 via Android 6590 次点击
    这是一个创建于 2244 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在是将项目编译成 jar,然后上传到服务器,然后 nohup java -jar xx.jar &,不算麻烦,也不算简单,因为想要更新 spring boot 项目的代码,就需要重新编译,重新上传到服务器,kill pid 上一个 8080 的进程,再重新打一遍指令,比起 caddy 部署前端的 react 项目可以直接拉取 git 项目更新,还是繁琐了一些,唯一解就是自己写个 python 脚本么?

    38 条回复    2023-01-12 14:52:53 +08:00
    chendy
        1
    chendy  
       2019-08-22 14:26:10 +08:00
    最简单就脚本搞定,最好再弄个 CI 自动跑
    最复杂就 k8s (或者类似的东西) + CI 跑脚本搞定
    Foxkeh
        2
    Foxkeh  
       2019-08-22 14:28:50 +08:00 via Android
    安装成系统服务
    luozic
        3
    luozic  
       2019-08-22 14:29:00 +08:00 via iPhone
    jenkins 开源的 还有闭源的 CI 工具,找一个抄一下跑,复杂点就是基于 CI+K8s+配置服务器 打镜像的方式玩部署。
    RYAN0UP
        4
    RYAN0UP  
       2019-08-22 14:29:13 +08:00 via Android
    可以用 pm2 管理
    LeeSeoung
        5
    LeeSeoung  
       2019-08-22 14:32:10 +08:00
    jenkins 或者自己写脚本 ssh 到远端机器部署,也可以上 docker,k8s 个人小型没必要上,维护工作量比较大。
    skycitygalaxy
        6
    skycitygalaxy  
       2019-08-22 14:32:35 +08:00
    看你这个需求,建议使用 docker-compose,把 yaml 文件写代码里面,每次拉代码编译+部署
    jorneyr
        7
    jorneyr  
       2019-08-22 14:32:54 +08:00
    如果使用 Gradle 的话,可以看看这个插件 org.hidetake.ssh
    GM
        8
    GM  
       2019-08-22 14:34:59 +08:00
    就你们现在的需求的话,直接编译成 war,上传到 tomcat 的 webapps 目录完事。
    Perolong
        9
    Perolong  
    OP
       2019-08-22 14:51:47 +08:00 via Android
    @skycitygalaxy 好的我试试
    KingPL
        10
    KingPL  
       2019-08-22 14:58:27 +08:00
    git 拉代码,docker 跑个 maven 编译,移动 jar,docker restart **java,单个项目目前这样玩
    ClutchBear
        11
    ClutchBear  
       2019-08-22 15:10:38 +08:00
    jenkins 自动拉取编译和部署
    然后自动执行 superviserctl restart springboot
    fakeJas0n
        12
    fakeJas0n  
       2019-08-22 15:20:18 +08:00
    @jorneyr #7 这个不错
    yannxia
        13
    yannxia  
       2019-08-22 15:28:39 +08:00
    单机 docker,然后 docker stop && docker run,玩的花一点的就像楼上 @KingPL 挂载 Vol,然后 Restart
    registerrr
        14
    registerrr  
       2019-08-22 15:32:13 +08:00 via Android
    跟你现在的部署方式一一样…
    lihongjie0209
        15
    lihongjie0209  
       2019-08-22 15:33:14 +08:00
    可以使用 tmux 来替代 nohup, 上传 jar 包这个动作无法避免的, 只是看你上传到哪里, 如果你有 nexus 之类的私有仓库, 可以在本地直接 deploy 上去, 然后脚本 wget 就好了。


    分享一个 tmux 脚本, 杀死之前的进程并重新启动

    (tmux kill-session -t app || true) && tmux new-session -d -s app "java -Dlog4j.cOnfiguration=log4j-pro.properties -jar /opt/app.jar “”
    xuanbg
        16
    xuanbg  
       2019-08-22 15:39:41 +08:00
    自然是 Jenkins+docker,先 maven 打包,然后 docker build 制作镜像,push 到私有仓库后在服务器上面 run 就好了。
    qwerthhusn
        17
    qwerthhusn  
       2019-08-22 15:41:51 +08:00
    可以使用不打 jar 包的方式
    qwerthhusn
        18
    qwerthhusn  
       2019-08-22 15:42:25 +08:00
    这样如果想更新某个 class 或者某个文件,就不用重新打包浪费时间
    kaiser1992
        19
    kaiser1992  
       2019-08-22 15:54:33 +08:00
    1.上传到 git 仓库;
    2.脚本读取源码,然后 build;
    3.运行
    cyril4free
        20
    cyril4free  
       2019-08-22 16:07:42 +08:00
    gitlab+CI/CD
    lllllliu
        21
    lllllliu  
       2019-08-22 16:36:00 +08:00
    github/gitlab 有 webhook 呀,最简单的就是 push 之后触发 hook 然后,你可以写个脚本让他操作你想要做的事情。
    liiihhhh
        23
    liiihhhh  
       2019-08-22 17:00:49 +08:00
    上传 jar,pm2 start
    limuyan44
        24
    limuyan44  
       2019-08-22 17:10:57 +08:00
    以前搞过一个项目我写了个 shell,更新的时候 sh xx.sh 就好了。 拉代码-编译-打包-停服务-上传 jar-启动。
    wongy
        25
    wongy  
       2019-08-22 17:26:14 +08:00
    用的 appassembler-maven-plugin 打包成 tar.gz 超级实用。去年面了很多家公司,问了一下打包发布方式都是 jar。

    去过一家公司用 docker 打包部署。
    Seney
        26
    Seney  
       2019-08-22 17:30:19 +08:00
    我是用 gitlab 代码推送到服务器就开始 build 然后 deploy
    Unbelievable9
        27
    Unbelievable9  
       2019-08-22 17:35:54 +08:00
    在 system.d 加入你的服务 相关配置可以参考 https://stackoverflow.com/questions/21503883/spring-boot-application-as-a-service
    StarkWhite
        28
    StarkWhite  
       2019-08-22 18:12:44 +08:00
    热部署或热更新。
    不过貌似 java 没有好的热部署方案,之前这个帖子讨论过了,里面 v 友给了好几种方案

    Java 是不是没有好的热部署方案?
    https://v2ex.com/t/585647
    mritd
        29
    mritd  
       2019-08-22 18:26:36 +08:00 via iPhone
    Docker + ci
    JasperWong
        30
    JasperWong  
       2019-08-22 18:30:47 +08:00
    jenkins
    JRay
        31
    JRay  
       2019-08-22 19:39:54 +08:00
    jenkins + 1
    br00k
        32
    br00k  
       2019-08-22 20:32:13 +08:00
    不想麻烦,又想简单。就直接在部署的服务器上部署一个 Jenkins 就好了,更新的时候就不用上传了。
    liuxey
        33
    liuxey  
       2019-08-23 09:17:40 +08:00
    大致四步吧

    git pull
    maven package
    docker build
    docker run

    另外:gitlab ci/cd 很好用
    print1024
        34
    print1024  
       2019-08-23 10:35:10 +08:00
    本地的话用这个:
    wagon-maven-plugin
    能直接上传到服务器并且可以配置命令
    springboot 建议三方依赖和业务代码分离打包
    StarkWhite
        35
    StarkWhite  
       2019-08-23 12:24:15 +08:00
    我公司也在用 Jenkins 自动打包
    haitongz
        36
    haitongz  
       2019-08-23 13:20:26 +08:00
    考虑到可运维性最好使用专门的发布系统,简单点也可以使用 Jenkins/Gitlab
    配合 ansible 脚本能够比较方便的上线和回滚
    另外可以搭建 nexus 或者 jfrog artifactory 免费版作为制品管理仓库,不用每次都从源码编译
    suijishu
        37
    suijishu  
       2019-08-23 13:37:13 +08:00
    使用阿里云效,20 人以内免费,现在公司的 8 个服务,都是用这个发布。特方便,可以试试。
    hongye
        38
    hongye  
       2023-01-12 14:52:53 +08:00
    有个疑问,为什么都想用 docker 包一层,不像安装 jdk 环境?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     954 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:28 PVG 03:28 LAX 12:28 JFK 15:28
    Do have faith in what you're doing.
    ubao 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