Hexo 部署到云服务器

引子

前段时间发现自己的域名备案还是正常的,于是选择使用腾讯云服务器重新部署了博客,懒得折腾了,下面记录一下部署流程吧。

一、环境需求

1.1 本机

本机主要是安装hexo,具体教程官网已经写的很详细了,可以参考Hexo

1.2 服务器

ubuntu为例,仅需要git以及nginx,如果没有可以通过以下指令安装

1
2
sudo apt install git
sudo apt install nginx

git用于版本管理与部署,nginx用于静态博客托管。

二、创建git环境

2.1 在云服务器上创建一个git用户,用来运行git服务

1
2
adduser git
passwd git

2.2 设置 ssh 密钥登陆

1
2
3
4
su git
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
vim .ssh/authorized_keys

authorized_keys文件中添加密钥即可

2.3 创建git仓库目录

创建一个名为bloggit仓库

1
2
3
mkdir /var/repo
cd /var/repo
git init --bare blog.git

2.4 配置 git hooks

1
vim /var/repo/blog.git/hooks/post-receive

添加如下内容

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

保存退出后设置权限

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

改变 blog.git目录的拥有者为git用户

1
chown -R git:git blog.git

2.6 创建静态文件目录并将 2.3 步骤生成的git仓库链接到静态文件目录下

创建静态文件目录,链接git仓库,配置权限,这样git仓库更新便会自动同步到hexo目录下

1
2
3
mkdir /var/www/hexo
chown -R git:git /var/www/hexo
chmod -R 755 /var/www/hexo

2.7、为了安全考虑,禁用git用户的shell登录权限配置

首先你必须确保git-shell已存在于/etc/shells文件中:

  • 使用命令which git-shell判断系统是否安装了git-shell。如果已经安装,则返回git-shell的安装目录,如:/usr/bin/git-shell;如果未安装则需要安装git-shell命令,安装命令:apt install git
  • 判断shells文件是否存在,判断命令:cat /etc/shells
  • 如果文件不存在或没有/usr/bin/git-shell,则需要使用 vim 增加这个路径:
    sudo vim /etc/shells,在最后一行添加git-shell路径:
1
2
3
4
5
6
7
8
9
10
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
/usr/bin/screen
/bin/zsh
/usr/bin/zsh
/usr/bin/git-shell #添加到这里
  • 现在你可以使用chsh命令修改任一系统用户的shell权限了
    现在我们修改第一步中创建的git用户的登录权限,禁止git用户使用shell权限:
    终端中输入sudo chsh git
    然后在Login Shell [/bin/bash]: 后输入git-shell路径/usr/bin/git-shell
  • 修改完成后验证:vim /etc/passwd看看git用户是否是以git-shell结尾
1
git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell

2.8 上述步骤完成后进行测试

测试后类似如下结果即为成功

1
2
3
➜  .ssh git clone git@42.192.118.210:/var/repo/blog.git
Cloning into 'blog'...
warning: You appear to have cloned an empty repository.

2.9 可能遇到的问题

在腾讯云上最常见的问题即为ssh git@xxx失败:

1
2
➜  ssh git@xxx
git@xxx: Permission denied (publickey).

这是由于腾讯云服务器ssh默认关闭了自定义的publickey登陆,可以通过vim /etc/ssh/sshd_config进入ssh设置文件进行修改:

1
2
3
# 将如下选项取消注释设置成yes即可
PubkeyAuthentication yes #允许通过密钥登陆
PasswordAuthentication yes #允许通过密码登陆

然后重启ssh服务

1
service ssh restart

三、Hexo配置

打开hexo博客目录,编辑_config.yml文件
修改repository为:

1
2
3
4
deploy:
type: git
repository: git@ip或域名:/var/repo/blog.git
branch: master

然后执行hexo g -d将文件上传到你部署的服务器上

四、nginx配置

修改nginx配置文件,将root指向博客所在目录:

1
vim /etc/nginx/sites-available/default
1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
listen [::]:80;
root /var/www/hexo; # 修改的地方
server_name xxx.xxx # 如果需要改域名访问,修改server_name 为域名便可
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
1
2
# 重启nginx服务
service nginx restart

总结

大概内容如上,本博客便是通过如上步骤部署的,有其他疑问可以联系我。

作者

bert_cai

发布于

2020-11-16

更新于

2020-11-16

许可协议

评论