Installer nacos dans docker, très détaillé
- 1. Installer le menu fixe
- 2. Tirez l'image nacos
- 3. Créez un répertoire de montage
- 4. Démarrez nacos, copiez les fichiers pertinents dans le répertoire de montage
- 5. Modifiez nacos pour stocker les informations dans MySQL
- 6. Démarrez nacos
- Sept, je marche sur le record des stands
-
- 1. Tomcat n'a pas réussi à démarrer
- 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
- 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.key` et `nacos.core.auth.server.identity.value`
- 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
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
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
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
4. Afficher le miroir local
La commande est la suivante :
docker images
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
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é
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
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
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
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.
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
(3), copiez le fichier de données du conteneur sur l'hôte
docker cp nacos:/home/nacos/data/ /www/wwwroot/changjing/docker/nacos
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,
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
(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
(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
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.
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
redémarrer le conteneur
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 :
Sept, je marche sur le record des stands
1. Tomcat n'a pas réussi à démarrer
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
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
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
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.key
etnacos.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
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
plus la configuration correspondante, redémarrez nacos
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.
À 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
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
redémarrer à nouveau
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.