请问 Spring Boot 网站部署最佳实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wuhuaji
V2EX    问与答

请问 Spring Boot 网站部署最佳实践

  •  
  •   wuhuaji 2020-04-01 14:52:05 +08:00 3308 次点击
    这是一个创建于 2087 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于工作需要,进入 Java 领域,但有 PHP 后端经验,使用 Spring Boot 开发了一个网站,现在部署有些问题,想请教一下。

    查了一下资料,似乎分为两大派,jar 包和 war 包。其中 jar 包中包含了 tomcat; war 则不包含,需要在服务器部署好 tomcat,再把 war 放到对应的位置。

    那么看来,jar 包是更便捷的,直接 java -jar 就可以运行。又因为不能直接前台运行,就需要 nohup 把其放入后台。

    又查到,可以通过 spring-boot-maven-plugin 插件,把 jar 包打包成可执行文件,放入系统自起动中 /etc/init.d,还可以通过 start | stop | restart 等命令控制。

    我又想到可以在前端放一个 Nginx,转发给 tomcat,能提升性能。

    所以我现在的做法是,打包成 jar 包可执行文件 -> 配置开机自起 + Nginx 接受请求转发给 tomcat 。这样的一套组合。

    想请问这是否是最佳实践,还有什么需要注意的么?比如像日志、报错啥的怎么处理?

    请教大家

    10 条回复    2020-04-02 17:34:59 +08:00
    vinsa
        1
    vinsa  
       2020-04-01 15:10:07 +08:00   1
    用 google jib 编译成 docker image
    wuhuaji
        2
    wuhuaji  
    OP
       2020-04-01 15:23:27 +08:00
    @vinsa 谢谢,后期可能会上 docker, 不过现在还不想太复杂,先把基本的搞清楚了。
    vinsa
        3
    vinsa  
       2020-04-01 15:33:02 +08:00   1
    @wuhuaji 非常简单啊,服务器安装好 docker,就 OK 了。 比你写 shell 启停脚本还简单。
    额外的好处:更新部署快。 每次更新,大部分情况下都只需传输 class 文件那层,估计几百 K 。因为 lib/静态文件之类的都被 docker image 分层缓存了。

    你理解的复杂可能是容器的编排与管理。在你访问量到一定规模之前,完全不会涉及。
    wuhuaji
        4
    wuhuaji  
    OP
       2020-04-01 15:37:57 +08:00
    @vinsa 对,我说的复杂是容器编排打包管理这些,因为现在主要想了解原生部署实践,日后应用变大,自然会考虑 docker 来做
    itechify
        5
    itechify  
    PRO
       2020-04-01 16:00:57 +08:00 via Android   1
    两种都用过。war 包给 tomcat 管理,jar 包 JAVA 命令自己管理。自己新学的话,打 jar 包吧比较简单
    qyvlik
        6
    qyvlik  
       2020-04-01 17:19:56 +08:00   2
    推荐使用 docker,这样不管输出的 jar 还是 war 问题都不大
    1. 为你的 spring-boot 项目编写 Dockerfile (可以包含 spring-boot 的打包命令)
    2. 创建 {project}-docker 的 git 项目,这样就可以将编排文件进行代码跟踪
    1. docker-compose.yml 文件
    2. nginx 的 config 文件
    3. .env 文件,管理关键变量,可以通过 docker 注入到 spring-boot 的运行环境
    4. 其他敏感信息用 docker secret 或者加密文件的方式处理
    3. linux 系统 + docker + docker-compose + git
    4. mysql 、redis 、消息队列等 最好不要包含在 {project}-docker,这样就可以方便的在不同的服务器上部署,迁移。

    部署的时候,配置好系统和 docker 、docker-compose 、git 公钥,创建好目录,如下三行命令就可以在配置好的服务器上启动你的 spring-boot
    ```bash
    git clone {project}-docker
    cd {project}-docker
    docker-compose up
    ```
    liqingcan
        7
    liqingcan  
       2020-04-01 17:25:53 +08:00   1
    花 1 天时间学一下 docker 的简单实用。然后直接上 docker 。
    wuhuaji
        8
    wuhuaji  
    OP
       2020-04-01 17:44:06 +08:00
    @qyvlik 谢谢,很详细


    @liqingcan docker 简单使用我会的:)
    Cbdy
        9
    Cbdy  
       2020-04-01 18:07:30 +08:00   1
    一般用 systemd + java -jar app.jar
    或者 docker
    我也见过用 pm2 的
    kkkkkrua
        10
    kkkkkrua  
       2020-04-02 17:34:59 +08:00
    @Cbdy #9 supervisor 呢。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2806 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by soliude
    VERSION: 3.9.8.5 31ms UTC 14:25 PVG 22:25 LAX 06:25 JFK 09:25
    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