0%

Ubuntu+Hexo+Nginx搭建自己的博客

前言

  • 为本地的 hexo_blog 配置一个部署静态文件的远程仓库。许多教程均以 Github 作为中转的平台,但是会让整个流程变得更为复杂,而且会受服务器与 Github 之间网络情况的影响。假如 Github 宕机或者被封,你将无法更新博客。
  • 配置 Nginx 托管博客文件目录。
  • 配置远程仓库自动更新到博客文件目录的钩子。

注册Github账号

安装Git

git

git是地球上最先进的版本管理控制系统,与时俱进的程序员、黑客、作家都在用它。

你不用后果比较严重。。。只能说这么多了

首先确认本机上有没有安装git

1
git --version

能正确显示版本号说明已经安装好了,没有安装的话不出意外,终端会提示安装命令,类似

1
sudo apt-get install git-core

git是一个博大精深的东西,值得深入研究,值得长久沉浸,网上有超多的帖子和书籍在等待着你去发掘,做个勇猛的发掘机吧!谁用谁知道!

本地Hexo程序

初始化Hexo博客

首先要安装 hexo-cli,安装hexo-cli 需要 root 权限,使用 sudo 运行

1
sudo npm install -g hexo-cli

然后初始化Hexo程序

1
2
cd ~/Documents/code
hexo init blog

等执行成功以后安装两个插件,hexo-deployer-githexo-server,这俩插件的作用分别是使用Git自动部署,和本地简单的服务器。

1
2
3
cd blog
npm install hexo-deployer-git --save
npm install hero-server

hexo-deployer-git帮助
hexo服务器帮助

使用hexo new <文章名称>来新建文章,该命令会成成一个.md文件放置在sources/_posts文件夹。

1
hexo new "hello world"

编辑完毕以后, 使用hexo g将 .md文件渲染成静态文件,然后启动hexo-server:

1
hexo generate && server

现在便可以打开浏览器访问http://localhost:4000来查看我们的博客了!

服务器环境搭建

创建私有 Git 仓库

创建一个git用户,用来运行git服务

1
sudo adduser git

把自己电脑的公钥,也就是~/.ssh/id_rsa.pub文件里的内容添加到服务器的/home/git/.ssh/authorized_keys文件中。

1
2
ssh-keygen -t rsa   #-t表示类型选项,这里采用rsa加密算法
ssh-copy-id admin@x.x.x.x #将公钥复制到远程主机中

在/var/repo/下,创建一个名为hexo_static的裸仓库(bare repo)。

如果没有/var/repo目录,需要先创建

1
sudo mkdir /var/repo/

然后,执行如下命令:

1
2
cd /var/repo/
sudo git init --bare hexo_static.git

这一步主要是初始化裸仓库,只有初始化之后我们后面才可以向这个仓库中添加代码。

创建 Git 钩子

创建/var/www/hexo目录用于 Nginx 托管,并将/var/www/hexo/的目录所有者改为nginx

1
2
3
mkdir -p /var/www/hexo
chown -R nginx:nginx /var/www/hexo
chmod -R 775 /var/www/hexo

git用户添加到nginx组内

1
sudo usermod -a -G nginx git

或者打开/etc/group

1
sudo vim /etc/group

nginx后面添加git

/etc/group
1
nginx:x: :git

接下来,在服务器上的裸仓库 hexo_static 创建一个钩子,在满足特定条件时将静态 HTML 文件传送到 Web 服务器的目录下,即/var/www/hexo

在自动生成的 hooks 目录下创建一个新的钩子文件:

1
sudo vim /var/repo/hexo_static.git/hooks/post-receive

在该文件中添加两行代码,指定 Git 的工作树(源代码)和 Git 目录(配置文件等)。

/var/repo/hexo_static.git/hooks/post-receive
1
2
#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/hexo_static.git checkout -f

保存并退出文件,并让该文件变为可执行文件。

1
sudo chmod +x /var/repo/hexo_static.git/hooks/post-receive

改变hexo_static.git目录和网站目录的拥有者为 git 用户,并更改目录权限

1
2
sudo chown -R git:git /var/repo/hexo_static.git
chmod -R 755 /var/repo/hexo_static.git

禁用 git 用户的 shell 登录权限

查看git-shell的位置:

1
which git-shell

显示为/usr/bin/git-shell,然后将git-shell的路径添加到/etc/shells文件中:

1
sudo vim /etc/shells

修改git用户的shell为/usr/bin/git-shell:

1
sudo chsh git

配置 Nginx 托管文件目录

然后去修改Nginx的配置,nginx的配置文件是/etc/nginx/nginx.conf文件, /etc/nginx/conf.d目录下的文件与/etc/nginx/default.d目录(实际上这个目录下的是备份文件)下的文件,权限方面大约是nginx.conf > conf.d 目录 > default.d 目录
其中conf.d能设置server,但不能设置http,—如果其中的server设置和nginx.conf冲突,nginx会出错。 而default.d文件夹中的配置不能设置server
我们的vps上有多个站点,所以强烈建议在conf.d目录下为每一个域名建立一个单独的配置文件,并用域名为配置文件命名。因为nginx.conf文件中默认有include include /etc/nginx/conf.d/*.conf;所以我们直接在conf.d目录下创建配置文件就好了。

打开nginx.conf修改配置文件

1
2
cd /etc/nginx/conf.d/
sudo vim www.example.com.conf

http段里的server剪切出来

进入conf.d目录并创建配置文件

1
2
cd /etc/nginx/conf.d/
sudo vim www.example.com.conf

将复制的server段粘贴进新建的配置文件中,再将其中的 root 指令指向 /var/www/hexo 目录。

/etc/nginx/conf.d/www.example.com.conf
1
2
3
4
5
6
7
8
server {
listen 80 default_server; #域名备案完成后需要修改这里
listen [::]:80 default_server ipv6only=on;

root /var/www/hexo; # 需要修改的部分
index index.html index.htm;
...
}

把nginx服务加到系统启动项中。

1
sudo systemctl enable nginx

最后,重启 Nginx 服务,使得改动生效。

1
sudo systemctl restart nginx

至此,服务端的配置基本结束。

部署到服务端

完成服务器端的设置之后只需要对hexo站点配置文件进行修改就可以实现部署到服务器端了。

_config.yml
1
2
3
4
5
6
7
deploy:
- type: git
repo: https://github.com/xxx/xxx.github.io.git #这里主要是用来push到github上的
branch: master
- type: git
repository: git@你的vps的ip地址:/var/repo/hexo_static.git
branch: master

其中如果VPS上repository的SSH端口不是标准22端口的话,repo需要填写为

1
2
3
4
git clone ssh://git@hostname:port/.../xxx.git

# 举例如下:
git clone ssh://git@x.x.x.x:xxxx/var/repo/hexo_static.git

之后就可以愉快的使用

1
hexo clean && hexo generate --deploy

上传博客啦~