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天的内存占用情况 shanelau

内存占用有点搞,理论上应该在1G左右趋于稳定的,为什么这几个线程的内存占用区别这么大呢, 后来对内存占用也做了一番测试,具体的测试情况见另外一篇博客 地址: 还没写 !-_-

Ghost0.5

这周一(2014.8.11) 一大早刚刚睡醒就收到了ghost发来的邮件,新版本发布了,那叫一个激动啊,期待已久的多用户,和emberjs,脑海中闪过一个个经常的镜头,新的任务,新的体验。 还好有经验,新版本没几天就基本上搞定了,摸清楚了代码,加入了一些新的功能。 还在一步步完善中啦, 具体看我们团队的代码仓库吧 笔戈博客Ghost代码

开发的目标

  • 文章类别选择
  • 每篇文章加入 文章图片
  • 默认文章url为标题的拼音链接, 修改为数字
  • 文章在界面中的位置指定
  • 点赞功能
  • 多说评论
  • 百度统计

我的github

原文地址: http://kissliux.github.io/2014/08/13/ghost-and-bigertech/


7 回复

Nodejs Ghost博客开发之路和笔戈科技

引言

5月份的时候,我开始接手一个科技博客【三闻鱼】。这个博客最初是基于WordPress开发的,由PHP团队维护。尽管WordPress功能强大,但考虑到我对PHP并不熟悉,并且想尝试一下使用Node.js开发博客,因此决定从WordPress迁移到Ghost。

博客选择

选择Ghost作为博客平台的原因包括:

  • Ghost基于Node.js开发,是一个开源的博客系统。
  • 由专业的组织(tryGhost)开发和维护,具有较高的活跃度和丰富的文档支持。

开始开发

  1. 环境搭建 首先,你需要安装Node.js和npm(Node Package Manager)。然后,通过Git克隆Ghost的代码库,并根据官方文档进行环境配置。

    git clone https://github.com/TryGhost/Ghost.git
    cd Ghost
    npm install
    
  2. 启动服务 安装完成后,可以通过以下命令启动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

希望这篇博客对你有所帮助,欢迎交流和反馈!


右上角的搜索是装饰么。。。

内存占用很恐怖。。

赞。内存用的多是cluster mode的原因?

LZ是一个魅族的团队?很不错呢~

Node.js Ghost博客开发之路和笔戈科技

在这个项目中,我从零开始使用Node.js和Ghost博客系统构建了一个科技博客【笔戈科技】。以下是项目的详细开发过程:

博客选择

最初,博客是由PHP开发团队基于WordPress构建的。但是由于我对PHP不太熟悉,且考虑到Node.js在技术栈上的优势,决定放弃WordPress,转而使用Ghost。

Ghost是一款基于Node.js的开源博客系统,具有以下优点:

  • 基于Node.js,易于开发和部署
  • 完整的官方文档和较高的活跃度
  • 专业的维护团队(tryGhost)

开始开发

  1. 克隆代码并部署环境

    git clone https://github.com/TryGhost/Ghost.git
    cd Ghost
    npm install
    
  2. 实现多用户功能

    • 在Ghost的默认配置中,只支持单用户登录。为了实现多用户功能,我需要自定义用户模型。
    • 修改models/user.js文件,添加额外的字段如头像、个人简介等。
    • 创建一个新的数据库表或修改现有表结构以存储多用户信息。
    • 自定义API端点以支持多用户登录。
  3. 添加文章类型

    • 修改文章模型,添加类型字段。
    • 更新前端模板,使用户可以在发布文章时选择类型。
    • 示例代码:
      // models/post.js
      module.exports = {
        attributes: {
          title: { type: 'string' },
          content: { type: 'text' },
          type: { type: 'string', defaultsTo: 'article' } // 添加类型字段
        }
      };
      
  4. 图片处理

    • 使用第三方库如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平台,并根据需求进行了定制化开发。目前,博客已经在技术社区获得了不错的反响。

回到顶部