Java进阶-在Ubuntu上部署SpringBoot应用

随着云计算和容器化技术的普及,Linux 服务器已成为部署 Web 应用程序的主流平台之一。Java 作为一种跨平台的编程语言,具有广泛的应用场景。本文将详细介绍如何在 Ubuntu 服务器上部署 Java 应用,包括环境准备、应用发布、配置反向代理(Nginx)、设置系统服务以及日志管理等步骤。


一、部署准备

在开始之前,请确保你具备以下条件:

  • 一台运行 Ubuntu(如 Ubuntu 20.04 或 22.04)的服务器,具有 SSH 访问权限。
  • Java 应用程序的可执行 JAR 文件,确保在本地能够正常运行。

二、安装 Java 环境

首先,你需要在 Ubuntu 上安装 Java 运行环境(JRE)或 Java 开发工具包(JDK),以便能够运行 Java 应用。

1. 安装 JDK

Ubuntu 提供了 OpenJDK(Java 的开源实现)。你可以选择安装 JDK 8(业内主流版本)或 OpenJDK 17(业内下一个主流版本)。

sudo apt install openjdk-17-jdk -y
2. 验证 Java 安装

安装完成后,你可以使用以下命令检查 Java 是否安装成功:

java -version

你应该看到类似于以下的输出,表示 Java 安装成功:

openjdk version "17.0.2" 2021-04-20 OpenJDK Runtime Environment (build 11.0.11+9-60) OpenJDK 64-Bit Server VM (build 11.0.11+9-60, mixed mode)


三、安装 MySQL(如需)

1. 安装MySQL服务器
sudo apt install mysql-server -y
2. 启动并设置MySQL开机自启
sudo systemctl start mysql sudo systemctl enable mysql
3. 验证MySQL安装

登录MySQL以确认安装成功。

sudo mysql -u root -p

MySQL默认密码是root,直接登录即可。

4. 修改初始密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
5. 创建库和表

这里我们用SQL语句把项目需要的数据库建好即可。


四、部署 Java 应用

你可以通过构建一个可执行的 JAR 文件来部署 Java 应用程序。
假设你已经有一个构建好的 JAR 文件,将你的 JAR 文件传输到 Ubuntu 服务器上的目标目录。
在服务器上进入应用目录并运行 JAR 文件。

cd /var/www/java-app java -jar app.jar

如果应用成功启动,你应该能看到类似于下面的日志输出:

2025-01-09 10:00:00.000 INFO [main] - Application started on port 8080

此时你的 Java 应用正在 8080 端口上运行。


五、配置 Nginx 作为反向代理(可选)

为了通过浏览器访问你的 Java 应用,你需要配置 Nginx 作为反向代理,将客户端请求转发到 Java 应用。以下是配置反向代理的步骤。

1. 安装 Nginx

如果 Nginx 尚未安装,可以使用以下命令进行安装:

sudo apt install nginx -y
2. 配置 Nginx

打开 Nginx 的配置文件进行编辑:

sudo nano /etc/nginx/sites-available/default

修改server块中的配置,将请求转发到 Java 应用的端口(如 8080):

server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

保存并退出配置文件。

3. 测试并重启 Nginx

测试 Nginx 配置是否正确:

sudo nginx -t

如果配置无误,重启 Nginx:

sudo systemctl restart nginx

此时,Nginx 已经成功配置为将所有请求转发到 Java 应用。


六、设置 Java 应用为系统服务(可选)

为了确保 Java 应用在系统启动时自动启动,并且可以通过systemctl管理,我们需要将应用配置为一个 systemd 服务。

1. 创建 systemd 服务文件

创建一个新的 systemd 服务文件来管理 Java 应用:

sudo nano /etc/systemd/system/java-app.service

将以下内容添加到文件中:

[Unit] Description=Java Web Application After=network.target [Service] User=your-user ExecStart=/usr/bin/java -jar /var/www/java-app/app.jar SuccessExitStatus=143 TimeoutStopSec=10 Restart=on-failure WorkingDirectory=/var/www/java-app [Install] WantedBy=multi-user.target
  • ExecStart:指定启动应用的命令。
  • WorkingDirectory:指定应用的工作目录。
  • Restart:确保应用崩溃时会自动重启。
2. 启动并启用服务

重新加载 systemd 配置,使新服务生效:

sudo systemctl daemon-reload

启动 Java 应用服务:

sudo systemctl start java-app.service

启用服务,使其在系统启动时自动启动:

sudo systemctl enable java-app.service
3. 检查服务状态

你可以使用以下命令查看服务的状态:

sudo systemctl status java-app.service

确保 Java 应用正在运行并且没有错误。


七、日志管理

为了有效地监控 Java 应用的运行状态,建议设置日志记录。

1. 配置日志文件

你可以使用 Java 的日志框架(如LogbackLog4j)来配置应用日志。确保日志输出到文件,而不是仅输出到控制台。

application.propertieslogback.xml配置中指定日志文件的路径。

例如,使用Logback配置文件:

<configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>/var/log/java-app.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE"/> </root> </configuration>
2. 查看应用日志

你可以使用tailjournalctl来查看日志文件:

sudo tail -f /var/log/java-app.log

如果你通过 systemd 启动应用,还可以使用journalctl命令来查看应用的日志:

sudo journalctl -u java-app.service -f

八、测试部署

  1. 在浏览器中访问你的服务器域名或 IP 地址,确保能正确加载 Java 应用。
  2. 使用 curl 或 Postman 等工具测试 API 接口,确保后端服务正常工作。

九、总结

通过以上步骤,你可以在 Ubuntu 上成功部署 Java 应用,使用 Nginx 配置反向代理,确保应用能够高效稳定地提供服务。同时,借助 systemd,你还可以方便地管理应用的启动、停止及日志记录,确保服务的高可用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1125552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot Admin与Kubernetes集成监控

