Giter Club home page Giter Club logo

masuit.myblogs's Introduction

Masuit.MyBlogs


重要提醒:OneDrive功能将于2024.6.30进行移除处理,如果你正在使用本项目,请尽快完成OneDrive迁移到alist或其他网盘挂载程序

个人博客站项目源码,高性能高安全性低占用的博客系统,这也许是我写过的性能最高的web项目了。仅3MB的代码量! 目前日均处理请求数80-600w次,同时在线活跃用户数60-600人,数据量累计已达到数百万条,数据库+Redis+网站主程序同时运行在一台4核8GB的机器上,浏览器页面请求秒级响应,CPU平均使用率控制在10%左右,内存占用控制在400MB左右。 任务管理器 image

image

演示站点

测试站点1:https://masuit.org,测试站点2:https://masuit.com,测试站点3:https://ldqk.xyz

LICENSE codeSize language

请注意:

一旦使用本开源项目以及引用了本项目或包含本项目代码的公司因为违反劳动法(包括但不限定非法裁员、超时用工、雇佣童工等)在任何法律诉讼中败诉的,一经发现,本项目作者有权利追讨本项目的使用费(公司工商注册信息认缴金额的2-5倍作为本项目的授权费),或者直接不允许使用任何包含本项目的源代码!任何性质的外包公司996公司需要使用本类库,请联系作者进行商业授权!其他企业或个人可随意使用不受限。996那叫用人,也是废人。8小时工作制才可以让你有时间自我提升,将来有竞争力。反对996,人人有责!

Star趋势

前端请求支援

目前网站前端页面的代码比较零乱,到处都是,大家想吐槽的尽管吐槽吧,也想找个人帮忙设计下整体的前端页面,有兴趣愿意贡献代码的的小伙伴,欢迎Pull Request吧!😂😂

项目主要技术栈

.NET8
ASP.NET Core MVC
Blazor
Entity Framework Core
Masuit.Tools
Masuit.LuceneEFCore.SearchEngine
Hangfire

开发环境

操作系统:Windows 11 23h2
IDE:Visual Studio 2022 v17.8
数据库:PostgreSQL 16.x
Redis:redis-server-windows 7.x
运行时:必须是.NET 8

当前运行环境

操作系统:Windows Server 2019
数据库:PostgreSQL 16.x
Redis:redis-server-windows 7.x
运行时:.NET 8
服务器配置:4核+8GB+6Gbps
承载流量:单日请求量平均600w左右,单日带宽1TB左右
请勿使用阿里云、百度云等活动超卖机运行本程序,否则卡出翔!!!
如何判断服务器商是否有超卖:给你的服务器跑个分,如果跑分接近于网络上该处理器公布的分数,则不是超卖的机器,计算公式:总分/核心数进行比较,由于是虚拟机,如果单独比较单核跑分,没有参考意义

基础设施要求

最低配置 推荐配置 豪华配置 至尊配置
CPU 1核 2核 2核 4核
内存 1GB 2GB 4GB 8GB
带宽 1Mbps 1Mbps 5Mbps 1000Mbps+
数据库 pgsql 9 pgsql 14 pgsql 15+ pgsql 16+
缓存组件 Redis 3.2+ Redis 5.0+ Redis 5.0+ Redis 7.0+
备注 玩玩而已 几个人同时访问 几百个人同时访问,单日请求量600w以下 单日请求量600w以上

主要功能

服务器性能监控

可直接在线实时监控服务器的运行状态,包括CPU、网络带宽、磁盘使用率、内存占用等情况,百分位统计和图表统计,可记录最近一天的服务器健康状态,通过websocket进行数据的推送,仅支持Windows,且需要Windows安装最新的更新。 image

文章管理

  • 包含文章审核、文章合并、文章列表的增删查改、分类管理、专题管理;
  • 文章审核:当用户在前台页进行投稿后,会进入审核状态,审核通过后,才会在前台页的文章列表中展示出来。
  • 文章合并:当用户在前台页进行了文章的编辑后,会创建出文章的合并请求,当后台管理进行相应的合并操作后,前台用户的修改才会正式生效,可以直接合并、编辑并合并和拒绝合并,拒绝时,修改人会收到相应的邮件通知。
  • 文章操作:可对文章进行修改、新增、置顶、临时删除(下架)、还原、永久删除、禁止评论等操作,编辑后的文章会生成历史版本。文章支持模板变量。
  • 分类管理:对文章的分类进行增删查改和文章的移动等操作,与文章的关系:一对多。
  • 专题管理:对文章的专题进行管理,与文章的关系:多对多。
  • 快速分享:首页快速分享栏目的管理。 image image image image image image

评论和留言管理

