由于工作需要,进入 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 。这样的一套组合。
想请问这是否是最佳实践,还有什么需要注意的么?比如像日志、报错啥的怎么处理?
请教大家
1
vinsa 2020-04-01 15:10:07 +08:00 1
用 google jib 编译成 docker image
|
3
vinsa 2020-04-01 15:33:02 +08:00 1
@wuhuaji 非常简单啊,服务器安装好 docker,就 OK 了。 比你写 shell 启停脚本还简单。
额外的好处:更新部署快。 每次更新,大部分情况下都只需传输 class 文件那层,估计几百 K 。因为 lib/静态文件之类的都被 docker image 分层缓存了。 你理解的复杂可能是容器的编排与管理。在你访问量到一定规模之前,完全不会涉及。 |
4
wuhuaji OP @vinsa 对,我说的复杂是容器编排打包管理这些,因为现在主要想了解原生部署实践,日后应用变大,自然会考虑 docker 来做
|
5
oneisall8955 2020-04-01 16:00:57 +08:00 via Android 1
两种都用过。war 包给 tomcat 管理,jar 包 JAVA 命令自己管理。自己新学的话,打 jar 包吧比较简单
|
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 ``` |
7
liqingcan 2020-04-01 17:25:53 +08:00 1
花 1 天时间学一下 docker 的简单实用。然后直接上 docker 。
|
9
Cbdy 2020-04-01 18:07:30 +08:00 1
一般用 systemd + java -jar app.jar
或者 docker 我也见过用 pm2 的 |