Dropbox + VPS + Incrond+Hexo搭建博客小记

安装前准备

  1. 首先登陆vps需要执行如下命令更新各种依赖
  2. 为防止机器没有安装epel,先安装epel(必须安装)
  • 升级 CentOs 内核 yum -y update
  • 安装 Git yum install git-core 导入key
    1
    rpm --import http://download-i2.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6

安装epel,分别是32位和64位

1
2
rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

然后安装yum-priorities

1
yum install yum-priorities -y

安装好后用命令看下,如果成功的话输出内容里有epel字样

1
yum repolist

  1. 安装Node.js
    1
    2
    sudo yum install nodejs	
    sudo yum install npm --enablerepo=epel

安装Dropbox

1.网上给出的教程试了好几次都有问题,自己搜到了正确的姿势
参考说明:nstall Dropbox In An Entirely Text-Based Linux Environment
安装代码如下:

1
2
3
4
5
6
cd
32位
wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86"
64位
wget https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86_64-30.4.22.tar.gz
tar -xvzf dropbox-lnx.x86_64-30.4.22.tar.gz

然后执行,登录Dropbox的账号。

1
~/.dropbox-dist/dropboxd

首次打开需要你验证账户。选择有右键复制上面一段,浏览器打开,登录你的Dropbox账号,授权这台机器参与你的网盘同步,关联成功会出现如下画面,Ctrl+C一下

注意:进入连接后,一定要等刷新完毕后再点,并且不能结束终端,等到关联成功的消息。

Dropbox使用

切换到dropbox.py脚本所在位置
查看dropbox 工作状态./dropbox.py status
开始同步 ./dropbox.py start
停止同步 ./dropbox.py stop
帮助 ./dropbox.py exclude help

选择性同步文件夹

例如你不需要同步Dropbox/books/目录,进入Dropbox目录cd ~/Dropbox,运行exclude来排除books目录:

1
./dropboxy.py exclude add books #当前目录最好在Dropbox

更多不需要同步的目录:

1
./dropboxy.py exclude add book photos Public Documents #排除Dropbox目录下books, photos, Public, Documents等目录

安装hexo

  1. 在刚才上面的结束之后 ls一下看看

    1
    2
    [root@vultr ~]# ls
    Dropbox dropbox.tar.gz----这行是结果 别执行
  2. 切进去Dropbox目录

    1
    cd Dropbox
  3. 接下来创建博客的目录

    1
    2
    mkdir hexo
    cd hexo
  4. 开始正式安装hexo

    1
    2
    3
    4
    npm install hexo-cli -g   网上教程里的很多命令在256或者128内存下全部是坑,因为内存关系安装不了
    hexo init 初始化hexo的意思
    hexo generate 可缩写为:hexo g
    hexo server 可缩写为:hexo s

这时端口4000被打开了,我们能过浏览器打开地址,http://<服务器ip>:4000/. 访问测试一下看能不能看到首页,如果看不到或者结果不是OK,请排查错误。

添加防火墙例外

1
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4000 -j ACCEPT

或直接关闭防火墙

1
2
3
4
5
6
7
 临时生效,重启后复原
开启: service iptables start
关闭: service iptables stop

永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off

这个时候可以去你的Dropbox网盘里看看有没有hexo目录,并且目录结构如下

  • 下载Dropbox官方提供的一个用于管理的 Python 脚本 wget https://linux.dropbox.com/packages/dropbox.py 所有命令可以点击这里查看
  • 增加这个脚本的权限 chmod +x ./dropbox.py
  • 加入到自启动 ./dropbox.py autostart y然而实际测试发现这个在重启后 root 用户登录后没有自动启动,需要手动登录到 dbox 用户下进行启动,启动代码为./dropbox.py start 可以用 ps -e命令来查看当前进程看看有没有成功启动
  • 关闭局域网同步 ./dropbox.py lansync n话说不关应该也没事

安装并配置Nginx

注意:如果有单独数据盘,建议您先挂载数据盘,建议将网站内容、数据库放在数据盘中。如何挂载数据盘,请参考(支持阿里云、腾讯云):《如何利用脚本自动化挂载数据盘?》

  1. 安装步骤参考:安装说明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    yum -y install wget screen curl python   #for CentOS/Redhat # 
    apt-get -y install wget screen curl python #for Debian/Ubuntu wget http://aliyun-oss.linuxeye.com/oneinstack-full.tar.gz
    #阿里云用户下载
    wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
    #包含源码,国内外均可下载
    wget http://mirrors.linuxeye.com/oneinstack.tar.gz
    #不包含源码,建议仅国外主机下载
    tar xzf oneinstack-full.tar.gz
    cd oneinstack
    #如果需要修改目录(安装、数据存储、Nginx日志),请修改options.conf文件
    screen -S oneinstack
    #如果网路出现中断,可以执行命令`screen -r oneinstack`重新连接安装窗口
    ./install.sh
    #注:请勿sh install.sh或者bash install.sh这样执行
  2. 安装好之后添加虚拟主机

    1
    2
    cd oneinstack
    ./vhost.sh

3.修改Nginx配置文件
这里路径缓存你自己的虚拟主机路径,也就是你自己的域名

1
vim /usr/local/nginx/conf/vhost/blog.liangs.me.conf  (你的配置文件名)

如果只想要静态的页面

1
2
3
4
5
6
7
8
9
server
{
listen 80;
#listen [::]:80;
server_name blog.liangs.me; (你的站点域名)
index index.html index.htm index.php default.html default.htm default.php;
root /root/Dropbox/hexo/public; (hexo的目录)
...
}

如果要想实现hexo s后实时动态的页面

1
2
3
4
5
6
7
8
server {
listen 80;
server_name blog.liangs.me;

location / {
proxy_pass http://127.0.0.1:4000/;
}
}

增加文件夹权限,否则会出现[permission denied]错误无法同步文件。根据你的目录来,还有我是直接都赋予777属性(所有人可以读写运行)了以防出错,

1
2
3
chmod -R 755 /root/Dropbox/hexo/public
chown www:www /root/Dropbox/hexo/public
chmod +x /root/ /root/Dropbox/ /root/Dropbox/hexo/

然后重启nginx

1
service nginx restart

内容同步发布

  1. 安装和配置 incrond 检测文件变化。incrond 可以监控指定目录的文件指定变化(删除修改打开移动等等),并且运行指定命令。
    1
    yum install incron

启动并加入自启

1
2
service incrond start
chkconfig incrond on

修改默认编辑器为 Vi (貌似默认编辑器本来是一个 GUI,我们远程状态下没有 GUI)

1
echo 'editor = vi' >> /etc/incron.conf

这个时候使用以下命令来进行编辑

1
incrontab -e

打开后添加:

1
2
3
4
5
6
/home/ubuntu/Dropbox/hexo/source/_posts/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh
/home/ubuntu/Dropbox/hexo/source/_posts/笔记/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh
/home/ubuntu/Dropbox/hexo/source/_posts/结绳纪/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh
/home/ubuntu/Dropbox/hexo/source/_posts/拾摘/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh
/home/ubuntu/Dropbox/hexo/source/_posts/萱苏小筑/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh
/home/ubuntu/Dropbox/hexo/themes/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh

设置定时任务,方法参照这里

1
* */1 * * * sh /root/runhexo.sh

会使用到的一些命令

1
2
3
service incrond stop
service incrond start
service incrond status

最后写 runhexo 这个脚本

  • 首先我们可以用以下指令新建空文本 touch runhexo.sh 注意要在 root 目录下创建。目录要对应你在 incrontab 的里写的目录。
  • 然后打开文件进行编辑 vim /root/runhexo.sh
  • 代码如下:
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env bash
    exec 200<$0
    flock -n 200 || exit 1
    sleep 10
    cd /root/Dropbox/hexo && hexo clean && hexo g && hexo d
    cd /root/Dropbox/hexo/source/ && git add -A && git commit -m "auto commit" && git push

上面push到github还需要配置SSH等步骤,见后面的描述。
以上代码会在特定时间内只允许一个脚本实例运行。运行后会清理 Hexo 原有的静态文件, 生成新的静态文件以供读取,并且会自动传到相应的Github上的repo备份。
好了到这里就应该可以了。然后可以 debug 测试一下,并且可以关机给服务器搞个 snapshot 快照进行备份,以防以后出错 (重启后记得手动运行一下 Dropbox)。

使用hexo-hey插件为博客添加后台编辑


hexo-hey项目地址:https://github.com/nihgwu/hexo-hey
安装:

1
npm install hexo-hey --save

配置_config.yml文件
添加如下几行

1
2
3
4
5
6
7
# Admin
admin:
name: hexo
password: hey
secret: hey hexo
expire: 60*1
# cors: http://localhost:3000

运行

1
hexo serve

这个时候你的博客网站的管理后台就可以远程的在你 VPS 的 IP地址的4000端口访问到。比如 <vps的ip>:4000/admin

配置Github/Coding多账号管理SSH Key

  1. 单个网站通过Https链接,避免22端口关闭错误。
    测试https端口连通性
    1
    ssh -T -p 443 git@ssh.github.com

