欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Shell腳本實(shí)現(xiàn)SpringBoot項(xiàng)目自動(dòng)化部署到Docker的操作指南

 更新時(shí)間:2025年05月30日 10:00:17   作者:LOVE_DDZ  
在日常項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)將SpringBoot項(xiàng)目打包并部署到服務(wù)器上的Docker環(huán)境中,為了提升效率、減少重復(fù)操作,我們可以通過Shell腳本實(shí)現(xiàn)自動(dòng)化部署,所以本文給大家介紹了使用Shell腳本實(shí)現(xiàn)SpringBoot項(xiàng)目自動(dòng)化部署到Docker的操作指南,需要的朋友可以參考下

一、準(zhǔn)備環(huán)境

1. 本地和服務(wù)器要求

  • 本地安裝了 Maven 和 JDK
  • 服務(wù)器操作系統(tǒng)為 Ubuntu 22.04 LTS
  • 服務(wù)器已安裝 Docker,并已配置當(dāng)前用戶對(duì) Docker 的權(quán)限(加入 docker 用戶組)

2. 本地項(xiàng)目結(jié)構(gòu)示例

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

二、編寫部署腳本

在 project-root/deploy 目錄中創(chuàng)建 deploy.sh 腳本(用于服務(wù)器端自動(dòng)執(zhí)行):

deploy/deploy.sh 內(nèi)容:

#!/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 ">>> 構(gòu)建 Docker 鏡像"
docker build -t $IMAGE_NAME .

echo ">>> 啟動(dòng)新容器"
docker run -d --name $CONTAINER_NAME -p $EXPOSE_PORT:$EXPOSE_PORT $IMAGE_NAME

注意:確保 Dockerfile 中的 EXPOSE 與實(shí)際 Java 服務(wù)端口一致。

三、編寫自動(dòng)上傳與執(zhí)行腳本

在本地項(xiàng)目根目錄添加一個(gè)部署腳本,如 deploy-to-server.sh

deploy-to-server.sh 內(nèi)容:

#!/bin/bash

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

echo ">>> 打包項(xiàng)目"
mvn clean package -DskipTests

echo ">>> 創(chuàng)建遠(yuǎn)程目錄"
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 ">>> 執(zhí)行部署腳本"
ssh $SERVER_USER@$SERVER_IP "chmod +x $SERVER_DIR/deploy.sh && cd $SERVER_DIR && ./deploy.sh"

四、配置 SSH 免密登錄(自動(dòng)化關(guān)鍵)

如果不想每次上傳/執(zhí)行都輸入密碼,請(qǐng)配置 SSH 免密登錄:

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

ssh-keygen -t rsa -b 4096

2. 將公鑰添加到服務(wù)器

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

或手動(dòng)上傳:

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

3. 驗(yàn)證

ssh ubuntu@[your.server.ip]

應(yīng)無(wú)需輸入密碼即可登錄。

五、部署過程演示

只需一條命令即可:

bash deploy-to-server.sh

腳本會(huì)自動(dòng)完成:

  • 打包項(xiàng)目
  • 上傳構(gòu)建產(chǎn)物與部署腳本
  • 構(gòu)建 Docker 鏡像
  • 啟動(dòng)容器服務(wù)

六、常見問題與解決

問題解決方法
Permission denied 上傳失敗確保目標(biāo)目錄屬于當(dāng)前用戶或改為 /home/ubuntu
Docker 權(quán)限錯(cuò)誤將用戶加入 docker 組:sudo usermod -aG docker $USER 并重啟
容器端口配置不一致確保 Dockerfile 中 EXPOSE 和 Java 服務(wù)端口一致
腳本無(wú)法執(zhí)行加權(quán)限:chmod +x deploy.sh

如果希望進(jìn)一步提升部署體驗(yàn),還可以引入:

  • Git Hooks + 腳本部署
  • Jenkins / GitHub Actions 遠(yuǎn)程觸發(fā)
  • 容器健康檢查 + 日志集中處理

以上就是使用Shell腳本實(shí)現(xiàn)SpringBoot項(xiàng)目自動(dòng)化部署到Docker的操作指南的詳細(xì)內(nèi)容,更多關(guān)于Shell實(shí)現(xiàn)SpringBoot自動(dòng)化部署的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java的四種常見線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解

    Java的四種常見線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java的四種常見線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解,在Java中,我們可以通過Executors類來創(chuàng)建ScheduledThreadPool,Executors類提供了幾個(gè)靜態(tài)方法來創(chuàng)建不同類型的線程池,包括ScheduledThreadPool,需要的朋友可以參考下
    2023-09-09
  • spring-data-jpa中findOne與getOne的區(qū)別說明

    spring-data-jpa中findOne與getOne的區(qū)別說明

    這篇文章主要介紹了spring-data-jpa中findOne與getOne的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot整合mqtt服務(wù)的示例代碼

    Springboot整合mqtt服務(wù)的示例代碼

    MQTT是一個(gè)基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡(jiǎn)單、開放和易于實(shí)現(xiàn)的,這些特點(diǎn)使它適用范圍非常廣泛。本文為大家分享了Springboot整合mqtt服務(wù)的示例代碼,需要的可以參考一下
    2022-03-03
  • 如何在Mac下配置多個(gè)Java版本

    如何在Mac下配置多個(gè)Java版本

    這篇文章主要介紹了如何在Mac下配置多個(gè)Java版本以及需要注意的點(diǎn)詳細(xì)說明,需要的朋友參考下步驟吧。
    2018-02-02
  • JAVA十大排序算法之希爾排序詳解

    JAVA十大排序算法之希爾排序詳解

    這篇文章主要介紹了java中的希爾排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • String.intern()作用與常量池關(guān)系示例解析

    String.intern()作用與常量池關(guān)系示例解析

    這篇文章主要為大家介紹了String.intern()作用與常量池關(guān)系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Spring Security中防護(hù)CSRF功能詳解

    Spring Security中防護(hù)CSRF功能詳解

    這篇文章主要介紹了Spring Security中防護(hù)CSRF功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 判斷以逗號(hào)分隔的字符串中是否包含某個(gè)數(shù)的實(shí)例

    判斷以逗號(hào)分隔的字符串中是否包含某個(gè)數(shù)的實(shí)例

    下面小編就為大家?guī)硪黄袛嘁远禾?hào)分隔的字符串中是否包含某個(gè)數(shù)的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • idea如何查看安裝插件的位置

    idea如何查看安裝插件的位置

    這篇文章主要介紹了idea如何查看安裝插件的位置問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • SpringBoot加載讀取配置文件過程詳細(xì)分析

    SpringBoot加載讀取配置文件過程詳細(xì)分析

    在實(shí)際的項(xiàng)目開發(fā)過程中,我們經(jīng)常需要將某些變量從代碼里面抽離出來,放在配置文件里面,以便更加統(tǒng)一、靈活的管理服務(wù)配置信息。所以本文將為大家總結(jié)一下SpringBoot加載配置文件的常用方式,需要的可以參考一下
    2023-01-01

最新評(píng)論