0%

使用Hexo建博客

hexo建博客

因为有一个闲置云服务器,想用来建个博客。大部分人建立网站使用的是wordpress,但感觉有点功(hua)能(li)丰(hu)富(shao),只想做一个简单的博客,所以选择了hexo。

其实网上一大堆的用hexo建站的教程,大多数是使用github配合的。没用github的也是在服务器建一个git仓库,感觉有点麻烦。

首先了解一下hexo使用git的简单流程

在本地创建hexo环境,设置好后在本地创建博客,然后同步到git仓库,再转到网址目录。

流程有点奇怪,希望能在本地写文章,然后传到网址目录下,所以直接使用scp去实现。

环境安装

在本地只需要编写markdown文章,所以只需要markdown编辑器就行,我使用的是vscode,因为带终端。

在服务器,需要安装hexo,安装文档参考 https://hexo.io/zh-cn/docs/

需要先安装git和node.js,我服务器是centos,使用以下命令

1
2
3
4
5
6
7
# 安装git
yum install git

# 通过nvm安装node.js, 参考 https://github.com/nvm-sh/nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
source ~/.bashrc
nvm install node

然后使用npm安装

1
$ npm install -g hexo-cli

创建

选择想要建站的文件夹位置,执行以下命令:

1
2
3
$ hexo init <folder>
$ cd <folder>
$ npm install

执行完后,文件夹目录如下:

1
2
3
4
5
6
7
8
.
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes

一些网站的配置文件可直接参考 https://hexo.io/zh-cn/docs/configuration ,按照自己喜欢即可。

输入hexo g生成静态网页,输入hexo s即可运行,但是毕竟放在服务器上,hexo在后台运行也访问不了,需要配置使用域名访问。

想要配置直接从域名访问博客,需要配置nginx。本人使用的是宝塔,直接新增站点,根目录选择sitefoler/public/

有个坑,以上设置完后一直显示403 forbidden,后来通过hexo s -p 1234 &让其在后台运行,然后使用反向代理将1234端口代理到$host,这样可以成功访问,但感觉太麻烦了。删除反向代理后,查看错误日志,显示

1
"sitefolder/public/index.php" is forbidden (13: Permission denied),

输入

1
ps aux | grep "nginx: worker process" | awk  '{print $1}'

显示

1
2
www
user

原因是启动用户和nginx工作用户不一致,修改nginx的配置文件(宝塔可直接在nginx管理处修改配置,或者在/www/server/nginx/conf/nginx.conf处修改),将usr修改为user,改完后重启nginx

1
2
nginx -t
nginx -s reload

连接

之前说过是在本地写文章,然后通过scp传到云服务器的网站文件夹里。

首先配置ssh

在本地运行

1
ssh-keygen -t rsa -C "user"

之后一直回车,如果保存文件时报错,可能需要输入别的文件名(如hexo_rsa)

这会在~/.ssh文件夹下生成私钥id_rsa(或之前输入的文件名)和对应的公钥id_rsa.pub

在服务器上

1
2
3
4
cd ~
mkdir .ssh
cd .ssh
touch authorized_keys

将本地公钥里的内容复制到authorized_keys里。

成功的标志,运行以下命令能不输入密码直接登录。

1
ssh user@targetip

PS:不成功可以尝试修改.sshauthorized_keys的权限

1
2
chmod 700 .ssh
chmod 600 authorized_keys

然后需要将写好的文章传到服务器的文件夹中,我使用的scp,命令格式为:

1
scp sourcefile user@targetip:targetfolder 

sourcefile:在本地写的markdown文件

targetfolder:网站所在文件夹/source/_posts/

因为每次写完文章后都得scp一次,可以将其写成脚本。

1
2
3
4
#!/bin/bash

scp $1 user@targetip:sitefolder/source/_posts/

$1:输入的参数,可以选择需要传过去的文件

sitefolder:网站所在文件夹

用法:./push.sh sourcefile。需要添加push.sh的运行权限。

以上只是将文件传了过去,想要在服务器上显示还需要使用hexo g生成动态页面

每次都手动hexo g比较麻烦,可以输入以下命令,让hexo在后台自动监控文件的变化。

1
sudo hexo g --watch &