V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wuhuaji
V2EX  ›  问与答

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

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

    由于工作需要,进入 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 来做
    oneisall8955
        5
    oneisall8955  
       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   ·   实用小工具   ·   2766 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:29 · PVG 16:29 · LAX 00:29 · JFK 03:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.