温馨提示×

CentOS Java微服务如何部署

小樊
35
2025-11-23 18:29:06
栏目: 编程语言

CentOS 上部署 Java 微服务的实用方案


一 环境准备与目录规范

  • 系统建议:CentOS 7/8,更新系统并安装常用工具:yum update -y && yum install -y wget curl vim
  • 创建运行用户与目录(避免直接使用 root):
    • useradd -m -s /bin/bash javaapp
    • 目录:/home/javaapp/soft(安装包)、/home/javaapp/app(微服务 JAR)、/home/javaapp/app/logs(日志)
    • 授权:chown -R javaapp:javaapp /home/javaapp
  • 安装 JDK 8(示例为 OpenJDK 8):yum install -y java-1.8.0-openjdk*
  • 如需容器化,安装 DockerDocker Compose(可选,见下文)

二 方式一 直接运行可执行 JAR

  • 上传与目录:将各微服务的 JAR 上传至 /home/javaapp/app/<服务名>/,配置文件放入同目录或子目录(如 config/
  • 前台启动验证(排查错误优先):java -jar /home/javaapp/app/<服务名>/<app>.jar
  • 后台启动与日志:
    • nohup java -jar /home/javaapp/app/<服务名>/<app>.jar > /home/javaapp/app/logs/<服务名>.log 2>&1 &
    • 查看进程:jps -lps -ef | grep java
  • 停止服务:kill -15 <PID>(先优雅,必要时 kill -9
  • 配置管理:通过外部化 application.yml / bootstrap.yml 或环境变量注入数据库、注册中心、MQ 等地址,避免硬编码

三 方式二 使用 systemd 托管 JAR(推荐用于生产)

  • 以服务 eureka 为例创建单元文件:/etc/systemd/system/eureka.service
[Unit]
Description=Eureka Service
After=network.target

[Service]
Type=simple
User=javaapp
Group=javaapp
Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Xms512m -Xmx1024m -Djava.security.egd=file:///dev/urandom"
WorkingDirectory=/home/javaapp/app/eureka
ExecStart=/usr/bin/java -jar /home/javaapp/app/eureka/eureka.jar
ExecStop=/bin/kill -15 $MAINPID
SuccessExitStatus=143
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
  • 启用与启动:
    • systemctl daemon-reload
    • systemctl enable --now eureka
    • systemctl status eureka
  • 日志:journalctl -u eureka -f
  • 说明:如采用 Tomcat/WAR 形态,也可用 systemd 托管 Tomcat 的启动脚本,思路一致

四 方式三 Docker 容器化部署(可配合 docker-compose)

  • 单服务 Dockerfile(示例基于 openjdk:11
FROM openjdk:11
VOLUME /tmp
ADD target/app.jar /opt/app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/opt/app.jar"]
  • 构建与运行:
    • docker build -t app:1.0 .
    • docker run -d -p 8080:8080 --name app app:1.0
  • 使用 docker-compose 编排多服务(示例片段)
version: "3.8"
services:
  eureka:
    image: eureka:1.0
    ports: ["8761:8761"]
    environment:
      - JAVA_OPTS=-Xms512m -Xmx1g
  gateway:
    image: gateway:1.0
    ports: ["8080:8080"]
    depends_on:
      - eureka
  config:
    image: config:1.0
    depends_on:
      - eureka
  • 编排要点:基础组件(如 Eureka/Config)优先启动,业务服务后启;必要时在 command 中使用 sleep 等手段做启动顺序协调;容器网络下,应用配置中的数据库/注册中心地址应使用宿主机 内网 IP 或服务名(同一 compose 网络)

五 网络与防火墙及常见问题

  • 防火墙与端口:
    • 按需开放端口(示例):firewall-cmd --permanent --add-port=8080/tcp --add-port=8761/tcp && firewall-cmd --reload
    • 或临时关闭防火墙(仅测试环境):systemctl stop firewalld
  • 启动慢问题:添加 -Djava.security.egd=file:///dev/urandom 可加速 JVM 启动
  • 架构适配:在 ARM(鲲鹏) 服务器上,优先使用适配 aarch64 的 JDK 与基础镜像,并配置 鲲鹏镜像站 加速依赖安装
  • 容器网络:避免将数据库、注册中心地址写为 localhost/127.0.0.1,应使用宿主机 IP 或服务发现机制

0