在 Debian 上部署 Java 应用的标准流程
一 准备与安装 Java 运行时
- 更新索引并安装 OpenJDK(推荐 OpenJDK 11 LTS):
- 安装运行时或开发套件:sudo apt update && sudo apt install -y openjdk-11-jre 或 openjdk-11-jdk(也可使用 default-jdk 安装系统默认版本)
- 验证安装:java -version
- 设置环境变量(全局生效,便于脚本与系统识别):
- 编辑 /etc/environment:JAVA_HOME=“/usr/lib/jvm/java-11-openjdk-amd64”
- 使配置生效:source /etc/environment
- 验证:echo $JAVA_HOME
- 如需管理多版本 JDK,可使用 alternatives:
- 注册版本:sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 300
- 交互切换:sudo update-alternatives --config java
二 打包应用
- 使用构建工具生成可执行包:
- Maven:mvn clean package(产物一般为 target/your-app.jar)
- Gradle:./gradlew build(产物一般为 build/libs/your-app.jar)
- 确保打包后的 JAR 包含正确的主类(MANIFEST.MF 中的 Main-Class),或在运行时通过 -cp/-jar 显式指定
三 部署与运行方式
- 方式 A 直接运行可执行 JAR(适合微服务、Spring Boot 等)
- 运行:java -jar your-application.jar
- 常用 JVM 参数示例:-Xms256m -Xmx512m -XX:+UseG1GC(按应用内存与 GC 需求调整)
- 方式 B 部署到 Tomcat(适合传统 WAR 应用)
- 安装:sudo apt install -y tomcat9
- 部署:将 WAR 复制到 /var/lib/tomcat9/webapps/(Tomcat 会自动解压部署)
- 管理:sudo systemctl start|stop|status|enable tomcat9
- 访问测试:http://服务器IP:8080/应用上下文路径
- 方式 C 使用 Docker 运行(便于环境一致性与横向扩展)
- Dockerfile 示例:
- FROM openjdk:11-jre-slim
- COPY target/your-application.jar /app.jar
- EXPOSE 8080
- ENTRYPOINT [“java”,“-jar”,“/app.jar”]
- 构建与运行:
- docker build -t your-app .
- docker run -d -p 8080:8080 --name app your-app
- 方式 D 打包为 DEB 分发包(便于在 Debian 系环境内标准化分发与安装)
- 目录结构:debian/DEBIAN/control、debian/usr/share/your-app/your-app.jar
- control 示例:Package、Version、Architecture、Depends: default-jre、Description
- 打包与安装:dpkg-deb --build my-java-app;sudo dpkg -i my-java-app.deb
四 网络与反向代理
- 开放应用端口(若使用 ufw):sudo ufw allow 8080/tcp
- 使用 Nginx 反向代理到应用(HTTP 80/443):
- 示例配置片段(/etc/nginx/sites-available/default):
- server { listen 80; server_name your_domain; location / { proxy_pass http://localhost:8080; } }
- 使配置生效:sudo systemctl reload nginx
五 生产环境建议
- 进程管理:使用 systemd 托管(创建 /etc/systemd/system/myapp.service),设置 User、WorkingDirectory、ExecStart、Restart=always,执行 systemctl daemon-reload && systemctl enable --now myapp
- 日志与输出:重定向日志到文件(>> /var/log/myapp.log 2>&1),或使用 journalctl -u myapp 查看
- 资源与性能:结合容器/实例内存设置 -Xms/-Xmx,选择合适的 GC(如 G1),并进行压测与监控
- 安全:限制应用端口仅本地访问,对外通过 Nginx/Ingress;仅暴露必要端口;定期更新系统与依赖