买了服务器一直没用,先搞个博客吧,因为发现简书的发布博客好像有一日上限,不舒服。
首先看个服务器搭建Hexo的整体架构图,非常好,有利于理解接下来的步骤。来自博客:如何在服务器上搭建hexo博客

HexoArchitecture.png
步骤大纲:
一、 本地计算机配置Hexo程序
二、服务端配置网站根目录、Git裸仓库、Git-hooks、Nginx。
三、 本地计算机与服务端建立通道,实现hexo上传。
四、本地计算机渲染博客并部署到服务器。
一、本地计算机配置Hexo程序
Note: 本地计算机为Deepin系统,理论上适用Ubuntu、Debian
- hexo需要node.js的支持,所以第一步是安装nodejs
-
打开终端窗口,根据系统输入以下命令之一:
其他nodejs版本请参考Node.js Binary Distributions
npm会随nodejs一起安装成功。# Using Ubuntu curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs # Using Debian, as root curl -sL https://deb.nodesource.com/setup_lts.x | bash - apt-get install -y nodejs -
验证是否安装成功:
# node -v返回 v12.18.3 node -v # npm -v返回 6.14.6 npm -v
-
- 初始化Hexo博客
- 安装Hexo
选择目录存放本地hexo博客内容(假设主目录/home/xxx/),运行npm install -g hexo-cli - 初始化hexo:
hexo init blog # blog可以是其他任何你想起的名字 - 安装hexo其他插件:
cd blog npm install #这个操作功能是补全依赖环境 npm install hexo-deployer-git --save # 自动部署到服务器需要的插件 npm install hexo-server # 本地简单的服务器,可以测试hexo是否安装成功 - 测试hexo是否安装成功。执行如下命令:
hexo g && hexo server
- 安装Hexo
二、服务端配置网站根目录、Git裸仓库、Git-hooks、Git上传用户、Nginx。
- 配置网站根目录备用
- 指定一个目录,假设主目录
/home/xxx/,创建文件夹hexocd /home/xxx mkdir hexo
- 指定一个目录,假设主目录
- 服务端配置Git裸仓库
- 指定一个目录创建git裸仓库,可以选择
/var/repo/。执行:sudo git init --bare blog.git
- 指定一个目录创建git裸仓库,可以选择
- 配置git-hooks
创建文件cd /var/repo/blog.git/hookspost-receive,执行vim post-receive,进入vim在insert模式下输入:
然后# !/bin/sh git --work-tree=/home/xxx/hexo --git-dir=/var/repo/blog.git checkout -f:wq保存 - 配置Nginx
- 安装Nginx:
sudo apt-get install nginx - 配置Nginx.conf:
Nginx.conf位置是/etc/nginx/nginx.conf(也可能是/user/local/nginx/conf,可以whereis nginx命令查看具体位置)。
编辑该文件内容,修改user、server
然后保存。user root; .... http { server { listen 80; # 监听端口 server_name "your url or ip"; # 域名或者ip地址 location / { root /home/xxx/hexo; # 服务端网站根目录 index index.html; } } }
- 安装Nginx:
三、本地计算机与服务端建立通道,实现hexo上传。
- 服务端创建并配置git用户,专门用于博客上传。
- 创建git用户,并更改git仓库的所有者
sudo adduser git # 创建用户 sudo chown -R git:git /var/repo/blog.git - 禁用 git 用户的 shell 登录权限
出于安全考虑,我们要让 git 用户不能通过 shell 登录。可以编辑/etc/passwd来实现
将git:x:1001:1001:,,,:/home/git:/bin/bash改成git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样 git 用户可以通过 ssh 正常使用 git,但是无法登录 shell。可以在服务端试一下,su git无法切换到git用户,报错fatal: Interactive git shell is not enabled.
为什么非得搞一个新的git用户,我感觉原因出在这里,如果直接使用服务端原来的用户远程上传博客也行,只是存在安全问题。
- 创建git用户,并更改git仓库的所有者
- 本地计算机与服务端建立ssh通道。
- 本地计算机执行:
ssh-keygen
/home/xxx/.ssh/下生成两个文件id_rsa和id_rsa.pub。- 服务端在
/home/git目录下创建文件夹.ssh,并在/home/git/.ssh下创建文件authorized_keys。
把id_rsa.pub的内容复制到服务端的authorized_keys中。注意是把本地计算机的/home/xxx/.ssh/id_rsa.pub复制到服务端的/home/git/.sshauthorized_keys。
- 本地计算机执行:
- 本地计算机配置hexo deploy。
- 编辑
/home/xxx/blog/_config.yml,配置deploy:deploy: type: git repo: git@"your url or ip":/var/repo/blog.git branch: master
- 编辑
保存。
四、本地计算机渲染博客并部署到服务器。
- 编写博客
- 方式一:创建博客使用的markdown文件,然后书写内容
hexo new "xxxx"
source/_posts目录下。继续编辑xxx.md即可。- 方式二:直接把写好了的md文件丢进
source/_posts目录下。
- 方式一:创建博客使用的markdown文件,然后书写内容
- 渲染博客:
或者hexo gerneratehexo g - 部署博客到服务器
或者hexo deployhexo d - 第二步和第三步可以一起使用
或者hexo g && hexo d
或者hexo g -d
操作完成后,服务端目录hexo d -g/home/deepin/hexo下会有刚刚提交的博客,但/var/repo/blog.git/branches不会有博客文件,因为它是裸仓库。
注意:hexo d可能会报错Error: EACCES: permission denied, unlink ...,说什么权限拒绝。如果使用sudo hexo d,就会报另外一种错误:git@github.com: Permission denied (publickey). fatal: 无法读取远程仓库。。解决办法:一劳永逸,直接chmod -R 777 blog/。参考博客:使用Hexo+Github搭建博客的各种问题
完工。整个流程请照文章开头的架构图理解一下,比较难理解的是第二章节和第三章节。
其他发现:
hexo官网文档的一键部署,支持除了Git上传的其他部署方式,包括SFTP、RSync,逻辑应该是直接远程传输到服务端制定文件夹,配置相对简单,直接配置_config.yml的deploy属性即可。