用 R blogdown 搭建个人博客或科研网站

我正在撰写新书《 R 菜鸟入门》,新书预计今年下半年出版。本文是其中一个章节。

用 R blogdown 搭建个人博客或科研网站

互联网时代有个自己的网站,就好像真实世界里有了自己的房子(服务器)和固定地址(域名);自我介绍时附上自己的网站,就像生活里邀请朋友来访或者职场上递上名片,都甚为方便。然而,建立一个网站并不容易,涉及诸多领域的知识和技能,门槛比较高。好在,我们有万能的R语言,搭建网站只需几分钟,而并不需要多少网络知识。你甚至不用懂 R 语言是什么,照我下面说的做就行,包教包会,学不会免费再教。

这里,我提供两个示范,演示如何使用 R 语言的 blogdown 扩展包1,用来搭建一个个人博客和一个科研小组网站。截至本文成稿之日,blogdown 含苞待放,尚未正式发布,但是已经能够正常安装使用了。我们来尝尝鲜,提前一睹她的芳容。

R blogdown 简介和安装

R blogdown 是什么

  • R语言的一个扩展包,用来制作网站的工具。
  • 可以用非常简洁的方式快速搭建静态网页构成的网站。
  • 虽然名字里有“博客”(blog)字样,但并不仅限于博客。非常适合搭建一个科研小组的展示窗口。
  • 基于 markdown 扩展语法,可以在网页中方便地插入图表、脚注、数学公式、R 代码等元素。
  • 非常容易将 bookdown 生成的论文转化成网页展示。
  • 非常易于维护,迁移,备份。

本书的官方网站就是用 R blogdown 搭建的。网站里给大家提供的 R 示例代码、试读章节、勘误表等,都是直接从书稿中拷贝粘贴到文本文件里,然后运行一下 blogdown 的指令,网站就自动更新了。

安装

blogdown 的背景平台是 R 语言,用户界面首选 RStudio ,产生的网站框架是 Hugo ,掰手指头数一数,要安装4样东西,略显繁琐,但并不难,一劳永逸。安装方式如下:

  • R。去R的服务器CRAN,点击Download R for Windows(其他操作系统的用户请自便),在打开的新网页最上方点击base,就找到下载链接了。下载完毕后安装,一路“下一步”的傻瓜式安装即可。
  • RStudio。去官网下载安装文件运行即可。
  • blogdown。运行RStudio,在左上面板的代码窗口输入并运行以下代码:
if(!require(devtools)) install.packages('devtools')
devtools::install_github('rstudio/blogdown')

解释一下:由于 blogdown 目前只发布到了 GitHub 服务器上,尚未发布到CRAN,所以上面第一条代码先安装开发工具 devtools 包,第二行用这个包的install_github() 函数从 GitHub 安装。

  • Hugo 框架。在 RStudio 左上面板的代码窗口输入并运行以下代码:
blogdown::install_hugo()

安装完毕。

用 R blogdown 搭建个人博客

创建示例网站

我在自己博客建立了个子站,作为 R blogdown 个人博客的示例。下面我们看看这个博客是如何创建的。

首先,在你的电脑里新建一个文件夹,准备存放网站文件,假定是c:\blogdown_default,那么创建网站只需在RStudio里运行两行代码:

setwd('c:\\blogdown_default')
blogdown::new_site()

示例网站搭建完毕。对,就这么简单!

c:\blogdown_default看看吧,出现了好多新文件夹。别的不用管也不用动,只注意两个content\public\ 就行了。打开 public\,打开里面的index.html,这就是网站的主页。随便点开上面的几个链接试试看。

发布到网上

上面搭建的网站,目前只存在于本地电脑里,下面我们发布到网上。

如果你像我一样,已经有了自己租用的服务器,上面有了WordPress博客,那最简单,在服务器的public_html\文件夹下面创建一个新文件夹,例如叫做test,那么只需将刚刚在本地新建的博客或科研网站的 public文件夹里所有文件上传到服务器的test 文件夹即可。访问你的域名/test,就可以看到新网站了!

