本地搭建Hexo环境

windows 本地安装git和nodejs

用git bash运行,安装hexo-cli:

1
npm install -g hexo-cli

初始化hexo,比如我要在~/blog下搭建博客

1
2
3
cd ~
hexo init blog
cd blog

之后继续安装hexo-deployer-git和hexo-server,一个用于git自动部署,一个用于本地简单的服务器。第三个是butterfly主题要用到的。

1
2
3
npm install hexo-deployer-git --save
npm install hexo-server
npm install hexo -renderer -pug hexo -renderer -stylus - -save

执行:
hexo g #或者hexo generate
hexo s #或者hexo server

就可以访问http://localhost:4000看到博客了。

然后,安装和部署了butterfly主题。

服务器部分

安装和设置git账户

#登录服务器

#安装git

1
yum install git

#新建用户,设置密码

1
2
useradd -m git
passwd git

赋与sudo权限:

1
2
chmod -v u+w /etc/sudoers
vi /etc/sudoers

#找到allow root to run any commands anywhere添加:

1
git ALL=(ALL) ALL

#改回权限

1
chmod -v u-w /etc/sudoers

#更改git文件夹权限:

1
cd /home chmod -R 755 git

#切换用户

1
su git

#建立博客文件夹

1
2
cd ~ mkdir blog
cd blog

安装和设置nginx

生成静态文件,提供给Nginx静态资源
安装nginx

1
sudo yum install -y nginx

配置server:

1
sudo vim /etc/nginx/nginx.conf 

http块的server部分root后值修改为:

/home/git/blog

启动Nginx

1
sudo service nginx start

自动化部署

自动化部署就是可以不用在服务器上执行操作,只要本地 git 推送上去,服务器就会通过git hooks 自动把内容同步到网站根目录【/home/git/blog】。

ssh登录设置

为了以后每次发布时不用输入密码,复制公钥到服务器,下面这个命令就是把公钥内容读入剪贴板。在git bash中输入:

1
clip < ~/.ssh/id_rsa.pub

登录服务器git用户,添加公钥后记得要赋予文件相应权限:

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

#粘贴然后保存

1
2
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

在自己电脑终端输入ssh git@120.XX.XX.XX,验证是否配置好ssh登录。

配置hooks。

接着上一步(git用户~目录),在服务器上创建一个裸仓库

1
2
cd /home/git
git init --bare blog.git

然后,

1
vim ~/blog.git/hooks/post-receive

写入以下内容保存

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
#
DIR_ONE=/home/git/test
DIR_TWO=/home/git/blog/public
#
git --work-tree=${DIR_ONE} clean -fd
git --work-tree=${DIR_ONE} checkout --force

#
git --work-tree=${DIR_TWO} clean -fd
git --work-tree=${DIR_TWO} checkout --force

再赋予它权限

1
chmod +x post-receive

本地打开_config.yml,最后面的deploy修改为:

1
2
3
4
deploy:
type: git
repo: git@120.XX.XX.XX:/home/git/blog.git
branch: master

试试能不能自动部署

1
hexo clean && hexo g --deploy

以上步骤仅将本地blog/public文件夹中的内容上传到云服务器。

大工告成!

总结一下:通过以上方式,可以在本地写博客以及测试,然后通过上面的deploy,一条代码直接部署到云服务器。即在本地的blog/source/_posts中写.md的文章,然后通过–deploy同步到远程分支/home/git/blog.git,之后通过hooks的设置同步到/home/git/blog,而这个文件夹及nginx server中设置的文件目录。