[软件部署]使用docker部署nacos server v3.1.1
说明
nacos数据持久化依赖MySQL数据库。
以当前最新版本nacos 3.1.1为例
若需离线部署,提前将容器镜像下载到离线部署的环境即可。参考文档地址1ms.run配置容器镜像中国地区访问或下载。
如果你的团队没有专职的nacos运维,或者专职的运维团队,此部署方法最合适。
环境准备
1台云主机,推荐规格4C8G,最低规格2C4G,推荐Ubuntu24 LTS,推荐部署docker最新版本。
部署MySQL
my.cnf 创建此配置文件
[mysqld]
# --- 基础设置 ---
user = mysql
port = 3306
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
datadir = /var/lib/mysql
# --- 连接与安全 ---
max_connections = 500
max_allowed_packet = 64M
skip-name-resolve # 禁用DNS解析,提高Docker环境下的连接速度
# --- MySQL 8.4 身份验证相关 ---
# MySQL 8.0+ 默认使用 caching_sha2_password
# 如果你的旧版客户端不支持,可以按需调整(8.4 依然支持该默认值)
# authentication_policy = caching_sha2_password
# --- 缓存与内存优化 (基于 2GB-4GB 内存环境) ---
innodb_buffer_pool_size = 1G # 建议设置为物理内存的 50%-70%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1 # 最安全设置,若追求性能可设为 2
innodb_flush_method = O_DIRECT
# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 2
# --- 二进制日志 (Binlog) ---
server-id = 1
binlog_expire_logs_seconds = 604800 # 日志保留7天
binlog_format = ROW
# --- 临时表与缓存 ---
tmp_table_size = 32M
max_heap_table_size = 32M
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
deploy.sh ,执行此脚本,等待健康检查完成。
# 1. create data volume
docker volume create mysql8-data
docker volume create mysql8-log
# create custom network
docker network create -d bridge nacos
# 2. deploy
docker run -d \
--name mysql8-single \
--network nacos \
--restart=unless-stopped \
--health-cmd="mysqladmin ping -uroot -p\$MYSQL_ROOT_PASSWORD --silent" \
--health-interval=10s \
--health-timeout=5s \
--health-retries=3 \
--health-start-period=30s \
-p 3306:3306 \
-v $(pwd)/my.cnf:/etc/mysql/my.cnf \
-v mysql8-data:/var/lib/mysql \
-v mysql8-log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root123456 \
-e MYSQL_ROOT_HOST=% \
-e TZ=Asia/Shanghai \
-e LANG=C.UTF-8 \
mysql:8.4.7
创建目录sql,存入文件mysql-schema.sql,文件来自nacos官网https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql?spm=5238cd80.c984973.0.0.6be140230dYdzt&file=mysql-schema.sql。
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/******************************************/
/* 表名称 = config_info */
/******************************************/
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(128) DEFAULT NULL COMMENT 'group_id',
`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 COMMENT 'app_name',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',
`c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',
`effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述',
`type` varchar(64) DEFAULT NULL COMMENT '配置的类型',
`c_schema` text COMMENT '配置的模式',
`encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
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';
/******************************************/
/* 表名称 = config_info since 2.5.0 */
/******************************************/
CREATE TABLE `config_info_gray` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`src_user` text COMMENT 'src_user',
`src_ip` varchar(100) DEFAULT NULL COMMENT 'src_ip',
`gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',
`gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`gray_name` varchar(128) NOT NULL COMMENT 'gray_name',
`gray_rule` text NOT NULL COMMENT 'gray_rule',
`encrypted_data_key` varchar(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (`data_id`,`group_id`,`tenant_id`,`gray_name`),
KEY `idx_dataid_gmt_modified` (`data_id`,`gmt_modified`),
KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='config_info_gray';
/******************************************/
/* 表名称 = config_tags_relation */
/******************************************/
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 'tenant_id',
`nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',
PRIMARY KEY (`nid`),
UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
/******************************************/
/* 表名称 = group_capacity */
/******************************************/
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 '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
/******************************************/
/* 表名称 = his_config_info */
/******************************************/
CREATE TABLE `his_config_info` (
`id` bigint(20) unsigned NOT NULL COMMENT 'id',
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
`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',
`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',
`op_type` char(10) DEFAULT NULL COMMENT 'operation type',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
`publish_type` varchar(50) DEFAULT 'formal' COMMENT 'publish type gray or formal',
`gray_name` varchar(50) DEFAULT NULL COMMENT 'gray name',
`ext_info` longtext DEFAULT NULL COMMENT 'ext info',
PRIMARY KEY (`nid`),
KEY `idx_gmt_create` (`gmt_create`),
KEY `idx_gmt_modified` (`gmt_modified`),
KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
/******************************************/
/* 表名称 = tenant_capacity */
/******************************************/
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 '单个聚合数据的子配置大小上限,单位为字节,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 '修改时间',
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'
);
CREATE TABLE `roles` (
`username` varchar(50) NOT NULL COMMENT 'username',
`role` varchar(50) NOT NULL COMMENT 'role',
UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
`role` varchar(50) NOT NULL COMMENT 'role',
`resource` varchar(128) NOT NULL COMMENT 'resource',
`action` varchar(8) NOT NULL COMMENT 'action',
UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
在目录sql上级目录配置脚本init.sh,执行脚本,完成数据库初始化。
#!/bin/bash
set -euo pipefail
# ==================== 配置区域 ====================
# 定义变量,支持通过环境变量自定义配置
CONTAINER_NAME="${CONTAINER_NAME:-mysql8-single}"
DB_USER="${DB_USER:-root}"
DB_PASSWORD="${DB_PASSWORD:-root123456}"
DB_PORT="${DB_PORT:-3306}"
SQL_DIR="${SQL_DIR:-./sql}"
CONTAINER_SQL_DIR="/tmp/init_sql"
# 定义数据库与SQL文件的映射关系(使用关联数组)
declare -A DB_SQL_MAP=(
["nacos"]="mysql-schema.sql"
)
# 日志颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1" >&2; }
# ==================== 预检查 ====================
# 检查本地SQL目录
if [ ! -d "$SQL_DIR" ]; then
log_error "本地SQL目录 $SQL_DIR 不存在,请检查SQL_DIR环境变量配置"
exit 1
fi
# 验证所有SQL文件存在
log_info "验证SQL文件完整性..."
for sql_files in "${DB_SQL_MAP[@]}"; do
for sql_file in $sql_files; do
if [ ! -f "$SQL_DIR/$sql_file" ]; then
log_error "SQL文件缺失: $SQL_DIR/$sql_file"
exit 1
fi
done
done
log_success "所有SQL文件验证通过"
# ==================== 主流程 ====================
# 等待MySQL容器就绪
log_info "等待MySQL容器($CONTAINER_NAME)启动并就绪..."
START_TIME=$(date +%s)
until docker exec "$CONTAINER_NAME" mysqladmin ping -u "$DB_USER" -p"$DB_PASSWORD" --silent > /dev/null 2>&1; do
echo -n "."
sleep 2
done
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
log_success "MySQL已就绪(等待${DURATION}秒)"
# 在容器内创建SQL存放目录
log_info "准备容器内SQL文件目录..."
docker exec "$CONTAINER_NAME" mkdir -p "$CONTAINER_SQL_DIR"
# 复制SQL文件到容器(使用tar提高效率)
log_info "复制SQL文件到容器..."
if ! tar -c -C "$SQL_DIR" . | docker exec -i "$CONTAINER_NAME" tar -x -C "$CONTAINER_SQL_DIR" 2>/dev/null; then
log_error "复制SQL文件到容器失败"
exit 1
fi
log_success "SQL文件复制完成"
# 创建数据库函数(显式指定utf8mb4字符集)
create_database() {
local db_name="$1"
log_info "创建数据库: $db_name"
if docker exec "$CONTAINER_NAME" mysql -u "$DB_USER" -p"$DB_PASSWORD" \
-e "CREATE DATABASE IF NOT EXISTS \`$db_name\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null; then
log_success "数据库 $db_name 创建成功(或已存在)"
else
log_error "数据库 $db_name 创建失败"
return 1
fi
}
# 导入SQL函数
import_sql_to_db() {
local db_name="$1"
local sql_files=($2)
log_info "开始导入数据到 $db_name..."
for sql_file in "${sql_files[@]}"; do
local container_sql_path="$CONTAINER_SQL_DIR/$sql_file"
log_info " 导入: $sql_file"
# 使用进度条显示导入进度(通过pv命令,如果可用)
if command -v pv &> /dev/null; then
docker exec "$CONTAINER_NAME" cat "$container_sql_path" | \
pv | docker exec -i "$CONTAINER_NAME" mysql -u "$DB_USER" -p"$DB_PASSWORD" "$db_name"
else
# 不使用pv的备选方案
if docker exec "$CONTAINER_NAME" mysql -u "$DB_USER" -p"$DB_PASSWORD" \
-D "$db_name" -e "source $container_sql_path" 2>/dev/null; then
log_success " $sql_file 导入完成"
else
log_error " $sql_file 导入失败"
return 1
fi
fi
done
}
# ==================== 执行导入 ====================
FAILED_DBS=()
SUCCESS_DBS=()
for db_name in "${!DB_SQL_MAP[@]}"; do
echo ""
log_info "========================================"
log_info "处理数据库: $db_name"
log_info "========================================"
if ! create_database "$db_name"; then
FAILED_DBS+=("$db_name")
continue
fi
if ! import_sql_to_db "$db_name" "${DB_SQL_MAP[$db_name]}"; then
FAILED_DBS+=("$db_name")
else
SUCCESS_DBS+=("$db_name")
fi
done
# ==================== 清理与总结 ====================
# 清理临时文件
echo ""
log_info "清理临时文件..."
docker exec "$CONTAINER_NAME" rm -rf "$CONTAINER_SQL_DIR"
log_success "清理完成"
# 执行结果汇总
echo ""
log_info "======================== 执行结果 ========================"
log_success "成功数据库: ${SUCCESS_DBS[*]:-无}"
if [ ${#FAILED_DBS[@]} -ne 0 ]; then
log_error "失败数据库: ${FAILED_DBS[*]}"
log_error "部分数据库初始化失败,请查看错误日志"
exit 1
else
log_success "所有数据库初始化成功完成!"
fi
echo "========================================================="
部署nacos
创建配置文件application.properties
#
# Copyright 1999-2025 Alibaba Group Holding Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#--------------- Nacos Common Configurations ---------------#
#*************** Nacos port Related Configurations ***************#
### Nacos Server Main port
nacos.server.main.port=8848
#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false
### Specify local server's IP:
# nacos.inetutils.ip-address=
#*************** Datasource Related Configurations ***************#
### nacos.plugin.datasource.log.enabled=true
spring.sql.init.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://mysql8-single:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
db.user=root
db.password=root123456
#*************** Metrics Related Configurations ***************#
### Metrics for prometheus
#management.endpoints.web.exposure.include=prometheus
### Metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
### Metrics for influx
management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
#*************** Console Related Configurations ***************#
### CORS (Cross-Origin Resource Sharing) configurations for console
### Whether to allow credentials (cookies, authorization headers, TLS client certificates)
# nacos.console.cors.allow-credentials=true
### Allowed headers, comma separated. Empty means allow all headers (*)
# nacos.console.cors.allowed-headers=
### Maximum age (in seconds) of the CORS preflight request cache
# nacos.console.cors.max-age=18000
### Allowed HTTP methods, comma separated. Empty means allow all methods (*)
# nacos.console.cors.allowed-methods=
### Allowed origins, comma separated. Empty means allow all origin patterns (*)
### Example: nacos.console.cors.allowed-origins=http://localhost:8080,https://example.com
# nacos.console.cors.allowed-origins=
#*************** Core Related Configurations ***************#
### set the WorkerID manually
# nacos.core.snowflake.worker-id=
### Member-MetaData
# nacos.core.member.meta.site=
# nacos.core.member.meta.adweight=
# nacos.core.member.meta.weight=
### MemberLookup
### Addressing pattern category, If set, the priority is highest
# nacos.core.member.lookup.type=[file,address-server]
## Set the cluster list with a configuration file or command-line argument
# nacos.member.list=192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809
## for AddressServerMemberLookup
# Maximum number of retries to query the address server upon initialization
# nacos.core.address-server.retry=5
## Server domain name address of [address-server] mode
# address.server.domain=jmenv.tbsite.net
## Server port of [address-server] mode
# address.server.port=8080
## Request address of [address-server] mode
# address.server.url=/nacos/serverlist
#*************** JRaft Related Configurations ***************#
### Sets the Raft cluster election timeout, default value is 5 second
# nacos.core.protocol.raft.data.election_timeout_ms=5000
### Sets the amount of time the Raft snapshot will execute periodically, default is 30 minute
# nacos.core.protocol.raft.data.snapshot_interval_secs=30
### raft internal worker threads
# nacos.core.protocol.raft.data.core_thread_num=8
### Number of threads required for raft business request processing
# nacos.core.protocol.raft.data.cli_service_thread_num=4
### raft linear read strategy. Safe linear reads are used by default, that is, the Leader tenure is confirmed by heartbeat
# nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe
### rpc request timeout, default 5 seconds
# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000
### enable to support prometheus service discovery
#nacos.prometheus.metrics.enabled=true
#*************** Distro Related Configurations ***************#
### Distro data sync delay time, when sync task delayed, task will be merged for same data key. Default 1 second.
# nacos.core.protocol.distro.data.sync.delayMs=1000
### Distro data sync timeout for one sync data, default 3 seconds.
# nacos.core.protocol.distro.data.sync.timeoutMs=3000
### Distro data sync retry delay time when sync data failed or timeout, same behavior with delayMs, default 3 seconds.
# nacos.core.protocol.distro.data.sync.retryDelayMs=3000
### Distro data verify interval time, verify synced data whether expired for a interval. Default 5 seconds.
# nacos.core.protocol.distro.data.verify.intervalMs=5000
### Distro data verify timeout for one verify, default 3 seconds.
# nacos.core.protocol.distro.data.verify.timeoutMs=3000
### Distro data load retry delay when load snapshot data failed, default 30 seconds.
# nacos.core.protocol.distro.data.load.retryDelayMs=30000
### enable to support prometheus service discovery
#nacos.prometheus.metrics.enabled=true
#*************** Grpc Configurations ***************#
### Sets the maximum message size allowed to be received on the server.
#nacos.remote.server.grpc.sdk.max-inbound-message-size=10485760
### Sets the time(milliseconds) without read activity before sending a keepalive ping. The typical default is two hours.
#nacos.remote.server.grpc.sdk.keep-alive-time=7200000
### Sets a time(milliseconds) waiting for read activity after sending a keepalive ping. Defaults to 20 seconds.
#nacos.remote.server.grpc.sdk.keep-alive-timeout=20000
### Sets a time(milliseconds) that specify the most aggressive keep-alive time clients are permitted to configure. The typical default is 5 minutes
#nacos.remote.server.grpc.sdk.permit-keep-alive-time=300000
### cluster grpc(inside the nacos server) configuration
#nacos.remote.server.grpc.cluster.max-inbound-message-size=10485760
### Sets the time(milliseconds) without read activity before sending a keepalive ping. The typical default is two hours.
#nacos.remote.server.grpc.cluster.keep-alive-time=7200000
### Sets a time(milliseconds) waiting for read activity after sending a keepalive ping. Defaults to 20 seconds.
#nacos.remote.server.grpc.cluster.keep-alive-timeout=20000
### Sets a time(milliseconds) that specify the most aggressive keep-alive time clients are permitted to configure. The typical default is 5 minutes
#nacos.remote.server.grpc.cluster.permit-keep-alive-time=300000
#*************** Config Module Related Configurations ***************#
### the maximum retry times for push
nacos.config.push.maxRetryTime=50
#*************** Naming Module Related Configurations ***************#
### Data dispatch task execution period in milliseconds:
### If enable data warmup. If set to false, the server would accept request without local data preparation:
# nacos.naming.data.warmup=true
### If enable the instance auto expiration, kind like of health check of instance:
# nacos.naming.expireInstance=true
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
#*************** AI Module Related Configurations ***************#
### Whether nacos ai module is enabled, default true. the ai module need both config module and naming module enabled.
# nacos.extension.ai.enabled=true
### Whether nacos mcp registry is enabled, default is false.
### When enabled=true, Nacos will start a `mcp registry` server with new port with `nacos.ai.mcp.registry.port`
#nacos.ai.mcp.registry.enabled=false
### Nacos mcp registry port, default 9080:
nacos.ai.mcp.registry.port=9080
#--------------- Nacos Web Server Configurations ---------------#
#*************** Nacos Web Server Related Configurations ***************#
### Nacos Server Web context path:
nacos.server.contextPath=/nacos
#*************** Access Log Related Configurations ***************#
### If turn on the access log:
server.tomcat.accesslog.enabled=true
### accesslog automatic cleaning time
server.tomcat.accesslog.max-days=30
### The access log pattern:
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
### The directory of access log:
server.tomcat.basedir=file:.
#*************** API Related Configurations ***************#
### Include message field
server.error.include-message=ALWAYS
### Enabled for open API compatibility
# nacos.core.api.compatibility.client.enabled=true
### Enabled for admin API compatibility
# nacos.core.api.compatibility.admin.enabled=false
### Enabled for console API compatibility
# nacos.core.api.compatibility.console.enabled=false
#--------------- Nacos Console Configurations ---------------#
#*************** Nacos Console Related Configurations ***************#
### Nacos Console Main port
nacos.console.port=8080
### Nacos Server Web context path:
nacos.console.contextPath=
### Nacos Server context path, which link to nacos server `nacos.server.contextPath`, works when deployment type is `console`
nacos.console.remote.server.context-path=/nacos
#************** Console UI Configuration ***************#
### Turn on/off the nacos console ui.
#nacos.console.ui.enabled=true
#--------------- Nacos Plugin Configurations ---------------#
#*************** CMDB Plugin Related Configurations ***************#
### The interval to dump external CMDB in seconds:
# nacos.cmdb.dumpTaskInterval=3600
### The interval of polling data change event in seconds:
# nacos.cmdb.eventTaskInterval=10
### The interval of loading labels in seconds:
# nacos.cmdb.labelTaskInterval=300
### If turn on data loading task:
# nacos.cmdb.loadDataAtStart=false
#*************** Auth Plugin Related Configurations ***************#
### The ignore urls of auth, will be deprecated in the future:
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
### The auth system to use, default 'nacos' and 'ldap' is supported, other type should be implemented by yourself:
nacos.core.auth.system.type=nacos
### If turn on auth system:
# Whether open nacos server API auth system
nacos.core.auth.enabled=true
# Whether open nacos admin API auth system
nacos.core.auth.admin.enabled=true
# Whether open nacos console API auth system
nacos.core.auth.console.enabled=true
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=true
### worked when nacos.core.auth.enabled=true
### The two properties is the white list for auth and used by identity the request from other server.
nacos.core.auth.server.identity.key=f4020af1e83bad2e
nacos.core.auth.server.identity.value=6b+A4uZ9UMA82289oiHVAnDXBVm+LgyDyesqFrztTGQ+0KOiSMZxug==
### worked when nacos.core.auth.system.type=nacos or nacos.core.auth.console.enabled=true
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token (Base64 string):
#nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
nacos.core.auth.plugin.nacos.token.secret.key=flYhi9iAGbO3oE7eZvBsLkDZRDNZhA9ktzFwwAcH0P96pimYXCVnXg==
### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username
#nacos.core.auth.ldap.url=ldap://localhost:389
#nacos.core.auth.ldap.basedc=dc=example,dc=org
#nacos.core.auth.ldap.userDn=cn=admin,${nacos.core.auth.ldap.basedc}
#nacos.core.auth.ldap.password=admin
#nacos.core.auth.ldap.userdn=cn={0},dc=example,dc=org
#nacos.core.auth.ldap.filter.prefix=uid
#nacos.core.auth.ldap.case.sensitive=true
#nacos.core.auth.ldap.ignore.partial.result.exception=false
#*************** Control Plugin Related Configurations ***************#
# plugin type
#nacos.plugin.control.manager.type=nacos
# local control rule storage dir, default ${nacos.home}/data/connection and ${nacos.home}/data/tps
#nacos.plugin.control.rule.local.basedir=${nacos.home}
# external control rule storage type, if exist
#nacos.plugin.control.rule.external.storage=
#*************** Config Change Plugin Related Configurations ***************#
# webhook
#nacos.core.config.plugin.webhook.enabled=false
# It is recommended to use EB https://help.aliyun.com/document_detail/413974.html
#nacos.core.config.plugin.webhook.url=http://localhost:8080/webhook/send?token=***
# The content push max capacity ,byte
#nacos.core.config.plugin.webhook.contentMaxCapacity=102400
# whitelist
#nacos.core.config.plugin.whitelist.enabled=false
# The import file suffixs
#nacos.core.config.plugin.whitelist.suffixs=xml,text,properties,yaml,html
# fileformatcheck,which validate the import file of type and content
#nacos.core.config.plugin.fileformatcheck.enabled=false
#*************** Istio Plugin Related Configurations ***************#
### If turn on the MCP server:
nacos.istio.mcp.server.enabled=false
#--------------- Nacos Experimental Features Configurations ---------------#
#*************** K8s Related Configurations ***************#
### If turn on the K8s sync:
nacos.k8s.sync.enabled=false
### If use the Java API from an application outside a kubernetes cluster
#nacos.k8s.sync.outsideCluster=false
#nacos.k8s.sync.kubeConfig=/.kube/config
执行脚本deploy.sh部署nacos
# 1. 先清理旧容器(可选)
docker rm -f nacos-standalone 2>/dev/null
# 2. 启动新容器
docker run -d \
--name nacos-standalone \
--network nacos \
--restart=unless-stopped \
-e MODE=standalone \
-e NACOS_AUTH_TOKEN=F4a3mCIFjKVI3NbQpknmQ9bX79sPwZkSbPpFrEt189CG1B8e9R2j5w== \
-e NACOS_AUTH_IDENTITY_KEY=eXsLCgcbUlzsN75cBU40gBhqH3D7lsjcYjnVQ+1mNySan+f+NXcWgw== \
-e NACOS_AUTH_IDENTITY_VALUE=mMr+dCMkX5aWms9AVrw8BVz0QyNPH/ewlHh1b9vRpq/UYuSXmdfqYw== \
-v "$(pwd)/application.properties:/home/nacos/conf/application.properties:ro" \
-p 8080:8080 \
-p 8848:8848 \
-p 9848:9848 \
--health-cmd "curl -f http://localhost:8848/nacos/actuator/health || exit 1" \
--health-interval 10s \
--health-timeout 15s \
--health-retries 3 \
--health-start-period 20s \
nacos/nacos-server:v3.1.1
等待容器健康检查完成。
浏览器访问IP:8080即可。
特殊说明
docker run命令用到的三个AUTH的环境变量,取值自配置文件application.properties.必须加环境变量,当前nacos在容器环境部署时,只能用环境变量完成初始引导。这三个AUTH变量的值可以用命令生成openssl rand -base64 48。
集群模式部署时,唯一差异是需要单独配置文件cluster.conf ,例如
# ip:port
200.8.9.16:8848
200.8.9.17:8848
200.8.9.18:8848
将此文件挂载到容器的/home/nacos/conf/.在每个nacos节点都做一样配置。部署流程则参考本文即可。此处有缺点,若云主机IP变化,配置就失效。可用hosts文件方法解决,思路是
修改cluster.conf
nacos1:8848
nacos2:8848
nacos3:8848
修改云主机的/etc/hosts
192.168.1.1 nacos1
192.168.1.2 nacos2
192.168.1.3 nacos3
挂载给容器使用,使每个容器都可解析。后续云主机IP变化时,修改云主机的hosts,重启容器即可。
更多推荐
所有评论(0)