# 23级3班MVCdemo **Repository Path**: myhfw003/grade-23-class-3-mvc-demo ## Basic Information - **Project Name**: 23级3班MVCdemo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-29 - **Last Updated**: 2025-01-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Debian部署MVC(Asp.Net Core)的先决条件 1. 在服务器上安装了运行环境或者是调试环境(必要条件) 1. 如何安装SDK 包管理器 - 先下载个文件 wget curl - 注册文件 - 删除那已经注册过的文件 rm - 更新软件源 apt update - 安装sdk apt install dotnet-sdk-8.0 2. 在Linux上安装软件或者应用常用方式如下: 1. 包管理器 相对于用户来说最简单 2. 使用二进制文件安装 相对于用户来说次简单 3. 编译安装 相对于用户来说最难 2. 将打包好的程序上传到指定目录(必要条件) 1. scp工具 scp -r ./* root@XXXX.XXX:/var/www/XXXX.XXX - 打包 dotnet publish - 测试(工作当中一般建议测试,可以视情况省略) - 上传 2. xftp 3. 一般建议使用nginx做反向代理(PS:如果不做反向代理,则这条可以不用) 4. MVC模式中常见的Action的返回值类型 - 返回常见数据类型,如int、string、IList<> - IActionResult,返回响应状态码,如200、301、401、404、500等 - 视图 - 重定向 - ActionResult<> ,可以同时返回状态码或者常规数据类型 - JsonResult、ContentResult,返回响应就是纯粹的数据 - POCO 可以返回一个对象,而这个对象在被返回的时候,会被序列化(相对应的是,反系列化 json {"name":"冰冰","age":88}) 5. 视图 - 渲染 - 简单数据在视图的渲染和展示 - 复杂数据在视图的渲染和展示 - 集合数据在视图的渲染和展示 -帮助程序 6. Linq集成查询 作用在谁的身上:答案是集合,特别是实现了IEnumerable接口的集合上,方法参数中,一般是Lambda表达式(其实就是匿名函数) - 查询单个元素 - .First() 函数中可以写查找第一个条件,形如(t=>t.Id==id)。但是,如果没有第一个元素,或者没有符合条件第一个元素,则报错 - .FirstOrDefault() 类似上面的用法,但是在没有符合条件的时候,不报错,而是返回一个null - 查询多个元素 - Where() 条件函数,可以查找符合一定条件的元素,返回的是一个集合 - 重新设计返回的数据类型 - select() 这个函数可以帮助我们处理函数返回的真正内容 7. 持久化及持久化方案 - 结绳记事 - 甲骨文 - 木简 - 竹简 - 碑 - 纸 - 账本 - 电子的文件,如文本文件、Excel、Word - 数据库 - 常用数据库 - Sqlserver 微软 - PostgreSQL 开源产品 社区驱动 - Mysql/MariaDb 开源产品 公司驱动 - Oracle 商业产品 - Sysbase 商业产品 - DB2 商业产品 - 达梦 - 人大金仓 - Redis 非关系型数据库 开源 - Memarchem 非关系型数据库 开源 - MongoDb 非关系型数据库 开源 - 常用的ORM工具(应用和数据库打交道的工具) - Dapper 开源产品 特点速度快,但代码写起来很麻烦 - EntityFrameworkCore 微软家产品 特点就是代码写起来很清楚并且快,但执行速度较慢 - 数据库优先 曾经很流行,现在不怎么流行 - 代码优先 现在比较主流的做法 - 定义数据库模型 - 生成迁移文件(执行一个命令) - 将迁移文件同步到数据库,完事 - FreeSql 开源 - Hibernet 开源 8. Models数据库模型 - 模型中的每一个类型,都和数据库表中的数据表一一对应 - 一条数据表中的记录,在程序或者应用中表现为一个对象 - 一系列记录,则在程序和应用中表现为一个集合 9. 更换数据库,为了能更好的部署在云服务器上(Linux操作系统) 1. 安装好有数据库 - 在Debian上安装PostgreSQL数据库 - 确认有没有安装好 - 设置高强度密码 - 设置允许远程访问数据库 2. 更换数据库驱动(配合ORM工具),并且重新生成迁移文件 - 移除原来的数据库驱动:Microsoft.EntityFrameworkCore.SqlServer,命令如下:dotnet remove package Microsoft.EntityFrameworkCore.SqlServer - 安装新的数据库驱动:Npgsql.EntityFrameworkCore.Postgresql,命令如下:dotnet add package Npgsql.EntityFrameworkCore.Postgresql - 更新数据库上下文的一些配置 - 重新生成迁移文件 - 同步迁移文件 3. 发布mvc程序 在终端,在项目目录下,执行命令如下 ```C# dotnet publish ``` 4. 确认linux上有安装dotnet运行环境 在任意路径下,执行如下命令: ```bash dotnet // 如果提示命令不存在,则没有安装 // 使用如下命令进行安装(分步骤执行): // 下载deb文件 wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb // 释放deb文件到软件源 sudo dpkg -i packages-microsoft-prod.deb // 删除下载的文件(可选) rm packages-microsoft-prod.deb // 更新软件源 apt update // 安装sdk apt install -y dotnet-sdk-8.0 ``` 5. 因为需要pm2托管mvc程序,所以需要安装pm2 - 准备利用nvm来管理nodejs版本 安装nvm使用如下命令: ``` // 使用git命令克隆仓库到本地,并且安装nvm curl -o- https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh | bash // 让环境变量变量生效,以便在合意目录中执行nvm命令 source ~/.bashrc // 使用nvm安装node的长期支持版本 nvm install --lts ``` - nodejs安装后,使用npm来全局安装pm2 ```bash // 国内设置一下高速通道 npm config set registry=https://registry.npmmirror.com // 全局安装pm2 npm i -g pm2 ``` // mvc应用的pm2配置文件 ```json // 在mvc当前目录中,创建如下配置文件,appScoreManager.json文件 { "apps": { "name": "appScoreManager", "script": "dotnet", "exec_mode": "fork", "error_file": "logs/err.log", "out_file": "logs/out.log", "merge_logs": true, "log_date_format": "YYYY-MM-DD HH:mm:ss", "min_uptime": "60s", "max_restarts": 30, "autorestart": true, "restart_delay": "60", "args": [ "ScoreManger.dll" ], "env": { "ASPNETCORE_ENVIRONMENT": "Production" } } } ``` ``` pm2 start appScoreManager.json ```