基于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 安装
-
首先安装node和mongodb
-
安装keystone-generaotr
npm install -g generator-keystone -
安装yeoman
npm install -g yeoman -
创建新目录
mkdir test
cd test -
生成
yo keystone -
启动
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的参数
- keystone.init( object )
- keystone.set(key, object)
- 在.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