用hexo在github/gitee上建博客

原因

自己在VPS上也可以弄,这个博客上有设置方法,还能够自动更新HTTPS证书。可自行查找。

但作为一个记录、分享型的博客,没必要用后端数据库,直接静态页面就行。

而静态页面最好就是用Markdown写作了。

那自然想到Hexo,但Hexo如果放在VPS上,还需要配置nginx或者hexo-admin插件,才能像常规CMS一样更新内容。总感觉有些不方便。

于是就有了这次的折腾。

结果

折腾完之后,工作流是这样的:

  1. 本地hex new \[文章名字\]
  2. 本地 vscode,编写markdown
  3. 写完之后,hexo g && hexo d 自动上传到gitee和github。是的,两个同时传。
  4. gitee无法绑定个人域名,github可以。所以两个都传。都免费的,不用白不用,万一其中一个不能用了,另一个顶上。

配置

系统

wsl2 ubuntu

vs code

插件如下:

  • Markdown Preview Enhanced
  • Paste Image

其中Paste Image配置好下:

hexo

需要安装的插件

  • hexo-generate-searchdb
  • hexo-deployer-git
  • hexo-excerpt
  • next 主题

github 与 gitee

  1. 申请账号

  2. 新建repo

    • github上用username.github.io
    • gitee上用username
  3. 生成密钥,并把同一个公钥都添加到github和gitee

  4. github上设置github page, 绑定个人域名,在theme/next/source下,新建CNAME文件,内容为你的域名

  5. 在域名服务商那里设置dns解析

    1
    2
    3
    4
    5
    6
    7
    8
    record  host    target

    A @ 185.199.108.153
    A @ 185.199.109.153
    A @ 185.199.110.153
    A @ 185.199.111.153
    CNAME www [your-username].github.io

  6. 设置hexo_config.yml

    1
    2
    3
    4
    5
    6
    7
    8
    deploy:
    - type: 'git'
    repo: 'git@gitee.com:m0nst3r/m0nst3r.git'
    branch: 'master'
    - type: 'git'
    repo: 'git@github.com:mr-m0nst3r/mr-m0nst3r.github.io.git'
    branch: 'master'

  7. 先安装依赖

    1
    2
    3
    4
    5
    6
    7
    python3 -m pip install pyvirtualdisplay
    python3 -m pip install selenium
    sudo apt-get install xvfb
    wget https://chromedriver.storage.googleapis.com/80.0.3987.106/chromedriver_linux64.zip
    unzip chromedriver_linux64.zip
    sudo mv chromedriver /usr/bin/
    sudo apt install libnss3 libnss3-dev libnss3-tools chromium-browser
  8. gitee上的页面不是push上去就会更新,需要登陆点一下,于是借用了这个脚本.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
from pyvirtualdisplay import Display
from selenium.webdriver.common.alert import Alert

display = Display(visible=0, size=(800, 600))
display.start()

# 模拟浏览器打开到gitee登录界面
driver = webdriver.Chrome()
driver.get('https://gitee.com/login')
# 将窗口最大化
driver.maximize_window()
time.sleep(2)

# 输入账号--通过html的id属性定位输入位置--改为你的账号
user_login = driver.find_element_by_id('user_login')
user_login.send_keys("改为你的账号")
# 输入密码--通过html的id属性定位输入位置--改为你的密码
driver.find_element_by_id('user_password').send_keys("改为你的密码")
# 点击登录按钮--通过xpath确定点击位置
driver.find_element_by_xpath(
'/html/body/div[2]/div[2]/div/div[1]/div[2]/div/form[1]/div[2]/div/div/div[4]/input').click()

time.sleep(2)

# 切换到gitee pages界面--改为you_gitee_id
driver.get('https://gitee.com/改为you_gitee_id/改为you_gitee_id/pages')
# 点击更新按钮--通过xpath确定点击位置
# /html/body/div[3]/div[2]/div/div[2]/div[1]/form/div[7]
driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/div[2]/div[1]/form/div[7]').click()
# 确认更新提示框--这个函数的作用是确认提示框
Alert(driver).accept()

# 等待5秒更新
time.sleep(5)

# 这个print其实没事什么用,如果真的要测试脚本是否运行成功,可以用try来抛出异常
print("成功")

# 脚本运行成功,退出浏览器
driver.quit()

# 写上更新日志
# 我这里是写在D盘,可以改为自己喜欢的目录
fp = open("D:\sites\log.txt", "a+")
now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
fp.write("auto update time:{0}\n".format(now_time))
fp.close()

最后优化一下:

1
2
chmod +x gitee-update.py
sudo ln -s /mnt/d/sites/gitee-update.py /usr/bin/update-gitee

以后更新完之后,执行update-gitee就ok了!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
michael@DESKTOP-HE0BL7H:/mnt/d/sites/m0nst3r.me$ hexo g && hexo d
INFO Start processing
INFO Files loaded in 995 ms
INFO Generated: blaa/用hexo在github-gitee上建博客.html
INFO Generated: index.html
INFO Generated: search.xml
INFO 3 files generated in 1.18 s
INFO Deploying: git
INFO Clearing .deploy_git folder...
INFO Copying files from public folder...
INFO Copying files from extend dirs...
[master b0ccc14] Site updated: 2020-04-07 23:50:20
3 files changed, 17 insertions(+), 7 deletions(-)
Counting objects: 6, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 2.73 KiB | 62.00 KiB/s, done.
Total 6 (delta 5), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-3.8]
To gitee.com:m0nst3r/m0nst3r.git
030129a..b0ccc14 HEAD -> master
Branch 'master' set up to track remote branch 'master' from 'git@gitee.com:m0nst3r/m0nst3r.git'.
INFO Deploy done: git
INFO Deploying: git
INFO Clearing .deploy_git folder...
INFO Copying files from public folder...
INFO Copying files from extend dirs...
On branch master
nothing to commit, working tree clean
Counting objects: 6, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 2.73 KiB | 60.00 KiB/s, done.
Total 6 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
To github.com:mr-m0nst3r/mr-m0nst3r.github.io.git
030129a..b0ccc14 HEAD -> master
Branch 'master' set up to track remote branch 'master' from 'git@github.com:mr-m0nst3r/mr-m0nst3r.github.io.git'.
INFO Deploy done: git
michael@DESKTOP-HE0BL7H:/mnt/d/sites$ update-gitee
成功
michael@DESKTOP-HE0BL7H:/mnt/d/sites$

流程完美!打完收工