0%

树莓派平台自建博客(二)——博客上传&域名绑定

搭建完树莓派的环境之后接下来就是需要将blog上传到Github Page进行发布

令人Angry的 Github Pages

​ 创建一个目录用来放博客的文件,名字任意

1
2
sudo mkdir blog
cd blog

​ 进入blog目录之后,初始化hexo:

1
sudo hexo init
image-20210111154531312

​ 煲汤…

​ 启动hexo:

1
sudo hexo s
image-20210111155319327

Ctrl + C 退出,安装 deployer

1
sudo cnpm install --save hexo-deployer-git
image-20210111163300563

​ 启动博客: sudo hexo s

image-20210111164141255

​ 上传博客: sudo hexo d

image-20210111164422107 image-20210111164454185

​ 我以为是我的GitHub第一邮箱设置的是Gmail导致了auto detect失败,将第一邮箱设置成163之后也还是失败了…

​ 于是当前的问题就变成了我输入 git config -l 能够正确显示我的name和email,但当我试图push的时候git却说不能识别我的身份…

1
2
3
4
5
6
7
8
9
10
11
12
13
*** Please tell me who you are.

Run

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@raspberrypi.(none)')
error: src refspec HEAD does not match any.
error: 无法推送一些引用到 'https://github.com/dzy404/dzy404.github.io'

​ easy,easy…(我一开始以为这只是个小问题,没想到这个报错提示一直伴随着我接下来的22小时)

​ 这种问题只可能有两个可能:1.我对git不够了解,需要重新复习一下 git 的目录结构以及配置;2.GitHub那边可能有问题。

​ 第一种我在大学里做项目时就已经遇到过,当时的我选择了绕开,现在的我还是一条懒狗,所以我先找第二种情况可能的解决方法。

​ 于是尝试了很多次比如 hexo-deployer 在 pi 目录、home 目录和 blog目录下重新安装或者是更改_config.yml之类的操作,最终都以失败告终。

​ 然后我决定暂时放弃去看网上的教程和博客,直奔 hexo-deployer 的 官方文档 去:[部署]-[Git]部分,最后的第四点提醒要在Github的库设置中也要设置成_config.yml配置中的分支名称。

image-20210113120314433

​ 打开GitHub官网,翻到库的 Settings

​ 果然,Github 更新了Github Page的用法,必须在库设置(Repository Settings)设置好Source和发布站点…

image-20210113141759658

​ 打开 Github Paga的官方文档 ,根据它的步骤一步步设置所有者和 Github Page的发布站点,如图:

image-20210113132556672 image-20210113132901512

​ 我以为我的 git 推送失败是因为这个没有设置,于是在设置结束之后我直奔终端,结果还是以失败告终…

​ 我排除了第二种情况的可能性,唯一的可能只有我对 git 的一知半解导致了一直在撞南墙

尝试一:利用 cache 将我的密码临时存储在内存里

​ 有可能是name和email的环境路径不对劲导致了deployer读不到信息;

​ 既然读不到我的git身份信息,那就利用 cache 将我的密码临时存储在内存里再进行操作,于是我打开 git 的官方文档

1
2
3
4
cd home/pi
git config credential.helper cache
cd blog
sudo hexo d

​ 失败…

尝试二:.git 和 .ssh 文件的位置

​ 我先是到 Pi 目录下(此时pi目录下只有一个 .git 目录)执行了 sudo hexo d

image-20210113143531819

​ 说明 hexo命令必须在 执行 hexo init 的目录下进行…Fine

​ 我将Pi目录下的 .git 目录打包送到了bolg目录下:

1
2
3
sudo mv ./.git ./blog
cd blog/.git
sudo nano config

​ 确认configure文件中是否有email和name的信息,如果没有,添加如下字段:

1
2
3
[user]
email=your email #你的GitHub邮箱
name=your name #你的Github名字

​ 这样的话,我的blog目录下就有.git文件,应当就能读取到我的信息

​ but…

image-20210113144236022

尝试三:将deployer推倒重来

​ 参考链接:【Hexo】deploy出错的解决方法

