Skip to content

如何快速跑起来

alpha.yu edited this page Apr 25, 2022 · 37 revisions

前言

    Adnc是一个轻量级的.Net 6.0微服务开发框架,集成了一系列主流稳定的微服务配套组件。如果只是想本地调试,只需要安装必备软件,必备软件除开发工具外,建议大家都使用docker安装。如何安装docker,官方网站上有各种环境下的 安装指南
    微服务自动注册/发现/配置,Adnc集成了consul实现,因为在代码中做了限制,调试环境不会启动。当然如果你已经安装好了cosnul环境,也可以自己开启,请修改如下3个文件。建议调试环境先不要开启cosnul相关功能,先快速跑起来,consul集群如何搭建,请参考《如何手动部署到服务器》。
program.cs

if (env.IsProduction() || env.IsStaging())
{
   var configuration = cb.Build();
   //从consul配置中心读取配置
   var consulOption = configuration.GetSection("Consul").Get<ConsulConfig>();
   cb.AddConsul(new[] { consulOption.ConsulUrl }, consulOption.ConsulKeyPath);
}

startup.cs

if (env.IsProduction() || env.IsStaging())
{
   //启动后自动注册服务到consul
   app.RegisterToConsul(_srvRegistration.GetConsulConfig());
}

AbstractApplicationDependencyRegistrar.cs

//获取用户认证、鉴权服务
var authServerAddress = (_env.IsProduction() || _env.IsStaging()) ? "adnc.usr.webapi" : "http://localhost:5010";
base.AddRpcService<IAuthRpcService>(authServerAddress, policies);

必备软件有哪些

所有必备软件可以采取自己喜欢的如何形式安装或者使用已经安装好的。
Redis布隆过滤在window环境下无法加载,需要手动关闭该功能。如何关闭请参考本文末尾说明。

1. Visual Studio 2022

Adnc基于.Net 6.0开发,所以需要安装visual studio 2022

2. Redis

#新建/root/data/redis目录
mkdir /root/data/redis
#进入redis目录
cd /root/data/redis
#下载已经配置好的redis.conf到当前目录,如果不能下载成功,请手工处理
wget https://raw.githubusercontent.com/AlphaYu/Adnc/master/doc/redis/redis.conf
  • redis.conf 部分节点说明

bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败,请设置成no.
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
loadmodule /usr/lib/redis/modules/redisbloom.so 挂载布隆过滤器模块

#拉取包含布隆过滤器的redis镜像文件
docker pull redislabs/rebloom:2.2.5
#启动redis容器,监听13379端口,并挂载redis.conf与data目录
docker run -p 13379:6379 --name redis -v /root/data/redis/redis.conf:/etc/redis/redis.conf -v /root/data/redis/data:/data -d redislabs/rebloom:2.2.5 redis-server /etc/redis/redis.conf
  • 修改Adnc.Usr.WebApiAdnc.Cus.WebApiAdnc.Maint.WebApi 3个微服务appsettings.development.json文件的redis节点信息
  "Redis": {
    "MaxRdSecond": 30,
    "LockMs": 6000,
    "SleepMs": 300,
    "SerializerName": "binary",
    "EnableLogging": true,
    "PollyTimeoutSeconds": 11,
    "PenetrationSetting": {
      "Disable": false,
      "BloomFilterSetting": {
        "Name": "adnc:usr:bloomfilter:cachekeys",
        "Capacity": 10000000,
        "ErrorRate": 0.001
      }
    },
    "Dbconfig": {
      "ConnectionString": "你的redis ip:13379,password=football,defaultDatabase=0,ssl=false,sslHost=null,connectTimeout=4000,allowAdmin=true"
    }
  }

3. rabbitmq

#拉取rabbitmq镜像
docker pull rabbitmq:3.8.9-management
#启动容器,监听18578,13572端口
docker run --name=rabbitmq -p 18578:15672 -p 13572:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=football -d rabbitmq:3.8.9-management

如果安装成功,我们访问http://服务器IP:18578,会出现登录页面。

  • 修改Adnc.Usr.WebApiAdnc.Cus.WebApiAdnc.Maint.WebApi 3个微服务appsettings.development.json文件的RabbitMq节点信息
  "RabbitMq": {
    "HostName": "服务器Ip",
    "VirtualHost": "/",
    "Port": "13572",
    "UserName": "admin",
    "Password": "football"
  }

4. mongodb

docker pull mongo:4.4.3
docker run --name mongo -p 13017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=football -e TZ=Asia/Shanghai -v /root/data/mongo:/data/db -v /root/data/mongo/backup:/data/backup -d mongo:4.4.3 --auth
进入mongo容器
docker exec -it mongo mongo admin
use admin
db.auth("admin","football")
# 新建logs_dev数据库
use logs_dev
# 创建一个空的test集合,logs_dev如果没有任何集合,Adnc的健康监测不能通过。
db.createCollection("test")
# 创建用户
db.createUser({user:'alpha',pwd:'football',roles:[{role:'readWrite',db:'logs_dev'}]})
  • 修改Adnc.Usr.WebApiAdnc.Cus.WebApiAdnc.Maint.WebApi 3个微服务appsettings.development.json文件的MongoDb节点信息
  "MongoDb": {
    "ConnectionString": "mongodb://用户名:密码@服务器Ip:13017/logs_dev?authSource=logs_dev",
    "CollectionNamingConvention": 2,
    "PluralizeCollectionNames": true
  }

