安装部署

安装依赖服务

Nebula依赖以下服务,需要提前安装:

  • 必选
    • MySQL (建议版本 8.0+)
    • RabbitMQ (建议版本 3.13.4)
    • Elasticsearch (建议版本 7.9.3)
    • Kibana (建议版本 7.9.3)
    • JaegerUI (建议版本 1.21.0)
  • 可选(视功能而定)
    • Redis (建议版本 6.0) 或者 Garnet 1.0.14
    • PostgreSQL (建议版本 13.1)



部署--第三方依赖服务

RabbitMQ

docker run -d  --restart=always --name rabbit  -m1024m \
  --hostname my-rabbit \
  -p 5672:5672 \
  -p 15672:15672 \
  -e RABBITMQ_DEFAULT_USER=fishli \
  -e RABBITMQ_DEFAULT_PASS=xxxxxxxxxxxxx \
  -e RABBITMQ_VM_MEMORY_HIGH_WATERMARK=90% \
  -v /data/rabbit:/var/lib/rabbitmq \
  rabbitmq:3.8.9-management-alpine

日志相关服务

docker run -d --restart=always --name es  \
  -p 19200:9200 \
  -p 9300:9300 \
  -e ES_JAVA_OPTS="-Xms2g -Xmx2g" \
  -e ES_HOME=/data/es \
  -e "discovery.type=single-node" \
  -v /data/es:/data/es \
  elasticsearch:7.9.3

docker run -d --restart=always --name kibana -m1024m \
  -p 15601:5601 \
  -e ELASTICSEARCH_HOSTS=http://xxxxxxxxxxxxxxxx:19200 \
  -v /data/kibana:/data \
  kibana:7.9.3

docker run -d  --restart=always  --name jaeger  -m100m \
  -p 16686:16686 \
  jaegertracing/all-in-one:1.21.0

注意:

  • 请根据实际情况修改上面的 参数xxxxxxxxxxxxxxx

安装完成后可访问,确认安装是否成功:

  • http://hostxxxxxxxxxx:15672/
  • http://hostxxxxxxxxxx:19200/
  • http://hostxxxxxxxxxx:15601/
  • http://hostxxxxxxxxxx:16686/



创建数据库

在此忽略 mysql 的安装过程~~~~~

然后,请下载并执行下面的脚本文件(MySQL格式):

说明:

  • 如果访问最比较小,例如开发或者测试环境,可以将以上2个脚本在一个 database 实例上执行,最终只使用一个database
  • ConfigDb/NebulaDb 这2个名字不是固定的,可以根据实际情况下来取名
  • 数据库也能使用 SQLSERVER 或者 PostgreSQL,但是需要自行转换上面的2个SQL脚本的语法



配置全局参数

