Installer nacos dans docker, très détaillé

Installer nacos dans docker, très détaillé


Je pensais qu'installer nacos dans le docker Linux serait un peu plus compliqué que dans la fenêtre, mais ce ne serait pas trop compliqué. Il s'avère que je réfléchissais trop, et j'ai quand même marché sur beaucoup d'embûches pendant le processus d'installation. Voici un enregistrement.

1. Installer le menu fixe

La condition préalable à l'installation de nacos dans Docker est d'avoir Docker, sinon, veuillez vous-même Baidu.

2. Tirez l'image nacos

Ceux qui sont anxieux peuvent simplement en regarder 2 ou 3 directement.

1. Vérifiez les images nacos

La commande query est la suivante :

docker search nacos

insérer la description de l'image ici
Généralement, s'il n'y a pas d'exigence particulière, choisissez le premier, et le premier est celui avec le départ le plus élevé.

2. Obtenez la dernière version de l'image

Utilisez directement docker pull + "NAME" pour extraire la dernière version de l'image, la commande est la suivante :

docker pull nacos/nacos-server

insérer la description de l'image ici
la dernière représente la dernière version.

3. Obtenez la version spécifiée de l'image

Utiliser docker pull + "NOM : numéro de version" permet d'obtenir l'image de la version spécifiée. J'ai obtenu la version de nacos2.2.1. La commande est la suivante :

docker pull nacos/nacos-server:v2.2.1

insérer la description de l'image ici

4. Afficher le miroir local

La commande est la suivante :

docker images

insérer la description de l'image ici
Vous pouvez voir les deux images téléchargées précédemment.

5. Supprimez l'image miroir

Je souhaite utiliser la version nacos2.2.1 du miroir, utilisez docker rmi -f + "mirror id" pour supprimer la dernière version, la commande de suppression est la suivante :

docker rmi -f f151dab7a111

insérer la description de l'image ici
insérer la description de l'image ici
Vous pouvez voir que l'image miroir de la dernière version de nacos a été supprimée.

3. Créez un répertoire de montage

Le répertoire monté est utilisé pour exploiter les fichiers de configuration, les journaux et les fichiers de données dans l'image nacos sur l'hôte. C'est-à-dire la commande pour créer un fichier multi-niveaux.

1. Créez un répertoire de montage du fichier de configuration nacos

Il est utilisé pour monter les fichiers du répertoire /home/nacos/conf/ dans l'image nacos plus tard, c'est le mien :

mkdir -p /www/wwwroot/changjing/docker/nacos/conf

La fonction de -p est de créer un fichier multi-niveaux, si un certain fichier de niveau n'existe pas, il sera créé, et s'il existe, le fichier d'origine sera utilisé

insérer la description de l'image ici

2. Créez un répertoire de montage du fichier journal nacos

Il est utilisé pour monter les fichiers dans le répertoire /home/nacos/logs/ dans l'image nacos plus tard, c'est le mien :

mkdir -p /www/wwwroot/changjing/docker/nacos/logs

insérer la description de l'image ici

3. Créez un répertoire de montage de fichiers de données nacos

Il est utilisé pour monter les fichiers du répertoire /home/nacos/data/ dans l'image nacos plus tard, c'est le mien :

mkdir -p /www/wwwroot/changjing/docker/nacos/data

insérer la description de l'image ici

4. Démarrez nacos, copiez les fichiers pertinents dans le répertoire de montage

Vous devez démarrer l'image nacos pour créer un conteneur avant de pouvoir copier les fichiers pertinents du conteneur dans le répertoire de montage.

1. Démarrez le conteneur nacos

Ceci est simplement activé pour copier les fichiers pertinents du conteneur nacos dans le répertoire de montage

docker run --name nacos -d -p 8848:8848 -e MODE=standalone  nacos/nacos-server:v2.2.1

expliquer:

docker run -d : Démarre le conteneur, -d signifie démarrer en arrière-plan et renvoyer l'identifiant du conteneur –name
nacos : Le nom du conteneur est nacos
-p 8848:8848 : Le numéro de port lié au conteneur, avant " : " est l'accès de l'hôte pour démarrer le numéro de port du conteneur, " :" suivi du numéro de port du conteneur
-e MODE=standalone : start
nacos/nacos-server:v2.2.1 dans une version autonome : démarre l'image nacos du conteneur

