hexo部署到服务器以及多设备同步

hexo搭建博客网站详细流程

搭建流程


一、本地hexo初始化
二、服务器环境搭建
三、本地配置完成自动化部署发布博客
四、多设备同步

本地环境


依赖:

Node.js
Git

安装hexo

1
$ sudo npm install -g hexo-cli

hexo扩展插件

1
2
3

$ npm install hexo-deployer-git --save # git部署插件
$ npm install hexo-server --save # 如需本地hexo server验证可安装(非必需)

初始化hexo博客

1
2
3
4
5
6
$ hexo init "your hexo dir name"
$ cd "your hexo dir name"
$ npm install # hexo扩展插件
$ hexo new "helelo world" # 生成 hello-world.md在sources/_posts文件夹
$ hexo g # 将.md渲染成静态文件
$ hexo s # 启动hexo server

此时可以打开http://localhost:4000 若看到hexo初始页面则证明安装成功

生成ssh公钥密钥

1
2
$ cd ~/.ssh
$ ssh-keygen

添加公钥可以不用每次push都输入密码。

git config 配置

(略)

本地环境基本搭建完成。

服务器环境 (ubuntu)


git配置

安装git

创建git用户并配置仓库

1
2
3
4
5
6
7
8
9
$ adduser git
$ passwd git
$ su git
$ cd /home/git
$ mkdir blog # 一定要保证git有blog文件夹的读写权限,否则无法写入静态文件
$ mkdir repos && repos
$ git init --bare blog.git # 创建一个裸露的git仓库
$ cd repos/blog.git/hooks
$ vim post-receive # 创建hook钩子,写入如下内容
1
2
#!/bin/sh
git --work-tree=/home/git/blog --git-dir=/home/git/repos/blog.git checkout -f

修改权限

1
2
3
$ chmod +x post-receive
$ exit # 退出git登录
$ sudo chown -R git:git /home/git/repos/blog.git # 分配git用户仓库权限

可以另找空白文件夹通过git clone 测试仓库是否可用

1
$ git clone git@your_ip:/home/git/repos/blog.git

建立ssh信任,在 本地电脑 执行如下命令

1
$ ssh-copy-id -i "your is_rsa.puh path" git@"your server ip"

禁用git用户的shell登录权限,只能使用git clone,git push等操作,保证安全性。

1
2
3
4
5
6
7
8
9
10
11
 # see if `git-shell` is already in there (检查`git-shell`是否已经在shells文件中)    
$ cat /etc/shells

# make sure git-shell is installed on your system (如果没有,确定git-shell已经在你的系统里安装)
$ which git-shell

# and add the path to git-shell from last command (将上一条命令返回的路径添加进shells)
$ sudo vim /etc/shells

# 把默认的 shell 替换成 git-shell
$ sudo chsh git -s $(which git-shell)

搭建nginx服务器

安装nginx

1
2
3
4
5
6
7
8
$ cd /usr/local/src
$ wget http://nginx.org/download/nginx-*.tar.gz #查看一下最新版本
$ tar xzvf nginx-*.tar.gz
$ cd nginx-*
$ ./configure # 无ssl执行这一条,可能会报错,根据报错信息添加相应参数
$ ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module # 配置ssl执行这一条 (没有试过)
$ make && make install
$ alias nginx='/usr/local/nginx/sbin/nginx' #临时引用

配置nginx

1
2
$ cd /usr/local/nginx/conf
$ vim nginx.conf

修改root解析路径,user修改为root

1
$ nginx -s reload

自动部署配置


编辑 本地电脑 blog路径下的_config.yml文件

添加文件最后的deploy属性

1
2
3
4
deploy:
type: git
repo: git@"your server ip":/home/git/repos/blog.git
branch: hexo

在blog路径下初始化git

1
2
3
4
5
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin git@"your server ip":/home/git/repos/blog.git
$ git push -u origin master # push源文件到master分支

cd到public文件夹下,push静态页面到hexo分支

1
2
3
4
5
6
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin git@"your server ip":/home/git/repos/blog.git
$ git checkout -b hexo
$ git push -u origin hexo # push静态文件到hexo分支

登录 服务器 修改默认分支

1
2
3
4
$ cd /home/git/repos/blog.git
$ cat HEAD
ref: refs/heads/master
$ vim HEAD #修改 master 为 hexo

多设备发布博客


本地blog路径下

1
$ hexo clean && hexo g && hexo d      #观察最后的输出信息 如果track到hexo分支,则成功了

此时浏览器访问域名或服务器ip,即可看到播客网页

上传更新的源文件

1
2
3
$ git add
$ git commit -m ""
$ git push # 应该是push到master分支

其他设备修改博客

1
2
3
4
5
$ git clone -b mastergit@"your server ip":/home/git/repos/blog.git     #默认分支为hexo,因此这里需要指定分支
$ cd blog
$ npm install hexo
$ npm install
$ npm install hexo-deployer-git

这样就可以继续在其他设备上继续写博客了

以上就是hexo部署的全部流程。