【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 包(简单快捷)
适用于小型应用或测试环境,步骤如下:
-
上传 Spring Boot 应用
将本地打包好的xxx.jar
文件(通过mvn package
生成)上传到 Ubuntu 服务器,例如使用scp
命令:# 本地执行,将 jar 传到服务器的 /opt/app 目录 scp target/your-app.jar username@服务器IP:/opt/app/
-
运行应用
直接通过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 文件- 结尾
&
:后台运行
-
停止应用
# 查找进程 ID ps -ef | grep your-app.jar# 终止进程 kill -9 进程ID
方法二:通过 Systemd 管理(生产环境推荐)
使用系统服务管理应用,支持开机自启、状态监控等,步骤如下:
-
准备 JAR 包
同方法一,确保 JAR 包已上传到服务器(如/var/www/javaWeb/spSecurity.jar
)。记住这个路径,第二步需要这个路径。
修改 jar包所在文件夹的 权限,设置为 755
, 即 文件拥有者要有读、写、执行三个权限。(这个很重要)sudo chmod -R 755 /var/www/javaWeb
-
创建 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 # 多用户模式下开机自启
这个服务中的注释
要去掉
-
管理服务
# 重新加载服务配置 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
-
查看日志
# 实时查看日志 sudo journalctl -u javaInterface -f# 查看最近 100 行日志 sudo journalctl -u javaInterface -n 100
方法三:使用 Docker 部署(推荐,环境隔离)
-
安装 Docker
# 安装 Docker sudo apt install docker.io# 启动 Docker 服务 sudo systemctl start docker sudo systemctl enable docker# 允许当前用户操作 Docker(避免每次用 sudo) sudo usermod -aG docker $USER # 需重新登录生效
-
创建 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"]
-
构建并运行镜像
# 构建镜像(注意末尾的 .) docker build -t your-app:1.0 .# 运行容器(后台运行,映射端口 8080) docker run -d -p 8080:8080 --name your-app-container your-app:1.0
-
管理容器
# 查看运行状态 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 部署,后者更便于环境一致性管理。