为服务器创建Git账户发布Hexo博客内容

Hexo博客有一个避免不了的问题,就是如何更快更好地发布到网站上,因为Hexo是本地静态博客,发布到网站上就需要与服务器链接,常见的链接种类很多但是最常用的还是Git链接,毕竟安全有效,可问题如果使用Git链接发布,就需要给服务器创建Git用户并给与相关的权限。

今天这篇文章,主要是介绍如何给服务器创建Git账户,和利用宝塔面板创建hexo博客网站。

1.配置SSH

配置SSH密钥,实现免密登录(首次提交时仍需要验证密码),如之前配过可跳过此步。首先是使用本地的Git软件,桌面右键选择Git Bash Here

1
$ ssh-keygen -t rsa -C "邮箱地址"

设置好邮箱之后,就是连续敲回车确定,然后看到提示秘钥以保存在本地的xxx/用户/xxx路径下,如果没有出现提示就多敲几次回车,在提示路径下找到id_rsa文件,记住复制文件内容,下面配置Git时会用到。下图是使用服务器登录对话框创建公钥,同样需要记住公钥生成的文件路径,准备复制。

如果使用的服务器的SSH链接,这个文件路径是服务器的路径,此时复制文件内容的过程,可以借助提前安装好的宝塔面板来实现,可以在宝塔面板左侧边栏中找到“文件”,进入根目录文件夹之中,按照文件路径查找对应文件,双击打开之后复制里面的内容。

2.配置Git

如果没有特别说明,安装过程中如有出现选择,一律选择yes(y),(即输入yes(y)然后点击回车)

点击登录,在弹出的面板中输入以下代码,切换到root用户

1
# sudo su root

3.安装Git
1
# yum install git

这个过程不需要过多的操作,如果已经安装过Git,出现的提示可以借助SSH的提示进行解释,安装过或者安装之后,可以查看Git版本

1
git --version

如果有对应提示,则表示安装成功,如果已经安装过版本低,可以使用以下代码查看信息

1
git help

或者使用下面的代码进行升级

1
sudo apt upgrade git

实在有问题的话,可以使用下面的代码进行清除,然后重新安装。

1
Ubuntu/Debian:sudo apt-get purge git
1
Fedora:sudo dnf remove git
1
CentOS:sudo yum remove git
1
Arch Linux:sudo pacman -R git

顺便做一下记录,停止相关服务使用命令:

1
sudo systemctl stop git

以上命令需于鏊根据实际服务名称调整,在解决不了问题,就需要咨询空间商进行商议,询问问题出在哪里,然后在进行安装。

4.配置Git

创建git账户,并修改权限,这个过程只需要按照下面的步骤复制粘贴代码进行操作就可以

1
# adduser git
1
chmod 740 /etc/sudoers

第二段代码的意思,是将etc文件夹下面的sudoers文件权限修改为740方便我们在里面添加Git账户,修改完权限之后,进入文件对其进行编辑

1
# vim /etc/sudoers

点击键盘“i”建进入编辑模式,然后通过方向键对文件进行编辑,在里面找到root ALL=(ALL) ALL在其下方以相同格式添加git ALL=(ALL) ALL

1
2
root    ALL=(ALL)       ALL
git ALL=(ALL) ALL

点击Esc后输入:wq,保存退出,然后将文件改回权限

1
# chmod 400 /etc/sudoers
5.重置Git密码
1
# sudo passwd git

密码输入过程中不会显示,输完后直接回车即可,输入两次,密码需要包含大写加小写字母加数字,添加账户时不使用大写字母,也可以设置成功,密码文本可以提前设置好。

6.配置SSH

切换为git用户,配置SSH

1
# su git
1
$ mkdir ~/.ssh
1
$ vim ~/.ssh/authorized_keys

切换到git账户,然后利用mkdir命令在当前用户主目录下创建.ssh文件夹,我测试时这个目录在根目录/home/git文件夹中找到.ssh文件夹,在.ssh文件夹里创建并打开authorized_keys文件,在打开的文件中,点击键盘“i”建进入编辑模式,然后通过方向键编辑,将本地或者服务器生成的id_rsa.pub文件公钥复制进去,需要注意的是,如果之前配置过SSH,建议将同路径下的known_hosts文件删除,否则可能会报错,点击Esc后输入:wq保存退出

7.赋予权限:
1
$ chmod 600 /home/git/.ssh/authorized_keys
1
$ chmod 700 /home/git/.ssh

