搭建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 日