博主|

Vermeer

园龄:3年7个月粉丝:6关注:0

Nacos 源码运行源码启动、部署

通常看到的 Nacos 启动 都是  jar  包下载来,命令启动,或者是 docker 启动,这样的启动方式对于开发过程中并不方便,

为了灵活的在开发过程中启动,所以通过 Nacos 官方 GitHub 拉取了源码 来整合启动,当然这种方式,仅仅只是为了开发过程中使用,并不推荐用于部署;

Nacos 官网: https://nacos.io/zh-cn/index.html     ;  GitHub个人整合分享(2.2.0版) : https://github.com/chxlay/kwanyon-nacos (2023-01-05 进行更新整合,可直接抄作业,不再更新维护)

 

*********  以下文章是早期编写的,可能存在不符合现有版本或其他问题,仅作为参考 请 以新的 GitHub 中的为准 **********

*********** 申明:此整合仅推荐作为开发方便使用,正式环境请直接使用官方的镜像 *************


查看下载源码,导入 IDEA  

 

 

console 正是我们需要的 包,将此包拷贝到自己的项目中,并保持包名,

 

 

 同样将,源码中 POM 文件中的依赖 也拷贝到项目对应的项目中,源码中,Nocos-console 模块需要引入其他模块,解决方案有两个,

1、自行打包所依赖的模块,通过 maven 命令 : mvn install:install-file -Dfile= xxxxxxx   命令将所依赖的 jar 包安装到 maven 仓库,(可行,但是比较麻烦),命令如下:

(可打包本地仓库或者公司内部的私有仓库 ,如过公司有使用 私服,如 nexus 或者 阿里的 maven.aliyun.com  也可以自行打包 官方 项目发布到  私服 )

私服打包使用:(现在不需要了,maven 中央仓库中已经有现成的依赖了)

mvn deploy 

本地打包本地使用:

mvn install:install-file -Dfile=xxxx.jar(这个jar 包名称) -DgroupId=com.alibaba.nacos(依赖的 groupId ) -DartifactId=nacos-xxx( 依赖的 artifactId) -Dversion=2.1.0-SNAPSHOT(依赖的版本号)-Dpackaging=jar

 

2、前往 maven  中央仓库搜索,有很多开源社区已经将这些 jar 包上传到了 公共仓库了,只需要引入相应的 依赖及版本即可 (推荐,省事)

(现在不需要了,maven 中央仓库中已经有现成的依赖了)

 maven 公共仓库地址: https://mvnrepository.com/


启动 官方源码下载来的 主启动类,或者自行编写一个主启动类,根据报错信息慢慢调试,主要问题有以下:(这些是我遇到的)

1、执行官方源码中提供的 SQL 脚本,创建相应的数据库、表‘

2、编写配置文件信息:这些配置都是从官方源码中取出来了,官方提供的配置很多,这里只是根据报错信息,配置了一些基本的信息,这是数据库 MySQL 模式启动的配置文件

复制代码
server:
  port: 8848
  tomcat:
    basedir: logs

# 数据库存储存储配置文件
db:
  num: 1
  host: ${MYSQL_HOST:behelpful-mysql}
  port: ${MYSQL_PORT:3306}
  database: ${MYSQL_DB:nacos_config}
  user: ${MYSQL-USER:behelpful}
  password: ${MYSQL-PWD:behelpful9527}
  url:
    0: jdbc:mysql://${db.host}:${db.port}/${db.database}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true


nacos:
  # 单实例模式启动
  standalone: true
  core:
    auth:
      # 是否开启认证
      enabled: false

      system.type: nacos

      # 官方配置中复制过来的
      default.token.secret.key: SecretKey012345678901234567890123456789012345678901234567890123456789

  # 官方配置中复制过来的
  security:
    ignore:
      urls: /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**

spring:
  datasource:
    platform: mysql
  security:
    enabled: true

useAddressServer: true
复制代码

 

无数据库存储方式存储再本地 的  c:/user/用户名/nacos  路径下

 

3、设置单实例模式启动

官方 快速开始有提供相应信息: https://nacos.io/zh-cn/docs/quick-start.html

 

 解决方案:SpringApplication.run() 之前,将系统属性设置为 单实例模式,

复制代码
/**
 * 官方源码中:console 包中复制而来的主启动类
 * 源码运行便于开发,生产环境建议直接重官网下载运行,如 docker 运行,或者 tar 包等官方方式
 *
 * @author Alay
 * @date 2021-08-08 01:42
 */
@EnableScheduling
@ServletComponentScan
@SpringBootApplication
public class BeHelpfulNacosApplication {

    public static void main(String[] args) {
        /**
         *设置单击模式启动
         *
         */
        System.setProperty("nacos.standalone", "true");
        /**
         * 是否开启认证
         */
        System.setProperty("nacos.core.auth.enabled", "false");

        SpringApplication.run(BeHelpfulNacosApplication.class, args);
    }
}
复制代码

 

至此启动成功了,不想动手的朋友可直接前往 码云:https://gitee.com/chxlay/be-helpful  behelpful-nacos 模块  拷贝我整合好的直接使用,目前(2021-08-08)整合的版本是官方 2021年07月28日发布 的最新稳定版

 

 


