使用 Shell 脚本实现 Spring Boot 项目自动化部署到 Docker(Ubuntu 服务器)

使用 Shell 脚本实现 Spring Boot 项目自动化部署到 Docker(Ubuntu 服务器)

在日常项目开发中,我们经常会将 Spring Boot 项目打包并部署到服务器上的 Docker 环境中。为了提升效率、减少重复操作,我们可以通过 Shell 脚本实现自动化部署。


🧱 一、准备环境

1. 本地和服务器要求

  • 本地安装了 Maven 和 JDK
  • 服务器操作系统为 Ubuntu 22.04 LTS
  • 服务器已安装 Docker,并已配置当前用户对 Docker 的权限(加入 docker 用户组)

2. 本地项目结构示例

bash 复制代码
project-root/
├── src/
├── target/
│   └── yourapp.jar
├── Dockerfile
└── deploy/
│   └── deploy.sh
└── deploy-to-server.sh

🚀 二、编写部署脚本

project-root/deploy 目录中创建 deploy.sh 脚本(用于服务器端自动执行):

🔧 deploy/deploy.sh 内容:

bash 复制代码
#!/bin/bash

APP_NAME="ddz_demo"
IMAGE_NAME="ddz_demo_image"
CONTAINER_NAME="ddz_demo_container"
JAR_FILE="ddz_demo.jar"
EXPOSE_PORT=9090

echo ">>> 清理旧容器(如有)"
docker stop $CONTAINER_NAME 2>/dev/null || true
docker rm $CONTAINER_NAME 2>/dev/null || true
docker rmi $IMAGE_NAME 2>/dev/null || true

echo ">>> 构建 Docker 镜像"
docker build -t $IMAGE_NAME .

echo ">>> 启动新容器"
docker run -d --name $CONTAINER_NAME -p $EXPOSE_PORT:$EXPOSE_PORT $IMAGE_NAME

注意:确保 Dockerfile 中的 EXPOSE 与实际 Java 服务端口一致。


🛠️ 三、编写自动上传与执行脚本

在本地项目根目录添加一个部署脚本,如 deploy-to-server.sh

🔧 deploy-to-server.sh 内容:

bash 复制代码
#!/bin/bash

SERVER_USER="youruser"
SERVER_IP="your.server.ip"
SERVER_DIR="/home/ubuntu/ddz_demo"

echo ">>> 打包项目"
mvn clean package -DskipTests

echo ">>> 创建远程目录"
ssh $SERVER_USER@$SERVER_IP "mkdir -p $SERVER_DIR"

echo ">>> 上传文件"
scp target/ddz_demo.jar Dockerfile deploy/deploy.sh $SERVER_USER@$SERVER_IP:$SERVER_DIR/

echo ">>> 执行部署脚本"
ssh $SERVER_USER@$SERVER_IP "chmod +x $SERVER_DIR/deploy.sh && cd $SERVER_DIR && ./deploy.sh"

🔑 四、配置 SSH 免密登录(自动化关键)

如果不想每次上传/执行都输入密码,请配置 SSH 免密登录:

1. 本地生成密钥(如未生成)

bash 复制代码
ssh-keygen -t rsa -b 4096

2. 将公钥添加到服务器

bash 复制代码
ssh-copy-id ubuntu@[your.server.ip]

或手动上传:

bash 复制代码
cat ~/.ssh/id_rsa.pub | ssh ubuntu@[your.server.ip] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3. 验证

bash 复制代码
ssh ubuntu@[your.server.ip]

应无需输入密码即可登录。


🧪 五、部署过程演示

只需一条命令即可:

bash 复制代码
bash deploy-to-server.sh

脚本会自动完成:

  1. 打包项目
  2. 上传构建产物与部署脚本
  3. 构建 Docker 镜像
  4. 启动容器服务

🧯 六、常见问题与解决

问题 解决方法
Permission denied 上传失败 确保目标目录属于当前用户或改为 /home/ubuntu
Docker 权限错误 将用户加入 docker 组:sudo usermod -aG docker $USER 并重启
容器端口配置不一致 确保 Dockerfile 中 EXPOSE 和 Java 服务端口一致
脚本无法执行 加权限:chmod +x deploy.sh

如果希望进一步提升部署体验,还可以引入:

  • Git Hooks + 脚本部署
  • Jenkins / GitHub Actions 远程触发
  • 容器健康检查 + 日志集中处理
相关推荐
计算机学姐16 小时前
基于SpringBoot的校园二手交易系统
java·vue.js·spring boot·后端·spring·tomcat·intellij-idea
Mr_Chenph16 小时前
OpenClaw 3.13 Skill编写初探(Docker)
docker·skill·openclaw
小胖java16 小时前
养老院管理系统
java·spring boot
学不完的16 小时前
Docker 的安全优化
运维·安全·docker·容器·eureka
twc82916 小时前
打造专属 MCP Server 测试自动化的私有化解决方案
运维·软件测试·人工智能·自动化·mcp server
实在智能RPA16 小时前
实在 Agent 支持哪些企业业务场景的自动化?全行业智能自动化场景深度拆解
java·运维·自动化
Xpower 1716 小时前
Clawith:开启多智能体协作的新纪元
人工智能·python·语言模型·自动化
moxiaoran575316 小时前
使用springboot+flowable实现一个简单的订单审批工作流
java·spring boot·后端
柯儿的天空17 小时前
【OpenClaw 全面解析:从零到精通】第 021 篇:Claw 家族全景——从桌面级到边缘部署的轻量级智能体变体深度解析
gpt·ai作画·自动化·aigc·ai编程·ai写作·agi
恋红尘17 小时前
K8S 服务发现-叩丁狼
linux·docker·kubernetes