开发者

使用Shell脚本实现SpringBoot项目自动化部署到Docker的操作指南

开发者 https://www.devze.com 2025-05-31 10:18 出处:网络 作者: LOVE_DDZ
目录一、准备环境1. 本地和服务器要求2. 本地项目结构示例二、编写部署脚本deploy/deploy.sh 内容:三、编写自动上传与执行脚本deploy-to-server.sh&njsbsp;内容:四、配置 SSH 免密登录(自动化关键)1. 本地生
目录
  • 一、准备环境
    • 1. 本地和服务器要求
    • 2. 本地项目结构示例
  • 二、编写部署脚本
    • deploy/deploy.sh 内容:
  • 三、编写自动上传与执行脚本
    • deploy-to-server.sh&njsbsp;内容:
  • 四、配置 SSH 免密登录(自动化关键)
    • 1. 本地生成密钥(如未生成)
    • 2. 将公钥添加到服务器
    • 3. 验证
  • 五、部署过程演示
    • 六、常见问题与解决

      一、准备环境

      1. 本地和服务器要求

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

      2. 本地项目结构示例

      project-root/
      ├── src/
      ├── target/
      │   └── yourapp.jar
      ├── Dockerfile
      └── deploy/
      │   └── deploy.sh
      └── deploy-to-server.sh
      

      二、编写部署脚本

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

      deploy/deploy.sh 内容:

      #!/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 $CONTAandroidINER_NAME -p $EXPOSE_PORT:$EXPOSE_PORT $IMAGE_NAME
      

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

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

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

      deploy-to-server.sh 内容:

      #!/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. 本地生成密钥(如未生成)

      ssh-keygen -t rsa -b 4096
      

      2. 将公钥添加到服务器

      ssh-copy-id ubuntu@[your.server.ip]
      

      或手动上传:

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

      3. 验证

      ssh ubuntu@[your.server.ip]
      

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

      五、部署过程演示

      只需一条命令即可:

      bash deploy-to-server.sh
      

      脚本会自动完成:

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

      六、常见问题与解决

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

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

      • Git Hooks + 脚本部署
      • Jenkins / github Actions 远程触发
      • 容器健康检查 + 日志集中处理

      以上就是使用Shell脚本实现SpringBoot项目android自动化部署android到Docker的操作指南的详细内容,更多关于Shell实现SpringBoot自动化部署的资料请关注编程客栈(www.devze.com)其它相关文章!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号