Skip to content

Latest commit

 

History

History
412 lines (325 loc) · 8.16 KB

startup-aio-readme.md

File metadata and controls

412 lines (325 loc) · 8.16 KB

单体服务启动指南

English | 简体中文

目录

CLI 快速启动

CLI 环境要求

  • .NET 8.0 SDK
  • 数据库(支持以下任一种):
    • MySQL
    • SQL Server
    • SQLite
    • Oracle
    • Oracle Devart
    • PostgreSQL
  • Redis

安装模板

# 安装微服务模板:lam
dotnet new install LINGYUN.Abp.MicroService.Templates

# 安装单体应用模板:laa
dotnet new install LINGYUN.Abp.AllInOne.Templates

安装 labp 命令行工具

  dotnet tool install --global LINGYUN.Abp.Cli

创建项目

# 简写名称:laa (LINGYUN Abp AllInOne)
labp create YourCompanyName.YourProjectName -pk YourPackageName -t laa -o /path/to/output --dbms MySql --cs "Server=127.0.0.1;Database=Platform-V70;User Id=root;Password=123456;SslMode=None" --no-random-port

参数说明:

  • -pk--package-name: 包名
  • -t--template: 模板类型,使用 laa 表示单体应用模板
  • -o--output: 输出目录
  • --dbms: 数据库类型,支持 MySql、SqlServer、Sqlite、Oracle、OracleDevart、PostgreSql
  • --cs: 数据库连接字符串
  • --no-random-port: 不使用随机端口

运行项目

创建项目后,进入项目目录:

cd /path/to/output/host/YourPackageName.YourCompanyName.YourProjectName.AIO.Host
dotnet run --launch-profile "YourPackageName.YourCompanyName.YourProjectName.Development"

源码启动

环境要求

  • .NET 8.0 SDK
  • 数据库(支持以下任一种):
    • PostgreSQL
    • MySQL
    • SQL Server(即将支持)
  • Redis
  • Docker(可选)

项目编译

  1. 确保已安装 .NET 8.0 SDK
  2. 在项目根目录执行以下命令编译整个项目:
./build/build-aspnetcore-release.ps1
  1. 使用 IDE 打开 LY.MicroService.Applications.Single 解决方案进行调试或发布

环境配置

必选配置

1. 数据库配置

支持多种数据库,以下是各种数据库的配置示例:

PostgreSQL
# 使用Docker启动PostgreSQL
docker run -d --name postgres \
    -p 5432:5432 \
    -e POSTGRES_PASSWORD=postgres \
    -e PGDATA=/var/lib/postgresql/data \
    postgres:latest
MySQL
# 使用Docker启动MySQL
docker run -d --name mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=mysql \
    mysql:latest

创建数据库:

CREATE DATABASE `Platform-V70`;
SQL Server
# 使用Docker启动SQL Server
docker run -d --name sqlserver \
    -p 1433:1433 \
    -e "ACCEPT_EULA=Y" \
    -e "SA_PASSWORD=yourStrong(!)Password" \
    mcr.microsoft.com/mssql/server:latest

2. 配置文件修改

需要根据选择的数据库类型修改以下配置文件中的数据库连接字符串:

  • migrations/LY.MicroService.Applications.Single.DbMigrator/appsettings.json
  • LY.MicroService.Applications.Single/appsettings.Development.json

数据库连接字符串示例:

PostgreSQL:

{
  "ConnectionStrings": {
    "Default": "Host=127.0.0.1;Database=Platform-V70;Username=postgres;Password=123456;"
  }
}

MySQL:

{
  "ConnectionStrings": {
    "Default": "Server=127.0.0.1;Database=Platform-V70;User Id=root;Password=123456;SslMode=None"
  }
}

SQL Server:

{
  "ConnectionStrings": {
    "Default": "Server=localhost,1433;Database=Platform-V70;User Id=sa;Password=yourStrong(!)Password;TrustServerCertificate=True"
  }
}

3. Redis 服务

# 使用Docker启动Redis
docker run -d --name redis -p 6379:6379 redis:latest

Redis 配置示例:

