V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Perolong
V2EX  ›  程序员

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

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

    我现在是将项目编译成 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   ·   实用小工具   ·   5347 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:33 · PVG 15:33 · LAX 23:33 · JFK 02:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.