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

2020-04-01 14:52:05 +08:00
 wuhuaji

由于工作需要,进入 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 。这样的一套组合。

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

请教大家

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

你理解的复杂可能是容器的编排与管理。在你访问量到一定规模之前,完全不会涉及。
wuhuaji
2020-04-01 15:37:57 +08:00
@vinsa 对,我说的复杂是容器编排打包管理这些,因为现在主要想了解原生部署实践,日后应用变大,自然会考虑 docker 来做
oneisall8955
2020-04-01 16:00:57 +08:00
两种都用过。war 包给 tomcat 管理,jar 包 JAVA 命令自己管理。自己新学的话,打 jar 包吧比较简单
qyvlik
2020-04-01 17:19:56 +08:00
推荐使用 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
2020-04-01 17:25:53 +08:00
花 1 天时间学一下 docker 的简单实用。然后直接上 docker 。
wuhuaji
2020-04-01 17:44:06 +08:00
@qyvlik 谢谢,很详细


@liqingcan docker 简单使用我会的:)
Cbdy
2020-04-01 18:07:30 +08:00
一般用 systemd + java -jar app.jar
或者 docker
我也见过用 pm2 的
kkkkkrua
2020-04-02 17:34:59 +08:00
@Cbdy #9 supervisor 呢。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/658309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX