写在前面,搬迁记录

记录我的博客这次搬家过程。我的博客之前经历过:

  1. wordpress
  2. github page
  3. Bitcron - 机制很不错(写完的博客自动保存到dropbox并发布,可惜搜索引擎的收录不是很好。)
  4. 这次搬迁 2020年4月10日 初步完成

博客的架构

现在写博客一直采用 markdown 语法,所以也是本次可以顺利迁移的一大前提。 最近两年一直用的是 Bitcron ,非常顺滑。每次写完 md 文件,直接保存即可(博客立即更新可见)。不过一直搜索引擎的收录不是很好,如我直接搜索 "Bob Jiang" 我的博客始终排不到第一个。很奇怪......

索性现在申请了一年免费的 google cloud,就做个搬迁。

搬迁之后的博客存储在 google cloud storage 上,DNS也顺便切换到 Cloudfare 上了。 博客系统使用的是 hugo ,主题用的是 Ezhil。博客整体存放于 github上,每次提交到github会自动出发一次 github action,推送到谷歌存储。

博客的工作流

博客的工作机制如下:

  1. 本次编写博客(md文件) 并本次检查 (hugo server)
  2. github push 到 github 仓库
  3. 每次 push 或者 pull request 会出发 github action
  4. github action 进行 hugo 编译
  5. github action 推送博客静态文件到 谷歌存储

博客的配置 (手把手教你配置)

第一步,配置hugo

安装 hugo 可以参考我朋友的博客,免费搭建一个静态博客。搭建完成后,关于主题,这里我采用的 hugo 主题是 Ezhil,可以直接用 github fork一份 hugo 主题。具体操作参考 Ezhil

hugo和主题都准备好后,目录结构如下:

  • content/ 博客的源文件,markdown格式
  • public/ 博客的静态网页,hugo自动生成(根据你选择的模板生成漂亮的静态网页)
  • static/ 博客的全局静态资源,如全局使用的图片
  • theme/ 博客的主题
  • config.toml 博客的配置文件

第二步,新建github仓库

github上需要创建一个新的仓库 (假设你已经有了github账号)。然后把本地的博客目录中,除了 public/ 目录的内容推送到代码仓库中。

  1. 访问 github,登录(注册)账号
  2. 新建一个仓库,如下图,点击 New Repository

  1. 填写仓库的名字,选择仓库的可见性(默认公开的、可以选择私有的),勾选初始化时创建 README 文件,如下图:

下一步需要创建并配置 谷歌存储 - Google Cloud Storage,然后再回来配置 github secrets

第三步,google cloud storage

这里我用的谷歌存储,也可以选择国内的阿里云,腾讯云的OSS服务。

谷歌存储 - Google Cloud Storage,需要创建一个存储。 访问 Console 如下图

3.1 创建存储(bucket)

创建存储,注意:名字必-须是 www.yourdomain.com 不能设置为根域名(即这里需要是 CNAME 的名字设置bucket名字)。 根域名可以通过 DNS 的设置来实现。

注意存储分区(bucket)名字必须是 CNAME 域名的名字(必须是完全一致),如我的分区名字是 www.bobjiang.com。存储分区不支持直接改名,可以先创建新名字的存储分区,然后把数据转移过去来实现。

访问权限,可以修改为"统一"方式,这样可以简单操作。

3.2 增加访问权限

下面是为新建的存储分区(bucket)增加访问权限,点击"修改存储分区权限"点击"添加成员"输入 新成员:allUsers, 角色:Storage Object Viewer (要严格检查这里的角色权限)

最后可以检查一下权限的设置,这里应该提示如下:"在互联网上公开"

3.3 权限设置

这里主要设置 服务账号 (service account),为了给其他的第三方进行服务(如接下来我们用 github action 连接)授权。

  1. 进入服务账号页面,选择"IAM和管理",点击"服务账号",如图

  1. 点击"创建服务账号"

  1. 输入"服务账号名称","服务账号ID",和"服务账号说明"

  1. 第二步默认值即可,进入第三步如下图,点击"创建密钥"

  1. 选择密钥类型 JSON

  1. 密钥生成后,保存到本地(一定保存好密钥,不要丢失)。使用这个密钥和服务账号,就可以访问你的谷歌云存储。

  1. 记住服务账号的邮箱,如下图:

