在VPS上部署Java应用程序:分步指南

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

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

开始课程

引言:为何VPS是Java应用的理想之选

在虚拟专用服务器(VPS)上部署Java应用是追求对运行环境完全掌控的开发者的黄金标准。与共享主机不同,VPS提供专用资源(CPU、内存、磁盘),允许您配置Java虚拟机(JVM)、安装任意库文件,并为项目特定需求配置服务器。

本文将涵盖完整的部署流程:从准备VPS和安装JDK,到使用systemd在生产模式下运行应用。所有步骤均附有适用于Linux(Ubuntu 22.04 LTS)的代码示例和命令。



1. 准备VPS并安装所需软件

1.1. 连接服务器

购买VPS后,您将获得IP地址和root密码。通过SSH连接:

ssh root@your_server_IP

建议立即创建一个非特权用户用于日常操作:

adduser deployerusermod -aG sudo deployer


1.2. 安装Java(JDK 17 LTS)

OpenJDK 17最适合现代Java应用。执行:

sudo apt updatesudo apt install openjdk-17-jdk -y

验证安装:

java -version# 输出: openjdk version "17.0.10" 2024-01-16 LTS


1.3. 安装Git和Maven/Gradle

从仓库构建项目:

sudo apt install git maven -y# 或使用 Gradle:# sudo apt install gradle -y


2. 构建并准备应用

2.1. 克隆仓库

假设您的Spring Boot应用位于GitHub上:

cd /optsudo git clone https://github.com/your_account/my-java-app.gitcd my-java-app


2.2. 构建JAR文件

使用Maven:

mvn clean package -DskipTests

执行后,target/目录下将生成my-app-0.0.1-SNAPSHOT.jar文件。验证其可运行性:

java -jar target/my-app-0.0.1-SNAPSHOT.jar --server.port=8080

检查运行状态:在浏览器中打开http://your_IP:8080。



2.3. 优化生产环境JAR

在application.properties中添加生产参数:

server.port=8080spring.datasource.url=jdbc:postgresql://localhost:5432/mydbspring.datasource.username=app_userspring.datasource.password=secure_passwordspring.jpa.hibernate.ddl-auto=validate

切勿在代码中存储真实密码——应使用环境变量或Vault。



3. 配置数据库与环境

3.1. 安装PostgreSQL

sudo apt install postgresql postgresql-contrib -ysudo systemctl start postgresqlsudo systemctl enable postgresql

创建数据库和用户:

sudo -u postgres psqlCREATE DATABASE mydb;CREATE USER app_user WITH PASSWORD 'secure_password';GRANT ALL PRIVILEGES ON DATABASE mydb TO app_user;\\q


3.2. 配置环境变量

创建文件/etc/environment.d/java-app.conf:

DB_URL=jdbc:postgresql://localhost:5432/mydbDB_USER=app_userDB_PASSWORD=secure_passwordJAVA_OPTS="-Xms256m -Xmx512m"

重新加载环境:

source /etc/environment.d/java-app.conf


4. 将应用作为systemd服务运行

4.1. 创建单元文件

创建文件/etc/systemd/system/java-app.service:

[Unit]Description=Java Spring Boot ApplicationAfter=network.target postgresql.service

[Service]User=deployerWorkingDirectory=/opt/my-java-appExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/my-java-app/target/my-app-0.0.1-SNAPSHOT.jarSuccessExitStatus=143Restart=alwaysRest

博客

书籍推荐