{
  "DistributedLock": {
    "IsEnabled": true,
    "Redis": {
      "Configuration": "127.0.0.1,defaultDatabase=14"
    }
  },
  "Redis": {
    "IsEnabled": true,
    "Configuration": "127.0.0.1,defaultDatabase=15",
    "InstanceName": "LINGYUN.Abp.Application"
  },
  "Features": {
    "Validation": {
      "Redis": {
        "Configuration": "127.0.0.1,defaultDatabase=13",
        "InstanceName": "LINGYUN.Abp.Application"
      }
    }
  }
}

可选配置

以下配置适用于单体分布式架构:

1. MinIO 分布式文件存储

{
  "Minio": {
    "WithSSL": false,
    "BucketName": "blobs",
    "EndPoint": "127.0.0.1:19000",
    "AccessKey": "{AccessKey}",
    "SecretKey": "{SecretKey}",
    "CreateBucketIfNotExists": false
  }
}

2. Elasticsearch 分布式审计日志

{
  "Elasticsearch": {
    "NodeUris": "http://127.0.0.1:9200"
  }
}

数据库初始化

  1. 运行数据库迁移脚本:

方案一(推荐):

./aspnet-core/migrations/Migrate.ps1

根据命令行提示生成迁移文件和 sql 脚本,然后执行 sql 脚本来创建数据表

方案二: 以 pgsql 为例

  • 修改 LY.MicroService.Applications.Single.DbMigrator/appsettings.PostgreSql.json 中的数据库连接信息
  • 进入LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql项目
  • 运行 dotnet ef database update
  • 等待数据迁移完成
  1. 配置数据初始化:

    • 修改 LY.MicroService.Applications.Single.DbMigrator/appsettings.json 中的数据库连接信息
    • 确保选择了正确的数据库提供程序
  2. 执行数据迁移:

    • 运行 LY.MicroService.Applications.Single.DbMigrator 项目
    • 等待数据迁移完成,基础表数据将被初始化

服务启动

  1. 运行 LY.MicroService.Applications.Single 项目
  2. 在浏览器中访问 Swagger 接口文档:

配置说明

基础配置

应用程序配置

{
  "App": {
    "ShowPii": true,
    "SelfUrl": "http://127.0.0.1:30001/",
    "CorsOrigins": "http://127.0.0.1:3100,http://127.0.0.1:30001"
  }
}

分布式缓存配置

{
  "DistributedCache": {
    "HideErrors": true,
    "KeyPrefix": "LINGYUN.Abp.Application",
    "GlobalCacheEntryOptions": {
      "SlidingExpiration": "30:00:00",
      "AbsoluteExpirationRelativeToNow": "60:00:00"
    }
  }
}

认证配置

OpenIddict 配置

{
  "OpenIddict": {
    "Applications": {
      "VueAdmin": {
        "ClientId": "vue-admin-client",
        "RootUrl": "http://127.0.0.1:3100/"
      }
    },
    "Lifetime": {
      "AccessToken": "14:00:00",
      "IdentityToken": "00:20:00",
      "RefreshToken": "14:00:00"
    }
  }
}

身份认证配置

{
  "Identity": {
    "Password": {
      "RequiredLength": 6,
      "RequireNonAlphanumeric": false,
      "RequireLowercase": false,
      "RequireUppercase": false,
      "RequireDigit": false
    },
    "Lockout": {
      "AllowedForNewUsers": false,
      "LockoutDuration": 5,
      "MaxFailedAccessAttempts": 5
    },
    "SignIn": {
      "RequireConfirmedEmail": false,
      "RequireConfirmedPhoneNumber": false
    }
  }
}

功能开关配置

{
  "FeatureManagement": {
    "IsDynamicStoreEnabled": true
  },
  "SettingManagement": {
    "IsDynamicStoreEnabled": true
  },
  "PermissionManagement": {
    "IsDynamicStoreEnabled": true
  }
}

日志配置

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "System": "Warning",
        "Microsoft": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "Logs/Info-.log",
          "rollingInterval": "Day"
        }
      }
    ]
  }
}

常见问题

如果遇到问题,请检查:

  1. 数据库连接字符串是否正确
  2. 是否选择了正确的数据库提供程序
  3. Redis 连接是否正常
  4. 必要的端口是否被占用
  5. 数据库迁移是否成功完成
  6. 认证服务器配置是否正确
  7. CORS 配置是否正确(如果前端访问出现跨域问题)