对前台用户提交的留言和评论进行审核,当前台用户提交的内容可能包含有敏感词时,会进入人工审核,审核成功才会在前台页中展示。

消息通知

站内消息包含评论、留言、投稿、文章合并等通知。

公告管理

对网站的公告进行增删查改管理。支持定时上下架发布。 image

杂项页管理

一些通用的页面管理,可自由灵活的创建静态页面。 image

系统设置

  • 包含系统的全局设置、防火墙管理、网站运行日志记录、友链管理、邮件模板的管理。
  • 全局设置:网站的一些基本配置和SEO相关操作等;
  • 防火墙:对网站的所有请求进行全局流量的拦截,让规则内的请求阻止掉,支持黑名单、白名单、IP地址段、国家或地区、关键词审查等规则;
  • 模板变量:针对文章内容的通用内容生成,变量只能添加不能删除。 image image image image image

广告管理

主动式的广告投放管理,支持竞价排名,支持在banner、边栏、页内、列表内的广告展示,竞价或权重的高低决定广告出现的概率。支持按地区进行投放。 image image

赞助管理

对网站打赏进行增删查改操作,自动掩码。 image

搜索统计

当前台用户每Session周期内的关键词搜索,不重复的关键词将会被记录,用于热词统计,仅记录最近一个月内的所有搜索关键词,用于统计当月、7天以及当天的搜索热词。 image

任务管理

hangfire的可视化管理页面

文件管理

服务器文件的在线管理,支持浏览、预览、压缩、解压缩、创建文件夹、上传、下载、打包下载等文件的基本操作。 image

onedrive网盘程序

基于YukiDrive二次开发的内嵌网盘应用。 image image

项目架构

  • 项目采用单体架构,方便部署和配置,传统的MVC模式,ASP.NET Core MVC+EF Core的简单架构。
  • Controller→Service→Repository→DbContext
    image

项目文件夹定义:

App_Data:存放网站的一些常规数据,以文本的形式存在,这类数据不需要频繁更新的。
┠─cert文件夹:存放https证书
┠─ban.txt:敏感词库
┠─CustomKeywords.txt:搜索分词词库
┠─denyip.txt:IP地址黑名单
┠─DenyIPRange.txt:IP地址段黑名单
┠─GeoLite2-City.mmdb:MaxMind地址库
┠─ip2region.db:ip2region地址库
┠─mod.txt:审查词库
┠─whitelist.txt:IP地址白名单
Common:之前老项目的Common项目;
Configs:项目的一些配置对象
Controllers:控制器
Extensions:一些扩展类或一些项目的扩展功能,比如hangfire、ueditor、中间件、拦截器等;
Infrastructure:数据访问基础设施,包含Repository和Services,相当于老项目的DAL和BLL;
Migrations:数据库CodeFirst模式的迁移文件;
Models:存放一些实体类或DTO;
Views:razor视图
wwwroot:项目的所有静态资源;

核心功能点技术实现

后端技术栈:

依赖注入容器:.NET Core自带的+Autofac,autofac主要负责批量注入和属性注入;
实体映射框架:automapper 9.0;
缓存框架:CacheManager统一管理网站的热数据,如Session、内存缓存,EFCoreSecondLevelCacheInterceptor负责管理EF Core的二级缓存;
定时任务:hangfire统一管理定时任务,包含友链回链检查、文章定时发布、访客统计、搜索热词统计、Lucene库刷新等任务;
Websocket:Blazor进行流推送实现服务器硬件健康状态的实时监控;
硬件检测:Masuit.Tools封装的硬件检测功能;
全文检索:Masuit.LuceneEFCore.SearchEngine基于Lucene.Net 4.8实现的全文检索中间件;
中文分词:结巴分词结合本地词库实现中文分词;
断点下载:Masuit.Tools封装的断点续传功能;
Redis:CSRedis负责Redis的读写操作;
文件压缩:Masuit.Tools封装的zip文件压缩功能;
Html字符串操作:htmldiff.net-core实现文章版本的内容对比,HtmlAgilityPack实现html字符串的“DOM”操作,主要是用于提取img标签,HtmlSanitizer实现表单的html代码的仿XSS处理;
图床:支持多个图床的上传:gitee、github、gitlab;
拦截器:授权拦截器、请求拦截器负责网站全局流量的拦截和清洗、防火墙拦截器负责拦截网站自带防火墙规则的请求流量、异常拦截器、url重定向重写拦截器,主要用于将http的请求重定向到https;
请求IP来源检查:maxmind+IP2Region+本地数据库实现请求IP的来源检查;
RSS:WilderMinds.RssSyndication实现网站的RSS源;
EF扩展功能:zzzproject相关nuget包
Word文档转换:OpenXml实现浏览器端上传Word文档转换为html字符串。
在线文件管理:angular-filemanager+文件管理代码实现服务器文件的在线管理

