当前位置: 首页 > news >正文

【Java】Ubuntu上发布Springboot 网站

在 Ubuntu 上发布 Spring Boot , 一共就三种方式,这里着重第二种方式。首先先安装Java环境

安装 Java 运行环境

Spring Boot 依赖 JRE 或 JDK,首先安装:

# 更新包管理
sudo apt update# 安装 OpenJDK 17(推荐,适配大多数 Spring Boot 版本)
sudo apt install openjdk-17-jre# 验证安装
java -version

方法一:直接运行 JAR 包(简单快捷)

适用于小型应用或测试环境,步骤如下:

  1. 上传 Spring Boot 应用
    将本地打包好的 xxx.jar 文件(通过 mvn package 生成)上传到 Ubuntu 服务器,例如使用 scp 命令:

    # 本地执行,将 jar 传到服务器的 /opt/app 目录
    scp target/your-app.jar username@服务器IP:/opt/app/
    
  2. 运行应用
    直接通过 java -jar 启动:

    # 进入目录
    cd /opt/app# 启动应用(前台运行,关闭终端则停止)
    java -jar your-app.jar# 后台运行(推荐)
    nohup java -jar your-app.jar > app.log 2>&1 &
    
    • nohup:确保终端关闭后程序继续运行
    • > app.log 2>&1:将日志输出到 app.log 文件
    • 结尾 &:后台运行
  3. 停止应用

    # 查找进程 ID
    ps -ef | grep your-app.jar# 终止进程
    kill -9 进程ID
    

方法二:通过 Systemd 管理(生产环境推荐)

使用系统服务管理应用,支持开机自启、状态监控等,步骤如下:

  1. 准备 JAR 包
    同方法一,确保 JAR 包已上传到服务器(如 /var/www/javaWeb/spSecurity.jar)。记住这个路径,第二步需要这个路径。
    修改 jar包所在文件夹的 权限,设置为 755, 即 文件拥有者要有读、写、执行三个权限。(这个很重要)

    sudo chmod -R 755 /var/www/javaWeb
    
  2. 创建 Systemd 服务文件

    sudo nano /etc/systemd/system/javaInterface.service  
    

    写入以下内容(根据实际路径修改):

    [Unit]
    Description=Your Spring Boot Application
    After=network.target  # 网络启动后再启动应用[Service]
    User=ubuntu  # 运行用户(避免使用 root)
    WorkingDirectory=/var/www/javaWeb  # 工作目录
    ExecStart=/usr/bin/java -jar spSecurity.jar  # 启动命令
    SuccessExitStatus=143  # 兼容 Spring Boot 的优雅退出
    Restart=always  # 进程意外退出时自动重启
    RestartSec=5  # 重启间隔(秒)[Install]
    WantedBy=multi-user.target  # 多用户模式下开机自启
    

这个服务中的注释要去掉

  1. 管理服务

    # 重新加载服务配置
    sudo systemctl daemon-reload# 启动应用,这里的 javaInterface 是服务名称,而不是 jar包的名称
    sudo systemctl start javaInterface# 查看状态
    sudo systemctl status javaInterface# 停止应用
    sudo systemctl stop javaInterface# 重启应用
    sudo systemctl restart javaInterface# 设置开机自启
    sudo systemctl enable javaInterface
    
  2. 查看日志

    # 实时查看日志
    sudo journalctl -u javaInterface -f# 查看最近 100 行日志
    sudo journalctl -u javaInterface -n 100
    

方法三:使用 Docker 部署(推荐,环境隔离)

  1. 安装 Docker

    # 安装 Docker
    sudo apt install docker.io# 启动 Docker 服务
    sudo systemctl start docker
    sudo systemctl enable docker# 允许当前用户操作 Docker(避免每次用 sudo)
    sudo usermod -aG docker $USER
    # 需重新登录生效
    
  2. 创建 Dockerfile
    在应用目录(与 JAR 包同目录)创建 Dockerfile

    # 基础镜像(Java 17)
    FROM openjdk:17-jre-slim# 工作目录
    WORKDIR /app# 复制 JAR 包到容器
    COPY your-app.jar app.jar# 暴露端口(与 Spring Boot 配置的 server.port 一致)
    EXPOSE 8080# 启动命令
    ENTRYPOINT ["java", "-jar", "app.jar"]
    
  3. 构建并运行镜像

    # 构建镜像(注意末尾的 .)
    docker build -t your-app:1.0 .# 运行容器(后台运行,映射端口 8080)
    docker run -d -p 8080:8080 --name your-app-container your-app:1.0
    
  4. 管理容器

    # 查看运行状态
    docker ps# 查看日志
    docker logs -f your-app-container# 停止容器
    docker stop your-app-container# 重启容器
    docker restart your-app-container
    

补充建议

  • 端口开放:若需外部访问,确保 Ubuntu 防火墙开放应用端口(如 8080):
    sudo ufw allow 8080/tcp
    
  • 环境配置:通过 --spring.profiles.active=prod 指定生产环境配置,或使用环境变量注入参数:
    # 直接运行时
    java -jar your-app.jar --spring.profiles.active=prod# Systemd 服务中,在 ExecStart 后添加:
    ExecStart=/usr/bin/java -jar your-app.jar --spring.profiles.active=prod# Docker 运行时
    docker run -d -e "SPRING_PROFILES_ACTIVE=prod" -p 8080:8080 your-app:1.0
    

根据实际需求选择部署方式,生产环境推荐 Systemd 管理Docker 部署,后者更便于环境一致性管理。

http://www.dtcms.com/a/389425.html

相关文章:

  • 【入门级-算法-3、基础算法:贪心法】
  • Linux 网络
  • 【LVS入门宝典】探秘LVS透明性:客户端如何“看不见”后端服务器的魔法
  • 23届考研-C++面经(OD)
  • 运维安全06,服务安全
  • C++篇(9)list的模拟实现
  • Bugku-宽带信息泄露
  • LeetCode 845.数组中的最长山脉
  • 分布式存储与NFS:现代架构选型指南
  • SpringBoot三级缓存如何解决循环依赖的问题
  • 火山引擎 veCLI 发布,开启智能开发新模式
  • UE学习记录11----地形数据获取等高线
  • 【C++】STL--priority_queue(优先级队列)使用及其模拟实现、容器适配器和deque(双端队列)了解
  • 数学差能学人工智能吗?
  • Verilog语法学习EP10:串口接收模块
  • 使用obs同步录制窗口的高质量游戏模式视频
  • Qt语言家的简单使用记录
  • Taro + vue3项目,如何生成安卓 apk 安装包
  • Hive HQL命令
  • 智慧医疗新纪元:快瞳科技如何用OCR技术重塑医疗单据处理体验
  • 4.1软件工程管理-CMM2软件项目规划-思考题
  • 知识图谱对自然语言处理深层语义分析的影响与启示:2025年研究综述
  • 4.1软件工程管理-CMM2软件项目规划
  • 《手搓动态顺序表:从数组到自动扩容的华丽转身》
  • 【Day 60】Linux-LVS负载均衡
  • bash zsh sh与shell 有什么关系
  • AI时代格局重构:2025 GEO服务公司Top3
  • GEO 优化重构数字营销格局 孟庆涛技术创新引领行业突破
  • 思迈特 Agent BI 发布,重构数据应用新范式
  • 重构组态软件边界:紫金桥如何实现原生跨平台?