在VPS上部署Java应用程序:从A到Z的分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在VPS上部署Java应用程序:从A到Z的分步指南

\n\n

开发Java应用程序只是成功的一半。另一半同样重要的部分是在生产服务器上部署它。在本指南中,我们将完成在运行Ubuntu 22.04的虚拟专用服务器(VPS)上部署Java(Spring Boot)应用程序的完整流程。您将学习如何配置服务器、构建项目、将其作为系统服务启动,并通过Web服务器确保安全访问。

\n\n

1. 准备VPS并安装必要的软件

\n\n

第一步是通过SSH连接到您的VPS并安装Java运行时环境(JRE)和Git。

\n\n

连接到服务器

\n
ssh root@您的服务器IP
\n\n

更新软件包并安装Java(OpenJDK 17)

\n

对于Spring Boot 3.x,推荐使用Java 17。我们将安装OpenJDK。

\n
apt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version
\n

您应该看到Java 17的版本信息。

\n\n

安装Nginx(用于反向代理)

\n
apt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx
\n\n

2. 构建Java应用程序(Maven/Gradle)

\n\n

在您的本地机器上(或者直接在服务器上,如果您克隆了仓库),需要构建JAR文件。我们将介绍两种方式。

\n\n

选项A:本地构建并复制到服务器

\n

假设您有一个使用Maven的Spring Boot项目。

\n
# 在本地机器上\nmvn clean package -DskipTests\n# 文件将出现在 target/my-app-0.0.1-SNAPSHOT.jar
\n

然后通过SCP将其复制到服务器:

\n
scp target/my-app-0.0.1-SNAPSHOT.jar root@您的服务器IP:/opt/myapp/
\n\n

选项B:直接在服务器上构建

\n

克隆仓库并构建项目:

\n
cd /opt\ngit clone https://github.com/您的用户名/您的仓库.git myapp\ncd myapp\n./mvnw clean package -DskipTests\n# 或者,如果Maven已全局安装:\nmvn clean package -DskipTests
\n\n

3. 配置生产环境配置并创建systemd服务

\n\n

为了使应用程序在系统启动时自动运行并在崩溃时重新启动,我们将创建一个systemd单元文件。

\n\n

创建启动脚本

\n

为应用程序创建目录(如果尚未创建):

\n
mkdir -p /opt/myapp\n# 如果JAR文件尚未在此目录,请将其移动到此目录
\n\n

创建systemd服务

\n

创建文件 /etc/systemd/system/myapp.service:

\n
nano /etc/systemd/system/myapp.service
\n

插入以下内容(根据您的项目替换路径和参数):

\n
[Unit]\nDescription=我的Java Spring Boot应用程序\nAfter=syslog.target network.target\n\n[Service]\nUser=root\nWorkingDirectory=/opt/myapp\nExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/myapp/my-app-0.0.1-SNAPSHOT.jar --server.port=8080\nSuccessExitStatus=143\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target
\n

参数说明:

\n
    \n
  • -Xms256m -Xmx512m — Java堆的初始大小和最大大小。
  • \n
  • --server.port=8080 — 应用程序运行的端口。
  • \n
  • Restart=always — 崩溃时自动重启。
  • \n
\n\n

启动并检查服务

\n
systemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp  # 开机自启
\n

检查应用程序是否在本地响应:

\n
curl http://localhost:8080/actuator/health
\n

您应该会收到一个JSON响应,状态为 UP。

\n\n

4. 通过Nginx配置反向代理

\n\n

通过端口8080直接访问应用程序是不安全的。我们将配置Nginx作为代理服务器,接收来自

博客

书籍推荐