iBlog是完全基于githubAPI,充分利用gracejs的数据代理特性的全功能博客解决方案。项目地址:https://github.com/xiongwilee/iblog体验地址:https://iblog.wilee.me(访问速度较慢是因为使用了配置最低的awsECS服务)简介github是全球最大的同款-sexdatingwebsite,有人在上面做了很多不可思议的事情,利用issues功能写博客就是其中之一。js等等。但是,在客户端(浏览器)实现这些对githubapi的调用有几个问题:githubapi在不使用token访问的情况下,基于IP有每小时60个请求的限制;调用浏览器端接口,无法实现用户登录和评论;由于众所周知的原因,国内访问github非常不稳定,甚至有些区域无法直接访问;想到Gracejs强大的数据代理特性,我们是不是可以在服务端直接调用githubapi来实现一个博客系统呢?这样我就可以把我githubrepo的issues作为博客的管理后台;我什至可以使用githubissuescomments的api和githuboauth2.0的api来实现评论系统,再也不用担心停服的问题了!Features当然,你看到了这篇文章,意味着这个解决方案已经实现:iBlog:afull-featuredblogsolutionbasedonGracejsandgithubissues。其主要特点如下:基于Gracejs+githubissues,不依赖任何数据库;具有博客、分类、评论等功能,并与githubissues保持同步;服务端调用githubapi,不用担心githubapi访问不稳定;只显示repoowner的issue,不用担心issue被恶意篡改;页面响应支持,手机端或其他客户端访问体验更佳;快速入门iBlog源码??独立托管在xiongwilee/iblog,但为了演示方便,在Gracejs中默认集成了iBlog的输出文件;所以,接下来,使用Gracejs带你快速开启iBlog。安装环境依赖:请确保您环境中的Nodejs版本为7.6.0+。第一步是下载Gracejs并安装依赖:#koa-grace就是Gracejs$gitclonegit@github.com:xiongwilee/koa-grace.git$cdkoa-grace$npminstall供参考:小白同学可以关注一个几点:如果你不会gitclone命令,可以直接点击Gracejs主页的Cloneordownload按钮,然后点击DownloadZIP;使用cnpm或yarn安装,体验会更好;第二步启动服务:#请在koa-grace目录下执行$npmrundev然后用浏览器打开https://0.0.0.0:3000。这时浏览器提示:PersonalAccessTokenUndefined!意思是服务启动正确,但是githubpersonaltoken没有配置。第三步配置token:1.生成PersonalAccessToken:如果你已经有可以使用的token,直接跳到“2.在Gracejs中配置token”。首先登录github,访问:https://github.com/settings/tokens/new;然后,在“Tokendescription”下填写token,“scopes”选择repo和user;然后,点击“Generatetoken”,复制并保存生成一个长度为40字节的token,如下:仅供参考:请保存此token,以后您将不会再在此页面上看到它。2.在Gracejs中配置token。复制获得的token后,回到koa-grace目录。粘贴到koa-grace/config/main.development.js下的constant.token中://通用参数,作为模板参数传递给模板引擎constant:{cdn:'',domain:{demo:'https://127.0.0.1:3000'},//githubpersonaltoken,不懂这个配置的可以忽略token:"Pastethetokenyoujustgothere"},FYI:请不要在这里提交tokenGitHub存储,因为GitHub有安全措施:如果你提交的代码中存在你的token,它会自动删除你创建的token!githubapiv3版本有个限制(参考:https://developer.github.com/v3/#rate-limiting):只允许单个IP在不配置token的情况下限制每小时60次请求;配置token后,单个token限制为每小时5000次,个人博客足够用了。第四步,完成!保存后在刚才的npmrundev的控制台可以看到服务已经自动重启了。此时再次访问:https://0.0.0.0:3000,就可以看到默认页面了!BTW:如果你此时看不到这个页面,很有可能你根本无法访问github。安息吧配置除了上述token配置,iBlog还支持其他配置;其他配置文件在iblog/controller/base.js中的koa-grace/app/config变量中。仅供参考:以下配置请保持您的服务处于正常启动状态。owner和repo配置owner和repo配置以及文章源码存储的配置,在koa-grace/app/iblog/controller/base.js中默认配置为:owner:'xiongwilee',//githubusernamerepo:'blog'//作为文章来源的github仓库也默认使用https://github.com/xiongwilee/blog下的issue作为文章来源。您需要配置自己的github用户名和用于托管博客的github存储库。配置保存后,服务会自动重启;这时候打开页面就会看到自己repo的issues中的内容(如果没有repoissue会提示“没有文章”)。仅供参考:获取文章(即您配置的repo中的问题)的规则是:1)问题必须由您创建;2)问题必须处于开放状态。很简单,在base.js中的site.links中,根据自己的需要进行配置。文章分类配置在右边一栏有一个标签,就是文章分类。这里的文章分类直接读取你配置的githubrepo的labels配置。以默认配置xiongwilee/blog为例,你可以在这里管理Labels:https://github.com/xiongwilee/blog/labels。然后可以在github的issues详情页面配置文章的Labels(即文章分类)。参考:[https://github.com/xiongwilee...(https://github.com/xiongwilee...)。文章介绍、主题图片配置接下来所有文章直接通过你配置的githubrepo的issues进行管理。这里请再次注意:issue必须是你自己创建的,并且处于open状态才能显示在你的博客上。首页文章列表中的文章有两个元素:1)文章介绍;2)文章主题图片。这两个元素分别声明在issue的markdown内容顶部:文章介绍语法:[intro]:文章介绍文章主题图片语法:[image]:图片链接参考:oauth配置配置oauth的主要目的是为了通过githubapi获取登录用户信息和文章评论。大致的原理是:首先用户通过github登录,然后在用户登录github的时候将access_token保存到cookie中,然后就可以通过这个access_token获取当前登录用户的信息,发表评论。这里粗略介绍一下如何配置oauth。第一步获取client_id和client_secret,登录github,访问https://github.com/settings/developers,点击Registeranewapplication。在“RegisteranewOAuthapplication”页面:“Applicationname”、“HomepageURL”、“Applicationdescription”可根据英文提示填写;“授权回调URL”填写登录成功后的回调链接。例如iblog.wilee.me的配置是:https://iblog.wilee.me/user/oauth?from=github;您本地服务的配置是:https://0.0.0.0:3000/user/oauth?from=github。单击“注册应用程序”以创建client_id和client_secret对。第二步是配置client_id和client_secret。配置client_id和client_secret非常简单。可以在base.js中配置://OAuthapplicationsclientId&clientSecretclient_id:'client_idgeneratedbyyou',client_secret:'client_secretgeneratedbyyou',保存后,服务会自动重启;在本地服务任意文章详情底部,可以通过“使用github登录”按钮登录,登录后会跳转到文章详情页面,此时看到的是登录状态,你可以发表评论。BTW:这里的评论对应这篇文章对应的repo中issues的评论。开发以上是iBlog所有配置的概览,如果你只是想简单的使用这个博客系统,就看这里。但如果你想进一步开发,做更个性化的深度定制,可以继续往下看。仅供参考:以下操作请保持Gracejs服务处于启动状态(即koa-grace目录下的npmrundev处于执行状态),重新打开一个命令行窗口进行操作。下载iBlog源码??时请再次注意,保持koa-grace处于启动状态,在koa-grace路径下执行:#进入k??oa-grace同级路径$cd../#下载真正源码iBlog的代码$gitclonegit@github.com:xiongwilee/iblog.git$cdiblog$npminstall启动文件监控iBlog业务实现基于gulp+require.js+less+Nunjucks,在iblog路径下执行npmrundev即可在开发模式下启动文件监控:#保持在iblog路径下$npmrundev这时候你可以根据自己的需要自定义iblog。在开发过程中,输出文件会被gulp自动编译并输出到koa-grace/app/iblog目录下。如果文件打包完成,在iblog路径下执行npmrunbuild。有兴趣的同学可以自己比较npmrundev和npmrunbuild输出文件的区别。TODO直接基于reveal.js生成文章幻灯片;更友好的标签分类页面,提示当前在哪个标签下;文章大纲自动生成功能;投稿到iBlog的实现非常仓促,从iBlog的想法到详细的构思,从设计到开发需要三天时间,难免会有bug;欢迎到https://github.com/xiongwilee/iblogfork参与开发,或打赏一个star。