前端技术栈

前台页面:

基于bootstrap3布局
ueditor+layedit富文本编辑器
notie提示栏+sweetyalert弹窗+layui组件
angularjs

后台管理页:
  • angularjs单一页面应用程序
  • material布局风格
  • echart图表组件
  • ng-table表格插件
  • material风格angular-filemanager文件管理器

性能和安全相关

  • hangfire实现分布式任务调度;
  • Z.EntityFramework.Plus实现数据访问层的高性能数据库批量操作;
  • Lucene.NET实现高性能站内检索;
  • 通过url的敏感词检查过滤恶意流量;
  • 限制客户端的请求频次;
  • 表单的AntiForgeryToken防止恶意提交;
  • ip2region+MaxMind地址库实现请求来源审查;
  • 用户信息采用端到端RSA非对称加密进行数据传输;

项目部署

以Windows系统为例,Linux系统请自行折腾。

1.安装基础设施:

  1. 安装.net6运行时:https://dotnet.microsoft.com/zh-cn/download
  2. 安装mysql:mysql 8 绿色版,或pgsql:pgsql 14 绿色版
  3. 安装redis:redis for windows绿色版

2.生成网站应用

方式一:编译源代码:

编译需要将Masuit.Tools项目和Masuit.LuceneEFCore.SearchEngine项目也一起clone下来,和本项目平级目录存放,才能正常编译,否则,将Masuit.Tools项目和Masuit.LuceneEFCore.SearchEngine项目移除,通过nuget安装也是可以的。

方式二:下载编译好的现成的二进制文件

前往Release下载最新的压缩包解压即可。

3.还原数据库脚本

创建数据库,名称随意,如:myblogs,然后前往Releasehttps://github.com/ldqk/Masuit.MyBlogs/tree/master/database/mysql下载最新的数据库文件,还原到新建的数据库。
如果没有你目标数据库类型的还原文件,你可以先还原到mysql或pgsql中,然后使用Full Convert转换成你需要的目标数据库类型即可。

4.修改配置文件:

主要需要配置的是以下内容,其他配置均为可选项,不配置则表示不启用; image
同时,BaiduAK参与了数据库的加密,如果你没有BaiduAK,自行到百度地图开放平台申请,免费的
如果你使用了CDN,需要配置TrueClientIPHeader选项为真实IP请求转发头,如cloudflare的叫CF-Connecting-IP。 如果Redis不在本机,需要在配置文件中的Redis节下配置,固定为Redis,值的格式:127.0.0.1:6379,allowadmin=true,若未正确配置,将按默认值“127.0.0.1:6379,allowadmin=true,abortConnect=false”。
其他配置请参考appsettings.json的注释按需配置即可。

5.启动网站

配置好环境和配置文件后,可直接通过dotnet Masuit.MyBlogs.Core.dll命令或直接双击Masuit.MyBlogs.Core.exe运行,也可以通过nssm挂在为Windows服务运行,或者你也可以尝试在Linux下部署。

其他方式部署

IIS:部署时必须将应用程序池的标识设置为LocalSystem,否则无法监控服务器硬件,同时需要安装.NET Core Hosting运行时环境,IIS程序池改为无托管代码。

docker/Linux:自行爬文。

有偿代部署服务

请联系:[email protected]

后台管理:

https://127.0.0.1:5001/dashboard

  • 初始用户名:masuit
  • 初始密码:123abc@#$ 若密码不对,可在debug模式下进入后台【用户管理】下重置密码

推荐项目

基于EntityFrameworkCore和Lucene.NET实现的全文检索搜索引擎:Masuit.LuceneEFCore.SearchEngine

.NET万能框架工具库:Masuit.Tools

masuit.myblogs's People

Contributors

deson999 avatar ldqk avatar zhaoyis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

masuit.myblogs's Issues

评论输入邮箱好像不支持一些别的或者“变体”的邮箱[BUG]

bug概要

复现步骤

  1. Go to '评论区'
  2. 写昵称、评论,填邮箱(我填的是foxmail.com,由qq邮箱注册。我的foxmail.com与qq.com域名不同但都是“同一个”邮箱)
  3. click on '发送验证码'
  4. See error

预期的行为
用foxmail.com的邮箱可以发验证码,但实际上不行

屏幕截图
image

使用环境:

  • OS: [e.g. win nt10.0 win11]
  • Browser [e.g. chrome, edge]
  • Version [e.g. 22]

附加的描述
我不懂,只是在写评论时看到了

[BUG] 今天遇到一个奇怪的页面

温馨提示:提交后请保证回复及时,若长时间未回复的issue,将在超过30天以后作关闭处理!

