第 2 章 基于 blogdown 建立个人学术网站
NOTICE!
需要指出的是,由于涉及到的软件版本或技术在不断更新,请留意所使用的软件版本.现在是2022-07-31,从使用者角度,未来技术的发展一定会更加人性化、更加便利,因此,下面介绍的流程和技术细节可能会有变化!
这里介绍基于 Markdown 和 rmarkdown,用 blogdown、hugo、GitHub 和 netlify 搭建静态的 Blog 风格的个人学术网站技术.
其特色和优势:
- 静态网页,速度快
- 可用GitHub 保存内容,不需要搭建数据库,无须备份
- 一旦搭建完成,就可在 Rstudio中,用 Markdown 或 rmarkdown 写作、操作、维护和管理网站
- 用 netlify 注册、发布和托管你的网站,设置个性二级域名,免费、无限流量
提示:
以下内容可以分为两部分
1.Step0 - Step7 是利用 git 命令和 github 仓库创建、更新
2.本章最后一节的重要补充说明,给出了略过 git 和 github 仓库,创建、更新和部署网站的半自动化的方法.
2.1 Step 0: 准备工作
本文以 Microsoft Windows 操作系统为例,介绍安装和配置技术,其它操作系统类似.
如果事先系统中已经安装,请确保更新至最新版.
- GitHub 注册与配置
首先,大家要清楚 git 和 GitHub 的关系,自己去 Bing. 简单讲,git是一款开源、免费的版本控制软件,能够帮你更好的管理你的程序代码,github则是一个网站,这个网站是用git做版本控制的代码托管平台,在其上,可以帮助程序员之间互相交流和学习。
其次,Bing 完后别害怕,其实 Rstudio 已经有集成了 git 的 GUI 了,除非你另有打算,无须学会什么 add、commit、push、pull和 merge 等 git 命令就足以应付 blogdown 了,你只需在 Rstudio git GUI 上面用鼠标去点、点、点….,oh,这个我喜欢,但我不知道点哪儿….唉!
推荐安装 GitKraKen,去模拟 git 是怎么玩的,虽然这里不是必须的.
我们跳过 git,直接到 GitHub.
- 打开GitHub 主页,注册你的个人账户(如果你已经有了,请绕过),找到如下页面
- 在上述页面中, 点击右上角的
new
创建一个个人网站专用仓库(repository) 参考如图所示,填写好你的 repository name、Description,默认选择 Public,选择复选框 add a README file,其它就默认好了,最后,点击Create repository
就创建好用于保存网站的repository了. - 转到你新建的 repository 页面,点击右上角的
code
按钮,点击右侧裁剪版图标,copy 显示的新存储库的远程网址 URL,后面在设置 Rstudio 时要用到 - 基于安全考虑,GitHub 官方在 2020 年 7 月宣布从 2021 年 8 月 13 起,必須透过令牌(token)机制进行 git 的相关操作,以取代用户账户和密码。请参考此处指引申请你的 GitHub 用户令牌并妥善保管好,后面要用到!
- Rstudio 的配置
打开已安装好的 Rstudio,进行一些简单配置.
- Tools -> Global Options -> Sweave -> Weave Rnw files using: knitr
- Tools -> Global Options -> Sweave -> Typeset LaTex into PDF using: XeLaTeX
- Tools -> Global Options -> Git/SVN -> Git executable: (安装好 git 后,打开这里应该就可以看到 git 的路径了)
注意:其上的SSH RSA key,当在 Rstudio 中进行 git 操作出现问题时,可能需要创建 key,并利用其去 github 中进行必要的设置,请参见码农家园.
- 安装 blogdown 和 hugo
在线安装 blogdown.打开 Rstudio,在 R 的终端窗口命令提示符”>“下输入:
> install.packages('blogdown')
这一过程通常应该比较顺利,如果有问题可以尝试安装开发版(前提是安装了 devtools扩展包,可通过install.packages("devtools")
安装):
> devtools::install_github("rstudio/blogdown")
在线安装 hugo.同上,在 R 的终端窗口命令提示符”>“下输入:
> blogdown::install_hugo()
限于网络速度等原因, hugo 在线安装可能会无法安装成功. 解决的办法是,点击此处下载,解压后发现只有一个文件hugo.exe,把其放在一个目录下,然后在 R 的终端窗口命令提示符”>“下输入:
> blogdown:::install_hugo_bin("d:/hugo.exe") # 这里是三个冒号,注意更改你存放 hugo.exe 的真实路径
macOS 中的安装命令有所不同,例如:
> blogdown:::install_hugo("./downloads/hugo_0.87.0_macOS-64bit.tar.gz")
- hugo 的版本控制问题
Hugo 变化很快——新的功能被添加,原有的功能被取消.如果你有一个以上的 Hugo 版本,就容易出现问题,这可能会导致您在调试为什么上个月可以构建的站点现在不能构建.
blogdown现在可以把你的网站项目固定在一个特定的hugo版本上,你可以使用以下命令来查找所有本地安装的 Hugo 版本:
> blogdown::find_hugo('all')
你可能看到类似如下的输出
[1] "/Users/alison/Library/Application Support/Hugo/0.54.0/hugo"
[2] "/Users/alison/Library/Application Support/Hugo/0.71.1/hugo"
[3] "/Users/alison/Library/Application Support/Hugo/0.78.2/hugo"
[4] "/Users/alison/Library/Application Support/Hugo/0.79.0/hugo"
[5] "/usr/local/bin/hugo"
如果需要,你可以针对特定的网站项目,在其中的.Rprofile使用
options(blogdown.hugo.version = "0.79.0")
来指定使用 hugo 的版本,重新启动 R 即刻生效.注意,如果你使用 Netlify 部署网站,需要确保 Netlify 用来建立你的网站的 Hugo 版本也与你的本地版本相匹配.
你也可以定期清理一下不再使用的 本地hugo版本.要做到这一点.请使用:
> blogdown::remove_hugo()
按照屏幕提示操作即可.
如果你想更新 hugo,请使用命令
> blogdown::install_hugo()
安装一个新版本或一个特定的版本.默认情况下,它将安装最新的可用版本.
2.2 Step 1: 基于GitHub 仓库创建网站项目
关闭并重新启动 Rstudio.
前面只是在 GitHub 上创建了远程存储库.为了在我们的计算机上制作一个可以实际工作的本地副本,我们将把这个存储库克隆到一个新的 RStudio 项目中.这将允许我们在两个地点之间进行同步: 您的远程 GitHub和您的本地文件夹.
打开 RStudio 创建一个新的项目,在那里将存储您的网站文件
- File
-> New Project
-> Version Control
-> Git
把前面复制的存储仓库的URL粘贴到 Repository URL方框内,意味着告诉 RStudio 在GitHub上的哪个仓库位置创建这个新项目, Project directory name应该自动就生成了,再选择一个合适的文件夹存放,最后点击Create Project
完成项目创建.
至此,远程 github 上的储存库与本地网站项目建立对应.
2.3 Step 2: 基于blogdown创建网站框架
打开 Rstudio,在 R 的终端窗口命令提示符”>“下输入:
> library(blogdown)
> new_site(theme = "yihui/hugo-xmin")
或
> blogdown::new_site(theme = "yihui/hugo-xmin")
你会看到类似的运行输出
至此,基于谢益辉给出的hugo 主题 模版hugo-xmin的网站框架初步建成了,请仔细阅读这些输出内容后,让我们输入y
来启动服务并预览所建网站.
应该有一点小激动了?现在,在 RStudio的 Viewer 标签窗口就看到了由 hugo-xmin 定制的网站页面了.
点击Viewer 标签下的图标”Show in new window”即可跳转到普通浏览器窗口中预览.
至此,我们建立的网站可以随时本地渲染和刷新了.方法是在终端命令行窗口输入
> blogdown:::serve_site()
或点击Addins
在其下拉菜单
点击Serve Site.
注意可能会提示安装若干 R包例如 shiny、miniUI 等,点击 yes 安装就行了.如果网页中的数学公式不能正常显示,请安装 R 的扩展包xaringan
,以保证网页的 mathjax.js 正常渲染.
> install.packages("xaringan")
关于 Hugo 主题
Hugo 是一个静态网站生成器,最简单的方法是利用事先构建好的主题,主题控制着页面的整体外观和功能,前面我们就是使用了 hugo-xmin 主题. 值得庆幸的是,我们可以不劳而获地免费使用大量的hugo theme.
理论上,选择喜欢的主题后,需要弄清楚这个主题的Github用户名和储存库的名字,然后通过命令 进行安装,或者在创建博客的时候给new_site()传递theme参数.
点击一个主题进去后,在其网页地址栏找到其Github用户名和储存库的名,下载安装到本地,例如
> blogdown::install_theme("luizdepra/hugo-coder")
之后,在创建一个新站点时,通过传递主题参数使用该主题
> blogdown::new_site("luizdepra/hugo-coder")
但是,过于复杂的hugo主题,在部署的时候可能出现问题,功能冗余也导致维护困难.总之,除非必要,慎用复杂主题,够用就好.通常要围绕设定好的网站建设的目的和目标,进行网站风格、功能选择合适的主题!
对于搭建个人网站,曾经有一句经典的忠告:
永远不要使用复杂的模板,否则总有一天会掉入网站迁移漩涡,甚至万劫不复的境地。
—nobody
Keep it simple, but not simpler!
2.4 Step 3: 个性化修改主题模版
利用已有主题模版初步建立了网站,但通常需要对主题模版进行个性化改造和定制.
主题模版信息分布在网站文件夹中的相关文件中,找到并修改.需要注意的是
- 你要清楚为什么要改动,以及正确的做法
- 要做好备份,一旦修改后渲染有问题,要确保能够回溯
2.5 Step 4: 上传本地内容到 GitHub仓库
在本地,把网站主题模版调整好,并确保本地渲染无误后,就需要把其上传到 GitHub 上,做好用 netlify 自动化部署你的网站的准备.
首次上传之前,要确保以下工作的完成:
1.为避免不必要的文件或目录上传到 GitHub 仓库,要设置 .gitignore文件,方法是打开 Rstudio找到的Files标签,点击项目所在文件夹中.gitignore文件,例如改成下面这样
.Rproj.user
.Rhistory
.RData
.Ruserdata
/public/
/static/figures/
2.在上传之前,blogdown 的检查功能可以帮助你诊断和防止你的网站出现构建问题.检查将帮助您识别已知的问题,并提供确信无疑的建议,以指导您成功.共有 5 各检查命令:
blogdown::check_config()
: 检查配置文件(config.yaml 或 config.tomlblogdown::check_gitignore()
:检查 Git 时是否不正确地忽略了必要的文件blogdown::check_hugo()
: 检查hugo安装和版本可能出现的问题blogdown::check_netlify()
:检查一些重要的 Netlify 配置netlify.tomlblogdown::check_content()
:检查内容文件中可能存在的问题.比如 YAML元数据的有效性,一些带有未来日期和草稿的帖子,或者 Rmarkdown 未渲染的文章 等
一般而言,config.yaml或config.toml、.gitignore 、netlify.toml的内容,只需在建站之初设置.原则上,上传文件或目录,以及框架下页面内容没有变化,可不必修改和理会.
而每次新建或修改了内容,往往最好要检查其内容是否存在问题,也即进行check_content()
检查.
最后指出命令
blogdown::check_site()
将同时运行以上所有 check_*()命令.
NOTICE!
这项检查很重要,是成功上传到 GitHub 和用 Netlify 部署的关键!
3.最后,使用
blogdown::server_site()
查看网站本地渲染是否成功.
做好上述准备工作之后,可以进行上传 GitHub 仓库的工作了,方法是:
- 在Rstudio点击
git
标签,手动勾选(Staged
)要上传的文件,点击commit
按钮 会弹出一个窗口,填写好commit message
点击commit
按钮 - 待commit结束后,点击这个窗口右上角的
push
按钮,将本地文件上传到Github.
2.6 Step 5: 使用 Netlify部署网站
就要大功告成了.部署网站有很多种方式,比如Netlify、Github、GitLab等,这里使用Netlify进行部署.
- 注册 netlify
打开其注册页面,点击右上角Sign up
,然后直接在 Sign up with one of the following:
下面选择 GitHub
,即用GitHub
注册.
以后,就可以直接用选GitHub 进行登录.
- 绑定 GitHub
- 登录进 netlify 后,点击导航栏
Sites
,再点击右上角New site from Git
- 再点击下面的
Github
3. 再选择 GitHub 上的网站仓库
4. 等待片刻后,出现
5. 点击options
-> Edit site name
,设置网站的二级域名
最终就是这个样子了
打开一个浏览器,输入 http://hbsun.netlify.app.
Oh, amazing!
2.7 Step 6: 配置你的网站
接下来,可以使用 css、js 等进一步完善你的网站: 增加功能,雕刻风格……
关于修改主题模版忠告:
—— Somebody
Done!
Doone!!
Dooone!!!
….
2.8 Step7:开始工作
首先准备一杯咖啡……,然后,优雅地打开 Rstudio 进入你的网站项目……
- 新建内容
在Addins
下拉菜单中,点击New Post
,弹出
其中,Filename
处会自动帮你填写为Title处的内容,Filename
和Slug
还是建议使用字母,尤其是Filename,如果文中不需要用到 R 语言的代码计算结果生成图表的话,Format
处就选择Markdown格式,这可以省去一些系统生成的步骤.点击Done
就会在/content/post文件夹下面生成一个文件名类似为2000-01-01-my-first-blog.Rmd这样的文件了,content 文件夹下面的文件就是所有你的所有文章了,这个时候就可以在弹出的编辑窗口中输入内容了,保存后在本地 Viewer 中即可看到刚刚新建的文件及其变化.
- 修改内容
也可能今天没有新的东西要写,而是要对昨天上传到网站的某个内容进行修改、补充完善.
点击Files
标签,会显示你的本地网站项目文件夹中的所有文件,找到你准备修改的文件单击打开,完事后保存即可.
请注意,这些工作都是在本地完成.
- 更新网站
把写好或修改好的文章 update 到线上.
点击Git
标签,点击commit
会弹出一个窗口(如下图所示),填写好 commit message
点击commit
按钮,再点击这个窗口右上角的push
按钮,这样就可以把本地内容更新线上.
稍等片刻,打开你的个人主页http://hbsun.netlify.app,就可以看到网站已经更新.
2.9 重要补充说明
折腾了半天,其实,这个补充说明来的太晚了,但是,早有早的好处,晚有晚的道理!
前面讨论的是在 Rstudio 中,基于 git 在 netlify自动化部署网站的技术和流程.如果你对 git 和 github ,亦或对 netlify 设置不熟悉,或在Rstudio 中使用 git 遇到问题,无法实现前述git(commit,push)-github(repository)-netlify
的网站自动化部署流程,我们可以略去 git 和 github 这一环节,在 Rstudio 中创建或更新网站内容后,在 netlify 中手动、快速部署你的网站.
具体流程如下:
1.基于 blogdown 创建、更新网站
2.运行
blogdown::check_site()
和
blogdown::server_site()
确保网站没有需要完善的地方,以及本地渲染、预览成功后,使用命令
blogdown::build_site()
命令,你应该看到在第一次运行该命令前一直空着的项目根目录下的目录public
生成了一系列文件,请注意切勿编辑此目录中的文件.
3.手动拖拽public
目录到 https://app.netlify.com/drop 指定区域,稍等片刻后,它会分配一个随机子域的形式 random-word-12345.netlify.app,这就是你的网址,网站已经部署完毕,在浏览器打开,就可以看到你的网站了!
4.用前述办法,登录已经注册过的 netlify,把随机二级子域名改为你想要的,比如https://hbsun.netlify.app.
5.同样从您的帐户,您可以通过在本地进行更改来更新您现有的网站,然后 blogdown::build_site()
重建你的网站,在 Netlify 的“部署”选项卡,找到特殊的区域,在其中拖进您更新 过的public
文件夹,片刻后,即可更新已部署的网站。
OK,it is too……let’s breaking…….