insérer la description de l'image ici

2. Copiez les fichiers pertinents du conteneur dans le répertoire de montage

Utilisez docker cp "container name": "répertoire de fichiers lié au conteneur" "répertoire de fichiers hôte" pour copier les fichiers liés au conteneur sur l'hôte

(1), copiez le fichier de configuration du conteneur sur l'hôte

docker cp nacos:/home/nacos/conf/ /www/wwwroot/changjing/docker/nacos

Avis:

Mon fichier local ici n'ajoute pas de conf, s'il est ajouté, une autre conf sera créée sous conf, et la même raison derrière.

insérer la description de l'image ici
Vous pouvez voir que le fichier de configuration dans le conteneur a été copié sur l'hôte.

(2), copiez le fichier journal du conteneur sur l'hôte

docker cp nacos:/home/nacos/logs/ /www/wwwroot/changjing/docker/nacos

insérer la description de l'image ici

(3), copiez le fichier de données du conteneur sur l'hôte

docker cp nacos:/home/nacos/data/ /www/wwwroot/changjing/docker/nacos

insérer la description de l'image ici

5. Modifiez nacos pour stocker les informations dans MySQL

Il existe déjà une base de données MySQL par défaut ici, et il n'y a pas d'installation Baidu en soi.

1. Importez la base de données associée à Nacos dans le MySQL de la machine hôte

(1), créer une base de données

L'importation directe n'a aucun effet, la base de données doit d'abord être créée et le nom de la base de données peut être personnalisé. Voici ma commande de création :

CREATE DATABASE `cj-config`

(2), script de base de données

