乐趣区

跳坑指南在vps上部署hexo博客的那些事

说在前面
本地使用 macOS,vps 系统为 debian 8;
虽说是跳坑指南,但是这篇文章本意也仅仅自用,总结一下自己遇到的问题和解决方法,仅供参考,如有其他问题请百度(google)

整体思路:
本地调试完的 hexo 项目文件通过 git 推送给 vps,然后直接部署在 vps 上使用域名来访问,这样一个属于自己的 blog 就可以完成了

本地环境

Git

Git 是一个免费的开源分布式版本控制系统,旨在快速,高效地处理从小型到大型项目的所有事务。这原是广泛用在代码的版本控制,在 hexo 建站里面的主要作用是推送渲染好的静态网页文件到部署的仓库。

下载 Git 与安装

因为本来我就有,所以这里就不多介绍;
网上其他大佬也有很多教程

node.js

下载 Node.js 与安装

同上,本地环境也有;

Hexo

Hexo 是一个快速、简洁且高效的静态博客框架。安装简单,虽然网上教程一大堆,建议参考官方文档。重要!官方文档有中文 ????。

官方文档
https://hexo.io/zh-cn/

安装 hexo

首先确保本地安装好 git 和 node.js,在终端中输入
npm install -g hexo-cli

创建 hexo 项目(建站)

hexo init <folder> // 初始化项目文件夹;<folder> 为自定义 hexo 项目名称
cd <folder> // 打开项目文件夹
npm install // 安装依赖

完成上述步骤,查看自己的项目文件夹内,目录应为:

.
├── node_modules // 依赖包
├── scaffolds // 模版
├── source // 文章资源
|   ├── _drafts // 草稿
|   └── _posts // 发布文章
├── themes // 主题
|   └── landscape // 默认主题
├── package.json // npm 配置文件(可以不用管它)└── _config.yml //hexo 配置文件

配置 hexo
既然生成了博客了,那自然需要自己来配置一下自己的博客的信息,打开_config.yml 文件进行配置;
具体配置参考官方文档:https://hexo.io/zh-cn/docs/co…

下载主题
主题我挑了很久,最后选择综合症的我只有选了好多人推荐的 next 主题
next 官方文档:
https://github.com/theme-next…

下载
根据文档给的方式使用 git clone
git clone https://github.com/theme-next/hexo-theme-next themes/next

试了几次,我一直报错
'RPC failed; curl 18 transfer closed with outstanding read data remaining'

解决方案:
git config http.postBuffer 524288000
当然啦,依旧报错,并没有解决我的问题
参考:https://www.cnblogs.com/zjfja…

所以我将 git clone 里的 https 地址换成了 ssh 地址,完美解决,虽然网速依然很慢,但是不报错啊!
git clone git@github.com/theme-next/hexo-theme-next themes/next

主题配置
直接在项目文档里 clone 或者单独 clone 后将 next 文件夹复制进项目的 themes 文件夹里

.
├── themes // 主题
|   ├── landscape // 默认主题
|   └── next // 新 clone 的 next 主题

并在 hexo 配置文件中更改主题

...
theme: next // 更改主题
...

其他配置暂时就不说了,以后会再次具体写

vps 环境

vps

如何购买 vps 不在本文详细叙述,不论在阿里云还是腾讯云还是海外譬如搬瓦工之类购买,都是差不多的,vps 大同小异,不过好像是国内的服务器配置域名是需要实名认证的,但是海外的就不需要;
重新说明我的 vps 安装的系统是 debian 8,如果有和我一样的小伙伴那么我的接下里的配置就很有参考价值了,当然其他版本的系统原理和流程其实也是大同小异;

再多说一句,系统不同,安装包的命令也是不同的:
rpm/yum适用于 Redhat、CentOS、Suse 等平台;
apt-get/dpkg适用于 Debian、Ubuntu 等平台;
请大家自己寻找对应的安装包,我这边用的是apt-get;

部署原理

本地 hexo 文本编辑后,使用 git 远程部署到 vps 的 git 仓库。hexo d只 deploy 本地打包后的 public 文件夹;
在 vps 的 git 仓库里使用 git hooks,当 git 仓库收到最新的 push 时,将 git 仓库接受到的内容复制到 VPS 上的网站根目录内;相当于完成了手动将 public 文件夹复制到 vps 的网站根目录内

连接 vps
我觉得如果看到这篇文章了,用 ssh 连接 vps 应该是都会的吧,那我就不说了;不会的请百度(谷歌) ????

???? 算了,我稍微提一下,打开终端输入
ssh 用户名(一般是 root)@vps 的 ip 地址 -p 端口号
按照提示输入密码,出现[root@主机名~]#,登陆成功 ????

Git

安装 git

apt-get install git

查看版本号,用以确认安装成功
git -version

创建 git 用户

为什么要创建 git 用户?
老实说,如果是自己一个人用的 vps,那么不用 git 用户其实也没啥,但是创建的意义就是用 git 用户来管理 git 和代码,而不用 root,这样更安全;

创建 git 用户
adduser git
按照提示设置密码

赋予 git 用户 sudo 权限
chmod 740 /etc/sudoers #修改权限
vim /etc/sudoers #编辑该文件

  • 此时报错,应该是我没有 vim 命令

安装 vim
apt-get install vim

  • 此时我报错了,出现没有 /etc/sudoers 的提示

chmod: cannot access‘/etc/sudoers’: No such file or directory
因该是没有安装 sudo 模块
安装 sudo
apt-get install sudo
再次执行上述操作,成功 ????