部署相关

********* 2023-01-06 已经更新新的部署方式 *********

自定义的 Nacos 模块的 Dockerfile

复制代码
FROM java:8-jre

MAINTAINER chxlay@gmail.com

ARG TIMZONE=$TIME_ZONE

ENV TZ=$TIMZONE

ENV JAVA_OPTS="-Xms256m -Xmx512m -Djava.security.egd=file:/dev/./urandom"

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN mkdir -p /behelpful-nacos

WORKDIR /behelpful-nacos

EXPOSE 8848

ADD ./target/behelpful-nacos.jar ./

CMD sleep 10;java $JAVA_OPTS -jar behelpful-nacos.jar
复制代码

环境变量文件 .env ( 针对于使用 阿里巴巴 源 docker 镜像启动的)

复制代码
###################### Nacos ###############################
# Nacos相关配置,官方文档:https://nacos.io/zh-cn/docs/quick-start-docker.html
# 和: https://github.com/nacos-group/nacos-docker
# 和 https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

# 启动模式(集群/单机)cluster/standalone 默认 cluster
MODE=standalone
# 支持IP还是域名模式    hostname 默认 ip
PREFER_HOST_MODE=hostname
NACOS_SERVER_PORT=8848

# DataSource 平台
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=127.0.0.1
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=your_password# 数据库连接参数连接参数必须进行编码(如:GMT+8 编码后 GMT%2B8)
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# 数据库名
MYSQL_SERVICE_DB_NAME=xtechcn_nacos

# JVM 参数
JVM_XMX=512m
JVM_XMS=256m

############################################# 授权安全相关配置 ##########################################
# 是否开启权限认证( 若配置为 false 则存在 安全漏洞,不可暴露公网访问,往下会说明)
NACOS_AUTH_ENABLE=true
# 权限系统类型选择,目前只支持nacos类型,默认 :nacos
NACOS_AUTH_SYSTEM_TYPE=nacos
# 自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符
NACOS_AUTH_TOKEN=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
# nacos.core.auth.server.identity.key 的配置,serverIdentity(2.2.1后无默认值,不填写则无法报错启动)
NACOS_AUTH_IDENTITY_KEY=your_key
# nacos.core.auth.server.identity.value 的配置,security(2.2.1后无默认值,不填写则无法报错启动)
NACOS_AUTH_IDENTITY_VALUE=your_value
复制代码

 

 

docker-compose.yml 文件:

复制代码
version: "3.0"

services:

  # 自己项目中的 Nacos 注册中心/配置中心(不推荐使用生产环境,本地开发使用是不错的选择)
  behelpful-nacos:
    build:
      context: ../behelpful-nacos
      dockerfile: Dockerfile
      args:
        TIME_ZONE: ${TIMEZONE}
    restart: always
    container_name: behelpful-nacos
    image: behelpful-nacos
    volumes:
      - ./nacos/logs:/home/nacos/logs
    ports:
      - "8848:8848"
    networks:
      - behelpful


  # 阿里巴巴 Nacos 注册中心/配置中心 (推荐使用)
  alibaba-nacos:
    env_file: .env
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: alibaba-nacos
    restart: always
    ports:
      - "8848:8848"
    volumes:
      - ./nacos/logs:/home/nacos/logs
    networks:
      - behelpful



# 自定义网桥 behelpful
networks:
  behelpful:
    # 启动时不自动创建网桥,需要提前手动创建 网桥 behelpful,若不自行创建网桥,fasle 即可 
    external: true
    driver: bridge
复制代码

 

nacos 关闭授权后安全漏洞:

# 查询用户列表
GET:   http://IP:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate


# 创建用户:(用户名:test 密码: 123456,然后就可以登录您的 nacos 进行一些列操作)
POST: http://IP:8848/nacos/v1/auth/users?username=test&password=123456

开启方式:

 在以上配置文件中( .env 文件 ) 进行开启认证,配置文件内容参考官网: https://nacos.io/zh-cn/docs/quick-start-docker.html   以及 https://github.com/nacos-group/nacos-docker

# 是否开启权限认证 ( false 将会存在 安全漏洞 )
NACOS_AUTH_ENABLE=true
# 权限系统类型选择,目前只支持nacos类型,默认 :nacos
NACOS_AUTH_SYSTEM_TYPE=nacos

 

v2.2.1 版本后,强制需要配置 : nacos.core.auth.server.identity.key  和  nacos.core.auth.server.identity.value  ,具体指任意写字符串就行了,集群中,所有的 值必须一致,

官方说明:https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

# nacos.core.auth.server.identity.key 的配置,serverIdentity(2.2.1后无默认值,不填写则无法报错启动)
NACOS_AUTH_IDENTITY_KEY=xtechcn_key
# nacos.core.auth.server.identity.value 的配置,security(2.2.1后无默认值,不填写则无法报错启动)
NACOS_AUTH_IDENTITY_VALUE=xtechcn_value

配置 key 和 value 后,首页会报错: 

 
没有 命名空间的访问权限!

解决方案: 将访问地址改为:http://IP:8848/nacos/#/login  即可

 

 

 

posted @   Vermeer  阅读(1691)  评论(1编辑  收藏  举报

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起