一、准备环境
1. 本地和服务器要求
- 本地安装了 maven 和 jdk
- 服务器操作系统为 ubuntu 22.04 lts
- 服务器已安装 docker,并已配置当前用户对 docker 的权限(加入
docker
用户组)
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 $container_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项目自动化部署到docker的操作指南的详细内容,更多关于shell实现springboot自动化部署的资料请关注代码网其它相关文章!
发表评论