如果你没有自己的服务器,那么最简单的是在 netlify 免费注册个账号,然后按提示将你本地的 public\ 文件夹拖进去,会自动布署,等几分钟,就可以访问了。你可以免费申请个子域名,也可以买个自己的域名绑定上去。我已经申请了一个,打算作为自己的科研主页。这是从blogdown 创建的科研网站示例(创建方法见下文)修改而来的,而且还没改完,里面的英文内容都是示例里别人的工作。

那么,如何将自动生成的网站更新成自己的,并添加新内容呢?

网站更新

前文提醒你注意,新建的网站文件夹里有个content\文件夹。这里就是更新网站内容的地方。你只需用记事本或RStudio,打开其中的.md.Rmd 文件,修改成自己的内容后保存,然后运行建站函数:

blogdown::build_site()

这样,public\ 就自动更新了,再发布到网上即可。

.md.Rmd 文件使用 markdown语法,见我以前写的帖子:

如果要发表新帖子,那么有两种方式最简单: 1. 方法一:将原有的.md.Rmd拷贝粘贴,改一下标题和内容即可; 2. 方法二:在RSudio代码窗口点击 Addins- New Post, 按提示填写即可。

写完保存,运行建站函数,上传。好了。

自动同步

也许你嫌每次更新上传太麻烦。我们当然可以选择自动同步。

如果网站搭建在Netlify,那么只需做三件事:

  1. 下载并安装 GitHub 客户端,申请个免费账号,并创建一个项目,例如叫做myweb,将前面我们举例的c:\blogdown_default 文件夹设为项目的文件夹,并同步到云端。
  2. 在你的Netlify设置里,设为自动跟你的GitHub里的myweb项目同步,同步内容是 public文件夹。
  3. 以后每次更新并运行完建站函数后,在GitHub客户端同步一下即可。

用 R blogdown 搭建科研网站

上文说到,我申请了一个Netlify免费账号,并且创建了自己的科研主页,是从blogdown 创建的科研网站示例修改而来的。这个示例的本来面貌可以来我博客上看:科研网站的示例。这个科研网站的构架比个人博客复杂,有简介、新闻、发表论文、科研项目等基本模块,还可以根据需要新增,非常适合作为科研小组的展示窗口。

这个网站的搭建也很简单,跟个人博客类似。在你的电脑里新建文件夹,比如 c:\blogdown_academic,在RStudio里运行两行代码:

setwd('c:\\blogdown_default')
blogdown::new_site(theme='gcushen/hugo-academic')

c:\blogdown_academic 看看吧,科研网站搭建完毕!

但是,如果你这时双击打开c:\blogdown_academic\public\index.html 的话,会发现界面并不好看(css未载入),并且点击页面的那些链接也无效。别急,我们再做个小改动就行了。

用记事本将c:\blogdown_academic\config.toml 打开,删掉第一行,然后添加下面两行并保存文件。

baseurl = "/"
relativeurls = true

然后在RStudio运行建站函数build_site()

blogdown::build_site()

好了,现在可以打开c:\blogdown_academic\public\index.html 正常浏览了!

解释一下:config.toml 文件里的默认设置不支持本地浏览,而且发布到网上时需要重新布署(见下一步)。这里改成相对路径relativeurls = true,就可以直接在本地打开 index.html 浏览了。

其他的发布、更新、同步,跟前文讲述的一致,这里不重复了。需要特别指出的是,科研网站示例的首页,个人信息需要在前面提到的config.toml里的[params] 修改。其他的功能我也在慢慢摸索中,欢迎一起探讨。


  1. Yihui Xie. blogdown: Create Blogs and Websites with R Markdown. R package version 0.0.24.

