hexo本地自动同步到VPS

前言

常用的hexo都是使用github或者其他的代码托管平台, 如果你有一台自己的VPS,你想把hexo放到VPS上面, 可以使用hexo提供的其他的方法比如:Rsync,FTPSync等工具,甚至手动复制文件,我在尝试了这种方法之后, 发现并不好用,我已经习惯了放到github上面,我的方案是让VPS自己去github上面拉博客到自己的本地, 写一个定时脚本, 接下来就这么干

VPS安装配置git

VPS是ubuntu的系统, 接下来都是在root权限下的操作

  1. 安装git

    1
    apt-get install git
  2. 生成github的key
    用你的github帐号生成key,最好是到.ssh文件夹下面执行下面的操作,如果在别的目录下执行, 生成的文件自己手动复制到.ssh下面好管理,如果没有.ssh文件,则手动建立一个

    1
    2
    3
    4
    ssh-keygen -t rsa -C "your_email@youremail.com"
    输入id_rsa
    密码空, 回车
    再回车
  3. key注册到github
    使用sz id_rsa.pub, 将文件下到本地, 打开, 复制里面的内容到github

  4. 配置全局github帐号
    1
    2
    git config --global user.name "Your Name"
    git config --global user.email "your@email.com"

安装apache和nginx

1
2
apt-get install apache2
apt-get install nginx

首次git pull

建立/var/www/hexo文件夹, 从github拉取代码

1
2
3
4
5
6
cd /var/www
mkdir hexo
cd hexo
git init
git remote add origin git@github.com:XXXXX
git pull -u origin master:master

这样代码就拉下来了

apache+nginx部署hexo

apache设置

apache默认是监听的80端口, 我为了以后能监听多个端口, 不和nginx的80端口冲突,修改了监听的端口, 改成监听8888和9999
8888端口: 指向/var/www/html 这个是默认的路径
9999端口: 指向/var/www/hexo 我自己的hexo路径

我的apache版本是2.4.7

1.修改apaches.conf

设置路径

1
2
3
4
5
6
7
8
cd /etc/apache2
nano apache2.conf
#增加
<Directory /var/www/hexo/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

2.修改ports.conf

设置端口监听

1
2
3
4
5
6
7
8
9
10
11
12
13
cd /etc/apache2
nano ports.conf
#修改
Listen 9999
Listen 8888

<IfModule ssl_module>
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

3.修改000-default.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cd /etc/apache2/sites-available
nano 000-default.conf
#修改
<VirtualHost *:9999>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/hexo
ErrorLog ${APACHE_LOG_DIR}/error8888.log
CustomLog ${APACHE_LOG_DIR}/access8888.log combined
ServerName localhost:8888
</VirtualHost>

<VirtualHost *:8888>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName localhost:9999
</VirtualHost>

配置nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#删除默认的配置
cd /etc/nginx/
sudo rm sites-enabled/default
#给我们的hexo创建一个配置文件
sudo touch /etc/nginx/sites-available/hexo
sudo nano /etc/nginx/sites-available/hexo
# 配置hexo文件, 添加
server {
listen 80;
server_name 这里设置里自己的域名;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8888;
}
}

启动和测试

启动apache2

1
service apache restart

启动nginx

1
service nginx restart

测试

浏览器中输入
http://你的域名/

一个自动化脚本

我们在自己的电脑上写好了md, hexo d推送到github, VPS怎么去拉取github到本地
这里我想到写一个shell脚本, 每隔一段时间自动执行git pull操作

1
2
3
4
5
cd /var/www
mkdir git-pull.sh
mkdir git-pull.log
chmod -R 777 git-pull.sh
chmod -R 777 git-pull.log

脚本代码如下:

1
2
3
4
5
6
7
8
9
#!/bin/bash

echo '++++++++++++++++++++++++++'
datestr=`date '+%Y-%m-%d %H:%M:%S'`
echo 'date:'$datestr
dir=/var/www/hexo
cd $dir
git pull origin master
echo '++++++++++++++++++++++++++'

定时执行脚本

只用crontab来定期执行脚本
我这里使用每隔4个小时执行脚本(我个人觉得4个小时差不多了, 毕竟不是时时刻刻写博客)

1
2
3
4
crontab -e
# 可能让我们选择使用哪个编辑器编辑, 使用nano或者vim都可以
# 添加下面
0 */4 * * * /var/www/git-pull.sh >> /var/www/git-pull.log 2>&1

参考

How To Create a Blog with Ghost and Nginx on Ubuntu 14.04