分享一下搭建个人博客的过程,包括一些细节的处理等等,希望会有帮助。
Hexo环境配置
我主要参考的文章是这个知乎专栏。前三篇是GitHub使用相关,四六篇若不希望改变域名则非必要(穷学生不打算买域名,也没找到免费的方法QAQ)。我是从第五篇开始的,按步骤安装node.js后,在某个文件夹内搭建Hexo环境即可。
接下来是第七篇,我设置的是keep主题,与专栏里的主题设置方法大同小异。最后便是第八篇了,只需要选取一些感兴趣的功能,单独看单独设置即可。Hexo博客的功能是插件式管理的,很方便,只需安装想要的插件,然后在主题配置文件或网站配置文件(_config.yml)内设置一下即可。使用hexo new post title即可创建新文章,写好后在网站根目录运行hexo g和hexo d指令即可完成网页的部署。若有对配置文件进行更改,则最好运行hexo clean之后再运行hexo g,hexo d命令。
数学公式配置
为了更新数学笔记,数学公式是必不可少的。一种方法是直接上传pdf(需要相关插件支持),但效果不是很好,因此我打算沿用我在知乎上传笔记的方法,先将LaTeX转成Markdown再处理。这一步利用pandoc实现,可参考我的文章。接下来还需要令网站能够渲染Markdown文件中的数学公式,可参考文章,需要先卸载初始渲染引擎xxx-marked,更换为xxx-kramed,然后要取消对部分符号的转义,最后在主题配置文件中开启mathjax,并在每篇文章中设置mathjax开关即可。
值得一提的是,和LaTeX一样,Markdown也是回车默认不换行,两次回车才换行的,但Hexo博客的默认设置不是这样。参考博客,浏览“后续”部分即可。
图床配置
笔记没有图片当然不行。一种方法是直接将图片放到博客环境的文件夹里,然后利用md文件上传图片的方法,直接将链接设置为图片(相对)位置即可。这种方法简单但是会占用仓库空间。另一种方法是利用图床,我采用的是SMMS,免费且API简洁易懂。这样将图片上传到图床上,令链接为图床生成的图片链接,就可以节省仓库空间了。使用sm.ms图床时,需要注册用户,在API token页面生成令牌。
为了让博客上传更加自动化,图床上传图片的过程当然要用程序实现,在此把我的python代码贴出来:
smms.py(参考GitHub)
import requests
import json
class SMMS(object):
# init
def __init__(self, username, password):
self.username = username
self.password = password
self.token = None
self.profile = None
self.history = None
self.upload_history = None
self.url = None
self.headers = None
# user
def get_api_token(self):
data = {
'username': self.username,
'password': self.password,
}
url = root+'token'
res = requests.post(url, data=data).json()
self.token = res['data']['token']
self.headers = {'Authorization': self.token}
# user
def get_user_profile(self):
url = root+'profile'
res = requests.post(url, headers=self.headers).json()
self.profile = res['data']
print(json.dumps(res, indent=4))
# image
def clear_temporary_history(self):
data = {
'format': 'json'
}
url = root+'clear'
res = requests.get(url, data=data).json()
print(json.dumps(res, indent=4))
# image
def view_temporary_history(self):
url = root+'history'
res = requests.get(url).json()
self.history = res['data']
print(json.dumps(res, indent=4))
# image
def delete_image(self, hash):
url = root+'delete/'+hash
res = requests.get(url).json()
print(json.dumps(res, indent=4))
# image
def view_upload_history(self):
url = root+'upload_history'
res = requests.get(url, headers=self.headers).json()
self.upload_history = res['data']
print(json.dumps(res, indent=4))
# image
def upload_image(self, path):
try:
files = {'smfile': open(path, 'rb')}
url = root+'upload'
res = requests.post(url, files=files, headers=self.headers).json()
if res['success']:
self.url = res['data']['url']
return self.url
else:
return res['images']
except Exception as e:
print(e)
return 'https://i.loli.net/'
root = 'https://sm.ms/api/v2/'
smms = SMMS('username', 'password')
smms.get_api_token()
def upload(picture):
return smms.upload_image(picture)
main.py(补充自我的文章)
import re
import smms
zhihu = open("zhihu.md", "r+", encoding="utf-8")
contents = zhihu.readlines()
for i in range(len(contents)):
if re.match(':::', contents[i]):
contents[i] = ""
j = i+1
while not re.match(':::', contents[j]):
contents[j] = re.sub(r'\n', ' ', contents[j])
j = j+1
contents[j] = "\n"
if re.match(r'!.*\([\w\d\s]*\.png\)', contents[i]):
print("Uploading pictures...")
ret = re.search(r'[\w\d\s]*\.png', contents[i])
path = ret.group()
contents[i] = re.sub(path, smms.upload(path), contents[i])
print("Done.")
while re.match(r'.*}}', contents[i]):
contents[i] = re.sub(r'}}', r'} }', contents[i])
while re.match(r'.*{{', contents[i]):
contents[i] = re.sub(r'{{', r'{ {', contents[i])
while re.match(r'.*{#.*}', contents[i]):
contents[i] = re.sub(r'{#.*}', r'', contents[i])
zhihu.seek(0)
zhihu.truncate()
zhihu.writelines(contents)
zhihu.close()
这样基本的配置就已经完成了,其它自动化的部分我单开一篇文章继续说明。
- 本文标题:Hexo博客搭建流程
- 本文作者:DreamAR
- 创建时间:2021-08-12 16:25:29
- 本文链接:https://dream0ar.github.io/2021/08/12/Hexo博客搭建流程/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!