凌峰创科服务平台

Java服务器部署有哪些关键步骤?

我们将以最常见的 Linux (CentOS/Ubuntu) + Java Web 应用 (以 Spring Boot 为例) 为场景进行讲解。

Java服务器部署有哪些关键步骤?-图1
(图片来源网络,侵删)

目录

  1. 第一步:准备工作
    • 1 获取服务器
    • 2 连接服务器
    • 3 更新系统
  2. 第二步:安装 Java 环境
    • 1 检查系统自带的 Java
    • 2 安装 OpenJDK (推荐)
    • 3 验证 Java 安装
  3. 第三步:部署 Java 应用
    • 1 准备应用包
    • 2 上传应用包到服务器
    • 3 创建应用目录
    • 4 解压并配置应用
  4. 第四步:配置运行方式
    • 1 直接运行 (适合临时测试)
    • 2 使用 systemd (推荐,生产环境标准)
    • 3 使用 nohup (简单后台运行)
  5. 第五步:配置反向代理
    • 1 安装 Nginx
    • 2 配置 Nginx
    • 3 启动并测试 Nginx
  6. 第六步:防火墙与安全组
    • 1 配置 Linux 防火墙 (firewalld/ufw)
    • 2 配置云服务器安全组
  7. 第七步:日志管理与监控
    • 1 查看和管理日志
    • 2 使用 top/htop 监控进程
    • 3 设置日志轮转
  8. 第八步:进阶主题
    • 1 使用 Docker 部署 (现代推荐方式)
    • 2 使用 Jenkins 实现自动化部署

第一步:准备工作

1 获取服务器

你可以选择:

  • 云服务器: 阿里云、腾讯云、华为云、AWS、Google Cloud 等,它们提供预装的 Linux 系统(如 CentOS 7/8, Ubuntu 20.04/22.04),开箱即用。
  • 本地物理机/虚拟机: 如果你有一台闲置的电脑,可以安装 VMware, VirtualBox 等虚拟化软件,然后在里面安装 Linux 系统。

2 连接服务器

使用 SSH (Secure Shell) 客户端连接你的服务器,在 Windows 上,推荐使用 PuTTYWindows Terminal (配合 OpenSSH),在 macOS 或 Linux 上,可以直接使用自带的终端。

# 语法
ssh username@your_server_ip
# 示例 (用户名为 root,IP 为 123.45.67.89)
ssh root@123.45.67.89

首次连接会提示你确认服务器的指纹,输入 yes 即可,然后输入你的服务器密码。

3 更新系统

为了确保系统软件包是最新且安全的,首先更新系统。

Java服务器部署有哪些关键步骤?-图2
(图片来源网络,侵删)

对于 CentOS/RHEL/Fedora:

sudo yum update -y

对于 Ubuntu/Debian:

sudo apt update && sudo apt upgrade -y

第二步:安装 Java 环境

Java 应用需要一个 Java 运行时环境,我们推荐使用开源的 OpenJDK

1 检查系统自带的 Java

有些系统可能预装了旧版本的 Java,可以先检查一下。

java -version

如果版本过低或不存在,就继续下一步。

2 安装 OpenJDK

对于 CentOS/RHEL/Fedora:

# 安装 OpenJDK 17 (当前 LTS 版本)
sudo yum install java-17-openjdk-devel -y
# 如果需要其他版本,可以替换 java-17 为 java-11 或 java-21

对于 Ubuntu/Debian:

# 更新包列表
sudo apt update
# 安装 OpenJDK 17
sudo apt install openjdk-17-jdk -y
# 同样,可以替换为 openjdk-11-jdk 或 openjdk-21-jdk

3 验证 Java 安装

安装完成后,再次检查版本号,确保安装成功。

java -version
javac -version # 检查编译器是否也安装了

你应该能看到类似下面的输出:

openjdk version "17.0.8" 2025-07-18
OpenJDK Runtime Environment (build 17.0.8+7-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 17.0.8+7-Ubuntu-0ubuntu122.04, mixed mode, sharing)

第三步:部署 Java 应用

假设我们有一个已经打包好的 Spring Boot 应用,它是一个可执行的 JAR 文件 my-app.jar

1 准备应用包

在本地开发机器上,确保你的项目已经打包成 JAR 或 WAR 文件,对于 Spring Boot,通常是 java -jar your-app.jar 可以直接运行的 JAR。

2 上传应用包到服务器

有多种方式可以将文件从本地上传到服务器:

  • scp (Secure Copy): 简单直接,适合一次性上传。

    # 语法
    scp /local/path/to/my-app.jar username@your_server_ip:/remote/path/
    # 示例
    scp /Users/yourname/Desktop/my-app.jar root@123.45.67.89:/opt/
  • SFTP/FTP 客户端: 如 FileZilla, WinSCP 等,提供图形化界面,方便管理多个文件。

  • rsync: 适合增量同步,当文件较大时更高效。

