搭建Hexo博客到个人服务器并实现同步管理

搭建Hexo博客到个人服务器并实现同步管理

搭建本地 Hexo 环境

下载安装 git

apt install git

下载安装 nodejs

 # 创建件文件夹并下载解压对应的软件包
 VERSION=v10.15.0
 DISTRO=linux-x64
 sudo mkdir -p /usr/local/lib/nodejs
 sudo tar -xJvf node-$VERSION-$DISTRO.tar.xz -C /usr/local/lib/nodejs  

#设置环境变量到 ~/.profile 或 ~/.bashrc 下
VERSION=v10.15.0
DISTRO=linux-x64
export PATH=/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin:$PATH

#应用文件
.  ~/.profile

说明:默认会安装 npm (官方建议:Node.js 版本需不低于 8.10,建议使用 Node.js 10.0 及以上版本).

修正:

说明:按照上面的方案安装 Nodejs 会导致使用 Npm 安装包时出现权限问题。

使用管理工具 nvm 安装 Node 。

node 高版本安装 hexo-cli 推送会出现问题,v12.x 正常。

npm 安装 Hexo

npm install -g hexo-cli

配置本地 Git 环境

创建公钥文件夹

检查本地是否存在 ~/.ssh 文件夹,若不存在则创建,并进入文件夹。

生成本地公钥和私钥

ssh-keygen -t rsa -C "youremail@youremail.com"

说明:Github 推荐使用 -t ed25519 算法 。详情

设置 Git 信息

  • 可修改的本地 Git 用户名:git config --global user.name "Firstname Lastname"
  • 可修改的本地 Git 邮箱:git config --global user.email "your_email@youremail.com"
  • 查看本地 Git 配置信息:git config --list

服务器环境配置(root 登录)

搭建 Git 仓库

  • 为 Git 创建一个用户,用来运行 Git 服务:创建用户adduser git,设置密码 passwd git.

  • 创建证书登录:收集所有需要登录的用户公钥(id_rsa.pub文件),将公钥导入到 /home/git/.ssh/authorized_keys文件里,一行一个公钥。

  • 初始化 Git 仓库:git 用户登录 su git ,选定一个目录作为 Git 仓库(我选用的是 /home/git/repository),初始化 git init --bare blog.git .

  • 此时为裸仓库,没有工作区。因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。更改 owner 为 git 用户:sudo chown -R git:git blog.git

  • 禁用 git 用户 shell 登录:找到/etc/passd中的 git 修改为git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

  • 创建 git 钩子:在 git 用户下创建目录(用于存放通过 Hexo 部署上来的静态文件,也就是个人服务器要展示的内容)gopherty,创建 /home/git/repository/blog.git/hooks/post-receive 文件,内容

    #!/bin/sh
    git --work-tree=/home/git/gopherty --git-dir=/home/git/repository/blog.git checkout -f

为该文件增加可执行权限:chmod +x post-receive

nginx 配置

  • 安装 nginx .

  • 修改配置文件/etc/nginx/nginx.conf,将 server 下的 root 改为 /home/git 表示网页的根目录存放路径,location 改为 index index.html index.htm;表示默认打开index.html文件。

  • 重启 nginx 服务 .

本地实现

以上环境都配置好以后,找到 Hexo 博客源文件,修改 _config.yml文件:


# URL
### If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: https://www.gopherty.info     //个人域名
......

# Deployment
### Docs: https://hexo.io/docs/deployment.html
deploy:    
type: git
repo: git@www.gopherty.info:/home/git/repository/blog.git  //用户名@域名或 IP 地址:/home/git/repository/blog.git
branch: master

现在就可以通过 Hexo 的命令生成对应的源文件,并推送到个人服务器上进行查看博客内容。

Hexo 同步管理

Hexo 同步管理和我之前文章提到的原理相同,实现过程如下:

  • 在服务器端建立 source 分支,用于存放 Hexo 的源文件:git branch source
  • 本地克隆服务器 source 分支的内容:git clone -b source git@www.gopherty.info:/home/git/repository/blog.git 将 Hexo 生成的静态文件都删除掉,只保留 Git 仓库即 .git 文件夹 {此时克隆下来的内容有可能为空(按照之前的步骤配置好以后没有通过 Hexo 命令部署到服务器),为空则不用管。},然后将 Hexo 源文件拷贝到该仓库里面,通过 Git 来将里面的内容上传到服务器仓库的 source 分支上,这样在其他电脑上就可以将源文件拷贝下来然后继续该博客的工作了。

注意:通过 hexo d 命令会生成 .deploy_git 文件,在此文件下会存在 git 仓库,这是由 Hexo 生成的,所以在 .gitignore 文件中忽略不掉,不能进行推送。可以手动删除或不增加该文件,然后将源文件推送到仓库中。

.gitignore 无效解决办法

产生原因:.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法是先把本地缓存删除(改变成未track 状态),然后再提交:

git rm -r --cached
git add .
git commit -m "update .gitignore"

关于

版本日志

  • 第一版:2020 年 03 月 25 日
  • 第二版:2021 年 03 月 28 日

 上一篇
HTTP协议 HTTP协议
HTTP协议一.HTTP的发展1.HTTP/0.9​ 这是 HTTP 协议的初代版本,它是基于 TCP/IP 协议的应用层协议,不涉及数据包的传输,主要定义了客户端与服务器端的通信格式,默认端口是80。 客户端只有 GET 命令,是
2020-03-27
下一篇 
浅谈Goroutine和Channel 浅谈Goroutine和Channel
浅谈 Goroutine 和 Channel什么是 Goroutine进程与线程的关系 一个进程简单来说就是跑在一台机器上的一个应用程序,它占有独立的内存地址空间。一个进程由一个或多个操作系统线程组成,这些线程共享该进程的内存地址空间。几乎
2019-11-02
  目录