Chats 开发指南

欢迎使用 Chats!在我上一篇博客 https://www.cnblogs.com/sdcb/p/18597030/sdcb-chats-intro 中,我介绍了 Chats 的各种功能,但所有功能都是用代码一行一行写出来的。

在这个指南中,我将帮助您快速上手开发,了解如何在开发阶段使用和配置 Chats 项目。Chats 在开发阶段采用前后端分离的模式,但在生产环境中前后端会合并为一个发布包。

技术基础

  • 后端: 使用 C#/ASP.NET Core 开发。
  • 前端: 使用 Next.js/React/TypeScript 开发。
  • CSS: 使用 Tailwind CSS。

环境需求

  • Git
  • .NET SDK 8.0
  • Node.js >= 20
  • Visual Studio Code
  • Visual Studio 2022(可选但推荐)

获取代码

首先,克隆 Chats 的代码仓库:

git clone https://github.com/sdcb/chats.git

前后端共同开发

后端开发指南

  1. 使用 Visual Studio 打开解决方案:

    在根目录下找到 chats/Chats.sln 解决方案文件并打开。在 Visual Studio 中,您将看到一个名为 Chats.BE 的网站项目。

  2. 运行项目:

    • 按 F5 运行项目。默认配置会检查 SQLite 数据库文件 chats.db 是否存在,如果不存在,会自动创建在 ./AppData 目录并初始化数据库。
    • 服务将在 http://localhost:5146 上运行,并提供 API 服务。如果在开发模式下运行 (ASPNETCORE_ENVIRONMENT=Development),Swagger UI 将在 http://localhost:5146/swagger 上可用。
  3. 配置文件说明:

    默认配置在 appsettings.json 中,但强烈建议使用 userSecrets.json 管理敏感信息。这可以避免在代码库中泄露敏感的开发配置。

    默认配置结构如下:

    {
    "Logging": {
    "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore": "Warning"
    }
    },
    "AllowedHosts": "*",
    "FE_URL": "http://localhost:3001",
    "ENCRYPTION_PASSWORD": "this is used for encrypt auto increment int id, please set as a random string.",
    "DBType": "sqlite",
    "ConnectionStrings": {
    "ChatsDB": "Data Source=./AppData/chats.db"
    }
    }

    配置选项解释:

    • Logging: 管理日志级别,默认记录信息级别的日志。
    • AllowedHosts: 配置允许访问的主机名,* 表示接受所有。
    • FE_URL: 前端的URL,默认指向 http://localhost:3001。前端可以通过 CORS 跨域访问后端。默认3000端口无需额外配置。
    • DBType: 数据库类型,支持 sqlite(默认)、mssqlpostgresql
    • ConnectionStrings:ChatsDB: 数据库 ADO.NET 连接字符串,随 DBType 而变。
    • ENCRYPTION_PASSWORD: 用于加密自增 ID。生产环境中应设置为随机字符串,避免直接暴露 ID。

    为什么使用整数+加密而非 GUID?

    在 Chats 项目初期,我们确实是使用的GUID,但是由于下列2个原因并经过慎重考虑,我换成了自增整数Id:

    • GUID 字段较大,占用更多空间;
    • GUID 作为聚集索引会导致索引碎片,影响性能;

    管理敏感配置:

    不建议在 appsettings.json 中直接修改配置项。可以通过 Visual Studio 使用 userSecrets.json

    • Visual Studio: 右键点击 Chats.BE 项目 -> 管理用户机密

    • CLI: 使用以下命令管理用户机密。

      dotnet user-secrets init
      dotnet user-secrets set "key" "value"
      dotnet user-secrets list

    这可以避免在提交代码时不小心将敏感信息上传。

  4. 不使用 Visual Studio 的运行方式:

    进入后端目录:

    cd ./chats/src/BE
    dotnet run

