将Hexo个人博客部署到个人云服务器–最详细踩坑教程

发布于 2020-11-03  439 次阅读


一. 背景

通过 Hexo 4.0 及 nexT 7.0 + 搭建个人博客后,当然不能就此停步,需要学习的东西还浩如烟海,本文将探索Hexo个人博客部署到个人服务器的过程。

本文章部署到个人云服务器的前提:

  • 有一台服务器(硬件准备);
  • hexo 博客已经做好搭建工作,可以部署到 GitHub Pages 或 Coding 等(技术准备);

本文不会详细介绍 hexo 的搭建和 npm 、hexo g 等命令的使用,如有需要请参照网络资源教程或等待本博客更新查找。

*二. 获取体验产品--服务器(选读节)

(一)说明

如果你是学生党或是想要尝尝鲜学习新东西而已,可以使用体验产品来折腾。

一来免费,二来体验时长也足够学习到该内容的知识点了。

华为给新用户提供了免费体验的专区,大家可以进行体验。如果自己已经有服务器的可以跳过该环节或是参见该内容区域(二)末尾有服务器优惠购买的活动,优惠力度还比较大,但有时间限制。

(二)购买体验产品


华为开发者免费体验专区:https://activity.huaweicloud.com/free_test/index.html

符合免费体验的条件:

个人选择购买该产品:

选择后进入支付界面,此时会有提示你:是否创建密码 or 开机后再创建。个人建议直接设定密码,因为开机再创建会额外进行不必要的操作,直接创建直接方便,登录的用户名为 root ,点击支付,提示购买成功:

启动服务器并登录:

登录成功:

(三)食髓知味再来一杯--持续支持与后续保障 --==2020年3月3日截止,没了==

体验产品过期后还想使用服务器怎么办?可以选择自购服务器。华为最近有开年采购季的活动,最基础的云服务器打0.6折,最高可以购买3年-->236.65 / (12*3) = 6.574 ¥每月!!这价格不香吗。

况且还可以通过个人邀请链接得到优惠券,不过活动日期不久了,如果需要还得赶紧上车。如果有需要可以点击我的个人推荐链接,你我都可以获得优惠券(新用户),当然你也可以推荐你的给别人也能获得新的优惠券,可以用来购买部分服务器或是直接续费。

【2核4G云服务器低至331元/年,限时抢购】华为云开年回馈用户,产品低至1折,您的专属链接:https://activity.huaweicloud.com/2020feb_promotion/invite.html?fromuser=080e2ff9d78026c30fb1c0026ef09de0&fromacct=d5de3644-9fc9-4193-a434-8726140022f3&needGalaxy=true

续费:

三. 开始配置

(一)云服务器登录连接方式

前提与说明:

  • SSH方式登录要求该弹性云服务器已绑定弹性公网IP;
  • ssh连接正常;
  • ~/.ssh 目录下公钥加入。

开机后才能进行登录。

如果你的服务器为 Windows 操作系统,一般用户名为 administer ;如果为 Linux 操作系统,则为 root。

可登录服务器的方式有如下:

是否绑定EIP 本地操作系统 连接方法
Windows 使用 PuTTY、Xshell 等远程登录工具
Linux terminal直接使用命令连接
是/否 Windows或者Linux 使用管理控制台远程登录方式

(二)采用 XShell远程登录

XSHELL 是一款界面较好、功能也相对强大的远程登录管理工具,使用非常广泛,在业界比较受欢迎、也比较流行,支持多窗口切换以及常见shh ,Telnet,SFTP等协议。

本文将采用 XShell 进行说明与演示,其他软件操作方法可自行使用。XShell下载地址:https://www.netsarang.com/zh/xshell/,非商业使用可以获得免费许可证

在确保云服务器已经开机的情况下,新建连接:

(三)在服务器建立 Git 仓库

以下操作建立在 root 权限之下,如权限不足请申请 root 权限或采用 sudo 关键字。

==下文用到的 ganahBlog.git 为我自己的仓库名,可自行设定换成你喜欢的文字; root 为我的远端主机用户名,在后续需要用得到,如果不为 root ,在进行到文章相应位置自行修改。==

首先安装 Git 和 Nginx 服务,如有请跳过:

apt-get update
apt-get install git nginx -y

建立文件路径:

mkdir /var/repo/

修改权限:

chown -R USER:USER /var/repo/
chmod -R 755 /var/repo/

创建远程 Git 仓库:

cd /var/repo
git init --bare {自定义仓库名name}.git

(四)配置 Nginx 托管文件目录

创建目录并修改目录所有权和权限:

mkdir -p /var/www/hexo

chown -R USER:USER /var/www/hexo
chmod -R 755 /var/www/hexo

修改 Nginx 的 default 文件使得 root 指向刚刚创建的 /var/www/hexo目录:

vim /etc/nginx/sites-available/default

注意 vim 编辑方式:按照以上命令进入后为普通模式,具体介绍可以去找网上的内容,此处只说明如何进行下来的操作:

执行命令后编辑方式如下(下文有类似操作不再提及):

  • 点击 i 进入编辑模式;
  • 使用键盘上下键查到下图的 server 字段 中的 root
  • 修改 root 的指向;
  • 按住 Esc退出编辑模式;
  • 输入 :wq 保存并退出 vim 编辑器;
  • 如果有域名可以将server_name 字段后写入自己的域名。

  • 最后重启 nginx 服务:
service nginx restart

此时已经搭建好自己的nginx服务器,输入自己的服务器公网IP地址即可访问如下界面:

由于服务器暂未搭建任何东西,故访问出现403 ForBidden,如果没有成功则会出现 404 Not Found 或是加载失败等提示。

当然,为了确认是否真的真的搭建成功,也可以在/var/www/hexo 目录下建立index.html 文件:

执行命令: vim index.html;

写入如下代码:

<html>

<body>
<p>This is my Blog.</p>
</body>

</html>

最后输入公网IP发现不再是 403 ForBidden,而是访问了 index.html :

(五) Git 钩子(hooks)

执行下面的命令,在自动生成的ganahBlog.git/hooks 目录下创建一个新的钩子文件:

vim /var/repo/ganahBlog.git/hooks/post-receive

打开文件后,加入下面的代码:

#!/bin/bash

git --work-tree=/var/www/hexo --git-dir=/var/repo/ganahBlog.git checkout -f

将文件保存(方法参加上文)后,赋予该文件可执行权限:

chmod +x /var/repo/ganahBlog.git/hooks/post-receive

四. 使用 Git 部署本地 Hexo 到远端服务器

将服务器地址添加到受信任的站点,在本地任意目录从服务器上把hexo_static仓库克隆下来:

git clone root@{云服务器IP}:/var/repo/ganahBlog.git
  • 注意:如果你在远端服务器创建了 Git 用户并设定为拥有者,请将 root 改成 git (git用户)。

编辑站点配置文件_config.yml , 将 url 改成https://{云服务器IP}/

将 deploy 目标改为 {服务器用户名}@{服务IP}:/var/repo/ganahBlog.git

在个人博客站点目录下,打开 Git bash ,使用 hexo clean && hexo g -d 部署:

使用IP访问:

使用自己的域名访问:

效果参考本人个人博客地址:

https://www.ganahe.top

五. 错误集锦与解决措施参考

(一)部署后访问无效

使用 https://{服务器IP}:80 来访问自己刚刚部署的服务器站点,没有出现博客:

  • 请检查以上操作是否有误或命令部分写错。

  • 查看服务器的错误日志文件:/var/log/nginx/error.log

    此时可以发现是 /var/www/hexo 没有 index.html 文件,该文件存放在本地博客站点 public文件夹下

  • 发现错误信息(不同的情况错误可能不同,本文仅代表个人遇到的情况,具体情况请具体分析,可以留言,或许我可以帮得上忙,或是自行搜索相关的文章。

(二)部署到远端服务器被拒绝

刚配置好的 git 仓库服务器,首次提交的时候会报上图的错误,git 默认拒绝了 push 操作,需要进行设置。

  1. 检查远端主机的 ~/.ssh 下文件的文件,公钥是否正确配置;

  2. 定位到仓库 ganahBlog.git 下,在 config 文件添加如下代码(可以使用:vim /var/repo/ganahBlog.git/config 进入文件):

     [receive]
     denyCurrentBranch = ignore

最后在该路径下执行如下代码:

git config receive.denyCurrentBranch ignore

成功提交:

(三)拉取失败处理办法

缺少公钥,定位到服务器的 ~/.ssh/下,将自己的公钥粘贴到authorized_keys上去,如果没有公钥,自行查找 Git 公钥生成办法,本文不针对该内容;文件不存在则新建即可:

加入方法与上面编辑 default 文件一样,XShell提供了外部粘贴的办法:

也可以使用下面的指令实现:

ssh [远程主机用户名]@[远程主机IP] 'mkdir -p .ssh && cat >>.ssh/authorized_keys' < ~/.ssh/authorized_keys.pub

结果测试:


云仓库结构:

(四)无法查看 push 后的 git 中文件的原因与解决方法

在初始化远程仓库时使用 git --bare init 而不要使用:git init (不建议);

可以使用命令 git reset --hard 看到 push 后的内容。

两个初始化命令是有区别的,在此不做赘述。

(五)更新远端公钥后连接不上出现下面的问题

ECDSA host key for 125.36.25.875 has changed and you have requested strict checking.
Host key verification failed.

错误信息说明远端主机公钥信息已修改,需要更新:

ssh-keygen -R "远程服务器ip" 

此时测试连接远端主机成功:

(六)建立 git 用户

以上第五条参考即在 git 用户下进行登录验证等操作。

为了安全,可以通过 git 用户管理仓库,而不是 root。

adduser git # 按照指引输入密码等

su git # 切换到git用户 git用户家目录 /home

将密钥添加到 git 用户下:

mkdir /home/git/.ssh
vim /home/git/.ssh/authorized_keys

写入公钥即可。

记得更新(第四条),测试连接:

ssh -v git@{服务器IP}

六. TIP

想要域名访问服务器的网站,请记得要备案,不然......

我 .....

七. 外链

(一) 个人博客传送门

(二) 合作共建平台