这两段代码,就是把authorized_keys文件权限修改为600,把.ssh文件夹权限修改为700,从这里可以看出,git用户默认主目录根目录/home/git文件夹。

8.测试连接

在本地使用Git测试是否配置成功,桌面右键Git Bash Here,在里面输入

1
$ ssh -v git@服务器ip

服务器ip为你的服务器公网ip,执行过程中出现选择,一律选择yes,如果执行过程中需要输入密码,就输入设置好的git账户密码,如果过程中无报错,即为配置成功。有教程说不需要输入Git密码,估计是版本问题,我本地测试时需要输入设置好的Git密码。

因为教程写的时间比较长,服务器版本更新迭代的比较快,每个大商家服务器系统也不同,所以连接成功之后出现的欢迎信息也不同,和Git窗口底部出现账户连接样式。如果连接不成功的话,就看一下自己本地电脑的用户名文件夹里的.ssh文件夹,把里面的known_hosts文件删除之后在进行测试,基本上就连接成功。

9.创建Git仓库

切换回root用户

1
$ sudo su root

Hexo博客创建一个目录,赋予所有权限并设置所有者为git

1
# mkdir /home/hexo
1
# chown -R git:git /home/hexo
1
# chmod -R 755 /home/hexo

在服务器根目录的home文件夹中穿件hexo文件夹,修改hexo文件夹的所有者位git,权限位755,注意这个hexo文件夹是博客目录,想把博客目录设置在其他路径下,就需要修改mkdir指令后面的文件夹目录为自己的文件夹目录,例如

1
# mkdir /www/wwwroot/hexo
1
# chown -R git:git /www/wwwroot/hexo
1
# chmod -R 755 /www/wwwroot/hexo

如果你创建的目录文件夹已经存在,就会提示相关的错误,此时可以借助rm命令代码将其删除

1
rm [-r -f] 参数...参数

参数:支持多个,每一个表示被删除的,空格进行分隔
选项:-r,删除文件夹使用
选项:-f,强制删除,不会给出确认提示,一般root用户会用到
在这里需要注意,使用rm命令很危险,特别是切换到root用户的时候,慎重之慎重在敲下回车,要注意做好相关文件的备份工作,避免丢失信息,

10.配置git仓库
1
# mkdir /home/repo
1
# cd /home/repo
1
# git init --bare hexo.git

mkdir命令在home文件夹里创建repo文件夹,然后进入repo文件夹,在里面创建一个名为 hexo.git 的裸Git 仓库,作为远程中心仓库供 push/pull,但是这个仓库不提供工作区,不能直接在此目录进行 commit/checkout 等日常操作。裸仓库的根目录直接包含 HEADconfigobjectsrefs 等版本库内容,常用于部署与协作。需要自己修改路径的,可以对应修改路径,例如

1
# mkdir /www/wwwroot/repo
1
# cd /www/wwwroot/repo
1
# git init --bare hexo.git

此时创建的博客目录hexorepo是同级目录,也就是两个文件夹并列存在,至于大家修改成最后什么样看自己喜好,但是路径一定要设置好,避免和其他网站发生冲突。

11.创建Git钩子
1
# vim /home/repo/hexo.git/hooks/post-receive

点击键盘i建进入编辑模式,然后通过方向键编辑,将以下代码复制进去

1
2
#!/bin/bash
git --work-tree=/home/hexo --git-dir=/home/repo/hexo.git checkout -f

需要注意的是,里面的博客目录hexo和裸git仓库repo一定要修改成自己设置的路径,例如我的路径

1
2
#!/bin/bash
git --work-tree=/www/wwwroot/hexo --git-dir=/www/wwwroot/repo/hexo.git checkout -f

点击Esc后输入:wq保存退出,然后接着修改权限

1
# chown -R git:git /home/repo/hexo.git/hooks/post-receive
1
# chmod +x /home/repo/hexo.git/hooks/post-receive

第一代码是修改用户组和用户,第二行代码是修改文件权限,同样注意将路径修改为自己博客的路径。修改git仓库的所有者为git

1
# chown -R git:git /home/repo

写到这里,git账户就创建好了,修改Hexo配置文件中的推送地址

1
repo: git@域名或IP:/home/repo/hexo.git

如果你会安装网站,且已经安装好网站,此时我们就可以使用Hexo的发布命令进行测试。如果不会创建网站,接着向下看。