3 创建应用目录

为了保持服务器整洁,我们为应用创建一个专用的目录。

# 在 /opt 目录下创建一个名为 myapp 的目录
sudo mkdir -p /opt/myapp
# 将上传的文件移动到这个目录
sudo mv /opt/my-app.jar /opt/myapp/
# 切换到应用目录
cd /opt/myapp

4 解压并配置应用

如果你的应用是 WAR 包或者需要额外的配置文件(如 application-prod.properties):

# 假设你上传了一个包含配置和JAR的zip包
unzip my-app.zip
# 确保应用有执行权限
sudo chmod +x my-app.jar

第四步:配置运行方式

直接在终端运行 java -jar 的话,一旦关闭 SSH 连接,应用就会停止,我们需要让它在后台持续运行。

1 直接运行 (适合临时测试)

这种方式不推荐用于生产环境,仅用于快速验证。

java -jar my-app.jar

你会看到应用的日志输出,按 Ctrl + C 可以停止应用。

2 使用 systemd (推荐,生产环境标准)

systemd 是现代 Linux 系统的初始化系统和服务管理器,我们可以用它来管理我们的 Java 应用,实现开机自启、自动重启、状态检查等功能。

  1. 创建服务文件:

    sudo nano /etc/systemd/system/myapp.service
  2. 粘贴以下内容 (请根据你的实际情况修改 User, Group, ExecStart 等路径):

    [Unit]
    Description=My Java Application Service
    After=network.target
    [Service]
    # 运行服务的用户和组,建议创建一个专门的用户,如 'javauser'
    # User=javauser
    # Group=javauser
    # 如果不指定,默认是 root
    User=root
    Group=root
    # Java 命令,注意路径要正确
    ExecStart=/usr/bin/java -jar /opt/myapp/my-app.jar
    # 工作目录
    WorkingDirectory=/opt/myapp
    # 自动重启应用
    Restart=on-failure
    RestartSec=10
    # 标准输出和错误输出重定向到日志文件
    StandardOutput=file:/var/log/myapp/stdout.log
    StandardError=file:/var/log/myapp/error.log
    [Install]
    WantedBy=multi-user.target
  3. 重载 systemd 并启动服务:

    # 重新加载 systemd 配置,使其识别新服务
    sudo systemctl daemon-reload
    # 启动服务
    sudo systemctl start myapp
    # 检查服务状态
    sudo systemctl status myapp

    你应该看到绿色的 active (running) 字样。

  4. 设置开机自启:

    sudo systemctl enable myapp
  5. 常用管理命令:

    # 停止服务
    sudo systemctl stop myapp
    # 重启服务
    sudo systemctl restart myapp
    # 查看实时日志
    sudo journalctl -u myapp -f

3 使用 nohup (简单后台运行)

如果你不想用 systemdnohup 是一个简单的替代方案,它能让进程在用户退出后继续运行。

# nohup 表示忽略挂断信号
# & 表示在后台运行
# > myapp.log 表示将标准输出重定向到 myapp.log 文件
# 2>&1 表示将标准错误也重定向到标准输出
nohup java -jar my-app.jar > myapp.log 2>&1 &

这种方式简单,但不如 systemd 功能强大(如无法自动重启、难以管理状态)。


第五步:配置反向代理

Java Web 应用通常运行在内置的 Web 服务器上(如 Tomcat, Netty),端口不直接暴露给外网。反向代理(如 Nginx)负责接收外部的 HTTP/HTTPS 请求,然后转发给后端的 Java 应用。

1 安装 Nginx

对于 CentOS/RHEL:

sudo yum install nginx -y

对于 Ubuntu/Debian:

sudo apt install nginx -y