摘要 本文深入探讨Spring Boot Admin与Kubernetes的集成监控方案&#xff0c;包括容器化部署、服务发现、资源监控等关键技术点。通过详细的技术解析和实践示例&#xff0c;帮助开发者构建基于Kubernetes的微服务监控体系。 1. 引言 Kubernetes作为容器编排的标准&#xff0c;与…

【Unity】实现Quad瓦片(MeshRenderer)渲染图集图片

使用Mesh Renderer渲染图集图片&#xff0c;并保证图片不变形效果&#xff08;采用GPU Instancing优化合批&#xff09;创建一个Quad物体&#xff0c;材质Shader如下&#xff0c;将图集图片通过SpriteAtlas加载出来得到Sprite对象进行后面的传参操作即可进行渲染出图集图片。Te…

【课程设计/毕业设计】基于python-CNN深度学习的水果识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序

MSSQL2022导入Excel的一个错误&#xff1a;未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序 一、导入情况二、问题发现三、问题解决 最近在安装新版SQLServer SSMS 2022后&#xff0c;每次导入Excel都会出现错误提示&#xff1a;未在本地计算机上注册“Microsoft.…

Thinkphp和Laravel框架的茶叶购物网上商城系统 潇湘知茶小程序_dyo5sig5

目录ThinkPHP与Laravel框架的茶叶商城系统对比分析项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理ThinkPHP与Laravel框架的茶叶商城系统对比分析 ThinkPHP框架实现特点 ThinkPHP作为国产轻量级框架&#xff0c;适合快速开发中小型茶叶商城。其内…

【状态估计】基于LQR控制和卡尔曼滤波算法实现二维四旋翼的状态估计(噪声传感器数据)附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

【毕业设计】基于深度学习python-CNN的水果识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026免费好用的AIPPT工具榜:智能演示文稿制作新纪元

引言 随着人工智能技术的飞速发展&#xff0c;传统演示文稿的制作流程正经历一场深刻的变革。过去&#xff0c;制作一份专业的PPT往往意味着数小时乃至数天的内容构思、手动排版与视觉设计。如今&#xff0c;AI生成PPT工具的出现&#xff0c;正将这一过程简化为几分钟的智能交…

Thinkphp和Laravel框架的蛋糕甜品烘焙教程微信小程序设计与实现_6uy1k94r

目录摘要项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 Thinkphp和Laravel框架的蛋糕甜品烘焙教程微信小程序设计与实现&#xff0c;结合了PHP后端框架与微信小程序前端技术&#xff0c;为用户提供便捷的烘焙学习平台。该小程序以蛋糕甜品烘…

计算机深度学习毕设实战-卷神经网络基于深度学习的土豆疾病识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】机器学习 基于python-cnn深度学习的罗马数据集训练识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)

博主采用的是SpringBoot3knife4j的框架&#xff0c;如果你采用的是SpringBoot2框架&#xff0c;那么可以看下面这几篇&#xff1a; Knife4j文档请求异常 | Knife4j 记一次集成swagger2&#xff08;Knife4j&#xff09;在线文档异常&#xff0c;提示&#xff1a;Knude4j文档请…

从执行到管理:SOP思维,是你必须掌握的职场杠杆

我成为管理者后的最大收获,是发现了一个职场真相:高效团队不是靠超人,而是靠可复制的方法。 曾经带过一名非常优秀的员工小陈,她解决问题总是一针见血,工作效率是别人的两倍。当她提出离职时,我焦虑了整整一周——很多关键任务只有她最清楚。也正是这次危机,让我彻底明…

Kafka 基础概念

Kafka 基础概念 Kafka 是什么&#xff1f; 分布式流处理平台&#xff0c;专为高吞吐量、低延迟的实时数据流设计。核心功能包括发布-订阅消息系统、持久化存储和流式处理。 核心组件 Topic&#xff1a;消息的逻辑分类&#xff0c;类似数据库表。Partition&#xff1a;Topic 的物…

【毕业设计】机器学习基于python深度学习的苹果和西红柿识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

knife4j+springboot3.4异常无法正确展示文档

场景复现&#xff1a; knife4j-openapi3-jakarta-spring-boot-starter版本 com.github.xiaoymin knife4j-openapi3-jakarta-spring-boot-starter 4.5.0 原来使用springboot3.3.5版本&#xff0c;先升级到3.4.0版本 通过http://ip:port/doc.html访问接口文档发现访问/v3/api-d…

深度学习计算机毕设之基于深度学习的土豆疾病识别卷神经网络

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果

安装依赖 pip install --upgrade --quiet langchain-core langchain-community langchain-openai编写代码 from langchain_core.prompts import ChatPromptTemplate from langchain_community.utilities import SQLDatabase from langchain_core.output_parsers import StrOut…

Python高效计算斐波那契数列

实现功能&#xff1a;计算斐波那契数列的第n项以下是用 Python 编写的递归方法实现斐波那契数列&#xff1a;def fibonacci(n):if n < 0:return "输入必须为正整数"elif n 1:return 0elif n 2:return 1else:return fibonacci(n - 1) fibonacci(n - 2)# 示例调用…

AWS OpenSearch Service TLS 策略升级指南

📋 概述 AWS OpenSearch Service 将于 2026 年 4 月 20 日停止支持 TLS 1.0 和 1.1 版本。本文详细介绍如何安全地将 OpenSearch 域的 TLS 策略升级到 TLS 1.2,确保服务的持续可用性和安全性。 🚨 重要通知 截止日期: 2026 年 4 月 20 日 影响: 使用 TLS 1.0/1.1 的域将…