博客程序架构

本博客程序是博主11年的时候参考loachs小泥鳅博客内核开发的.net跨平台博客cms,距今已有6年多了,个人博客网站一直在用,虽然没有wordpress那么强大,但是当时在深究.net的同时,自己能写一个博客程序,并且基于独立Linux服务器搭建一个自己的.net网站还是挺有意思,毕竟当年运行在linux下的.net网站还是极少数的,之前的部署方式一直沿用至今,网站服务器仅仅内存512M扩充到1G,毕竟现在的操作系统512M实在是有点少,如果是跑静态站点还可以,动态的再多放点东西就会内存报警了,废话不多说,看代码。

技术栈

  • .net framework 4.0
  • sqlite 数据库
  • mono linux 运行环境以及mono下的sqlite库
  • nvelocity 模板引擎
  • dapper 轻量级orm框架
  • vs2010

代码结构

左侧主要分为三个文件夹,Jqpress.web是存放web路由入口、模板皮肤、上传文件以及后台管理程序,上图default.aspx.cs代码里有处理301跳转的,主要用来处理jqpress.com自动跳转到www.jqpress上,确保对搜索引擎处理友好,需要大家手动移除此代码。

路由设计



整个前台入口是从default.aspx作为路由入口跳转到核心路由控制器BlogController,Controller根据url请求的type参数做路由处理。

模板引擎设计

模板引擎采用nvelocity,是java的velocity的.net翻译版本,现在依然活跃在java界,采用这个模板引擎的原因是因为简单,高效,通用,成熟。

可以看到一个模板皮肤包含图片、模板、样式、预览图、配置文件,wordpress好像也跟这差不多。

数据存储设计

作为轻量级的博客程序,数据库就没必要用sqlserver或者mysql这样的大块头了,sqlite绝对够用了,如果是windows下的可以用access,但是sqlite真心好用,语法就是mysql的精简版,速度非常之快,上图是原生sqlite没通过orm的直接写法。

orm更是采用stackoverflow出品的dapper,速度快,原生sql,简单,因为要支持linux,所以sqlite的操作类需要using Mono.Data.Sqlite; ,上图是通过dapper的写法,没有密密麻麻的参数了,不过当前项目还没有完全转dapper,希望有感兴趣的同学将此份源码改造成更好的.net 博客cms系统。

由于windows下和linux操作sqlite的原生方法差别比较大,如果通过dapper来操作的话还是可以实现自由切换

数据库结构

  • jq_category 分类及标签表
  • jq_comments 评论表
  • jq_links 友链及导航设置
  • jq_posts 文章表
  • jq_sites 站点访问统计数字及文章、分类、数量统计表
  • jq_users 账户表

运行

vs2010调试模式预览

博客首页

后台登录,默认用户名admin,密码admin

后台首页

文章编辑

linux部署方式

linux下需要安装mono和jexus就可以运行起来,mono作为.net framework的linux运行环境,jexus作为web服务器。



如上图是我的博客站点jexus配置,因为我的服务器上还有其他语言的站点,所以没有直接采用jexus对外服务,前面还套了层nginx作为代理。



上图为我服务器上的mono安装信息。

linux服务器上的的.net 程序问题

  • jexus不支持中文,所以文件上传的路径必须重写成字母加数字符号形式,
  • jexus web服务器是默认对大小写敏感的,所以部署的时候一定要

    只需要把 jws这个脚本文件中的 “export MONO_IOMAP=...”这一句前边的“#”去掉,就可以不区分大小写了

源码获取

https://github.com/robotbird/jqpress-aspx

为了防止部分同学无法访问Github,所以放oschina的gitee上了

https://gitee.com/robotbird/jqpress-aspx

后记