下一步配置 github secrets

第四步,github secrets

如图创建如下的两个 github secrets:

  1. GCP_SA_EMAIL - 值可以参考 服务账号的创建小节
  2. GCP_SA_KEY - 值为下面命令的结果(用本地的 JSON 密钥生成,命令如下)

cat your-json-key.json | base64

第五步,github action

Github action的作用是:

  1. 有代码push 或者pull request到仓库时,自动出发下列动作
  2. 准备一个 ubuntu 编译环境
  3. 准备 hugo 环境
  4. 进行 hugo 编译
  5. 编译后的 public 目录 (静态网页) 上传到 谷歌存储 - Google Cloud Storage

新建 github action ,并点击 "set up workflow yourself"

我的 github action 代码如下:

# github action的名字,可以随意改
name: build hugo and deploy to google cloud platform (storage) # 什么时候调用 action,这里是当 master 上有代码 push 或者 pull request 会触发 github action
on:
push:
branches: [ master ]
pull_request:
branches: [ master ] # 环境变量的设置,下面会用到
env:
GCP_SA_EMAIL: ${{ secrets.GCP_SA_EMAIL }}
GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
GCP_BUCKET: www.bobjiang.com # 任务的准备,用 ubuntu最新的环境
jobs:
setup-deploy:
name: Setup and Deploy
runs-on: ubuntu-latest
steps: # 检出master分支的代码 checkout
- name: Checkout
uses: actions/checkout@v2 # 准备hugo环境
# hugo ready & build
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.62.2'
# extended: true # hugo 编译生成静态网页 public目录内的内容
- run: hugo --minify # deploy to google storage
# 准备 连接到 google 云
- uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
with:
version: '285.0.0'
project_id: ${{ secrets.GCP_PROJECT_ID }}
service_account_email: ${{ secrets.GCP_SA_EMAIL }}
service_account_key: ${{ secrets.GCP_SA_KEY }}
export_default_credentials: true
# 检查 google 云的连接结果
- run: gcloud info
# 用 gsutil 推送 public 目录内容到谷歌云存储
- run: gsutil -m rsync -d -c -r public gs://$GCP_BUCKET
- run: gsutil -m setmeta -h "Cache-Control:public, max-age=3600" gs://$GCP_BUCKET/**/*.html
- run: gsutil -m setmeta -h "Cache-Control:public, max-age=31536000" gs://$GCP_BUCKET/js/*.js
- run: gsutil -m setmeta -h "Cache-Control:public, max-age=31536000" gs://$GCP_BUCKET/css/*.css

总结

经过本次梳理后,写博客完全是本地操作且可以本地调试。 写博客在 hugo 项目的 content 目录内写 markdown 文件 调试可以用 hugo server 本地访问 http://localhost:1313/

效果满意后,可以把 content 目录内的改动 推送到 github 仓库 后面就是自动化准备环境编译、部署(github action)到谷歌云存储。

所以作为一个业余写手,需要更加关注的是内容产出。

自动化啦......

本文首发于 Bob Jiang的博客 ,转载请联系 Bob Jiang

