Nodejs ghost博客开发之路和笔戈科技
Nodejs ghost博客开发之路和笔戈科技
5月份的时候,我开始接手一个科技博客【三闻鱼】,这个博客是php开发部门基于wordpress开发的,维护一直是他们在做,鉴于wordpress强大的功能,php团队重新做了一套主题,然后博客上线了。文章的更新量也比较小,网站基本每日保持着1000左右的访问量。
博客选择
我到团队后,开始接手这个项目,尴尬的是,我并不会php,只懂一些皮毛,没做过具体的项目,本人原本做java出道,后来阴差阳错开始全职做nodejs开发。经过几番考虑决定放弃wordpress,用nodejs开发博客,原因大概有以下几点。
- wordpress已经发展很多年了,代码陈旧,臃肿
- php不熟悉
- nodejs开发博客,对于科技博客来说,更加有逼格
在网络上几经查看后,发现Ghost正符合我的要求,
- 基于nodejs开源的博客系统
- tryGhost组织专门开发和维护
- 完整的官网,较多的文档,非常高的活跃度
开始开发
说干就干,clone代码,部署环境,几经周折,项目正式运行了。 当初是0.42版本,
基本功能测试完以后,发现这个博客还有很多地方不能满足我的需求。主要有以下几点:
- 单用户,该系统就只支持一个人登录,所有的文章属名都是一个人,还需要展示作者的头像,个人主页
- 每篇文章不能插入一个图片,作为文章的标题图
- 不能选择文章类型,所有文章都是一个类型,导致不能分栏目或者做专题
- 图片压缩,裁剪
必须要解决的是多用户的功能,作为一个科技博客,不能只有一个作者吧,伤心地去ghost的github页面看他们的roadmap,还好我的英语阅读能力还行,说起也是过了4级的人啊,最新的目标中就有mulit user,可我们不能等啊。只能我来处理了,团队的人员都相信程序员是万能的,好吧,我承认没有搞不定的程序,只有搞不定的妹纸。
用了一种很搓的方式实现了多用户,将作者的所有信息使用html标签写入文章中,插入数据的时候分析文章内容,读取出作者信息和文章的标识图片。 修改数据库加入文章类型和文章的位置。最终大费周章,把博客改到我们需要的样子了。基本上把ghost的源码看完了,对前端模板也是完全熟悉了。
目前的博客地址 笔戈科技
主要由文章和视频两个类别,前端使用了不同的页面输出 主页的文章可以控制位置,选择哪个位置放什么文章。
下图是Ghost 博客运行10天的内存占用情况
内存占用有点搞,理论上应该在1G左右趋于稳定的,为什么这几个线程的内存占用区别这么大呢, 后来对内存占用也做了一番测试,具体的测试情况见另外一篇博客 地址: 还没写 !-_-
Ghost0.5
这周一(2014.8.11) 一大早刚刚睡醒就收到了ghost发来的邮件,新版本发布了,那叫一个激动啊,期待已久的多用户,和emberjs,脑海中闪过一个个经常的镜头,新的任务,新的体验。 还好有经验,新版本没几天就基本上搞定了,摸清楚了代码,加入了一些新的功能。 还在一步步完善中啦, 具体看我们团队的代码仓库吧 笔戈博客Ghost代码
开发的目标
- 文章类别选择
- 每篇文章加入 文章图片
- 默认文章url为标题的拼音链接, 修改为数字
- 文章在界面中的位置指定
- 点赞功能
- 多说评论
- 百度统计
我的github
原文地址: http://kissliux.github.io/2014/08/13/ghost-and-bigertech/
Nodejs Ghost博客开发之路和笔戈科技
引言
5月份的时候,我开始接手一个科技博客【三闻鱼】。这个博客最初是基于WordPress开发的,由PHP团队维护。尽管WordPress功能强大,但考虑到我对PHP并不熟悉,并且想尝试一下使用Node.js开发博客,因此决定从WordPress迁移到Ghost。
博客选择
选择Ghost作为博客平台的原因包括:
- Ghost基于Node.js开发,是一个开源的博客系统。
- 由专业的组织(tryGhost)开发和维护,具有较高的活跃度和丰富的文档支持。
开始开发
-
环境搭建 首先,你需要安装Node.js和npm(Node Package Manager)。然后,通过Git克隆Ghost的代码库,并根据官方文档进行环境配置。
git clone https://github.com/TryGhost/Ghost.git cd Ghost npm install
-
启动服务 安装完成后,可以通过以下命令启动Ghost服务:
npm start
功能扩展
在使用Ghost的过程中,我发现它有一些功能需要扩展或修改以适应我们的需求。具体的需求包括:
- 支持多用户登录和管理。
- 每篇文章可以添加一个标题图。
- 支持文章分类和专题。
- 图片压缩和裁剪功能。
实现多用户功能
由于Ghost最初只支持单用户登录,我们需要手动实现多用户支持。这里提供一个简单的示例,通过修改Ghost的API来支持多用户:
// 假设我们有一个用户表
const User = require('./models/User');
// 修改Ghost的API以支持多用户
app.post('/api/users', (req, res) => {
const { username, email, password } = req.body;
const newUser = new User({ username, email, password });
newUser.save()
.then(user => res.status(201).json(user))
.catch(err => res.status(500).json({ error: err }));
});
添加文章标题图
为了支持每篇文章添加一个标题图,我们需要修改Ghost的文章模型和视图:
// 修改文章模型
const Post = require('./models/Post');
Post.schema.add({
titleImage: { type: String }
});
// 在视图中显示标题图
module.exports = function(req, res) {
Post.findOne({ slug: req.params.slug })
.then(post => {
res.render('post', { post });
})
.catch(err => res.status(500).send(err));
};
目前的博客地址
目前博客已部署并运行,前端使用了不同的页面输出,可以根据需要控制文章的位置。博客地址为:笔戈科技
测试与优化
在Ghost博客运行期间,我们注意到内存占用问题。经过测试和优化,发现内存占用在1GB左右趋于稳定。具体优化措施将在后续博客中详细介绍。
Ghost 0.5 版本
最近Ghost发布了0.5版本,引入了多用户支持和EmberJS。我们团队迅速跟进,更新了代码并加入了一些新功能。具体代码仓库可见:笔戈博客Ghost代码
开发目标
我们正在逐步完善博客功能,包括:
- 文章分类选择
- 每篇文章加入文章图片
- 默认文章URL改为数字链接
- 文章在界面中的位置指定
- 点赞功能
- 多说评论
- 百度统计
结语
如果你对博客开发感兴趣,欢迎关注我的GitHub仓库:我的GitHub
希望这篇博客对你有所帮助,欢迎交流和反馈!
+1
右上角的搜索是装饰么。。。
内存占用很恐怖。。
赞。内存用的多是cluster mode的原因?
LZ是一个魅族的团队?很不错呢~
Node.js Ghost博客开发之路和笔戈科技
在这个项目中,我从零开始使用Node.js和Ghost博客系统构建了一个科技博客【笔戈科技】。以下是项目的详细开发过程:
博客选择
最初,博客是由PHP开发团队基于WordPress构建的。但是由于我对PHP不太熟悉,且考虑到Node.js在技术栈上的优势,决定放弃WordPress,转而使用Ghost。
Ghost是一款基于Node.js的开源博客系统,具有以下优点:
- 基于Node.js,易于开发和部署
- 完整的官方文档和较高的活跃度
- 专业的维护团队(tryGhost)
开始开发
-
克隆代码并部署环境
git clone https://github.com/TryGhost/Ghost.git cd Ghost npm install
-
实现多用户功能
- 在Ghost的默认配置中,只支持单用户登录。为了实现多用户功能,我需要自定义用户模型。
- 修改
models/user.js
文件,添加额外的字段如头像、个人简介等。 - 创建一个新的数据库表或修改现有表结构以存储多用户信息。
- 自定义API端点以支持多用户登录。
-
添加文章类型
- 修改文章模型,添加类型字段。
- 更新前端模板,使用户可以在发布文章时选择类型。
- 示例代码:
// models/post.js module.exports = { attributes: { title: { type: 'string' }, content: { type: 'text' }, type: { type: 'string', defaultsTo: 'article' } // 添加类型字段 } };
-
图片处理
- 使用第三方库如
sharp
进行图片压缩和裁剪。 - 示例代码:
const sharp = require('sharp'); const fs = require('fs'); async function processImage(filePath) { await sharp(filePath) .resize(800, 600) .toFile(`${filePath}.processed`); }
- 使用第三方库如
目前的博客地址
访问笔戈科技,可以看到目前博客的首页布局和多用户功能。
未来开发目标
- 文章类别选择
- 每篇文章加入文章图片
- 默认文章URL为标题的拼音链接,改为数字
- 文章在界面中的位置指定
- 点赞功能
- 多说评论
- 百度统计
通过以上步骤,我成功地将一个基于PHP的博客系统迁移到了Node.js平台,并根据需求进行了定制化开发。目前,博客已经在技术社区获得了不错的反响。