基于nodejs的开源CMS博客搭建-keystone篇

现在前端搭建一个CMS有很多选择,可以用php,不过听说php马上也考虑使用vue了。基于php的有wordpress,typora等,都是很成熟的cms。

其它的还有静态博客,如hexo,jekyll,敲一敲命令,就可以部署到github或者阿里云上面。

当然我们可以选择node来作为我们开发的动力,这里又有很多开源的基于node的CMS可以选择了

1 node的框架

express

koa

thinkjs 360开发的node框架,有点类似thinkphp 可以直接写async和awaite 支持ts

sails.js

阿里的egg

hapi

今天我们要讲的是keystone,仓库在这里 https://github.com/keystonejs/keystone

官网在这里 http://keystonejs.com/

2 好看的demo

http://www.sydjs.com/

http://makeandbuild.com/

3 安装

  1. 首先安装node和mongodb

  2. 安装keystone-generaotr

    npm install -g generator-keystone

  3. 安装yeoman

    npm install -g yeoman

  4. 创建新目录

    mkdir test

    cd test

  5. 生成

    yo keystone

  6. 启动

    node keystone

    打开浏览器的3000端口你就可以看到你的项目了

4 目录结构

|--lib
|  定制的库和代码
|--models
|  程序的数据库模型
|--public
|  公开的静态文件 (css、js、images等)
|--routes
|  |--api
|  |  程序的api控制器
|  |--views
|  |  程序的视图控制器
|  |--index.js
|  |  初始化程序的路由和视图
|  |--middleware.js
|  |  为路由定制的中间件
|--templates
|  |--includes
|  |  通用的 .jade 组件放这里
|  |--layouts
|  |  基础 .jade 布局放这里
|  |--mixins
|  |  通用的 .jade mixins放这里
|  |--views
|  |  程序的视图模板
|--updates
|  数据组装和迁移脚本
|--package.json
|  给npm的项目配置
|--web.js
|  启动程序的主脚本

5 设置参数

如果你学过express 那么这些参数都很简单

有3种方式配置keystone的参数

  1. keystone.init( object )
  2. keystone.set(key, object)
  3. 在.env环境中配置 仅有部分配置项支持

env参数 影响缓存已编译模板

views 放程序视图模板的路径

5.1 设置模板引擎

     'views': 'templates/views',
        'view engine': '.hbs',
        'custom engine': handlebars.create({
                layoutsDir: 'templates/views/layouts',
                partialsDir: 'templates/views/partials',
                defaultLayout: 'default',
                helpers: new require('./templates/views/helpers')(),
                extname: '.hbs',
        }).engine,

5.2 mongodb的设置

如果你的Mongodb在阿里云上或者在其他主机上,需要自定义,因为默认是localhost

MONGO_URI=mongodb://your-server/database-name

5.3 https服务器参数

可以选用nginx或者node提供的https服务器

如果选择keystone提供额,需要设置下面的参数

ssl

ssl key 指向SSL秘钥的路径

ssl cert 指向ssl证书的路径

ssl port 启动ssl服务器的端口,默认为3001

5.4 配置文件.env不要上传到你的代码仓库

mongo process.env.MONGO_URI || "mongodb://localhost/your-db"

5.5 配置管理界面参数 - 富文本编辑器

wysiwyg 所见即所得

keystone.set('wysiwyg additional options', {
    external_plugins: {
        'image':'http://bhaltair.oss-cn-shanghai.aliyuncs.com/tinyMCE/plugins/image/plugin.min.js'
    },
        selector: "textarea",  // change this value according to your HTML
        plugin: 'textpattern',
        textpattern_patterns: [
                {start: '*', end: '*', format: 'italic'},
                {start: '**', end: '**', format: 'bold'},
                {start: '#', format: 'h1'},
                {start: '##', format: 'h2'},
                {start: '###', format: 'h3'},
                {start: '####', format: 'h4'},
                {start: '#####', format: 'h5'},
                {start: '######', format: 'h6'},
                {start: '1. ', cmd: 'InsertOrderedList'},
                {start: '* ', cmd: 'InsertUnorderedList'},
                {start: '- ', cmd: 'InsertUnorderedList'}
        ]       
        
})

5.6 用户认证参数

cookie secret 浏览器cookies的加密秘钥,最好设为一个长长的随机字符串

session store 默认存在内存中,你可以设置为mongo 或者conncet-redis

6 使用pm2部署你的本地应用的远程服务器

设置你的云服务器和github的ssl登录

设置你本地主机到你的云服务器的ssl登录

配置pm2的.echosystem.config.js

pm2 deploy