至于架构为什么不用.net mvc ,那是因为当时只买得起最便宜的.net 虚拟服务器,不用单独买服务器一年才几十块钱,所以说此版本的.net 博客程序对服务器的要求是极低的,基本支持所有的.net 空间提供商,如果是自建服务的话,我也重新开发了一套基于mvc3的cms程序,大家可以先预览下[bjjxysbz.com,下回分解下。

作为一个多年的.net开发人员,后又混迹java,现在成为产品狗,偶尔用用python做些日常的工作,作为一个迈入中年的老程序员,想想还是不忘初心,热爱技术,后续也会抽出时间将自己的作品逐一搬到网上,缅怀下青春,个人的博客站点 机器鸟,后续会将继续在博客园上发表技术类型的文章,回归社区,不再独自前行。

博客程序还不是很完善,bug可能比较多,如果有代码、开发、部署问题请联系qq:330296409,或者邮箱robotbird#qq.com。

.NET作品集:linux下的博客程序的更多相关文章

  1. Linux 下Wordpress博客搭建

    Wordpress # 下载安装文件 cd /usr/local/nginx/html/blog wget https://cn.wordpress.org/wordpress-4.8.1-zh_CN ...

  2. docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序

    一.在centos7.3上安装docker 前置条件 x86_64-bit 系统 kernel 3.10+ .检查内核版本,返回的值大于3.10即可 [root@node1 ~]# uname -r ...

  3. 【分分钟内搭建一个带用户系统的博客程序(一)用户系统】asp.net core的Identity真香,EF真香!

    不用不知道,一用香到爆. 老哥是个屌丝前端,但也想写点web应用耍一耍.之前弄过了NodeJs,也弄过JAVA,最近由于写游戏的原因用C#,索性上手一波asp.net core. 这篇博客记录的是,如 ...

  4. 使用 vue + thinkjs 开发博客程序记录

    一入冬懒癌发作,给自己找点事干.之前博客程序写过几次,php 的写过两次,nodejs 用 ThinkJS 写过,随着 ThinkJS 版本从1.x 升级到 2.x 之前的博客程序也做过升级.但是因为 ...

  5. w10环境下Hexo博客搭建

    w10使用hexo+github手把手搭建自己的第一个博客 对一个程序员来说,博客的重要性不言而喻,不但可以积累知识,还可以更好的给别人分享自己的心得.今天就以时下比较流行的hexo博客搭建属于自己的 ...

  6. 不错的linux下通用的java程序启动脚本

    不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...

  7. 在64位linux下编译32位程序

    在64位linux下编译32位程序 http://blog.csdn.net/xsckernel/article/details/38045783

  8. flask实战-个人博客-程序骨架、创建数据库模型、临接列表关系 --

    编写程序骨架 personalBlog的功能主要分为三部分:博客前台.用户认证.博客后台,其中包含的功能点如下图所示: 数据库 personalBlog一共需要使用四张表,分别存储管理员(Admin) ...

  9. Linux 系统中发博客必备的五大图片处理神器

    发博客时,总免不了要用图片说话.经过长时间的磨合,在 Linux 桌面系统下有几款图片处理软件我已经用得比较顺手了.这几款软件在 Linux 世界使用广泛,各个 Linux 发行版的软件仓库中都有自带 ...

随机推荐

  1. servlet的运行工作

    我是一个刚学几天的小白,写得不好,如果哪个地方有错误,欢迎你们指出. 在服务器端,我用的是Tomcat作为Servlet 容器,在容器中有一个Servlet接口,你编写一个servlet类放在Tomc ...

  2. Java基础笔记12

    1.自定义异常. 定义一个类,让该类继承Exception.并写出该类的所有的构造函数.2.IO流. java.io 文件类.File 字节输入和输出流 InputStream OutputStrea ...

  3. HTML的语法

    1,什么是HTML标记语言,他是表示网页信息的符号标记语言,特点包括: a,可以设置文本的格式,比如标题,文号,文本颜色,段落等待 b,可以简历列表 c,可以插入图像和媒体 d,可以建立表格 e,超连 ...

  4. Leetcode题解(四)

    12/13.Integer to Roman/Roman to Integer 题目 罗马数字规则: 符号 I V X L C D M 数字 1 5 10 50 100 500 1000 代码如下: ...

  5. rsync远程数据同步工具的使用

    准备工作 虚拟机1: 192.168.24.41, 用于搭建rsync服务器 虚拟机2: 192.168.26.68, 用于搭建rsync客户端 虚拟机1和虚拟机2均为centos7; 1. 检查虚拟 ...

  6. IdentityServer4 SigningCredential(RSA 证书加密)

    IdentityServer4 默认提供了两种证书加密配置: services.AddIdentityServer() .AddDeveloperSigningCredential() .AddTem ...

  7. zookeeper分布式搭建

    1下载并解压zookeeper安装包 2进入zookeeper配置文件目录,找到zoo_sample.cfg,执行cp zoo_sample.cfg  zoo.cfg 3打开zoo.cfg文件,修改d ...

  8. 有关CUBLAS中的矩阵乘法函数

    关于cuBLAS库中矩阵乘法相关的函数及其输入输出进行详细讨论. ▶ 涨姿势: ● cuBLAS中能用于运算矩阵乘法的函数有4个,分别是 cublasSgemm(单精度实数).cublasDgemm( ...

  9. 蓝桥杯-算法训练--ALGO-4 结点选择

    本人是一个刚刚接触C++不久的傻学生~记录一些自己的学习过程.大神路过可以批评指正~ 刚学动态规划,水平还很渣,一下子不知道从何下手,借鉴了一下这位大哥的文章 http://www.cnblogs.c ...

  10. NLP论文泛读之《教材在线评论的情感倾向性分析》

    NLP论文泛读之<教材在线评论的情感倾向性分析> 本文借助细粒度情感分类技术, 对从网络上抓取大量计算机专业本科教材的评价文本进行情感极性 分析, 从而辅助商家和出版社改进教材的质量.制定 ...