博客程序架构

本博客程序是博主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. 基于ElementUI的网站换主题的一些思考与实现

    前言 web应用程序,切换主题,给其换肤,是一个比较常见的需求. 如何能快速的切换主题色?(只有固定的一种皮肤) 如果又想把主题色切换为以前的呢?(有多种可切换的皮肤) 该以何种方式编写标签的css属 ...

  2. 启动关闭zookeeper集群的脚本

    启动hadoop Ha集群是,每次都要手动启动每个zk节点,实在是太麻烦了.于是乎自己写了个脚本startAllZK.sh: 需要启动的节点,先在 NODENAME_ARR 数组中配置好,zkServ ...

  3. 二、Tomcat配置以及IDEA运行第一个Jsp项目——JavaWeb点滴

    一.Tomcat配置环境变量 tomcat从官网下载最新的即可,本人下载的是安装版本.在安装过程中需要设置用户名和密码以及选择相应的JDK的安装目录.这些都比较简单直接下一步即可,安装完成之后就是配置 ...

  4. CodePath Android CliffNotes 之 Effective Java for Android 翻译

    概述: 这篇文章的目的是作为这篇博文的开源版本,而netcyrax是该指南的原始文章的唯一作者. 请在下面添加您自己的在Android中Java最佳实践.技巧和巧妙! 建造者模式 当你拥有一个需要超过 ...

  5. HDU 6092 Rikka with Subset

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. 最最简单的CentOs6在线源搭建

    非常实用的在线源搭建,只要4步骤 1.点击进入http://mirrors.aliyun.com/repo/epel-6.repo ,这是阿里云的源 2.复制所有的代码  ctrl+a,ctrl+c ...

  7. Python 读取某个目录下的文件

    读取某个目录下的文件,如'/Users/test/test_kmls'目录下有test1.txt.test2.txt. 第一种方法读出的all_files是test1.txt.test2.txt im ...

  8. jsonp跨域实现

    原理:借助script可以跨域的思想,将跨域请求放在script中,当页面解析到改script标签时,就会向该src指向的地址发出一个请求,达到跨域请求的目的. 两点:(1)主要是利用了 <sc ...

  9. Problem E: 动物爱好者

    Problem E: 动物爱好者 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 882  Solved: 699[Submit][Status][Web ...

  10. Layui框架+PHP打造个人简易版网盘系统

    网盘系统   大家应该都会注册过致命的一些网盘~如百度云.百科介绍:网盘,又称网络U盘.网络硬盘,是由互联网公司推出的在线存储服务,服务器机房为用户划分一定的磁盘空间,为用户免费或收费提供文件的存储. ...