在VPS上部署Java应用程序:从A到Z的分步指南
\n\n开发Java应用程序只是成功的一半。另一半同样重要的部分是在生产服务器上部署它。在本指南中,我们将完成在运行Ubuntu 22.04的虚拟专用服务器(VPS)上部署Java(Spring Boot)应用程序的完整流程。您将学习如何配置服务器、构建项目、将其作为系统服务启动,并通过Web服务器确保安全访问。
\n\n1. 准备VPS并安装必要的软件
\n\n第一步是通过SSH连接到您的VPS并安装Java运行时环境(JRE)和Git。
\n\n连接到服务器
\nssh root@您的服务器IP\n\n更新软件包并安装Java(OpenJDK 17)
\n对于Spring Boot 3.x,推荐使用Java 17。我们将安装OpenJDK。
\napt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version\n您应该看到Java 17的版本信息。
\n\n安装Nginx(用于反向代理)
\napt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx\n\n2. 构建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将其复制到服务器:
\nscp target/my-app-0.0.1-SNAPSHOT.jar root@您的服务器IP:/opt/myapp/\n\n选项B:直接在服务器上构建
\n克隆仓库并构建项目:
\ncd /opt\ngit clone https://github.com/您的用户名/您的仓库.git myapp\ncd myapp\n./mvnw clean package -DskipTests\n# 或者,如果Maven已全局安装:\nmvn clean package -DskipTests\n\n3. 配置生产环境配置并创建systemd服务
\n\n为了使应用程序在系统启动时自动运行并在崩溃时重新启动,我们将创建一个systemd单元文件。
\n\n创建启动脚本
\n为应用程序创建目录(如果尚未创建):
\nmkdir -p /opt/myapp\n# 如果JAR文件尚未在此目录,请将其移动到此目录\n\n创建systemd服务
\n创建文件 /etc/systemd/system/myapp.service:
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
启动并检查服务
\nsystemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp # 开机自启\n检查应用程序是否在本地响应:
\ncurl http://localhost:8080/actuator/health\n您应该会收到一个JSON响应,状态为 UP。
4. 通过Nginx配置反向代理
\n\n通过端口8080直接访问应用程序是不安全的。我们将配置Nginx作为代理服务器,接收来自