Le script de base de données a été copié précédemment dans le fichier de configuration de la machine hôte,
insérer la description de l'image ici
comme suit :

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,
  `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,
  `encrypted_data_key` text NOT NULL 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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
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(128) 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 '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `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='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
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 '租户字段',
  `encrypted_data_key` text NOT NULL 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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
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 'tenant_id',
  `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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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,
  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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(20) unsigned NOT NULL,
  `nid` bigint(20) unsigned 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 '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  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='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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,
	`password` varchar(500) NOT NULL,
	`enabled` boolean NOT NULL
);

CREATE TABLE `roles` (
	`username` varchar(50) NOT NULL,
	`role` varchar(50) NOT NULL,
	UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);

CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL,
    `resource` varchar(255) NOT NULL,
    `action` varchar(8) NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

2. Modifier le fichier de configuration

modifier ceci
insérer la description de l'image ici

(1), fichier de configuration de sauvegarde

Faites une copie de sauvegarde avant de modifier, au cas où la modification serait interrompue et que vous ne sauriez pas comment recommencer, la commande de sauvegarde est la suivante :

cp application.properties application_bk.properties

insérer la description de l'image ici

(2), avant modification

# spring
server.servlet.contextPath=${
    
    SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${
    
    NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{
    
    User-Agent}i %{
    
    Request-Source}i
server.tomcat.accesslog.enabled=${
    
    TOMCAT_ACCESSLOG_ENABLED:false}
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${
    
    SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=${
    
    SPRING_DATASOURCE_PLATFORM:}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${
    
    MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${
    
    MYSQL_SERVICE_HOST}:${
    
    MYSQL_SERVICE_PORT:3306}/${
    
    MYSQL_SERVICE_DB_NAME}?${
    
    MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user.0=${
    
    MYSQL_SERVICE_USER}
db.password.0=${
    
    MYSQL_SERVICE_PASSWORD}
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=${
    
    NACOS_AUTH_SYSTEM_TYPE:nacos}
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${
    
    NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=${
    
    NACOS_AUTH_TOKEN}
### 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=${
    
    NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${
    
    NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${
    
    NACOS_AUTH_IDENTITY_KEY}
nacos.core.auth.server.identity.value=${
    
    NACOS_AUTH_IDENTITY_VALUE}
## spring security config
### turn off security
nacos.security.ignore.urls=${
    
    NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

(3) Après modification (il existe de nombreuses solutions pour marcher sur la fosse, il est recommandé de ne pas la sauter lors de la première installation de nacos)

# spring
server.servlet.contextPath=/nacos
server.contextPath=/nacos
server.port=8848
# server.tomcat.accesslog.max-days=30
# server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{
    
    User-Agent}i %{
    
    Request-Source}i
# server.tomcat.accesslog.enabled=false
# default current work dir
# server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=1
#  这里必须为公网或服务器内网地址,我这里是服务器的内网地址,容器内部没有mysql,绝对不能使用 127.0.0.1和localhost

#  如果nacos启动失败,Nacos Server did not start because dumpservice bean construction failure : No DataSource set
#  加上 &serverTimezone=UTC ,再不行就加上 &allowPublicKeyRetrieval=true

#  将connectTimeout 和 socketTimeout 分别加个0,避免出现超时异常
db.url.0=jdbc:mysql://公网或服务器内网地址:3306/cj-config?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false
db.user.0=root
db.password.0=123456

### The auth system to use, currently only 'nacos' and 'ldap' is supported:
# 鉴权类型,默认为nacos
nacos.core.auth.system.type=nacos

# 是否开启鉴权功能,默认为false
nacos.core.auth.enabled=true

# Base64加密前密码  TcmxJw05k$-_zcx.)8EtFC^D^F1W!IPr
# Base64加密后密码  VGNteEp3MDVrJC1femN4Lik4RXRGQ15EXkYxVyFJUHI=
# 加密网站:https://www.qqxiuzi.cn/bianma/base64.htm
# 自定义密钥,在自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。同nacos.core.auth.plugin.nacos.token.secret.key
nacos.core.auth.default.token.secret.key=VGNteEp3MDVrJC1femN4Lik4RXRGQ15EXkYxVyFJUHI=

### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
# 用户登陆临时accessToken的过期时间,默认18000
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token:

# 默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,在2.2.0.1后无默认值,必须执行此变更,否则无法启动;其他版本为建议设置。
nacos.core.auth.plugin.nacos.token.secret.key=VGNteEp3MDVrJC1femN4Lik4RXRGQ15EXkYxVyFJUHI=
### 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=${
    
    NACOS_AUTH_CACHE_ENABLE:false}

# 关闭使用user-agent判断服务端请求并放行鉴权的功能
nacos.core.auth.enable.userAgentAuthWhite=false

# 用于替换useragent白名单的身份识别key,不可为空,2.2.1后无默认值
nacos.core.auth.server.identity.key=nacosKey
# 用于替换useragent白名单的身份识别value,不可为空,2.2.1后无默认值
nacos.core.auth.server.identity.value=nacosValue

## spring security config
### turn off security
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

6. Démarrez nacos

Utilisez la commande suivante pour démarrer cette fois, faites attention à changer l'adresse IP en adresse réseau publique de votre serveur

docker run -d --name nacos \
--ip 0.0.0.0 \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--env MODE=standalone \
--env NACOS_AUTH_ENABLE=true \
-v /www/wwwroot/changjing/docker/nacos/conf/:/home/nacos/conf \
-v /www/wwwroot/changjing/docker/nacos/logs:/home/nacos/logs \
-v /www/wwwroot/changjing/docker/nacos/data:/home/nacos/data \
nacos/nacos-server:v2.2.1

insérer la description de l'image ici

expliquer:

docker run -d --name nacos \                                            -d 表示运行在后台,--name 指定名称为nacos
--ip 8.134.131.48 \                                                     自定义分配 IP 地址,我写的是服务器的 IP 地址,可忽略
-p 8848:8848 \                                                          前者为暴露给外部访问的端口,后者为nacos容器端口
-p 9848:9848 \                                                          9848是nacos2.0.0版本以上必须要加上端口映射
-p 9849:9849 \                                                          9849是nacos2.0.0版本以上必须要加上端口映射
--env MODE=standalone \                                                 nacos以单机版启动,默认为cluster(集群)
--env NACOS_AUTH_ENABLE=true \                                          如果使用官方镜像,请在启动docker容器时,添加如下环境变量
-v /www/wwwroot/changjing/docker/nacos/conf/:/home/nacos/conf \         nacos 配置文件目录,“:”前为服务器目录,“:”后为nacos容器中的目录
-v /www/wwwroot/changjing/docker/nacos/logs:/home/nacos/logs \          nacos 日志文件目录,“:”前为服务器目录,“:”后为nacos容器中的目录
-v /www/wwwroot/changjing/docker/nacos/data:/home/nacos/data \          nacos 数据文件目录,“:”前为服务器目录,“:”后为nacos容器中的目录
nacos/nacos-server:v2.2.1                                               指定 docker nacos 版本,这里是2.2.1版本

Les versions supérieures à nacos2.0.0 doivent activer l'authentification, voir ici pour plus de détails :

https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

S'il n'y a pas d'accident à ce moment-là, il devrait y avoir un accident et une erreur sera signalée au démarrage de ce moment.

insérer la description de l'image ici

Comme il a été démarré une seule fois afin de copier les fichiers pertinents du conteneur, bien que le démarrage ait échoué, un conteneur nommé nacos a déjà été créé.

Supprimez-le d’abord, la commande est la suivante :

docker rm -f nacos

insérer la description de l'image ici

redémarrer le conteneur

insérer la description de l'image ici
Vous pouvez voir que le conteneur a réussi.

Accédez au navigateur et utilisez l'adresse IP ou le nom de domaine pour accéder :
insérer la description de l'image ici

Sept, je marche sur le record des stands

1. Tomcat n'a pas réussi à démarrer

insérer la description de l'image ici
Je ne sais pas s'il y a des amis comme moi. Quand j'ai vu la première erreur, Tomcat n'a pas réussi à démarrer, j'ai pensé qu'il était nécessaire d'installer l'image Tomcat et de la démarrer. En fait, ce n'est pas nécessaire. La vraie erreur le message est plus tard.

2. Causé par : java.lang.IllegalArgumentException : la longueur de la clé secrète doit être supérieure ou égale à 32 octets ; Et la clé secrète doit être codée en base64

Cette erreur devrait être rencontrée par de nombreux amis

Caused by: java.lang.IllegalArgumentException: the length of secret key must great than or equal 32 bytes; And the secret key  must be encoded by base64.Please see https://nacos.io/zh-cn/docs/v2/guide/user/auth.html
	at com.alibaba.nacos.plugin.auth.impl.token.impl.JwtTokenManager.processProperties(JwtTokenManager.java:73)
	at com.alibaba.nacos.plugin.auth.impl.token.impl.JwtTokenManager.<init>(JwtTokenManager.java:61)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211)
	... 112 common frames omitted
Caused by: java.lang.IllegalArgumentException: The specified key byte array is 0 bits which is not secure enough for any JWT HMAC-SHA algorithm.  The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HMAC-SHA algorithms MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size).  See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.
	at com.alibaba.nacos.plugin.auth.impl.jwt.NacosJwtParser.<init>(NacosJwtParser.java:56)
	at com.alibaba.nacos.plugin.auth.impl.token.impl.JwtTokenManager.processProperties(JwtTokenManager.java:71)
	... 118 common frames omitted
2023-08-08 14:41:45,798 WARN [ThreadPoolManager] Start destroying ThreadPool

2023-08-08 14:41:45,798 WARN [ThreadPoolManager] Destruction of the end

insérer la description de l'image ici
Il a déclaré qu'il manquait une clé secrète qui devrait avoir une longueur d'au moins 32 et a publié tous les documents officiels.

https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

Ça y est

insérer la description de l'image ici

nacos.core.auth.plugin.nacos.token.secret.key Le plugin d'authentification par défaut est utilisé pour générer la clé utilisée par l'utilisateur pour se connecter au accessToken temporaire. Il n'y a pas de valeur par défaut après 2.2.0.1. Ce changement doit être effectué, sinon il ne peut pas être démarré ; d'autres versions sont des paramètres recommandés

La mienne est la version nacos2.2.1, c'est-à-dire qu'il n'y a pas de valeur par défaut, et aucune modification n'a été apportée à ce moment-là, et une erreur sera signalée au démarrage. Attribuez une valeur à nacos.core.auth.plugin.nacos.token.secret.key (chaîne codée en Base64 de 32 bits et plus), recommencez

insérer la description de l'image ici
Si vous avez lu attentivement la documentation de nacos et apporté les modifications correspondantes, le démarrage devrait être réussi. Sinon, continuez à lire.

3. Causé par : org.springframework.beans.factory.BeanCreationException : erreur lors de la création du bean portant le nom "authConfigs" : l'appel de la méthode init a échoué ; L'exception imbriquée est ErrCode : 50002, ErrMsg : Empty Identity, veuillez définir nacos.core.auth.server.identity.keyetnacos.core.auth.server.identity.value

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authConfigs': Invocation of init method failed; nested exception is ErrCode:50002, ErrMsg:Empty identity, Please set `nacos.core.auth.server.identity.key` and `nacos.core.auth.server.identity.value`, detail: https://nacos.io/zh-cn/docs/v2/guide/user/auth.html
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
	... 75 common frames omitted
Caused by: com.alibaba.nacos.api.exception.NacosException: Empty identity, Please set `nacos.core.auth.server.identity.key` and `nacos.core.auth.server.identity.value`, detail: https://nacos.io/zh-cn/docs/v2/guide/user/auth.html
	at com.alibaba.nacos.auth.config.AuthConfigs.validate(AuthConfigs.java:100)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
	... 88 common frames omitted
2023-08-08 15:03:01,939 WARN [ThreadPoolManager] Start destroying ThreadPool

insérer la description de l'image ici

Documentation officielle :

https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

Il s'agit de la clé et de la valeur sans identification personnalisée
insérer la description de l'image ici
plus la configuration correspondante, redémarrez nacos

insérer la description de l'image ici
Si vous avez lu attentivement la documentation nacos et apporté les modifications correspondantes, alors il ne devrait y avoir aucun problème d'authentification. Notez également que nacos.core.auth.default.token.secret.key, la documentation dit et

同nacos.core.auth.plugin.nacos.token.secret.key

Mais je l'ai essayé, en commentant nacos.core.auth.default.token.secret.key peut également démarrer avec succès, mais ajoutez-le simplement pour plus d'assurance.

insérer la description de l'image ici

À ce stade, si vous ne réussissez pas, continuez et baissez les yeux.

4. Causé par : com.alibaba.nacos.api.exception.NacosException : le serveur Nacos n'a pas démarré en raison d'un échec de construction du bean dumpservice : aucun ensemble de sources de données

Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set
	at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:260)
	at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:61)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
	... 54 common frames omitted
Caused by: java.lang.IllegalStateException: No DataSource set
	at org.springframework.util.Assert.state(Assert.java:76)
	at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:86)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:465)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:475)
	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:508)
	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:515)
	at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalConfigInfoPersistServiceImpl.findConfigMaxId(ExternalConfigInfoPersistServiceImpl.java:632)
	at com.alibaba.nacos.config.server.service.dump.processor.DumpAllProcessor.process(DumpAllProcessor.java:51)
	at com.alibaba.nacos.config.server.service.dump.DumpService.dumpConfigInfo(DumpService.java:317)
	at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:230)
	... 62 common frames omitted
2023-08-08 15:32:34,341 WARN [ThreadPoolManager] Start destroying ThreadPool

insérer la description de l'image ici
Il indique que la source de données n'est pas définie et, après une inspection minutieuse, il s'avère que les informations contenues dans la connexion à la base de données sont correctes, mais la connexion ne peut pas être établie.

Nous devons comprendre que nacos est dans le conteneur Docker, pas dans la machine hôte. Remplacez l'adresse IP de mysql par l'adresse IP du serveur ou l'adresse intranet
insérer la description de l'image ici

redémarrer à nouveau

insérer la description de l'image ici
Enfin réussi ! ! !

Remplir:

Il existe également des articles sur Internet disant que les deux valeurs de connectTimeout et socketTimeout sont trop petites, et cette erreur sera également signalée lorsque la connexion à la base de données prend beaucoup de temps, mais je ne l'ai pas rencontrée. Ici, 0 est ajouté à ces deux valeurs respectivement.

Je suppose que tu aimes

Origine blog.csdn.net/studio_1/article/details/132160081
conseillé
Classement