12.安装宝塔面板

可以使用通用脚本安装

1
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ssl251104

准确一些,清除自己服务器是那种镜像的,例如Centos/OpenCloud/Alibaba,可以使用

1
url=https://download.bt.cn/install/install_panel.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_panel.sh $url;fi;bash install_panel.sh ssl251104

Debian镜像系统

1
wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && bash install_panel.sh ssl251104

Ubuntu/Deepin镜像系统

1
wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh ssl251104

大家可以参照宝塔的官方,进行相关指导安装。

安装过程中出现的选择问题,一律选择yes或者y

安装成功之后,一定要保存好给出的宝塔面板登录信息,包括地址、账户、账户密码,这些是日后经常用的信息。如果忘记宝塔账号密码可以输入以下指令查看账号密码(需要在root用户下)

1
# cd /www/server/panel && python tools.py panel testnamewd
1
# cd /www/server/panel && python tools.py panel testpasswd

或者直接进入宝塔目录,用指令进行操作

1
# cd /www/server/panel
1
# bt

进入宝塔面板后,按照提示安装Nginx

上面的一些网站环境,对于Hexo来说除了Nginx其他用不到,例如MySQL数据库和PHP环境,Ftp可能会用到,不想安装就可以不安装。

13.添加站点

宝塔面板点击网站,选择添加站点,输入域名,根目录设为/home/hexo,也就是前面预设的博客目录,php版本选择纯静态,

点击提交之后,别忘了将域名解析到服务器,

14.本地配置

修改Hexo配置文件中的推送地址,一般在本地Hexo博客文件中的_config.yml文件中

1
repo: git@域名或IP:/home/repo/hexo.git

注意指向自己的裸Git仓库地址。如果Git配置失败,可以尝试使用root推送:

1
repo: root@域名或IP:/home/repo/hexo.git

然后,将本地仓库与远程仓库关联:

1
$ git remote add origin git@服务器IP:/home/repo/hexo.git

最后三连(hexo clean && hexo g && hexo d)上传,输入域名访问即可

15.添加SSL证书

为网站设置SSL证书并强制HTTPS,但是开启HTTPS时需要放行443端口。大家可以去服务器账号里添加设置安全组,宝塔面板同样需要放行443端口。

放行443端口之后,在宝塔面板点击网站,找到刚才添加的站点,点击设置,选择SSL,可以在这里免费申请Let's Encrypt免费三个月的SSL证书,如果你已有证书的话,点击其它证书,将你的证书复制进去,点击保存,将右上角的强制HTTPS开启,至此完成所有步骤。

16.添加404界面

修改nginx.confserver项,或者直接在宝塔面板的目标站点操作,添加如下代码:

1
2
3
4
5
6
7
#开启error_page
error_page 500 502 503 504 404 /404.html;
# 承接上面的location
location = /404.html {
# 放错误页面的目录路径。
root /home/hexo;
}

17.后记错误

hexo d 时known_hosts报错,提示冲突

解决方法:根据报错给出的地址,找到known_hosts文件,因为我这里是第三行报错,所以就直接把known_hosts文件第三行删除即可

  • hexo -d 时报错:
1
2
3
 ! [remote rejected] HEAD -> master (unpacker error)
error: failed to push some refs to 'xxx.xxx.xxx:/home/repo/hexo.git'
FATAL {

这种情况多半是目录所有者不是git,解决方法就是设置Hexo仓库目录所有者为git,设置博客目录的所有者为Git

1
# chown -R git:git /home/hexo

设置git仓库目录所有者为git:

1
# chown -R git:git /home/repo

然后再上传;如果还是不行,建议使用root推送,在hexo配置文件中修改:

1
repo: root@域名或IP:/home/repo/hexo.git

如何判断文件夹所有者是否正确呢?回到/home目录,查看git仓库和hexo仓库的文件夹所有者:

1
# cd /home
1
# ll

正常情况可以看到git仓库和hexo仓库的文件夹所有者全为git

如果在权限或者所有者问题上,还是有令人费解的问题,就看一看自己的服务器是否安装过保护类插件,把所有防护类插件关闭或者卸载之后在进行安装,重新进行权限的设置。好了,今天的教程就到这里,后续问题会陆续在这篇文章进行更新。

写在最后:大家可以参与下面的两篇文章

https://cloud.tencent.com/developer/article/2063346

https://cloud.tencent.com/developer/article/1967679