1
2
3
4
5
cd blog
git config --list
#一般会出现你的user.name和user.email,不出现也没关系
sudo rm -rf .deployer_git
sudo hexo d
image-20210113151136100

​ 还是失败…

尝试四:root 大法好

​ 事先说明,root大法我成功了,但来来回回的曲折比前三种方法可能还要更多一点,顺带着还学习了Linux的权限控制

​ Linux环境下hexo的 hexo d 在各个博主的博文里体现的似乎都很顺利,几乎没有博主在这一步被卡过…Linux方面找不到我想要的答案,我就去找了Windows下配置 hexo d 的步骤和问题。发现Windows下要进行commit必须要在 Git Bush 进行…

​ 于是我怀疑我的所有命令都是在 Pi@raspberry:这个用户下进行的,将信将疑地进入blog目录,然后输入 su git,输入我的Github密码,我的终端变了颜色

image-20210113152554039

​ 也就是说当前我的操作是在git用户下进行的,按理说我是输了GitHub密码进来的,当前的账户就是我的账户不可能会出现deployer不能识别我的情况,输入:

1
sudo hexo d

​ “权力越大,责任越大” ,整挺好;输入Github密码

image-20210113153008674

​ 提示我:Git不在 sudoers 文件中。此事将被报告

​ 那就放弃管理员权限直接开d

1
hexo d

​ 提示我 Error: EACCES: permission denied, unlink '/home/pi/blog/.deploy_git/index.html' .

image-20210113153354265

​ 死结就在这里,sudo的话git没权限,不 sudo 的话deployer 禁止非管理员启动.

​ 我对Linux的配置文件的原则是能不招惹就不招惹,配错了重装一切就得重头来过…

​ 第一个思路:将.deployer_git这个文件的权限拉满拉到 777

image-20210113153801944
1
2
3
4
cd blog
su root
#输入root密码
chmod 777 .deployer_git

​ 再次尝试,失败;

​ 第二个思路:硬着头皮去改 sudoers 这个文件

1
2
3
4
5
su root
#输入root密码
cd ..
cd ..
nano etc/sudoers
image-20210113154809149

注意:在这种情况下,git 这个用户已经拥有和root一样的权限,在这个用户下面进行操作一定要注意

Ctrl+X ,Y 退出

1
2
3
4
cd home/pi
su git
cd blog
sudo hexo d
image-20210113155440294

​ 没有权限的提示消失了,接下来就是在 git 用户下解决 email 探测问题

​ 在各个目录下面安装 git ,使用 sudo npm install git 在/home,/pi,/blog 下执行这个指令

1
2
3
4
5
cd home
sudo mkdir git
cd git
sudo touch .gitconfig
sudo nano .gitconfig

​ 加上自己的user.name 和user.email,见尝试二

1
2
3
4
5
su git 
cd home/pi/blog
sudo git config --global user.name "dzy404"
sudo git config --global user.email "dzy1056343052@163.com"
sudo hexo d
image-20210113160915169

​ 成功了…

原因总结

报错一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
*** Please tell me who you are.

Run

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@raspberrypi.(none)')
error: src refspec HEAD does not match any.
error: 无法推送一些引用到 'https://github.com/dzy404/dzy404.github.io'
FATAL { err:
{ Error: Spawn failed
at ChildProcess.task.on.code (/home/pi/blog/node_modules/hexo-deployer-gi t/node_modules/hexo-util/lib/spawn.js:51:21)
at ChildProcess.emit (events.js:182:13)
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12) code: 1 } } 'Something\'s wrong. Maybe you can find the solution here: %s' '\u0 01b[4mhttps://hexo.io/docs/troubleshooting.html\u001b[24m'

​ 这是最主要的问题,问题的关键在于检测不到我的github信息;

​ 在 pi 和 root用户下都尝试过 sudo git config --global xxxxxx 的操作但还是会出现;

​ 通过Windows配置时需要通过 Git Bush 进行操作发现有可能是账户的问题,就考虑切换 Git 用户进行 git config

​ 最后成功

报错二

1
EACCES: permission denied, unlink

​ 权限问题:不加sudo 进行hexo d就会出现报错

报错三

1
xxxx不在sudoers文件中。此时将被报告

​ 切换到root,在/etc/sudoers中加上当前用户的名字

