安装部署
安装依赖服务
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格式):
- 创建 ConfigDb 数据库,并执行 Config_db.sql
- 创建 NebulaDb 数据库,并执行 Nebula_db.sql
说明:
- 如果访问最比较小,例如开发或者测试环境,可以将以上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
部署必需服务-生产环境
- Nebula.Moon: 建议 2个 节点,保证高可用
- Nebula.Mercury: 至少 1个 节点
- Nebula.Venus: 只能 1个 节点
以下服务为可选
- Nebula.AdminUI: 至少 1个 节点(可以多个)
- Nebula.Neptune: 至少 1个 节点(可以多个)
- Nebula.Metis: 至少 1个 节点(可以多个)
- Nebula.Ceres: 至少 1个 节点(可以多个)
- Nebula.Juno: 只能 1个 节点
服务的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发送登录验证码。