云服务器安装Hexo博客

由于之前已经在Windows上有搭建好Hexo项目,并已发布到Github Pages。现在想把项目发布到云服务器上,此文记录整个过程。

环境搭建

安装git

1
yum install git

创建git用户

1
2
3
adduser git
chmod 740 /etc/sudoers
vim /etc/sudoers

找到以下内容

1
2
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

在下面添加一行

1
git ALL=(ALL) ALL

保存退出后改回权限

1
chmod 400 /etc/sudoers

随后设置Git用户的密码,

1
2
#需要root权限
sudo passwd git

window生成公钥:

1
ssh-keygen -t rsa -C greenovia@qq.com(换成你的邮箱地址)

接着出现的一些步骤都可以回车跳过,公钥文件生成位置为C:\Users\a6929.ssh\id_rsa.pub。

切换至git用户,创建 ~/.ssh 文件夹和 ~/.ssh/authorized_keys文件,并赋予相应的权限

1
2
3
4
5
6
su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys
#将生成的公钥复制粘贴到authorized_keys
chmod 600 ~/.ssh/authorzied_keys
chmod 700 ~/.ssh

Windows本地测试连接,是否可以免密登录

1
ssh -v git@你的服务器IP

至此,Git用户添加完成

自动化部署

服务器上建立git裸库

创建一个裸仓库,裸仓库就是只保存git信息的Repository, 首先切换到git用户确保git用户拥有仓库所有权,一定要加 --bare,这样才是一个裸库。

1
2
3
su git
cd ~
git init --bare blog.git

使用 git-hooks 同步网站根目录

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

1
2
3
4
# 新建文件
vim ~/blog.git/hooks/post-receive
# 添加以下内容,--work-tree为项目部署的位置,--git-dir为git的位置
git --work-tree=/www/public/blog --git-dir=/home/git/blog.git checkout -f

保存后,要赋予这个文件可执行权限

1
chmod +x post-receive

创建–work-tree对应的文件夹

1
2
3
su root
cd ~/..
mkdir -p /www/public/blog

修改文件夹权限

1
2
3
su root
cd ~/..
chown -R git:git www #修改文件夹www所属用户为git

配置_config.yml,完成自动化部署

1
2
3
4
5
deploy:
type: git
repo: git@你的服务器地址:/home/git/blog.git //<repository url>
branch: master //这里填写分支 [branch]
message: 提交的信息 //自定义提交信息 (默认为 Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }})

保存后,测试自动部署到服务器

1
2
hexo clean
hexo g -d