报错四

​ 在每一次hexo d失败后重新尝试时,都可以将你blog目录下的.deployer_git整个目录删掉再进行尝试。然后终端输入

1
2
git config --global user.name "yourname"
git config --global user.email "youremail"

​ 或是直接打开.git/config文件,加上

1
2
3
[user]
email=your email
name=your name

报错五

1
ERROR Deployer not found: git

​ 再站点目录安装deployer插件,执行

1
2
sudo npm uninstall hexo-deployer-git --save
sudo npm install hexo-deployer-git --save

​ 事实上,在后续的尝试中发现,不需要Git用户进行 sudo hexo d 也可以成功,大致可以知道其实在第四次尝试之前,问题就应该解决了,只不过我没有先进行 root 权限下的push而是用了git用户;也有可能是在git下成功一次之后,hexo 就能够探测到我的 Email地址….相当玄学

域名绑定

​ 阿里云买一个适合自己的域名,看各人博客定位,我选择的是dzyblog.site;

​ 实名认证;

​ Github下设置打开仓库的 [Settings],拖到下方 [Custom domain] 添加自己的域名;

image-20210113170231119

​ 这个时候仓库的根目录下面就会出现CNAME的文件,打开之后是域名的名字,如果没有则手动添加;

​ 有了域名之后就需要解析;

​ 再更新主题之后会有 sudo hexo d 的操作,然后就可以发现浏览器输入独立域名页面Page显示404,但输入 xxxx.github.io 还是能够访问,非常的amazing

​ 我以为是我DNS解析出了问题,打开阿里云解析:

主机记录 记录类型 解析路线 记录值
@ A 默认 ip地址(ip地址的获得通过在终端Ping你的 用户名.github.io 获得)
www CNAME 默认 用户名.github.io
image-20210114093742330

​ 解析是没有问题的,检查目录结构,发现问题所在:

​ 树莓派本地并没有添加上述CNAME的文件,所以在进行一次提交之后,新版本就把原来的老版本里CNAME文件给删除了…

​ 需要在本地source文件里添加CNAME文件,再依次执行 hexo clean hexo g hexo s .

1
2
3
4
cd blog/source
sudo touch CNAME
sudo nano CNAME
#添加自己的域名
image-20210114094137705
1
2
3
sudo hexo clean
sudo hexo g
sudo hexo d

其他问题

  1. 中间做github推送时心态崩溃把整个blog的文件目录都删了准备重建,这时候在blog下执行 sudo hexo init发现报错:

    image-20210112101348945

    心态崩溃*2…加上sudo之后再次尝试:

    image-20210112101447248

    心态崩溃*3…Google了一圈怀疑可能是自己误删了pi根目录下面的一些隐藏文件导致把git也删了…于是重装git:

    image-20210112101622397

    不对劲,安装git要在pi的根目录下进行:cd ..,安装git

    image-20210112101718817

    提示缺少package.json文件,印象里确实把它删了,解决方法:将npm初始化

    1
    npm init

    安装git:

    1
    sudo npm install git
    image-20210112101927936

    重新搭框架:

    1
    2
    cd blog 
    sudo hexo init
    image-20210112102109683
  2. git连接不上了: Permission denied (publickey) 的解决方法(树莓派端)

    错误报告:Permission denied (publickey).

    前情提要:在RaspberryPi本地和Github端都已经设置好ssh公钥…但是当我试图push我的本地hexo时,发现没有成功于是就删掉了本地的.ssh文件,按照之前的github公钥方式再次尝试就不行了…

    解决方案:

    1. 先删除GitHub网页中的ssh公钥和树莓派本地/pi/.ssh/这个文件夹;

    2. 不再使用 ssh-keygen -t rsa -C "你的邮箱地址" 这个命令,使用全默认 ssh -keygen -t rsa ;

    3. cat ~/.ssh/id_rsa.pub ,将这段public key复制到Github的 New ssh 里;

    4. 回到shell,删掉原来的remote信息 git remote rm origin ;

    5. ssh -T git@github.com,Done. 出现Hi,xxxxx的提示就表示成功。

    image-20210112151849544
两种颜色的功德箱(逃