bug概要
我在网站搜索Hex-Rays,出来了两个搜索结果,第一个是我想要的 ,进入文章后,提示需要回复才能有下载内容,当我回复后,按F5刷新 直接返回404,并且搜搜结果也没有这个文章。文章标题我也没记,大概是 Hex-Rays IDA
最后404的网址是: https://masuit.com/1990?kw=Hex-Rays&t=v7gjivwdxjwg

我进入这个文章后,提示需要回复才能看到下载链接,然后回复框也有很多人回复。因为网站一直都不需要回复就能下载,我就有点疑惑,又打开个浏览器窗口看一下其他文章有没有需要回复的,点开了两个,发现没有。我就想可能是这篇文章特殊的设定吧,就没多想。我继续点开其他文章也没有问题。现在我感觉很诡异。

复现步骤
1.无法复现

预期的行为

屏幕截图

使用环境:

  • OS: win10
  • Browser chrome
  • Version 105.0.5195.102

附加的描述

net461版下的bug

你好,我在学习使用此项目的net461版本,在SystemController这个控制器下,GetBaseInfo这个action 下返回数据中的
ToJsonStringAsync()方法报错,我使用nuget引用了最新的Masuit.Tools,在tool里面并没有找到这个方法

@1(`I0CRD T88 OVE5~GKIH

有奖重金悬赏征集网站安全漏洞

欢迎各路安全爱好者来发现本网站任何安全方面的漏洞,比如数据安全、网络安全、权限安全等 ,一经核实安全漏洞存在的,待修复成功后,提交漏洞者将获得100-20000人民币不等的现金奖励,根据漏洞级别程度具体而定,欢迎各路安全大神们前来挑战,为开源事业做贡献!
如有发现安全问题,请提交至邮箱: [email protected]
挖安全漏洞的目的也是为了将来能够为大家提供更长久更稳定的免费内容服务!虽然奖金很少,肯定是请不动专家级的大佬的,如果大家有兴趣就来帮忙找找本站存在的一些安全和性能问题吧🤣🤣

Masuit.MyBlogs.Core.7z

Masuit.MyBlogs.Core.7z 这个解压不能运行,是需要自己编译吗?谢谢。

[BUG]无法编译

无法编译,有几个项目没有
尽管可以手动引入包,但还是在这个项目集成比较好.....

image

[BUG]

bug概要
缺少 Masuit.LuceneEFCore.SearchEngine 项目引用, 编译失败;

复现步骤
下载master分支, vs打开编译整个解决方案;

预期的行为
项目正常编译

屏幕截图
image

使用环境:

  • OS: Windows 10 教育版
  • Version 21H2

404页面的时候,赌猫的游戏玩不了[BUG]

温馨提示:提交后请保证回复及时,若长时间未回复的issue,将在超过30天以后作关闭处理!

bug概要
本来想去看美女的写真的,结果进入404页面,然后页面后面的水波纹能生效,但是点击围堵猫猫游戏没有反应

复现步骤

  1. Go to '...'
  2. Click on '点击小圆圈,堵住小猫'
  3. See error

预期的行为
玩堵猫猫游戏

屏幕截图
image

使用环境:

  • OS: [e.g. iOS] windows10 22H2 19045.3086
  • Browser [e.g. chrome, safari] chrome 114.0.5735.199(正式版本) (64 位)
  • Version [e.g. 22]

保护登录口令的代码实现不安全

代码示例

 /// <summary>
        /// 登录
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public UserInfoDto Login(string username, string password)
        {
            UserInfo userInfo = GetByUsername(username);
            if (userInfo != null)
            {
                UserInfoDto user = userInfo.Mapper<UserInfoDto>();
                string key = userInfo.SaltKey;
                string pwd = userInfo.Password;
                password = password.MDString3(key);
                if (pwd.Equals(password))
                {
                    return user;
                }
            }
            return null;
        }

原因:
MD5函数不安全

建议:

  1. 【强制】使用SHA256或以上函数
  2. 【强制】使用salt 盐
  3. 【强制】salt的盐必须随机生成
  4. 【强制】salt的长度建议至少大于16字节
  5. 【建议】使用受认可的慢哈希算法,例如PBKDF2、Bcrypt等算法

[BUG]

bug概要
索引创建不成功;站点无法正常运行;
image

复现步骤

  1. 数据库导入mysql;
  2. 项目编译成功;
  3. 启动报错;

预期的行为

项目正常运行;

net5版本编译运行问题

你好,我在本地尝试构建运行,使用vs2019+Mysql8.0。
编译成功后运行访问网站主页提示以下错误:
1

修改报错语句赋值为"Description"字符串后再次运行

2

查看数据库中所有表的数据为空

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.