博客搬家 - 记第四次搬家(hugo建站推送到谷歌云存储)的更多相关文章

  1. 学习篇:TypeCodes的2015年博客升级记

    原文: https://typecodes.com/mix/2015updateblog.html 2015年博客升级记 作者:vfhky | 时间:2015-05-23 17:25 | 分类:mix ...

  2. 基于django的个人博客网站建立(四)

    基于django的个人博客网站建立(四) 前言 网站效果可点击这里访问 今天主要添加了留言与评论在后台的管理和主页文章的分页显示,文章类别的具体展示以及之前预留链接的补充 主要内容 其实今天的内容和前 ...

  3. hugo建站 | 我的第一个博客网站

    前言 博客地址 - https://billie52707.cn 1. 建博客的初衷? 2020那一年,八月的第一天,我还是像往常一样打开我的域名网站,本以为还是会像以前一样显示每日一图的界面,结果出 ...

  4. OO第四次博客作业(第四单元作业及期末总结)

    (注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1  我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...

  5. 从OneNote走出,技术博客养成记

    2010年9月北上求学,在一所普通本科院校学习计算机专业,年少轻狂未能领悟计算机技术的本质渐生弃学之意. 2013年9月南下参军,在一个电抗部队从事通信指控专业,填补了扛枪演练的男儿情怀却又无法抵制对 ...

  6. 【软件工程1916|W(福州大学)_助教博客】团队第四次作业(第7次)成绩公示

    1. 作业链接: https://edu.cnblogs.com/campus/fzu/SoftwareEngineering1916W/homework/2874 2. 评分准则: 本次作业评分分为 ...

  7. Vue实战狗尾草博客管理平台第四章

    本章主要内容如下: 填补上期的坑. iconfont仓库的关联,引入. 开发登录页面 填坑 上期中我们功能都已正常使用.但不知道有没有小伙伴测试过error页面,当访问地址不存在时,路由是否能正常挑战 ...

  8. JAVA多线程(四) Executor并发框架向RabbitMQ推送消息

    github代码地址: https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service ...

  9. css扁平化博客学习总结(四)content代码实现

    1.根据功能,把不同的部分写出来,方便扩展 <div class="content"><!-- 内容开始 --> <section class=&qu ...

随机推荐

  1. poj——1182食物链 并查集(提升版)

    因为是中文题,题意就不说了,直接说思路: 我们不知道给的说法中的动物属于A B C哪一类,所以我们可以用不同区间的数字表示这几类动物,这并不影响结果,我们可以用并查集把属于一类的动物放在一块,举个例子 ...

  2. WeChat-SmallProgram:引用页面调用组件内的方法

    如何创建组件 及 使用 这里不在多说:请参考之前文章 如何定义一个组件 自定义select下拉选项框组件使用 引用组件: <sub-unit-select id="init" ...

  3. 万物互联—MQTT协议

    一.简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),最早是1999年由IBM开发的基于发布/订阅范式的消息协议,是一种极其简单和轻量级的消息 ...

  4. H - Bone Collector

    H - Bone Collector Many years ago , in Teddy's hometown there was a man who was called "Bone Co ...

  5. Redis新手的坑,无法连接、缺少类、没有密码

    阿西吧,自己太菜了,用SpringBoot调用Redis缓存的时候,出了各种问题,记录一下,大家别学我 本文有自己的经验,也有从其他博客整理来的零零散散的经验. 1.安装Redis 安装redis,一 ...

  6. VM虚拟机复制文件问题

    需要安装好vmtools,安装好后,启动虚拟机环境: 把需要复制的文件拖进虚拟机环境窗口,鼠标指针会变成复制图标,直接左键即可复制: 不能Ctrl+c-Ctrl+v进去.

  7. 三通道低功耗ASK低频唤醒接收器PAN3501完全替代AS3933/GC3933

    低频唤醒接收器PAN3501软硬件兼容AS3933/GC3933,且新增了寄存器功能,可直接替换,供应稳定,高性价比. 产品介绍:    PAN3501是一款最多三个通道接收的低功耗ASK接收机,可用 ...

  8. 路由与交换,cisco路由器配置,浮动静态路由

    设置浮动静态路由的目的就是为了防止因为一条线路故障而引起网络故障.言外之意就是说浮动静态路由实际上是主干路由的备份.例如下图: 假如我们设路由器之间的串口(seria)为浮动静态路由(管理距离为100 ...

  9. Linux服务器架设篇,Windows中的虚拟机linux上不了外网怎么办?

    1.将电脑的网线口直连路由器内网接口(确保该路由器可以直接正常上网,切记不可以使用宽带连接和无线网连接). 2.在实体机电脑可以上网的前提下,在命令框窗口输入 ipconfig 3.记录下电脑以太网的 ...

  10. javascript入门 之 zTree(十四 增删查改)(二)

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...