记录HUGO博客迁移到七牛云对象储存服务的过程
缘起
- “潘天拍的博客”是学习docker搭建wordpress系统的无心之举。在阿里云上的wordpress运行2个月之后,老潘手残把mysql的容器弄没了,2个月积累的文章也丢了。为了坚持写作锻炼和输出分享,向偶像阮一峰老师学习,老潘还是决心把博客继续维持下去。与此同时吸取教训,要做好文章的保存备份工作。因此转向使用Hugo搭建博客网站。选择Hugo的原因是他是静态网站系统,写好的文章是一个一个独立的文档,便于保存在自己的文件系统中,以及对Golang技术栈有好感。
- 要保持个人网站长久运行,必须考虑性价比。使用阿里云来运行简单的静态网页博客肯定是极大的浪费。经过调查我把目光投向了对象储存服务。简单学习了下对象储存服务,其实就是第三方储存一些无需复杂逻辑处理,只需要读取和保存的图像、文档、数据文件,达到提高服务速度,降低储存成本的目的。对象储存服务因为提供相对简单的储存服务,因此价格很便宜,甚至一定额度的服务都是免费的,极具经济性。七牛云的对象储存支持绑定域名和默认index.html为访问域名的首页,这样就可以达到在对象储存服务上搭建一个静态页面网站的目的。于是老潘申请了七牛云的对象储存服务,绑定了域名,经过简单上传文件测试,验证了确实可以实现运行hugo生成的博客。
实现效果
- 经过简单实验可行性以后,我计划达到以下效果。
- 使用LOGSEQ撰写博客文章。这样博文自然保存在本地,同时我用坚果云同步到网盘。
- 撰写python脚本完成使用命令行将博文从Logseq文件夹转移到hugo对应的文件夹,然后完成网站发布文件生成,并自动上传到七牛云对象储存服务器。
条件准备
- 要实现自动处理Logseq撰写博文并一键上传七牛云,要有以下前提。
博文撰写
- 博文撰写必须添加hugo文章的meta信息。例如本文的meta信息如下,添加到文章最开头,正式发布是不可见的。特别一提的是,为使得脚本能够识别指定文章上传,要加入特定信息。
1 - +++
2 - date="2022-05-07"
3 - title="记录HUGO博客迁移到七牛云对象储存服务的过程"
4 - author="潘天拍"
5 - short_name="20220507_hugo" #添加信息,使用脚本时输入此参数,让程序上传logseq中的指定文章
6 - tags=["技术经验","建站运营"]
7 - thumbnail="images/post_index_thumbnail/20220507_hugo.jpg"
8 - +++
Python脚本开发
- 脚本要实现以下功能模块
-
找到指定short_name的文章并转移到hugo的content文件夹,本博客的项目文件夹由如下两个文件夹组成。因此脚本和hugo项目的相对位置是固定的。
- hugo_store:放置hugo执行环境
- scripts:放置Python代码
-
转移过程中同步对logseq产生的文章做一点小处理,删除每行前多余的bullet标记
-
执行hugo构建脚本,构建发布文件夹
-
直接删除当前七牛云上的所有博客文件
-
上传当前最新hugo的发布文件到七牛云
-
七牛云服务器
- 打开默认首页设置,完成已备案域名的绑定
- 学习相关python SDK的用法
- 获得脚本链接七牛云的秘钥
执行测试
- 脚本完成指定logseq文件的转移到hugo
1 python main.py -p 20220507_hugo
- 脚本完成hugo构建和更新七牛云
1 python main.py -all
- 以下展示main.py的代码
1 from asyncio import subprocess
2 from content_mp import *
3 from qiniu_op import *
4 import argparse
5
6 parser = argparse.ArgumentParser(description='参数读取')
7 parser.add_argument('-p',type=str,help='输入目标文章的short_name或者完整标题')
8 parser.add_argument('-all',action='store_false',help='生成网站最新内容,并上传七牛')
9 parser.add_argument('-m',type=str,help='最小更新模式,只上传有更新的目标文章')
10 args = parser.parse_args()
11
12 if args.p is not None:
13 new_md,md_name = modify_md_style(args.p)
14 if new_md:
15 copy_modified_md_to_hugo(new_md,md_name)
16 if args.all is False:
17 from subprocess import run
18 import time
19 blog_dir = '../hugo_store'
20 os.chdir(blog_dir)
21 run('hugo')
22 time.sleep(3)
23 bactch_delete()
24 public_dir = '%s/public/' % blog_dir
25 batch_upload(public_dir)
26 if args.m is not None:
27 new_md,md_name = modify_md_style(args.m)
28 if new_md:
29 copy_modified_md_to_hugo(new_md,md_name)
30 from subprocess import run
31 blog_dir = '../hugo_store'
32 os.chdir(blog_dir)
33 run('hugo')
34 upload_modified_to_qiniu(md_name)
当前效果
博文撰写
- 我的Logseq已经在手机,linux笔记,win10的台式机安装,并且已经实现通过坚果云进行文件同步。这样我可以在任何时候用Markdown撰写博文,同时可以自由切换设备。手机的同步实现稍微麻烦点,参见我的博文。
内容发布
- 在台式机或者笔记本上完成文章发布。当前更新一次网站全部页面,整体应该不超过20秒。当前网站文章不多,这个速度我很满意。如果更新一篇文章内容,则只更新指定的网页,则速度更快。
网站访问速度和费用
- 部署在七牛云的hugo静态网站访问还是非常快的,都是秒开状态。国内的访问速度,比使用git page方案免费部署,肯定会快很多。七牛云有10G的免费储存,就个人博客而言估计永远用不完。后期可能会在流量和请求费用上产生一些费用,但目前都是在免费额度内。按照现在访问度我估计至少1年多我这个博客都用不着在服务器上付钱😇。
后期计划
- 目前只实现了文本的自动处理,图片的自动处理等待后续再开发。
- Logseq生成文章的格式处理还有些问题,换行和无序列表貌似实现还不完美。
- 希望实现文章内自动tag连接,也就是自动给markdown中符合网站tag的内容加上超链。
- 实现增加博文的最小更新,目前更新博文是把服务器上得所有文件删除了,再上传所有文件。这肯定不是最优方式,后面要研究下哪些文件可以不用动的,实现最小更新,节省时间和服务器资源。