将Hexo博客部署至腾讯云服务器(Ubuntu18.04)

Sometimes, the correct path is the tortured one. ——《选秀日》

有时候,正确之路是苦难之路。


注:本文参考自https://staunchkai.com/hexo_deploy.html

  原本我的hexo是部署在Github上的。但是,就今年来说,基于美国贸易政策影响,Github已经限制了一些国家的用户访问。一名国外的开发者发表声明:Github封禁了他的账号,不能访问私有仓库,认为他在开发核武器。看到这,我不禁笑了出来,然后我就萌发了,将博客迁回国内的想法(当然,我不会告诉你,真正的原因是是因为访问速度太慢了。)

部署环境

  • 本地环境

    • Windows10(64bit)
    • 环境:gitNode.jshexo
    • 生成本地静态网站
  • 服务器环境

    • 腾讯云主机(Ubuntu18.04)
    • 环境:gitNginx
    • 使用git自动化部署发布

服务器配置

安装Git

1
sudo apt install -y git

创建git用户

1
2
3
4
sudo adduser git
sudo passwd git
sudo chmod 740 /etc/sudoers #(该文件为只读,想要增加内容必须增加权限)
sudo vim /etc/sudoeres

在合适的位置增加以下内容

1
git ALL=(ALL) ALL

如图:

保存并退出,修改回权限

1
chmod 400 /etc/sudoers

本地创建密钥

1
ssh-keygen -t rsa

一路回车,直至如下图所示:

切换至 git 用户,创建.ssh文件夹以及 authorized_keys 文件并将本地的id_rsa.pub文件内容粘贴到里面。(切记是id_rsa.pub,而不是id_rsa)

1
2
3
su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys

修改权限

1
2
3
cd ~
chmod 600 .ssh/authorzied_keys
chmod 700 .ssh

测试
在本地Windows上,使用Git Bash

1
ssh -v git@SERVER_ip

测试结果为,不需要密码直接进入。

创建网站目录
创建一个目录作为网站根目录,并赋予权限

1
2
3
4
su root
mkdir /home/hexo # 作为网站根目录
chown git:git -R /home/hexo

安装配置Nginx

1
2
sudo apt install -y nginx    # 安装
systemctl start nginx.service # 启动服务

此时去访问服务器的公网IP地址,可以看到Nginx的欢迎页面,至此Nginx安装成功。

PS:原谅我忘记截图,只好从网上截取。Ubuntu下Nginx安装成功就是这样子的,不过centos的好像比这个漂亮一些,有兴趣的可以自行度娘。

配置Nginx

1
vim /etc/nginx/sites-available/default    # 编辑配置

配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80 default_server;
listen [::]:80 default_server;
#server_name www.yours_server_name.com; # 修改为自己的域名
root /home/hexo; # 修改为网站的根目录
index index.html index.php index.htm;
#Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
}

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

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

使用nginx -t命令检查配置文件的语法是否出错。然后使用systemctl restart nginx.service systemctl命令重启服务即可。

自动化部署
建立git裸库

1
2
3
4
su root
cd /home/git # 在 git 用户目录下创建
git init --bare blog.git # 一定要加上--bare
chown git:git -R blog.git #赋予git用户权限

这里使用的是post-receive这个钩子,当git有收发的时候就会调用这个钩子。 在blog.git裸库的 hooks 文件夹中,新建post-receive文件。

1
vim blog.git/hooks/post-receive

填入以下内容,其中 /home/hexo 为网站目录

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

添加权限

1
chmod +x /home/git/blog.git/hooks/post-receive

本地配置

在本地中,和部署到 pages 服务一样,需要先 hexo g 命令生成静态文件,通过 hexo s 命令能够正常进行本地访问,并且确保已经安装了 hexo-deployer-git。

配置_config.yml

1
2
3
4
deploy:
type: git
repo: git@SERVER_IP:/home/git/blog.git # repository url
branch: master

至此,就可以按照正常流程部署了。

1
2
3
hexo clean
hexo g
hexo d