5. mysql

#拉取mysql镜像
docker pull mariadb:10.5.8
#启动容器,监听13308端口,并挂载data与logs目录
docker run --name mariadb -p 13308:3306 -e MYSQL_ROOT_PASSWORD=alpha.netcore -e TZ=Asia/Shanghai -v /root/data/mariadb/logs:/var/log/mysql -v /root/data/mariadb/data:/var/lib/mysql -d mariadb:10.5.8

# 创建数据库并导入数据
cd /root/data
#下载脚本
wget https://raw.githubusercontent.com/AlphaYu/Adnc/master/doc/adnc_usr_dev.sql
wget https://raw.githubusercontent.com/AlphaYu/Adnc/master/doc/adnc_maint_dev.sql
wget https://raw.githubusercontent.com/AlphaYu/Adnc/master/doc/adnc_cus_dev.sql
#如果wget下载失败,请手动下载并上传到/root/data目录,文件地址如下
#https://github.com/AlphaYu/Adnc/tree/master/doc
# 拷贝脚本文件到mariadb容器
docker cp /root/data/adnc_usr_dev.sql mariadb:/usr/adnc_usr_dev.sql
docker cp /root/data/adnc_maint_dev.sql mariadb:/usr/adnc_maint_dev.sql
docker cp /root/data/adnc_cus_dev.sql mariadb:/usr/adnc_cus_dev.sql
# 进入容器
docker exec -it mariadb /bin/bash
# 启动mariadb client
mysql -uroot -palpha.netcore

#创建数据库 adnc_usr_dev
CREATE DATABASE IF NOT EXISTS adnc_usr_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
#导入数据
use adnc_usr_dev;
source /usr/adnc_usr_dev.sql;

#创建数据库 adnc_maint_dev
CREATE DATABASE IF NOT EXISTS adnc_maint_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
#导入数据
use adnc_maint_dev;
source /usr/adnc_maint_dev.sql;

#创建数据库 adnc_cus_dev
CREATE DATABASE IF NOT EXISTS adnc_cus_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
use adnc_cus_dev;
source /usr/adnc_cus_dev.sql;
  • 修改Adnc.Usr.WebApiAdnc.Cus.WebApiAdnc.Maint.WebApi 3个微服务appsettings.development.json文件的mysql节点信息
  "Mysql": {
    "ConnectionString": "Server=服务器ip;Port=13308;database=库名;uid=账号;pwd=密码;"
  }

必备软件安装完成,下面介绍如何启动。

启动服务端ServerApi

  • 修改Adnc.Usr.WebApiAdnc.Cus.WebApiAdnc.Maint.WebApiAdnc.Infr.Gateway 4个微服务的launchSettings.json文件 注释如下代码,这是启动挂载SkyAPM的配置,因为你没有安装skywalking环境,注释就可以了。
//注释下面代码
"SKYWALKING__SERVICENAME": "adnc.usr.webapi.dev",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"
  • 右键解决方案,选择多个项目启动,并点击确定

需要启动4个项目:Adnc.Infr.GatewayAdnc.Cus.WebApiAdnc.Maint.WebApiAdnc.Usr.WebApi
实际开发过程中并不需要这样,这样介绍主要是为了快速在本地跑起来。

  • 回到Visual Studio 2022 主界面,点击启动,这样后端Api与网关就启动了。

启动前端ClientApp

  • 使用visual code 打开前端项目ClientApp

前端使用Vue开发,需要安装很多依赖包

#注意Nodejs最高支持V14.xx版本
#安装依赖包
npm install --registry=https://registry.npm.taobao.org
#启动前端页面,地址:localhost:5001,这里请耐心等待,成功后会自动打开浏览器
npm run dev
  • 启动成功后,默认页面是登录页面,登录账号:alpha2008密码:alpha2008

如何关闭布隆过滤器

  • 修改appsetting.dev.json文件Redis配置部分。
    "PenetrationSetting": {
      //这里改成true,表示cahce关闭布隆过滤器验证
      "Disable": true,
      "BloomFilterSetting": {
        "Name": "adnc:usr:bloomfilter:cachekeys",
        "Capacity": 10000000,
        "ErrorRate": 0.001
      }
    }
  • 找到Adnc.Shared.Application工程BloomFilter目录下的BloomFilterHostedService.cs文件
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{   
    /*注释此处代码,不初始化布隆过滤器
    if (_bloomFilters.IsNotNullOrEmpty())
    {
        foreach (var filter in _bloomFilters)
        {
             await filter.InitAsync();
        }
    }
    */
}
  • 找到Adnc.Usr.Application工程Services目录下的AccountAppService.cs文件
public async Task<AppSrvResult<UserValidateDto>> LoginAsync(UserLoginDto input)
{
   /*注释此处代码,不启用布隆过滤器检查用户是否注册过
   var bloomFilterAccount = _bloomFilterFactory.GetBloomFilter(nameof(AccountBloomFilter));
    var exists = await bloomFilterAccount.ExistsAsync(input.Account.ToLower());
   if (!exists)
      return Problem(HttpStatusCode.BadRequest, "用户名或密码错误");
  */

  //其他业务代码
}

WELL DONE
全文完