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

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

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

      Nacos Server 鏡像 Docker 部署完整教程

      一、關于 Nacos Server:它是什么?能做什么?

      Nacos(全稱為 Dynamic Naming and Configuration Service,即動態命名與配置服務)是阿里巴巴開源的一款 微服務核心組件,專門解決微服務架構中兩個核心痛點:服務發現配置管理,同時還支持服務健康檢查、動態路由等能力,是微服務體系里的“基礎設施管家”。

      咱們用大白話解釋它的核心作用,結合實際場景更易理解:

      1. 核心功能一:服務發現——讓微服務“找到彼此”

      在微服務架構里,一個系統會拆成多個小服務(比如“用戶服務”“訂單服務”“支付服務”),這些服務可能部署在不同的服務器上,IP 和端口還可能動態變化(比如服務擴容、重啟)。
      如果“訂單服務”需要調用“支付服務”,它怎么知道“支付服務”當前的地址?這就需要 Nacos 來當“通訊錄”:

      • 每個服務啟動后,會主動向 Nacos 注冊自己的 IP、端口、服務名(比如“pay-service”);
      • 當“訂單服務”需要調用“支付服務”時,直接向 Nacos 問:“當前有哪些‘pay-service’可用?”;
      • Nacos 會返回所有健康的“支付服務”地址,“訂單服務”直接用這些地址發起調用。

      這樣一來,服務之間不用硬編碼對方的 IP,就算服務地址變了,也不用修改代碼,Nacos 會自動同步最新信息——這就是“服務發現”的核心價值。

      2. 核心功能二:配置管理——讓配置“動態生效,不用重啟服務”

      傳統項目里,配置文件(比如數據庫地址、接口超時時間、日志級別)都是寫死在代碼里或本地文件里的。如果要修改配置(比如切換測試/生產數據庫),必須改配置文件、重新打包、重啟服務——這在生產環境中非常麻煩(比如凌晨改配置,重啟服務可能導致幾秒不可用)。

      Nacos 的“配置管理”能解決這個問題:

      • 把所有服務的配置(按“服務名+環境”分類,比如“user-service-dev”“order-service-prod”)統一存到 Nacos 服務器;
      • 服務啟動時,主動從 Nacos 拉取自己的配置;
      • 當需要修改配置時,直接在 Nacos 控制臺改,Nacos 會主動把新配置推送給對應的服務;
      • 服務收到新配置后,不用重啟就能立即生效(前提是代碼里做了簡單適配,Nacos 提供現成的 SDK 支持)。

      比如你要調整“訂單服務”的接口超時時間,只需在 Nacos 改個數值,10 秒內所有“訂單服務”實例就會用新的超時時間,全程不用停服務——這就是“動態配置”的魅力。

      3. 其他實用能力

      • 服務健康檢查:Nacos 會定期檢測已注冊的服務(比如發心跳包),如果某個服務實例掛了,會立即從“通訊錄”里移除,避免其他服務調用到故障實例;
      • 命名空間隔離:可以按“環境”(開發/測試/生產)或“項目”創建命名空間,不同命名空間的服務和配置完全隔離,比如“dev 環境的服務不會調用到 prod 環境的服務”;
      • 集群支持:Nacos 自身可以部署成集群,保證高可用(就算其中一臺 Nacos 服務器掛了,其他節點還能正常工作)。

      簡單說:如果你的項目是微服務架構,或者需要動態管理配置、避免重啟服務,Nacos 就是必須掌握的工具;就算是單體項目,用它管理配置也能大幅提升運維效率。

      二、準備工作:安裝 Docker 和 Docker Compose

      Nacos 部署依賴 Docker 環境,如果你的 Linux 服務器還沒裝 Docker,直接用下面的 一鍵安裝腳本(支持 CentOS、Ubuntu、Debian 等主流發行版),能自動裝 Docker、Docker Compose,還會配置軒轅鏡像加速(拉取鏡像更快)。

      執行一鍵安裝命令

      登錄 Linux 服務器,直接復制粘貼下面的命令,回車執行(過程中會提示輸入密碼,輸服務器密碼即可):

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

      驗證安裝是否成功

      安裝完成后,執行下面兩個命令,能看到版本信息就說明裝好了:

      # 驗證 Docker 是否正常
      docker --version
      # 驗證 Docker Compose 是否正常
      docker compose --version
      

      示例輸出(版本號可能不同,只要不報錯就行):

      Docker version 26.0.0, build 2ae903e
      Docker Compose version v2.25.0
      

      三、拉取 Nacos Server 鏡像

      咱們從 軒轅鏡像倉庫(速度快,不用FQ)拉取 Nacos 鏡像,提供兩種拉取方式,新手推薦“免登錄方式”,簡單無門檻。

      3.1 查看鏡像信息

      軒轅鏡像倉庫的 Nacos 地址:https://xuanyuan.cloud/r/nacos/nacos-server
      里面能看到鏡像的最新版本、拉取命令等信息,咱們這里用穩定版 2.0.2(官方示例常用版本,兼容性好)。

      3.2 免登錄拉取(推薦,新手首選)

      直接執行下面的命令,拉取鏡像并重命名為“nacos/nacos-server:2.0.2”(符合官方命名習慣,后續命令更簡潔):

      # 拉取軒轅鏡像,并重命名,刪除臨時標簽
      docker pull xxx.xuanyuan.run/nacos/nacos-server:2.0.2 \
      && docker tag xxx.xuanyuan.run/nacos/nacos-server:2.0.2 nacos/nacos-server:2.0.2 \
      && docker rmi xxx.xuanyuan.run/nacos/nacos-server:2.0.2
      

      命令解釋:

      • docker pull:從軒轅倉庫拉取鏡像,速度比 Docker Hub 快;
      • docker tag:把拉取的鏡像重命名為官方標準名“nacos/nacos-server:2.0.2”,后續啟動容器時不用記長地址;
      • docker rmi:刪除拉取時的臨時標簽(xuanyuan.cloud/...),避免占用額外存儲空間。

      3.3 登錄驗證拉取(可選,適合企業環境)

      如果你的環境要求登錄鏡像倉庫,先執行登錄命令(按提示輸入軒轅倉庫的賬號密碼):

      docker login xuanyuan.cloud
      

      登錄成功后,再拉取鏡像:

      docker pull xxx.xuanyuan.run/nacos/nacos-server:2.0.2
      # 同樣重命名(可選,但推薦)
      docker tag xxx.xuanyuan.run/nacos/nacos-server:2.0.2 nacos/nacos-server:2.0.2
      

      3.4 驗證鏡像是否拉取成功

      執行下面的命令,查看本地鏡像列表:

      docker images | grep nacos-server
      

      如果輸出類似下面的內容,說明拉取成功:

      nacos/nacos-server   2.0.2    96a502e3027e   2 years ago    1.05GB
      

      四、Nacos Server 部署方案:3 種場景全覆蓋

      根據你的需求(測試/生產、單機/集群),咱們提供 4 種部署方案,從簡單到復雜,你可以按需選擇。

      方案 1:快速部署(單機模式,適合測試/學習)

      這種方式最簡單,用 Nacos 內置的 Derby 數據庫(無需額外裝 MySQL),啟動后直接用,缺點是數據存在容器內,容器刪除后數據會丟失——僅適合測試,不適合生產

      執行啟動命令

      # 啟動 Nacos 容器,命名為 nacos-test,單機模式(MODE=standalone)
      docker run -d \
        --name nacos-test \
        -p 8848:8848 \  # Nacos 默認端口:8848(記住這個端口,后續訪問控制臺用)
        -e MODE=standalone \  # 關鍵參數:單機模式(standalone)
        -e JVM_XMS=512m \  # JVM 初始內存(根據服務器配置調整,512m 足夠測試)
        -e JVM_XMX=512m \  # JVM 最大內存
        -e JVM_XMN=256m \  # JVM 新生代內存
        nacos/nacos-server:2.0.2
      

      驗證啟動是否成功

      1. 先查看容器狀態,確保“STATUS”是“Up”:

        docker ps | grep nacos-test
        

        成功輸出示例:

        a1b2c3d4e5f6   nacos/nacos-server:2.0.2   "bin/docker-startup.…"   10 seconds ago   Up 9 seconds    0.0.0.0:8848->8848/tcp   nacos-test
        
      2. 訪問 Nacos 控制臺(關鍵驗證步驟):
        打開瀏覽器,輸入地址:http://你的服務器IP:8848/nacos
        比如服務器 IP 是 192.168.1.100,就訪問 http://192.168.1.100:8848/nacos

        會看到登錄頁,默認賬號密碼都是 nacos(輸入后登錄):

        登錄后能看到控制臺首頁,說明部署成功。

      停止/刪除測試容器

      如果只是測試,用完后可以停止或刪除容器:

      # 停止容器
      docker stop nacos-test
      # (可選)刪除容器(數據會丟失)
      docker rm nacos-test
      

      方案 2:掛載目錄部署(單機+MySQL,適合生產環境)

      生產環境需要 數據持久化(容器刪除后數據不丟),所以要搭配 MySQL 數據庫(Nacos 的配置和服務信息存在 MySQL 里),同時掛載宿主機目錄到容器,實現“配置持久化”“日志分離”——這是企業里最常用的單機部署方式。

      前置準備:安裝 MySQL(如果已有 MySQL 可跳過)

      如果你的服務器還沒有 MySQL,用 Docker 快速裝一個(MySQL 5.7 或 8.0 都可以,Nacos 1.3.1 后支持 MySQL 8.0,且兼容 5.7):

      # 啟動 MySQL 5.7 容器,命名為 nacos-mysql,設置root密碼為 123456
      docker run -d \
        --name nacos-mysql \
        -p 3306:3306 \
        -e MYSQL_ROOT_PASSWORD=123456 \  # 數據庫root密碼,生產環境要改復雜點
        -e MYSQL_DATABASE=nacos_config \  # 自動創建 Nacos 專用數據庫:nacos_config
        -v /data/nacos/mysql:/var/lib/mysql \  # 掛載 MySQL 數據目錄,持久化數據
        mysql:5.7
      

      步驟 1:初始化 Nacos 數據庫腳本

      Nacos 需要在 MySQL 中創建表結構和初始數據,有兩種方式:

      方式 1:手動執行腳本(推薦,清晰可控)
      1. 先進入 MySQL 容器:

        docker exec -it nacos-mysql mysql -uroot -p123456
        

        (輸入后會進入 MySQL 命令行,提示符變成 mysql>

      2. 執行 Nacos 官方初始化腳本(直接復制粘貼到 MySQL 命令行,回車執行):

        CREATE TABLE `config_info` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(255) DEFAULT NULL,
          `content` longtext NOT NULL COMMENT 'content',
          `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
          `src_user` text COMMENT 'source user',
          `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
          `app_name` varchar(128) DEFAULT NULL,
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
          `c_desc` varchar(256) DEFAULT NULL,
          `c_use` varchar(64) DEFAULT NULL,
          `effect` varchar(64) DEFAULT NULL,
          `type` varchar(64) DEFAULT NULL,
          `c_schema` text,
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
        
        CREATE TABLE `config_info_aggr` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(255) NOT NULL COMMENT 'group_id',
          `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
          `content` longtext NOT NULL COMMENT '內容',
          `gmt_modified` datetime NOT NULL COMMENT '修改時間',
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租戶字段';
        
        CREATE TABLE `config_info_beta` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(128) NOT NULL COMMENT 'group_id',
          `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
          `content` longtext NOT NULL COMMENT 'content',
          `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
          `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
          `src_user` text COMMENT 'source user',
          `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
        
        CREATE TABLE `config_info_tag` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(128) NOT NULL COMMENT 'group_id',
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
          `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
          `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
          `content` longtext NOT NULL COMMENT 'content',
          `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
          `src_user` text COMMENT 'source user',
          `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
        
        CREATE TABLE `config_tags_relation` (
          `id` bigint(20) NOT NULL COMMENT 'id',
          `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
          `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(128) NOT NULL COMMENT 'group_id',
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
          `nid` bigint(20) NOT NULL AUTO_INCREMENT,
          PRIMARY KEY (`nid`),
          UNIQUE KEY `uk_configtagrelation_configtag` (`data_id`,`group_id`,`tenant_id`,`tag_name`,`tag_type`),
          KEY `idx_tenant_id` (`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tags_relation';
        
        CREATE TABLE `group_capacity` (
          `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
          `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整個集群',
          `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配額,0表示使用默認值',
          `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
          `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個配置大小上限,單位為字節,0表示使用默認值',
          `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個數,0表示使用默認值',
          `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個聚合數據的子配置大小上限,單位為字節,0表示使用默認值',
          `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數量',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_group_id_tenant_id` (`group_id`,`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、分組、租戶容量信息表';
        
        CREATE TABLE `his_config_info` (
          `id` bigint(64) unsigned NOT NULL,
          `nid` bigint(20) NOT NULL AUTO_INCREMENT,
          `data_id` varchar(255) NOT NULL,
          `group_id` varchar(128) NOT NULL,
          `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
          `content` longtext NOT NULL,
          `md5` varchar(32) DEFAULT NULL,
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
          `src_user` text,
          `src_ip` varchar(50) DEFAULT NULL,
          `op_type` char(10) DEFAULT NULL,
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
          PRIMARY KEY (`nid`),
          KEY `idx_gmt_modified` (`gmt_modified`),
          KEY `idx_did` (`data_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租戶改造';
        
        CREATE TABLE `tenant_capacity` (
          `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
          `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
          `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配額,0表示使用默認值',
          `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
          `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個配置大小上限,單位為字節,0表示使用默認值',
          `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個數',
          `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個聚合數據的子配置大小上限,單位為字節',
          `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數量',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_tenant_id` (`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租戶容量信息表';
        
        CREATE TABLE `tenant_info` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `kp` varchar(128) NOT NULL COMMENT 'kp',
          `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
          `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
          `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
          `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
          `gmt_create` bigint(20) NOT NULL COMMENT '創建時間',
          `gmt_modified` bigint(20) NOT NULL COMMENT '修改時間',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
          KEY `idx_tenant_id` (`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
        
        CREATE TABLE `users` (
          `username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username',
          `password` varchar(500) NOT NULL COMMENT 'password',
          `enabled` boolean NOT NULL COMMENT 'enabled'
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='users';
        
        CREATE TABLE `roles` (
          `username` varchar(50) NOT NULL COMMENT 'username',
          `role` varchar(50) NOT NULL COMMENT 'role',
          UNIQUE KEY `uk_username_role` (`username`,`role`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='roles';
        
        CREATE TABLE `permissions` (
          `role` varchar(50) NOT NULL COMMENT 'role',
          `resource` varchar(255) NOT NULL COMMENT 'resource',
          `action` varchar(8) NOT NULL COMMENT 'action',
          UNIQUE KEY `uk_role_resource_action` (`role`,`resource`,`action`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='permissions';
        
        INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
        INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
        
      3. 執行完后,輸入 exit 退出 MySQL 命令行。

      方式 2:掛載腳本自動執行(適合批量部署)

      如果嫌手動執行麻煩,可以把上面的腳本保存為 nacos-mysql.sql,然后掛載到 MySQL 容器的 /docker-entrypoint-initdb.d/ 目錄(MySQL 會自動執行該目錄下的 .sql 文件):

      # 1. 在宿主機創建腳本目錄
      mkdir -p /data/nacos/init-sql
      # 2. 把上面的 SQL 腳本保存到 /data/nacos/init-sql/nacos-mysql.sql
      # 3. 重啟 MySQL 容器(如果已啟動,先停止再啟動,帶上掛載參數)
      docker stop nacos-mysql
      docker rm nacos-mysql
      docker run -d \
        --name nacos-mysql \
        -p 3306:3306 \
        -e MYSQL_ROOT_PASSWORD=123456 \
        -e MYSQL_DATABASE=nacos_config \
        -v /data/nacos/mysql:/var/lib/mysql \
        -v /data/nacos/init-sql:/docker-entrypoint-initdb.d \  # 掛載初始化腳本目錄
        mysql:5.7
      

      步驟 2:啟動 Nacos 容器(掛載目錄+關聯 MySQL)

      先在宿主機創建 Nacos 所需的掛載目錄(用于存放配置、日志):

      # 創建配置、日志目錄(/data/nacos 是根目錄,可根據需求修改)
      mkdir -p /data/nacos/{conf,logs}
      

      然后執行啟動命令(關鍵參數已標注解釋):

      docker run -d \
        --name nacos-prod \  # 容器名,生產環境建議用“nacos-prod”區分
        -p 8848:8848 \  # Nacos 核心端口
        -p 9848:9848 \  # Nacos 客戶端連接端口(2.0+版本新增,必須映射)
        -p 9849:9849 \  # Nacos 客戶端連接端口(2.0+版本新增,必須映射)
        -e MODE=standalone \  # 單機模式
        -e SPRING_DATASOURCE_PLATFORM=mysql \  # 啟用 MySQL 作為數據源(關鍵參數)
        -e MYSQL_SERVICE_HOST=192.168.1.100 \  # 你的 MySQL 服務器 IP(如果 MySQL 在同一臺機器,填宿主機IP,不要填127.0.0.1)
        -e MYSQL_SERVICE_PORT=3306 \  # MySQL 端口(默認3306)
        -e MYSQL_SERVICE_DB_NAME=nacos_config \  # Nacos 專用數據庫名(和前面創建的一致)
        -e MYSQL_SERVICE_USER=root \  # MySQL 用戶名
        -e MYSQL_SERVICE_PASSWORD=123456 \  # MySQL 密碼(和前面設置的一致)
        -e MYSQL_DATABASE_NUM=1 \  # 數據庫實例數量(默認1,不用改)
        -e JVM_XMS=1g \  # JVM 初始內存(生產環境建議1g,根據服務器內存調整)
        -e JVM_XMX=1g \  # JVM 最大內存(和初始內存一致,避免頻繁GC)
        -e JVM_XMN=512m \  # JVM 新生代內存
        -v /data/nacos/conf:/home/nacos/conf \  # 掛載 Nacos 配置目錄(持久化配置)
        -v /data/nacos/logs:/home/nacos/logs \  # 掛載 Nacos 日志目錄(方便查看日志)
        --restart=always \  # 容器退出后自動重啟(生產環境必備,保障高可用)
        nacos/nacos-server:2.0.2
      

      步驟 3:驗證部署(和方案1一致)

      1. 查看容器狀態:docker ps | grep nacos-prod,確保“STATUS”是“Up”;
      2. 訪問控制臺:http://服務器IP:8848/nacos,用 nacos/nacos 登錄;
      3. (可選)驗證數據持久化:在控制臺創建一個配置(比如 dataId 為“test.conf”,內容為“test=123”),然后停止并刪除 Nacos 容器,重新啟動后,登錄控制臺查看配置是否還在——如果在,說明數據已持久化到 MySQL。

      方案 3:Docker Compose 部署(單機+MySQL,簡化運維)

      如果覺得手動啟動 Nacos 和 MySQL 太麻煩,可以用 docker-compose.yml 文件統一管理兩個容器,實現“一鍵啟動/停止”,適合運維人員或需要頻繁部署的場景。

      步驟 1:創建 docker-compose.yml 文件

      在宿主機創建一個目錄(比如 /data/nacos-compose),然后在該目錄下創建 docker-compose.yml 文件:

      version: '3.8'  # Docker Compose 版本(根據你的 Docker 版本調整,3.8 兼容大部分版本)
      services:
        # MySQL 服務(Nacos 數據源)
        nacos-mysql:
          image: mysql:5.7  # MySQL 鏡像版本
          container_name: nacos-mysql  # 容器名
          restart: always  # 自動重啟
          environment:
            MYSQL_ROOT_PASSWORD: 123456  # MySQL  root 密碼
            MYSQL_DATABASE: nacos_config  # 自動創建 Nacos 數據庫
          volumes:
            - ./mysql:/var/lib/mysql  # 掛載 MySQL 數據目錄(相對路徑,和 yml 同目錄)
            - ./init-sql:/docker-entrypoint-initdb.d  # 掛載初始化腳本目錄(自動執行 SQL)
          ports:
            - "3306:3306"  # 端口映射
          networks:
            - nacos-network  # 加入自定義網絡(避免端口沖突)
      
        # Nacos Server 服務
        nacos-server:
          image: nacos/nacos-server:2.0.2  # Nacos 鏡像版本
          container_name: nacos-server  # 容器名
          restart: always  # 自動重啟
          depends_on:
            - nacos-mysql  # 依賴 MySQL 服務,確保 MySQL 先啟動
          environment:
            MODE: standalone  # 單機模式
            SPRING_DATASOURCE_PLATFORM: mysql  # 啟用 MySQL 數據源
            MYSQL_SERVICE_HOST: nacos-mysql  # MySQL 服務名(因為在同一網絡,可直接用容器名訪問,不用填 IP)
            MYSQL_SERVICE_PORT: 3306  # MySQL 端口
            MYSQL_SERVICE_DB_NAME: nacos_config  # 數據庫名
            MYSQL_SERVICE_USER: root  # MySQL 用戶名
            MYSQL_SERVICE_PASSWORD: 123456  # MySQL 密碼
            JVM_XMS: 1g  # JVM 內存配置
            JVM_XMX: 1g
            JVM_XMN: 512m
          volumes:
            - ./nacos/conf:/home/nacos/conf  # 掛載 Nacos 配置目錄
            - ./nacos/logs:/home/nacos/logs  # 掛載 Nacos 日志目錄
          ports:
            - "8848:8848"  # Nacos 核心端口
            - "9848:9848"  # Nacos 客戶端端口(2.0+ 必須)
            - "9849:9849"  # Nacos 客戶端端口(2.0+ 必須)
          networks:
            - nacos-network  # 加入自定義網絡
      
      # 自定義網絡(讓 Nacos 和 MySQL 內部通信,不暴露給外部其他服務)
      networks:
        nacos-network:
          driver: bridge  # 橋接模式(默認)
      

      步驟 2:準備初始化腳本

      和方案 2 一樣,把 Nacos 數據庫初始化 SQL 腳本保存到 ./init-sql/nacos-mysql.sql./docker-compose.yml 所在目錄):

      # 在 yml 所在目錄執行,創建 init-sql 目錄并下載腳本(或手動復制腳本)
      mkdir -p ./init-sql
      # (可選)用 wget 直接下載官方腳本(如果服務器能聯網)
      wget -O ./init-sql/nacos-mysql.sql https://github.com/alibaba/nacos/blob/2.0.2/distribution/conf/nacos-mysql.sql
      

      步驟 3:啟動服務

      docker-compose.yml 所在目錄執行下面的命令,一鍵啟動 MySQL 和 Nacos:

      # 后臺啟動(-d 表示后臺運行)
      docker compose up -d
      

      步驟 4:驗證和管理

      • 查看服務狀態:docker compose ps,會顯示兩個服務的狀態(Up 表示正常);
      • 查看日志:docker compose logs -f nacos-server(實時查看 Nacos 日志,有問題可排查);
      • 停止服務:docker compose down(會停止并刪除容器,但掛載的目錄數據不會丟);
      • 重啟服務:docker compose restart

      方案 4:Docker Compose 集群部署(適合生產高可用)

      如果你的業務對可用性要求高(比如不能接受 Nacos 單點故障),可以部署 Nacos 集群(至少 3 個節點)。這里用 嵌入式存儲(EMBEDDED_STORAGE) 模式(不用額外裝 MySQL,適合快速搭建集群,生產環境也可使用)。

      步驟 1:創建集群 docker-compose.yml

      創建 nacos-cluster.yml 文件:

      version: '3.8'
      services:
        # Nacos 節點 1
        nacos-server-1:
          image: nacos/nacos-server:2.0.2
          container_name: nacos-server-1
          restart: always
          environment:
            MODE: cluster  # 集群模式(關鍵)
            EMBEDDED_STORAGE: embedded  # 啟用嵌入式存儲(不用 MySQL)
            NACOS_SERVERS: "nacos-server-1:8848 nacos-server-2:8848 nacos-server-3:8848"  # 集群節點列表(用容器名)
            NACOS_SERVER_IP: nacos-server-1  # 當前節點 IP(容器名)
            JVM_XMS: 1g
            JVM_XMX: 1g
            JVM_XMN: 512m
          ports:
            - "8848:8848"
            - "9848:9848"
            - "9849:9849"
          networks:
            - nacos-cluster-network
      
        # Nacos 節點 2
        nacos-server-2:
          image: nacos/nacos-server:2.0.2
          container_name: nacos-server-2
          restart: always
          environment:
            MODE: cluster
            EMBEDDED_STORAGE: embedded
            NACOS_SERVERS: "nacos-server-1:8848 nacos-server-2:8848 nacos-server-3:8848"
            NACOS_SERVER_IP: nacos-server-2
            JVM_XMS: 1g
            JVM_XMX: 1g
            JVM_XMN: 512m
          ports:
            - "8849:8848"  # 宿主機端口 8849 映射到容器 8848
            - "9858:9848"
            - "9859:9849"
          networks:
            - nacos-cluster-network
      
        # Nacos 節點 3
        nacos-server-3:
          image: nacos/nacos-server:2.0.2
          container_name: nacos-server-3
          restart: always
          environment:
            MODE: cluster
            EMBEDDED_STORAGE: embedded
            NACOS_SERVERS: "nacos-server-1:8848 nacos-server-2:8848 nacos-server-3:8848"
            NACOS_SERVER_IP: nacos-server-3
            JVM_XMS: 1g
            JVM_XMX: 1g
            JVM_XMN: 512m
          ports:
            - "8850:8848"  # 宿主機端口 8850 映射到容器 8848
            - "9868:9848"
            - "9869:9849"
          networks:
            - nacos-cluster-network
      
      networks:
        nacos-cluster-network:
          driver: bridge
      

      步驟 2:啟動集群

      nacos-cluster.yml 所在目錄執行:

      docker compose -f nacos-cluster.yml up -d
      

      步驟 3:驗證集群

      1. 訪問任意節點的控制臺:http://服務器IP:8848/nacoshttp://服務器IP:8849/nacoshttp://服務器IP:8850/nacos,登錄后在“集群管理 → 節點列表”中能看到 3 個節點,狀態都是“UP”,說明集群正常;
      2. 測試高可用:停止其中一個節點(比如 docker stop nacos-server-1),刷新控制臺,剩下的兩個節點仍能正常工作,且服務注冊/配置管理不受影響。

      五、Nacos 核心操作:服務注冊、發現與配置管理

      部署完成后,咱們實際操作一下 Nacos 的核心功能,用命令行或控制臺都能實現,這里兩種方式都講。

      1. 服務注冊(讓服務加入 Nacos)

      方式 1:用 curl 命令注冊(適合測試)

      執行下面的命令,注冊一個名為“user-service”的服務實例(IP 為 192.168.1.101,端口 8080):

      curl -X PUT 'http://服務器IP:8848/nacos/v1/ns/instance?serviceName=user-service&ip=192.168.1.101&port=8080'
      

      成功會返回 ok

      方式 2:在控制臺注冊

      1. 登錄 Nacos 控制臺,進入“服務管理 → 服務列表”;
      2. 點擊“新建服務”,輸入服務名(比如“user-service”),其他默認,點擊“確認”;
      3. 進入該服務的詳情頁,點擊“實例列表 → 新增實例”,輸入 IP 和端口,點擊“確認”。

      2. 服務發現(查詢服務實例)

      方式 1:用 curl 命令查詢

      查詢“user-service”的所有健康實例:

      curl -X GET 'http://服務器IP:8848/nacos/v1/ns/instances?serviceName=user-service'
      

      成功會返回 JSON 格式的實例列表,類似:

      {
        "name": "DEFAULT_GROUP@@user-service",
        "groupName": "DEFAULT_GROUP",
        "clusters": "",
        "cacheMillis": 10000,
        "hosts": [
          {
            "ip": "192.168.1.101",
            "port": 8080,
            "valid": true,
            "healthy": true,
            "weight": 1.0,
            "metadata": {},
            "instanceId": "192.168.1.101#8080#DEFAULT#DEFAULT_GROUP@@user-service",
            "clusterName": "DEFAULT",
            "serviceName": "DEFAULT_GROUP@@user-service",
            "enabled": true,
            "ephemeral": true
          }
        ],
        "lastRefTime": 1690000000000,
        "checksum": "",
        "allIPs": false,
        "reachProtectionThreshold": false,
        "valid": true
      }
      

      方式 2:在控制臺查看

      進入“服務管理 → 服務列表”,點擊“user-service”,就能看到所有實例的狀態。

      3. 配置管理(動態發布/獲取配置)

      方式 1:用 curl 命令操作

      發布配置(新增一個配置)

      發布一個 dataId 為“user-service-dev.conf”、group 為“DEFAULT_GROUP”、內容為“db.url=jdbc:mysql://127.0.0.1:3306/user_db”的配置:

      curl -X POST "http://服務器IP:8848/nacos/v1/cs/configs?dataId=user-service-dev.conf&group=DEFAULT_GROUP&content=db.url=jdbc:mysql://127.0.0.1:3306/user_db"
      

      成功返回 true

      獲取配置

      查詢上面發布的配置:

      curl -X GET "http://服務器IP:8848/nacos/v1/cs/configs?dataId=user-service-dev.conf&group=DEFAULT_GROUP"
      

      成功返回配置內容:db.url=jdbc:mysql://127.0.0.1:3306/user_db

      方式 2:在控制臺操作

      1. 進入“配置管理 → 配置列表”,點擊“+”新建配置;
      2. 輸入 dataId(比如“user-service-dev.conf”)、group(默認“DEFAULT_GROUP”)、配置內容(比如數據庫地址、超時時間);
      3. 點擊“發布”,配置就會保存到 Nacos;
      4. 要獲取配置,直接在配置列表中找到該配置,點擊“查看”即可。

      六、常見問題與解決方案

      部署和使用過程中遇到問題不用慌,下面是高頻問題的解決方法:

      1. 瀏覽器訪問不到 Nacos 控制臺?

      排查步驟:

      1. 檢查容器是否正常運行docker ps | grep nacos,如果 STATUS 是“Exited”,執行 docker logs 容器名 查看日志(比如日志顯示“MySQL 連接失敗”,就是數據庫配置錯了);
      2. 檢查端口是否開放
        • 云服務器:在控制臺的“安全組”中放行 8848、9848、9849 端口;
        • 本地服務器:執行 firewall-cmd --list-ports 查看端口是否開放,沒開放的話執行:
          # 開放 8848 端口(永久生效)
          firewall-cmd --add-port=8848/tcp --permanent
          firewall-cmd --add-port=9848/tcp --permanent
          firewall-cmd --add-port=9849/tcp --permanent
          # 重啟防火墻
          firewall-cmd --reload
          
      3. 檢查端口是否沖突:執行 netstat -tuln | grep 8848,如果顯示“LISTEN”,說明端口被其他進程占用,啟動 Nacos 時換宿主機端口(比如 -p 8849:8848)。

      2. Nacos 連接不上 MySQL?

      常見原因:

      1. MySQL 地址填錯:如果 MySQL 和 Nacos 在同一臺機器,不要填 127.0.0.1(容器內的 127.0.0.1 是容器自身,不是宿主機),要填宿主機的真實 IP(比如 192.168.1.100);
      2. MySQL 密碼錯誤:檢查 MYSQL_SERVICE_PASSWORD 參數是否和 MySQL 實際密碼一致;
      3. MySQL 沒初始化腳本:Nacos 啟動時會報錯“Table 'nacos_config.config_info' doesn't exist”,需要重新執行初始化 SQL 腳本;
      4. MySQL 版本不兼容:Nacos 1.3.1 后支持 MySQL 8.0,如果用 MySQL 5.7,要確保鏡像版本是 5.7(不要用 8.0)。

      3. 容器啟動后馬上退出(STATUS: Exited)?

      執行 docker logs 容器名 查看日志,根據日志提示解決:

      • 日志含“JVM 內存不足”:減小 JVM_XMS、JVM_XMX(比如改成 512m);
      • 日志含“集群節點配置錯誤”:檢查 NACOS_SERVERS 參數,集群模式下節點列表要填全(至少 3 個節點);
      • 日志含“權限不足”:給宿主機掛載目錄授權(比如 chmod -R 777 /data/nacos)。

      4. 怎么開啟 Nacos 認證(防止未授權訪問)?

      默認情況下,Nacos 不需要認證就能訪問,生產環境要開啟:

      1. 啟動 Nacos 時添加兩個環境變量:
        -e NACOS_AUTH_ENABLE=true \  # 開啟認證
        -e NACOS_AUTH_TOKEN=YourSecretKey123456 \  # 自定義密鑰(生產環境要復雜點)
        
      2. 重啟 Nacos 后,訪問控制臺需要輸入賬號密碼(默認還是 nacos/nacos),API 調用也需要在請求頭中帶認證信息(比如 Authorization: Bearer 令牌,令牌需要通過登錄接口獲取)。

      七、總結

      到這里,你已經掌握了 Nacos Server 的全部核心部署方案:

      • 新手/測試用 方案 1(快速部署),1 條命令搞定;
      • 生產單機用 方案 2(掛載目錄+MySQL)方案 3(Docker Compose),確保數據持久化;
      • 生產高可用用 方案 4(集群部署),避免單點故障。

      后續可以結合業務需求,探索 Nacos 的高級功能:比如用命名空間隔離開發/測試/生產環境、用服務路由實現灰度發布、結合 Prometheus+Grafana 監控 Nacos 狀態(官方有監控指南,可參考 Nacos Monitor Guide)。

      如果遇到其他問題,優先查看 Nacos 容器日志(docker logs 容器名),大部分問題都能在日志中找到原因;也可以參考 Nacos 官方文檔,里面有更詳細的功能說明。

      posted @ 2025-10-19 10:34  源碼舞動  閱讀(148)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 综合色天天久久| 亚洲 中文 欧美 日韩 在线| 爱性久久久久久久久| 国产午夜无码视频在线观看| 国产suv精品一区二区33| 999精品色在线播放| 午夜精品福利亚洲国产| 中文无码高潮到痉挛在线视频| 门头沟区| 久久96热人妻偷产精品| 久久夜色精品久久噜噜亚| 在线欧美中文字幕农村电影| 久久99精品久久久久久| 中文字幕人妻中文AV不卡专区| 乱色欧美激惰| 丰满少妇高潮无套内谢| 国产成人欧美一区二区三区| 丰满的人妻hd高清日本| 亚洲成在人线在线播放无码| 91老肥熟女九色老女人| 久久亚洲av综合悠悠色| 毛片久久网站小视频| 91中文字幕一区在线| 亚洲综合一区二区三区在线| 久久免费网站91色网站| 国产在线播放专区av| 亚洲自在精品网久久一区| 大地资源高清免费观看| 人妻少妇久久中文字幕| 狠狠躁天天躁中文字幕无码| 国产目拍亚洲精品二区| 亚洲AV日韩AV激情亚洲| 日韩一区二区三区在线观院| 国产在线中文字幕精品| 久久人妻精品白浆国产| 久久涩综合一区二区三区| 不卡一区二区国产精品| 国产精品免费观看色悠悠| 高清自拍亚洲精品二区| 欧美黑人又粗又大又爽免费 | 国产午夜福利不卡在线观看|