温馨提示×

Debian Java服务怎么部署

小樊
48
2026-07-30 13:40:29
栏目: 编程语言

在 Debian 上部署 Java 服务,常见做法有 直接运行 JAR使用 systemd 管理通过 Docker 等。下面给你一套生产环境常用、最稳妥的流程(以 Spring Boot JAR 为例,其他 Java 程序同理)。


一、准备环境

1️⃣ 更新系统

sudo apt update && sudo apt upgrade -y

2️⃣ 安装 Java(推荐 JDK 17 / 11)

# 查看可用版本
apt search openjdk

# 安装 JDK 17
sudo apt install openjdk-17-jdk -y

验证:

java -version

二、上传并运行 Java 服务

1️⃣ 创建专用用户(推荐)

sudo useradd -r -s /usr/sbin/nologin appuser

2️⃣ 创建目录

sudo mkdir -p /opt/myapp
sudo chown appuser:appuser /opt/myapp

3️⃣ 上传 JAR 包

scp myapp.jar user@server:/opt/myapp/

或直接在服务器:

/opt/myapp/myapp.jar

4️⃣ 测试运行

java -jar /opt/myapp/myapp.jar

✅ 能正常启动后,继续下一步


三、使用 systemd 管理 Java 服务(推荐)

1️⃣ 创建 systemd 服务文件

sudo nano /etc/systemd/system/myapp.service

示例内容:

[Unit]
Description=My Java Application
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/myapp/myapp.jar
SuccessExitStatus=143
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

-Xms -Xmx 可按服务器内存调整
SuccessExitStatus=143 防止 Spring Boot 正常关闭被当成失败


2️⃣ 重载并启动服务

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp

3️⃣ 查看状态与日志

systemctl status myapp
journalctl -u myapp -f

四、配置端口与防火墙

开放端口(如 8080)

sudo ufw allow 8080/tcp

查看:

sudo ufw status

五、使用配置文件(推荐)

1️⃣ 外部配置文件

/opt/myapp/application.yml

启动时指定:

java -jar myapp.jar --spring.config.location=/opt/myapp/application.yml

或 systemd:

ExecStart=/usr/bin/java -jar /opt/myapp/myapp.jar --spring.config.location=/opt/myapp/application.yml

六、Docker 方式(可选)

1️⃣ 安装 Docker

sudo apt install docker.io -y
sudo systemctl enable docker

2️⃣ 示例 Dockerfile

FROM openjdk:17-jdk-slim
COPY myapp.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

3️⃣ 构建并运行

docker build -t myapp .
docker run -d -p 8080:8080 --name myapp myapp

七、常见问题排查

Java 找不到?

which java
update-alternatives --config java

服务启动失败?

journalctl -u myapp --no-pager

内存不足?

free -h

调整 -Xmx


八、总结(推荐方案)

生产环境推荐

  • Debian
  • systemd
  • 专用用户
  • 外部配置
  • 日志用 journalctl

如果你愿意,我可以:

  • ✅ 按 Spring Boot / 普通 Java / Netty 给你定制配置
  • ✅ 帮你写 完整部署脚本
  • ✅ 教你 Nginx + Java 反向代理

你现在用的是 Spring Boot 还是普通 Java 程序

0