HCRM博客

一键部署CentOS7 SpringBoot Jar包至无Tomcat环境

CentOS7无Tomcat部署SpringBoot jar包脚本

把 jar 直接跑在系统上,比套一层 Tomcat 省事得多。CentOS7 自带 systemd,写个 service 文件就能开机自启、崩溃自启,日志走 journalctl,一条命令看全量。下面这份脚本,从创建用户到防火墙放行,一条链打通,复制粘贴就能用。

一键部署CentOS7 SpringBoot Jar包至无Tomcat环境-图1

一、准备运行用户

root 跑 jar 是大忌,先给应用单独建用户,没登录 shell,想删就删。

groupadd -r app

useradd -r -g app -s /sbin/nologin -d /opt/app -m app

一键部署CentOS7 SpringBoot Jar包至无Tomcat环境-图2

二、上传 jar 并定目录

统一丢到 /opt/app,改名不带版本号,方便脚本里写死路径。

mv demo-0.0.1-SNAPSHOT.jar /opt/app/app.jar

chown app:app /opt/app/app.jar

chmod 500 /opt/app/app.jar

一键部署CentOS7 SpringBoot Jar包至无Tomcat环境-图3

三、最小化 JVM 参数

1 核 2 G 的云主机够跑大多数接口,先给 512 M,后期压测再调。

JAVA_OPTS="-Xms512m -Xmx512m -XX:+UseG1GC -XX:+UseStringDeduplication"

四、systemd 服务文件

路径固定 /etc/systemd/system/app.service,内容如下,**注意 ExecStart 里 jar 路径要写全**。

[Unit]

Description=SpringBoot App

After=network.target

[Service]

Type=simple

User=app

Group=app

WorkingDirectory=/opt/app

ExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/app/app.jar

SuccessExitStatus=143

Restart=on-failure

RestartSec=10

[Install]

WantedBy=multi-user.target

写完 reload 一下让 systemd 识别:

systemctl daemon-reload

五、防火墙只开必要端口

默认 8080,改端口在 application.properties 里加 server.port=新端口。

firewall-cmd --permanent --add-port=8080/tcp

firewall-cmd --reload

六、启停命令合集

一条启动:

systemctl start app

看实时日志:

journalctl -u app -f

开机自启:

systemctl enable app

七、平滑升级脚本

上传新 jar 后,三秒完成热替换。

#!/bin/bash

set -e

cp /opt/app/app.jar /opt/app/app.jar.bak

mv /tmp/new-app.jar /opt/app/app.jar

chown app:app /opt/app/app.jar

systemctl restart app

老版本回滚:

mv /opt/app/app.jar.bak /opt/app/app.jar

systemctl restart app

八、常见坑速查

  • **端口被占用**:lsof -i:8080 直接杀进程。
  • **启动慢**:加 -Djava.security.egd=file:/dev/./urandom 提速。
  • **日志乱码**:在 systemd 文件里加 Environment="LANG=zh_CN.UTF-8"。
  • **内存溢出**:先 top 看 RES,再 jmap -heap 查各区占比。

九、一键完整脚本

把下面整段丢进 install.sh,chmod +x 后直接跑,**五分钟出结果**。

#!/bin/bash

set -e

APP_NAME=app

APP_PORT=8080

APP_USER=app

APP_GROUP=app

APP_DIR=/opt/app

JAR_NAME=$APP_DIR/app.jar

groupadd -r $APP_GROUP || true

useradd -r -g $APP_GROUP -s /sbin/nologin -d $APP_DIR -m $APP_USER || true

mv *.jar $JAR_NAME

chown $APP_USER:$APP_GROUP $JAR_NAME

chmod 500 $JAR_NAME

cat >/etc/systemd/system/$APP_NAME.service <<'EOF'

[Unit]

Description=SpringBoot App

After=network.target

[Service]

Type=simple

User=app

Group=app

WorkingDirectory=/opt/app

ExecStart=/usr/bin/java -Xms512m -Xmx512m -XX:+UseG1GC -jar /opt/app/app.jar

SuccessExitStatus=143

Restart=on-failure

RestartSec=10

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

systemctl enable $APP_NAME

systemctl start $APP_NAME

firewall-cmd --permanent --add-port=$APP_PORT/tcp

firewall-cmd --reload

echo "Deploy done. Check: journalctl -u $APP_NAME -f"

CentOS7 无 Tomcat 跑 SpringBoot,**核心就是 systemd 托管 + 普通用户隔离 + 防火墙最小化**。脚本固化后,上线、回滚、排查都一条命令,再也不用折腾臃肿的容器。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/41753.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~