前端开发指南

  1. 进入前端目录:

    cd ./chats/src/FE
  2. 创建 .env.local 文件并指定后端 URL:

    echo "API_URL=http://localhost:5146" > .env.local
  3. 安装依赖并运行开发服务器:

    npm i
    npm run dev

运行后,前端服务将监听 http://localhost:3000。后端已有 CORS 配置支持无需额外配置。

仅前端开发

对于专注于前端开发的场景,我们提供了一个已经部署好的后端开发环境:

  1. 克隆仓库:

    git clone https://github.com/sdcb/chats.git
  2. 进入前端目录并指定远程后端:

    cd ./chats/src/FE
    echo "API_URL=https://chats-dev.starworks.cc:88" > .env.local

    这个环境已经默认允许了 http://localhost:3000 这个地址的跨域访问行为。

  3. 安装依赖并运行:

    npm i
    npm run dev

注意事项

如果想模拟生产打包过程,请执行:

npm run build

此命令会在当前目录生成 ./out 文件夹,其中包含所有必要的静态文件。

仅后端开发

对于专注于后端开发的场景,可以使用打包好的前端文件:

  1. 克隆仓库并进入后端目录:

    git clone https://github.com/sdcb/chats.git
    cd ./chats/src/BE
  2. 下载并解压前端静态文件放置到 wwwroot

    Linux 下执行:

    curl -O https://github.com/sdcb/chats/releases/latest/download/chats-fe.zip
    unzip chats-fe.zip
    cp -r chats-fe/* wwwroot/

    Windows 下执行:

    Invoke-WebRequest -Uri "https://github.com/sdcb/chats/releases/latest/download/chats-fe.zip" -OutFile "chats-fe.zip"
    Expand-Archive -Path "chats-fe.zip" -DestinationPath "."
    Copy-Item -Path ".\chats-fe\*" -Destination ".\wwwroot" -Recurse -Force

    注意

    1. 我同时还将上述的 https://github.com/sdcb/chats/releases/latest/download/chats-fe.zip 地址上传到了我个人的 Minio 文件服务器,地址为:http://io.starworks.cc:88/chats/latest/chats-fe.zip

      如果您直接从 Github 上下载速度太慢,可以换成这个地址。

    2. 这个地址对应的 chats-fe.zip 附件是由 Github Actions 在代码合入 main 分支时自动生成来而,合入 dev 分支时并不会触发更新这个文件。

  3. 运行后端:

    dotnet run

    或者在 Visual Studio 中打开 Chats.sln 并运行 Chats.BE 项目。

运行后,访问 http://localhost:5146/login 可以直接进入 Chats 的登录界面,实现前后端不分离的部署模式。

希望此指南可以帮助您顺利开展 Chats 项目的开发工作。如有任何问题,请查看源码中的文档或在 https://github.com/sdcb/chats 中创建issue来获得支持。

Chats 开发指南的更多相关文章

  1. ASP.NET Aries 开源开发框架:开发指南(一)

    前言: 上周开源了Aries开发框架后,好多朋友都Download了源码,在运行过程里,有一些共性的问题会问到. 所以本篇打算写一下简单的开发指南,照顾一下不是太看的懂源码的同学,同时也会讲解一下框架 ...

  2. FreeMarker模板开发指南知识点梳理

    freemarker是什么? 有什么用? 怎么用? (问得好,这些都是我想知道的问题) freemarker是什么? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生 ...

  3. Jetty使用教程(四:21-22)—Jetty开发指南

    二十一.嵌入式开发 21.1 Jetty嵌入式开发HelloWorld 本章节将提供一些教程,通过Jetty API快速开发嵌入式代码 21.1.1 下载Jetty的jar包 Jetty目前已经把所有 ...

  4. JVM 平台上的各种语言的开发指南

    JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...

  5. iOS原生地图开发指南续——大头针与自定义标注

    iOS原生地图开发指南续——大头针与自定义标注 出自:http://www.sxt.cn/info-6042-u-7372.html 在上一篇博客中http://my.oschina.net/u/23 ...

  6. Angularjs中文版本开发指南发布

    从本人开始在写关于Angularjs的文章开始,也算是见证了Angularjs在国内慢慢的火起来,如今的Angularjs正式如日中天.想知道为什么Angularjs会这么火,请移步angularjs ...

  7. nodejs开发指南读后感

    nodejs开发指南读后感 阅读目录 使用nodejs创建http服务器; supervisor的使用及nodejs常见的调式代码命令了解; 了解Node核心模块; ejs模板引擎 Express 理 ...

  8. Libgdx 开发指南——目录

    本系列文档选译自libgdx github项目 wiki : https://github.com/libgdx/libgdx/wiki 由于关于Libgdx的中文文档非常稀缺,因此在这里对官方Wik ...

  9. jQuery MiniUI 开发指南+API组件参考手册

    jQuery MiniUI 开发指南 本文档将逐步的讲解jQuery MiniUI的方方面面,从此您将踏上jQuery MiniUI的深入探索之旅.                 1.Hello M ...

  10. 《CSS3专业网页开发指南》笔记

    书本:<CSS3专业网页开发指南>(the book of css3) Peter Gasston 著    李景媛 吴晓嘉 译 第1章: 1.box-sizing : IE8及以上版本 ...

随机推荐

  1. 提升软件测试效率与灵活性:探索Mock测试的重要性

    Mock测试是测试过程中的一种方法,用于替代那些难以构造或获取的对象,通过创建虚拟对象来进行测试.所谓难以构造的对象如何理解呢? 举例来说,像HttpServletRequest这样的对象需要在具有s ...

  2. python3 numpy的一些小知识点

    简介 一个用python实现的科学计算,包括: 1.一个强大的N维数组对象Array: 2.比较成熟的(广播)函数库: 3.用于整合C/C++和Fortran代码的工具包: 4.实用的线性代数.傅里叶 ...

  3. 使用 vite 配置目录别名

    你是否被 ../ ../../ 这样的路径折磨的心力憔悴,如果你使用 vite 的话,不妨来试试 alias 命名目录吧. 安装 @types/node 来加载 path 模块 npm i @type ...

  4. [python] 基于PyOD库实现数据异常检测

    PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点.异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误.噪声或潜在的有趣现象.无论是处理小规模项目还是大型 ...

  5. Android :安卓学习笔记之 Handler机制 的简单理解和使用

    目录 Handler机制 1.Handler使用的引出 2.背景和定义 3.作用和意义 4.主要参数 5.工作原理及流程 5.1.对应关系 6.深入分析 Handler机制源码 6.1.Handler ...

  6. iOS关于高德地图定位和热点搜索使用小结

    最近项目刚刚忙完,有空整理一下用到的相关技术点.地图是比较常见的功能模块,现在用的比较多的是地图当前位置显示,公交.骑行.步行路线信息,附近热点位置搜索.现在国内用的比较多的是高德.百度,国外的话可以 ...

  7. iOS 14 UIDatePicker适配问题,使用老的选择器样式

    iOS 14 UIDatePicker 在 13.4 新增了2个属性如下 @property (nonatomic, readwrite, assign) UIDatePickerStyle pref ...

  8. 小程序的json文件

    json文件是页面的描述文件,对本页面的窗口外观设置,页面的配置可以覆盖全局的配置 (app.json);

  9. computed 中的属性名和data的属性名可以相同吗?

    不可以,因为无论computed 中的属性名还是 data 又或者是props中的属性名,都会别挂载到组件实例上,所以名字都不允许重复  : ps:好比一个作用域里面不允许定义2个相同的变量名 :

  10. 基于QToolButton封装,解决Icon不能设置hover和press态的问题

    1 #pragma once 2 #include <QToolButton> 3 #include <QBoxLayout> 4 #include <QLabel> ...