在ConfigDb的settings表添加以下配置

  • name=Nebula_Environment_Name

    • 含意:集群环境名称
    • 示例值:XXXX-DEV or XXXX
    • 注意:不要使用特殊字符,包括“空格”
    • 默认值:Nebula.DEMO
    • 要求:此参数必填
    • restype: 1000
  • name=Nebula_Environment_Key

    • 含意:标识当前环境,用于区分一套环境中的应用
    • 取值范围:一个随机字符串,不同环境的值【必须】不一样
    • 示例值:a543162600df44bdbb35f8f108f9ccfa
    • 注意:此参数在使用后不得修改!
    • 要求:此参数必填
    • restype: 1000
  • name=Nebula_Authentication_SecretKey

    • 含意:JWT密钥
    • 取值范围:一个随机字符串,不同环境的值【必须】不一样
    • 示例值:475800cd45bb47a38cf0805a82b49fb7e7cc31b624c7440c99ebe83628f0af45
    • 注意:此参数在使用后不建议修改!
    • 要求:此参数必填
    • restype: 1000

  • name=ClownFish_Log_WritersMap

    • 含意:指示不同的日志数据类型使用哪个写入器
    • 示例值/建议值:InvokeLog=Rabbit;*=ES
    • 示例解释:InvokeLog写入RabbitMQ,其它日志写入ES
    • 要求:此参数必填
    • restype: 1000
  • name=ClownFish_Log_Rabbit

    • 含意:启用 Rabbit 写入器后,日志写入时使用的RabbitMQ连接参数
    • 示例值:server=RabbitHost;username=fishli;password=aaaaaaaaaaaa;vhost=nbtest
    • 要求:如果日志不使用RabbitMQ可不填写,否则此参数必填
    • restype: 1
  • name=ClownFish_Log_ES_IndexNameFormat

    • 含意:Nebula在将日志写入ES时使用的索引名称后缀
    • 默认值:-yyyyMMdd
    • 说明:最终生成的索引名称是:"typeName-yyyyMMdd"
    • 说明:如果需要每小时生成一个索引可设置:"typeName-yyyyMMdd-HH"
    • 要求:如果日志不使用ES可不填写,否则此参数必填
    • restype: 1000

  • name=Nebula_Venus_Url

    • 含意:Venus站点的访问地址
    • 示例值:http://localhost2:8208
    • 要求:如果不需要监控告警功能,否则可以不配置
    • restype: 1000
  • name=ImApp_Auth_Config

    • 含意:IM应用的连接认证参数
    • 示例值:ImType=WxWork;AgentId=111111;AppId=xxxxxxxxxxxx;AppSecret=xxxxxxxxxxxxxxxx
    • 说明:可以从各IM的管理后台界面中获取
    • 要求:如果不需要发送通知,可以不配置
    • restype: 1000
  • name=Nebula_FatalError_ImChatId

    • 含意:告警通知群ID
    • 要求:如果不配置将不发送告警通知
    • restype: 1000

  • name=Nebula_Neptune_Url

    • 含意:Neptune服务的访问地址
    • 要求:如果不使用Neptune服务可以不配置,否则此参数必填
    • restype: 10
  • name=Redis_Connection

    • 含意:Redis连接参数
    • 要求:如果不使用Redis可以不配置,否则此参数必填
    • restype: 3
  • name=Kibana_Url

    • 含意:Kibana的访问地址
    • 示例:http://192.33.206.176:2222
    • restype: 1000
  • name=JaegerUI_Url

    • 含意:JaegerUI的访问地址
    • 示例:http://192.33.206.176:3333
    • restype: 1000

  • name=Nebula_Ceres_Url

    • 含意:Ceres服务(WebHook)的访问地址
    • 要求:如果不使用Ceres服务可以不配置,否则此参数必填
    • restype: 10
  • name=Nebula_Ceres_Rabbit

    • 含意:Ceres服务使用的RabbitMQ连接参数
    • 格式:server=RabbitHost;username=fishli;password=aaaaaaaaaaaa;vhost=nbtest
    • 要求:如果不使用Ceres服务可以不配置,否则此参数必填
    • restype: 1

  • name=Nebula_Metis_Url

    • 含意:通知服务的访问地址
    • 示例值:http://localhost2:8220
    • restype: 10
  • name=Nebula_Metis_Rabbit

    • 含意:Metis服务使用的RabbitMQ连接参数
    • 格式:server=RabbitHost;username=fishli;password=aaaaaaaaaaaa;vhost=nbtest
    • 要求:如果不使用Metis服务可以不配置,否则此参数必填
    • restype: 1
  • name=Nebula_Metis_Email

    • 含意:发送邮件的SMTP连接及帐号
    • 示例值:Host=smtp.exmail.qq.com;Port=587;UserName=xx@abc.com;Password=xxxxx;IsSSL=1
    • 说明:如果不使用邮件功能,可以不配置
    • restype: 6
  • name=AliCloud_SmsConfig

    • 含意:阿里云短信服务认证参数
    • 示例值:AccessKeyId=xxxxxxxxxxxxx;AccessKeySecret=xxxxxxxxxxxx
    • 说明:如果不使用短信功能,可以不配置
    • restype: 5



示例脚本(在ConfigDb数据库中执行)

-- 基础参数
INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Environment_Name', 'XXXXXX_DEMO', 1000, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Environment_Key', 'a543162600df44bdbb35f8f108f9ccfa', 1000, '', ' ');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Authentication_SecretKey', '475800cd45bb47a38cf0805a82bcc31b624c7440c99ebe83628f0af45', 1000, '', '');