2 配置 Nginx

  1. 创建站点配置文件:

    sudo nano /etc/nginx/conf.d/myapp.conf
  2. 粘贴以下内容 (假设你的 Spring Boot 应用运行在 8080 端口):

    server {
        listen 80; # 监听 80 端口,HTTP
        server_name your_domain.com; # 替换成你的域名或服务器IP
        location / {
            # 将请求转发到后端 Java 应用
            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;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

3 启动并测试 Nginx

  1. 检查 Nginx 配置语法:

    sudo nginx -t

    如果显示 syntax is oktest is successful,则配置正确。

  2. 启动 Nginx:

    sudo systemctl start nginx
    sudo systemctl enable nginx # 设置开机自启
  3. 访问测试: 在浏览器中输入 http://your_server_iphttp://your_domain.com,如果能看到你的 Java 应用页面,说明反向代理配置成功。


第六步:防火墙与安全组

为了保护服务器,需要开放必要的端口,并关闭其他不必要的端口。

1 配置 Linux 防火墙 (firewalld/ufw)

对于 CentOS/RHEL (使用 firewalld):

# 开放 80 (HTTP) 和 443 (HTTPS) 端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重新加载防火墙使配置生效
sudo firewall-cmd --reload

对于 Ubuntu/Debian (使用 ufw):

# 默认拒绝所有传入连接
sudo ufw default deny incoming
# 开放 22 (SSH), 80 (HTTP), 443 (HTTPS) 端口
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 启用防火墙
sudo ufw enable
# 输入 'y' 确认

2 配置云服务器安全组

如果你使用的是云服务器,还需要在云服务商的控制台(如阿里云ECS、腾讯云CVM)的安全组设置中,添加入站规则,开放 22 (SSH), 80 (HTTP), 443 (HTTPS) 端口,这层防火墙是虚拟的,但同样重要。


第七步:日志管理与监控

1 查看和管理日志

  • 应用日志: 如果你用了 systemd,日志可以通过 journalctl 查看:

    sudo journalctl -u myapp -f # 实时查看
    sudo journalctl -u myapp --since "10 minutes ago" # 查看最近10分钟的日志

    如果你用了 nohup,日志就在你指定的 myapp.log 文件里,可以用 tail -f myapp.log 查看。

  • Nginx 日志:

    # 访问日志
    sudo tail -f /var/log/nginx/access.log
    # 错误日志
    sudo tail -f /var/log/nginx/error.log

2 使用 top/htop 监控进程

  • top: Linux 自带的任务管理器。
    top

    q 退出,查看 java 进程的 CPU 和内存占用。

  • htop: top 的增强版,更直观,如果系统没有,可以安装 (sudo yum install htopsudo apt install htop)。

3 设置日志轮转

日志文件会越来越大,需要定期清理和归档。logrotate 是 Linux 下标准的日志轮转工具。

  1. 创建配置文件:

    sudo nano /etc/logrotate.d/myapp
  2. :

    /var/log/myapp/*.log {
        daily               # 每天轮转
        missingok           # 如果日志文件不存在,不报错
        rotate 7            # 保留7天的日志
        compress            # 轮转后进行压缩
        delaycompress       # 延迟一天压缩,方便排查问题
        notifempty          # 如果日志为空,不轮转
        copytruncate        # 复制日志文件后清空原文件,而不是移动,避免应用写入失败
    }

    logrotate 通常由 cron 每天自动执行。


第八步:进阶主题

1 使用 Docker 部署 (现代推荐方式)

使用 Docker 可以将 Java 应用及其所有依赖(包括特定版本的 Java)打包到一个轻量级、可移植的容器中,这解决了“在我机器上能跑”的问题。

基本步骤:

  1. 在项目根目录创建 Dockerfile:

    # 使用官方的 OpenJDK 17 镜像作为基础镜像
    FROM openjdk:17-jre-slim
    # 设置工作目录
    WORKDIR /app
    # 将本地的 JAR 文件复制到容器的工作目录
    COPY target/my-app.jar app.jar
    # 暴露应用运行的端口 (8080)
    EXPOSE 8080
    # 定义容器启动时执行的命令
    ENTRYPOINT ["java", "-jar", "app.jar"]
  2. 构建 Docker 镜像:

    docker build -t my-app-image .
  3. 运行 Docker 容器:

    # -d: 后台运行
    # -p: 将主机的 80 端口映射到容器的 8080 端口
    # --name: 给容器起个名字
    docker run -d -p 80:8080 --name my-app-container my-app-image

    Docker 部署更专业、更易于管理,是当前的主流趋势。

2 使用 Jenkins 实现自动化部署

对于持续集成/持续部署,可以使用 Jenkins 这样的自动化工具,流程如下:

  1. 开发者将代码推送到 Git 仓库(如 GitHub, GitLab)。
  2. Jenkins 监听到代码变更。
  3. Jenkins 自动拉取最新代码,执行 mvn clean package (或 gradle build) 进行编译打包。
  4. 打包成功后,Jenkins 通过 SSH 或其他方式,将生成的 JAR 文件上传到服务器,并执行部署脚本(如 systemctl restart myapp)。
  5. 发送部署结果通知。

这大大减少了手动部署的繁琐和出错概率。


部署一个 Java 服务器应用是一个多步骤的过程,但遵循以上指南,你可以从零开始,搭建一个稳定、安全、可维护的生产环境。

核心流程回顾:

  1. 准备: 获取服务器,连接并更新系统。
  2. 环境: 安装正确版本的 Java。
  3. 部署: 上传应用包到指定目录。
  4. 运行: 使用 systemd 管理应用,实现后台、自启、自恢复。
  5. 代理: 使用 Nginx 作为反向代理,处理外部请求并转发。
  6. 安全: 配置防火墙和安全组,只开放必要端口。
  7. 维护: 通过日志和系统工具监控应用运行状态。

希望这份详细的指南对你有帮助!

分享:
扫描分享到社交APP
上一篇
下一篇