添加ssh配置文件

1
vim ~/.ssh/config

写入内容

1
2
3
Host github.com
Hostname ssh.github.com
Port 443

  1. 多网站多账号SSH Key配置
  • 生成Github和Coidng的SSH Key
    1
    2
    ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C “wmwwmv@gmail.com”
    ssh-keygen -t rsa -f ~/.ssh/id_rsa_coding -C "wmwwmv@163.com”

检查key是否生成

1
ls ~/.ssh

  • 添加private key
    1
    2
    ssh-add ~/.ssh/id_rsa_github
    ssh-add ~/.ssh/id_rsa_coding

如果执行ssh-add时提示”Could not open a connection to your authentication agent”,可以先执行命令:

1
ssh-agent bash

然后再运行ssh-add命令。
可以通过 ssh-add -l 来确私钥列表

1
ssh-add -l

可以通过 ssh-add -D 来清空私钥列表

1
ssh-add -D

  • 修改配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #Github
    Host github.com
    HostName ssh.github.com
    Port 443
    User wmwwmv@gmail.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_github
    #coding
    Host git.coding.net
    Hostname git-ssh.coding.net
    User wmwwmv@163.com
    Port 443
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_coding
  • 上传public key 到 GitHub/Coidng
    GitHub设置过程如下:
    登录github,点击右上方的图标,点击“Settings”


选择“SSH and GPG keys”,点击“New SSH key”,在出现的界面中填写SSH key的名称,填一个你自己喜欢的名称即可,然后将上面拷贝的 ~/.ssh/id_isa_github.pub 文件内容粘帖到 key 一栏,在点击“Add SSH key”按钮就可以了。


添加过程github会提示你输入一次你的github密码 ,确认后即添加完毕。

  • 测试
    1
    2
    3
    4
    5
    6
    # 测试github
    $ ssh -T git@github.com
    # 测试Coding
    $ ssh -T git@git.coding.net
    # 测试gitlab
    $ ssh -T git@gitlab.example.com

_config.yml配置

1
2
3
4
5
6
deploy:
type: git
repo:
github: git@github.com:wmwwmv/wmwwmv.github.io.git
coding: git@git.coding.net:shichao/xiaozhu.git
branch: master

遇到的问题

hexo deploy时重复输入用户名密码的问题

每次部署执行hexo deploy都需要输入用户名

问题原因及解决方案:
最主要的原因可能是你没有采用git@github.com

而是用https//github.com

修改后重新提交部署:

注意

  • 为了避免上传一次就重新将pulic .git文件夹就同步一次,所以在本地Dropbox上要选择性同步。
  • 想利用分布式解析国内解析到coding 国外解析到github,结果国内访问github比coding还快
    这里可以解析国内到Coding的repo解析国外到github的repo

后记

利用supervisor让hexo服务常驻后台
supervisord.conf这个文件末尾加上

1
2
[include]
files = /etc/supervisor/*.conf

新建hexo-server.conf文件
写脚本

1
2
3
4
5
6
7
8
[program:hexo-server]
command = hexo s
directory = /root/Dropbox/hexo
user=root
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/hexo.log
stderr_logfile = /var/log/supervisor/hexo_err.log

supervisor的一些命令

1
2
3
4
5
6
7
8
supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
supervisorctl start programxxx, 启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all, 停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload, 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update, 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

  • Git同步之前需要先做些准备工作:

    1
    cd /root/Dropbox/hexo/source/ && git add 404 readme.md about _drafts _posts about tags resources && git commit -m "auto commit" && git remote add origin git@github.com:wmwwmv/BlogBackup.git && git push -u origin master
  • 使用MarkdownEditor的fileshook
    命令

    1
    hexo clean && hexo g && hexo d && cd source/ && git add -A && git commit -m "auto commit" && git push

然后将第三方云设置成七牛的图床就更加完美了,不仅能拖入普遍自动生成链接,还可以自动发布。

参考

文章目录
  1. 1. 安装前准备
  2. 2. 安装Dropbox
    1. 2.1. Dropbox使用
      1. 2.1.1. 选择性同步文件夹
  3. 3. 安装hexo
  4. 4. 安装并配置Nginx
  5. 5. 内容同步发布
  6. 6. 使用hexo-hey插件为博客添加后台编辑
  7. 7. 配置Github/Coding多账号管理SSH Key
  8. 8. 遇到的问题
    1. 8.1. hexo deploy时重复输入用户名密码的问题
  9. 9. 注意
  10. 10. 后记
  11. 11. 参考