-- 日志--相关参数
INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('ClownFish_Log_WritersMap', 'InvokeLog=Rabbit;*=es', 1000, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('ClownFish_Log_Rabbit', 'server=xxx;username=fishli;password=xxx', 1, '', '');


-- 监控&通知--相关参数
INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Venus_Url', 'http://LinuxTest:8208', 1000, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('ImApp_Auth_Config', 'ImType=WxWork;AgentId=9999;AppId=xxxxxxxx;AppSecret=xxxxxxxxx', 1000, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_FatalError_ImChatId', 'xxxxxxxxx', 1000, '', '');

-- 各种服务地址
INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Neptune_Url', 'http://LinuxTest:8211', 10, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('redis_Connection', '192.168.1.1,password=xxxxx,connectTimeout=3000', 3, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Kibana_Url', 'http://192.33.206.176:2222', 1000, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('JaegerUI_Url', 'http://192.33.206.176:3333', 1000, '', '');

-- webhook服务--相关参数-----如果不安装此服务可以不添加这些参数
INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Ceres_Url', 'http://LinuxTest:8504', 10, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Ceres_Rabbit', 'server=xxx;username=fishli;password=xxxx', 1, '', '');


-- 通知服务--相关参数-----如果不安装此服务可以不添加这些参数
INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Metis_Url', 'http://LinuxTest:8220', 10, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Metis_Rabbit', 'server=xxx;username=fishli;password=xxxx', 1, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('Nebula_Metis_Email', 'Host=smtp.exmail.qq.com;Port=587;UserName=xx@abc.com;Password=xxxxx;IsSSL=1', 6, '', '');

INSERT INTO settings(name, value, restype, extra, remark) 
VALUES ('AliCloud_SmsConfig', 'AccessKeyId=xxxxxxxxxxxxx;AccessKeySecret=xxxxxxxxxxxx', 5, '', '');

restype的取值可参考下表: 监控枚举值说明




数据库连接配置

在ConfigDb的dbconfig表添加以下配置

  • name=master

    • 用途:主库连接址
  • name=Nebula_ConfigDb

    • 用途:指向配置服务对应数据库的连接,此参数可选。
  • name=Nebula_Db

    • 用途:Nebula所需要其它数据表
  • name=ClownFish_Log_Elasticsearch

    • 用途:启用 ElasticsearchWriter 写入器后,指向Elasticsearch的地址
    • dbType=8
    • server=192.168.1.100:9200



示例脚本

INSERT INTO dbconfig(name, dbType, server, database, username, password, port, args) 
VALUES ('master', 1, 'MySqlHost', 'master_db', 'user1', 'xxxxx', 0, '');

INSERT INTO dbconfig(name, dbType, server, database, username, password, port, args) 
VALUES ('Nebula_Db', 1, 'MySqlHost', 'nebuladb', 'user1', 'xxxx', 0, '');

INSERT INTO dbconfig(name, dbType, server, database, username, password, port, args) 
VALUES ('Nebula_ConfigDb', 1, 'MySqlHost', 'configdb', 'user1', 'xxxx', 0, '');

INSERT INTO dbconfig(name, dbType, server, database, username, password, port, args) 
VALUES ('ClownFish_Log_Elasticsearch', 8, 'ElasticHost:9200', 'xx', '', '', 0, '');

dbtype的取值可参考:监控枚举值说明




部署-开发/测试环境

为了简单部署,开发/测试环境 可以使用 Nebula.AllInOne 镜像

docker run -d  --name nebula_dev  -m1024m \
  -p 8503:80  -p 8208:80 \
 --privileged=true \
 --restart=always \
  -e ASPNETCORE_ENVIRONMENT=DEV \
  -e ClownFish_AutoTest_Url=xx \
  -e dbConnectionString="server=xxxxxxxxxxxx;database=configdb_dev;username=dev;password=xxxxx" \
  -e ClownFish_EnableAppParts="Nebula.Moon; Nebula.Mercury; Nebula.Venus;" \
   yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/allinone:202411191116_net9




部署必需服务-生产环境

以下服务为可选


服务的docker镜像地址:

yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/moon:202411191116_net9

yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/mercury:202411191116_net9
yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/venus:202411191116_net9
yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/adminui:202411191116_net9

yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/metis:202411191116_net9
yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/ceres:202411191116_net9
yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/neptune:202411191116_net9
yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/juno:202411191116_net9




部署-生产环境--配置服务

其它服务可以通过调用配置服务获取到数据库连接,

但是,配置服务只能使用【本地参数】方式得到数据库连接

所以,运行配置服务的docker时,通过环境变量传递必要的参数项,例如:

docker run -d  --restart=always --name moon  -p 8503:80 -m300m \
  -e dbConnectionString="server=hostxxxxxxxx;database=configdb;uid=user1;pwd=xxxx" \
  yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/moon:202411191116_net9

配置服务可以接收2个环境变量参数:

  • dbConnectionString: 数据库连接字符串,必填
  • dbProviderName: 数据提供者名称,默认值:MySql.Data.MySqlClient




部署-生产环境--Venus/AdminUI/Mercury

Venus/AdminUI 是站点,允许用户登录,并提供了操作页面。

由于允许用户登录,因此会遇到登录帐号及验证相关问题,相关的要求如下:

  • 所有登录帐号必须使用AdminUI的界面来创建,并设置用户的相关权限
  • 登录时,不使用密码,而是一种随机的验证码,此验证码通过IM工具来发送
  • 需要确保登录帐号与IM工具实现用户绑定,例如使用企业微信
  • docker启动时,可以使用一个虚拟管理员的帐号来登录,可参考下面的脚本
docker run -d  --restart=always --name venus  -p 8208:80 -m500m \
  -e ConfigServiceUrl="http://hostxxxxxxxx:8503"  \
  -e Nebula_Admin_LoginName=fishli \
  -e Nebula_Admin_Password=123 \
  yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/venus:202411191116_net9


docker run -d  --restart=always --name adminui  -p 8210:80 -m300m \
  -e ConfigServiceUrl="http://hostxxxxxxxx:8503"  \
  -e Nebula_Admin_LoginName=fishli \
  -e Nebula_Admin_Password=123 \
  yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/adminui:202411191116_net9


docker run -d  --restart=always --name mercury  -m300m \
  -e ConfigServiceUrl="http://hostxxxxxxxx:8503"  \
  yyw-registry.cn-hangzhou.cr.aliyuncs.com/nebula/mercury:202411191116_net9

此时可使用 fishli/123 这个帐号来登录,并且不经过IM发送登录验证码。