修改如下内容

# User privilege specification
root    ALL=(ALL:ALL) ALL

修改后

# User privilege specification
root    ALL=(ALL:ALL) ALL
git     ALL=(ALL:ALL) ALL #添加此行内容

修改回文件的权限
chmod 440 /etc/sudoers

切换 git 用户,配置 ssh
下载和上传代码的都是使用 git 这个用户,但我们又不想要每次都输入密码,怎么办?
所以我们使用 ssh 证书,本地生成公钥复制至服务端,每次登陆只要服务器自动核对公钥是否匹配即可

切换 git 用户
su git

创建.ssh 文件夹
mkdir ~/.ssh

创建 authorized_keys 文件并编辑,将公钥复制进去即可
vim ~/.ssh/authorized_keys
保存退出

  • 本地

先在本地电脑中获取公钥,再将公钥复制粘贴到 authorized_keys
(本地)查看公钥
cat ~/.ssh/id_rsa.pub | pbcopy

修改公钥文件相应权限
chmod 600 ~/.ssh/authorzied_keys #只有拥有者有读写权限
chmod 700 ~/.ssh #只有拥有者有读、写、执行权限

返回本地客户端,测试是否可以连接上服务器 (此时应该免密登陆成功) ????
ssh -v git@$ip -p $port
如果不成功请重试以上配置 ssh 步骤

配置 git hooks

先确定自己想将项目的根目录放在哪里?
我的是这样的:
/home/git/blog/blog.git #git 仓库
/home/git/blog/hexo #项目根目录

初始化 git 仓库
git init --bare blog.git
参数 –bare,创建一个裸仓库,不包含工作区

配置 git hooks
我们这里要使用的是 post-receive 的 hook,这个 hook 会在整个 git 操作过程完结以后被运行。hook 详情

在 blog.git/hooks 目录下新建一个 post-receive 文件:
vim post-receive

文件中写入:

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

–work-tree 对应项目部署根目录
–git-dir 对应版本库目录
保存退出

添加 post-receive 文件的可执行权限
chmod +x post-receive

blog.git 的拥有者为 git 用户
chown -R git:git blog.git

禁用 git 用户的 shell 登录权限
vim /etc/passwd
找到
git:x:1001:1001:,,,:/home/git:/bin/bash
改为
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
保存退出
这样 git 用户无法使用 shell 登陆,但可以通过 ssh 正常使用 git 推送

参考:https://www.cnblogs.com/navys…

多说一句
执行 ll 命令,确保以上 blog.git、.ssh、blog 目录的用户组权限为 git:git
ll /home/git

如果不是,执行
chown git:git -R /home/git/blog

nginx

安装 nginx

安装 Ngnix
apt-get install nginx

查看版本号(确认安装成功)
nginx -v

配置 nginx

nginx.conf

配置文件路径
/etc/nginx/nginx.conf
我看了看,不同 vps 版本系统的文件路径不太一样,请大家自己寻找对应系统的教程或者自己在系统里寻找文件路径

打开 nginx.conf 文件所在目录
cd /etc/nginx

# 修改前先备份一下
cp nginx.conf nginx.conf.bak
# 修改配置文件
vim nginx.conf

修改配置文件中的 server 部分:

    server {
        # 默认 80 端口
        listen       80 default_server;
        listen       [::]:80 default_server;
        # 修改 server_name 为自己之前注册好的域名
        server_name  www.xksblog.top xksblog.top;
        # 修改网站根目录,在这里存放你的 Hexo 静态文件,请自行选择或创建目录
        root         /home/git/blog/hexo;
        # 下面保持默认
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            root    /home/git/blog/hexo; #部署的 blog 根目录
            index   index.html index.htm
        }

        error_page 404 /404.html;
            location = /40x.html { }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {}}

保存退出,使用 nginx -t 查看配置是否有错误

启动 ngnix
service nginx start
浏览器打开服务器 public IP,检查 ngnix 是否启动成功

停止 ngnix
nginx -s stop

重启 nginx
nginx -s reload

查看运行状态
systemctl status nginx
显示 running 表示成功运行

nginx.conf
cd /etc/nginx/sites-available // 切换目录
cp default default.bak // 备份默认配置
vim default // 修改配置

找到 server, 修改里面所有的 location 和 root

server {
    listen 80 default; #默认监听 80 端口
    root /home/git/blog/hexo; #网站根目录
    ...
}

重启 nginx
nginx -s reload

查看运行状态
systemctl status nginx
显示 running 表示成功运行

参考:
VPS 搭建个人 Hexo 博客
Hexo 搭建个人博客并使用 Git 部署到 VPS

本地 deploy

现在距离成功还有一步之遥

安装 deploy 插件

npm install hexo-deployer-git --save

hexo 的 deploy 配置

打开 hexo 配置文件_config.yml, 找到 deploy

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
    type: git
    repo: git@VPS 的 IP:blog.git 目录
    branch: master

一般到这边就可以直接 hexo d 了, 但是我报错了,发现默认端口 22 是无法连接上的,因为 vps 的默认端口不是 22;
此时有两种解决方法

  • 一种是修改 vps 的默认端口至 22;
  • 第二种就是修改一下 deploy 的配置,从指定端口连接

我选择第二种,方法如下:
repo: ssh://git@ip:port/blog.git 目录

推送部署
hexo d

此时用域名或者 vps ip 连接,自己的 blog 就完成了!????

退出移动版