<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Docker 部署微服務項目保姆級教程

      簡介

      這是一篇專門寫給編程新手的微服務部署全流程教程,不用糾結(jié)復雜概念,不用怕踩網(wǎng)絡或環(huán)境坑。我們從Docker環(huán)境一鍵搭建開始,用軒轅鏡像解決國內(nèi)拉取鏡像慢的問題,避開OpenJDK棄用的雷區(qū),全程手把手帶你完成「本地調(diào)試→服務器部署」,哪怕是2核4G的低配服務器,也能順利跑通包含MySQL、Redis、Nacos和4個電商場景業(yè)務服務的微服務項目。

      前置準備:Docker及Docker Compose環(huán)境搭建

      剛接觸微服務部署的同學,千萬別上來就懟服務器——先把本地Docker環(huán)境搞定,后續(xù)操作會少走90%的坑。而且這一步超級簡單,用腳本一鍵就能完成。

      為什么選Docker部署微服務?

      傳統(tǒng)部署微服務太折磨人了:要手動裝MySQL、Redis這些依賴,版本不對還會沖突;本地跑的好好的,一上服務器就報錯;啟動服務要敲一堆命令,忘了順序還得重來。而Docker能一次性解決這些問題:

      • 環(huán)境一致:把應用和依賴打包成「鏡像」,就像帶配置的安裝包,本地、服務器跑起來完全一樣;
      • 隔離安全:每個服務跑在獨立容器里,不會互相干擾,也不用擔心影響主機環(huán)境;
      • 操作簡單:用Docker Compose寫個配置文件,一行命令就能啟動所有服務;
      • 迭代方便:更新版本只需拉新鏡像,出問題回滾也快;
      • 資源夠省:容器啟動秒級響應,2核4G服務器跑一套微服務完全夠用。

      一鍵安裝Docker及Docker Compose

      不管你用的是Linux、Mac還是Windows(需開啟WSL2),復制下面的命令到終端,回車就能自動安裝,還會配置好軒轅鏡像加速,不用手動調(diào)配置:

      # 直接復制到終端執(zhí)行,Linux/Mac/WSL2通用
      bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
      

      安裝完成后,一定要驗證一下環(huán)境是否可用,輸入兩個命令:

      docker --version  # 能看到版本號(比如Docker version 27.0.3)就對了
      docker compose --version  # 輸出類似Docker Compose version v2.27.0即可
      

      如果是Windows或Mac用戶,想更直觀地管理容器,也可以裝Docker Desktop(官網(wǎng)直接搜就能下載),安裝后會自動關(guān)聯(lián)本地Docker環(huán)境,圖形化界面能看到容器啟動狀態(tài),新手友好度拉滿。

      Maven安裝說明(本地/服務器雙方案)

      打包微服務需要Maven環(huán)境,這里提供「容器免安裝」和「手動安裝」兩種方案,新手優(yōu)先選容器方案(無需配置環(huán)境變量,直接可用)。

      方案1:Docker容器方案(推薦新手,免安裝)

      無需手動安裝Maven,直接使用官方Maven鏡像運行打包命令,容器退出后不殘留環(huán)境,命令如下(后續(xù)打包會直接用此方式):

      # 格式:docker run -v 本地項目路徑:/app -w /app maven:版本 打包命令
      docker run -v $(pwd):/app -w /app maven:3.8.1-jdk-8-slim mvn clean package -DskipTests
      

      方案2:手動安裝(本地/服務器通用)

      若需本地長期使用Maven,可手動安裝,步驟如下:

      1. 下載Maven:訪問Maven官網(wǎng),下載對應系統(tǒng)的壓縮包(如Linux選apache-maven-3.8.8-bin.tar.gz);
      2. 解壓安裝
        • Linux/Mac:終端執(zhí)行tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /usr/local/
        • Windows:右鍵解壓到指定目錄(如D:\apache-maven-3.8.8);
      3. 配置環(huán)境變量
        • Linux/Mac:編輯/etc/profile,添加export MAVEN_HOME=/usr/local/apache-maven-3.8.8export PATH=$MAVEN_HOME/bin:$PATH,執(zhí)行source /etc/profile生效;
        • Windows:右鍵「此電腦」→屬性→高級系統(tǒng)設(shè)置→環(huán)境變量,新增MAVEN_HOME變量(值為解壓路徑),在Path中添加%MAVEN_HOME%\bin
      4. 驗證安裝:終端執(zhí)行mvn -v,能看到Maven版本信息即成功。

      核心概念:不用死記,理解就行

      剛接觸Docker的同學,不用糾結(jié)復雜術(shù)語,記住兩個核心東西,后續(xù)操作就順了:

      • 鏡像:相當于「帶環(huán)境的安裝包」,包含了應用運行需要的所有東西(如JDK、MySQL程序),我們從鏡像倉庫拉取后就能用;
      • 容器:鏡像運行起來后的實例,就像裝好了軟件的虛擬機,能啟動、停止、刪除,刪除后數(shù)據(jù)不會殘留(除非配置了持久化)。

      這里有個關(guān)鍵提醒:很多教程里用的OpenJDK鏡像已經(jīng)被棄用了,繼續(xù)用會出兼容性問題!給大家整理了5個官方推薦的替代鏡像,新手優(yōu)先選Amazon Corretto,體積小、適配性強,每個鏡像都能在軒轅鏡像平臺查到詳細用法(Amazon Corretto是構(gòu)建業(yè)務服務的基礎(chǔ)鏡像,屬于環(huán)境依賴范疇,并非業(yè)務服務本身):

      而Docker Compose,你可以把它理解成「容器管家」——不用一個個啟動MySQL、Redis、業(yè)務服務,寫個配置文件,告訴它要啟動哪些容器、容器之間的關(guān)系,它就能按順序一鍵啟動,還能統(tǒng)一管理。

      部署流程概覽

      整個部署分兩大步,邏輯超清晰:

      1. 本地部署:先在自己電腦上把所有服務調(diào)通,確認沒問題再上服務器,風險低、調(diào)試方便;
      2. 服務器部署:把本地調(diào)好的代碼和配置同步到服務器,一鍵啟動,完成線上部署。

      每一步都有明確的目標,跟著做就行,不用自己瞎琢磨順序。

      第一階段:本地部署(8步搞定,新手也能一次過)

      本地部署的核心是「把所有服務跑起來,驗證功能正常」,我們以電商基礎(chǔ)場景為例(包含用戶、商品、訂單核心服務),一步步操作:

      1. 梳理服務部署表格:先把要部署的東西列清楚

      部署前先列個清單,避免漏服務或搞混啟動順序。我們把服務分成「環(huán)境依賴」和「業(yè)務服務」兩類——必須先啟動環(huán)境依賴,再啟動業(yè)務服務,不然會報“連接不上數(shù)據(jù)庫”之類的錯。表格中所有信息均與后續(xù)配置文件、命令嚴格對應,新手可直接復用。

      服務名稱 英文名 端口號 版本/鏡像說明 服務類別 核心作用 軒轅鏡像詳情頁
      數(shù)據(jù)庫 mysql 3306 mysql:8 環(huán)境依賴 存儲用戶、商品、訂單數(shù)據(jù) https://xuanyuan.cloud/r/library/mysql
      緩存服務 redis 6379 redis:6 環(huán)境依賴 緩存熱點數(shù)據(jù)(如商品詳情) https://xuanyuan.cloud/r/library/redis
      消息隊列 rabbitmq 5672(通信)/15672(管理) rabbitmq:3.12.6-management 環(huán)境依賴 異步處理訂單(如創(chuàng)建訂單后發(fā)通知) https://xuanyuan.cloud/r/library/rabbitmq
      注冊中心 nacos 8848 nacos/nacos-server:v2.2.0-slim 環(huán)境依賴 服務注冊與發(fā)現(xiàn)(管理業(yè)務服務) https://xuanyuan.cloud/r/nacos/nacos-server
      網(wǎng)關(guān)服務 mall-gateway 8080 基于Amazon Corretto:8-alpine構(gòu)建 業(yè)務服務 統(tǒng)一入口,路由請求到對應服務 https://xuanyuan.cloud/r/library/amazoncorretto
      用戶中心服務 mall-user-service 8081 基于Amazon Corretto:8-alpine構(gòu)建 業(yè)務服務 處理用戶注冊、登錄、信息管理 https://xuanyuan.cloud/r/library/amazoncorretto
      商品管理服務 mall-product-service 8082 基于Amazon Corretto:8-alpine構(gòu)建 業(yè)務服務 處理商品新增、查詢、庫存管理 https://xuanyuan.cloud/r/library/amazoncorretto
      訂單服務 mall-order-service 8083 基于Amazon Corretto:8-alpine構(gòu)建 業(yè)務服務 處理訂單創(chuàng)建、支付狀態(tài)同步 https://xuanyuan.cloud/r/library/amazoncorretto

      2. Docker環(huán)境下打包:不用本地裝Maven,容器內(nèi)搞定

      微服務項目用Maven子父模塊管理,不用一個個打包,用Docker容器就能一鍵打包所有服務,還不會污染本地環(huán)境。

      先確認你的項目是子父模塊結(jié)構(gòu)(父模塊mall-parent包含mall-gatewaymall-user-service等4個業(yè)務子模塊),然后給pom.xml加好配置:

      • 父模塊(mall-parent)pom.xml:引入spring-boot-maven-plugin,注意別加configuration和repackage,統(tǒng)一管理插件版本:
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <version>2.7.10</version> <!-- 與Spring Boot版本對應 -->
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
        
      • 業(yè)務子模塊(如mall-user-service)pom.xml:加repackage配置,讓依賴自動打入jar包,每個業(yè)務子模塊都需添加:
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>repackage</id>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        

      配置好后,打開終端進入項目根目錄(mall-parent),執(zhí)行下面的命令(用Maven容器打包,不用本地裝Maven):

      # Windows用戶把$(pwd)改成自己的項目路徑,比如/c/Users/xxx/mall-parent
      docker run -v $(pwd):/app -w /app maven:3.8.1-jdk-8-slim mvn clean package -DskipTests
      

      打包成功后,每個業(yè)務子模塊的target目錄里會出現(xiàn)xxx.jar文件(比如mall-user-service-0.0.1-SNAPSHOT.jar),這就是我們要部署的應用包。

      3. 編寫Dockerfile:給每個業(yè)務服務做「安裝包」

      Dockerfile是構(gòu)建鏡像的說明書,告訴Docker怎么用Amazon Corretto基礎(chǔ)鏡像打包我們的業(yè)務服務。新手不用自己寫,復制下面的模板,改改jar包名稱和端口就行。

      我們選「復制jar包版」(本地已經(jīng)打好包,效率高),以「用戶中心服務」為例,在mall-user-service目錄下新建Dockerfile,內(nèi)容如下(所有業(yè)務服務的Dockerfile結(jié)構(gòu)一致,僅需修改jar包名稱和端口):

      # 基礎(chǔ)鏡像:用軒轅加速的Amazon Corretto(OpenJDK替代方案,環(huán)境依賴)
      FROM xxx.xuanyuan.run/library/amazoncorretto:8-alpine
      
      # 指定容器內(nèi)的工作目錄,后續(xù)命令都在此目錄執(zhí)行
      WORKDIR /app
      
      # 把本地target目錄的jar包復制到容器的工作目錄(jar包名稱要和自己的一致)
      ADD target/mall-user-service-0.0.1-SNAPSHOT.jar .
      
      # 暴露服務端口(必須和服務配置的端口一致,用戶中心服務是8081)
      EXPOSE 8081
      
      # 啟動命令:指定生產(chǎn)環(huán)境配置文件(prod配置需提前編寫,后續(xù)步驟會講)
      ENTRYPOINT ["java","-jar","/app/mall-user-service-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
      

      按同樣的方式,給另外3個業(yè)務服務編寫Dockerfile:

      • 網(wǎng)關(guān)服務(mall-gateway):修改jar包為mall-gateway-0.0.1-SNAPSHOT.jar,端口為8080;
      • 商品管理服務(mall-product-service):jar包為mall-product-service-0.0.1-SNAPSHOT.jar,端口8082;
      • 訂單服務(mall-order-service):jar包為mall-order-service-0.0.1-SNAPSHOT.jar,端口8083。

      寫完后可以在IDEA里調(diào)試:右鍵Dockerfile→Build Image,輸入鏡像名稱(比如mall-user-service),構(gòu)建成功后啟動容器,查看日志如果能看到Spring的圖標,說明Dockerfile沒問題。

      4. 編寫環(huán)境依賴配置:一鍵啟動MySQL、Redis等服務

      環(huán)境依賴(MySQL、Redis、RabbitMQ、Nacos)要單獨配置,避免和業(yè)務服務一起啟動時順序混亂。在項目根目錄(mall-parent)新建docker-compose.env.yml文件,內(nèi)容如下(所有鏡像都用軒轅加速地址,國內(nèi)拉取超快,配置與服務表格嚴格對應):

      version: '3'
      services:
        # MySQL服務(對應表格中"數(shù)據(jù)庫"服務)
        mysql:
          image: xxx.xuanyuan.run/library/mysql:8  # 軒轅加速鏡像,拉取速度快
          container_name: mall-mysql  # 容器名稱,與服務名對應,好記
          environment:
            MYSQL_ROOT_PASSWORD: 123456  # 數(shù)據(jù)庫密碼,建議后續(xù)修改為復雜密碼
            MYSQL_DATABASE: mall_db  # 自動創(chuàng)建業(yè)務數(shù)據(jù)庫,無需手動建庫
          ports:
            - "3306:3306"  # 端口映射:本地3306 ? 容器3306(與表格端口一致)
          volumes:
            - ./.mysql-data:/var/lib/mysql  # 數(shù)據(jù)持久化:容器刪除后數(shù)據(jù)不丟失
            - ./mysql-init:/docker-entrypoint-initdb.d  # 初始化腳本目錄:啟動時自動執(zhí)行SQL
          restart: always  # 容器崩潰后自動重啟,提高穩(wěn)定性
          networks:
            - mall-network  # 加入自定義網(wǎng)絡,確保與其他環(huán)境依賴互通
      
        # Redis服務(對應表格中"緩存服務")
        redis:
          image: xxx.xuanyuan.run/library/redis:6  # 軒轅加速鏡像
          container_name: mall-redis  # 與表格服務名對應
          ports:
            - "6379:6379"  # 端口映射(與表格一致)
          volumes:
            - ./.redis-data:/data  # 持久化緩存數(shù)據(jù)
          command: redis-server --appendonly yes  # 開啟AOF持久化,防止緩存丟失
          networks:
            - mall-network
      
        # RabbitMQ服務(對應表格中"消息隊列")
        rabbitmq:
          image: xxx.xuanyuan.run/library/rabbitmq:3.12.6-management  # 帶管理面板的鏡像
          container_name: mall-rabbitmq  # 與表格服務名對應
          environment:
            RABBITMQ_DEFAULT_USER: guest  # 默認賬號(測試用,生產(chǎn)環(huán)境需修改)
            RABBITMQ_DEFAULT_PASS: guest  # 默認密碼
          ports:
            - "5672:5672"  # 消息通信端口(與表格一致)
            - "15672:15672"  # 管理面板端口(與表格一致)
          volumes:
            - ./.rabbitmq-data:/var/lib/rabbitmq  # 持久化消息數(shù)據(jù)
          networks:
            - mall-network
      
        # Nacos服務(對應表格中"注冊中心")
        nacos:
          image: xxx.xuanyuan.run/library/nacos/nacos-server:v2.2.0-slim  # 支持arm64架構(gòu),避免啟動失敗
          container_name: mall-nacos  # 與表格服務名對應
          ports:
            - "8848:8848"  # 端口映射(與表格一致)
          volumes:
            - ./.nacos-data:/home/nacos/data  # 持久化服務注冊信息
            - ./.nacos-log:/home/nacos/logs  # 日志持久化,方便排查問題
          environment:
            - MODE=standalone  # 單節(jié)點模式:適合測試和小型生產(chǎn)環(huán)境
            - PREFER_HOST_MODE=hostname  # 支持主機名訪問
            - TZ=Asia/Shanghai  # 時區(qū)配置:避免日志時間錯亂
          networks:
            - mall-network
      
      # 自定義網(wǎng)絡:所有環(huán)境依賴在同一網(wǎng)絡,確保互相訪問無阻礙
      networks:
        mall-network:
      

      關(guān)鍵準備步驟:在項目根目錄新建mysql-init文件夾,里面放init.sql初始化腳本(創(chuàng)建業(yè)務表,以用戶表為例),啟動MySQL時會自動執(zhí)行,無需手動建表:

      -- 切換到業(yè)務數(shù)據(jù)庫
      USE mall_db;
      
      -- 創(chuàng)建用戶表(用戶中心服務用)
      CREATE TABLE `user` (
        `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
        `username` varchar(50) NOT NULL COMMENT '用戶名',
        `password` varchar(100) NOT NULL COMMENT '加密密碼',
        `phone` varchar(20) DEFAULT NULL COMMENT '手機號',
        `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
        PRIMARY KEY (`id`),
        UNIQUE KEY `idx_username` (`username`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';
      
      -- 可繼續(xù)添加商品表、訂單表...
      

      配置好后,執(zhí)行下面的命令啟動環(huán)境依賴:

      docker compose -f docker-compose.env.yml up
      

      啟動后逐一驗證(確保與表格中服務一致):

      • MySQL:用Navicat連接localhost:3306,賬號root,密碼123456,能看到mall_db數(shù)據(jù)庫和user表就對了;
      • Redis:用Redis客戶端連接localhost:6379,執(zhí)行set test 123能成功,說明正常;
      • RabbitMQ:瀏覽器打開localhost:15672,賬號密碼都是guest,能登錄管理面板就行;
      • Nacos:瀏覽器打開localhost:8848/nacos,賬號密碼都是nacos,能進入控制臺就沒問題。

      5. 編寫業(yè)務服務配置:關(guān)聯(lián)環(huán)境依賴,一鍵啟動

      環(huán)境依賴能正常運行后,編寫業(yè)務服務的配置文件docker-compose.service.yml(放在項目根目錄),配置與服務表格、環(huán)境依賴配置嚴格對應,確保服務間能正常通信:

      version: '3'
      services:
        # 網(wǎng)關(guān)服務(對應表格中"網(wǎng)關(guān)服務",先啟動網(wǎng)關(guān),作為統(tǒng)一入口)
        mall-gateway:
          container_name: mall-gateway  # 與表格服務名一致
          build:
            context: ./mall-gateway  # 網(wǎng)關(guān)服務的根目錄(含Dockerfile)
            dockerfile: Dockerfile
          ports:
            - "8080:8080"  # 端口映射(與表格一致)
          networks:
            - mall-network  # 與環(huán)境依賴用同一網(wǎng)絡,確保能訪問MySQL等服務
          depends_on:
            - nacos  # 網(wǎng)關(guān)依賴注冊中心,確保Nacos先啟動
      
        # 用戶中心服務(對應表格中"用戶中心服務")
        mall-user-service:
          container_name: mall-user-service  # 與表格一致
          build:
            context: ./mall-user-service
            dockerfile: Dockerfile
          ports:
            - "8081:8081"  # 與表格端口一致
          networks:
            - mall-network
          depends_on:
            - mall-gateway  # 依賴網(wǎng)關(guān)
            - mysql  # 依賴數(shù)據(jù)庫
            - redis  # 依賴緩存
            - nacos  # 依賴注冊中心
      
        # 商品管理服務(對應表格中"商品管理服務")
        mall-product-service:
          container_name: mall-product-service  # 與表格一致
          build:
            context: ./mall-product-service
            dockerfile: Dockerfile
          ports:
            - "8082:8082"  # 與表格端口一致
          networks:
            - mall-network
          depends_on:
            - mall-gateway
            - mysql
            - redis
            - nacos
      
        # 訂單服務(對應表格中"訂單服務")
        mall-order-service:
          container_name: mall-order-service  # 與表格一致
          build:
            context: ./mall-order-service
            dockerfile: Dockerfile
          ports:
            - "8083:8083"  # 與表格端口一致
          networks:
            - mall-network
          depends_on:
            - mall-gateway
            - mysql
            - redis
            - rabbitmq  # 訂單服務依賴消息隊列
            - nacos
      
      # 與環(huán)境依賴共用同一網(wǎng)絡,確保業(yè)務服務能訪問所有環(huán)境依賴
      networks:
        mall-network:
      

      這里的depends_on只是控制啟動順序,不會等服務完全就緒,所以一定要先確認環(huán)境依賴已經(jīng)正常運行,再啟動業(yè)務服務。

      6. 調(diào)整程序配置:解決容器內(nèi)訪問問題

      這是新手最容易踩的坑——本地用localhost能訪問MySQL,容器里就不行了!因為容器內(nèi)的localhost指向容器本身,不是你的電腦,要把配置里的localhost改成環(huán)境依賴的服務名(比如MySQL的服務名是mysql,與docker-compose.env.yml中的服務名一致)。

      給每個業(yè)務服務新建src/main/resources/application-prod.yml(生產(chǎn)環(huán)境配置),配置與服務表格、環(huán)境依賴配置嚴格對應:

      (1)用戶中心服務(mall-user-service)配置

      spring:
        profiles: prod  # 指定為生產(chǎn)環(huán)境配置
        # 數(shù)據(jù)庫配置(localhost改成mysql,與環(huán)境依賴服務名一致)
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://mysql:3306/mall_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
          username: root
          password: 123456  # 與MySQL的密碼一致
        # Redis配置(localhost改成redis,與環(huán)境依賴服務名一致)
        redis:
          host: redis
          port: 6379  # 與表格中Redis端口一致
          timeout: 5000  # 連接超時時間
        # Nacos注冊中心配置(localhost改成nacos,與環(huán)境依賴服務名一致)
        cloud:
          nacos:
            discovery:
              server-addr: nacos:8848  # 與表格中Nacos端口一致
              service: mall-user-service  # 服務名,與表格一致
        application:
          name: mall-user-service  # 應用名,與服務名一致
      
      server:
        port: 8081  # 服務端口,與表格一致
      

      (2)商品管理服務(mall-product-service)配置

      僅需修改服務名和端口,其他與用戶服務一致:

      spring:
        profiles: prod
        datasource:
          url: jdbc:mysql://mysql:3306/mall_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
          username: root
          password: 123456
        redis:
          host: redis
          port: 6379
        cloud:
          nacos:
            discovery:
              server-addr: nacos:8848
              service: mall-product-service  # 與表格服務名一致
        application:
          name: mall-product-service
      
      server:
        port: 8082  # 與表格一致
      

      (3)訂單服務(mall-order-service)配置

      新增RabbitMQ配置(依賴消息隊列),其他與上述服務一致:

      spring:
        profiles: prod
        datasource:
          url: jdbc:mysql://mysql:3306/mall_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
          username: root
          password: 123456
        redis:
          host: redis
          port: 6379
        # RabbitMQ配置(localhost改成rabbitmq,與環(huán)境依賴服務名一致)
        rabbitmq:
          host: rabbitmq
          port: 5672  # 與表格中RabbitMQ通信端口一致
          username: guest
          password: guest
        cloud:
          nacos:
            discovery:
              server-addr: nacos:8848
              service: mall-order-service  # 與表格服務名一致
        application:
          name: mall-order-service
      
      server:
        port: 8083  # 與表格一致
      

      (4)網(wǎng)關(guān)服務(mall-gateway)配置

      核心是路由配置,將請求轉(zhuǎn)發(fā)到對應業(yè)務服務:

      spring:
        profiles: prod
        cloud:
          # Nacos注冊中心配置
          nacos:
            discovery:
              server-addr: nacos:8848  # 與環(huán)境依賴服務名一致
          # 網(wǎng)關(guān)路由配置(與業(yè)務服務名對應)
          gateway:
            routes:
              # 路由到用戶中心服務
              - id: mall-user-service
                uri: lb://mall-user-service  # 負載均衡指向用戶服務
                predicates:
                  - Path=/api/user/**  # 匹配/api/user開頭的請求
                filters:
                  - StripPrefix=1  # 去掉/api前綴后轉(zhuǎn)發(fā)
              # 路由到商品管理服務
              - id: mall-product-service
                uri: lb://mall-product-service
                predicates:
                  - Path=/api/product/**
                filters:
                  - StripPrefix=1
              # 路由到訂單服務
              - id: mall-order-service
                uri: lb://mall-order-service
                predicates:
                  - Path=/api/order/**
                filters:
                  - StripPrefix=1
        application:
          name: mall-gateway  # 與表格服務名一致
      
      server:
        port: 8080  # 與表格一致
      
      # 開啟網(wǎng)關(guān)Swagger文檔支持(方便接口測試)
      knife4j:
        gateway:
          enabled: true
          strategy: discover
          discover:
            enabled: true
            version: swagger2
      

      硬編碼修復提醒:如果代碼里有硬編碼的localhost(比如直接寫factory.setHost("localhost")連接RabbitMQ),一定要改成從配置文件讀取,示例:

      @Slf4j
      @Component
      public class InitRabbitMqConfig {
          // 從配置文件讀取RabbitMQ地址,默認值localhost(適配本地開發(fā))
          @Value("${spring.rabbitmq.host:localhost}")
          private String rabbitmqHost;
      
          @PostConstruct
          public void initExchangeAndQueue() {
              try {
                  ConnectionFactory factory = new ConnectionFactory();
                  factory.setHost(rabbitmqHost);  // 用配置的地址,不是硬編碼
                  Connection connection = factory.newConnection();
                  Channel channel = connection.createChannel();
                  // 后續(xù)創(chuàng)建交換機、隊列邏輯不變...
                  log.info("RabbitMQ交換機和隊列初始化成功");
              } catch (Exception e) {
                  log.error("RabbitMQ初始化失敗", e);
              }
          }
      }
      

      改完配置后,重新執(zhí)行Maven打包命令,更新jar包:

      docker run -v $(pwd):/app -w /app maven:3.8.1-jdk-8-slim mvn clean package -DskipTests
      

      7. 本地啟動業(yè)務服務并驗證

      確保環(huán)境依賴已經(jīng)啟動(后臺運行的話不用管),執(zhí)行下面的命令啟動業(yè)務服務:

      docker compose -f docker-compose.service.yml up
      

      啟動后,打開瀏覽器訪問localhost:8080/doc.html(網(wǎng)關(guān)的Swagger文檔地址),能看到用戶、商品、訂單三大類接口,說明啟動成功了。

      接下來測試核心業(yè)務流程(模擬用戶下單):

      1. 用戶注冊:調(diào)用/api/user/register接口,傳入username: testuserpassword: 123456,返回成功;
      2. 用戶登錄:調(diào)用/api/user/login接口,傳入注冊的賬號密碼,獲取登錄令牌(token);
      3. 新增商品:在請求頭添加token,調(diào)用/api/product/add接口,傳入商品名稱、價格、庫存,返回成功;
      4. 創(chuàng)建訂單:請求頭帶token,調(diào)用/api/order/create接口,傳入商品ID和數(shù)量,返回訂單號;
      5. 查詢訂單:調(diào)用/api/order/get接口,傳入訂單號,能查到訂單詳情。

      所有接口都能正常調(diào)用,說明本地部署沒問題了!

      第二階段:服務器部署(7步搞定,和本地操作幾乎一樣)

      本地調(diào)試通后,服務器部署就簡單了,核心是把本地的代碼、配置同步過去,一鍵啟動。

      1. 準備服務器:2核4G就夠了

      選一臺Linux服務器(推薦CentOS 7.9或Ubuntu 20.04),配置不用太高,2核4G完全夠用(后續(xù)會驗證資源占用)。

      先做兩個關(guān)鍵準備工作:

      • 開放端口:在云廠商控制臺的「安全組」里,開放以下端口(與服務表格一致):8080-8083(業(yè)務服務)、3306(MySQL)、6379(Redis)、8848(Nacos)、15672(RabbitMQ),允許外部訪問;
      • 遠程連接:用Xshell或FinalShell連接服務器,使用root賬號登錄(權(quán)限足夠,操作方便)。

      2. 服務器安裝Docker環(huán)境:和本地一樣一鍵搞定

      登錄服務器后,執(zhí)行和本地相同的安裝命令,一鍵安裝Docker和Docker Compose,自動配置軒轅鏡像加速:

      bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
      

      安裝完成后,執(zhí)行以下命令驗證,確保環(huán)境可用:

      docker --version  # 輸出Docker版本(如Docker version 27.0.3)
      docker compose --version  # 輸出Compose版本(如Docker Compose version v2.27.0)
      systemctl enable docker  # 設(shè)置Docker開機自啟,避免服務器重啟后服務中斷
      systemctl status docker  # 查看Docker運行狀態(tài),顯示"active (running)"即為正常
      

      3. 同步本地文件到服務器:新手用IDEA遠程部署最省心

      把本地調(diào)好的項目文件同步到服務器,推薦用IDEA的「遠程部署」功能——自動同步本地修改,不用手動傳文件,新手也能輕松操作:

      步驟1:配置SFTP連接

      1. 打開IDEA,頂部菜單欄點擊「Tools」→「Deployment」→「Configuration」;
      2. 點擊左側(cè)「+」號,選擇「SFTP」,輸入配置名稱(比如“電商服務器”),點擊「OK」;
      3. 填寫服務器基礎(chǔ)信息
        • 「Host」:輸入服務器公網(wǎng)IP(如120.XX.XX.XX);
        • 「Port」:默認22(SSH端口,未修改過無需改動);
        • 「Username」:root(或自己的服務器賬號,需有目錄讀寫權(quán)限);
        • 「Password」:輸入服務器登錄密碼;
          點擊下方「Test Connection」,彈出“Successfully connected”說明連接成功。

      步驟2:配置路徑映射(關(guān)鍵!避免文件放錯位置)

      1. 切換到「Mappings」標簽頁;
      2. 「Local path」:選擇本地項目根目錄(如D:\code\mall-parent,Windows路徑)或/Users/xxx/code/mall-parent(Mac/Linux路徑);
      3. 「Deployment path」:輸入服務器上的項目存放路徑(如/code/mall-parent,建議放在/code目錄下,權(quán)限充足);
      4. 「Web path」:留空即可(非Web項目無需配置);
      5. 勾選右上角「Automatic upload (always)」:本地修改文件后自動同步到服務器,避免手動重復上傳。

      步驟3:首次同步本地文件

      右鍵點擊本地項目根目錄(mall-parent)→「Deployment」→「Upload to 電商服務器」,IDEA會自動將所有文件同步到服務器的/code/mall-parent目錄。
      同步完成后,在服務器終端執(zhí)行命令驗證:

      ls /code/mall-parent  # 能看到docker-compose.env.yml、各服務目錄即為同步成功
      

      4. 服務器打包獲取jar包:復用容器方案,不用裝Maven

      和本地打包邏輯完全一致,服務器無需手動安裝Maven,直接用Docker容器打包,避免環(huán)境配置麻煩:

      1. 登錄服務器后,先進入項目根目錄:
        cd /code/mall-parent
        
      2. 執(zhí)行容器打包命令(和本地命令完全相同):
        docker run -v $(pwd):/app -w /app maven:3.8.1-jdk-8-slim mvn clean package -DskipTests
        
        打包過程會拉取Maven依賴(首次可能稍慢,后續(xù)會緩存),耐心等待至出現(xiàn)「BUILD SUCCESS」。
      3. 驗證打包結(jié)果:
        # 查看用戶服務的target目錄是否有jar包
        ls /code/mall-parent/mall-user-service/target
        
        能看到mall-user-service-0.0.1-SNAPSHOT.jar即打包成功,其他業(yè)務服務同理。

      5. 啟動環(huán)境依賴服務:后臺運行,穩(wěn)定不中斷

      服務器部署需讓服務在后臺運行(關(guān)閉終端不停止),執(zhí)行以下命令啟動環(huán)境依賴:

      cd /code/mall-parent
      # 加-d參數(shù)實現(xiàn)后臺啟動
      docker compose -f docker-compose.env.yml up -d
      

      啟動后執(zhí)行「狀態(tài)核查三連」,確保所有環(huán)境依賴正常運行:

      1. 查看容器運行狀態(tài):
        docker ps  # 能看到mall-mysql、mall-redis、mall-rabbitmq、mall-nacos均為"Up"狀態(tài)
        
      2. 若某容器未啟動,查看日志排查問題:
        docker logs -f 容器名  # 如docker logs -f mall-nacos,查看報錯信息
        
      3. 驗證Nacos注冊中心:
        瀏覽器訪問http://服務器公網(wǎng)IP:8848/nacos,登錄后進入「服務管理→服務列表」,此時暫無業(yè)務服務注冊(正常,后續(xù)啟動業(yè)務服務后會自動注冊)。

      6. 啟動業(yè)務服務并驗證:公網(wǎng)訪問測試

      環(huán)境依賴確認正常后,啟動業(yè)務服務,同樣用后臺啟動模式:

      cd /code/mall-parent
      docker compose -f docker-compose.service.yml up -d
      

      關(guān)鍵驗證步驟(公網(wǎng)訪問)

      1. 服務注冊驗證
        刷新Nacos控制臺的「服務列表」,能看到mall-gatewaymall-user-service等4個業(yè)務服務,狀態(tài)為「健康」,說明服務注冊成功。
      2. 接口功能驗證
        瀏覽器打開http://服務器公網(wǎng)IP:8080/doc.html(網(wǎng)關(guān)Swagger地址),重復本地的核心業(yè)務流程測試:
        • 調(diào)用/api/user/register注冊用戶;
        • 調(diào)用/api/user/login獲取token;
        • 調(diào)用/api/product/add新增商品;
        • 調(diào)用/api/order/create創(chuàng)建訂單;
          所有接口返回「成功」狀態(tài),說明服務器部署完全可用!

      常見失敗排查

      • 接口無法訪問:先檢查服務器安全組是否開放8080端口,再執(zhí)行docker logs -f mall-gateway查看網(wǎng)關(guān)日志;
      • 服務注冊失敗:檢查Nacos地址配置是否為nacos:8848,執(zhí)行docker network ls確認業(yè)務服務和環(huán)境依賴在同一mall-network網(wǎng)絡。

      7. 新手必備運維操作:服務器環(huán)境特供版

      服務器部署后需要基礎(chǔ)運維能力,整理6個高頻命令,新手直接復制使用:

      1. 查看服務資源占用(確認2核4G是否夠用):
        docker stats  # 實時顯示CPU、內(nèi)存占用,總內(nèi)存占用約2.5-3G,完全夠用
        
      2. 設(shè)置服務開機自啟(服務器重啟后自動恢復服務):
        # 給環(huán)境依賴和業(yè)務服務的容器添加開機自啟
        docker update --restart=always mall-mysql mall-redis mall-rabbitmq mall-nacos
        docker update --restart=always mall-gateway mall-user-service mall-product-service mall-order-service
        
      3. 重啟單個服務(如用戶服務故障):
        docker restart mall-user-service
        
      4. 查看服務日志(排查接口報錯):
        # 查看訂單服務最新100行日志,實時刷新
        docker logs -f --tail 100 mall-order-service
        
      5. 批量停止所有服務(如服務器維護):
        docker compose -f docker-compose.service.yml down
        docker compose -f docker-compose.env.yml down
        
      6. 清理無用鏡像(釋放服務器磁盤空間):
        # 刪除所有未使用的鏡像(謹慎操作,確保無用后執(zhí)行)
        docker image prune -a -f
        

      結(jié)尾:部署完成!這些坑新手一定要記牢

      至此,2核4G服務器上的電商微服務集群已經(jīng)部署完成——從Docker環(huán)境搭建到公網(wǎng)接口可用,全程沒有復雜配置,核心就是「本地調(diào)通再上服務器,配置保持一致」。最后再劃3個避坑重點,幫你少走彎路:

      1. 環(huán)境依賴≠業(yè)務服務:Amazon Corretto是基礎(chǔ)鏡像(環(huán)境依賴),用來打包網(wǎng)關(guān)、用戶服務等業(yè)務服務,千萬別混淆;
      2. 容器內(nèi)訪問用“服務名”:localhost只在本地生效,容器內(nèi)必須用mysqlredis等服務名訪問依賴,這是新手最常踩的坑;
      3. 服務器先開安全組:所有端口(8080-8083、3306等)必須在云廠商控制臺開放,否則公網(wǎng)根本訪問不到。

      如果在操作中遇到具體問題,比如容器啟動失敗、接口調(diào)用報錯,歡迎在評論區(qū)留言,我會逐一回復解決。覺得這篇教程有用的話,點贊收藏再走,后續(xù)還會更新「微服務日志收集」「服務監(jiān)控搭建」等進階內(nèi)容,助力新手從小白變運維高手!

      版權(quán)聲明:本文為原創(chuàng)保姆級教程,禁止未經(jīng)授權(quán)的商用轉(zhuǎn)載,歡迎個人學習轉(zhuǎn)發(fā),轉(zhuǎn)載請注明出處。

      posted @ 2025-10-21 10:06  源碼舞動  閱讀(134)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 色av专区无码影音先锋| 激情文学一区二区国产区| 在线免费观看视频1区| 老熟妇欲乱一区二区三区| 国产精品视频全国免费观看| 日本污视频在线观看| 十八禁在线观看视频播放免费| 久久一亚色院精品全部免费 | 国产亚洲色视频在线| av中文无码韩国亚洲色偷偷| 男女动态无遮挡动态图| 亚洲av国产成人精品区| 亚洲男人天堂2018| 人成午夜大片免费视频77777| 激情综合网激情五月俺也去| 欧美成人精品一级在线观看| 狼人大伊人久久一区二区| 国产超高清麻豆精品传媒麻豆精品 | 亚洲午夜天堂| 国产破外女出血视频| 亚洲精品亚洲人成人网| 51妺嘿嘿午夜福利| 欲色欲色天天天www| 国产超碰人人做人人爱ⅴa | 久久久久久久无码高潮| 四虎国产精品久久免费地址 | 亚洲人妻精品一区二区| 成人无码区免费视频| 日本xxxx色视频在线播放| 少妇被粗大的猛烈进出69影院一| 最新精品国偷自产在线美女足| 久久96国产精品久久久| 日本乱一区二区三区在线| 亚洲欧美高清在线精品一区二区 | 久久99精品国产99久久6尤物| 精品久久久久国产免费| 亚洲不卡一区三区三区四| 激情久久av一区av二区av三区| 国产精品国产自产拍在线| 久久精品免视看国产成人| 麻豆久久久9性大片|