用 R blogdown 搭建个人博客或科研网站》上有17条评论

    1. 大鹏 文章作者

      尺有所短,寸有所长。我有些想法,折腾一下才能实现。

      回复
      1. Yihui

        关于 WordPress 与静态网站工具的对比,我有很多话说,不过我没时间细说。总体而言呢,我觉得现如今 WordPress 相比起静态网站工具的优势已经很微弱了,后者在很多方面都比 WordPress 强:不需要数据库、纯静态适合云加速、没有服务器端语言(也就几乎不存在网站被黑的可能)、离线一样可以写作和预览网站、源文件是 Markdown 适合读者为你做贡献(如修改错别字)。过去的网站时代是一个个人单打独斗,将来我相信会有更多合作,不管是内容还是工具链方面,每个环节都分别会被最优化,例如本地编辑器(RStudio)、远程部署(Netlify)、内容托管(Github),强强联合,WordPress 一家很难打败所有这些环节。

        blogdown 就像 bookdown 一样,问题就是工具链有点长,最初的配置可能会吓到人,但一旦配置好了,剩下的事情就只剩下在文本文件中写作了。我在2017年这四个月里写的日志总量应该超过过去几年了,就是因为各种工具太不顺手,包括 WordPress。当然,顺不顺手在自己感觉,如果觉得 WordPress 顺手,继续用着也无妨。

        回复
        1. 大鹏 文章作者

          顺不顺手就看是用来做什么了。用 WordPress,写写生活类博客挺轻松的,不是不能干别的,但是我懒得折腾。现在有了 R blogdown 这么便利,就忍不住想着能发挥它的作用,弄个科研网站,把自己论文的东西放进去,公式、插图往里猛堆,轻轻松松弄出漂漂亮亮的东西是种享受。还有 bookdown,不用来写书简直是浪费。称手的兵刃到手了,必须拿来打妖精,没有妖精就制造出几个出来打。

  1. Yihui

    既然你有自己的域名,完全可以加一条 CNAME 记录把自己的一个子域名指向 zhao.netlify.com 这样就可以把自己的东西放在自己的品牌下管理了,比如 zhao.dapengde.com 。

    回复
    1. 大鹏 文章作者

      是的,我是打算将来这么玩。可是我现在连默认的academic模板还没改好呢……另外,得申请个实名的域名。毕竟dapende是当年闹着玩申请的,太不严肃了。

      回复
        1. 大鹏 文章作者

          哇,这是提供起名服务么?多谢多谢!赶紧看看有没有被抢注……

        2. Yihui

          不用看了,我这是良心服务,我给人建议时都已经查过了,不能注册的我都不会说。

        3. Yihui

          另外,如果不介意非主流域名后缀,还可以考虑 zhaopeng.im 等。

          (看,这就是 WordPress 的问题之一:评论不可以修改,只好再发一条……WordPress 给我的感觉就是,我的是我的,你的也是我的,反正都是我的,我都存我数据库里,你们谁也不许碰。静态网站加 Disqus 就没有这个感觉,你的就是你的,我的是我的,我的网站谁想改就改,当然我得批准,你的评论你爱怎么处理就怎么处理,愿意增删改都随你便。)

        4. 大鹏 文章作者

          普通就是用用而已,你是非要上升到哲学角度……有时候可能明明知道自己是对的,但就是寂寞如雪……

        5. 大鹏 文章作者

          pzhao.net pzhao.org 居然都健在!是不是net更好一点?

        6. Yihui

          我对域名后缀的看法:https://yihui.name/cn/2017/03/domain-name/#comment-3232351365

        7. 大鹏 文章作者

          手快了一点,没看到你这个帖,域名在我租服务器那家买的,你我各赔了两杯茶钱。

        8. 大鹏 文章作者

          pzhao.net 和pzhao.org我都注册了。免得被坏人看见了这条留言而抢走。

  2. Pingback引用通告: 还可以用rblogdown来建立个人博客 | 生信菜鸟团

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax